本實作除了之前介紹過的Ethernet Shield(W5100)乙太網路擴充板外,新增一個2 Relay的雙電路繼電器模組,繼電器(Relay) 是一種電流控制模組,具有輸入迴路和輸出迴路,常用於自動控制電路中,能夠把較小的電流去控制較大電流的一種「自動開關」。
- 繼電器型號: Jqc/3FF/S Z, 2 Channel
- 工作電壓: 5 V DC; 負載: 10 A, AC 250 V/15 A, 125 V
- 50 x 37 x 18 mm (L * W * H); Color: Blue relays on a black PCB; Weight: 35 g
- 腳位接點:VCC:系統電源正極,GND:系統電源負極,IN1--IN2:繼電器控制端埠。
Ethernet Shield 擴充板在使用時就直接插在 Arduino UNO即可。
接著,將筆者將繼電器模組以銅柱加高的方式組合於乙太網路擴充板之上。
下列程式碼主要讓 Arduino 透過Ethernet Shield(W5100)乙太網路擴充板建立網頁伺服器,,當客戶端連線內部網址 192.168.1.97 時,回應客戶端 (瀏覽器) 一個家用電路開關設定頁面讓使用者點選,然後經由網頁表單以GET方式回傳設定參數來控制繼電器模組。.
#include <SPI.h> #include <Ethernet.h> // 設定MAC地址 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // 設定IP地址 IPAddress ip(192, 168, 0, 97); //設定DNS //IPAddress dnServer(168, 95, 1, 1); // 設定閘道 IPAddress gateway(192, 168, 0, 1); // 設定遮罩 IPAddress subnet(255, 255, 255, 0); // 初始化Ethernet程式庫,HTTP默認端口為80 EthernetServer server(80); String readString = String(50); //宣告接收字串的變數 const int Control1=2; //第一組控制接腳 const int Control2=3; //第二組控制接腳 void setup() { pinMode(Control1,OUTPUT); pinMode(Control2,OUTPUT); digitalWrite(Control1,LOW); digitalWrite(Control2,LOW); // 初始化串口通訊 Serial.begin(9600); // 開始ethernet連接,並作為服務器初始化 Ethernet.begin(mac, ip, gateway, subnet); server.begin(); Serial.print( "server is at " ); Serial.println(Ethernet.localIP()); } void loop() { // 監聽客戶端傳來的數據 EthernetClient client = server.available(); //如果有新連線請求 if (client) { Serial.println( "new client" ); //輸出網頁控制內容 client.print("<html>"); client.print("<head>"); client.print("<meta http-equiv=content-type content=text/html; charset=UTF-8>"); client.print("<style>"); client.print("body,input{font-family: verdana, Times New Roman,微軟正黑體,新細明體;}"); client.print("p{text-align:center;font-size:60px;}"); client.print("table{text-align:center;border-collapse:collapse}"); client.print("th,td,input{align:center;margin:2px;padding:10px;font-size:40px}"); client.print("th{color:white;}"); client.print("</style>"); client.print("</head>"); client.print("<body>"); client.print("<p>網路遙控電路</p>"); client.print("<table border=1 align=center width=75% height=50%>"); client.print("<tr>"); client.print("<th colspan=2 bgcolor=red>第一組電路</th>"); client.print("</tr>"); client.print("<tr>"); client.print("<td>"); client.print("<form method=get>"); client.print("<input type=hidden name=L value=0>"); client.print("<input type=submit value=開啟ON>"); client.print("</form>"); client.print("</td>"); client.print("<td>"); client.print("<form method=get>"); client.print("<input type=hidden name=L value=1>"); client.print("<input type=submit value=關閉OFF>"); client.print("</form>"); client.print("</td>"); client.print("</tr>"); client.print("<tr>"); client.print("<th colspan=2 bgcolor=orange>第二組</th>"); client.print("</tr>"); client.print("<tr>"); client.print("<td>"); client.print("<form method=get>"); client.print("<input type=hidden name=L value=2>"); client.print("<input type=submit value=開啟ON>"); client.print("</form>"); client.print("</td>"); client.print("<td>"); client.print("<form method=get>"); client.print("<input type=hidden name=L value=3>"); client.print("<input type=submit value=關閉OFF>"); client.print("</form>"); client.print("</td>"); client.print("</tr>"); client.print("</table>"); client.print("</body></html>"); // 只要通訊連線中..... while (client.connected()) { //確認客戶端有發出請求並已連接 if (client.available()) { char c = client.read(); Serial.write(c); readString.concat(c); //讀取GRT查詢參數 if (c == '\n') { //第一組電路控制判斷 if (readString.substring(8,9) == "0") digitalWrite(Control1,HIGH); else if (readString.substring(8,9) == "1") digitalWrite(Control1,LOW); //第一組電路控制判斷 else if (readString.substring(8,9) == "2") digitalWrite(Control2,HIGH); else if (readString.substring(8,9) == "3") digitalWrite(Control2,LOW); //清空判斷字串參數 readString=""; // 斷開連接 client.stop(); Serial.println( "client disonnected" ); } } } } }本實作暫時先以紅綠、兩個LED替代要控制的家電用品。