赞
踩
我在各大网站苦苦搜寻,没有一个好的资料来叙述一下关于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
})
}
}
})
},
最终效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。