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需要连接同一个路由
-------------本文结束感谢您的阅读-------------