当前位置: 首页 > news >正文

中国建设报官方网站图片素材的网站

中国建设报官方网站,图片素材的网站,网站 优化手机版,南京哪家网站建设好前言 最近在做一个物联网项目#xff0c;涉及到智能开关的开发。目前已经实现简单的TCP通信远程控制#xff0c;但是考虑到后期的设备管理以及设备通信所需要的技术和服务器的维护成本#xff0c;我决定将设备接入云平台。本文将详细阐述如何利用华为云的物联网平台#x… 前言 最近在做一个物联网项目涉及到智能开关的开发。目前已经实现简单的TCP通信远程控制但是考虑到后期的设备管理以及设备通信所需要的技术和服务器的维护成本我决定将设备接入云平台。本文将详细阐述如何利用华为云的物联网平台IoTDA实现设备的云上管理与通信。 前提条件 搭建ArduinoESP8266的开发环境。可以参考 软件开发人员从0到1实现物联网项目初步实现智能开关开通华为云物联网平台服务并注册一个设备。可以参考官网文档。 准备工作 设备侧选择用MQTT协议因为对IoTDASDK的编译环境不太了解这里通过API的方式接入华为云的物联网平台。 获取IoTDA接入信息 首先需要拿到两个信息 华为云物联网平台的接入信息也就是URL和PORT。接入信息通过下图可以看到。 华为云物联网平台的设备连接鉴权信息。可以参考设备连接鉴权 。简单来讲就是通过注册设备时的设备ID和密钥生成设备连接鉴权所需的参数ClientId、Username、Password。生成参数的链接 安装代码库 其次设备侧作为MQTT的客户端需要编写相关代码。基于Arduino IDE开发可以使用现成的库减少工作量。 安装PubSubClient库用于连接和交互MQTT代理服务器IoTDA。安装ArduinoJson库用于解析和生成 JSON 数据。 功能实现 基于IoTDA平台实现智能开关代码要实现以下功能 设备进行WiFi连接与网络通信。设备通过MQTT协议接入IoTDA平台。设备接收IoTDA平台下发的消息。设备根据消息执行相应的控制操作。 WiFi连接 #include ESP8266WiFi.h const char* ssid xxx; //wifi名称 const char* password xxx; //wifi密码void setup_wifi() { delay(10); // We start by connecting to WiFi Serial.println(); Serial.print(Connecting to ); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(); Serial.println(WiFi connected); Serial.print(IP address: ); Serial.println(WiFi.localIP()); }对以上的代码进行解释 ESP8266WiFi.h 库提供了与 WiFi 网络连接相关的功能WiFi.begin(ssid, password); 这行代码就可以自动连接WiFi。 接入IoTDA 设备要接入IoTDA就需要上面准备的接入信息。在代码中定义如下 const char* mqttServer xxx.myhuaweicloud.com; const int mqttPort 1883; const char* mqttClientId xxx; const char* mqttUser xxx; const char* mqttPassword xxx;#define deviceId xxx#define mqttTopic $oc/devices/ deviceId /sys/messages/downmqttTopic是在接入成功后设备侧订阅的Topic用来接收平台下发的消息。更多的topic定义参考IoTDA平台预置的topic。 接下来就需要通过PubSubClient库进行接入IoTDA平台了 WiFiClient espClient; PubSubClient client(espClient); void reconnect() { client.setServer(mqttServer, mqttPort); client.setCallback(callback); while (!client.connected()) { Serial.println(Attempting MQTT connection...); if (client.connect(mqttClientId, mqttUser, mqttPassword)) { Serial.println(connected); client.subscribe(mqttTopic); } else { Serial.print(client.state());delay(5000); } } } 接收IoTDA消息控制开关 client.connect 成功后会订阅Topic当在IoTDA平台下发消息时就会在 callback 函数进行 digitalWrite(RELAY_PIN, state); 控制开关了。 void callback(char* topic, byte* payload, unsigned int length) { StaticJsonDocument128 doc; DeserializationError error deserializeJson(doc, payload); if (error) { Serial.print(F(deserializeJson() failed: )); Serial.println(error.c_str()); return; } const char* stateKey state; if (doc.containsKey(stateKey)) { bool state doc[stateKey]; digitalWrite(RELAY_PIN, state); Serial.print(Switch state: ); Serial.println(state ? ON : OFF); } } 完整代码 #include ESP8266WiFi.h #include PubSubClient.h #include ArduinoJson.h const char* ssid xxx; const char* password xxx.; const char* mqttServer xxx.myhuaweicloud.com; const int mqttPort 1883; const char* mqttClientId xxx; const char* mqttUser xxx; const char* mqttPassword xxx;#define RELAY_PIN 0#define deviceId xxx#define mqttTopic $oc/devices/ deviceId /sys/messages/downWiFiClient espClient; PubSubClient client(espClient); void callback(char* topic, byte* payload, unsigned int length) { StaticJsonDocument128 doc; DeserializationError error deserializeJson(doc, payload); if (error) { Serial.print(F(deserializeJson() failed: )); Serial.println(error.c_str()); return; } const char* stateKey state; if (doc.containsKey(stateKey)) { bool state doc[stateKey]; digitalWrite(RELAY_PIN, state); Serial.print(Switch state: ); Serial.println(state ? ON : OFF); } } void reconnect() { while (!client.connected()) { Serial.println(Attempting MQTT connection...); if (client.connect(mqttClientId, mqttUser, mqttPassword)) { Serial.println(connected); client.subscribe(mqttTopic); } else { Serial.print(client.state());delay(5000); } } } void setup_wifi() { delay(10); Serial.println(); Serial.print(Connecting to ); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(); Serial.println(WiFi connected); Serial.print(IP address: ); Serial.println(WiFi.localIP()); } void setup() { Serial.begin(115200); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); setup_wifi(); client.setServer(mqttServer, mqttPort); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }IoTDA平台下发消息 将编写完成的代码烧录到ESP-01S模块后就可以通过IoTDA平台进行消息下发了。消息下发位置见下图 消息下发格式 {state:true }当state为true时表示电平状态为HIGH电路呈开启状态此时电路不通电。 而当state为false时电平状态则为LOW电路闭合此时电路处于通电状态。 通过state数值的变化从而达到远程控制开关。 问题记录 在串口调试时如果mqtt连接返回-1状态码意味着连接失败。 那么需要将 PubSubClient.h 库中的两个宏定义MQTT_KEEPALIVE、MQTT_MAX_PACKET_SIZE 的数值调大。本文中的代码已分别调整为60和2048。 总结 借助华为云的物联网平台IoTDA可以帮助物联网行业的用户快速完成设备联网及行业应用集成大大提高了开发人员的工作效率。而且按需计费每月前一百万条消息是免费的很大程度上降低了设备上云的成本。
http://www.w-s-a.com/news/593960/

相关文章:

  • app开发网站开发教程平台网站开发的税率
  • 百度网站优化排名加强服务保障满足群众急需i
  • 宁夏建设职业技术学院网站安徽网站优化建设
  • 四川关于工程建设网站硬盘做网站空间
  • 桂林网站制作培训学校外包seo公司
  • 莱州网站建设方案北京装修公司口碑
  • 大型网站建设济南兴田德润团队怎么样韩国女足出线了吗
  • 南通做网站找谁重庆网络推广网站推广
  • ps网站主页按钮怎么做怎样做网站的用户分析
  • 哪个网站做黑色星期五订酒店活动公司网络营销推广软件
  • 岳阳新网网站建设有限公司网页设计基础考试题目
  • 辽宁响应式网站费用海外平台有哪些
  • 杨凌规划建设局网站网站后台建设怎么进入
  • 有赞商城网站建设企业管理咨询是做什么的
  • 提供衡水网站建设中国石化工程建设有限公司邮政编码
  • 大芬地铁站附近做网站工业设计公司报价
  • 建设网站最强永年网站建设
  • 网站分站代理加盟wordpress国内工作室主题
  • 东营远见网站建设公司服装网站建设内容
  • 互助平台网站建设费用百度seo优化怎么做
  • lol英雄介绍网站模板工商局网上注册
  • 电商网站运营策划什么样的网站容易做seo
  • 网站备案需要什么流程怎么创建小程序卖东西
  • 陇西网站建设 室内设计持啊传媒企业推广
  • 连云港做网站制作首选公司如何让单位网站做防护
  • wordpress企业网站源码开发网站用什么工具做设计
  • 网站负责人不是法人seo神马网站推广器
  • 网站建设绩效考核方案wordpress支付宝付款
  • 高要区住房和城乡建设局网站如何网上注销自己的公司
  • 哪种技术做网站容易论文答辩图片做记录片的是哪个网站