ESP8266智能家居(3)——单片机数据发送到mqtt服务器
1.主要思想
前期已学习如何用ESP8266连接WIFI,并发送数据到服务器。现在只需要在单片机与nodeMCU之间建立起串口通信,这样单片机就可以将传感器测到的数据:光照,温度,湿度等等传递给8266了,然后8266再对数据进行打包,发送到服务器。
51单片机和nodeMCU的连线方式如下
它们串口的两根线交叉连接,二者的USB供电端一起接在电脑的USB口上。如果它们不是用的同一套供电系统,就需要注意共地的问题!
2.代码设计
51单片机的主体代码大致如下;
主要就是测量一些数据,然后通过串口发送到nodeMCU
nodeMCU的代码如下:
#include #include #include const char* ssid = "iPhone"; //WIFI名称 自己补上你的WIFI const char* password = "12345678"; //WIFI密码 自己补上你的密码 const char* mqtt_server = "broker-cn.emqx.io"; //mqtt服务器地址 (IP/域名) 不改 const char *pubTopic="my_pubtopic"; const char *subTopic="my_subtopic"; WiFiClient espClient; PubSubClient client(espClient); char information[80]=""; int value = 0; void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { String cmd=""; for (int i = 0; i3.注意实现
51单片机发送给nodeMCU的数据,全部存在了这个数组里面
所以这个数组要足够大,至少要大于你发送的内容。不然就会导致nodeMCU出现堆栈溢出的错误。(本人在这里卡了好几个小时) 希望大家可以避免类似的错误
在nodeMCU将数据发送到服务器的同时,可以使用nodeMCU的串口,将数据打印出来,方便调试,看看是否正确的接收到了数据。如下图所示,这种是正确接收的效果。
如果通信出现错误,没有准确接收,那么它会显示一群乱码,根本看不清楚是什么!!!
如果你发现你接收到的数据总是不准确,或者总是有乱码,可以尝试调整这个延时时间
4.最终效果
如上图所示,服务器已经可以成功接收到单片机发送的数据了!!!
此时,只需要开发一个MQTT协议的手机APP,就可以实现单片机数据在手机上显示的效果!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!