เป้าหมายของโครงการ
โครงการอื่น ๆ ในแคตตาล็อกของร้านค้านี้ส่วนใหญ่จะรันโปรแกรมที่อัปโหลดเพียงโปรแกรมเดียวบนไมโครคอนโทรลเลอร์ แต่โครงการนี้แตกต่างอย่างแท้จริง: มันบูตระบบปฏิบัติการ Linux เต็มรูปแบบจาก MicroSD การ์ด และสร้างแดชบอร์ดเซ็นเซอร์จริงขึ้นมา ความแตกต่างนี้มีความสำคัญในทางปฏิบัติ — เป็นเดสก์ท็อปจริงหากคุณต้องการ, มีทางเลือกภาษาโปรแกรมจริง, มีบริการพื้นหลังจริง, และมีการทำงานหลายอย่างพร้อมกันจริง, ทั้งหมดนี้ทำงานพร้อมกันบนฮาร์ดแวร์ขนาดเล็กพอที่จะถือได้ด้วยมือเดียว
สิ่งที่คอนโทรลเลอร์ทำ
Raspberry Pi 5 ไม่ใช่ไมโครคอนโทรลเลอร์ที่รันโปรแกรมเดียวแบบวนซ้ำ — มันเป็นคอมพิวเตอร์ที่สมบูรณ์ที่รันระบบปฏิบัติการ Linux เต็มรูปแบบจาก MicroSD การ์ด นั่นหมายความว่า "โปรแกรม" สำหรับแดชบอร์ดนี้สามารถเป็นสคริปต์ Python, เว็บเซิร์ฟเวอร์ขนาดเล็ก, บริการพื้นหลังที่ตั้งเวลาไว้, หรือหลายอย่างพร้อมกัน, เช่นเดียวกับแอปพลิเคชันเดสก์ท็อปหรือเซิร์ฟเวอร์ใด ๆ
ชิ้นส่วนที่คุณจะต้องจัดหาเอง
โครงการนี้ต้องการสองสิ่งที่ร้านนี้ยังไม่มีจำหน่ายแยก: MicroSD การ์ด (16GB หรือใหญ่กว่า) สำหรับจัดเก็บระบบปฏิบัติการ และแหล่งจ่ายไฟสำหรับ Pi MicroSD การ์ดขนาด 16GB+ ที่น่าเชื่อถือใด ๆ ก็ใช้ได้สำหรับโครงการนี้ — ไม่จำเป็นต้องรวมอยู่ในคำสั่งซื้อของคุณ เพียงแค่มีติดตัวไว้ก่อนที่คุณจะเริ่มแฟลชระบบปฏิบัติการ
สิ่งที่เซ็นเซอร์อุณหภูมิและความชื้นทำ
AHT20 วัดอุณหภูมิและความชื้น และรายงานค่าทั้งสองแบบดิจิทัลผ่าน I2C ซึ่งเป็นโปรโตคอลพื้นฐานเดียวกันกับที่ใช้ในโครงการเซ็นเซอร์ที่ใช้ไมโครคอนโทรลเลอร์ในส่วนอื่น ๆ ของแคตตาล็อกนี้ แนวคิดไม่เปลี่ยนแปลง — สิ่งที่เปลี่ยนแปลงคือวิธีการเข้าถึง: แทนที่จะเป็นไลบรารีเฉพาะไมโครคอนโทรลเลอร์ คุณจะเข้าถึงผ่านสแต็กไดรเวอร์ I2C ของ Linux เอง (เข้าถึงได้จาก Python หรือภาษาใด ๆ ที่มีการผูก I2C) เพื่ออ่านรีจิสเตอร์เดียวกัน
ระบบปฏิบัติการจริง ไม่ใช่แค่โปรแกรมเดียว
บนไมโครคอนโทรลเลอร์ มีโปรแกรมเดียว และเมื่อหยุดทำงาน ก็จะไม่มีอะไรทำงานอีกต่อไป บนระบบ Linux เต็มรูปแบบ โค้ดการอ่านเซ็นเซอร์สามารถเป็นส่วนเล็ก ๆ ในหลายส่วน: บริการระบบจะคอยรันมันอยู่เบื้องหลัง, เว็บเซิร์ฟเวอร์สามารถแสดงข้อมูลในเบราว์เซอร์บนเครือข่ายของคุณ, และคุณสามารถ SSH เข้าไปตรวจสอบ, อัปเดต, หรือเพิ่มคุณสมบัติใหม่ได้โดยไม่ต้องแฟลชซ้ำทางกายภาพ นี่คือความแตกต่างเชิงปฏิบัติที่สำคัญที่โครงการนี้มีจุดมุ่งหมายที่จะสอน
แนวคิดเกี่ยวกับซอฟต์แวร์และไลบรารี
บน Linux การเข้าถึง I2C โดยทั่วไปจะผ่านไลบรารี Python ที่สื่อสารกับไดรเวอร์ I2C ของเคอร์เนล (แทนที่จะเป็นไลบรารี Wire/I2C สไตล์ไมโครคอนโทรลเลอร์) บวกกับไลบรารีเฉพาะเซ็นเซอร์ หรือโค้ดการอ่านรีจิสเตอร์เล็กน้อยสำหรับ AHT20 เอง เนื่องจากเป็นระบบปฏิบัติการจริง คุณมีทางเลือกในการสร้างแดชบอร์ดบนนั้น — สคริปต์เทอร์มินัลง่าย ๆ ที่พิมพ์ค่าที่อ่านได้แบบวนซ้ำเป็นจุดเริ่มต้นที่ดีก่อนที่จะเพิ่มอินเทอร์เฟซเว็บหรือการบันทึก
การทดสอบและการแก้ไขปัญหา
- Pi จะไม่บูตเลย — สาเหตุที่แท้จริงที่พบบ่อยที่สุดคือ MicroSD การ์ดเสีย หรืออิมเมจ OS ที่เขียนไม่เสร็จสมบูรณ์ แฟลชการ์ดใหม่ตั้งแต่ต้นและยืนยันว่าการเขียนเสร็จสมบูรณ์จริงก่อนที่จะสรุปว่าฮาร์ดแวร์มีข้อบกพร่อง
- ไม่พบเซ็นเซอร์ I2C — ยืนยันว่า I2C เปิดใช้งานจริงในการกำหนดค่า OS ของ Pi โดยปกติจะปิดใช้งานโดยค่าเริ่มต้นในการติดตั้งใหม่ และการลืมขั้นตอนนี้เป็นเรื่องที่พบบ่อยและมองข้ามได้ง่าย
- แดชบอร์ดทำงานช้าลงเมื่อเวลาผ่านไป — นี่เป็นพฤติกรรมการใช้ทรัพยากรของ Linux ปกติ ไม่ใช่ข้อบกพร่องของฮาร์ดแวร์ ตรวจสอบว่ามีอะไรทำงานอยู่เบื้องหลังจริง ๆ (บันทึก, การอัปเดต, บริการอื่น ๆ) ก่อนที่จะสรุปว่า Pi กำลังเสีย
- ค่าที่อ่านได้จากเซ็นเซอร์ค้างหรือไม่เปลี่ยนแปลง — ยืนยันว่าลูปการอ่านหรือบริการพื้นหลังของคุณกำลังสำรวจเซ็นเซอร์ใหม่ตามกำหนดเวลาจริง ๆ แทนที่จะแคชหรือใช้ค่าเก่าซ้ำ
การอัปเกรดในอนาคต (ไม่บังคับ): แดชบอร์ดบนเว็บ
เมื่อการอ่านค่าเซ็นเซอร์พื้นฐานทำงานได้อย่างน่าเชื่อถือผ่าน I2C ขั้นตอนต่อไปคือการให้บริการผ่านหน้าเว็บในเครื่องขนาดเล็กที่โฮสต์โดยตรงบน Pi เพื่อให้แดชบอร์ดสามารถดูได้จากอุปกรณ์ใด ๆ บนเครือข่ายของคุณ แทนที่จะจำกัดอยู่แค่บน Pi เท่านั้น
การเดินสาย
- AHT20 VCC → Raspberry Pi 5 3.3V (พินจริง 1)
- AHT20 GND → Raspberry Pi 5 GND (พินจริง 6, หรือพิน GND ใด ๆ)
- AHT20 SDA → Raspberry Pi 5 GPIO2 / SDA1 (พินจริง 3)
- AHT20 SCL → Raspberry Pi 5 GPIO3 / SCL1 (พินจริง 5)
- Raspberry Pi 5 → คอมพิวเตอร์/แหล่งจ่ายไฟผ่านสาย USB-C
เปิดใช้งาน I2C ก่อน: `sudo raspi-config` → Interface Options → I2C → Enable จากนั้นรีบูต (หรือแก้ไข `/boot/firmware/config.txt`) ติดตั้งไลบรารีด้วย `pip install smbus2` (หรือ `sudo apt install python3-smbus2`) บัส I2C1 ของส่วนหัว 40 พินของ Pi คือบัส 1 เสมอ ดังนั้น `SMBus(1)` จึงถูกต้องในทุกรุ่นของ Pi ที่มีส่วนหัวนี้ — คุณไม่จำเป็นต้องตรวจจับมัน