實作要點
本次實作使用 RTL8720DN 透過 I2C 介面讀取 DHT20 溫溼度感測及在透過 I2C 介面將讀取結果顯示於 OLED SSD1306。
硬體清單
- A1 PICO x 1
- RTL8720DN 擴展板 x 1
- OLED SSD1306 x 1
- seeed DHT20 模組 x 1 (https://wiki.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DH20/)
軟體實作
軟體主題有 2 個項目,
OLED SSD1306 及 DHT20.OLED SSD1306 使用 u8g2 程式庫。
DHT20 的程式庫則使用 DFRobot 的 DHT20 程式庫 https://github.com/DFRobot/DFRobot_DHT20 )
u8g2 library 先在 Arduino IDE 裝好 u8g2 程式庫
DHT20 程式庫
準備就緒後,進行程式段。
void setup(){
Serial.begin(115200);
//Initialize sensor
while(dht20.begin()){
Serial.println("Initialize sensor failed");
delay(1000);
}
u8g2.begin();
u8g2.setFont(u8g2_font_8x13_mf);
u8g2.setFontPosTop();
fontHigh = u8g2.getMaxCharHeight();
fontWidth = u8g2.getMaxCharWidth();
u8g2.clear();
u8g2.setCursor(0,0);
u8g2.print("temp:");
u8g2.updateDisplay();
delay(100);
u8g2.setCursor(0,fontHigh);
u8g2.print("Humidity:");
u8g2.updateDisplay();
}
void loop(){
//Get ambient temperature
tempValue = dht20.getTemperature();
Serial.print("temp:"); Serial.print(tempValue);Serial.print("C");
delay(100);
//clean temp display
u8g2.setCursor(fontWidth * 5 + 1,0);
u8g2.print(" ");
u8g2.updateDisplay();
//display temp value to oled
delay(10);
String tempStr = String(tempValue,2);
u8g2.setCursor(fontWidth * 5 + 1,0);
u8g2.print(tempStr + "C");
u8g2.updateDisplay();
delay(500);
//Get relative humidity
humidityValue = dht20.getHumidity()*100;
Serial.print(" humidity:"); Serial.print(humidityValue);Serial.println(" %RH");
delay(100);
//clean temp display
u8g2.setCursor(fontWidth * 9 + 1,fontHigh);
u8g2.print(" ");
u8g2.updateDisplay();
//display temp value to oled
delay(10);
String humidityStr = String(humidityValue,2);
u8g2.setCursor(fontWidth * 9 + 1,fontHigh);
u8g2.print(humidityStr + "%");
u8g2.updateDisplay();
delay(1000);
}
Github 原始碼
https://github.com/cold63/Arduino_Code/tree/main/Ameba_DHT20相關連結
A1 Pico / RTL8720DN
https://www.makdev.net/2021/09/ameba-ameba-bw16-arduino-ide.html
RTL8720DN 擴展板
https://www.makdev.net/2022/09/ameba-bw16-type-c-shield.html
0 comments:
發佈留言