噔噔噔。。。。一晃来到了Funpack第十二期(以下简称F12),记得是今年二月份左右开始第一次做第六期,通过这个活动接触到很多有趣的开发板和体验到不同的平台开发方式,其中乐趣还是令人回味无穷的~~
接下来,在完成最后一期的F12活动同时,我们也更加期待以后策划的活动~
以下正文:
本次活动板卡是兼容arduino的Wio Terminal平台,使用arduino IDE环境开发。本次完成的任务实现的功能为:盆景养护环境监测系统,使用DHT11(onewire协议)来实现温湿度测量功能,PCF8591(IIC协议)来实现ADC转换功能,将采集到的数据在LCD液晶上进行显示。
资源介绍:
Wio Terminal 是基于SAMD51的微控制器,具有 Realtek RTL8720DN 支持的无线连接,与Arduino和MicroPython兼容。它的运行速度为 120MHz (最高可达200MHz), 4MB 外部闪存和 192K
B RAM。它同时支持蓝牙和Wi-Fi,为物联网项目提供了骨架。Wio Terminal自身配有 a 2.4” LCD屏幕, 板载IMU(LIS3DHTR),麦克风,蜂鸣器,microSD卡槽,光传感器和红外发射器(IR 940nm)。 最重要的是它还有两个用于Grove生态系统 的多功能Grove端口和40个Raspberry pi兼容的GPIO引脚,用于支持更多附加组件。
原理图如下:
引脚连接说明:
DHT11-->(Wio Pin) A0
PCF8591_SDA-->(Wio Pin) I2C1_SDA
PCF8591_SCL-->(Wio Pin) I2C1_SCL
光敏电阻接入PCF8591的ADC通道0,CO2传感器接入PCF8591的ADC通道1。
测量电压和CO2浓度转换公式参考以下链接:
https://blog.csdn.net/weixin_38075894/article/details/111589375
测量到的光强以电压方式进行显示,由于光敏电阻特性在每个光敏之间存在差异,所以没有具体统一的转换方式,测量到的数据仅供参考。
代码部分:
TFT显示初始化和对界面信息显示设计代码如下:
tft.begin();
tft.setRotation(3);
digitalWrite(LCD_BACKLIGHT, HIGH);
tft.fillScreen(TFT_GREEN );
tft.setFreeFont(&FreeSansBoldOblique9pt7b);
tft.fillRect(0,0,320,118,TFT_CYAN);
tft.setTextColor(TFT_BLACK, TFT_CYAN );
tft.drawString("DINO",59,29);
tft.drawString("15733910611@139.com",59,59);
tft.setTextColor(TFT_BLACK, TFT_GREEN );
tft.drawString("Light",0,119);
tft.drawString("CO2",0,179);
tft.drawString("Temperature",159,119);
tft.drawString("Humidity",159,179);
tft.drawFastHLine(0,119,320,TFT_BLACK);
tft.drawFastHLine(0,120,320,TFT_BLACK);
tft.drawFastHLine(0,179,320,TFT_BLACK);
tft.drawFastHLine(0,180,320,TFT_BLACK);
tft.drawFastVLine(159,120,160,TFT_BLACK);
tft.drawFastVLine(160,120,160,TFT_BLACK);
tft.drawString("Lex",119,154);
tft.drawString("%",119,214);
tft.drawString("°C",259,154);
tft.drawString("%",259,214);
PCF8591测量AD通道0和通道1并进行显示,代码如下:
tft.drawNumber((int_to_volts(pcf.analogRead(0), 8, ADC_REFERENCE_VOLTAGE)*100),59,149);//light
tft.drawNumber((int_to_volts(pcf.analogRead(1), 8, ADC_REFERENCE_VOLTAGE)*100),59,209);//co2
读取DHT11传感器的数据代码如下,第一帧读取湿度数据(湿度数据为8位数据),第二帧读取温度数据(温度数据为16位,分为高8位和低8位),最后一帧为检验数据。如果校验数据正确则数据有效,反之丢弃。
// 每次读取DHT的时间间隔要大于2秒
float h = dht.readHumidity(); //读取湿度数据
// Read temperature as Celsius (the default)
float t = dht.readTemperature(); //读取温度数据
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);//读取到校验位数据
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
板卡上电展示:
活动感想:本次活动的板卡,在设计上非常美观开发,使用C实现,简单易上手。可以接入WIFI和蓝牙,在其他方面可以实现更丰富的物联网功能和设计,还是非常值得上手体验的。