TA的每日心情 | 开心 2024-7-17 11:18 |
---|
签到天数: 491 天 连续签到: 1 天 [LV.9]以坛为家II
|
本次设计的题目是基于STM32F746为主控芯片的低功耗无线温度采集器设备,其目的是想实现检测设备温度,室内温度和各种需要检测温度的地方。该设备采用STM32F746为主控,利用温度传感器持续性采集被测物体或者环境温度,通过2.4G无线发送到集中器设备,再通过485或者LAN传输到电脑端进行记录和分析,还可以给客户进行微信短信等报警处理的一套系统。设备自带OLED显示屏,通过按键唤醒,实现本地显示,满足客户需求,一节14505电池至少可以使用2年。
设计流程如下:
这里选择使用STM32F746主要其目的是由于该MCU的性能非常强大,同时可以支持LCD/OLED显示,可以快速刷新数据,给用户以非常良好的用户体验;温度传感器采用市面常用的DS18B20温度传感器,其具有耐高温,测量精度高,采用数字输出方式,抗干扰能力强等诸多优势;本次设计显示屏采用LCD显示,主要其显示内容较多,便于操控,同时又可以UI功能拓展,未以后产品**预留无限可能。
这里由于时间紧任务重,所以在传输方面,本次直接采用串口的方式传输到电脑终端,这与通过485传输功能完全一致;在低功耗方面暂未实现,因此该项目的**完善的空间较多。
代码详解:
1、 驱动DS18B20获取温度 - //从ds18b20得到温度值
- //精度:0.1C
- //返回值:温度值 (-550~1250)
- short DS18B20_Get_Temp(void)
- {
- u8 temp;
- u8 TL,TH;
- short tem;
- DS18B20_Start (); // ds1820 start convert
- DS18B20_Rst();
- DS18B20_Check();
- DS18B20_Write_Byte(0xcc);// skip rom
- DS18B20_Write_Byte(0xbe);// convert
- TL=DS18B20_Read_Byte(); // LSB
- TH=DS18B20_Read_Byte(); // MSB
-
- if(TH>7)
- {
- TH=~TH;
- TL=~TL;
- temp=0;//温度为负
- }else temp=1;//温度为正
- tem=TH; //获得高八位
- tem<<=8;
- tem+=TL;//获得底八位
- tem=(float)tem*0.625;//转换
- if(temp)return tem; //返回温度值
- else return -tem;
- }
复制代码
2、 利用LCD显示温度数据 - BSP_LCD_DisplayStringAt(0, 60, (uint8_t *)"temp:", LEFT_MODE);
- i[0] = Temp / 10 + 0x30;
- i[1] = Temp % 10 + 0x30;
- BSP_LCD_DisplayChar(100, 60,i[0]);
- BSP_LCD_DisplayChar(124, 60,i[1]);
复制代码
3、 将温度数据利用串口的方式传输到后台终端 - HAL_UART_Transmit(&UartHandle,(uint8_t *)&Temp,1,100);
复制代码最终效果如下:
|
|