這裡是將兩個程式合併的版本:

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
}
$abcdeabcde151015202530354045505560fghijfghij
$abcdeabcde151015202530fghijfghij