-
IOTDA在给设备下发命令时如何保障安全性,防止其他人下发命令
-
IOTDA中的CoAP 协议接入设备又什么使用场景
-
iotda 节点类型中非直连设备和直连设备又什么区别,这个分类是为了做什么,如果不分类是否不影响运行
-
如何通过IOTDA进行设备状态监控,怎样能排查设备故障原因,是网络还是断电
-
IOT平台与传统的SCADA系统有何区别
-
iot DA平台如何对接RTU
-
企业已经自建设备监控系统,是否还需要使用物联网平台IOT,物联网平台的优势在哪,与自建系统又有何区别?
-
iotda中的设备与子设备的关系是怎样的,为什么需要子设备,设备为什么不能直接通过类型进行区分
-
iot平台如何接入监控摄像头,并显示图像,是否有指导案例?
-
全程跟着【上电及上华为云】操作,模组重启后,不主动打印+QLWEVTIND:0 +QLWEVTIND:3,是什么原因导致的呢,前边都只是跟着步骤走的,信号和网络附着也没问题
-
互联网的用户,都有一个基本的认知,那就是“数据不会凭空产生”。数据都是通过采集进而上报上来的。华为云IoT设备接入服务,即是进行数据采集工作的一个工具,或者说平台。设备接入服务(IoTDA)提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成。为提升用户体验,IoTDA设备接入服务也在持续优化当中,让我们一起看看最近都有哪些改进~控制台功能完善及体验增强控制台持续改进,从用户使用角度,对操作流程,运维能力等方面进行了优化。整合运行日志,使用可以在IoTDA控制台即可完成平台运行日志的查看及搜索。在新版的运行日志界面中,不需要用户手动进行繁琐的操作,在控制台上可根据资源空间一键完成运行日志的配置及开启。同时,在IoTDA控制台中提供定制化的搜索界面,可以通过简单的搜索过滤完成日志的查看,不需要跳转到其他云服务就可以方便的查询及搜索相关日志,极大地提升了用户运维体验及效率。新增消息下发功能,用户在控制台即可方便的完成消息的下发及查看。收到反馈,很多用户使用消息下发功能时,只能调用应用侧API或集成SDK实现消息下发及查看功能。经过优化后,在控制台的设备详情页面中,提供了系统Topic和自定义Topic两种向设备下发消息的方式,同时可实时查看消息状态。用户可以更加方便快捷的使用消息下发的功能。更详细更丰富的用户指南“设备数据上报”、“云端数据下发”章节的概述部分把文字整合为表格,对应关系清晰明了,对应的资料以链接方式承载,用户可一建跳转相关指导。章节目录内容逐层递进,“消息通信”下每个场景都按照“XX概述”、“XX使用说明”、“XX使用示例”进行分类,方便用户快速查找到对应内容。各场景概述部分总结归纳了各功能适用场景及使用限制,方便选择对应的功能。提供丰富的设备接入场景示例使用说明章节,提供丰富的设备接入场景示例,如消息下发、消息上报、属性上报、属性下发的代码示例,用户可以直接复制使用。丰富示例,提供不同场景的SDK,新增测试验证方式。新增消息下发、属性下发、命令下发等场景的SDK使用示例,从设备侧到应用侧代码、流程、样例、测试验证方法及参数说明,一一俱全。消息下发使用示例:cid:link_2属性下发使用示例:cid:link_3命令下发使用示例:cid:link_3 文档图文结合,描述方式更加准确,使用户更快更好的理解与使用。丰富接口资料调用请求示例当接口在不同场景请求入参有变化的时候,产品帮助文档提供多样化的请求示例,帮助用户理解使用方式。如用户需要创建设备时,文档根据不同认证类型(密钥认证、证书认证、非直连设备)提供了对应的请求示例。 更全面的API指导提供了丰富的(核心业务、高频场景)API场景代码示例,用户可以直接下载使用>>前往体验 在进行API调用时,API Explorer界面也可以方便找到并使用相关API场景示例代码。如创建设备时,需要对设备生命周期进行管理,可直接获取API场景示例,前往体验>>帮助文档中,应用层API参考中新增了基本概念章节。方便用户更容易理解API的资源内容。对API各特性下的参数描述优化,取值范围描述更清晰,对应的资料链接方式承载,用户可一建跳转相关指导。IoTDA设备接入服务仍在持续优化改进,请您持续关注~如果您对IoTDA设备接入服务以及文档有任何建议,欢迎评论区留言或微信IoT小助手(hwc-iot)进行反馈交流,让我们共同促进IoTDA设备接入服务的进步~
-
一、华为云物联网平台设备接入实践参考二、物联网应用场景开发案例:1. 参考博主 DS小龙哥的“物联网项目开发”系列博文,干货满满!三、设备开发资源1. 小熊派IoT开发板系列教程合集2. 小熊派开发板全套资料获取四、设备开发课程鸿蒙设备开发实战Huawei LiteOS设备开发实战
-
一、前言随着对可再生能源的需求不断增长,太阳能作为一种清洁、可持续的能源形式,受到越来越多的关注和应用。太阳能光板通常固定在一个固定的角度上,这限制了它们对太阳光的接收效率。为了充分利用太阳能资源,提高太阳能光板的收集效率,需要设计一个能够自动跟踪太阳光的系统。本项目采用基于单片机的设计方案,主控芯片选择STC89C52。在太阳能光板的四个角上,安装了四个光敏电阻,它们用于检测四个方向太阳光的最强位置。每个光敏电阻通过PCF8591模块与主控芯片相连,利用模数转换器(ADC)采集各个通道的数据值。通过对四个光敏传感器采集到的数据进行处理和比较,主控芯片能够确定太阳光的最强位置所在。然后,通过控制两个28BYJ-48-5V步进电机的运动,太阳能光板可以实现左右和上下方向的旋转。通过调整太阳能光板的倾斜角度,使其与太阳光保持垂直,以获得最大的太阳能收集效率。该太阳能跟踪器的设计旨在实现自动化的太阳光追踪,以提高太阳能光板的能源收集效率。通过使用光敏电阻、ADC转换和步进电机控制等技术手段,系统能够准确地确定太阳光的位置,并自动调整太阳能光板的朝向。这将大大提高太阳能系统的能源输出,并为可再生能源的利用做出贡献。二、系统设计思路2.1 硬件选型【1】主控芯片:STC89C52 STC89C52是一款高性价比的单片机,具有丰富的外设和强大的计算能力。采用基于MCS-51内核的8位单片机架构,拥有存储容量大(8KB Flash和256B RAM)和丰富的IO口(32个),适合控制太阳能跟踪器系统的各种功能。【2】光敏电阻:选择具有高灵敏度和较小尺寸的光敏电阻,并根据光照条件进行选择。通过与PCF8591模块连接,可以将光敏电阻的电阻值变化转换为相应的模拟电压信号。【3】ADC模块:PCF8591 PCF8591是一款常用的4通道12位ADC模块,适用于将模拟信号转换为数字信号。通过连接4个光敏电阻到PCF8591的4个输入通道上,可以实现数据的采集和转换。【4】步进电机:28BYJ-48-5V 28BYJ-48-5V步进电机是一个小型、低功耗的步进电机,适用于低速应用。使用两个步进电机可以控制太阳能光板在水平和垂直方向上的旋转,为太阳能跟踪器提供多个方向的调整。2.2 设计思路【1】硬件连接:根据项目需求,将STC89C52主控芯片与PCF8591模块、ULN2003驱动模块、28BYJ-48-5V步进电机、光敏电阻等进行正确的引脚连接。【2】初始化设置:在主函数开始部分,进行必要的初始化设置,例如设置I/O口方向、定义引脚连接、初始化I2C总线等。【3】光敏电阻采集:通过PCF8591模块采集4个光敏电阻的数据。使用I2C通信协议,向PCF8591模块发送控制字节,选择光敏电阻通道,并通过ADC转换获取光敏电阻的数值。将采集到的数据存储在名为lightSensor的数组中,每个元素对应一个光敏电阻通道。【4】确定最强光位置:根据采集到的光敏电阻数据,通过比较找到最强光的位置。遍历lightSensor数组,记录最大值的索引,表示最强光所在的方向。【5】步进电机控制:根据最强光的位置控制步进电机的旋转,使太阳能光板朝向最大光的方向。根据最大光位置的索引,使用条件语句判断旋转方向,然后调用StepperMotor_Rotate函数控制步进电机旋转。根据需求,可以设置旋转步数和旋转方向,以实现精确的转动控制。【6】延时等待:在步进电机旋转完成后,可以添加适当的延时,以等待太阳能光板调整到新的位置。可以根据实际情况调整延时时间,确保光板稳定后进行下一次采集和控制。【7】循环执行:将上述步骤放置在一个无限循环中,以实现持续的太阳能跟踪。程序将不断采集光敏电阻数据、确定最强光位置,并通过步进电机控制太阳能光板旋转,以获得最大的太阳能收集效率。三、项目代码3.1 PCF8591采集代码以下是利用PCF8591的光敏电阻采集并通过串口打印的实现代码。#include <reg52.h>#include <intrins.h>// 定义PCF8591模块地址#define PCF8591_ADDR 0x90// 定义光敏电阻通道#define LDR_CHANNEL_1 0x00#define LDR_CHANNEL_2 0x01#define LDR_CHANNEL_3 0x02#define LDR_CHANNEL_4 0x03// 定义波特率#define BAUDRATE 9600// 函数声明void delay(unsigned int time);void uartInit();void uartSendByte(unsigned char dat);void uartSendString(unsigned char *str);void pcf8591Init();unsigned char pcf8591ReadChannel(unsigned char channel);void main() { unsigned char ldr1, ldr2, ldr3, ldr4; unsigned char str[20]; uartInit(); // 初始化串口 pcf8591Init(); // 初始化PCF8591模块 while(1) { // 读取光敏电阻数据 ldr1 = pcf8591ReadChannel(LDR_CHANNEL_1); ldr2 = pcf8591ReadChannel(LDR_CHANNEL_2); ldr3 = pcf8591ReadChannel(LDR_CHANNEL_3); ldr4 = pcf8591ReadChannel(LDR_CHANNEL_4); // 打印光敏电阻数据到串口 sprintf(str, "LDR1: %d, LDR2: %d, LDR3: %d, LDR4: %d\r\n", ldr1, ldr2, ldr3, ldr4); uartSendString(str); delay(1000); // 延时一段时间后再进行下一次采集和打印 }}// 延时函数void delay(unsigned int time) { unsigned int i, j; for(i = 0; i < time; i++) { for(j = 0; j < 125; j++); }}// 初始化串口void uartInit() { TMOD = 0x20; // 设置定时器1为模式2 SCON = 0x50; // 设置串口工作方式1,允许接收 TH1 = 256 - _cror(_cror(FOSC/12, 4), 4) / BAUDRATE; // 设置波特率 TR1 = 1; // 启动定时器1}// 串口发送单个字节void uartSendByte(unsigned char dat) { SBUF = dat; while (!TI); // 等待发送完成 TI = 0; // 清除发送完成标志位}// 串口发送字符串void uartSendString(unsigned char *str) { while (*str) { uartSendByte(*str); str++; }}// 初始化PCF8591模块void pcf8591Init() { // 发送启动转换命令 I2C_Start(); I2C_Send_Byte(PCF8591_ADDR); // 发送设备地址 I2C_Wait_Ack(); I2C_Send_Byte(0x40); // 发送转换命令,选择通道0 I2C_Wait_Ack(); I2C_Stop();}// 读取PCF8591模块的指定通道的数据值unsigned char pcf8591ReadChannel(unsigned char channel) { unsigned char value; I2C_Start(); I2C_Send_Byte(PCF8591_ADDR); // 发送设备地址 I2C_Wait_Ack(); I2C_Send_Byte(channel); // 发送通道号 I2C_Wait_Ack(); I2C_Start(); // 重新启动 I2C_Send_Byte(PCF8591_ADDR + 1); // 发送读取命令 I2C_Wait_Ack(); value = I2C_Read_Byte(); // 读取数据 I2C_Send_NAck(); I2C_Stop(); return value;}3.2 主项目框架代码#include <reg52.h>// 定义PCF8591模块的引脚连接#define PCF8591_ADDRESS 0x90 // PCF8591模块的I2C地址#define PCF8591_CONTROL 0x00 // PCF8591模块的控制寄存器地址// 定义步进电机的引脚连接sbit IN1 = P1^0; // 步进电机引脚1sbit IN2 = P1^1; // 步进电机引脚2sbit IN3 = P1^2; // 步进电机引脚3sbit IN4 = P1^3; // 步进电机引脚4// 定义步进电机旋转方向#define CW 0 // 顺时针#define CCW 1 // 逆时针// 定义光敏电阻通道#define CHANNEL_0 0 // 光敏电阻通道0#define CHANNEL_1 1 // 光敏电阻通道1#define CHANNEL_2 2 // 光敏电阻通道2#define CHANNEL_3 3 // 光敏电阻通道3// 延时函数void delay(unsigned int ms) { unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--);}// I2C总线启动void I2C_Start() { SDA = 1; SCL = 1; delay(1); SDA = 0; delay(1); SCL = 0; delay(1);}// I2C总线停止void I2C_Stop() { SDA = 0; SCL = 1; delay(1); SDA = 1; delay(1);}// I2C发送一个字节的数据void I2C_SendByte(unsigned char dat) { unsigned char i; for (i = 0; i < 8; i++) { SDA = (dat & 0x80) >> 7; dat <<= 1; delay(1); SCL = 1; delay(1); SCL = 0; delay(1); } SDA = 1; delay(1); SCL = 1; delay(1); while (SDA) continue; SCL = 0;}// 从PCF8591读取一个字节的数据unsigned char PCF8591_ReadByte() { unsigned char i, dat = 0; SDA = 1; for (i = 0; i < 8; i++) { dat <<= 1; SCL = 0; delay(1); SCL = 1; delay(1); if (SDA) dat |= 0x01; } SCL = 0; return dat;}// 设置PCF8591的控制字节void PCF8591_SetControl(unsigned char ctrl) { I2C_Start(); I2C_SendByte(PCF8591_ADDRESS); I2C_SendByte(PCF8591_CONTROL); I2C_SendByte(ctrl); I2C_Stop();}// 读取光敏电阻的数据unsigned int ReadLightSensor(unsigned char channel) { unsigned int value; PCF8591_SetControl(0x40 | channel); // 选择光敏电阻通道 delay(10); // 延时等待转换完成 I2C_Start(); I2C_SendByte(PCF8591_ADDRESS | 0x01); // 续上一段 value = PCF8591_ReadByte(); // 读取高字节 value = (value << 8) + PCF8591_ReadByte(); // 读取低字节 I2C_Stop(); return value;}// 控制步进电机旋转void StepperMotor_Rotate(unsigned char direction, unsigned int steps) { unsigned int i; for (i = 0; i < steps; i++) { // 顺时针旋转 if (direction == CW) { IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 0; delay(10); IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 0; delay(10); IN1 = 0; IN2 = 0; IN3 = 1; IN4 = 0; delay(10); IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 1; delay(10); } // 逆时针旋转 else if (direction == CCW) { IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 1; delay(10); IN1 = 0; IN2 = 0; IN3 = 1; IN4 = 0; delay(10); IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 0; delay(10); IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 0; delay(10); } }}// 主函数void main() { unsigned int lightSensor[4]; unsigned char maxIndex; while (1) { // 采集光敏电阻数据 lightSensor[0] = ReadLightSensor(CHANNEL_0); lightSensor[1] = ReadLightSensor(CHANNEL_1); lightSensor[2] = ReadLightSensor(CHANNEL_2); lightSensor[3] = ReadLightSensor(CHANNEL_3); // 确定最强光位置 maxIndex = 0; if (lightSensor[1] > lightSensor[maxIndex]) maxIndex = 1; if (lightSensor[2] > lightSensor[maxIndex]) maxIndex = 2; if (lightSensor[3] > lightSensor[maxIndex]) maxIndex = 3; // 控制步进电机旋转 if (maxIndex == 0) { StepperMotor_Rotate(CW, 100); // 右转 } else if (maxIndex == 1) { StepperMotor_Rotate(CCW, 100); // 左转 } else if (maxIndex == 2) { StepperMotor_Rotate(CW, 100); // 右转 StepperMotor_Rotate(CW, 100); // 右转 } else if (maxIndex == 3) { StepperMotor_Rotate(CCW, 100); // 左转 StepperMotor_Rotate(CCW, 100); // 左转 } delay(1000); // 延时一段时间 }}
-
各种文章里都说过,物联网技术在城市管理领域的应用有助于实现智慧城市,提高城市运行效率和改善居民生活质量。城市的红绿灯与地图结合导航提示这算不算物联网的应用? 导航显示实际拥堵路段的提示这些,感觉都是地图自己算法计算的, 与实际的城市硬件没啥关系吧?从城市角度来讲,交通管理、环境监测、能源管理,如果能对这些应用进行某种物联协同,应该是能对城市发展产生好的影响。
-
物联网技术在工业领域的应用从大体上上讲确实是有助于实现智能制造,提高生产效率和降低成本。生产过程监控、设备维护、物料管理这些地方应该都可以加入物联网实现某种协同 ,大佬们有做过工业领域的物联网吗? 这些协同应用对工业生产有没有产生巨大的影响和价值。
上滑加载中
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
回顾中 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签