目录
  1. 1. 准备
    1. 1.1. 工程文档准备
    2. 1.2. MQTT的windows环境准备
    3. 1.3. 硬件环境准备
    4. 1.4. 软件环境
  2. 2. 步骤
    1. 2.1. 搭建测试环境
    2. 2.2. 局域网点亮LED
  3. 3. 总结
ES8266模块二次开发SDK之MQTT局域网控制LED

根据乐鑫官网的提供的Pro,已经提供了 支持MQTT协议,,在乐鑫pro

基础上再局域网下面控制led

准备

工程文档准备

  1. 下载链接 乐鑫
  2. 选用的平台NON-OS SDK
  3. 使用安信可一体化编程软件打开,文档的导入具体去安信可官网搜索,这里直接讲解导入后的操作。 删除third_party,将esp_mqtt_proj从example拉出来,将driver_lib的Makefile添加后.bak,目的是为了不讲driver_lib不编译进工程
  4. 如图,

MQTT的windows环境准备

  1. 下载EMQ压缩包,根据你的windows环境选择,下载地址链接
  2. 解压到不带中文的目录下,打开windows命令,进入到该解压目录的bin文件夹下面,
  3. 在终端执行”emqttd console”,如果卡顿就重新执行
  4. 在浏览器输入”127.0.0.1:18083”
  5. 此时会进入EMQ的界面SSID为admin,Passwd为public
  6. 此时MQTT服务器已经搭建完成

硬件环境准备

  1. 一块MODEMCU或者是ESP8266的最小系统
  2. 一个USB转TTL或者是数据线

软件环境

  1. 烧录工具,可以在安信可官网下载 链接
  2. 串口工具,使用任意一款都可以,

步骤

搭建测试环境

  1. 在工程中打开user_main.c和mqtt_config.h,

  2. 在mqtt_config.h需要修改以下几个宏

    CFG_HOLDER 更新配置到FLASH中,只要数值和本次不一样就行,
    MQTT_HOST MQTT服务器的IP
    MQTT_PORT MQTT服务器的PORT
    MQTT_CLIENT_ID 客户端ID
    MQTT_USER MQTT服务器的登录账号”admin”
    MQTT_PASS MQTT服务器的登录”admin”
    STA_SSID ESP8266和电脑端连接的路由账号
    STA_PASS ESP8266和电脑端连接的路由密码
    PROTOCOL_NAMEv311 根据MQTT协议的兼容性,在前面加#define,PROTOCOL_NAMEv31注释掉
  3. 右击该工程,Clean Project &&Build Project

  4. 可以看到顺利通过编译,如图

    依照安信可官方提供的烧录方法可以知道,

    blank.bin、esp_init_data_default_v05.bin是乐鑫SDK提供的,而eagle.flash.bin和eagle.irom0text.bin是编译工程生成的,,下载地址需要我们将工程给的地址和安信可提供地址组合得到,如图

    SPI SPEED 40MHz
    SPI MODE DOUT
    FLASH SIZE 32Mbit(根据板子而定)
  5. 使用烧写工具擦写和下载,

  6. 将MQTT服务器Runing,(MQTT服务器和ESP8266需要在同一个局域网下面)

  7. 重启ESP8266模块,打开串口 BAUD 115200

  8. 在浏览器登录MQTT,可以看到会话界面,有刚才客户端ID,主题界面有工程中注册的主题如图

  9. 主题,是我们在user_main.c的mqttConnectedCb函数注册的主题 如图

  10. 串口也会打印出来

  11. 到这一步,我们整个MQTT的局域网服务器已经搭建起来,下面测试一下,

    1. 在EMQ界面切换到websocket测试,首先连接

    2. 订阅主题”/mqtt/topic/1”

    3. 给主题”/mqtt/topic/1” 发送”Hello World!”

    4. 如图

    5. 在串口端会打印出”Hello World!”,如图

    这里整体的测试环境已经搭建完成,我们下面开始进行局域网,点亮LED

局域网点亮LED

  1. 回到工程进入user_main.c,

  2. 在user_init 函数中添加

    1
    2
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5); //选择GPIO5
    GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 1); //默认GPIO5为高

  3. 在mqttConnectedCb函数中注册一个主题

    1
    MQTT_Subscribe(client, "/hangtong/led/control", 0);
  4. 在mqttDataCb对收到的值解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (data[0] == '0') {
    GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0);
    MQTT_Publish(client, "/xuhong/LED/out", "LED status is open ...",
    strlen("LED status is open ..."), 0, 0);
    }

    //接收到指令是0,GPIO15为高,也就是LED关灯,同时发布消息,主题是/xuhong/LED/out,信息是LED status is off ...
    if (data[0] == '1') {
    GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 1);
    MQTT_Publish(client, "/xuhong/LED/out", "LED status is off ...",
    strlen("LED status is off ..."), 0, 0);
    }

  5. Clean Project &&build Project

  6. 重复上面步骤,

  7. 在EMQ服务器上面我们,会发现出现了”/hangtong/led/control” 主题 ,在websocket向”/hangtong/led/control”主题发送0则GPIO5为低电平。发送1则GPIO5为高电平

  8. 成功,

总结

  • MQTT服务器的IP需要我们在电脑端查询得到,
  • 局域网的控制,所以电脑端和ESP8266需要连接同一个路由
文章作者: ZhaoH.T
文章链接: http://www.funful.ink/2019/05/20/ESP8266_SDK_MQTT_LED/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FunfulBlog

评论