กลับไปหน้ารวมไฟล์
send-sensor-data-from-one-arduino-to-another-using-firebase-85e25c.md

ชื่อโปรเจกต์: ส่งข้อมูล 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 หรือควบคุมระยะไกลแบบหล่อเท่เลยงานนี้

ข้อมูล Frontmatter ดั้งเดิม

title: "Send sensor data from one Arduino to another using Firebase"
description: "Connect two Arduinos via Firebase real-time database to send sensor data from one and display it onto an LCD in the other one."
author: "rene123456"
category: "Internet of Things, BT & Wireless"
tags:
  - "iot"
  - "iot"
  - "firebase"
  - "esp8266"
  - "internet of things"
  - "esp8266"
views: 23233
likes: 5
price: 699
difficulty: "Intermediate"
components:
  - "2x Breadboard (generic)"
  - "2x ESP8266 ESP-01"
  - "1x I2C 16x2 Arduino LCD Display Module"
  - "2x Arduino UNO"
  - "1x Male/Female Jumper Wires"
  - "1x DHT11 Temperature & Humidity Sensor (3 pins)"
tools: []
apps:
  - "1x Arduino IDE"
  - "1x Firebase"
downloadableFiles:
  - "https://projects.arduinocontent.cc/32d50ade-6c39-42d6-b007-2d8307627184.ino"
  - "https://projects.arduinocontent.cc/32d50ade-6c39-42d6-b007-2d8307627184.ino"
documentationLinks: []
passwordHash: "55151348089b540b3f4dae828e7bb7b0433d66496e0753ac622d6ba6aef1acb2"
encryptedPayload: "U2FsdGVkX19WlOzyB4g4SbJE9dYbjzQFSP+ivfFccFQaUiY8WHQqzlY3H6h2C0HTIpyr69zX9za6e9Jfh0hJg9K+LpZucBrA/iwJBPnNP0VMUl1Uo0OPdRJGEGEcfw2J"
seoDescription: "Learn how to send Sensor data between two Arduinos using Firebase real-time database and display it on an LCD."
videoLinks:
  - "https://www.youtube.com/embed/lzgT1sYV6Ig"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/send-sensor-data-from-one-arduino-to-another-using-firebase-85e25c_cover.jpg"
lang: "th"