用手機通過互聯網實現遠程控制
本文介紹一種通過安卓手機與 ESP32 Wi-Fi 模塊,借助互聯網遠程控制設備(開關狀態) 的方案。前提是 ESP32 已接入無線路由器,實現全球任意地點訪問遠程設備。典型應用包括:花園灑水裝置、空調開關、監控攝像頭啟停等。
方案中,ESP32 Wi-Fi 模塊通過無線路由器接入互聯網,其一個輸入 / 輸出引腳(13 號引腳)經接口連接受控設備。本文以串聯 210Ω 電阻的 LED 燈為例,將其接入 13 號引腳(見圖 1),通過安卓手機控制 LED 亮滅。需注意:ESP32 為 3.3V 電平器件,信號為 3.3V 邏輯電平。
所需元器件
ESP32 開發板:1 塊(2.4GHz 雙模 Wi-Fi + 藍牙,雙核,配 USB 線)
LED 燈:1 個
210Ω 電阻:1 個
接線示意圖

(圖 1:電路接線圖)
ESP32 的 GPIO13 引腳 → 串聯 210Ω 電阻 → LED 正極
LED 負極 → GND(接地)
ESP32 Wi-Fi 模塊說明
ESP32 采用 3.3V 邏輯電平。正常工作時,Vin 引腳可接入 5V~12V 穩壓電源(優先選 5V,減少板載穩壓器功耗);程序燒錄時,需通過 USB 線連接電腦,嚴禁同時接入兩種電源。簡易供電方案:使用帶 USB 接口的充電寶供電。
ESP32 開發環境搭建
用 USB 線將 ESP32 連接至電腦(Windows 系統),進入設備管理器→其他設備,找到 “CP2102 USB 轉串口控制器”,右鍵選擇 “更新驅動程序”,按提示完成安裝;若自動更新失敗,需手動下載驅動安裝。安裝后,設備管理器會顯示 ESP32 對應的 COM 端口號,記錄該端口。
打開 Arduino IDE,進入工具→開發板管理器,安裝 “Espressif Systems 發布的 ESP32” 插件;
進入文件→首選項,在 “附加開發板管理器網址” 欄填入 ESP32 官方鏈接,完成環境配置。
ESP32 程序代碼
本方案中,ESP32 作為服務器端,手機作為客戶端連接;ESP32 工作在 STA 模式(站點模式),需配置靜態 IP 地址。操作步驟:查詢路由器下所有設備 IP,選取未占用 IP(修改最后一位)作為 ESP32 服務器 IP;端口號選擇 32767~65535 之間的未占用端口。
連接 ESP32 至電腦,打開 Arduino IDE,選擇對應 ESP32 開發板型號與 COM 端口,輸入以下代碼,編譯并上傳(上傳失敗時可按住開發板 BOOT 鍵重試;Arduino 程序文件需放在同名文件夾內):
cpp
運行
// ESP32工作在STA模式,配置靜態IP,需設置端口轉發#include <WiFi.h>#define EspPortServ xxxxx // 填寫自定義端口號// 替換為你的路由器Wi-Fi賬號密碼const char* ssid = ".........." ;const char* password = "........." ;WiFiServer server(EspPortServ); // STA模式服務器WiFiClient client;// ESP32靜態IP配置(四段用逗號分隔,非點號)IPAddress localIP(xxx, xxx, xxx, xxx);IPAddress gateway(xxx, xxx, xxx, xxx);IPAddress subnet(xxx, xxx, xxx, xxx);char ch;int LED = 13; // LED接GPIO13void setup() {
pinMode(LED, OUTPUT);
Serial.begin(115200);
// 配置靜態IP
if (!WiFi.config(localIP, gateway, subnet)) {
Serial.println("STA模式靜態IP配置失敗");
}
// 連接Wi-Fi
Serial.println("ESP32已設為服務器端!");
Serial.print("正在連接Wi-Fi:");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// 輸出服務器IP
Serial.println("");
Serial.println("Wi-Fi連接成功");
Serial.print("服務器IP地址:");
Serial.println(WiFi.localIP());
server.begin();}void loop() {
// 等待客戶端連接
client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
ch = client.read();
Serial.write(ch); // 串口監視器打印數據
// 指令處理
switch (ch) {
case '1':
digitalWrite(LED, HIGH);
client.print("ON");
break;
case '0':
digitalWrite(LED, LOW);
client.print("OFF");
break;
}
}
}
}
delay(500);}
安卓手機 APP 開發
采用MIT App Inventor 平臺開發 APP,步驟如下:
注冊谷歌賬號,登錄平臺:https://login.appinventor.mit.edu/login
關閉歡迎界面,點擊新建項目,命名為 “Remote_Control(遠程控制)”;
界面設計(左側為組件面板、中間為預覽區、右側為組件列表與屬性欄):
標題設置:選中 “Screen1”,屬性欄修改標題為 “遠程控制”;
布局 1:拖入水平布局(HorizontalArrangement),屬性設為水平居中、垂直居中、高度 10%、寬度鋪滿;內部拖入兩個按鈕:ON 按鈕(btn_on)、OFF 按鈕(btn_off),中間用空白標簽占位;
布局 2:拖入水平布局,內部添加狀態標簽(lbl_status),初始文字為 “未連接”;
布局 3:拖入水平布局,添加公網 IP 標簽、IP 輸入框(txt_public_ip)、端口標簽、端口輸入框(txt_serv_port);
布局 4:拖入水平布局,添加保存按鈕(btn_save)、關閉按鈕(btn_close)、連接按鈕(btn_connect);
非可視組件:拖入本地數據庫(TinyDB)、導入擴展組件
ClientSocketAI2.aix(網絡通信)、com.puravidaapps.TaifunTools.aix(屏幕常亮)。
代碼邏輯編寫(積木模式)
點擊界面頂部Blocks(積木),通過拖拽組件積木實現邏輯:
全局變量定義:創建字符串變量
public_ip(存儲公網 IP)、數值變量serv_port(存儲端口號);初始化加載:APP 啟動時,從 TinyDB 讀取保存的 IP 與端口,填入對應輸入框,并保持屏幕常亮;
保存功能:點擊 “保存” 按鈕,將輸入框內的 IP 與端口存入 TinyDB;
連接功能:點擊 “連接” 按鈕,配置客戶端 IP 與端口,發起網絡連接;連接成功狀態標簽顯示 “已連接”,失敗顯示 “未連接”;
控制功能:點擊 “ON” 按鈕發送指令 “1”,點擊 “OFF” 按鈕發送指令 “0”;
數據接收:接收 ESP32 返回的 “ON/OFF” 狀態,更新狀態標簽;
關閉 APP:點擊 “關閉” 按鈕,退出應用。

安卓手機安裝 APP
手機應用商店下載MIT AI2 Companion;
電腦端 App Inventor 界面,點擊Build→安卓應用(.apk),編譯生成二維碼;
手機打開 MIT AI2 Companion,掃描二維碼,按提示完成 APP 安裝;
打開 APP,輸入路由器公網 IP(瀏覽器訪問whatismyip.com查詢)、ESP32 端口號,點擊 “保存”→“連接”,連接成功后即可控制 LED 亮滅。
路由器端口轉發配置
公網 IP 為路由器 IP,需配置端口轉發,將外網請求轉發至 ESP32:
瀏覽器輸入路由器管理地址(如 192.168.1.1),輸入賬號密碼登錄;
進入應用→高級 NAT→虛擬服務器→添加:自定義服務名,填寫 ESP32 靜態 IP,啟用端口轉發,外部端口與服務器端口均填 ESP32 端口號,協議選 TCP,保存設置;
開啟DMZ 主機:填寫 ESP32 靜態 IP,保存生效。
測試與說明
給 ESP32 通電(充電寶即可),手機 APP 輸入公網 IP 與端口,連接成功后,點擊 ON/OFF 按鈕,即可遠程控制 LED;
注意事項:路由器重啟后公網 IP 會變更,需重新查詢填寫;建議辦理靜態公網 IP避免頻繁修改;需定期檢測網絡連接狀態(本文為簡化流程未添加);
安全提示:妥善保管公網 IP 與端口號,避免設備被非法訪問。







評論