You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 10:24:22