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

时间:2025-06-09  作者: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

猜您喜欢

电子设备日益普及的今天,你是否好奇过,这些设备是如何在各种环境下都能稳定运行的呢?答案就藏在那些默默无闻的电子元件中,其中一个关键配件就是——低电压差线性稳压器...
2024-07-01 00:00:00

蓝色贴片电阻的识别主要依靠其表面的标识,通常采用数字或字母编码来表示阻值。无标示电阻: 一些小尺寸的蓝色贴片电阻,尤其是用于特定集成电路的,可能没有标示,其阻值...
2024-11-29 10:26:12

肖特基二极管是应用于电子电路中的半导体器件,因其具有低正向压降和快速开关特性而受到青睐。在使用肖特基二极管时,正确判断其正负极是非常重要的,因为反向连接可能导致...
2025-04-08 07:00:03

现代工业和电子产品中,选择合适的组件和材料至关重要。PM_27.4X8.8MM_TM是一种广泛应用于多个领域的高性能产品,具有独特的设计和出色的性能表现。本文将...
2025-02-24 11:29:21

电阻作为电子电路中不可少的基础元件,其性能直接影响整个电路的稳定性和可靠性。AVX作为全球知名的电子元器件制造商,其长电极电阻产品因高精度和优良的性能广受市场青...
2014-02-21 13:03:30

​振振动传感器作为一种重要的传感器,应用广泛,市场前景广阔。其主要应用领域包括机械设备、汽车、航空、电力、石油化工等领域,用于检测和监控设备的振动状态,从而实现...
2023-07-31 13:50:00

电路保护成为保障设备安全运行的重要环节。自恢复保险丝作为高效、可靠的电路保护元件,因其自动断电后可自行恢复的特性,受到众多制造商和用户的青睐。雅宝(AUPO)作...
2023-07-16 22:13:30

碳化硅二极管(SiC二极管)优越的性能,应用于多个领域。在电力电子领域,SiC二极管因其高耐压、高温和高频特性,成为变频器和电源转换器中的重要组成部分,显著提高...
2023-04-19 00:00:00

采样电阻作为电流检测和信号采集的重要元件,其性能直接影响整个系统的稳定性和准确性。万裕(SAMXON)作为知名的电子元器件制造品牌,旗下采样电阻产品高精度、稳定...
2023-09-10 00:21:10

电解电容是电子设备中常见的元件。很多人会问,电解电容引脚可以加长吗?这个问题的答案并不是简单的“是”或“不是”。下面我们来详细探讨一下这个问题。引脚加长的必要性...
2025-03-21 17:30:03