iot mqtt协议
IoT MQTT协议教程介绍了如何控制远程外围设备。 我们已经介绍了MQTT协议及其工作原理,并且我们已经知道IoT MQTT用于从远程传感器发送数据。 简要回顾一下,MQTT是遥测中使用的轻量级协议。 多个物联网平台支持MQTT与远程物联网板和传感器交换数据。 通常,IoT板使用MQTT连接到获取信息的IoT平台。
项目介绍
在这个项目中,我们以不同的方式使用MQTT,换句话说,我们希望使用MQTT控制IoT板(例如MKR1000)。 该项目的目标是使用MQTT远程控制RGB Led矩阵。
要构建此项目,我们将使用:
- Arduino的MKR1000
- 4×4 RGB LED矩阵
MKR1000将使用MQTT连接到Ubidots云平台。 该项目分为两个步骤:
- 使用Web界面配置Ubidots以处理RGB颜色分量
- 开发MQTT客户端以连接到Ubidots并管理RGB Led矩阵
在该项目的最后,我们使用Ubidots Web界面远程控制RGB Led矩阵。
配置物联网板
在第一步中,我们将配置Ubidots接口以处理三个颜色分量。 我们将使用滑块来控制它们。 让我们开始吧。 在继续之前,您必须使用此链接创建一个免费帐户。 登录该应用程序,然后单击“ 设备”以创建一个新设备。
我们使用RGB控制器作为设备名称。 设备充当数据容器,在这里我们可以对保存交换数据的变量进行分组。 设备准备好后,我们可以开始添加新变量:
我们创建三个变量:
- 红色
- 绿色
- 蓝色
现在该创建仪表板了,我们将使用它们来控制这些变量值。 转到仪表板,然后单击添加。 为您的仪表板命名,然后开始添加控件。 在此项目中,我们添加了滑块,因此请单击添加新的小部件,然后单击滑块:
选择先前配置的设备(又名数据源):
选择RGB控制器,您将看到三个变量:
选择其中之一,然后对所有三个变量重复该过程。 最后,您将看到一个仪表盘,如下所示:
如何实现客户端以处理IoT MQTT协议
一旦配置了IoT平台,我们就可以将注意力集中在IoT MQTT客户端上。 该客户端从平台接收数据并管理RGB Led矩阵。 要创建客户端,我们使用以下库:
- Adafruit Neomatrix
- MQTT客户端(可以从Arduino库管理器下载)
第一步是初始化Neomatrix,以提供一组信息,例如矩阵的宽度和高度以及引脚号。 在我们的情况下,使用MKR PIN 5连接RGB Led矩阵。
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(4, 4, 5,
NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
NEO_GRB + NEO_KHZ800);
请注意,前三个参数代表一行和一列中的LED数量。 使用matrix
实例,我们可以为矩阵着色。
让我们实现MQTT客户端。 该项目使用MKR1000进行WIFI连接:
WiFiClient net;
MQTTClient mqttClient;
void setup() {
Serial.begin(115000);
Serial.println("Configuring the net...");
WiFi.begin("your WiFi SID", "your WiFi password");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("Begin...");
mqttClient.begin("mqtt://things.ubidots.com", net);
matrix.begin();
connect();
}
在setup()
方法中,我们只需初始化WiFi连接和mqttClient
。 要初始化mqtt客户端,我们必须设置MQTT服务器(Ubidots服务器地址)和net
。
connect()
方法处理连接和MQTT主题订阅 。 根据Ubidots文档 ,在数据源(也称为设备)中定义的每个变量都有其自己的主题:
/v1.6/devices/_device_name/_variable_name/lv
请注意,主题末尾的lv代表last value 。 换句话说,我们只对控制RGB LED矩阵的最后一个变量值感兴趣。 在此项目中,应用程序必须订阅以下主题:
/v1.6/devices/RGBController/redColor/lv
/v1.6/devices/RGBController/greenColor/lv
/v1.6/devices/RGBController/blueColor/lv
所以connect()
方法是:
void connect() {
Serial.println("Connecting to MQTT....");
if (mqttClient.connect("YOUR_UNIQUE_ID", "YOUR_UBIDOTS_TOKEN", "")) {
Serial.println("MQTT client connected");
int result = mqttClient.subscribe("/v1.6/devices/RGBController/redColor/lv");
Serial.println(result);
Serial.println("Subscribed red topic.");
int result1 = mqttClient.subscribe("/v1.6/devices/RGBController/greenColor/lv");
Serial.println(result1);
Serial.println("Subscribed green topic.");
int result2 = mqttClient.subscribe("/v1.6/devices/RGBController/blueColor/lv");
Serial.println(result1);
Serial.println("Subscribed blue topic.");
}
else {
Serial.println("######### Client not connected ########");
}
}
一旦应用程序连接到MQTT服务器并订阅了可变主题,我们就必须实现侦听来自MQTT服务器的值的方法。 为此,我们必须实现一个名为messageReceived(String topic, String payload, char * bytes, unsigned int length)
。 在这种方法中,应用程序必须执行以下任务:
- 确定包含消息的主题
- 将消息转换为颜色分量值
- 控制RGB LED矩阵设置新颜色
这是方法的实现:
void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
if (topic.indexOf("redColor") >= 0) {
red = atoi(bytes);
}
else if (topic.indexOf("greenColor") >= 0) {
green = atoi(bytes);
}
else if (topic.indexOf("blueColor") >= 0) {
blue = atoi(bytes);
}
matrix.fillScreen(matrix.Color(red,green,blue));
matrix.show();
}
就这样。 在该方法的最后两行中,我们使用matrix
实例以红色,绿色,蓝色分量标识的颜色填充RGB LED矩阵,并进行显示。
结论
希望在本文结尾处,您已获得有关IoT MQTT协议以及如何使用它来控制远程外围设备的知识。
iot mqtt协议