找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5059|回复: 2
收起左侧

ESP8266的MQTT客户端搭建教程(基于NONS_SDK_v2.0)

[复制链接]
ID:583158 发表于 2019-7-22 21:03 | 显示全部楼层 |阅读模式
luck_horse

前言
MQTT是IBM开发的一个即时通讯协议,面向M2M和物联网的连接,采用轻量级发布和订阅消息传输机制,并且有可能成为物联网的重要组成部分。
ESP8266是一款物美价廉的Wi-Fi芯片,集成Tensilica L106 钻石系列的32 位处理器和片上SRAM,多达17 个GPIO口,并拥有IIC、IIS、UART、PWM、IR遥控等片上资源。
ESP8266还提供官方的软件开发开发包(SDK),目前最新版本是「ESP8266 NONOS SDK V2.0.0」。
这篇文章主要讲解如何使用ESP8266(基于NONS_SDK_v2.0)作为MQTT客户端,并连上在本地电脑搭建的MQTT服务器。
开发环境
首先简单说明一下博主的开发环境:
  • ESP8266开发环境:ESP8266 IDE 2.0
  • ESP8266 SDK版本:esp8266_nonos_sdk_v2.0.0_16_08_10_0
  • MQTT服务器:Apollo 1.7.1(本地搭建)
  • 操作系统:64位 Win10系统
  • ESP8266开发板:NodeMCU(4MB Flash)
提醒
阅读本教程时,如果有使用esp8266_nonos_sdk_v2.0.0的开发经验,会更轻松的使用本教程。如果遇到代码编译出错、烧写下载不行以及下载后出现异常的问题,请先参考其他资料再继续本文。
导入工程
本教程基于ESP8266 IDE 2.0,如果读者使用一样的环境,那么步骤1~4就好理解
  • 在这个文件中,有几个宏定义可能需要修改的:
    MQTT_HOST:MQTT服务器地址MQTT_PORT:MQTT服务器端口MQTT_USER:MQTT服务器用户名MQTT_PASS:MQTT服务器密码STA_SSID:WI-FI帐号STA_PASS:WI-FI密码注意 还有一个最重要的宏定义——CFG_HOLDER,因为这个MQTT示例在ESP8266运行过一次后会把这些信息保存到FLASH中,如果要继续修改这些信息,记得要修改CFG_HOLDER这个宏定义,改成另一个数值即可。
    CFG_HOLDER作的用是:在CFG_Load函数中,如果发现从FLASH读取出来的CFG_HOLDER数值和宏定义的不一样,则会更新这些信息,并保存到FLASH中。不修改CFG_HOLDER的话可能会发觉明明用户名和密码都正确但是就是连接不上去。
在这个文件中,有几个宏定义可能需要修改的:

MQTT_HOST:MQTT服务器地址
MQTT_PORT:MQTT服务器端口
MQTT_USER:MQTT服务器用户名
MQTT_PASS:MQTT服务器密码
STA_SSID:WI-FI帐号
STA_PASS:WI-FI密码
注意
还有一个最重要的宏定义——CFG_HOLDER,因为这个MQTT示例在ESP8266运行过一次后会把这些信息保存到FLASH中,如果要继续修改这些信息,记得要修改CFG_HOLDER这个宏定义,改成另一个数值即可。

CFG_HOLDER作的用是:在CFG_Load函数中,如果发现从FLASH读取出来的CFG_HOLDER数值和宏定义的不一样,则会更新这些信息,并保存到FLASH中。不修改CFG_HOLDER的话可能会发觉明明用户名和密码都正确但是就是连接不上去。

修改代码
根据上面分析,下面我们就可以修改示例代码:
  • 把STA_SSID和STA_PASS修改为自己的WiFI名和密码;
  • 修改MQTT_USER和MQTT_PASS为对应的MQTT服务器的用户名和密码,Apollo服务器默认是admin和password;
  • 修改MQTT_HOST和MQTT_PORT为MQTT服务器IP和PORT,目前是使用本地的MQTT服务器,所以是修改为自己电脑的IP和61613端口,PORT是整型值;
  • 根据MQTT服务器的协议不同,可能需要使用MQTT v3.1.1版本,所以把PROTOCOL_NAMEv31注释掉,使用PROTOCOL_NAMEv311。源码的PROTOCOL_NAMEv311前面没有#define,自己加上就行。
  • 最后,修改CFG_HOLDER,以让这些配置生效,直接给原来CFG_HOLDER定义的数值加1即可。
编译下载
编译,查看Console窗口,如果输出
那说明代码已经编译成功。另外要注意,ESP8266 SDK v2.0版本生成的eagle.irom0text.bin烧写起始地址是0x10000,而之前的版本烧写地址是0x40000;eagle.flash.bin还是0x00000。由于博主使用的是4MB Flash的ESP8266,所以也建议读者先确定手头的ESP8266是不是4MB Flash(即32Mbit Flash,注意单位!4MB=32Mbit,Flash一般是以bit计算!)
另外如果Problems窗口报Errors的,只要Console窗口编译通过,就可以不用管。
下载配置,仅供参考:

其他
  • 【MQTT服务器】MQTT服务器Apollo下载地址:activemq.apacheorg/apollo/download.html
  • 【ESP8266 IDE]  供大家下载:链接:https://pan.baidu.com/s/1c2tBHW8 密码: qyjs

全部资料51hei下载地址:
ESP8266_MQTT.7z (6.09 MB, 下载次数: 105)
回复

使用道具 举报

ID:585455 发表于 2019-7-24 11:01 | 显示全部楼层
正在做MQTT 謝謝
回复

使用道具 举报

ID:137736 发表于 2020-2-4 18:01 来自手机 | 显示全部楼层
很好,先谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表