ชื่อโปรเจกต์: ส่งข้อมูล Sensor จาก Arduino ตัวหนึ่งไปอีกตัวผ่าน Firebase จัดไปวัยรุ่น!
OVERVIEW:
ในโปรเจกต์ IoT เจ๋งๆ ตัวนี้ พี่จะพาน้องๆ ไปอ่านค่าความชื้นและอุณหภูมิจาก Sensor ที่ต่อกับ Arduino UNO ตัวแรก แล้วยิงข้อมูลขึ้น Firebase ด้วย Module ESP8266 จากนั้นก็ดึงข้อมูลลงมาที่ Arduino UNO อีกตัว (ที่ใช้ ESP8266 เหมือนกัน) มาโชว์หล่อๆ บนหน้าจอ LCD
STEP 1: ทำความเข้าใจก่อนว่า Arduino UNO กับ ESP8266 มันทำงานร่วมกันยังไง
จำไว้ว่ามันทำงานแยกกันเป็นสอง Board และโค้ดก็คนละชุดกันนะน้อง เราใช้ Arduino UNO เพื่อสื่อสารกับ ESP8266 เข้าใจตรงกันนะว่าเราไม่ได้เอา Arduino ต่อเน็ตโดยตรง แต่เราเอา ESP8266 ต่อเน็ต แล้วค่อยส่งข้อมูลหากันระหว่างสอง Board ผ่าน Serial terminal เอา
STEP 2: ต่อ Arduino เข้ากับ LCD
ขั้นตอนนี้จะใช้การสื่อสารแบบ I2C อย่างที่พี่ทำ หรือจะต่อแบบปกติ (Normal communication) ก็ได้ แต่ I2C น่ะดีกว่าเยอะ ลองใช้โค้ดตัวอย่างที่เขามีให้ดู อ้อ! พี่ใช้ LCD ขนาด 20x4 นะ ถ้าของน้องขนาดอื่นก็แก้โค้ดเอาเองล่ะ
STEP 3: ต่อ Arduino อีกตัวเข้ากับ Sensor DHT11
ลองไปหา Tutorial ดูว่าต่อยังไงให้เวิร์ค แล้วอย่าลืมรันโค้ด Template เช็คดูก่อนล่ะว่า Sensor ยังไม่บึ้ม
STEP 4: เชื่อม ESP8266 เข้ากับ Firebase เพื่อรับ-ส่งข้อมูล
ใน Tutorial เขาอธิบายวิธีตั้งค่าไว้ค่อนข้างละเอียดเลย ลองดูวิดีโอนี้แบบ Step-by-step นะน้อง ในคลิปเขาใช้ NodeMCU ต่อกับ ESP8266 แต่หลักการเดียวกันเป๊ะ เอามาใช้กับ Arduino UNO ได้เลย คำแนะนำจากพี่นะ: ให้ทำ Google Sheet หรือ Excel จดไว้หน่อยว่าสายสีไหนต่อ Pin ไหนของ ESP8266 จะได้ไม่มึนตึ้บ ถ้าทำแล้วไม่ติด ให้ข้ามไปดูส่วน Error ท้ายบทความ หรือเช็คคอมเมนต์ใน Tutorial เอาด้วยล่ะ
STEP 5: เข้าใจเรื่อง Serial Communication
ใน Tutorial นี้เขาจะสอนส่งค่า Sensor ตัวอื่นๆ ขึ้น Firebase ลองอ่านดูจะได้ไอเดีย หรือจะลองทำตามเลยก็ได้ ย้ำแรงๆ! น้องต้อง Print เฉพาะ String ที่เราต้องการจริงๆ บน Serial Monitor เท่านั้น ถ้าไปทะลึ่งสั่ง Print บรรทัดอื่นมั่วซั่ว ระบบสื่อสารพังแน่นอน
STEP 6: อัปโหลดโค้ด
พอรู้วิธีรับส่งข้อมูลแล้ว ก็จัดแจงลงโค้ดของจริงใน ESP8266 และ Arduino ทั้งสองฝั่งซะ ย้อนไปดู Step 4 ถ้าลืมวิธีอัปโหลดโค้ด และกรุณาอ่านโค้ดก่อนกด Upload ด้วยนะน้อง มีอะไรต้องแก้ก็แก้ให้เรียบร้อย
ข้อควรระวังและวิธีแก้ปัญหาเวลาพัง:
ก่อนจะถอดสายไฟสายแพอะไรก็ตาม ให้ถอดสาย USB ของ Arduino ออกก่อนทุกครั้ง! ห้ามช็อตนะตัวนี้
ถ้าอัปโค้ดลง ESP8266 ไม่ได้:
- เลือก Board เป็น Generic ESP8266 Module
- ถ้ายังไม่ได้อีก ลองดูวิธีแก้ตามคลิปนี้
- ถ้ายังไม่ติดอีก ให้ถอดสาย เสียบใหม่ แล้วกดอัปโหลดซ้ำดู
ถ้าอัปโค้ดลง Arduino UNO ไม่ได้:
- อ่านวิธีอัปโหลดโค้ดลง Arduino UNO ดีๆ ในขั้นตอนที่ 7 ของคู่มือ
- ถอดสาย GPIO-0 (IO0) ออกจาก GND และถอดสายที่ต่อขา RESET ของ Arduino Uno ลง Ground/GND ออกซะ
- ถอดสาย RX ของ ESP8266 ออกจากขา RX ของ UNO และสาย TX ของ ESP8266 ออกจากขา TX ของ UNO
- เช็ค Pin ดีๆ แล้วเลือก Board เป็น Arduino UNO
อัปโค้ดเสร็จแล้วแต่ไม่ทำงาน:
- ลองสลับสายดู: ต่อ RX ของ ESP8266 เข้ากับ TX ของ Uno และ TX ของ ESP8266 เข้ากับ RX ของ Uno ใช่ครับน้อง ต้องต่อสลับกัน ไม่ต้องถามว่าทำไม พี่บอกให้ทำก็ทำไปเหอะ!
- ถอดสาย GPIO-0 (IO0) ออกจาก GND ด้วย
- เช็ค Pin อีกรอบเพื่อความชัวร์
- เช็คให้ดีว่าน้องสั่ง Print ออกมาแค่ "ค่าข้อมูล" ที่จะคุยกันบน Serial Monitor เท่านั้น ถ้ามีคำว่า "connected" หรือคำสั่งขยะอย่างอื่นโผล่มา โค้ดไม่ทำงานนะจะบอกให้
หมายเหตุ: ถ้าทำสำเร็จแล้วแต่หน้าจอ LCD แสดงผลเพี้ยนๆ ในตอนแรก ให้รอแป๊บนึง เดี๋ยวพอมันเรียกฟังก์ชัน Initialize ใหม่มันก็หายเอง เป็นเพราะ Delay ของการสื่อสาร Serial น่ะแหละ
ข้อมูลเทคนิคเพิ่มเติมแบบจัดเต็ม
การรับส่งข้อมูลผ่าน Cloud แบบ Real-Time
โปรเจกต์นี้โชว์เทพด้วยการใช้ Backend แบบ "Serverless" เชื่อมต่ออุปกรณ์ IoT จากที่ไหนก็ได้ในโลก
- Firebase Realtime Database Hub: ใช้ Module ESP8266/ESP32 สองตัวเชื่อมเข้ากับโปรเจกต์ Google Firebase ตัวส่งจะโยนข้อมูล JSON (เช่น
temp: 24.5) ขึ้นไปที่ Database reference - Automated Event Subscriptions: ฝั่งตัวรับจะใช้ Firebase StreamListener พอน้องเปลี่ยนค่าใน Firebase Server ปุ๊บ มันจะ "Push" ค่าใหม่มาที่ Arduino ตัวรับทันทีในระดับมิลลิวินาที
การขยายระบบแบบ Multi-Node
- Global Mesh Potential: เพราะเราใช้ Cloud ไม่ได้ใช้แค่ WiFi วงเดียวกัน ดังนั้น Arduino สองตัวนี้จะอยู่คนละจังหวัดหรือคนละประเทศก็คุยกันได้แบบ InstantMaintain ข้อมูลกันได้ยาวๆ เหมาะมากสำหรับงาน Monitor หรือควบคุมระยะไกลแบบหล่อเท่เลยงานนี้