如何通过Droidscript开发安卓应用向ESP32发送数据
Droidscript向ESP32传输数据最简实现流程
不用搞MQTT、公网穿透、复杂蓝牙协议那些冗余方案,同局域网下用TCP直连是代码量最少、调试成本最低的实现路径,全程3步就能跑通。
前置准备
- ESP32开发板、安装了最新版Droidscript的安卓手机
- 电脑端安装Arduino IDE,提前配置好ESP32开发板支持包
- 提前准备一个可用的2.4G WiFi(ESP32不支持部分5G频段WiFi),手机和ESP32后续要接入该网络
第一步:给ESP32刷入TCP服务端固件
打开Arduino IDE新建项目,粘贴以下代码,替换成你自己的WiFi名称和密码,选对开发板型号和串口号直接上传:
#include <WiFi.h> // 替换为你的WiFi账号密码 const char* wifiSsid = "你的WiFi名称"; const char* wifiPwd = "你的WiFi密码"; // 固定TCP服务端口,后续手机端配置要和这个值一致 const uint16_t tcpPort = 8888; WiFiServer tcpServer(tcpPort); void setup() { Serial.begin(115200); WiFi.begin(wifiSsid, wifiPwd); // 阻塞等待WiFi连接成功 while (WiFi.status() != WL_CONNECTED) delay(300); // 串口打印ESP32的局域网IP,记下来后面手机端要用 Serial.printf("ESP32联网成功,IP地址:%s\n", WiFi.localIP().toString().c_str()); tcpServer.begin(); } void loop() { WiFiClient client = tcpServer.available(); if (!client) return; String recvBuf = ""; while (client.connected()) { if (client.available()) { char c = client.read(); recvBuf += c; // 读到换行符判定为单条数据传输结束 if (c == '\n') { Serial.printf("收到手机端数据:%s", recvBuf.c_str()); client.print("数据已接收\n"); recvBuf = ""; } } } client.stop(); }
上传完成后打开串口监视器,波特率选115200,等ESP32联网后记下打印的IP地址,格式类似192.168.1.102。
第二步:Droidscript端应用开发
打开Droidscript新建空白应用,直接把默认代码替换为以下内容,把代码里的ESP32_IP改成你刚才从串口拿到的地址:
app.LoadPlugin("Network"); const netUtil = app.CreateNetwork(); let tcpClient; // 替换为串口打印的ESP32 IP,端口和固件配置保持一致为8888 const ESP32_IP = "192.168.1.102"; const ESP32_PORT = 8888; function OnStart() { // 搭建基础交互界面 const mainLay = app.CreateLayout("linear", "VCenter,FillXY"); const inputBox = app.CreateTextEdit("", 0.8, 0.2); inputBox.SetHint("输入要发送给ESP32的内容"); mainLay.AddChild(inputBox); const sendBtn = app.CreateButton("发送到ESP32", 0.4, 0.12); sendBtn.SetOnTouch(() => { const sendContent = inputBox.GetText() + "\n"; if (tcpClient && tcpClient.IsConnected()) { tcpClient.Send(sendContent); app.ShowPopup("数据发送成功"); } else { app.ShowPopup("未连接ESP32,正在尝试重连"); ConnectESP32(); } }); mainLay.AddChild(sendBtn); app.AddLayout(mainLay); // 启动ESP32连接 ConnectESP32(); } // 封装TCP连接逻辑 function ConnectESP32() { tcpClient = netUtil.CreateTCPClient(ESP32_IP, ESP32_PORT, "UTF-8"); tcpClient.SetOnConnect(() => app.ShowPopup("ESP32连接成功")); tcpClient.SetOnReceive((res) => app.ShowPopup("ESP32回应:" + res.trim())); tcpClient.SetOnDisconnect(() => app.ShowPopup("和ESP32的连接已断开")); }
点击运行即可把应用安装到手机上直接测试。
常见问题排查
- 连不上首先排查网络:必须确认手机和ESP32连同一个WiFi,且路由器关闭AP隔离,AP隔离是多数人卡关的原因,开启后同WiFi下设备无法互相访问,需要到路由器管理后台手动关闭
- 网络连通性测试可以在手机浏览器输入
http://你的ESP32IP:8888,能加载出页面(哪怕是空白页)就说明网络链路是通的 - 发送内容末尾必须加
\n,和ESP32端的结束符判断逻辑对应,不然ESP32会一直等待缓存数据,不会触发接收逻辑 - 这个方案不需要额外安装第三方插件、不需要搭建中转服务,总代码量不到200行,比网上搜到的MQTT、HTTP服务器方案门槛低很多,后续要传输控制指令、传感器数据直接在这个基础上扩展即可
内容的提问来源于stack exchange,提问作者kkdoughnut
相关产品推荐
相关产品推荐

