Home » iot
Điều khiển thiết bị bằng điện thoại di động sử dụng ESP8266 server
Chuẩn bị
1. Mạch thu phát WiFi ESP8266 MCU.
2. Module Relay.
3. Cài đặt phần mềm Arduino.
4. Phần mềm điều khiển thiết bị trên điện thoại Android (Q.Q myHome DNS): CHPlay
Thực hiện:
Ta điều khiển 4 đèn qua 4 relay (1->4)
Relay sẽ được đóng ngắt qua các chân tín hiệu đầu ra của ESP8266 lần lượt là (Chân GPIO14-GPIO12-GPIO13-GPIO15).
Ghép mạch theo sơ đồ:
Download code ESP8266:
https://github.com/ngnxuanhoa/ESP8266_WebServer
Tìm đến dòng lệnh:
const char* ssid = "YourWiFi";
const char* password = "Passowrd";
Khai báo đầu ra Output
Tags:
Học tập, iot
1. Mạch thu phát WiFi ESP8266 MCU.
Sơ đồ chân đầu ra của ESP
2. Module Relay.
3. Cài đặt phần mềm Arduino.
4. Phần mềm điều khiển thiết bị trên điện thoại Android (Q.Q myHome DNS): CHPlay
Thực hiện:
Ta điều khiển 4 đèn qua 4 relay (1->4)
Relay sẽ được đóng ngắt qua các chân tín hiệu đầu ra của ESP8266 lần lượt là (Chân GPIO14-GPIO12-GPIO13-GPIO15).
Ghép mạch theo sơ đồ:
https://github.com/ngnxuanhoa/ESP8266_WebServer
Tìm đến dòng lệnh:
const char* ssid = "YourWiFi";
const char* password = "Passowrd";
Đổi tên Wifi và mật khẩu theo WiFi nhà bạn.
Mở phần mềm myHomeDNS ra và điều khiển thiết bị.
5. Code cho ESP8266:
File: ESP8266_WebServer.ino
1. Khai báo thư viện :
#include <ESP8266WiFi.h>2. Khai báo thông tin WiFi (SSID và Passwrod):
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "YourWiFi";3. Khai báo địa chỉ IP tĩnh để truy cập vào Webserver:
const char* password = "Passowrd";
IPAddress ip(192,168,1,200);4. Khai báo cổng GPIO đầu ra (Ouput) để điều khiển rơ le:
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
const int output1 = 14;5. Đặt các biến device để truyền trạng thái thiết bị là ON (true) hay OFF (false):
const int output2 = 12;
const int output3 = 13;
const int output4 = 15;
boolean device1 = false;6. Khai báo hàm hiển thị Web server dạng html:
boolean device2 = false;
boolean device3 = false;
boolean device4 = false;
void handleRoot()7. Server chạy và hiển thị qua chuỗi string cmd:
server.send(200, "text/html", cmd)8. Nếu device là true thì Server sẽ hiển thị deviceON và Button hiển thị ON, nếu là false thì Device là OFF và Button hiển thị OFF:
if(device1){9. Kiểm tra trong chuỗi request từ client gửi về server có chứa dữ liệu Device hay không (bắt sự kiện thao tác bấm vào nút Button), so sánh dữ liệu đó là ON hay OFF sẽ bật (LOW), tắt (HIGH) thiết bị tương ứng:
cmd +=("<br/>Device0ON");
cmd +=("<form menthod='get'><input class='button' type='submit' name='Device1' value='ON' ></form>");
}
else{
cmd +=("<br/>Device0OFF");
cmd +=("<form menthod='get'><input class='button' type='submit' name='Device1' value='OFF' ></form>");
}
if(server.hasArg("Device1")){ // kiểm tra trong chuỗi request từ client gửi về server có chứa dữ liệu với tên Device1 không10. Hàm void setup(void):
String dev1 = server.arg("Device1"); // Lấy dữ liệu của Device1.
if(dev1 == "OFF"){ // nếu dữ liệu chứa bằng "OFF"
digitalWrite(output1, LOW); //Bật thiết bị 1
device1 = true;}
else{
digitalWrite(output1, HIGH);
device1 = false;}
}
Khai báo đầu ra Output
pinMode(output1, OUTPUT);Ghi chân output mức HIGH (3.3v) để tắt rơ le .
digitalWrite(output1, HIGH);Kết nối WiFi và thiết lập cấu hình IP tĩnh:
WiFi.begin(ssid, password); --> ssid là địa chỉ WiFi, password là mật khẩu WiFi.config(ip, gateway, subnet); --> Thông tin ip tĩnh được thiết lập ở mục 3Kết nối WiFi thất bại sẽ sử dụng vòng lặp While để in dấu .....:
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }Server lắng nghe các sự kiện truy cập "server.on"
server.on("/", handleRoot); --> http://192.168.1.200/ Hiển thị trang chủ
server.on("/socket0On", [](){ --> http://192.168.1.200/socket0OnBật server:
server.send(200, "text/plain", "device1 = ON"); --> Gửi lên server thông tin thiết bị
Serial.println("device1 = ON");
digitalWrite(output1, LOW); --> Ghi xuống chân output mức thấp (0V) --> Bật Rơ le
device1 = true;
});
server.begin();Cuối cùng chạy server trong vòng lặp loop:
void loop(void){
server.handleClient();
}