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
Kết nối phần cứng cho dự án ESP32 Remote Control
Kết nối phần cứng cho dự án ESP32 Remote Control

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.

Tải thư viện - Chuẩn bị cho dự án ESP32 Remote Control
Tải thư viện – Chuẩn bị cho dự án ESP32 Remote Control

Code mẫu

Bạn truy cập theo thứ tự sau để mở code mẫu:

Mở code mẫu dự án ESP32 Remote Control
Mở code mẫu dự án ESP32 Remote Control

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é!

Demo dự án điều khiển ESP32 từ xa
Demo dự án điều khiển ESP32 từ xa

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é:

IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *