zoukankan      html  css  js  c++  java
  • 【002:ESP8266 移植 Mqtt 】

    系统环境: ubuntu 16.04 64bit
    SDK版本: esp_iot_sdk_v1.3.0
    记录时间: 2016年10月13日
    联系方式: yexiaopeng1992@126.com

    背景:在Esp8266上实现Mqtt,使之可以和Mqtt服务器进行数据通讯,代替原本项目中使用的socket通讯。

    一、Mqtt在esp8266上的移植

     使用开源工程 esp_mqtt https://github.com/tuanpmt/esp_mqtt

    1.下载esp_mqtt 代码

      #git clone https://github.com/tuanpmt/esp_mqtt.git

    2.将esp_mqtt中关于Mqtt需要的代码添加到自己工程    

    相关代码:esp_mqtt/mqtt 和 esp_mqtt/modules 下除 Makefile的文件
    我将其中的 .h 和 .c 文件分别添加到 项目的 esp_iot_sdk_v1.3.0/app/driver 和 esp_iot_sdk_v1.3.0/app/include/driver下

    在将esp_mqtt/include 下的user_config.sample.h文件中的有关配置信息的宏定义复制粘贴到 /esp_iot_sdk_v1.3.0/app/include下
    的user_config.h 文件中即可。

    3.添加mqtt的顶层代码

      将 esp_mqtt/user 下的user_main.c 中除user_init之外的代码复制粘贴到自己的文件中。  

      4.修改平台相关代码

    esp_mqtt项目和网络上的其他一些项目关于Mqtt&esp8266基本是基于NONOS_SDK的,与我项目中使用的esp_iot_sdk不同,因此在esp_mqtt
    的代码中会有部分函数是esp_iot_sdk没有的,需要修改为esp_iot_sdk中相同功能的函数。

    如将 mqtt_tcpclient_delete() 函数中 espconn_abort 替换为 espconn_disconnect,两者的功能皆为断开TCP连接

    再将新添加的 mqtt相关代码的 头文件路径做修改后就能正常编译了。

    二、Mqtt服务器搭建(仅测试) 

     http://makerpro.cc/2016/02/use-esp8266-and-mqtt-to-transfer-iot-data/ 或者 
      http://regishsu.blogspot.tw/2016/02/study-esp8266-notemcu-mqtt-study02xx.html

       参考其关于服务器的搭建和测试方式即可    

    三、修改esp8266关于Mqtt的配置

    user_config.h中,原始配置

    #define MQTT_HOST     "192.168.0.101" //or "mqtt.yourdomain.com"
    #define MQTT_PORT     1883
    #define MQTT_BUF_SIZE   1024
    #define MQTT_KEEPALIVE    120  /*second*/
    
    #define MQTT_CLIENT_ID    "CLIENT_1234"
    #define MQTT_USER     "USER"
    #define MQTT_PASS     "PASS"
    #define MQTT_CLEAN_SESSION 1
    #define MQTT_KEEPALIVE 120
    
    #define STA_SSID "SSID"
    #define STA_PASS "PASS"
    
    #define MQTT_RECONNECT_TIMEOUT  5 /*second*/
    
    #define DEFAULT_SECURITY  0
    #define QUEUE_BUFFER_SIZE       2048
    
    #define PROTOCOL_NAMEv31

    其中主要修改 MQTT_HOST 为 Mqtt 服务器地址, STA_SSID 和STA_PASS 为 wifi的名称和密码即可,其他配置根据自己情况修改。

    四、修改esp8266中与Mqtt服务器的数据接收和发送

    就两个函数 
        MQTT_Publish():发送消息到Mqtt 服务器
        mqttDataCb():  接收到Mqtt消息的回调函数

    说明:一开始esp8266和服务器可以正常连接,但按照 Mqtt服务器测试参考的链接(见上文)中的提供的方式,esp8266无法和服务器做数据通讯,回来将 esp_mqtt 中 /mqtt/topic/0  改为 和链接中一样为 hello/world 后可以数据通讯了(具体原因应该和Mqtt有关,此时未学习mqtt,故不知道原因)
    例子
        MQTT_Publish(&mqttClient, "hello/world", "mhjjs7", 6, 0, 0);

  • 相关阅读:
    获取股票行情API 接口
    使用百度地图来展示自定义的GPS点,用pyechart 框架实例
    C 语言基础笔记
    GPS 测试汇总和python GPS 导航地图实现
    用python 来炒股二 BeautifulSoup爬虫信息新闻文章
    Python tkinter 笔记 [pack,place,grid 布局管理]
    RSS 订阅精选 2020
    用python来炒股<三> 炒股交易系统(法则)
    使用python 来实现炒股
    鼠须管输入法的配置介绍
  • 原文地址:https://www.cnblogs.com/yexiaopeng/p/5956878.html
Copyright © 2011-2022 走看看