• [技术干货] 基于STM32单片机农场监控设计
     项目开发背景随着现代农业的不断发展,智能化农业逐渐成为农业生产中的新趋势。传统的农场管理方式已经不能满足日益增长的生产需求,而采用智能化设备来进行农场监控与管理,能够有效提高作物的产量与质量。基于物联网技术,结合传感器与自动化设备,可以实现环境监测、作物管理、数据采集与远程控制等功能。尤其在花卉、蔬菜等温室种植领域,通过智能监控系统对环境的温湿度、光照强度以及土壤湿度等因素进行精准调控,可以为作物的生长提供更加适宜的环境。本项目通过STM32单片机与传感器结合,设计一套智能花盆监控系统。通过光敏传感器、土壤湿度传感器、温度传感器等,实时获取环境信息,并根据采集的数据控制水泵、电机等执行设备,实现环境的智能调节。同时,通过HC-05蓝牙模块与手机APP实现远程控制,方便用户对花盆进行管理与监控。本项目结合了硬件控制、传感器采集、无线通信等技术,具有很高的实用性和前景。设计实现的功能(1)环境光照监测与调节利用光敏传感器采集当前环境的光照强度,当光照过强时,系统自动控制电机进行正转,遮挡阳光,保持适宜的光照强度;当光照不足时,电机反转,进行补光操作,确保花盆环境中的植物能够获得充足的光照。(2)土壤湿度监测与浇水通过土壤湿度传感器,实时监测土壤中的水分含量。当土壤湿度低于设定阈值时,系统自动开启水泵进行浇水,保证土壤水分充足,防止植物干旱。(3)温度监测与显示利用DHT11温度传感器采集花盆外界环境的温度数据,实时反馈温度信息。温度数据会通过液晶屏显示,供用户查看。同时,系统会根据采集的温度数据调节相关设备的工作状态。(4)按键控制系统配备了两个按键,用户可通过按键手动开启或关闭花盆的浇水功能,以及控制电机进行遮光或补光操作。按键控制简便直观,能够满足紧急情况下的手动干预。(5)OLED液晶显示系统通过OLED液晶显示屏显示当前的温度、光照强度、土壤湿度等实时监测数据,方便用户观察花盆的工作状态和环境状况。同时,液晶屏显示当前的水泵浇水状态、光照调整状态等信息。(6)无线控制与监控通过HC-05蓝牙模块实现数据的无线传输。用户可以通过手机APP无线控制花盆的浇水、电机控制以及其他相关操作,实时查看监控数据,方便管理与操作。项目硬件模块组成(1)STM32单片机STM32系列单片机作为本项目的核心控制单元,负责接收传感器数据、控制电机及水泵的工作状态,进行按键处理以及蓝牙数据的收发。选用STM32F103C8T6型号,该型号具备较好的处理能力和外设支持,适合本项目的需求。(2)光敏传感器光敏传感器用于检测环境光照强度,当光照强度过高时,系统通过电机进行遮光;当光照不足时,系统通过电机进行补光。该传感器通过模拟输出信号与STM32单片机进行连接。(3)土壤湿度传感器土壤湿度传感器用于监测土壤水分情况,当土壤水分不足时,传感器输出低电平信号,STM32单片机通过此信号控制水泵启动,进行浇水操作。(4)DHT11温湿度传感器DHT11温湿度传感器用于采集环境的温度数据,向STM32单片机输出数字信号。该传感器响应较慢,但足以满足此项目对于温度监测的需求。(5)电机与驱动模块电机用于实现花盆遮光和补光功能,通过电机的正反转控制来调节光照强度。电机由驱动模块控制,STM32单片机通过PWM信号控制驱动模块,进而控制电机的旋转方向。(6)水泵与继电器水泵用于浇水,当土壤湿度传感器检测到水分不足时,系统会通过继电器驱动水泵工作。继电器作为开关控制器,由STM32单片机通过IO口控制,确保水泵的开启与关闭。(7)OLED显示屏OLED显示屏用于显示环境温度、光照强度、土壤湿度等实时监测数据。STM32单片机通过I2C总线与OLED屏幕进行通信,将实时数据展示给用户。(8)HC-05蓝牙模块HC-05蓝牙模块用于实现无线通信,通过蓝牙与手机APP进行数据传输和远程控制。STM32单片机与HC-05进行串口通信,实现数据的收发与控制。设计思路本系统通过STM32单片机与各种传感器的结合,实现花盆环境的自动化监控与管理。首先,系统通过光敏传感器检测环境光照强度,根据采集的数据控制电机进行遮光或补光。其次,土壤湿度传感器监控土壤水分,当土壤湿度低时,通过继电器控制水泵启动,实现自动浇水。温度传感器实时采集外部环境温度,通过OLED液晶屏显示,帮助用户了解温湿度情况。通过按键,用户可以手动干预花盆的工作状态,控制浇水或光照调整功能。系统还采用了HC-05蓝牙模块,能够通过手机APP进行远程控制。APP与STM32单片机之间通过蓝牙通信,实时获取各类数据,用户可以在手机上查看监控信息并进行控制。通过这些传感器与执行器的协同工作,系统能够自动调节花盆环境,确保植物的生长条件。系统功能总结功能模块描述光照强度监测与调节通过光敏传感器实时监测光照强度,并根据光照强度调节电机遮光或补光土壤湿度监测与浇水通过土壤湿度传感器监测土壤水分,低于设定值时自动启动水泵浇水温度监测与显示使用DHT11温度传感器采集温度,实时显示环境温度按键控制配备两个按键,控制浇水和电机遮光补光功能OLED液晶显示显示环境温度、光照强度、土壤湿度等信息无线控制与监控通过HC-05蓝牙模块实现与手机APP的无线通讯与远程控制技术方案本系统采用STM32F103C8T6单片机作为核心控制单元,配合光敏传感器、土壤湿度传感器、DHT11温湿度传感器等,实现环境信息的实时监控与调节。系统通过PWM信号控制电机和水泵,执行环境调节任务。通过OLED液晶屏显示实时数据,用户可以清晰了解花盆的工作状态。此外,系统通过HC-05蓝牙模块与手机APP实现远程监控和控制,方便用户随时查看数据和调整参数。模块技术详情介绍(1)光敏传感器:光敏传感器根据光强的变化输出对应的电压信号,通过ADC转换为数字信号送入STM32单片机进行处理。(2)土壤湿度传感器:通过电阻值的变化来判断土壤的湿度。当土壤水分较少时,电阻值增大,传感器输出相应信号,控制水泵开启。(3)DHT11温湿度传感器:DHT11是数字化温湿度传感器,通过单总线协议与STM32单片机进行数据通信,采集温湿度数据。(4)OLED显示屏:采用I2C通信协议,与STM32单片机连接,显示温度、湿度等数据,提供直观的环境监控信息。(5)HC-05蓝牙模块:通过串口通信与STM32单片机连接,实现蓝牙数据的发送与接收,控制系统的远程操作。预期成果通过本项目的设计与实现,最终将开发出一套智能化的花盆监控系统。该系统能够实时监测环境温湿度、光照强度和土壤湿度,并根据数据自动控制水泵和电机工作。此外,通过蓝牙模块与手机APP的配合,用户能够方便地远程控制系统,实现高效的花盆管理。总结本项目结合了多种传感器、执行器以及无线通信技术,构建了一套完整的智能花盆监控系统。通过STM32单片机的控制,实现了对环境的智能监控与调节,提高了花卉种植的自动化水平。系统通过LCD显示和手机APP提供实时反馈,方便用户操作与监控。未来,可以将该系统扩展至更大规模的农业自动化系统,实现更广泛的应用。STM32设计下面是基于STM32的main.c代码,其他子模块(如传感器读取、按键控制、OLED显示、蓝牙控制等)未贴出。以下代码主要负责整个系统的初始化、主控制循环和与传感器的互动。这个代码将包括光照强度、土壤湿度监测、温度显示、按键控制、OLED显示以及蓝牙通信部分的集成。#include "stm32f1xx_hal.h"#include "lcd.h"#include "dht11.h"#include "soil_moisture.h"#include "light_sensor.h"#include "motor_control.h"#include "water_pump.h"#include "bluetooth.h"// 定义GPIO引脚#define LIGHT_SENSOR_PIN GPIO_PIN_0 // 光敏传感器连接在PA0引脚#define SOIL_SENSOR_PIN GPIO_PIN_1  // 土壤湿度传感器连接在PA1引脚#define MOTOR_PIN GPIO_PIN_2      // 电机连接在PA2引脚#define WATER_PUMP_PIN GPIO_PIN_3 // 水泵继电器连接在PA3引脚#define BUTTON1_PIN GPIO_PIN_4    // 按键1连接在PA4引脚#define BUTTON2_PIN GPIO_PIN_5    // 按键2连接在PA5引脚// 全局变量定义uint8_t button1_state = 0;uint8_t button2_state = 0;float temperature = 0.0f;float humidity = 0.0f;uint16_t soil_moisture = 0;uint16_t light_intensity = 0;// 函数声明void SystemClock_Config(void);static void MX_GPIO_Init(void);static void MX_USART1_UART_Init(void);static void MX_I2C1_Init(void);void update_display(void);void read_sensors(void);void control_system(void);int main(void){    // HAL库初始化    HAL_Init();        // 系统时钟配置    SystemClock_Config();        // 初始化GPIO    MX_GPIO_Init();        // 初始化USART(用于蓝牙通信)    MX_USART1_UART_Init();        // 初始化I2C(用于OLED显示)    MX_I2C1_Init();        // 初始化OLED显示    LCD_Init();        // 初始化传感器(光敏、土壤湿度、温湿度传感器已初始化)    // 主循环    while (1)    {        // 读取传感器数据        read_sensors();                // 控制系统(根据传感器数据控制电机、水泵等)        control_system();                // 更新显示        update_display();           }}void read_sensors(void){    // 读取温湿度传感器(DHT11)    DHT11_Read(&temperature, &humidity);        // 读取土壤湿度传感器    soil_moisture = Soil_Moisture_Read();        // 读取光照强度传感器    light_intensity = Light_Sensor_Read();}void control_system(void){    // 控制电机(光照调节)    if (light_intensity > 800) // 超过800为强光    {        Motor_Control(1); // 电机正转,遮挡阳光    }    else if (light_intensity < 200) // 低于200为弱光    {        Motor_Control(0); // 电机反转,补充光照    }    else    {        Motor_Control(0); // 电机停止,光照适中    }    // 控制水泵(浇水)    if (soil_moisture < 400) // 土壤湿度小于400表示干燥    {        Water_Pump_Control(1); // 开启水泵,浇水    }    else    {        Water_Pump_Control(0); // 关闭水泵,不浇水    }        // 按键1控制浇水    if (HAL_GPIO_ReadPin(GPIOA, BUTTON1_PIN) == GPIO_PIN_SET)    {        Water_Pump_Control(1); // 按下按键1时浇水    }        // 按键2控制电机遮光/补光    if (HAL_GPIO_ReadPin(GPIOA, BUTTON2_PIN) == GPIO_PIN_SET)    {        if (light_intensity > 800)        {            Motor_Control(1); // 遮挡阳光        }        else if (light_intensity < 200)        {            Motor_Control(0); // 补充光照        }    }}void update_display(void){    // 清除显示    LCD_Clear();        // 显示温度和湿度    LCD_SetCursor(0, 0);    LCD_Printf("Temp: %.2f C", temperature);        LCD_SetCursor(1, 0);    LCD_Printf("Hum: %.2f %%", humidity);        // 显示光照强度和土壤湿度    LCD_SetCursor(2, 0);    LCD_Printf("Light: %d", light_intensity);        LCD_SetCursor(3, 0);    LCD_Printf("Soil: %d", soil_moisture);        // 如果系统开启蓝牙,显示状态    if (Bluetooth_Is_Connected())    {        LCD_SetCursor(4, 0);        LCD_Printf("Bluetooth: ON");    }    else    {        LCD_SetCursor(4, 0);        LCD_Printf("Bluetooth: OFF");    }}void SystemClock_Config(void){    // 系统时钟配置代码}static void MX_GPIO_Init(void){    GPIO_InitTypeDef GPIO_InitStruct = {0};    __HAL_RCC_GPIOA_CLK_ENABLE();        // 配置光敏传感器引脚(连接在PA0)    GPIO_InitStruct.Pin = LIGHT_SENSOR_PIN;    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;    GPIO_InitStruct.Pull = GPIO_NOPULL;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        // 配置土壤湿度传感器引脚(连接在PA1)    GPIO_InitStruct.Pin = SOIL_SENSOR_PIN;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        // 配置电机控制引脚(连接在PA2)    GPIO_InitStruct.Pin = MOTOR_PIN;    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        // 配置水泵控制引脚(连接在PA3)    GPIO_InitStruct.Pin = WATER_PUMP_PIN;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        // 配置按键引脚(连接在PA4和PA5)    GPIO_InitStruct.Pin = BUTTON1_PIN | BUTTON2_PIN;    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;    GPIO_InitStruct.Pull = GPIO_NOPULL;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}static void MX_USART1_UART_Init(void){    // USART1初始化,用于蓝牙通信}static void MX_I2C1_Init(void){    // I2C1初始化,用于OLED显示}代码解释:1. 硬件初始化:通过MX_GPIO_Init、MX_USART1_UART_Init、MX_I2C1_Init等函数初始化STM32的GPIO、USART(蓝牙通信)、I2C(OLED显示)等硬件。2. 传感器读取:通过read_sensors函数获取温度、湿度、光照强度和土壤湿度传感器的数据。3. 系统控制:control_system函数根据传感器的数据控制电机和水泵的工作状态。根据光照强度调节电机运行,土壤湿度过低时启动水泵进行浇水。4. 按键控制:通过HAL_GPIO_ReadPin读取按键的状态,按键1控制水泵,按键2控制电机的运行(遮光或补光)。5. 显示更新:通过update_display函数在OLED显示屏上实时显示环境数据,包括温度、湿度、光照强度、土壤湿度等。 
  • [问题求助] 如何选择合适的物联网操作系统?
    目前市场上有很多物联网操作系统(如FreeRTOS、RIOT等),如何根据项目需求选择合适的操作系统?有哪些选择标准?
  • [问题求助] 物联网设备的数据传输频率如何设定最合理?
    物联网设备的数据传输频率应该如何设定?如何平衡数据传输频率与网络带宽、功耗之间的关系?
  • [问题求助] 如何应对物联网设备的硬件故障?
    物联网设备长时间运行后,可能会发生硬件故障。有没有好的预防措施或自检机制,能够在故障发生前发现并避免?
  • [问题求助] 如何解决物联网设备的设备认证问题?
    物联网设备的认证问题一直是安全领域的痛点。有没有一种有效的认证机制,能够确保设备身份的安全性?
  • [问题求助] 如何避免物联网设备的隐私泄露风险?
    在物联网系统中,如何避免设备收集的敏感数据被泄露?是否有一些通用的隐私保护技术或框架可以使用?
  • [问题求助] 如何实现物联网设备与传统设备的互联互通?
    我在开发一个物联网系统,但需要与一些传统设备进行数据交换。如何实现不同类型设备之间的互联互通?
  • [问题求助] 如何优化物联网网关的性能?
    在物联网系统中,网关是一个关键部分。如何在高并发的情况下优化网关的处理能力和响应速度?
  • [问题求助] 物联网传感器的数据精度如何提高?
    在使用物联网传感器收集数据时,如何提高传感器的测量精度?是否有一些校准技术或硬件设计可以帮助提高精度?
  • [问题求助] 物联网设备的本地计算与云计算的权衡
    物联网设备是选择将更多的数据处理放在本地,还是传输到云端进行计算处理?如何平衡本地计算和云计算的负载与效率?
  • [问题求助] 如何避免物联网设备的设备间冲突和通信干扰?
    在一个大型物联网项目中,多个设备可能会同时通信。如何避免设备间的冲突和干扰,确保数据传输顺畅?
  • [问题求助] 如何实现物联网设备的动态配置和管理?
    随着物联网设备数量的增加,如何在不影响设备正常运行的情况下,实现设备的动态配置和集中管理?
  • [问题求助] 编解码插件 如何实现Json之间的转换
    在创建产品的时候,编解码插件提到了,可以用于二进制码流和Json结构体的转换或Json之间的转换,以实现设备数据解析;我现在发布的JSON格式如下{"Temp1": 25.5,"Temp2": 24.8}导致平台无法解析,如何在‘编解码插件’中编写,才能让JSON格式变成如下的默认的格式?{    "services": [           {            "service_id": "TowerInfo",            "properties":                     {                      "Temp1": 25.5,                      "Temp2": 24.8                     }           }    ]}
  • [案例共创] 快速体验IoTDA完成智能家居设备上云体验
    一、前言随着物联网(IoT)技术的快速发展,智能家居成为现代生活的一大亮点。通过将智能设备接入云平台,用户可以实现对设备的远程控制和管理,提高生活质量。而华为云作为领先的云服务平台,提供了功能强大的IoT设备接入与管理服务——IoTDA(IoT Device Access),为开发者和企业提供了便捷的物联网解决方案。本教程将带领大家手把手体验华为云的IoTDA服务,介绍如何通过华为云IoT平台完成智能家居设备的接入与管理。整个过程不需要真实的硬件设备,将通过MQTT客户端软件模拟设备,帮助初学者快速理解设备接入的流程。将一步步演示如何注册产品、创建设备、实现设备的接入、数据上传以及云端属性修改等操作,让你在最短的时间内掌握IoT平台的基本使用方法。无论你是物联网开发的新手,还是希望快速上手华为云IoT平台的用户,这篇教程都将为你提供清晰易懂的步骤和操作指南,让你轻松实现智能家居设备的上云。二、MQTT客户端软件整个过程需要用到的软件工具只有一个MQTT客户端。 这个软件将在本文章的附件里上传,方便大家下载。 二、上手实操华为云官网: cid:link_15打开官网,搜索物联网,就能快速找到 设备接入IoTDA。 3.1 物联网平台介绍华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。设备可以通过固网、2G/3G/WIIF/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。 3.2 开通物联网服务地址: cid:link_12 开通免费单元。 点击 立即创建。 正在创建标准版实例,需要等待片刻。  创建完成之后,点击详情。 可以看到标准版实例的设备接入端口和地址。下面框起来的就是`端口号`和`域名` 点击实例名称,可以查看当前免费单元的配置情况。     开通之后,点击`接入信息`,也能查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。 总结:端口号: MQTT (1883)| MQTTS (8883) 接入地址: dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息:打开Windows电脑的命令行控制台终端,使用ping 命令。ping一下即可。Microsoft Windows [版本 10.0.19045.5011](c) Microsoft Corporation。保留所有权利。​C:\Users\Lenovo>ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com​正在 Ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字节的数据:来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44​117.78.5.125 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 37ms,最长 = 37ms,平均 = 37ms​C:\Users\Lenovo>​MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口合适。 3.3 创建产品链接:cid:link_0(1)创建产品 (2)填写产品信息根据自己产品名字填写,下面的设备类型选择自定义类型。 (3)产品创建成功  创建完成之后点击查看详情。  (4)添加自定义模型产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。模型简单来说: 就是存放设备上传到云平台的数据。当前设备需要与云平台交互的属性如下: 接下来就按照下面的属性创建 华为云平台的模型。上传到华为云服务器的属性:LED1 卧室灯 布尔类型LED2 客厅灯 布尔类型BH1750 环境光检测 浮点数SW1 风扇开关 布尔类型SW2 空调开关 布尔类型SW3 窗帘开关 布尔类型SW4 电视开关 布尔类型SHT30_T 环境温度 浮点数SHT30_H 环境湿度 浮点数 MQ2 烟雾检测 浮点数BEEP 蜂鸣器 布尔类型FLAME 火焰监测 布尔类型 先点击自定义模型。 【1】创建服务ID名字设置为: stm32然后点击新增属性。【2】LED1 卧室灯 布尔类型 【3】LED2 客厅灯 布尔类型【4】BH1750 环境光检测 浮点数 【5】SW1 风扇开关 布尔类型 【6】SW2 空调开关 布尔类型 【7】SW3 窗帘开关 布尔类型 【8】SW4 电视开关 布尔类型 【9】SHT30_T 环境温度 浮点数  【10】SHT30_H 环境湿度 浮点数 【11】MQ2 烟雾检测 浮点数 【12】BEEP 蜂鸣器 布尔类型 【13】FLAME 火焰监测 布尔类型  (5)创建完成 3.4 添加设备产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。(1)注册设备  (2)根据自己的设备填写  (3)保存设备信息创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。 内容信息。{ "device_id": "674b1361ef99673c8ad15dee_dev1", "secret": "12345678"}  (4)设备创建完成  (5)设备详情点击详情。 下面是详情说明:  3.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_10 业务流程:(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_10对于设备而言,一般会订阅平台下发消息给设备 这个主题。设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。以当前设备为例,最终订阅主题的格式如下:$oc/devices/{device_id}/sys/messages/down 最终的格式:$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/messages/down (4)主题发布格式对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。这个操作称为:属性上报。帮助文档地址:cid:link_6  根据帮助文档的介绍, 当前设备发布主题,上报属性的格式总结如下:发布的主题格式:$oc/devices/{device_id}/sys/properties/report 最终的格式:$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。​上传的JSON数据格式如下:​{ "services": [ { "service_id": <填服务ID>, "properties": { "<填属性名称1>": <填属性值>, "<填属性名称2>": <填属性值>, .......... } } ]}根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。​比如:根据这个格式,组合一次上传的属性数据:{"services": [{"service_id": "stm32","properties":{"LED1":0,"LED2":0,"BH1750":24.5,"SW1":0,"SW2":0,"SW3":0,"SW4":0,"SHT30_T":30.2,"SHT30_H":24.5,"MQ2":10.1,"BEEP":0,"FLAME":0}}]} 3.6 MQTT三元组MQTT协议登录需要填用户ID,设备ID,设备密码等信息,就像我们平时登录QQ,微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数,一般称为MQTT三元组。 接下来介绍,华为云平台的MQTT三元组参数如何得到。 (1)MQTT服务器地址要登录MQTT服务器,首先记得先知道服务器的地址是多少,端口是多少。帮助文档地址:cid:link_1 MQTT协议的端口支持1883和8883,它们的区别是:8883 是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。根据上面的域名和端口号,得到下面的IP地址和端口号信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)华为云的MQTT服务器地址:117.78.5.125华为云的MQTT端口号:1883 如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com  (2)生成MQTT三元组华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com打开这个工具,填入设备的信息(也就是刚才创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。下面是打开的页面: 填入设备的信息: (上面两行就是设备创建完成之后保存得到的)直接得到三元组信息。 得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。ClientId 674b1361ef99673c8ad15dee_dev1_0_0_2024113013Username 674b1361ef99673c8ad15dee_dev1Password 8e22b61b0e6bf9f3911782b0e1e1cdcea2ab0952b7af6b34aa0d707732ec2f7a  3.7 模拟设备登录测试经过上面的步骤介绍,已经创建了产品,设备,数据模型,得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。  (1)填入登录信息打开MQTT客户端软件,对号填入相关信息(就是上面的文本介绍)。然后,点击登录,订阅主题,发布主题。 点击之后的效果: (2)打开网页查看完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。 点击详情页面,可以看到上传的数据: 到此,云平台的部署已经完成,设备已经可以正常上传数据了。 (3)MQTT登录测试参数总结MQTT服务器: 117.78.5.125MQTT端口号: 1883​//物联网服务器的设备信息#define MQTT_ClientID "674b1361ef99673c8ad15dee_dev1_0_0_2024113013"#define MQTT_UserName "674b1361ef99673c8ad15dee_dev1"#define MQTT_PassWord "8e22b61b0e6bf9f3911782b0e1e1cdcea2ab0952b7af6b34aa0d707732ec2f7a"​//订阅与发布的主题#define SET_TOPIC "$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/messages/down" //订阅#define POST_TOPIC "$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/properties/report" //发布​​发布的数据:{"services": [{"service_id": "stm32","properties":{"LED1":0,"LED2":0,"BH1750":24.5,"SW1":0,"SW2":0,"SW3":0,"SW4":0,"SHT30_T":30.2,"SHT30_H":24.5,"MQ2":10.1,"BEEP":0,"FLAME":0}}]} 3.8 项目凭证接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权,需要使用项目凭证 这个参数。【1】获取项目凭证 点击左上角用户名,选择下拉菜单里的我的凭证项目凭证:ff981a50957a403cb68d906e0d424eed 3.9 创建IAM账户创建一个IAM账户,因为接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权。简单来说,就是身份的认证。 调用接口获取Token时,就需要填写IAM账号信息。所以,接下来演示一下过程。地址: cid:link_5 鼠标放在左上角头像上,在下拉菜单里选择统一身份认证。 点击右上角创建用户。 填写用户名和密码信息: 继续点击下一步: 然后点击创建用户。  创建成功:  创建完成 用户信息如下:主用户名 xiao_ping_pingIAM用户 ds_abc密码 DS12345678  3.10 获取影子数据帮助文档:cid:link_7设备影子介绍:设备影子是一个用于存储和检索设备当前状态信息的JSON文档。每个设备有且只有一个设备影子,由设备ID唯一标识设备影子仅保存最近一次设备的上报数据和预期数据无论该设备是否在线,都可以通过该影子获取和设置设备的属性简单来说:设备影子就是保存,设备最新上传的一次数据。我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。 如果对接口不熟悉,可以先进行在线调试:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow 在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。 调试完成看右下角的响应体,就是返回的影子数据。 这里的工程ID要选择正确:  点击调试之后:  设备影子接口返回的数据如下:{ "device_id": "674b1361ef99673c8ad15dee_dev1", "shadow": [ { "service_id": "stm32", "desired": { "properties": null, "event_time": null }, "reported": { "properties": { "LED1": 18.1, "LED2": 16.2, "BH1750": 34.5, "SW1": 1, "SW2": 1, "SW3": 1, "SW4": 1, "SHT30_T": 20.2, "SHT30_H": 34.5, "MQ2": 10.1, "BEEP": 1, "FLAME": 1 }, "event_time": "20241130T134755Z" }, "version": 7 } ]}  调试成功之后,可以得到访问影子数据的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,获取影子数据,完成上位机开发。 链接如下:https://5a00dd0860.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/ff981a50957a403cb68d906e0d424eed/devices/674b1361ef99673c8ad15dee_dev1/shadow 3.11 修改设备属性地址: cid:link_8接口说明设备的产品模型中定义了物联网平台可向设备下发的属性,应用服务器可调用此接口向指定设备下发属性。平台负责将属性以同步方式发送给设备,并将设备执行属性结果同步返回。修改设备属性的接口,可以让服务器给设备下发指令,如果需要控制设备。在线调试地址:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=UpdateProperties 修改设备属性是属于同步命令,需要设备在线才可以进行调试,先使用MQTT客户端登录服务器,模拟设备上线。然后进行调试,测试数据远程下发给设备。 【1】利用MQTT客户端先登录设备 (这是同步命令,必须在线才能调试) 【2】点击调试 填入的测试数据:{"services":{"SW1":1}} 点击调试之后。   【4】可以看到,MQTT客户端软件上已经收到了服务器下发的消息  调试成功之后,可以得到修改设备属性的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,向设备发送控制命令,完成上位机开发。 https://5a00dd0860.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/ff981a50957a403cb68d906e0d424eed/devices/674b1361ef99673c8ad15dee_dev1/properties  由于是同步命令,服务器必须要收到设备的响应才能顺利完成一个流程(当然,设备不回应也没影响),设备响应了服务器才能确定数据下发成功。MQTT设备端如何响应呢?设备响应格式说明:cid:link_9  三、视频教程也可以看视频学习华为云IOT平台的使用过程:华为云物联网平台视频1:cid:link_13华为云物联网平台视频2:cid:link_14   我正在参加【案例共创】第1期 书写云产品应用构建开发最佳实践/评测,共创官方文档:cid:link_4
  • [热门活动] 【话题交流】物联网产品开发:接入平台 vs 自建服务器,哪个更适合?
    随着科技的进步和互联网的普及,物联网(IoT)已经成为连接物理世界与数字世界的桥梁,其应用范围从智能家居到工业自动化,再到智慧城市等无所不在。面对如此广阔的市场,越来越多的企业开始涉足物联网产品的研发。 在规划物联网解决方案时,企业常常面临一个关键决策:是选择接入现成的物联网平台,还是自行搭建服务器来支持自家的物联网设备? 接入物联网平台的优势成本效益:对于初创公司或预算有限的企业来说,使用第三方提供的物联网平台可以大大降低初期投资,因为不需要为硬件、软件、网络基础设施和安全措施投入大量资金。快速上市:现成的平台通常提供了一套完整的工具和服务,使得开发者能够更快地将产品推向市场,减少开发周期。专业服务和支持:成熟的物联网平台拥有专业的技术支持团队,可以为企业提供持续的技术帮助和更新服务。安全性:许多大型物联网平台都遵循严格的安全标准,并且定期进行安全审计,这可以帮助企业更好地保护用户数据。自建服务器的优势定制化程度高:如果企业的物联网解决方案有特殊需求,或者需要高度定制化的功能,那么自建服务器可能会更加灵活,允许完全根据自身需求设计架构。数据控制权:通过自建服务器,企业可以对收集的数据拥有绝对的控制权,包括如何存储、处理和分析这些数据。长期成本节约:虽然初期投入可能较大,但从长远来看,如果企业规模足够大,自建服务器在某些情况下可能会更经济,尤其是在避免了长期的服务订阅费用后。隐私保护:对于那些对数据隐私非常敏感的应用场景,如医疗健康行业,企业可能更倾向于自己管理数据以确保符合相关法规要求。 大家,认为对于新进入物联网领域的公司来说,哪种方式更为合适?在选择过程中,哪些因素应该被优先考虑?
总条数:797 到第
上滑加载中