Quá trình giao tiếp, điều khiển gồm 2 phần :
- Webserver nhận tín hiệu trạng thái từ cơ cấu chấp hành để quản lý, giám sát:
Hình 4.2 Sơ đồ truyền tín hiệu từ cơ cấu chấp hành đến Webserver sử dụng ESP8266
Nguyên lý: Khi cĩ thiết bị được bật/tắt thủ cơng, tín hiệu sẽ được gửi đến ESP8266 bằng giao tiếp Serial, sau đĩ được gửi lên Webserver để hiển thị trạng thái thiết bị.
- Tín hiệu điều khiển từ WEB truyền về điều khiển các cơ cấu chấp hành:
Hình 4.3 Sơ đồ truyền tín hiệu từ Webserver đến cơ cấu chấp hành sử dụng ESP8266
Nguyên lý: Khi cĩ thao tác bật/tắt trên nút ảo của webserver thì tín hiệu sẽ truyền về ESP8266, ESP sẽ xử lý và đưa ra tín hiệu điều khiển cơ cấu chấp hành.
4.4.2 Nguyên lý điều khiển – Truyền nhận dữ liệu sử dụng Ethernet Shield
29
- Tín hiệu điều khiển từ WEB truyền về điều khiển các cơ cấu chấp hành:
Hình 4.4 Sơ đồ truyền tín hiệu từ Webserver đến cơ cấu chấp hành sử dụng Ethernet
Nguyên lý: Khi thực hiện các thao tác Bật/Tắt bằng các nút ảo trên giao diện Webserver, tín hiệu được truyền về server tại Ethernet Shiled, do module Ethernet Shiled được gắn trực tiếp với vi điều khiển Arduino và giao tiếp Serial đưa tín hiệu tới vi điều khiển, tại đây dữ liệu được xử lý so sánh để biết tín hiệu điều khiển là của thiết bị nào và cấp lệnh điều khiển cơ cấu chấp hành đĩ.
- Webserver nhận tín hiệu trạng thái từ cơ cấu chấp hành để quản lý, giám sát:
Hình 4.5 Sơ đồ truyền tín hiệu từ cơ cấp chấp hành đến Webserver sử dụng Ethernet
Nguyên lý: Hồn tồn tương tự như trên, nhưng chiều đi của tín hiệu ngược lại, khi một cơ cấu chấp hành được bật/tắt thủ cơng, sẽ cĩ tín hiệu truyền về vi điều khiển và do Ethernet Shield gắn trực tiếp với vi điều khiển nên tín hiệu truyền đến server của Ethernet bằng giao tiếp Serial, cuối cùng tín hiệu được truyền lên Webserver để Webserver cập nhật hiển thị trạng thái các thiết bị.
4.4.3 Ví dụ về điều khiển, giám sát thiết bị bằng Webserver
Chức năng: bật/tắt thiết bị bằng webserver: Phần cứng:
- ESP8266 NodeMCU CP2102
- Relay 4 kênh 5VDC
Sơ đồ kết nối:
Hình 4.6 Sơ đồ kết nối thiết bị
Code hoạt động:
30 #include <ESP8266WebServer.h>
const char* ssid = "P503"; // Enter SSID here
const char* password = "caovan99"; //Enter Password here ESP8266WebServer server(80);
uint8_t LED1pin = D4; bool LED1status = LOW; uint8_t LED2pin = D2; bool LED2status = LOW; uint8_t LED3pin = D3; bool LED3status = LOW; uint8_t LED4pin = D1; bool LED4status = LOW; void setup() { Serial.begin(115200); delay(100); pinMode(LED1pin, OUTPUT); pinMode(LED2pin, OUTPUT); pinMode(LED3pin, OUTPUT); pinMode(LED4pin, OUTPUT); Serial.println("Connecting to "); Serial.println(ssid);
//connect to your local wi-fi network WiFi.begin(ssid, password);
//check wi-fi is connected to wi-fi network while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected..!"); Serial.print("Got IP: "); Serial.println(WiFi.localIP());
server.on("/", handle_OnConnect);// nút ảo được kết nối server.on("/led1on", handle_led1on);//led bật -> nút ảo bật server.on("/led1off", handle_led1off);
server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off); server.on("/led3on", handle_led3on);
31 server.on("/led3off", handle_led3off); server.on("/led4on", handle_led4on); server.on("/led4off", handle_led4off); server.onNotFound(handle_NotFound); server.begin();
Serial.println("HTTP server started"); } void loop() { server.handleClient(); if(LED1status==HIGH) {digitalWrite(LED1pin, HIGH);} else {digitalWrite(LED1pin, LOW);} if(LED2status==HIGH) {digitalWrite(LED2pin, HIGH);} else {digitalWrite(LED2pin, LOW);} if(LED3status==HIGH) {digitalWrite(LED3pin, HIGH);} else {digitalWrite(LED3pin, LOW);} if(LED4status==HIGH) {digitalWrite(LED4pin, HIGH);} else {digitalWrite(LED4pin, LOW);} } void handle_OnConnect() {
LED1status = LOW;//ban đầu led 1 tắt LED2status = LOW;
LED3status = LOW; LED4status = LOW;
server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status,LED4status)); }
void handle_led1on() {//nút ảo bật LED1status = HIGH;
server.send(200, "text/html", SendHTML(true,LED2status,LED3status,LED4status)); }
32 LED1status = LOW;
server.send(200, "text/html", SendHTML(false,LED2status,LED3status,LED4status)); }
void handle_led2on() { LED2status = HIGH;
server.send(200, "text/html", SendHTML(LED1status,true,LED3status,LED4status)); }
void handle_led2off() { LED2status = LOW;
server.send(200, "text/html", SendHTML(LED1status,false,LED3status,LED4status)); }
void handle_led3on() { LED3status = HIGH;
server.send(200, "text/html", SendHTML(LED1status,LED2status,true,LED4status)); }
void handle_led3off() { LED3status = LOW;
server.send(200, "text/html", SendHTML(LED1status,LED2status,false,LED4status)); }
void handle_led4on() { LED4status = HIGH;
server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status,true)); }
void handle_led4off() { LED4status = LOW;
server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status,false)); }
void handle_NotFound(){
server.send(404, "text/plain", "Not found"); }
String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat,uint8_t led4stat){ String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>Remote Control Using Wi-Fi</title>\n";
ptr +="<style>html {font-family: Helvetica; display: inline-block; margin: 0px auto; text- align: center;}\n";
33 20px}\n";
ptr +=".button {display: block;width: 100px;background-color: #1abc9c;border: none;color: white;padding: 10px 20px;text-decoration: none;font-size: 20px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
ptr +=".button-on {background-color: #1abc9c;}\n"; ptr +=".button-on:active {background-color: #16a085;}\n"; ptr +=".button-off {background-color: #34495e;}\n"; ptr +=".button-off:active {background-color: #2c3e50;}\n"; ptr +="p {font-size: 20px;color: black;margin-bottom: 10px;}\n"; ptr +="</style>\n";
ptr +="</head>\n"; ptr +="<body>\n";
ptr +="<h1> Điều khiển không dây sử dụng Wi-Fi </h1>\n";
//ptr +="<h1> Smart Home By Son Nguyen</h1> \n";
ptr +="<h1> Thiết bị điện</h1> \n";
if(led1stat)
{ptr +="<p>Thiết bị 1: Tắt</p><a class=\"button button-off\" href=\"/led1off\">Bật</a>\n";}
else
{ptr +="<p>Thiết bị 1: Bật</p><a class=\"button button-on\" href=\"/led1on\">Tắt</a>\n";}
if(led2stat)
{ptr +="<p>Thiết bị 2: Bật</p><a class=\"button button-off\" href=\"/led2off\">Bật</a>\n";}
else
{ptr +="<p>Thiết bị 2: Tắt</p><a class=\"button button-on\" href=\"/led2on\">Tắt</a>\n";}
if(led3stat)
{ptr +="<p>Thiết bị 3: Bật</p><a class=\"button button-off\" href=\"/led3off\">Bật</a>\n";}
else
{ptr +="<p>Thiết bị 3: Tắt</p><a class=\"button button-on\" href=\"/led3on\">Tắt</a>\n";}
if(led4stat)
{ptr +="<p>Thiết bị 4: Bật</p><a class=\"button button-off\" href=\"/led4off\">Bật</a>\n";}
else
{ptr +="<p>Thiết bị 4: Tắt</p><a class=\"button button-on\" href=\"/led4on\">Tắt</a>\n";}
ptr +="</body>\n"; ptr +="</html>\n"; return ptr;
34 }
Giao diện Webserver:
Đầu tiên ta truy cập vào mạng Lan đã cài đặt cho ESP, sau đĩ truy cập vào địa chỉ IP hiện ra ở màn hình Serial Monitor trong phần mềm Arduino IDE, ta sẽ truy cập vào giao diện web như Hình 4.7.
Hình 4.7 Giao diện Web điều khiển sử dụng ESP8266
Khi ta nhấn bật thiết bị thì thiết bị sẽ được bật và trạng thái trên Web cũng được cập nhật.
Hình 4.8 Giao diện khi bật Relay 1 và Relay 2
35
CHƯƠNG 5.THIẾT KẾ, CHẾ TẠO MƠ HÌNH THỰC NGHIỆM