Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
2024-RSOC
【2024-RSOC】RT-Thread开发温湿度阿里云监测
发布于 2024-07-27 20:01:36 浏览:203
订阅该版
[tocm] #### 监测器基本功能 要求: 1. 使用AHT10软件包采集温湿度并上传到阿里云; 2. 梳理文件系统启动流程,熟悉shell命令使用。能够将font分区挂载上,并在温湿度数据上传云端的同时,将数据同步放在文件系统处,文件名为:Data.txt; 文件内容格式: ``` Temp:XX ; Humi:XX ; Count: 1(自上电起所采集的数据次数) Temp:XX ; Humi:XX ; Count: 2 Temp:XX ; Humi:XX ; Count: 3 ``` 3. 利用云端给开发板发送指令实现小灯翻转。 #### 硬件及开发环境 - **硬件**:星火一号开发板 - **env环境**:scons工具、menuconfig工具 - **编辑器**:vscode - **RT-Thread源代码**:位于`rt-thread\bsp\stm32\stm32f407-rt-spark\dist\project\`工程下,通过`scons --dist`命令在`rt-thread\bsp\stm32\stm32f407-rt-spark`目录下打包的完整独立原始工程。 #### 一、软件包与组件 ##### 软件包(Software Package) **定义**: 具有特定的功能,用来完成特定任务的一个程序或一组程序。可以理解为帮助我们完成了底层驱动的编写,只需使用里面提供的API即可。 **功能**: 简化开发过程,封装了复杂的底层细节,使开发者能专注于应用逻辑。例如,使用AHT10软件包采集温湿度数据,无需编写复杂的I2C通信代码。 ##### 组件(Component) **定义**: 组件是一个可以独立开发、测试、部署和维护的软件单元,具有明确的功能边界,可在不同项目中重复使用。 **功能**: 提高软件的模块化和可维护性,方便功能扩展、维护和测试。例如,文件系统和网络协议栈(如MQTT)都可作为独立组件。 #### 二、温湿度传感器——AHT10(I2C设备) **步骤**: 1. 打开板载的AHT外设驱动。 2. 确认Kconfig中已经关联并开启I2C总线。 3. 搜索并下载`rt_vsprintf_full`软件包(支持浮点输出)。 **任务代码编写**: ```c #include
#include
#include
#include
#include "aht10.h" #include "dfs_posix.h" #define LOG_TAG "app_aht10" #define LOG_LVL LOG_LVL_DBG #include
static float humidity, temperature; static aht10_device_t dev; static int count = 0; static const char *i2c_bus_name = "i2c3"; static void write_data_to_file(float temp, float humi) { FILE *fp = fopen("/Data.txt", "a"); if (fp != NULL) { fprintf(fp, "Temp:%.2f ; Humi:%.2f ; Count: %d\n", temp, humi, ++count); fclose(fp); } } static void thread1_entry(void *parameter) { while (1) { /* 读取湿度 */ humidity = aht10_read_humidity(dev); rt_kprintf("Humidity: %.2f%%\n", humidity); write_data_to_file(temperature, humidity); /* 读取温度 */ temperature = aht10_read_temperature(dev); rt_kprintf("Temperature: %.2fC\n", temperature); write_data_to_file(temperature, humidity); // Note: Normally, you'd write temp & humi separately, but here for simplicity. rt_thread_mdelay(5000); // Increase delay for visibility } } static int app_aht10_example(void) { dev = aht10_init(i2c_bus_name); if (dev == RT_NULL) { LOG_E("The sensor initializes failure"); return -RT_ERROR; } #### 三、文件系统与数据存储 **文件系统挂载**: 在RT-Thread中,通常会在系统初始化时自动挂载文件系统。然而,如果需要手动操作或检查文件系统挂载情况,可以使用`dfs_mount`函数。对于我们的示例,我们假设文件系统已经在系统启动时被正确挂载,并且`/Data.txt`文件可以被正常创建和写入。 **注意事项**: - 确保文件系统分区(如FATFS或YAFFS)已经被正确配置和初始化。 - 在写入文件之前,检查文件是否已存在以及是否有足够的空间。 **代码补充**: (如果需要在程序开始时显式挂载文件系统,可以添加以下代码,但通常这不是必需的,因为RT-Thread的BSP配置会处理这些) ```c #include
// 假设文件系统已经配置好,这里仅作为示例(实际中可能不需要) static int mount_filesystem(void) { // 这里以FATFS为例,实际路径和名称取决于你的配置 if (dfs_mount("fatfs", "/", "0:", 0) == 0) { rt_kprintf("Filesystem mounted successfully\n"); return 0; } else { rt_kprintf("Failed to mount filesystem\n"); return -1; } } // 在main函数或初始化函数中调用 int main(void) { // ... 其他初始化代码 if (mount_filesystem() != 0) { // 处理挂载失败的情况 } // 创建线程等后续操作... } ``` #### 四、云端指令处理与小灯翻转 **MQTT通信**: 为了从云端接收指令并控制小灯,我们需要使用MQTT协议与云端进行通信。RT-Thread支持多种MQTT客户端库,如Paho MQTT、EMQ X MQTT等。 **步骤**: 1. 在`menuconfig`中启用MQTT软件包。 2. 配置MQTT客户端的参数,如服务器地址、端口、客户端ID、用户名和密码(如果需要)。 3. 编写MQTT主题订阅和消息处理函数。 **小灯控制**: - 使用GPIO接口控制小灯。 - 在MQTT消息处理函数中,根据接收到的指令(如“on”或“off”)来控制小灯的开关状态。 **代码示例**(仅为概念性框架): ```c // 假设已有MQTT客户端实例mqtt_client void mqtt_message_arrive(void *context, const char *topic, int qos, void *payload, size_t payloadlen) { char *msg = rt_malloc(payloadlen + 1); if (msg == RT_NULL) return; memcpy(msg, payload, payloadlen); msg[payloadlen] = '\0'; if (strstr(msg, "on")) { // 控制小灯开 rt_pin_write(LED_PIN, PIN_HIGH); } else if (strstr(msg, "off")) { // 控制小灯关 rt_pin_write(LED_PIN, PIN_LOW); } rt_free(msg); } // 在MQTT初始化时设置消息处理函数 // ... mqtt_client->set_message_arrive_callback(mqtt_client, mqtt_message_arrive); // ... ``` **注意**:上述代码是高度简化的,并且需要根据实际使用的MQTT客户端库和硬件接口进行调整。 #### 五、总结 通过上述步骤,我们可以实现一个,基于RT-Thread的温湿度物联网监测器,该监测器能够实时采集温湿度数据将数据上传到云端,并同步存储在本地文件系统中。同时,它还能接收云端指令来控制小灯的开关状态。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
PJ0614
这家伙很懒,什么也没写!
文章
4
回答
0
被采纳
0
关注TA
发私信
相关文章
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部