【DFRobot 云雀气象仪】学习笔记01(设备开箱和串口获取传感器数据信息)
# 云雀气象仪学习笔记云雀气象仪能够测量风速、风向、温度、湿度、气压数据,可输出标准物理量数据,用户可通过I2C/UART通信接口实时获取气象5要素,兼容Arduino、Microbit、行空板等常用的开源硬件控制器,同时,气象仪内置16M存储空间,可以将采集到的数据以CSV格式存储下来,并通过Type-C接口将数据导出进行分析。在气象仪内部,预留了两个传感器扩展接口,以接入更多传感器,气象仪整体采用模块化设计,若空间不足,用户可叠加百叶扇来增加内部空间。气象仪底部,采用了1/4英制标准的螺纹口,用户可使用我们赠送的可调节桌面三角架使用,也可根据不同的使用场景,更换不同其他三角架。气象仪机身高度16cm,直径5.5cm,整体体积接近一瓶可乐罐大小,利于携带和收纳。
该传感器的资料在下面这个网址上有详细说明,就不细说了。
[云雀气象仪 (dfrobot.com.cn)](https://wiki.dfrobot.com.cn/_SKU_EDU0157_云雀气象仪)
## 1:准备材料
- 5V移动电源,官方给的盒子是没有这个电源适配器的,需要自己单独加一个给设备供电;
- PC电脑一台;
- 云雀气象仪设备;
- Type-c数据线,这个官方自带的有;
- 4P通讯数据线,这个也是官方自带;
- USB转TTL数据线一根
## 2:设备开机上电
设备结构说明图:
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231025090616150.png)
### 2.1:设备安装
- 1.将风向标对准风向转轴的插槽位置,轻轻按压即可完成安装。拆卸时轻轻按压(就是再往下压一下)即可弹出,且勿用力拉扯。
- 2.连接三脚架至气象仪底部的1/4英寸螺纹孔。
### 2.2:数据采集
- 1.将5V移动电源或5V适配器连接到气象仪的Type-C接口,为气象仪供电。
- 2.请在每次启动气象仪时,校准其方位以确保准确性。调整气象仪的角度,使Type-C接口朝向指南针S所指的方向,即将Type-C口对准正南方向。一旦气象仪正常启动,黄灯将熄灭,此时您需要将风向标转动一圈以完成风向校准。
- 3.校准完成后等待10秒,气象仪将自动开始数据采集和存储,默认每30秒采集并存储一次,存储时百叶扇位置会闪烁绿灯。
注意:此时不能直接使用电脑进行供电。如果将电脑连接至气象仪,气象仪仅提供数据导出功能,无法进行数据存储。
### 2.3:数据导出
- 1.数据采集完毕后,先断开气象仪与5V电源的连接。将电脑连接至气象仪的Type-C接口,此时电脑将弹出一个U盘。
- 2.打开U盘,找到最新的CSV文件,打开即可查看记录的数据。
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023172733597.png)
这个时候发现CSV文件的时间时不对的,为了方便查看记录,先进行时间设置;
### 3.1:设置时间
云雀可通过U盘中的config文件来设置时间,在config文件中新建一行,输入“Time:2023/10/23/17:37:35”, 并保存。云雀断电重启后会自动读取config中设置的时间并更新系统时间。
- 说明:使用config文件设置时间时,建议填入的时间比实际时间快10S,预留出系统初始化时间及操作时间。系统初始化时,会自动检测config文件中是否有Time标签及相应数据,有的话则更新系统时间,更新完成后会将config文件中的Time标签及数据清除,以防止下次启动时再次重新设置时间。
- 注意:config文件中最后有一行空行,空行被删除后会出现异常情况,在手动填入“Time:2023/10/23/17:37:35”时 ,注意填完后要保证最后有一行空行。
这个时候,你如果用txt记事本是看不出来的,用txt记事本是看不出来的,用txt记事本是看不出来的,
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023174034532.png)
你需要用notepad--来看,或者vs code 等开源编译器查看;我这里以notepad--为例;
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023174257745.png)
保存,然后再次启动设备,然后再次查看设备;
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023174532280.png)
### 3.2:设置串口通讯
我们使用串口通讯来实现数据接收,还是回到配置文件,设置Communication为UART;Sample_Rate为10S一次;
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023174747532.png)
各个标签说明可参考如下表说明:
| 名称 | 功能 | 可选项 | 默认 |
| :------------ | :----------------------- | :--------------- | :--- |
| Communication | 设置通信方式 | I2C/UART(9600) | I2C|
| Sample_rate | 设置数据采样率 | 1-60S或1-60M | 30S|
| Record | 设置是否开启数据存储功能 | ON/OFF | ON |
| Delay_record| 设置存储功能延时启动时间 | 10~60 | 10S|
| Light_Switch| 设置RGB指示灯是否常亮 | ON/OFF | OFF|
| Low_Power | 设置是否开启低功耗模式 | ON/OFF | OFF|
回到U盘,查看我们的保存的采集数据文件;
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023175149747.png)
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231023175126978.png)
## 4:串口获取天气数据信息
为了验证串口输出的数据是否正确,首先我们用串口工具和USB转TTL数据线来测试串口通讯,需要注意的是,如果串口发送命令不能成功应答的话,注意以下信息:
- 波特率设置为115200;
- TX和RX是否接反,来回测试下;
- 确保USB转TTL线好用;
对于刚接触这个设备信息的话,建议使用官方的硬件欢迎去测试,使用arduino来做,具体操作如下:
### 软硬件准备
- 硬件
- (http://www.dfrobot.com.cn/goods-521.html) x1
- (https://www.dfrobot.com.cn/goods-791.html) x1
- 云雀气象仪 x1
- 软件
- Arduino IDE [点击下载Arduino IDE](https://www.arduino.cc/en/Main/Software)
- 下载并安装[云雀气象仪库](https://github.com/cdjq/DFRobot_Atmospherlum)。[如何安装库?](http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=1854&page=1&extra=#pid6955)
### 接线图
!(https://img.dfrobot.com.cn/wiki/5cabf4771804207b131ae8cb/5969539da311aa59748300792b694c1d.png)
这里我先使用串口工具来调试硬件信息,当前我们需要用到云雀气象仪的库文件,仔细查看文件里面的说明,比如数据包发送:
```ABAP
typedef struct{
uint8_t cmd; /**< Command */
uint8_t argsNumL; /**< Low byte of parameter number after the command */
uint8_t argsNumH; /**< High byte of parameter number after the command */
uint8_t args;/**< The array with 0-data length, its size depends on the value of the previous variables argsNumL and argsNumH */
}__attribute__ ((packed)) sCmdSendPkt_t, *pCmdSendPkt_t;
typedef struct{
uint8_t status; /**< Response packet status, 0x53, response succeeded, 0x63, response failed */
uint8_t cmd; /**< Response packet command */
uint8_t lenL; /**< Low byte of the buf array length excluding packet header */
uint8_t lenH; /**< High byte of the buf array length excluding packet header */
uint8_t buf; /**< The array with 0-data length, its size depends on the value of the previous variables lenL and lenH */
}__attribute__ ((packed)) sCmdRecvPkt_t, *pCmdRecvPkt_t;
```
具体命令说明:
```CPP
#define DEBUG_TIMEOUT_MS 2500
#define CMD_GET_DATA 0x00 ///< Return the name based on the given name
#define CMD_GET_ALL_DATA 0x01 ///< Get all onboard sensor data
#define CMD_SET_TIME 0x02 ///< Set onboard RTC time
#define CME_GET_TIME 0x03
#define CMD_GET_UNIT 0x04 ///< Get sensor units
#define CMD_GET_VERSION 0x05 ///< Get version number
#define IIC_MAX_TRANSFER 32 ///< Maximum transferred data via I2C
#define I2C_ACHE_MAX_LEN 32
#define CMD_END CMD_GET_VERSION
#define ERR_CODE_NONE 0x00 ///< Normal communication
#define ERR_CODE_CMD_INVAILED 0x01 ///< Invalid command
#define ERR_CODE_RES_PKT 0x02 ///< Response packet error
#define ERR_CODE_M_NO_SPACE 0x03 ///< Insufficient memory of I2C controller(master)
#define ERR_CODE_RES_TIMEOUT 0x04 ///< Response packet reception timeout
#define ERR_CODE_CMD_PKT 0x05 ///< Invalid command packet or unmatched command
#define ERR_CODE_SLAVE_BREAK 0x06 ///< Peripheral(slave) fault
#define ERR_CODE_ARGS 0x07 ///< Set wrong parameter
#define ERR_CODE_SKU 0x08 ///< The SKU is an invalid SKU, or unsupported by SCI Acquisition Module
#define ERR_CODE_S_NO_SPACE 0x09 ///< Insufficient memory of I2C peripheral(slave)
#define ERR_CODE_I2C_ADRESS 0x0A ///< Invalid I2C address
#define STATUS_SUCCESS 0x53///< Status of successful response
#define STATUS_FAILED 0x63///< Status of failed response
```
```CPP
void loop(void){
Serial.println("----------------------------");
Serial.print(atm.getValue("Temp"));
Serial.println(atm.getUnit("Temp"));
Serial.print(atm.getValue("Humi"));
Serial.println(atm.getUnit("Humi"));
Serial.print(atm.getValue("Speed"));
Serial.println(atm.getUnit("Speed"));
Serial.println(atm.getValue("Dir"));
Serial.print(atm.getValue("Altitude"));
Serial.println(atm.getUnit("Altitude"));
Serial.print(atm.getValue("Pressure"));
Serial.println(atm.getUnit("Pressure"));
Serial.println("----------------------------");
Serial.println(atm.getInformation(true));
delay(100);
}
```
最后我们根据上面的信息,使用串口通讯工具来实现数据处理:
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231024153352422.png)
我们可以得到温度,湿度,风速,风向,海拔,气压等详细数据信息;
设备运行照片图:
!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231025171118027.png)
虽然云雀气象仪会自动保存数据到本地的CSV文件下, 但我会接下来将进行数据保存,将数据保存到本地 <p>每次开机都需要风向校准吗? </p>
秦天qintian0303 发表于 2023-10-26 08:53
每次开机都需要风向校准吗?
<p>需要的,校准方式官网有项目说明</p>
页:
[1]