這裡是將兩個程式合併的版本:
cpp
複製程式碼
#include <SimpleDHT.h>
int pinDHT11 = 13;
SimpleDHT11 dht11(pinDHT11);
#include "Wire.h" //i2c 21,22
#include "U8g2lib.h" //請下載u8g2程式庫
//OLED 螢幕解析度為128*64
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
int soil_sensor = 36; //土壤濕度感測器AO信號腳 連接到ESP32 GPIO36
int relayPin = 13; //繼電器IN信號腳 連接到ESP32 GPIO13
void setup() {
Serial.begin(115200);
u8g2.begin();//初始化
u8g2.enableUTF8Print();//啟用 UTF8字集
u8g2.setFont(u8g2_font_unifont_t_chinese1);//設定使用中文字形
u8g2.setDrawColor(1);//設定顏色,我們是單色只有1
u8g2.setFontPosTop();//座標從左上開始
u8g2.setFontDirection(0);//0不旋轉、1->90、2->180、3->270
pinMode(soil_sensor,INPUT); //定義土壤濕度感測器接口為輸入接口。
pinMode(relayPin,OUTPUT); //義繼電器接口為輸出接口。
}
void loop() {
// start working...
Serial.println("=================================");
Serial.println("Sample DHT11...");
// read without samples.
byte temperature = 0;//byte->0-255
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.print(SimpleDHTErrCode(err));
Serial.print(","); Serial.println(SimpleDHTErrDuration(err)); delay(1000);
return;
}
Serial.print("Sample OK: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
//OLED顯示溫度
u8g2.clearBuffer();//顯示前清除螢幕
u8g2.setCursor(30, 20);//移動游標
u8g2.print(String("溫度:").c_str());//寫入文字 c_str:字串轉char陣列
u8g2.print(String(temperature).c_str());//寫入文字
u8g2.print(String(" °C").c_str());//寫入文字
//顯示濕度
u8g2.setCursor(30, 40);//移動游標
u8g2.print(String("濕度:").c_str());//寫入文字
u8g2.print(String(humidity).c_str());//寫入文字
u8g2.print(String(" %").c_str());//寫入文字
//送到螢幕顯示
u8g2.sendBuffer();
//Soil moisture sensor reading
int val= analogRead(soil_sensor); //Soil moisture value is assigned to val
Serial.println(val);
//Check soil moisture level and control watering
if(val < 3000) { //If soil moisture value is less than 3000, turn off watering function
digitalWrite(relayPin,HIGH);
} else { //If soil moisture value is greater than or equal to 3000, turn on watering function
digitalWrite(relayPin,LOW);
}
delay(1000); //Delay for 1 second
}