一种基于STM32F407-RT-SPARK开发板的智能花盆设计案例

时间:2025-11-01  作者:Diven  阅读:0

功能简介:

一种基于STM32F407-RT-SPARK开发板的智能花盆设计案例

该项目是基于STM32F407-RT-SPARK开发板的智能花盆。通过温湿度传感器和光照传感器,能够监测花盆土壤当前的温湿度和附近的光照强度,并将这三项数据实时显示在LCD屏上。还能够监测花盆是否倾倒,监测到花盆倾倒后,蜂鸣器会发出警报,直到按下按键,警报停止。还配备了rw007模块,能将这些数据实时上传到onenet平台。

硬件框架:

使用到的模块包括:LCD屏、温湿度传感器、光照传感器蜂鸣器、物理按键

1.jpg

图一 硬件实物图与使用到的模块

1.jpg

图二 硬件框架图

软件框架:

1.jpg

图三 软件框架图

软件模块说明及部分代码:

六轴传感器线程:

六轴传感器模块测量花盆的偏航角、横滚角和俯仰角,并将测量数据发送给CPU进行判断,若花盆倾倒,记录异常数据。

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"); }  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; }

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");

光强传感器线程:

光强传感器模块将记录光强数据,用于LCD显示和云端显示。

brightness = ap3216c_read_ambient_light(devv); LOG_D("current brightness: %d.%d(lux).", (int)brightness, ((int)(10 * brightness) % 10));

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 %.sn", 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 */

温湿度线程:

温湿度传感器模块测量土壤的温湿度,并记录测量数据。

temperature=(int)temperature+(int)(temperature10)%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);

蜂鸣器线程:

读取六轴传感器数据,并对花盆的倾倒状态进行判断。若花盆倾倒,蜂鸣器报警,可通过开发板上的按键关闭蜂鸣器。

 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页面展示

1.jpg

1.jpg

猜您喜欢

压敏电阻是特殊类型的电阻器,其电阻值会施加在其上的电压变化而变化。应用于电子设备和电力系统中,主要用于保护设备免受过电压的损害。本文将详细探讨压敏电阻的作用、工...
2025-04-15 09:30:05

在现代办公和学习中,装订耗材的选择非常重要。根据不同的需求,装订耗材可以分为几大类。胶装耗材是最常见的,适用于制作书籍、报告和手册。通过热熔胶将纸张牢固粘合,确...
2014-04-25 00:00:00

离子风机是利用静电原理来产生风力的设备,通过离子化空气中的分子,改变空气的电荷状态,从而实现空气的运动。离子风机的工作原理主要基于高压电场的作用,能够有效地产生...
2019-07-20 00:00:00


随着人工智能、深度学习在市场越来越受欢迎,除了GPU、众多独角兽公司的AI专用芯片,FPGA同样是深度学习的热门平台之一。本文将给大家介绍5款强大到不可思议的F...
2023-07-11 09:38:00

瓷片电容是电子设备中常见的元件。用,但很多人不知道为什么会烧坏。本文将探讨瓷片电容烧坏的原因,帮助大家更好地理解。过电压瓷片电容有额定电压。如果超出这个电压,电...
2025-03-21 15:00:35

砂轮、砂轮片和云石片是工业加工中常用的磨削工具。砂轮是由磨料颗粒和粘合剂构成的圆盘状工具,主要用于金属、木材和其材料的磨削和切割。砂轮片则是砂轮的一个变种,通常...
2024-08-30 00:00:00

贴片电阻本身并没有一个固定的「正常电压」值。其承受电压的能力取决于它的规格,主要体现在功率(瓦数)和尺寸上。 一般来说,贴片电阻的额定电压与其功率和尺寸成正比。...
2024-11-26 11:29:45

施工现场,尤其是在潮湿环境下的工作场合,确保电力安全是绝对不容忽视的关键问题。在这样的环境中,照明设备及其电力供应系统需要特别关注,以确保施工人员的安全,同时避...
2024-09-18 00:00:00

熔断器和电流保护器是电气系统中不可少的重要组成部分,在保障设备安全和稳定运行方面有着着非常重要的作用。熔断器能够有效地防止过载和短路情况的发生,及时切断电流,保...
2010-06-16 00:00:00