Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread
星火1号_spark_星火一号_开发板
夏令营
[RT-Thread x 大学生夏令营] 智能花盆
发布于 2023-07-25 22:13:36 浏览:769
订阅该版
[tocm] ## 功能简介: 该项目是基于STM32F407-RT-SPARK开发板的智能花盆。通过温湿度传感器和光照传感器,它能够监测花盆土壤当前的温湿度和附近的光照强度,并将这三项数据实时显示在LCD屏上。它还能够监测花盆是否倾倒,监测到花盆倾倒后,蜂鸣器会发出警报,直到按下按键,警报停止。同时,它还配备了rw007模块,能将这些数据实时上传到onenet平台。 ## 硬件框架: 使用到的模块包括:LCD屏、温湿度传感器、光照传感器、蜂鸣器、物理按键  图一 硬件实物图与使用到的模块  图二 硬件框架图 ## 软件框架:  图三 软件框架图 ## 软件模块说明及部分代码: ### 1.六轴传感器线程: 六轴传感器模块测量花盆的偏航角、横滚角和俯仰角,并将测量数据发送给CPU进行判断,若花盆倾倒,记录异常数据。 ```c icm20608_device_t devvv = RT_NULL; rt_err_t result; devvv = icm20608_init(i2c_bus_namee); if (devvv == RT_NULL) { LOG_E("The sensor initializes failure"); return 0; } else { LOG_D("The sensor initializes success"); } /* 对 icm20608 进 行 零 值 校 准: 采 样 10 次, 求 取 平 均 值 作 为 零 值 */ result = icm20608_calib_level(devvv, 10); if (result == RT_EOK) { LOG_D("The sensor calibrates success"); LOG_D("accel_offset: X%6d Y%6d Z%6d", devvv->accel_offset.x, devvv->accel_offset.y, devvv->accel_offset.z); } else { LOG_E("The sensor calibrates failure"); icm20608_deinit(devvv); return 0; } rt_int16_t accel_x, accel_y, accel_z; /* 读 取 三 轴 加 速 度 */ result = icm20608_get_accel(devvv, &accel_x, &accel_y, &accel_z); if (result == RT_EOK) { LOG_D("current accelerometer: accel_x%6d, accel_y%6d, accel_z%6d", accel_x, accel_y, accel_z); } else { LOG_E("The sensor does not work"); break; } ``` ### 2.LCD显示线程: 该线程初始化后会持续读取温度、湿度和光照数据,并将其实时显示在LCD显示屏上。 lcd_clear(WHITE); lcd_set_color(WHITE, RED); lcd_show_string(10, 0, 16, "Hello!"); lcd_set_color(WHITE, BLACK); lcd_show_string(10, 26, 32, "Temperature:"); lcd_show_string(10, 90, 32, "Humidity:"); lcd_show_string(10, 160, 32, "Light:"); lcd_set_color(WHITE, BLUE); lcd_show_num(30, 26+32, temperature, 2, 32); lcd_show_string(65,26+32,32,"C"); lcd_show_num(30, 90+32, humidity, 2, 32); lcd_show_string(65, 90+32, 32, "%"); lcd_show_num(30, 160+32, brightness, 2, 32); lcd_show_string(80, 160+32, 32, "lux"); 3.光强传感器线程: 光强传感器模块将记录光强数据,用于LCD显示和云端显示。 ```c brightness = ap3216c_read_ambient_light(devv); LOG_D("current brightness: %d.%d(lux).", (int)brightness, ((int)(10 * brightness) % 10)); ``` ### 4.rw007线程(Onenet): 读取rw007模块传来的温湿度数据、光照数据并存储到云端以图表方式进行显示;若倾倒角度数据异常,会在云端进行报警。 ``` int onenet_publish_digit(int argc, char **argv) { if (argc != 3) { LOG_E("onenet_publish [datastream_id] [value] - mqtt pulish digit data to OneNET."); return -1; } if (onenet_mqtt_upload_digit(argv[1], atoi(argv[2])) < 0) { LOG_E("upload digit data has an error!\n"); } return 0; } int onenet_publish_string(int argc, char **argv) { if (argc != 3) { LOG_E("onenet_publish [datastream_id] [string] - mqtt pulish string data to OneNET."); return -1; } if (onenet_mqtt_upload_string(argv[1], argv[2]) < 0) { LOG_E("upload string has an error!\n"); } return 0; } /* onenet mqtt command response callback function */ static void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size) { char res_buf[] = { "cmd is received!\n" }; LOG_D("recv data is %.*s\n", recv_size, recv_data); /* user have to malloc memory for response data */ *resp_data = (uint8_t *) ONENET_MALLOC(strlen(res_buf)); strncpy((char *)*resp_data, res_buf, strlen(res_buf)); *resp_size = strlen(res_buf); } /* set the onenet mqtt command response callback function */ int onenet_set_cmd_rsp(int argc, char **argv) { onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb); return 0; } MSH_CMD_EXPORT(onenet_set_cmd_rsp, set cmd response function); #endif /* FINSH_USING_MSH */ ``` ### 5.温湿度线程: 温湿度传感器模块测量土壤的温湿度,并记录测量数据。 ``` temperature=(int)temperature+(int)(temperature*10)%10; humidity=(int)humidity+(int)(humidity*10)%10; brightness=(int)brightness+(int)(brightness*10)%10; rt_thread_mdelay(100); onenet_mqtt_upload_digit("temperature", temperature); rt_thread_mdelay(100); onenet_mqtt_upload_digit("humidity", humidity); rt_thread_mdelay(100); onenet_mqtt_upload_digit("brightness", brightness); ``` ### 6.蜂鸣器线程: 读取六轴传感器数据,并对花盆的倾倒状态进行判断。若花盆倾倒,蜂鸣器报警,可通过开发板上的按键关闭蜂鸣器。 ```c /* 设置按键引脚为输入模式 */ rt_pin_mode(PIN_KEY1, PIN_MODE_INPUT_PULLUP); rt_pin_mode(PIN_WK_UP, PIN_MODE_INPUT_PULLUP); /* 设置蜂鸣器引脚为输出模式 */ rt_pin_mode(PIN_BEEP, PIN_MODE_OUTPUT); /* 设置按键中断模式与中断回调函数 */ rt_pin_attach_irq(PIN_KEY1, PIN_IRQ_MODE_FALLING, irq_callback, (void *) PIN_KEY1); rt_pin_attach_irq(PIN_WK_UP, PIN_IRQ_MODE_FALLING, irq_callback, (void *) PIN_WK_UP); /* 使能中断 */ rt_pin_irq_enable(PIN_KEY1, PIN_IRQ_ENABLE); rt_pin_irq_enable(PIN_WK_UP, PIN_IRQ_ENABLE); int topple; int X,Y,Z; X=devvv->accel_offset.x; Y=devvv->accel_offset.y; Z=devvv->accel_offset.z; if(abs(Y)<=10000){ topple=0; rt_pin_write(PIN_BEEP,PIN_LOW); LOG_D("KEY1 interrupt. beep off."); } else{ topple=1; rt_pin_write(PIN_BEEP,PIN_HIGH); LOG_D("WK_UP interrupt. beep on."); break; } ``` ### Onenet页面展示   ## 演示视频网站: https://www.bilibili.com/video/BV1NN411v7Jv
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
呐呐呐
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
正点原子miniSTM32开发板读写sdcard
3
反馈rtt串口驱动对低功耗串口lpuart1不兼容的问题
4
Keil MDK 移植 RT-Thread Nano
5
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
6
RT thread HID 如何收发数据
7
求一份基于RTT系统封装好的STM32F1系列的FLASH操作程序
8
RT-Thread修改项目名称之后不能下载
9
rt-studio编译c++
10
有木有移植rt-thread(nano)到riscv 32位MCU上
推荐文章
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部