Small enclosure with 0.96 inch OLED showing temperature and humidity, outdoors on a railing

ผู้เริ่มต้น

สร้างสถานีตรวจอากาศขนาดเล็ก

เซ็นเซอร์จอแสดงผลIoT

เครื่องวัดอุณหภูมิและความชื้นแบบง่าย ๆ ที่คุณสามารถสร้างได้เองภายในช่วงบ่าย ไม่ต้องมีบัญชีคลาวด์ ไม่ต้องมีแอปพลิเคชัน เพียงแค่ตัวเลขจริงบนหน้าจอจริง

รวมชิ้นส่วนจริง 7 รายการ

ราคารวมชุดนี้: 1,829.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโครงการ

โครงการนี้สร้างเครื่องมือขนาดเล็กในพื้นที่ที่อ่านและแสดงอุณหภูมิและความชื้นแบบเรียลไทม์ โดยไม่จำเป็นต้องมีบัญชีคลาวด์ แอป หรือการพึ่งพาเครือข่ายใดๆ เพียงแค่ตัวควบคุม เซ็นเซอร์ และหน้าจอที่แสดงตัวเลขจริง

สิ่งที่ตัวควบคุมทำ

ตัวควบคุมจะรันโปรแกรมขนาดเล็กหนึ่งโปรแกรมวนซ้ำ: อ่านเซ็นเซอร์ จัดรูปแบบค่า ส่งไปยังจอแสดงผล รอสักครู่แล้วทำซ้ำ เป็น "สมอง" เพียงหนึ่งเดียวในโครงการนี้ — ทั้งเซ็นเซอร์และจอแสดงผลเป็นอุปกรณ์ต่อพ่วงที่โง่เง่าซึ่งทำตามสิ่งที่ตัวควบคุมบอกอย่างถูกต้อง

สิ่งที่เซ็นเซอร์ AHT20 ทำ

AHT20 จะวัดอุณหภูมิและความชื้นสัมพัทธ์และรายงานค่าทั้งสองไปยังตัวควบคุมผ่าน I2C โดยทำการแปลงอนาล็อกเป็นดิจิทัลภายในเองแทนที่จะส่งแรงดันไฟฟ้าดิบให้ตัวควบคุมตีความ ควรทำความเข้าใจอย่างชัดเจนว่าการสร้างนี้คืออะไรและไม่ใช่: ด้วย AHT20 เพียงอย่างเดียว นี่คือสถานีวัดอุณหภูมิและความชื้น — ไม่ได้วัดความดันบรรยากาศ และไม่ได้ใช้เซ็นเซอร์วัดความดันในโครงการนี้ สถานีอากาศ "เต็มรูปแบบ" ที่มีการตรวจจับความดันและระดับความสูงจะต้องเพิ่มเซ็นเซอร์บารอมิเตอร์เพิ่มเติมจากสิ่งปลูกสร้างนี้ โครงการนี้ตั้งใจจะจำกัดเฉพาะอุณหภูมิและความชื้น

สิ่งที่จอแสดงผลทำ

OLED ขนาด 0.96" มีอยู่เพื่อแสดงค่าปัจจุบันสองค่าในตำแหน่งที่อ่านได้ชัดเจน ไม่มีตรรกะของตัวเอง — ตัวควบคุมจะส่งสิ่งที่ต้องวาดอย่างถูกต้องในการรีเฟรชทุกครั้ง

แนวคิดการเดินสาย I2C ทั่วไป

ทั้ง AHT20 และ OLED โดยทั่วไปจะสื่อสารผ่าน I2C: สายสัญญาณที่ใช้ร่วมกันสองเส้น (นาฬิกาและข้อมูล) บวกกับกำลังและกราวด์ โดยแต่ละอุปกรณ์ระบุด้วยที่อยู่ของตัวเองบนบัส เนื่องจากทั้งสองโมดูลสามารถใช้สายสัญญาณสองเส้นร่วมกันได้ ให้ยืนยันว่าที่อยู่เริ่มต้นของพวกเขาไม่ขัดแย้งกันก่อนที่จะเดินสายทั้งสองพร้อมกัน — โมดูล OLED และ AHT20 ส่วนใหญ่จัดส่งที่ที่อยู่เริ่มต้นที่แตกต่างกัน แต่ควรตรวจสอบมากกว่าที่จะสันนิษฐาน

แนวคิดซอฟต์แวร์และไลบรารี

ทั้งเซ็นเซอร์และจอแสดงผลจะมีโค้ดตัวอย่างที่ใช้งานได้สำหรับแพลตฟอร์มตัวควบคุมทั่วไป เริ่มต้นจากตัวอย่างของผู้ผลิตหรือชุมชนสำหรับแต่ละส่วนแยกกัน ยืนยันว่าทั้งสองทำงานได้ด้วยตัวเอง จากนั้นค่อยรวมเข้าเป็นโปรแกรมเดียว — การดีบักส่วนใหม่ที่ยังไม่ได้ทดสอบสองส่วนพร้อมกันนั้นยากกว่าการดีบักทีละส่วนอย่างมีนัยสำคัญ

การทดสอบและการแก้ไขปัญหา

  • ไม่มีการอ่านค่าเลย — ตรวจสอบกำลังและกราวด์ก่อน จากนั้นยืนยันว่าที่อยู่ I2C ของเซ็นเซอร์ตรงกับสิ่งที่โค้ดของคุณคาดไว้
  • จอแสดงผลว่างเปล่า — ยืนยันการเชื่อมต่อพลังงานของตัวเองแยกจากเซ็นเซอร์ ปัญหาบัสที่ใช้ร่วมกันกับอุปกรณ์หนึ่งบางครั้งอาจส่งผลกระทบต่ออีกอุปกรณ์หนึ่งได้
  • การอ่านค่าผิดปกติหรือกระโดดไปมา — ตรวจสอบสายไฟที่หลวมหรือความขัดแย้งของที่อยู่บนบัส I2C ที่ใช้ร่วมกัน ก่อนที่จะสันนิษฐานว่าเซ็นเซอร์เสีย
  • ไม่มีอะไรอัปเดตหลังจากการอ่านครั้งแรก — ยืนยันว่าลูปของคุณอ่านเซ็นเซอร์ซ้ำจริงในแต่ละรอบ แทนที่จะใช้ค่าแรกที่บันทึกไว้ซ้ำ

การอัปเกรดในอนาคตทางเลือก: การบันทึกข้อมูลระยะไกล

เมื่อการอ่านค่าในพื้นที่นี้ทำงานได้อย่างน่าเชื่อถือ ขั้นตอนต่อไปคือการเพิ่มการเชื่อมต่อไร้สาย เพื่อให้สามารถบันทึกค่าจากระยะไกลแทนที่จะแสดงเฉพาะบนจอแสดงผลในพื้นที่เท่านั้น — ดูโครงการ Wireless Environmental Data Logger สำหรับแนวคิดที่เกี่ยวข้อง

การเดินสาย

  • เซ็นเซอร์ AHT20 VCC → ESP32-C3 3V3
  • เซ็นเซอร์ AHT20 GND → ESP32-C3 GND
  • เซ็นเซอร์ AHT20 SDA → ESP32-C3 GPIO8 — ค่าเริ่มต้น I2C SDA
  • เซ็นเซอร์ AHT20 SCL → ESP32-C3 GPIO9 — ค่าเริ่มต้น I2C SCL
  • จอแสดงผล OLED VCC → ESP32-C3 3V3
  • จอแสดงผล OLED GND → ESP32-C3 GND
  • จอแสดงผล OLED SDA → ESP32-C3 GPIO8 — บัสที่ใช้ร่วมกับ AHT20 (ที่อยู่ I2C ต่างกัน: 0x38 กับ 0x3C)
  • จอแสดงผล OLED SCL → ESP32-C3 GPIO9 — บัสที่ใช้ร่วมกับ AHT20
  • ESP32-C3 SuperMini → สาย USB-C → คอมพิวเตอร์/พาวเวอร์แบงค์ (พลังงาน + การเขียนโปรแกรม)
  • กล่องหุ้ม: ติดตั้ง ESP32-C3 และ OLED เพื่อให้หน้าจอสามารถมองเห็นได้ผ่านหน้าต่าง/ช่องเปิด โดยให้ AHT20 สัมผัสกับอากาศรอบข้าง (ไม่ได้ปิดผนึกกับแผงวงจรที่ร้อน) เพื่อการอ่านค่าที่แม่นยำ

เนื่องจากอุปกรณ์ I2C ทั้งสองใช้สายไฟสองเส้นร่วมกัน ให้เดินสายและทดสอบ AHT20 เพียงอย่างเดียวก่อน (ยืนยันการอ่านค่าผ่าน Serial) จากนั้นจึงเพิ่ม OLED — การแยกแยะการเชื่อมต่อที่ไม่ดีทำได้ง่ายกว่ามากเมื่อทำทีละอุปกรณ์ หากวางไว้กลางแจ้งหรือที่ชื้น ให้ป้องกัน AHT20 จากน้ำโดยตรงในขณะที่ยังคงให้มีการไหลเวียนของอากาศ เนื่องจากไม่ใช่เซ็นเซอร์ที่จมน้ำได้

แผนภาพการต่อสาย

VCC → 3V3 GND SDA → GPIO8 SCL → GPIO9 VCC → 3V3 GND SDA → GPIO8 SCL → GPIO9 ESP32-C3 AHT20 sensor OLED display USB-C cable

โค้ดเริ่มต้น

// Mini Weather Station — ESP32-C3 SuperMini + AHT20 + OLED
#include <Wire.h>
#include <Adafruit_AHTX0.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// --- Pins — adjust to match your board's silkscreen if different ---
#define SDA_PIN 8
#define SCL_PIN 9

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_AHTX0 aht;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);
  Wire.begin(SDA_PIN, SCL_PIN);

  if (!aht.begin()) {
    Serial.println("AHT20 not found — check wiring");
    while (1) delay(1000);
  }

  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("SSD1306 not found — check wiring");
    while (1) delay(1000);
  }
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  sensors_event_t humidity, temp;
  aht.getEvent(&humidity, &temp);

  float tempC = temp.temperature;
  float tempF = tempC * 9.0 / 5.0 + 32.0;
  float rh = humidity.relative_humidity;

  display.clearDisplay();

  display.setTextSize(2);
  display.setCursor(0, 0);
  display.print(tempC, 1);
  display.println(" C");

  display.setTextSize(1);
  display.setCursor(0, 20);
  display.print(tempF, 1);
  display.println(" F");

  display.setCursor(0, 40);
  display.print("Humidity: ");
  display.print(rh, 0);
  display.println(" %");

  display.display();

  Serial.print("Temp: "); Serial.print(tempC); Serial.print(" C / ");
  Serial.print(tempF); Serial.print(" F  Humidity: "); Serial.print(rh);
  Serial.println(" %");

  delay(2000);
}

ไม่แน่ใจขั้นตอนไหน? ถามเรา