本實作除了之前介紹過的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替代要控制的家電用品。






