系统环境: 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);

【002:ESP8266 移植 Mqtt 】的更多相关文章

  1. MQTT 协议学习:008-在STM32上移植MQTT

    前言 通过前面了解MQTT有关概念.分析了有关的报文,我们对于这个协议也有了更深的认识.但纸上谈来终觉浅,绝知此事要躬行. 本文参考:<STM32+W5500+MQTT+Android实现远程数 ...

  2. 微信硬件平台(十) 1 ESP8266通过mqtt交互消息

    //----------------------------------------------------------------------------------------// //----- ...

  3. arm linux 移植 MQTT (paho、mosquitto)

    前言 我们在这里做2件事情: 1)编译 paho.mqtt.mosquitto 2个开源项目的c版本库(mosquitto库没有用上) 2)编译好 依赖 paho.mqtt的库编写例程 + mosqu ...

  4. 移植 MQTT broker mosquitto 到 omapl138

    概述 本次移植使用创龙的 TL138-EVM 开发板,基于 TI 的 MCSDK 开发环境.具体上位机系统为 Ubuntu 12.04-32bit,软件环境基于创龙的用户手册搭建. 为了移植后在 13 ...

  5. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

    如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...

  6. ESP8266入门学习笔记1:资料获取

    乐鑫官网:https://www.espressif.com/zh-hans/products/hardware/esp8266ex/overview 乐鑫资料:https://www.espress ...

  7. MQTT 嵌入式端通讯协议解析(转)

    MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet.百度的云平台也都支持MQTT的接入.虽然MQTT很火,但是目前对 ...

  8. 服务器 三 MQTT服务器手机开发

    目的: 实现手机4G网络控制单片机,需要搭建服务器,手机或者各种控制端远程控制. 本教程 1  MQTT服务器硬件模块 2 MQTT服务器电脑搭建 2.1自己搭建 2.2租阿里云服务器 2 MQTT服 ...

  9. 服务器 一 MQTT服务器硬件

    目的: 实现手机4G网络控制单片机,需要搭建服务器,手机或者各种控制端远程控制. 本教程 1  MQTT服务器硬件模块 2 MQTT服务器电脑搭建 2.1自己搭建 2.2租阿里云服务器 2 MQTT服 ...

随机推荐

  1. Django分析之使用redis缓存服务器

    时间长没有更新了,这段时间一直忙着一个项目,今天就记录一个现在经常会用到的技术吧. redis相信大家都很熟悉了,和memcached一样是一个高性能的key-value数据库,至于什么是缓存服务器, ...

  2. comebotree树

    comebotree树: java: @RequestMapping(value="/combobox.do") public @ResponseBody String combo ...

  3. java并发编程(二)线程中断

    参考:http://blog.csdn.net/ns_code/article/details/17091267 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thre ...

  4. mount windows-linux文件共享

    . (2)在linux下访问windows共享: smbclient -L 192.168.2.12 -U admin   //查看共享了那些目录,由此知道主机名为XIAOXING-PC smbcli ...

  5. 如何Recycle一个SharePoint Web Application,以及为什么

    当你发现SharePoint服务器的CPU或者内存使用率居高不下的时候,很多人都会选择iisreset来让资源使用率降下来.但是在企业环境中,这毫无疑问会使这台服务器中断服务从而影响到用户的使用,所以 ...

  6. springboot+dubbo

    使用springboot搭建dubbo服务,首先封装出springboot-dubbo的项目,引入在服务上加直接@Service直接使用,方便于拆封统一管理. package hello.dubbo. ...

  7. 【Git学习笔记】远程仓库

    第一种情景:本地初始化一个Git仓库后,接着又在github上创建了一个Git仓库,现在要让这两个仓库进行远程同步. 1. 关联本地仓库就和远程仓库  $ git remote add origin ...

  8. 【Git学习笔记】初始化Git仓库和版本回退

    学习地址 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 什么是版本库呢?版本库又 ...

  9. iOS UITableViewCell的"滑动出现多个按钮"

    本文授权转载,作者:@夏天是个大人了 前言: 本篇博客其实就是想介绍tableviewcell滑动的一些"事",昨天在逛github的时候看到的还挺有意思的三方库,简单用了一下感觉 ...

  10. 自动化测试selenium----css选择器总结

      选择器 示例 描述 * * 匹配任何元素 element DIV 标签选择器,匹配所有使用DIV标签的元素 .class .tips class选择器,匹配所有class属性中包含info的元素 ...