IoTea的节点代码和PCB图。 点我查看原始数据。
- Seeeduino LoRaWAN
- BME 280 空气温湿度传感器
- Dust sensor
- CO2 sensor
- O2 sensor
- Digital Light Sensor
- Soil Moisture & Temperature Sensor
节点向网关上传的数据为:
unsigned char Lora_data[15] = {0,1,2,3,,4,5,6,7,8,9,10,11,12,13,14};
各项数据含义:
- Lora_data[0]:空气温度,摄氏度
- Lora_data[1]:空气湿度,百分比
- Lora_data[2]:海拔高度高8位,米
- Lora_data[3]:海拔高度低8位
- Lora_data[4]:CO2浓度高8位
- Lora_data[5]:CO2浓度低8位
- Lora_data[6]:灰尘浓度高8位
- Lora_data[7]:灰尘浓度低8位
- Lora_data[8]:光照强度高8位
- Lora_data[9]:光照强度低8位
- Lora_data[10]:氧气含量,单位为千分之一
- Lora_data[11]:土壤温度,摄氏度
- Lora_data[12]:土壤湿度,百分比
- Lora_data[13]:电池电压,单位为0.1V
- Lora_data[14]:错误代码
错误代码含义:
Lora_data[14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]
- bit0:1 为 BME 280 空气温湿度传感器错误
- bit1:1 为 CO2 传感器错误
- bit2:1 为灰尘传感器错误
- bit3:1 为 Digital Light Sensor 错误
- bit4:1 为氧气传感器数据错误
- bit5:1 为土壤温湿度传感器错误
- bit6:保留
- bit7:保留
另外本文件夹内有错误代码转换器:Error_code_transform.exe ,可以打开这个.exe文件并输入十六进制的错误代码,然后就得到了传感器错误类型。
// seeedtea.ino
#define interval_time 600 //间隔时间,秒
更改此参数可改变数据发送间隔。在每次循环中,数据采集需耗时约 1 分钟,不建议将此值改为60秒以内。值越大,系统运行越省电。
// seeedtea.ino
#define Preheat_time 30000 //Dust Sensor预热时间,单位 ms
//Dust_other.cpp
#define sampletime_ms 30000 //采样时间30s;
灰尘传感器需要一定预热时间来让传感器内的空气流动起来。
//POWER_Ctrl.cpp
#define Battery_coefficient 0.159864 //ADC读数乘以这个系数就是电池电压
#define Solar_coefficient 0.22559 //ADC读数乘以这个系数就是太阳能电压
//POWER_Ctrl.cpp
#define Fan_start_temp 45 //风扇开始运行温度
#define Fan_start_light 500 //风扇开始运行光照强度
//Oxygen.cpp
#define O2_percentage 208.00 //初始化时会按照这个值校准氧气传感器,单位为千分之一
// seeedtea.ino
#define LORA_RUN //注释后lora初始化和数据发送停止
#define SENSOR_RUN //注释后外部传感器停止工作
//POWER_Ctrl.cpp
#define FAN_ON //使用一个固定的电池电压代替采集到的电池电压,解除电压对风扇的判断
//测试使用。实际应用需注释掉
/******* DS18B20 模式控制 **********************/
#define Slower_Mode //慢速模式获取温度。注释掉即为快速模式
D2:接 LED 指示灯和外部复位单片机
I2C:SCL 和 SDA
//Dust_other.h
#define Dust_pin 3
//CO2.cpp
#define CO2_serial Serial1 //CO2 传感器使用D0和D1硬件串口
//seeedtea.ino
#define dataPin 6 //土壤水分和温度传感器数据引脚
#define clockPin 7 //土壤水分和温度传感器时钟引脚
//POWER_Ctrl.h
#define DS18B20_pin 8 //板载温度传感器
#define Fan_pin 9 //风扇引脚
#define Air_CtrlPin 10 //空气传感器控制引脚
#define Soil_CtrlPin 11 //土壤传感器控制引脚
#define Battery_pin A2 //电池电压采集引脚
#define Solar_pin A3 //太阳能电压采集引脚
//Oxygen.h
#define O2_pin A1
看门狗定时器用于监测系统运行状态,当系统运行异常时会复位单片机,从而使其可以长期不间断运行。
需要引用的库:
- Adafruit_SleepyDog.h 已经添加进项目中
- Adafruit_ASFcore-master.zip 打包放在项目文件夹中,需要手动添加进Arduino IDE中
int WatchdogSAMD::enable(int maxPeriodMS, bool isForSleep)
输入参数:
- int maxPeriodMS:等待时间,单位毫秒。超时会复位。最大允许16000毫秒。
返回值:
- int类型,返回实际等待时间
void WatchdogSAMD::reset()
输入参数:无
输出参数:无
调用该函数来复位看门狗定时器,简称“喂狗”。超出等待时间未复位就会使单片机重启。
void WatchdogSAMD::disable()
停止看门狗定时器。
供电:5Vor3.3V
参数范围:温度-40-85℃ 湿度0%-100% 气压300-100hPa
IIC通信,地址0X76,
相关函数:bme280.getTemperature(), bme280.getHumidity(), bme280.getPressure()
Lora_data[0]: 温度 Lora_data[1]: 湿度
Lora_data[2]:高8位Lora_data[3]:低8位 气压
供电:5V 单位:pcs/L或pcs/0.01cf
相关函数:Dust_value = Dust_concentration()
Lora_data[6]:高8位 Lora_data[7]:低8位 灰尘
供电:4.5V-6V 范围:0-2000ppm
UART通信
相关函数:unsigned int CO2_dataRecieve(void)
Lora_data[4]:高8位 Lora_data[5]:低8位 CO2浓度
供电:5V 范围0.1-40000LUX
IIC通信,地址 0X29,
相关函数:TSL2561.readVisibleLux()
Lora_data[8]:高8位 Lora_data[9]:低8位 光照
供电:3.3V/5V 范围:0-25%
读模拟值
int O2_value()
Lora_data[10] 氧气浓度(通过该函数获得的值要除以10,得到百分比)
供电:3.3V 范围:温度-40-+123.8℃ 湿度0-100%
sht1x.readTemperatureC() sht1x.readTemperatureF() sht1x.readHumidity()
Lora_data[11] 土壤温度 Lora_data[12] 土壤湿度