用手机通过互联网实现远程控制
本文介绍一种通过安卓手机与 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 与端口号,避免设备被非法访问。







评论