MQTT 上的 Arduino 数据 您所在的位置:网站首页 arduinojson库 MQTT 上的 Arduino 数据

MQTT 上的 Arduino 数据

2023-05-12 10:10| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,求关注,点赞,留言。结合使用 MQTT 和 API 功能,我们自动为我们的设备创建了Digital Twins。

MQTT 是物联网 (IoT) 的 OASIS 标准消息传递协议,也是 akenza 支持的协议之一。它被设计为一种极其轻量级的 发布/订阅消息传递协议 ,非常适合连接具有小代码足迹和最小网络带宽的远程设备。 MQTT 用于各个行业。为了运行这个项目,我们使用 akenza 作为物联网平台,因为它运行来自Eclipse Mosquitto的开源 MQTT 代理 。 通过结合使用 MQTT 和 API 功能,我们能够为我们的设备自动创建 Digital Twins 。

作为硬件,我们选择了 Arduino Uno WiFi Rev2。Arduino Uno WiFi Rev2。1. 配置 Arduino 设备1.1 设置 WiFi 连接为了让 Arduino Uno Wifi 能够连接到 WiFi,我们使用了 WiFiNINA 库,该库在 Arduino IDE 的库管理器中可用。1.1.1 管理用户名和密码为了管理用户名和密码,我们创建了一个名为arudino_secrets.h的附加头文件#define SECRET_SSID ""#define SECRET_PASS ""1.1.2 WiFi 连接代码将 Arduino 连接到 WiFi 的代码报告如下:#include#include "arduino_secrets.h"///////please enter your sensitive data in the Secret tab/arduino_secrets.hchar ssid[] = SECRET_SSID; // your network SSID (name)char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)WiFiClient wifiClient;void setup() {//Initialize serial and wait for port to open:Serial.begin(9600);while (!Serial) {; // wait for serial port to connect. Needed for native USB port only// attempt to connect to Wifi network:Serial.print("Attempting to connect to WPA SSID: ");Serial.println(ssid);while (WiFi.begin(ssid, pass) != WL_CONNECTED) {// failed, retrySerial.print(".");delay(5000);Serial.println("You're connected to the network");Serial.println();void loop()1.2 设置到 akenza 的 MQTT 连接出于安全原因,akenza 仅支持 通过 MQTT 进行身份验证的连接。为此,我们选择了 PubSubClient作为库 来管理我们的 MQTT 连接。这使我们能够在连接字符串中使用用户名和密码。#include//MQTTClient mqttClient(WiFiClient);char host[] = "mqtt.akenza.io";char clientid[] = "Arduino";char username[] = "";char password[] = "";char outTopic[] = "";PubSubClient client(host, 1883, callback, wifiClient);void setup() {if (client.connect(host, username, password)) {Serial.print("Connected to ");Serial.println(host);Serial.println();boolean r = client.subscribe(outTopic);Serial.print("Subscribed to ");Serial.println(outTopic);Serial.println();else {// connection failed// mqttClient.state() will provide more information// on why it failed.Serial.print("Connection failed: ");Serial.println(client.state());Serial.println();

Akenza 接受 JSON 格式的消息用于 MQTT 连接。为了构建一个格式良好的 JSON 对象,我们使用了 ArduinoJson 库。#includevoid loop()StaticJsonDocument doc;doc["Temperature"] = 22;doc["Humidity"] = 68;doc["Light"] = 96;// Add an arrayJsonArray data = doc.createNestedArray("data");data.add(48);data.add(2.3);char out[128];int b =serializeJson(doc, out);Serial.print("publishing bytes = ");Serial.println(b,DEC);boolean rc = client.publish(outTopic, out);// The above line prints:// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}delay(5000);client.loop();请注意,这些只是数据示例;如果您想将来自传感器的数据发送到云端,则必须相应地调整代码。2. 通过 akenza 上的 MQTT 连接 Arduino 设备2.1 创建一个秘密为了安全地与 akenza 通信,必须生成一个必须在上行链路请求的主题结构中提供的秘密。必须对您要连接的具有相同连接参数的所有设备执行此步骤。每个设备都将相应地由一个 特定的 ID唯一标识 。 在 Data Flow上创建MQTT 设备连接器后,将生成一个密钥 。2.1.1 在 akenza 上设置 MQTT 设备连接器转到 菜单中的数据流 ,然后选择 创建数据流。

选择 MQTT 作为设备连接器。作为设备类型,选择 直通 以接收与从您的 MQTT 设备发送的格式相同的数据。选择一个或多个 您选择的输出连接器 。有几个选项可供选择。在本教程中,我们选择 Akenza DB 。输出连接器2.2 创建 MQTT 设备要创建新的 MQTT 设备, 请在Asset Inventory 的菜单中 选择Create Device 。添加设备名称和可选的描述、资产标签和自定义字段。选择 Next 并选择您创建的 MQTT-Data Flow。选择 继续。

创建新设备。单击Generate ID 为该设备 生成一个 随机ID 。通过单击按钮 Create Device完成该过程。您的设备现在将显示在 资产清单概览中。2.3 设置 Arduino 设备作为下一步,现在必须将 Arduino 设备配置为将数据发送到 akenza 的 MQTT 代理 。转到 资产清单 并使用过滤器搜索您的设备。通过选择您的设备打开设备详细信息页面。在 API-Configuration中,所有必需的信息都可用于将设备设置为 MQTT 客户端。

转到资产清单并使用过滤器搜索您的设备。 通过选择您的设备打开设备详细信息页面。3. 最终结果现在,您拥有在 Arduino 上设置代码并通过 MQTT 将数据流式传输到 akenza 所需的所有元素。最终代码报告如下:#include#include#include#include#include "arduino_secrets.h"///////please enter your sensitive data in the Secret tab/arduino_secrets.hchar ssid[] = SECRET_SSID; // your network SSID (name)char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)char host[] = "mqtt.akenza.io";char clientid[] = "Arduino";char username[] = "0783ddd64683f579";char password[] = "bd604gmgit0x7kilc8puok3g2rxsldl2";char outTopic[] = "/up/bd604gmgit0x7kilc8puok3g2rxsldl2/id/99E77F4ECC728656";//set interval for sending messages (milliseconds)const long interval = 8000;unsigned long previousMillis = 0;int count = 0;//receive datavoid callback(char* topic, byte* payload, unsigned int length) {char str[length+1];Serial.print("Message arrived [");Serial.print(topic);Serial.print("] ");int i=0;for (i=0;iSerial.print((char)payload[i]);str[i]=(char)payload[i];str[i] = 0; // Null terminationSerial.println();StaticJsonDocument doc;deserializeJson(doc,payload);// deserializeJson(doc,str); can use string instead of payloadconst char* sensor = doc["sensor"];long time = doc["time"];float latitude = doc["data"][0];float longitude = doc["data"][1];Serial.println("latitude =");Serial.println(latitude,2);Serial.println(sensor);WiFiClient wifiClient;PubSubClient client(host, 1883, callback, wifiClient);void setup() {//Initialize serial and wait for port to open:Serial.begin(9600);while (!Serial) {; // wait for serial port to connect. Needed for native USB port only// attempt to connect to Wifi network:Serial.print("Attempting to connect to WPA SSID: ");Serial.println(ssid);while (WiFi.begin(ssid, pass) != WL_CONNECTED) {// failed, retrySerial.print(".");delay(5000);Serial.println("You're connected to the network");Serial.println();if (client.connect(host, username, password)) {Serial.print("Connected to ");Serial.println(host);Serial.println();boolean r = client.subscribe(outTopic);Serial.print("Subscribed to ");Serial.println(outTopic);Serial.println();else {// connection failedSerial.println("Connection failed ");Serial.println(client.state());Serial.println();

void loop()StaticJsonDocument doc;doc["Temperature"] = 22;doc["Humidity"] = 68;doc["Light"] = 96;// Add an arrayJsonArray data = doc.createNestedArray("data");data.add(48);data.add(2.3);char out[128];int b =serializeJson(doc, out);Serial.print("publishing bytes = ");Serial.println(b,DEC);boolean rc = client.publish(outTopic, out);// The above line prints:// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}delay(5000);client.loop();它会自动解码接收到的 JSON 并可视化从 Arduino 设备接收到的数据。可以 在 消息日志中的设备详细信息页面上查看传入数据。可以在消息日志中的设备详细信息页面上查看传入数据。传入数据在 数据概览中显示 为 设备数据 KPI 以及 历史 图表。

传入数据在数据概览中显示为设备数据 KPI 以及历史图表。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有