ESP32 Remote Control – Điều khiển ESP32/ESP8266 từ xa qua Android App
Trong chủ đề ESP32 Remote Control này, bạn sẽ cùng tìm hiểu cách để điều khiển ESP32 hoặc ESP8266 từ xa, không bị rào cản về vị trí địa lý nữa. Tính năng này khá hữu ích, đặc biệt là khi bạn cần điều khiển Relay, điều chỉnh nhiệt độ hoặc bất kỳ module nào khác từ xa.
Cụ thể, chúng ta sẽ dùng đến một phần mềm Android có tên là DroidScript để điều khiển module Relay, sử dụng mạch ESP32 và khả năng kết nối WiFi.
Chuẩn bị
- Mạch ESP32
- Điện thoại Android có cài đặt phần mềm DroidScript
- Module Relay
- Dây Jumper Female to Female (số lượng 3)
Kết nối phần cứng
Bạn tiến hành kết nối ESP32 với Relay như sau:
- GND – GND
- VCC – 5V
- IN1 – GPIO23
Bạn cũng có thể rút kết nối usb giữa ESP32 và máy tính, sau đó cấp nguồn cho ESP32 từ pin nếu muốn.
Cài thư viện – Chuẩn bị cho dự án ESP32 Remote Control
Đầu tiên, bạn cần cài tiện ích ESP32 trong ứng dụng Arduino IDE của mình. Nếu chưa thực hiện, bạn có thể theo dõi hướng dẫn sau: Cách lập trình ESP32 bằng Arduino IDE (Windows, Linux, Mac OS X)
Sau đó, bạn tiến hành cài thư viện ESPAsyncWebServer theo đường link mình đã gắn, bằng cách:
- Tải thư viện về máy dưới dạng .zip
- Mở Arduino IDE, chọn mục Sketch >> Include Library >> Add .Zip Library >> Click mở file .zip vừa tải về
Đây là thư viện giúp khởi tạo Web Server không đồng bộ qua Arduino, cho phép chúng ta kết nối WiFi để điều khiển ESP32 từ xa.
Code mẫu
Bạn truy cập theo thứ tự sau để mở code mẫu:
Sau khi mở code mẫu, bạn thay đổi SSID (tên WiFi) và password thành tên và mật khẩu WiFi của bạn. Dưới đây là code mẫu để điều khiển ESP32 từ xa bạn vừa mở:
#include "WiFi.h" #include "ESPAsyncWebServer.h" const char* ssid = "myRouter"; //replace const char* password = "myPassword"; //replace AsyncWebServer server(80); int relayPin = 23; void setup() { pinMode(relayPin, OUTPUT); digitalWrite(relayPin, HIGH); Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } Serial.println(WiFi.localIP()); server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/plain", "Hello World"); }); server.on("/relay/off", HTTP_GET , [](AsyncWebServerRequest *request){ request->send(200, "text/plain", "ok"); digitalWrite(relayPin, HIGH); }); server.on("/relay/on", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/plain","ok"); digitalWrite(relayPin, LOW); }); server.on("/relay/toggle", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/plain","ok"); digitalWrite(relayPin, !digitalRead(relayPin)); }); server.on("/relay", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/plain", String(digitalRead(relayPin))); }); server.begin(); } void loop(){}
Kế tiếp, bạn chọn đúng bảng mạch ESP32 của mình, chọn đúng cổng COM và upload code vào mạch.
Sau khi upload code, bạn mở Serial Monitor trên Arduino và nhấn nút RST trên mạch ESP32. Trên màn hình Serial Monitor sẽ hiển thị địa chỉ IP của mạch, chúng ta sẽ dùng thông tin này cho bước tiếp theo.
Làm việc với DroidScript
Mở DroidScript trên điện thoại Android và click vào create a new app, bằng cách:
- Tại giao diện ứng dụng, click vào dấu 3 chấm và nhấn vào New, đặt tên cho ứng dụng và để types là Native and Simper
- Tại giao diện Web Editor: Click vào biểu tượng grid (Apps button) và chọn New JavaScript App, đặt tên cho chúng và để type là simple, sau đó click OK.
Sau đó, copy đoạn code bên dưới vào ứng dụng, thay cho đoạn code Hello World mặc định. Sau đó, bạn điền địa chỉ IP của mạch ESP32 đã có ở bước trước đó vào code:
var url = "http://192.168.1.154"; //Called when application is started. function OnStart() { //Create a layout with objects vertically centered. lay = app.CreateLayout( "linear", "VCenter,FillXY" ); app.AddLayout( lay ); //Create a button to send request. btn = app.CreateButton( "State", 0.3, 0.1 ); btn.SetMargins( 0, 0.05, 0, 0 ); btn.SetOnTouch( btn_OnTouch ); lay.AddChild( btn ); //Create a button to send request. btnON = app.CreateButton( "Relay ON", 0.3, 0.1 ); btnON.SetMargins( 0, 0.05, 0, 0 ); btnON.SetOnTouch( btnON_OnTouch ); lay.AddChild( btnON ); //Create a button to send request. btnOFF = app.CreateButton( "Relay OFF", 0.3, 0.1 ); btnOFF.SetMargins( 0, 0.05, 0, 0 ); btnOFF.SetOnTouch( btnOFF_OnTouch ); lay.AddChild( btnOFF ); } function btn_OnTouch() { //Send request to remote server. var path = "/relay"; //var params = "data=" + data.replace("\r",""); app.HttpRequest( "get", url, path, "", HandleReply ); } function btnON_OnTouch() { //Send request to remote server. var path = "/relay/on"; //var params = "data=" + data.replace("\r",""); app.HttpRequest( "get", url, path, "", HandleReply ); } function btnOFF_OnTouch() { //Send request to remote server. var path = "/relay/off"; //var params = "data=" + data.replace("\r",""); app.HttpRequest( "get", url, path, "", HandleReply ); } //Handle the servers reply. function HandleReply( error, response ) { console.log(error); app.ShowPopup(response); }
Cách đơn giản để thực hiện việc này là mở trình duyệt web, click vào biểu tượng WiFi, sau đó nhập địa chỉ IP mà nó cung cấp cho bạn vào trình duyệt.
Demo dự án ESP32 Remote Control
Bây giờ, bạn có thể click vào các nút để thử điều khiển ESP32 từ xa. Hãy nhấn và xem kết quả nhé!
Bạn có thể bật / tắt relay qua nút ON / OFF và kiểm tra trạng thái Relay bằng nút State.
Nếu việc điều khiển ESP32 từ xa thành công, trên ứng dụng sẽ hiển thị một dòng chữ OK hoặc trạng thái báo hiệu như sau:
- Kết quả trả về là 1: Chân HIGH (Relay sẽ được tắt)
- Kết quả trả về là 0: Chân LOW (Relay sẽ được bật)
Lời kết
Trên đây là hướng dẫn chi tiết về chủ đề ESP32 Remote Control, chúc bạn thực hiện thành công! Trên Website IoTZone còn có khá nhiều bài viết hướng dẫn khác về chủ đề ESP32, hãy theo dõi nếu bạn thích nhé:
- ESP32 Web BLE – Điều khiển ESP32 từ Web qua Bluetooth Low Energy
- ESP32 CAM Car – Điều khiển robot từ xa qua Web Server
- ESP32 Timer Interrupt – Ngắt ESP32 là gì?
- Tìm hiểu ESP32 OTA (Over The Air) – Lập trình qua mạng Internet
IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers
- Website: https://www.iotzone.vn/
- Fanpage: https://www.facebook.com/Iotzonemaker
- SDT: 0364174499
- Zalo: https://zalo.me/0364174499