Small plastic project enclosure with AHT20 sensor and ESP32-C3 breadboard, on a windowsill

ผู้เริ่มต้น

สร้างเครื่องวัดอุณหภูมิและความชื้นในห้อง

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

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

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

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

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

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

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

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

ตัวควบคุมทำอะไร

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

เซ็นเซอร์สิ่งแวดล้อมทำอะไร

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

จอแสดงผลทำอะไร

จอแสดงผลมีอยู่เพื่อแสดงตัวเลขสองตัวในที่ที่คนสามารถอ่านได้ ไม่มีตรรกะของตัวเอง -- ตัวควบคุมส่งสิ่งที่ต้องวาดอย่างแม่นยำทุกครั้งที่มีการรีเฟรช

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

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

ข้อควรพิจารณาเรื่องแรงดันไฟฟ้า

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

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

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

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

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

การอัปเกรดเสริมในอนาคต: การบันทึกข้อมูล Wi-Fi

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

การเดินสายไฟ

  • AHT20 VIN → ESP32-C3 SuperMini 3.3V — กำลังไฟเซ็นเซอร์
  • AHT20 GND → ESP32-C3 SuperMini GND
  • AHT20 SDA → ESP32-C3 SuperMini GPIO8 — ข้อมูล I2C (Arduino-ESP32 ค่าเริ่มต้น SDA)
  • AHT20 SCL → ESP32-C3 SuperMini GPIO9 — นาฬิกา I2C (Arduino-ESP32 ค่าเริ่มต้น SCL)

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

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

VIN → 3.3V GND SDA → GPIO8 SCL → GPIO9 ESP32-C3 SuperMini AHT20

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

#include <Wire.h>
#include <Adafruit_AHTX0.h>

// Adjust these if your board's silkscreen differs from the common
// ESP32-C3/S3 default I2C pins
#define SDA_PIN 8
#define SCL_PIN 9

Adafruit_AHTX0 aht;
sensors_event_t humidityEvent, tempEvent;

const unsigned long READ_INTERVAL_MS = 2000;
unsigned long lastRead = 0;

void setup() {
  Serial.begin(115200);
  delay(500);

  Wire.begin(SDA_PIN, SCL_PIN);

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

void loop() {
  unsigned long now = millis();
  if (now - lastRead >= READ_INTERVAL_MS) {
    lastRead = now;

    aht.getEvent(&humidityEvent, &tempEvent);

    Serial.print("Temperature: ");
    Serial.print(tempEvent.temperature);
    Serial.print(" C   Humidity: ");
    Serial.print(humidityEvent.relative_humidity);
    Serial.println(" %");
  }
}

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