本帖最后由 resumebb 于 2020-9-2 14:55 编辑
一、七要素气象站介绍二、功能讲解首先整体说一下我写的思路,通过串口三去发送指令并接收来自气象站的数据,再用串口一进行打印检查,对于多串口共用有问题的可以看看我 STM32F407多路串口通信进行数据收发,然后后期会用串口二将数据发送到全站仪去检测,目前只是个demo,但是已经完成了对数据的处理和收发功能。 举个栗子:读一下温度传感器
- <blockquote> double getTemperature()
复制代码
前三位为默认指令码,因此数据从第四位开始,因为要求的数据格式为10进制,并且要进行计算,所以就进行了一下转换,分离高4位和低4位,然后乘以权重,再根据数据通信协议进行数据计算,最后存在结构体的温度变量中。 再举个栗子,大气压传感器
- double getAtmospheric_Pressure()
复制代码
和温度传感器一样,但是因为通信协议有高位和低位四个数,所以要多定义几个变量。
指令定义:
u8 weatherIndex[8] = {0x01,0x03,0x00,0x01,0x00,0x0D,0xD5,0xCF};
发送函数:
- <span style="white-space:pre"> </span> void sendIndex(void)
复制代码
ps:发送间隔不能太短,我这里设置的就有点短了,气象仪有点反应不过来,延时要给大一点。
结构体定义:
- <blockquote>typedef struct weatherData{
复制代码
因为要检测变化值,连续检测,然后将前后两次的各项传感器数值进行比较,若差值太大就要停止,所以我准备用结构体存储,把每一次测的数据存于队列中,当连续三次没有出问题的话就出队。
完整请移步https://blog.csdn.net/qq_41573860/article/details/108300452
结果初始值:
第一次测试:
第二次:轻拨风速转片,转动风向标
第三次:使劲的转,让风速突破历史记录
第四次:停止转动,记录保持
第五次:断电,重新上电,各项数据保持
因为涉及到很多其他方面的功能,所以我上传的项目中已经能删的文件已经删掉,只留了气象传感器和串口相关的函数,注释掉的是气象站用不到的,测试了一下不影响气象站的使用和数据处理。
有问题可以私我,大家一起讨论学习,博客地址:https://blog.csdn.net/qq_41573860/article/details/108300452
全部资料51hei下载地址:
七要素气象传感器.7z
(307.73 KB, 下载次数: 33)
|