ผู้เริ่มต้น
สร้างสถานีตรวจอากาศขนาดเล็ก
เซ็นเซอร์จอแสดงผล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 จากน้ำโดยตรงในขณะที่ยังคงให้มีการไหลเวียนของอากาศ เนื่องจากไม่ใช่เซ็นเซอร์ที่จมน้ำได้
แผนภาพการต่อสาย
โค้ดเริ่มต้น
// 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);
}
ไม่แน่ใจขั้นตอนไหน?
ถามเรา