• ESP8266 SDK开发: 物联网篇-安装MQTT服务器,ESP8266连接MQTT服务器实现通信控制


    前言

    物联网是个很广泛的范畴

    其实说白了就是   物 -- 网络

    其中涉及的知识其实是数不胜数,太广泛了...

    但是呢!基本上离不开的就是远程通信控制

    为了实现设备和手机/上位机/网页之间通信

    而且要做到一对多或者多对一进行通信

    那么必须有个中间件

    这个中间件作为数据的转发站

    那么使用最为普遍的有两个

    1. WebSocket

    2.MQTT

    其实这两个家伙都是在 TCP的基础上再进行的封装

    其实就是TCP通信

    不过WebSocket是这样来的

    TCP -- http -- WebSocket

    而MQTT就是个TCP服务器

    TCP -- MQTT

    如果想深入了解MQTT,请看看下面的文章链接

    https://www.cnblogs.com/yangfengwu/p/11762642.html

    安装MQTT软件

    我给大家准备好了安装在Windows上的安装包

    请参考这篇文章安装到自己的本地电脑

    https://www.cnblogs.com/yangfengwu/p/10547024.html

    注意:文章上是安装到了我的云端电脑上

    大家测试安装到自己本地电脑上就可以

    这是我安装的

    我就用控制台模式启动,然后测试

     

     

    测试MQTT软件是否可以通信

    1.查看本机IP地址

    2.打开调试助手测试

    只要能自己发自己收,就可以了

    让8266连接MQTT

    注:我是用的这个工程里面的文件

    这是官方提供的,不过有个错误

    大家看没看我写的  

    ESA2GJK1DH1K基础篇: 来吧! 彻底了解一下MQTT

    在订阅时如果订阅失败返回的标识不变,只是消息等级会是0x80

    故:官方那样做即使订阅时失败的,还是会认为是成功!

    修改如下:

    1.把 "包"里面的文件按照下面拷贝

    2.添加头文件,定义一个mqtt结构体变量

    #include "driver/mqtt.h"
    
    
    MQTT_Client mqttClient;

    3.编写连接,还有设置一些回调函数

        MQTT_InitConnection(&mqttClient, "192.168.191.1", 1883, 0);//MQTT服务器IP地址,端口号,是否SSL
        MQTT_InitClient(&mqttClient, "client_id", "yang", "11223344", 3, 1);//ClientID,用户名,密码,心跳包时间,清除连接信息
        MQTT_InitLWT(&mqttClient, "/lwt", "offline", 0, 0);//遗嘱
        MQTT_OnConnected(&mqttClient, mqttConnectedCb);//设置连接回调
        MQTT_OnDisconnected(&mqttClient, mqttDisconnectedCb);//设置断开回调
        MQTT_OnPublished(&mqttClient, mqttPublishedCb);//设置发送完消息回调
        MQTT_OnData(&mqttClient, mqttDataCb);//接收数据回调
    //连接上MQTT
    void mqttConnectedCb(uint32_t *args){
        MQTT_Client* client = (MQTT_Client*)args;
        os_printf("MQTT: Connected
    ");
        MQTT_Subscribe(client, "111111", 0);//订阅主题:111111
    }
    
    //连接断开
    void mqttDisconnectedCb(uint32_t *args){
        MQTT_Client* client = (MQTT_Client*)args;
        os_printf("MQTT: Disconnected
    ");
    }
    //发送完消息
    void mqttPublishedCb(uint32_t *args){
        MQTT_Client* client = (MQTT_Client*)args;
        os_printf("MQTT: Published
    ");
    }
    //接收到数据
    void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len, const char *data, uint32_t data_len)
    {
        char *topicBuf = (char*)os_zalloc(topic_len+1),
                *dataBuf = (char*)os_zalloc(data_len+1);//用来缓存主题和消息
    
        MQTT_Client* client = (MQTT_Client*)args;
        os_memcpy(topicBuf, topic, topic_len);
        topicBuf[topic_len] = 0;
        os_memcpy(dataBuf, data, data_len);
        dataBuf[data_len] = 0;
        MQTT_Publish(client, "222222", dataBuf, data_len, 0, 0);//转发接收的消息:发布的主题222222
        os_printf("Receive topic: %s, data: %s 
    ", topicBuf, dataBuf);//打印接收的消息
        os_free(topicBuf);
        os_free(dataBuf);
    }

    4.让模块连接上路由器以后,在执行连接MQTT程序

    void wifiConnectCb(uint8_t status)
    {
        if(status == STATION_GOT_IP){
            MQTT_Connect(&mqttClient);
        } else {
            MQTT_Disconnect(&mqttClient);
        }
    }

    测试

    扩展

    如果用户想知道官方是具体是怎么封装的MQTT

    请用户先看我这两篇文章以后再去了解官方是怎么做的

    https://www.cnblogs.com/yangfengwu/p/12536382.html

    https://www.cnblogs.com/yangfengwu/p/12540710.html

  • 相关阅读:
    CocosCreator 手动设置刚体接触回调函数
    CocosCreator 组件添加依赖的其它组件
    Cocos Creator 动画控制
    Cocos Creator Editor 扩展右键菜单
    CocosCreator 代码添加点击事件函数
    jsfl 读取xml
    Markdown 箭头
    Markdown 数学公式输入
    Cocos Creator Editor 创建.anim文件
    VS2017调试技巧
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/12563650.html
Copyright © 2020-2023  润新知