发帖
2 0 0

arduino获取TDS数据再由ESP01发送到服务器,微信小程序显示

GUTS
注册会员

3

主题

5

回帖

195

积分

注册会员

积分
195
DIY作品 38 2 前天 09:35

我在各大网站苦苦搜寻,没有一个好的资料来叙述一下关于arduino发送数据给ESP01的通信案例,发现没有一个完整的,单片机给单片机做辅助是很常见的,于是我自己在不断探索之后,总结出了以下经验。

先说一下单片机接线:

UNO ESP01

12 RX

13 TX

3V3 VCC和EN

GND GND

UNO代码:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(13, 12); // RX, TX 通过软串口连接esp8266,

String ssid ="*****; //WIFI名称
String password="******"; //WIFI密码
String uid = "*******************"; // 用户私钥
String topic = "****"; //推送消息的主题

void setup(){ mySerial.begin(115200);
mySerial.println("AT+RST"); // 初始化重启一次esp8266
delay(1500);
echo();
mySerial.println("AT");
echo();
delay(500);
mySerial.println("AT+CWMODE=3"); // 设置Wi-Fi模式
echo();
mySerial.println("AT+CWJAP=\"" +ssid+"\",\"" + password + "\""); // 连接Wi-Fi
echo();
delay(1000);

}

String msg = "";
 //数据用#号包裹,方便app端根据#号做字符串切割,不理解的百度=C语言split分割字符串
 msg = "#"+String(tdsValue,0)+"#";

ESP01 不需要代码

它要做的是AT指令的接收:

esp8266连接到usb调试工具,通过串口可以进行调试

1、发AT测试esp8266是否正常

2、发AT+CWMODE=3设置路由器模式 1 station模式 2 AP路由器模式 3 station+AP混合模式

3、发AT+CWJAP="WiFi","code"设置模块WIFI名称,WIFI密码

4、发AT+CIPMODE=1 开启透明传输模式

5、发AT+CIPSTART="TCP","bemfa.com",8344连接服务器和端口

6、发AT+CIPSEND进入透传模式,下面发的都会无条件传输

7、发cmd=1&uid=******************************************=*********** 如果需要订阅主题,发送这个订阅指令,发送完订阅,控制台推送的话,8266就可以收到推送消息了

8、发cmd=2&uid=********************************************&msg=#******#如果需要推送指令,发布数据指令

9、发cmd=0&msg=ping发送心跳 ,发任意数据都相当于心跳,随意发点啥就行,60s内不发,连接就会断开,就收不到订阅消息了

微信小程序端代码:js(提供部分为大家参考)

gettds(){

//获取水硬度值,屏幕初始化时,未订阅收到水硬度时,先去主动获取值

//api 接口详细说明见巴法云接入文档

var that = this

wx.request({

url: '\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*', //状态api接口

data: {

  uid: that.data.uid,

  topic: that.data.tdstopic,

  num:1

},

header: {

  'content-type': "application/x-www-form-urlencoded"

},

success (res) {


  console.log(res)

  if(res.data.msg.indexOf("#") != -1){//如果数据里包含#号,表示获取的是传感器值,因为单片机上传数据的时候用#号进行了包裹

    //如果有#号就进行字符串分割

    var all\_data\_arr = res.data.msg.split("#"); //分割数据,并把分割后的数据放到数组里。

    console.log(all\_data\_arr)//打印数组

    that.setData({ //数据赋值给变量

      tds:all\_data\_arr[1],//赋值水硬度

      dataTime:res.data.time

    })


  }

}

})

},

最终效果:

image.png

──── 0人觉得很赞 ────

使用道具 举报

前天 09:37
CSDN吃相太难看,我自己的文章,当我用小号来查看时,居然告诉我要充会员,但是我本人是免费开源的,我自己看我自己的博客跟我说要收钱!!!!!!!!!!
GUTS 发表于 2025-4-14 09:37
CSDN吃相太难看,我自己的文章,当我用小号来查看时,居然告诉我要充会员,但是我本人是免费开源的,我自己 ...

支持
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28427 个
  • 话题数: 40506 篇