两个ESP8266通过云端实现远程数据交互
本帖最后由 bemfa 于 2020-9-8 17:16 编辑原理简述
利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅者,由于订阅者可以接收消息发布者发布的消息,从而实现两个ESP8266通过云端的远程数据交互。两个ESP8266在远端通过主题(topic)进行消息耦合,也就是说 订阅者订阅了这个主题,发布者往这个主题发布消息,订阅者就可以收到消息了。
关于发布订阅:
订阅(订阅):订阅给定的一个主题/频道的信息。
发布(发布)将信息发送到指定的主题/频道。
只有订阅该主题的设备才可以收到发往该主题的消息。
通俗的来讲:就是像邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,订阅/发布模式就是这样的原理。
如果还不理解的话再通俗讲一下,就像生活中听收音机,要想听收音机,肯定就是调频啦,只有在正确的频道上面,我们才能听得到好听的节目,所以说订阅首先要订阅一个频道/主题,只有订阅了该主题,我们才能收到发往该频道/主题的消息。
例程下载
点击下载 https://www.lanzous.com/i5qutwh
本demo 是利用arduino IDE开发,关于arduino IDE 的ESP8266环境配置,本论坛已经很详细,这里不多介绍,或可参考:环境配置: 点击跳转 http://bbs.bemfa.com/6/程序需要修改的地方:
///****************需要修改的地方*****************///
//WIFI名称,区分大小写,不要写错
#define DEFAULT_STASSID"PDCN"
//WIFI密码
#define DEFAULT_STAPSW "air123456"
//用户私钥,可在控制台获取,修改为自己的UID
String UID = "4d9ec352e0376f2110a0c601a2857225";
//主题名字,可在控制台新建
String TOPIC = "mysender";
///*********************************************///
两个程序都应该修改的,WIFI名称和密码区分大小写,主题topic也区分大小写,两个程序主题应该保持一致,这样才可以一个往主题发消息,一个接收主题消息。
下载的压缩包里有两个程序,一个发送者,一个接收者,使用有问题的话欢迎留言。
在巴法创客云控制台http://www.cloud.bemfa.com/tcpfast.php 新建一个主题,主题名字随意,例如mysender,本实例用用mysender,使用示例代码时应修改为自己的主题名字,字母或数字或字母加数字组合。UID为用户私钥,在 巴法创客云控制台http://www.cloud.bemfa.com/tcpfast.php 注册登陆后可获得。
登陆完成后,可在控制台看到自己的私钥UID,如图所示:
创建主题,在控制台,可创建主题。
[*]第一输入主题,字母或数字或字母+数字组合。
[*]点击创建主题。
WIFI名称为自己的路由器WIFI名称,区分大小写,写错会导致连接不上网络的。
例程中,每两秒上传一次数据:
if(millis() - predataTick >= upDataTime){//上传数据
接收者接收打印数据:
if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200))
{//data ready
TCPclient.flush();
Serial.println("Recieve: ");
Serial.println(TcpClient_Buff);
TcpClient_Buff="";
TcpClient_BuffIndex = 0;
}
如果路由器有网络的话,两个ESP8266就会连接到网络中,一个往服务器的一个主题发送消息,一个从云端的主题中接收数据,从而实现了两个ESP8266通过云端的远程数据交互。
可以通过串口调试助手查看两个ESP8266数据发送和数据接收的日志情况,如下图:
波特率115200
具体应用就要靠大家发散思维了,可以用在远程控制、设备联动、智能家居、智能玩具等等。
[*]教程 = arduino连接ESP8266-01给微信发消息,消息提醒等
[*]教程 =(可远程)ESP8266读DHT11温湿度,APP Inventor 制作app实时显示
[*]教程 =ESP8266给微信发消息,超阈值报警,消息提醒等
[*]教程 =(可远程)App Inventor编写安卓应用程序控制ESP8266
[*]教程 = 两个ESP8266通过云端实现远程数据交互
[*]教程 =利用天猫精灵控制NodeMCU(ESP8266)
[*]教程 = arduino+ESP8266-01制作数据监测系统+手机App实时显示
[*]教程 = esp32-cam拍照上传到云平台,http协议传输
[*]教程 = 巴法云 之Google 智能语音 控制 ESP8266
[*]教程 = 定时控制esp8266----(远程控制)
[*]教程 =(开源)微信小程序控制esp8266,可远程
谢谢分享。 学习了。:) 想问问代码里面的发送心跳有什么作用。。具体位置在sender的145行的位置,还有就是cmd=0和cmd=2的意思是什么 luojunwen 发表于 2020-8-29 16:23
想问问代码里面的发送心跳有什么作用。。具体位置在sender的145行的位置,还有就是cmd=0和cmd=2的意思是什 ...
因为要保存长连接,以便随时可以收到消息,保持长连接就需要心跳包了,发送任何消息都算心跳。cmd=0当然也算心跳,cmd=2是发布订阅中的发布消息,cmd=1是发布订阅模式中的订阅消息,具体可参考接入文档,里面有协议详细说明, 最新下载链接:https://cloud.bemfa.com/zip/twoESP8266.zip
页:
[1]