物联网控制的智能LED灯带(2):MQTT网关(WS2812/2811,ESP32,MQTT,NODE-RED)

实现ESP32 MQTT网关

这个部分中,esp32将作为一个MQTT客户端订阅LED控制TOPIC,接收MQTT消息。 在解析JSON数据后,esp32将输出对应的LED控制信号。同时,ESP32也将在LED状态TOPIC上发送状态信息。

MQTT简介

在MQTT协议中,当一个用户在一个频道发送消息时,这个频道的所有订阅用户都会收到这个消息,
前提时这些用户都连接到同一个MQTT中间件。

MQTT中间件及硬件

笔者在这个项目中使用常见的开源MQTT中间件:mosquitto
中间件可以在路由器NAT之后的本地运行,也可以在云端运行。笔者使用了一个树莓派3作为MQTT中间件的运行平台。 云端的中间件可以选择CloudMQTT,其他云服务商(比如阿里云等)也最近推出了廉价的MQTT中间件服务。

ESP32的MQTT客户端配置

笔者使用的是arduino-ide的开发环境(关于如何在arduino-ide或类似环境中开发esp32)。
arduino的MQTT库有pubsubclient,Adafruit_MQTT_LibraryArduinoMqtt等。由于arduino平台的各个硬件(arduino WIFI,ESP32,ESP8266)都有各自WifiClient的实现,MQTT库基本可以通用,很少出现不兼容问题。
笔者使用的是ArduinoMqtt库。ESP32的程序可以参考示例程序:ConnectEsp8266WiFiClient.ino
只需要做出下列更改:
#include <ESP8266WiFi.h> 换成#include <WiFi.h>
#define MQTT_ID "TEST-ID" 换成自己的MQTT客户端ID,
WiFi.begin("ssid", "passphrase");设置自己的WIFI名称和密码,
network.connect("test.mosquitto.org", 1883);里设置MQTT中间件的地址,
如果MQTT中间件访问需要用户名和密码的话,MQTTPacket_connectData options = MQTTPacket_connectData_initializer;后添加
options.username.cstring = CloudMQTTUsername; options.password.cstring = CloudMQTTPassword;

ESP32订阅话题

订阅TOPIC:

MqttClient::Error::type rc = mqtt->subscribe(
                                       MQTT_TOPIC_LED, MqttClient::QOS0, processMQTTMessage
                                     );
        if (rc != MqttClient::Error::SUCCESS) {
   
          LOG_PRINTFLN("Subscribe error: %i", rc<
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值