• [问题求助] 华为云IOT平台,如何主动检测设备的安全威胁?
    华为云IOT平台,如何主动检测设备的安全威胁?比如设备被植入了木马,信息被串改,华为云应对如何应对?
  • [问题求助] 设备的物理模型和产品模型,这两者有什么区别?
    设备的物理模型和产品模型,这两者有什么区别?
  • [问题求助] 对设备分组,一般是用来做什么?
    对设备分组,一般是用来做什么?
  • [问题求助] 接入华为云Iot平台的设备支持哪几种鉴权协议?
    接入华为云Iot平台的设备支持哪几种鉴权协议?
  • [问题求助] 设备接入华为云Iot平台的SDK在哪里下载?
    设备接入华为云Iot平台的SDK在哪里下载?
  • [问题求助] 物联网平台既然能支持终端设备直接接入,为什么还要多一层网关?网关有什么用?
    物联网平台既然能支持终端设备直接接入,为什么还要多一层网关?网关有什么用?
  • [问题求助] 设备在平台的鉴权失败 Authentication failed. The device secret does not match
    我用mqttfx工具连接测试,都是正常的。但在线调试的时候,真实设备没有连上,日志每隔3秒就会发来一个黑色的鉴权成功提醒还有一个红色鉴权失败的提醒。【设备在平台的鉴权】IoTDA has received an authentication message from the device, device_id: 2023xxxxxxx, client_id: 2023xxxxxxx_0_0_2023120909.【设备在平台的鉴权】Authentication failed. The device secret does not match, device_id: 2023xxxxxxx.红色报错的就只有device_id正常。设备芯片使用的是AT指令设置的:AT+MQID=2023xxxxxxx_0_0_2023120909AT+MQLOGIN = 2023xxxxxxx,85ec5c000dce91b4339b60cf4e15078e56c28fb547a3e07ae5bd74e472fb4df7报错时说secret不匹配,这一步不知还需要哪些设置?请教有经验的大神帮指点一二了
  • [问题求助] 使用esp01s发送数据到华为云,数据上不去,串口也打印错误
    可以用at指令通过串口上传上数据,一用代码就传不上去
  • [技术干货] 基于ESP8266 + Arduino + 华为云IoT + Harmony OS应用开发的智慧门锁 资料整理
    基于ESP8266 + Arduino + 华为云IoT + Harmony OS应用开发的智慧门锁 资料整理HarmonyOS 应用开发HarmonyOS 第一课 HarmonyOS应用开发入门流程,快速构建页面和组件。HarmonyOS 开发指南HarmonyOS API文档开发指南介绍的是系统各项能力的介绍。 API文档介绍的是接口和组件的具体使用方法。在ArkTS中将JSON字符串转化为实体类 ArkTS不能直接将JSON对象里的值赋给单独某个变量,所以在请求返回的JSON对象,首先转为字符串,再转为JSON对象,赋值给和JSON对象一致的实体类的对象,才能使用。 JSON处理如何使用HTTP网络请求获取动态数据刷新UI界面 @State 等装饰器华为云 设备接入 IoTDA华为云设备物联网设备接入 IoTDA 在控制台的各种操作(产品与服务等)已经有较多教程,此处不表。调用API需要首先认证鉴权。 认证鉴权 获取IAM用户Token 构造请求 需要注意,Token很长,在使用 DevEco Studio 打印时,hiLog是不能通过console.log打印出来的,但可以通过打印长度判断。应用侧API参考 设备侧MQTT接口参考 调接口工具 这步没什么好讲的,想用什么就调什么。MQTT ClientId生成工具 生成 MQTT 三元组 Huaweicloud IoTDA Mqtt ClientId GeneratorMQTT.fx 调试 MQTT 通信 MQTT.fx教程 MQTT.fx用1.7的免费版本,用于测试云服务平台到设备侧的调试,代替设备实际运行的情况。蓝牙模块 HC-08 配置可以参考的HC-05教程HC-08 厂家资料中心为配置方便,还是买一个USB-TTL转换器吧:(键盘模块键盘模块在Arduino平台的使用显示模块 SSD1306U8G2库的使用433MHz模块 TC-04TC-04 需要5V供电,但输出也是5V,ESP8266的各引脚只能接受3.3V的电压,所以需要接一个降压模块,或者是用电阻构建一个分压电路。1、点动模式:按下遥控器继电器吸合,放开遥控器继电器断开; 2、自锁模式:按一下遥控器继电器吸合,再按一下遥控器则继电器断开; 3、互锁模式:手按遥控器第一个键,相应继电器接通,再按另一个按键,相应继电器接通,之前接通的那路继电器则断开,它具有唯一关系,每次只有按的那一路继电器接通,之前接通的会断开; 4、延时模式:按下遥控器继电器吸合,放开遥控器后开始计时,过5秒、10秒、15秒(3档)后,自动关闭继电器。ESP8266ESP8266 Soft WDT reset 你可能是Aruino多任务处理库的受害者。通过深度睡眠降低ESP8266的功耗
  • [问题求助] MQTT设备连接鉴权,用时间戳为密钥加密secret,而时间戳又是明文提供的,那secret不是分分钟要泄漏吗?
    一机一密的设备clientId由4个部分组成:设备ID、设备身份标识类型、密码签名类型、时间戳,通过下划线“_”分隔。设备ID:指设备在平台成功注册后生成的唯一设备标识,通常由设备的产品ID和设备的NodeId通过分隔符“_”拼装而来。设备身份标识类型:固定值为0,表示设备ID。密码签名类型:长度1字节,当前支持2种类型:“0”代表HMACSHA256不校验时间戳。“1”代表HMACSHA256校验时间戳。时间戳:为设备连接平台时的UTC时间,格式为YYYYMMDDHH,如UTC 时间2018/7/24 17:56:20 则应表示为2018072417。password的值为使用“HMACSHA256”算法以时间戳为密钥,对secret进行加密后的值。secret为注册设备时平台返回的secret。
  • [问题求助] AT指令正确但是云端无数据显示
    使用ESP01S的AT指令上传数据,执行OK但是云端没有物模型数据
  • [问题求助] Huaweicloud_iotlink SDK 的相关介绍和使用说明在哪里可以找到?
    Huaweicloud_iotlink SDK 的相关介绍和使用说明在哪里可以找到?
  • [技术干货] 基于STM32+华为云IOT设计的智能车库管理系统
    一、项目介绍随着城市化进程和汽车拥有率的不断提高,停车难的问题也日益凸显。在城市中,停车场是一个非常重要的基础设施,但是传统的停车场管理方式存在很多问题,比如车位难以管理、停车费用不透明等。为了解决这些问题,智能车库管理系统应运而生。本项目基于STM32+华为云IOT设计的智能车库管理系统,通过红外感应传感器检测停车位的占用情况,将数据上传到华为云物联网平台,并通过微信小程序展示车库的实时停车位情况,包括总停车数量、当前剩余空位数量和车位的编号,并在二维立体图中标注出空闲停车位,方便用户快速找到空闲停车位进行停车。本系统还包括车牌识别自动计费部分,通过车牌识别技术识别车辆进出停车场的时间,并自动计算停车费用,提高了停车场的管理效率和用户体验。本项目的实现将大大提高停车场的管理效率和客户体验,为城市交通管理和用户出行提供了更加便捷和高效的解决方案。二、硬件选型在本项目中,需要选择合适的硬件来实现智能车库管理系统。根据项目需求,需要选取能够完成以下功能的硬件:【1】检测停车位是否有车辆存在的传感器模块【2】能够将传感器数据上传到云平台的通信模块【3】控制整个系统运行的主控芯片【4】提供电源支持的电源模块基于以上需求,最终采用以下硬件:【1】传感器模块:红外传感器模块,例如红外障碍传感器模块,能够检测车辆是否在停车位上。【2】通信模块:EC20-4G模块,支持 4G LTE 网络,能够将传感器数据上传到华为云物联网平台。【3】主控芯片:STM32F103ZET6,具有较高的性能和稳定性,能够满足系统的实时性需求。【4】电源模块:直流稳压电源模块,能够提供稳定的电源支持,保证系统的正常运行。三、系统设计思路【1】硬件设计:使用STM32F103ZET6作为主控芯片,连接红外感应传感器进行车辆检测。配置EC20-4G模块与STM32进行通信,通过AT指令或相关协议将检测到的数据上传到华为云物联网平台。【2】云平台配置:在华为云物联网平台创建设备实例,将EC20-4G模块作为设备接入。配置数据流转规则,使得上传的数据能够正确地传输到云平台并且存储。【3】微信小程序开发:使用微信小程序开发框架,通过调用华为云物联网平台提供的API接口,获取上传的数据。对返回的数据进行解析和处理,计算当前车库总停车数量和剩余空位数量。根据数据绘制二维立体图,并标注出空闲停车位的位置和编号。实现用户界面显示,展示当前车库状态和方便用户找到空闲停车位。整体流程如下: 红外感应传感器通过STM32进行车辆检测,检测结果实时上传到华为云物联网平台。微信小程序通过API接口获取上传的数据,并进行分析和处理,计算出车库总停车数量和剩余空位数量。 然后,在界面上绘制二维立体图并标注空闲停车位。用户可以通过微信小程序查看当前车库的状态,从而快速找到空闲停车位进行停车操作。四、华为云物联网平台部署华为云官网: cid:link_9打开官网,搜索物联网,就能快速找到 设备接入IoTDA。4.1 物联网平台介绍华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。4.2 开通物联网服务地址: cid:link_8点击总览,查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。总结:端口号: MQTT (1883)| MQTTS (8883) 接入地址: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息:Microsoft Windows [版本 10.0.19045.2965](c) Microsoft Corporation。保留所有权利。​C:\Users\11266>ping a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com​正在 Ping a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com [121.36.42.100] 具有 32 字节的数据:来自 121.36.42.100 的回复: 字节=32 时间=38ms TTL=94来自 121.36.42.100 的回复: 字节=32 时间=37ms TTL=94来自 121.36.42.100 的回复: 字节=32 时间=38ms TTL=94来自 121.36.42.100 的回复: 字节=32 时间=36ms TTL=94​121.36.42.100 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 36ms,最长 = 38ms,平均 = 37ms​C:\Users\11266>​MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口比较合适。 接下来的ESP8266就采用1883端口连接华为云物联网平台。#4.3 创建产品(1)创建产品点击产品页,再点击左上角创建产品。(2)填写产品信息根据自己产品名字填写。(3)产品创建成功(4)添加自定义模型产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。这个模型就是定义自己设备接下来需要向服务器上传那些数据类型。根据自己的数据类型进行编写。先点击自定义模型。再创建一个服务ID。接着点击新增属性。4.4 添加设备产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。(1)注册设备(2)根据自己的设备填写(3)保存设备信息创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。(4)设备创建完成可以点击设备进入到设备详情页面。4.5 MQTT协议主题订阅与发布(1)MQTT协议介绍当前的设备是采用MQTT协议与华为云平台进行通信。MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。 本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。华为云的MQTT协议接入帮助文档在这里: cid:link_6业务流程:(2)华为云平台MQTT协议使用限制描述限制支持的MQTT协议版本3.1.1与标准MQTT协议的区别支持Qos 0和Qos 1支持Topic自定义不支持QoS2不支持will、retain msgMQTTS支持的安全等级采用TCP通道基础 + TLS协议(最高TLSv1.3版本)单帐号每秒最大MQTT连接请求数无限制单个设备每分钟支持的最大MQTT连接数1单个MQTT连接每秒的吞吐量,即带宽,包含直连设备和网关3KB/sMQTT单个发布消息最大长度,超过此大小的发布请求将被直接拒绝1MBMQTT连接心跳时间建议值心跳时间限定为30至1200秒,推荐设置为120秒产品是否支持自定义Topic支持消息发布与订阅设备只能对自己的Topic进行消息发布与订阅每个订阅请求的最大订阅数无限制(3)主题订阅格式帮助文档地址:cid:link_6对于设备而言,一般会订阅平台下发消息给设备 这个主题。设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。以当前设备为例,最终订阅主题的格式如下:$oc/devices/{device_id}/sys/messages/down​最终的格式:$oc/devices/6419627e40773741f9fbdac7_dev1/sys/messages/down(4)主题发布格式对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。这个操作称为:属性上报。帮助文档地址:cid:link_3根据帮助文档的介绍, 当前设备发布主题,上报属性的格式总结如下:发布的主题格式:$oc/devices/{device_id}/sys/properties/report 最终的格式:$oc/devices/6419627e40773741f9fbdac7_dev1/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。​上传的JSON数据格式如下:​{ "services": [ { "service_id": <填服务ID>, "properties": { "<填属性名称1>": <填属性值>, "<填属性名称2>": <填属性值>, .......... } } ]}根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。​根据这个格式,组合一次上传的属性数据:{"services": [{"service_id": "stm32","properties":{"DS18B20":18,"motor_water":1,"motor_oxygen":1,"temp_max":10,"water_hp":130,"motor_food":0,"time_food":0,"oxygen_food":3}}]}4.6 MQTT三元组MQTT协议登录需要填用户ID,设备ID,设备密码等信息,就像我们平时登录QQ,微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数,一般称为MQTT三元组。接下来介绍,华为云平台的MQTT三元组参数如何得到。(1)MQTT服务器地址要登录MQTT服务器,首先记得先知道服务器的地址是多少,端口是多少。帮助文档地址:cid:link_2MQTT协议的端口支持1883和8883,它们的区别是:8883 是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。根据上面的域名和端口号,得到下面的IP地址和端口号信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)华为云的MQTT服务器地址:114.116.232.138域名:7445c6bcd3.st1.iotda-device.cn-north-4.myhuaweicloud.com华为云的MQTT端口号:1883注意!!!! 具体要看这里:(2)生成MQTT三元组华为云提供了一个在线工具,用来生成MQTT鉴权三元组: cid:link_7打开这个工具,填入设备的信息(也就是刚才创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。下面是打开的页面:填入设备的信息: (上面两行就是设备创建完成之后保存得到的)得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。ClientId 6419627e40773741f9fbdac7_dev1_0_0_2023032108Username 6419627e40773741f9fbdac7_dev1Password 861ac9e6a579d36888b2aaf97714be7af6c77017b017162884592bd68b086a6e4.7 模拟设备登录测试经过上面的步骤介绍,已经创建了产品,设备,数据模型,得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。(1)填入登录信息打开MQTT客户端软件,对号填入相关信息(就是上面的文本介绍)。然后,点击登录,订阅主题,发布主题。(2)打开网页查看完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。点击详情页面,可以看到上传的数据。到此,云平台的部署已经完成,设备已经可以正常上传数据了。五、代码设计5.1 EC20-4G模块AT指令介绍EC20模块是一种常用的无线通信模块,支持MQTT协议。下面MQTT相关的AT指令:【1】AT+QMTCONN:用于建立与MQTT服务器的连接。功能:通过指定MQTT服务器的地址、端口、客户端ID、用户名和密码等参数,建立与MQTT服务器的连接。【2】AT+QMTDISC:用于断开与MQTT服务器的连接。功能:断开与MQTT服务器的连接。【3】AT+QMTPUB:用于发布MQTT消息。功能:指定MQTT主题和消息内容,将消息发布到MQTT服务器。【4】AT+QMTSUB:用于订阅MQTT主题。功能:订阅指定的MQTT主题,接收该主题下的消息。【5】AT+QMTUNS:用于取消订阅MQTT主题。功能:取消对指定MQTT主题的订阅。【6】AT+QMTRECV:用于接收MQTT消息。功能:接收从MQTT服务器发送的消息。这些是EC20模块MQTT协议相关的AT指令。使用这些指令,可以在EC20模块上实现MQTT设备的登录、主题订阅、主题发布以及消息接收等功能。5.2 EC20连接IOT平台以下是使用STM32和EC20通过MQTT协议连接物联网平台并实现主题订阅和发布的实现代码:#include "stm32f10x.h"#include "stdio.h"#include "string.h"​// 定义串口波特率#define BAUD_RATE 115200​// 定义UART接收缓冲区大小#define UART_RX_BUFFER_SIZE 256​// 定义MQTT服务器地址和端口号#define MQTT_SERVER_ADDRESS "mqtt.example.com"#define MQTT_SERVER_PORT 1883​// 定义MQTT客户端ID#define MQTT_CLIENT_ID "example_client"​// 定义MQTT订阅的主题#define MQTT_SUB_TOPIC "example_topic"​// 定义MQTT发布的主题#define MQTT_PUB_TOPIC "example_topic"​// 定义UART接收缓冲区和索引char uartRxBuffer[UART_RX_BUFFER_SIZE];volatile uint16_t uartRxBufferIndex = 0;​// UART中断处理函数void USART1_IRQHandler(void){ if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { // 读取接收到的数据 char data = USART_ReceiveData(USART1);​ // 将数据存入接收缓冲区 uartRxBuffer[uartRxBufferIndex] = data; uartRxBufferIndex++;​ // 处理接收到的数据 // 这里可以根据需要进行相关操作,例如解析MQTT消息等​ // 清除接收中断标志位 USART_ClearITPendingBit(USART1, USART_IT_RXNE); }}​// 初始化UART1配置void UART1_Config(void){ USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;​ // 使能USART1和GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);​ // 配置USART1引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);​ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);​ // 配置USART1 USART_InitStructure.USART_BaudRate = BAUD_RATE; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure);​ // 配置USART1中断 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);​ // 使能USART1接收中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);​ // 使能USART1 USART_Cmd(USART1, ENABLE);}​// 向UART1发送数据void UART1_SendData(char *data){ while (*data) { // 发送数据 USART_SendData(USART1, *data++); // 等待发送完成 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); }}​// 连接MQTT服务器void MQTT_Connect(void){ // 构造MQTT CONNECT报文 char connectPacket[256]; sprintf(connectPacket, "\x10\x12\x00\x04MQTT\x04\x02\x00\x3C\x00%s", MQTT_CLIENT_ID);​ // 发送MQTT CONNECT报文 UART1_SendData(connectPacket);}​// 订阅MQTT主题void MQTT_Subscribe(void){ // 构造MQTT SUBSCRIBE报文 char subscribePacket[256]; sprintf(subscribePacket, "\x82\x0F\x00\x01\x00\x0C"MQTT_SUB_TOPIC"\x00\x00");​ // 发送MQTT SUBSCRIBE报文 UART1_SendData(subscribePacket);}​// 发布MQTT消息void MQTT_Publish(char *message){ // 构造MQTT PUBLISH报文 char publishPacket[256]; sprintf(publishPacket, "\x30\x10\x00\x0D"MQTT_PUB_TOPIC"%s", message);​ // 发送MQTT PUBLISH报文 UART1_SendData(publishPacket);}​int main(void){ // 初始化UART1配置 UART1_Config(); // 连接MQTT服务器 MQTT_Connect(); // 订阅MQTT主题 MQTT_Subscribe(); while (1) { // 处理其他任务 // 发布MQTT消息 MQTT_Publish("Hello, world!"); // 等待一段时间 delay_ms(1000); }}在代码中,通过UART1与EC20进行通信,并实现了MQTT的连接、订阅和发布功能。UART1_SendData函数用于向UART1发送数据,MQTT_Connect函数用于连接MQTT服务器,MQTT_Subscribe函数用于订阅MQTT主题,MQTT_Publish函数用于发布MQTT消息。5.3 获取设备影子数据(API接口)帮助文档:cid:link_4设备影子介绍:设备影子是一个用于存储和检索设备当前状态信息的JSON文档。每个设备有且只有一个设备影子,由设备ID唯一标识设备影子仅保存最近一次设备的上报数据和预期数据无论该设备是否在线,都可以通过该影子获取和设置设备的属性简单来说:设备影子就是保存,设备最新上传的一次数据。我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。如果对接口不熟悉,可以先进行在线调试:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。设备影子接口返回的数据如下:{ "device_id": "6419627e40773741f9fbdac7_dev1", "shadow": [ { "service_id": "stm32", "desired": { "properties": null, "event_time": null }, "reported": { "properties": { "DS18B20": 18, "motor_water": 1, "motor_oxygen": 1, "temp_max": 10, "water_hp": 130, "motor_food": 0, "time_food": 0, "oxygen_food": 3 }, "event_time": "20230321T081126Z" }, "version": 0 } ]}5.4 修改设备属性(API接口)地址: cid:link_5接口说明设备的产品模型中定义了物联网平台可向设备下发的属性,应用服务器可调用此接口向指定设备下发属性。平台负责将属性以同步方式发送给设备,并将设备执行属性结果同步返回。修改设备属性的接口,可以让服务器给设备下发指令,如果需要控制设备。在线调试地址:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=UpdateProperties修改设备属性是属于同步命令,需要设备在线才可以进行调试,先使用MQTT客户端登录服务器,模拟设备上线。然后进行调试,测试数据远程下发给设备。【1】利用MQTT客户端先登录设备 (这是同步命令,必须在线才能调试)【2】点击调试{"services":{"temp_max":100}}【4】可以看到,MQTT客户端软件上已经收到了服务器下发的消息由于是同步命令,服务器必须要收到设备的响应才能顺利完成一个流程,设备响应了服务器才能确定数据下发成功。六、总结基于STM32和华为云IOT的智能车库管理系统可以实现停车位智能展示功能,方便用户快速找到空闲停车位。系统的核心部分是主控芯片STM32F103ZET6和红外传感器,通过红外传感器检测停车位是否有车辆存在,并实时将检测数据上传到华为云物联网平台。在物联网平台上,可以创建一个设备模型,包括车库总停车数量、当前剩余空位数量和车位的编号等属性。每个停车位对应一个设备,通过红外传感器的检测结果更新对应停车位的状态。EC20-4G模块负责将这些数据发送到华为云物联网平台,实现与云端的通信。微信小程序作为用户界面,通过调用华为云物联网平台提供的接口,获取设备上传的数据并进行处理分析,在界面上显示当前车库总停车数量、当前剩余空位数量和车位的编号。可以使用二维立体图的形式,将停车位的状态进行展示,标注出空闲的停车位,方便用户快速找到空位进行停车。通过红外传感器和EC20模块实时上传数据到华为云物联网平台,微信小程序通过调用接口获取数据并展示在界面上,实现停车位智能展示功能。这种系统可以提高停车场的利用率,提供用户友好的体验,同时也为停车场管理者提供了实时监控和数据分析的便利。
  • [技术干货] IoTDA设备接入服务和边缘计算的结合:构建高效的边缘物联网方案
    IoTDA设备接入服务和边缘计算的结合:构建高效的边缘物联网方案物联网(IoT)技术的发展为我们提供了丰富的机会和挑战。随着大量的IoT设备的部署和数据的爆发增长,传统的云计算模式面临着一些限制,如高延迟、带宽不足和数据安全性等问题。为了克服这些问题,边缘计算作为一种新兴技术,与IoT设备接入服务相结合,为构建高效的边缘物联网方案提供了解决方案。1. 什么是边缘计算边缘计算是一种分布式计算模式,它将计算和存储资源靠近物联网设备和数据源。与传统的云计算模式相比,边缘计算能够在设备附近处理数据,减少数据传输和响应时间。边缘计算的核心目标是将计算任务从中心云移动到接近物联网设备的边缘节点,以实现更低的延迟、更高的数据安全性和更好的网络带宽利用率。2. IoTDA设备接入服务介绍IoTDA设备接入服务是一种面向物联网设备的开放性云服务。它提供了设备注册、身份验证、数据传输等功能,使得物联网设备可以轻松接入云平台。使用IoTDA设备接入服务,我们可以方便地管理和监控大量的物联网设备,并实时获取设备生成的数据。这为边缘计算提供了必要的数据来源和管理能力。3. 边缘计算与IoTDA设备接入服务的结合边缘计算与IoTDA设备接入服务的结合提供了一种高效的边缘物联网方案。具体来说,我们可以将IoTDA设备接入服务提供的功能与边缘计算平台相结合,构建以下具体方案:(1) 边缘设备注册和管理在边缘计算环境下,大量的物联网设备需要注册和管理。通过IoTDA设备接入服务,我们可以使用其提供的设备注册和身份验证功能,快速有效地管理边缘设备。边缘设备注册和管理是物联网平台非常重要的功能之一,它可以帮助管理员有效地管理和监控物联网设备。下面是一个基于Python的示例代码,用于演示边缘设备的注册和管理。 首先,我们需要定义一个Device类,用于表示物联网设备的属性和行为。pythonCopy codeclass Device: def __init__(self, device_id, device_type, location): self.device_id = device_id self.device_type = device_type self.location = location self.status = "offline" # 设备初始状态为离线 def register(self): # 设备注册逻辑,将设备信息上传至物联网平台 # 这里可以根据实际情况使用不同的通信协议或API进行设备注册 print(f"Device {self.device_id} registered on IoT platform") def update_status(self, new_status): self.status = new_status def get_status(self): return self.status def send_data(self, data): # 设备发送数据的逻辑 # 这里可以根据实际情况使用不同的通信协议或API发送数据 print(f"Device {self.device_id} sent data: {data}")接下来,我们可以实例化设备对象,并调用相关方法进行注册和管理。pythonCopy code# 创建设备实例device1 = Device("device001", "sensor", "room1")# 注册设备device1.register()# 获取设备状态print(f"Device status: {device1.get_status()}")# 发送数据device1.send_data("Hello IoT platform")# 更新设备状态device1.update_status("online")# 再次获取设备状态print(f"Device status: {device1.get_status()}")这只是一个简单的示例代码,实际的物联网平台会更加复杂,并且可能涉及到安全认证、数据存储等其他功能。不同的物联网平台可能有不同的实现方式和接口,具体的代码实现会根据物联网平台的要求和实际场景进行调整。(2) 数据传输和处理边缘计算环境下,设备数据需要快速传输和处理。使用IoTDA设备接入服务,我们可以通过其提供的数据传输功能,将设备生成的数据实时上传到云端,并进行实时处理和分析,以提取有用的信息和洞察。(3) 本地存储和缓存边缘计算环境的特点是距离设备更近,可提供更低的延迟。借助边缘计算平台的本地存储和缓存功能,我们可以将一部分数据存储在边缘节点上,以减少对云端的依赖和网络传输。(4) 边缘计算与云端协同工作边缘计算与云端之间的协同工作是边缘物联网方案的关键。IoTDA设备接入服务提供了与云端的连接和数据交换的能力,使边缘计算可以将计算结果或处理后的数据发送到云端进行进一步的分析和存储。边缘计算与云端协同是物联网平台的关键功能之一,它可以帮助实现边缘设备与云端之间的数据交互和协同处理。下面是一个基于Python的示例代码,用于演示边缘计算与云端协同的场景。 首先,我们需要定义一个边缘设备类(EdgeDevice)和一个云端服务类(CloudService),用于表示边缘设备和云端服务的属性和行为。pythonCopy codeclass EdgeDevice: def __init__(self, device_id, device_type, location): self.device_id = device_id self.device_type = device_type self.location = location def send_data_to_cloud(self, data): # 边缘设备向云端发送数据的逻辑 # 这里可以根据实际情况使用不同的通信协议或API发送数据 print(f"Edge device {self.device_id} sent data to cloud: {data}") def receive_data_from_cloud(self, data): # 边缘设备从云端接收数据的逻辑 # 这里可以根据实际情况使用不同的通信协议或API接收数据 print(f"Edge device {self.device_id} received data from cloud: {data}")class CloudService: def __init__(self, service_id): self.service_id = service_id def process_data(self, data): # 云端服务处理数据的逻辑 # 这里可以根据实际情况进行数据分析、计算等操作 print(f"Cloud service {self.service_id} processed data: {data}") return processed_data def send_data_to_edge_device(self, edge_device, data): # 云端服务向边缘设备发送数据的逻辑 # 这里可以根据实际情况使用不同的通信协议或API发送数据 print(f"Cloud service {self.service_id} sent data to edge device {edge_device.device_id}: {data}")接下来,我们可以实例化边缘设备和云端服务对象,并进行数据的传递和协同处理。pythonCopy code# 创建边缘设备实例edge_device1 = EdgeDevice("device001", "sensor", "room1")# 创建云端服务实例cloud_service1 = CloudService("service001")# 边缘设备发送数据到云端edge_device1.send_data_to_cloud("Hello cloud")# 云端服务处理数据processed_data = cloud_service1.process_data("Data from edge device")# 云端服务将处理结果发送回边缘设备cloud_service1.send_data_to_edge_device(edge_device1, processed_data)# 边缘设备接收来自云端的数据edge_device1.receive_data_from_cloud(processed_data)这个示例代码简单地展示了边缘设备和云端服务之间的数据交互和协同处理,实际场景中可能会涉及更复杂的数据处理流程和协议。具体的实现方式和接口会根据物联网平台的要求和实际情况进行调整。4. 构建高效的边缘物联网方案的挑战构建高效的边缘物联网方案是具有挑战性的,需要面对以下一些问题:(1) 网络和连接性边缘计算环境中,网络和连接性是非常重要的。低延迟、高带宽的网络是边缘计算的基础。此外,稳定的连接性是保证设备与云端之间数据传输的关键。(2) 安全性和隐私保护在构建边缘物联网方案时,数据安全性和隐私保护是至关重要的。合理的加密和认证机制、数据隐私保护方案是必要的。(3) 数据一致性和同步边缘计算环境与云端的数据一致性和同步是一个复杂的问题。确保边缘计算和云端的数据保持一致和同步是需要仔细考虑的。(4) 管理和监控在边缘计算环境下,大量的设备需要进行管理和监控。能够快速有效地管理和监控这些设备是构建高效边缘物联网方案的关键。
  • [技术干货] IoTDA平台OTA升级与设备远程控制:华为云物联网平台的能力介绍
    随着物联网(IoT)技术的迅速发展,越来越多的设备需要进行远程管理和升级,以保持其功能和安全性的最新状态。华为云物联网平台提供了丰富的功能来支持IoT设备的OTA升级和远程控制。本文将介绍华为云物联网平台的OTA升级和远程控制能力,以及如何使用这些能力来实现设备的远程管理和升级。OTA升级功能OTA(Over-The-Air)升级是指通过无线网络对设备进行固件或软件的远程升级。在传统的物联网应用中,设备的升级通常需要手动操作,而OTA升级则实现了自动化的远程升级过程。通过OTA升级功能,可以轻松地将新版本的固件或软件推送到大规模的设备中,提高设备的可靠性和安全性。在华为云物联网平台中,通过以下步骤可以进行OTA升级:注册设备:首先,需要在物联网平台中注册设备,并分配唯一的设备标识符。jsonCopy code{ "deviceId": "your_device_id", "deviceName": "your_device_name"}上传固件:将需要升级的固件上传到OTA固件库中。bashCopy codehuaweicloud iot update-sdk upload-firmware --firmware-path your_firmware_path创建升级任务:使用OTA升级功能创建一个升级任务,并指定目标设备和升级的固件版本。jsonCopy code{ "name": "your_update_task", "devices": [ { "deviceId": "your_device_id", "version": "your_firmware_version" } ]}执行升级任务:执行创建的升级任务,将升级命令发送到目标设备进行固件升级。bashCopy codehuaweicloud iot update-sdk create-task --task-file your_task_file.json通过以上步骤,华为云物联网平台的OTA升级功能可以实现对大量设备的远程固件升级,提升了设备管理的效率和便捷性。设备远程控制功能设备远程控制是指通过网络对物联网设备进行远程操作和控制。远程控制功能使得设备运营商或管理员能够实时监控和控制设备,解决问题和提供维护支持,而无需现场干预。华为云物联网平台提供了设备远程控制的能力,可以通过以下步骤实现:当涉及到设备远程控制的实际应用场景时,一个常见的示例是智能家居系统。在智能家居系统中,用户通过手机或其他远程终端可以实时监控和控制家中的各种设备,比如灯光、空调、电视等。以下是一个使用华为云物联网平台的示例代码,用于实现设备远程控制的功能。pythonCopy codeimport requestsimport json# 定义华为云物联网平台的接口地址和认证信息base_url = 'https://api-iotlink.huaweicloud.com/v5'access_token = 'your_access_token'# 定义要控制的设备和指令参数device_id = 'your_device_id'command_name = 'your_command_name'command_params = { 'param1': 'value1', 'param2': 'value2'}# 构建请求的URL和Headersurl = f'{base_url}/devices/{device_id}/commands'headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {access_token}'}# 构建发送的命令数据command_data = { 'name': command_name, 'paras': command_params}# 发送设备命令response = requests.post(url, headers=headers, data=json.dumps(command_data))# 处理响应结果if response.status_code == 200: print('设备命令发送成功')else: print('设备命令发送失败') print(response.text)以上代码示例演示了如何通过华为云物联网平台发送设备命令,实现对指定设备进行远程控制。在代码中,需要替换​​your_access_token​​​为授权的访问令牌,​​your_device_id​​​为目标设备的唯一标识符,​​your_command_name​​​为要发送的命令名称,以及​​command_params​​为命令参数。 通过使用物联网平台的接口,您可以根据具体的需求和设备类型,自定义和扩展示例代码,以满足不同的设备远程控制场景。创建设备命令:在物联网平台中创建一个设备命令,定义要发送到设备的指令和参数。jsonCopy code{ "commandName": "your_command_name", "serviceId": "your_service_id", "paras": { "param1": "value1", "param2": "value2" }}发送设备命令:将创建的设备命令发送到目标设备,触发设备执行相应的操作。bashCopy codehuaweicloud iot update-sdk send-command --command-file your_command_file.json设备执行操作:设备接收到命令后,执行相应的操作,并将执行结果返回给物联网平台。通过设备远程控制功能,可以实现对设备的灵活控制和操作,方便用户进行设备管理和故障排除。当涉及到设备执行操作的实际应用场景时,一个常见的示例是智能农业系统。在智能农业系统中,设备如喷灌器、温湿度控制器等需要定期执行特定操作,比如开启/关闭喷灌器、调整温度等。以下是一个使用Arduino和MQTT协议的示例代码,用于实现设备执行操作的功能。arduinoCopy code#include <WiFi.h>#include <PubSubClient.h>// 定义Wi-Fi网络和MQTT服务器的配置信息const char* ssid = "your_wifi_ssid";const char* password = "your_wifi_password";const char* mqtt_server = "your_mqtt_server";const int mqtt_port = 1883;const char* mqtt_topic = "your_mqtt_topic";// 定义设备操作标志bool isSprinklerOn = false;// 定义MQTT客户端和Wi-Fi客户端对象WiFiClient wifiClient;PubSubClient client(wifiClient);// 回调函数,处理接收到的MQTT消息void callback(char* topic, byte* payload, unsigned int length) { // 将接收到的消息转换为字符串 String message = ""; for (int i = 0; i < length; i++) { message += (char)payload[i]; } // 判断接收到的消息类型,执行相应操作 if (message == "TurnOnSprinkler") { isSprinklerOn = true; digitalWrite(D3, HIGH); } else if (message == "TurnOffSprinkler") { isSprinklerOn = false; digitalWrite(D3, LOW); }}// 连接Wi-Fi和MQTT服务器void connectToWifi() { delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); }}void connectToMqtt() { client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); while (!client.connected()) { if (client.connect("ArduinoClient")) { client.subscribe(mqtt_topic); } else { delay(5000); } }}void setup() { // 初始化GPIO引脚 pinMode(D3, OUTPUT); // 连接Wi-Fi和MQTT服务器 connectToWifi(); connectToMqtt();}void loop() { if (!client.connected()) { connectToMqtt(); } client.loop(); // 定期上报设备状态 if (isSprinklerOn) { client.publish(mqtt_topic, "Sprinkler is ON"); } else { client.publish(mqtt_topic, "Sprinkler is OFF"); } // 执行其他操作 // ...}以上代码示例演示了如何使用Arduino和MQTT协议实现设备执行操作的功能。Arduino连接到Wi-Fi网络,并通过MQTT协议和物联网平台进行通信。通过订阅特定的MQTT主题,设备可以接收来自物联网平台的操作指令并执行相应的操作。在示例代码中,当接收到"TurnOnSprinkler"消息时,将开启喷灌器;当接收到"TurnOffSprinkler"消息时,将关闭喷灌器。设备还定期上报设备状态,并执行其他操作。 根据实际应用场景的不同,您可以通过自定义和扩展示例代码,实现设备执行各种不同的操作,以满足具体的需求。
总条数:623 到第
上滑加载中