查看: 385|回复: 1

两个ESP8266通过云端实现远程数据交互

[复制链接]
  • TA的每日心情
    无聊
    2019-9-17 10:04
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    发表于 2019-8-23 13:18 | 显示全部楼层 |阅读模式
    本帖最后由 bemfa 于 2019-8-24 11:56 编辑

    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅者,由于订阅者可以接收消息发布者发布的消息,从而实现两个ESP8266通过云端的远程数据交互。两个ESP8266在远端通过主题(topic)进行消息耦合,也就是说 订阅者订阅了这个主题,发布者往这个主题发布消息,订阅者就可以收到消息了。

    关于发布订阅:

    订阅(订阅):订阅给定的一个主题/频道的信息。
    发布(发布)将信息发送到指定的主题/频道。

    只有订阅该主题的设备才可以收到发往该主题的消息。

    通俗的来讲:就是像邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,订阅/发布模式就是这样的原理。

    如果还不理解的话再通俗讲一下,就像生活中听收音机,要想听收音机,肯定就是调频啦,只有在正确的频道上面,我们才能听得到好听的节目,所以说订阅首先要订阅一个频道/主题,只有订阅了该主题,我们才能收到发往该频道/主题的消息。


    esp8266.jpg

    例程下载

    点击下载 https://www.lanzous.com/i5qutwh

    本demo 是利用arduino IDE开发,关于arduino IDE 的ESP8266环境配置,本论坛已经很详细,这里不多介绍,或可参考:环境配置: 点击跳转 http://bbs.bemfa.com/6/

    程序需要修改的地方:


    kittenblock中小学创客名师推荐的图形化编程软件

    ///****************需要修改的地方*****************///
    
    //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,如图所示:

    uid.png


    创建主题,在控制台,可创建主题。

    • 第一输入主题,字母或数字或字母+数字组合。
    • 点击创建主题。

    create.png

    WIFI名称为自己的路由器WIFI名称,区分大小写,写错会导致连接不上网络的。


    例程中,每两秒上传一次数据:


    kittenblock中小学创客名师推荐的图形化编程软件

        if(millis() - predataTick >= upDataTime){//上传数据
          predataTick = millis();
          
          String upstr = "";
          upstr = "cmd=2&uid="+UID+"&topic="+TOPIC+"&msg=hello_i_am_sender"+intNumber+"\r\n";
          intNumber++;
          sendtoTCPServer(upstr);
          upstr = "";
          
        }
    


    接收者接收打印数据:


    kittenblock中小学创客名师推荐的图形化编程软件

      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

    pic.png


    具体应用就要靠大家发散思维了,可以用在远程控制、设备联动、智能家居、智能玩具等等。





    该用户从未签到

    发表于 2019-8-23 17:07 | 显示全部楼层
    谢谢分享。 学习了。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    求ESP8266+0.96oled的天气代码
    求ESP8266+0.96oled的天气
    新人求助
    新人求助
    仿真出错!显示原因是这个,但是找不到该出错文件
    用Arduino制作支持ROS机器人操作系统的7轴机械臂
    用Arduino制作支持ROS机器
    参赛项目:[/backcolor] 用Arduino制作支持ROS机器人操作系统的7轴机械臂[/backcolor
    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    光敏电阻检测环境光实验
    光敏电阻检测环境光实验
    本文节选自《Arduino程序设计基础》 一些简单的电子元件就可以做传感器使用,例如我
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表