โปรเจกต์ Multi-Location Weather Station
สร้าง Multi-Location Weather Station ของคุณเอง และแสดงผลข้อมูลแบบ Wireless บนหน้าจอเดียว
สร้าง Multi-Location Weather Station ของคุณเอง และแสดงผลข้อมูลแบบ Wireless บนหน้าจอเดียว
สร้างสถานีตรวจวัดอุณหภูมิหลายห้องด้วยตัวคุณเองด้วย Arduino board ที่ใช้ ESP8266
บทนำ
ในโปรเจกต์นี้ ลองจินตนาการถึงสถานการณ์ที่คุณมีหลายห้องหรือหลายพื้นที่ที่ต้องการตรวจวัดอุณหภูมิและความชื้น โดยข้อมูลจากทุกห้องจะถูกส่งไปยังหน้าจอแสดงผลส่วนกลาง
อุณหภูมิและความชื้น
เพื่อให้ได้ความแม่นยำสูงสุด เราจึงเลือกใช้ SHT31 sensor เนื่องจาก SHT31 มีความเสถียรในการปรับจูน (Calibration) มากกว่า DHT22 ซึ่งเป็น sensor ที่ราคาถูกกว่าและพบได้ทั่วไปในท้องตลาด โชคดีที่ Adafruit ได้จัดเตรียม API ที่ดีและใช้งานง่ายมากสำหรับ SHT31 โดยสามารถดาวน์โหลด library ได้ที่นี่
การแสดงผลข้อมูล - Wireless HMI
มันจะคุ้มค่ากว่ามากหากเราสามารถดูข้อมูลทั้งหมดได้ในหน้าจอเดียว เราต้องการหน้าจอแสดงผลแบบง่ายๆ ที่สามารถรับคำขอแบบไร้สายและแสดงผลบนหน้าจอได้ แต่เราไม่พบอุปกรณ์ใดที่ตอบโจทย์นี้ได้อย่างสมบูรณ์ เราจึงสร้างมันขึ้นมาเองโดยการรวม Nextion Display แบบหน้าจอสัมผัสเข้ากับ Wemos D1 mini จนกลายเป็น Nanomesher Human Machine Interface (Nanomesher HMI) นอกจากนี้ยังมี LED + Speaker ติดตั้งมาบน board ของ Nanomesher HMI อีกด้วย
เราได้เปิดตัว Nanomesher HMI บน kickstarter
การสร้าง user interface บน Nextion Display ไม่จำเป็นต้องเขียน code เลย เพราะมี WYSIWYG editor ที่ช่วยให้เราสามารถลากและวางส่วนควบคุม (control) ทำการ compile และทดสอบผลลัพธ์บน PC ได้ หลังจากนั้นให้คัดลอกไฟล์ผลลัพธ์ที่ compile แล้ว (.tft) ลงใน Nextion display (ไม่ใช่ Wemos)
เราได้เขียน API ทั้งแบบ HTTP และ MQTT เพื่อใช้สำหรับตั้งค่าบนหน้าจอแสดงผล
ตัวอย่างเช่น หากมี Text component ชื่อ "line1" ในการตั้งค่าส่วนควบคุมข้อความ เพียงส่ง http request ดังต่อไปนี้เพื่อกำหนดเป็นคำว่า "Hello" โดยที่ p คือ pageid และ n คือชื่อ component ส่วน 192.168.1.12 คือ IP address ของ wireless HMI การที่มี API สำเร็จรูปนี้ช่วยให้นักพัฒนา application สามารถมุ่งเน้นไปที่การสร้าง application ได้โดยตรง แทนที่จะต้องวุ่นวายกับการเขียน code แสดงผลระดับ low level ของ Arduino
http://192.168.1.12/TextSetText?p=0&n=line1&v=Hello
การออกแบบ User Interface
เราใช้ Nextion editor ซึ่งเป็นโปรแกรมฟรีเพื่อสร้าง user interface แบบง่ายๆ ที่มี 8 Text Controls โดยการลากและวางแล้วตั้งชื่อ component อย่าลืมจดชื่อ component ไว้ เช่น "line1", "line2", "line3", "line4"

ถัดไป คุณสามารถใช้เครื่องมือ debug เพื่อทดสอบ user interface บน PC ได้
หลังการทดสอบ ให้เปิดโฟลเดอร์ build แล้วคัดลอกไฟล์ tft ลงใน sd card
เสียบ sd card เข้ากับช่องเสียบ sd card ของ Nextion display แล้วเปิดเครื่อง ไฟล์ tft ใหม่จะถูกติดตั้งลงใน Nextion display โดยอัตโนมัติ
WeatherSender - WeatherHttpSender Arduino Code
วัตถุประสงค์ของ WeatherHttpSender คือการอ่านค่าอุณหภูมิและความชื้นอย่างต่อเนื่องและอัปเดตไปยัง Wireless HMI
นี่คือ code สำหรับอ่านค่าความชื้นและอุณหภูมิ ซึ่งทำได้ง่ายมากด้วย Adafruit library
t = sht31.readTemperature();
h = sht31.readHumidity();
ในการอัปเดต Wireless HMI การเรียกใช้ http ด้านล่างนี้จะส่งข้อมูลไปยังหน้าจอ HMI โดยที่ 192.168.1.12 คือ IP address ของหน้าจอ Wireless HMI display
String url = "http://192.168.1.12/TextSetText?p=0&n=line1&v=";
HTTPClient http;
USE_SERIAL.print("[HTTP] begin...\
");
http.begin(url + temp + "c " + humid + "%"); //HTTP
จำเป็นต้องมีการแก้ไขบางส่วนก่อนการติดตั้ง ใน code ด้านล่างนี้ ให้ตั้งค่า SSID และ password ของ wifi ของคุณที่นี่:
WiFiMulti.addAP("SSID", "PASSWORD");
และตั้งค่าช่วงเวลาการอัปเดต (delay) ได้ที่นี่:
delay(10000);
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้