กลับไปหน้ารวมไฟล์
how-to-send-dht-data-from-esp8266-to-google-firebase-595434.md

ลิงก์วิดีโอสอนแบบ Step by Step:

มุมมองของโปรเจกต์

IoT นี่มันเป็นส่วนสำคัญของ Cloud Computing เลยนะวัยรุ่น ผู้ให้บริการ Cloud หลายเจ้าก็เลยเอา IoT มาเป็นหนึ่งในบริการของเค้า และด้วยความที่ IoT มาแรง ก็เลยมี Platform หลายตัวที่ทำให้เราๆ ท่านๆ เอาไปใช้งานได้ง่ายขึ้น ในบทสอนนี้ พี่จะพาน้องๆ ดูขั้นตอนการส่งข้อมูลจาก NodeMCU (แพลตฟอร์มพัฒนา IoT ตัวนึง) ขึ้นไปเก็บที่ Google Firebase โปรเจกต์นี้เป็นแอปพลิเคชัน IoT ระดับสูง (High-level) นะ เน้นไปที่การเก็บข้อมูลสิ่งแวดล้อม (อุณหภูมิและความชื้น) แล้วส่งขึ้นไปเก็บใน Realtime Database บน Cloud อย่างปลอดภัย จะได้มอนิเตอร์สภาพอากาศในบ้านจากที่ไหนในโลกก็ได้ งานนี้จัดไป!

สถาปัตยกรรมระบบ

ระบบนี้สร้างจากสถาปัตยกรรมที่เรียบง่ายแต่ได้ผลดี:

  • อุปกรณ์ Edge (NodeMCU ESP8266): ทำหน้าที่เป็นสะพานเชื่อมต่อ WiFi อ่านข้อมูล Analog/Digital จากเซนเซอร์แล้วแปลงเป็นแพ็กเก็ต JSON ส่งขึ้น Cloud
  • ส่วนตรวจจับ (DHT11): เซนเซอร์ราคาประหยัดยอดนิยม ให้ค่าความชื้นสัมพัทธ์และอุณหภูมิ
  • แบ็กเอนด์บน Cloud (Google Firebase): เป็นฐานข้อมูล Cloud แบบ NoSQL ที่ซิงค์ข้อมูลให้กับไคลเอนต์ที่เชื่อมต่อทั้งหมดในเวลาไม่กี่มิลลิวินาที

อุปกรณ์ที่ต้องใช้

  • NodeMCU หรือบอร์ด ESP8266
  • เซนเซอร์ DHT11
  • ตัวต้านทาน (Resistor) 10K
  • คอมพิวเตอร์ส่วนตัว
  • ซอฟต์แวร์ Arduino IDE
  • สายจัมเปอร์

การติดตั้งและโครงสร้างฮาร์ดแวร์

การตั้งค่านี้น้อยชิ้นแต่ทรงพลังนะเว้ย! ก่อนจะตามบทสอนนี้ไปได้ น้องต้องตั้งค่าคอมให้สื่อสารกับ NodeMCU หรือ ESP8266 ให้ได้ก่อน

ขั้นตอนที่ 1: สิ่งแรกสุดคือต้องแน่ใจว่าคอมของน้องตั้งค่าให้สื่อสารกับ ESP8266 ได้แล้ว ถ้ายังไม่ได้ทำ ตอนนี้แหละเวลาที่เหมาะเลย พอตั้งค่าเสร็จแล้วค่อยกลับมาตามบทสอนต่อได้เลยจ้า

ขั้นตอนที่ 2: การตั้งค่าฮาร์ดแวร์: ต่อ NodeMCU และ DHT11 ลงบนเบรดบอร์ด โดย DHT11 ของน้องอาจจะเป็นโมเดล 3 ขาแบบสำเร็จรูป หรือโมเดล 4 ขาก็ได้ ในบทสอนนี้พี่ใช้โมเดล 3 ขานะ

  • DHT11: ต่อกับ Digital Pin D4 โดยใช้ตัวต้านทาน (Resistor) 10k เป็น Pull-up ระหว่างขา VCC กับขา Data เพื่อให้สัญญาณนิ่งๆ
  • NodeMCU: จ่ายไฟผ่าน USB หรือแหล่งจ่าย 5V ที่เสถียร มันจะจัดการส่วน WiFi และการเรียก API ไปหา Firebase

ถ้าใช้โมเดล 3 ขา: ต่อขา VCC ของ DHT11 เข้ากับ 3V ของ NodeMCU, ขา GND ของ DHT11 เข้ากับ GND ของ NodeMCU, และต่อขา Data เข้ากับ Pin 4 ของ NodeMCU ถ้าใช้โมเดล 4 ขา: ต่อขา Pin 1 ของ DHT11 เข้ากับ 3V ของ NodeMCU, ต่อตัวต้านทาน (Resistor) 10K ระหว่างขา Pin 1 กับ Pin 2 ของ DHT11, ปล่อยขา Pin 3 ของ DHT11 ว่างไว้ (ไม่ต้องต่อ), และต่อขา Pin 4 ของ DHT11 เข้ากับ GND ของ NodeMCU เสร็จแล้วก็ต่อ NodeMCU เข้ากับคอมด้วยสาย USB เท่านี้ก็พร้อมลุยแล้ว สู้งานนะน้อง!

การตั้งค่า Firebase

หลังจากต่อฮาร์ดแวร์ครบทุกอย่างแล้ว สิ่งที่ต้องทำต่อคือตั้งค่า Google Firebase ให้รับข้อมูลจาก ESP8266 ของเราได้ งานนี้ต้องสร้างโปรเจค Firebase ก่อนนะจ๊ะ

ขั้นตอนที่ 3: เปิดเบราว์เซอร์ขึ้นมา แล้วเข้าไปที่ firebase.google.com จากนั้นกด Get Started ไปโลด มันจะพาเราไปที่คอนโซล ให้กด Add Project เพื่อสร้างโปรเจคใหม่

ขั้นตอนที่ 4: พอกด Add project แล้ว มันจะให้ตั้งชื่อโปรเจค ตั้งชื่อให้มันเท่ๆ หน่อย แล้วกด Continue ไป ในขั้นตอนที่ 1 กับ 2 ก็ปล่อยค่าเริ่มต้นไปเลย ส่วนขั้นตอนที่ 3 ให้เลือกบัญชี Google ที่ใช้กับ Firebase อยู่ (ก็บัญชีที่ล็อกอินอยู่นั่นแหละ) กด Continue รอให้มันตั้งค่าโปรเจคให้เสร็จ

ขั้นตอนที่ 5: สร้างโปรเจคเสร็จแล้วจะเจอคอนโซล Firebase ตรงนี้แหละที่เราจะตั้งค่าการยืนยันตัวตน (Authentication) และสร้าง Realtime Database ก่อนสร้างฐานข้อมูล เราต้องกำหนดกฎการยืนยันตัวตนก่อน ไปที่แถบด้านข้าง คลิก Authentication แล้วกด Get Started

เลือกวิธีล็อกอินเป็น Email/Password จากนั้นเปิดใช้งานทั้ง Email/Password และ Email Link เสร็จแล้วอย่าลืมกด Save

ขั้นตอนที่ 6: กลับไปที่ Users แล้วกด Add User ใส่ทั้งอีเมลและรหัสผ่านที่อยากให้ใช้เข้าถึงฐานข้อมูล เก็บข้อมูลนี้ไว้ให้ดีนะ เดี๋ยวต้องเอาไปใช้ในโค้ดอีกที จบขั้นตอนการยืนยันตัวตนแล้ว

ขั้นตอนที่ 7: จากแถบด้านข้างอีกที คลิกที่ Realtime Database แล้วกด Create Database เลือกภูมิภาคสำหรับโปรเจค จากนั้นมันจะถามว่าจะเริ่มต้นด้วยโหมดไหน ระหว่าง Locked Mode กับ Test Mode ใน Locked Mode นั้นการอ่านและเขียนจะถูกตั้งค่าเป็น false ตั้งแต่เริ่ม (เปลี่ยนทีหลังได้) ส่วน Test Mode นั้นจะอนุญาตให้อ่านและเขียนได้ชั่วคราว สำหรับโปรเจคนี้เราเริ่มด้วย Test Mode ไปก่อน เรียบร้อย ฐานข้อมูลเราพร้อมใช้แล้ว

ตั้งค่า Software & เขียนโค้ด

ขั้นตอนที่ 8: โอ้โห ตั้งค่ามาซะเยอะเลย ถึงเวลาจัดโค้ดแล้วว่ะน้อง! ซอร์สโค้ดตัวเต็มอยู่ที่ GitHub เนี่ยแหละ แต่พี่เจอปัญหาตอนเซ็ตอัพสอนน้องเหมือนกัน เลยจะบอกเวอร์ชันของทุกอย่างที่พี่ใช้ให้ชัดๆ ถ้าน้องเจอปัญหา ให้ใช้เวอร์ชันเดียวกับพี่เลยรับรองรอด

เริ่มจาก Arduino IDE ที่พี่ใช้คือเวอร์ชัน 1.8.13 ไปที่ Board Manager แล้วโหลดบอร์ด ESP8266 มา ซึ่งพี่ใช้เวอร์ชัน 3.0.2 สำหรับบทความนี้ ส่วนไลบรารี Firebase นี่ดราม่าหน่อย เพราะโหลดจาก Library Manager ใน IDE แล้วมันไม่ยอมทำงาน เลยต้องไปโหลดจาก GitHub โดยตรง ซึ่งตอนเขียนบทความนี้คือเวอร์ชัน 3.9.5 โหลดไฟล์ ZIP มาแล้ว Add ผ่าน Library Manager ใน Arduino IDE ได้เลย

อีกอย่าง เพราะเราจะอ่านค่าจาก DHT11 อย่าลืมโหลดไลบรารีของ Adafruit สำหรับอ่านค่าเซ็นเซอร์ DHT จาก Library Manager ใน Arduino IDE ด้วยนะ พอติดตั้งทุก dependency เรียบร้อยแล้ว ก็เริ่มแก้ไข credentials ให้ตรงกับเครือข่ายของน้องได้เลย

จุดเด่นของ Software: Firebase-ESP8266 Library

โค้ดใช้ไลบรารี Firebase-ESP8266 เพื่อจัดการการเรียก REST API ที่ซับซ้อนให้ง่ายขึ้น ฟังก์ชันหลักๆ ที่ใช้ก็เช่น:

Firebase.setFloat(firebaseData, "/temperature", t);
Firebase.setFloat(firebaseData, "/humidity", h);

เจ้านี่แหละที่ช่วยอัพเดทข้อมูลขึ้น Firebase Server อัตโนมัติทุกๆ สองสามวินาที

ขั้นตอนที่ 9: เปลี่ยน WIFI SSID กับ Password ให้เป็นของเครือข่ายน้องเองนะ ส่วนการได้ API Key นั้น ให้กลับไปที่ Firebase Console คลิกที่ไอคอนฟันเฟืองเพื่อเข้า Project Settings ในแท็บ General จะเห็น Web API Key โผล่มา ก็อปปี้แล้ววางลงในโค้ด Arduino ได้เลย

ส่วน Database URL ให้กลับไปที่หน้า Realtime Database แล้วก็อปปี้ URL ที่แสดงอยู่ด้านบนของ database มา (ไม่ต้องเอา HTTPS นะ)

สำหรับ User Email กับ Password ก็ใส่อีเมลกับรหัสผ่านที่เราตั้งไว้ตอนทำ Authentication นั่นแหละ

ขั้นตอนที่ 10: ศึกษาดูโค้ดให้ดี โดยเฉพาะบรรทัดที่ส่งข้อมูลจาก DHT ขึ้นคลาวด์ จากนั้น Verify และ Upload โค้ดเลย เปิด Serial Monitor ดูจะเห็นข้อมูลถูกส่งขึ้นไป แล้วก็อย่าลืมเช็ค Firebase Console ของน้องด้วยว่าจะเห็นข้อมูลอัพเดทแบบเรียลไทม์เลย

ขั้นต่อไป: วิเคราะห์และแสดงผลข้อมูล

เมื่อข้อมูลของเราเข้า Firebase แล้ว เราก็สามารถสร้าง Web Dashboard ด้วย HTML/JavaScript หรือแอปมือถือด้วย Flutter หรือ React Native เพื่อแสดงผลแนวโน้มอุณหภูมิและความชื้นแบบเรียลไทม์ได้สบายๆ โปรเจคนี้ถือเป็นจุดเริ่มต้นที่เพอร์เฟคสำหรับการเรียนรู้เรื่อง Cloud Data Integration และ Remote Monitoring เลยนะตัว

สำหรับวิดีโอสอน ดูได้ที่นี่เลย:

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

apps:
  - "1x Arduino IDE"
  - "1x Firebase"
author: "samueladesola"
category: "Sensors & Environment"
components:
  - "1x Breadboard, 170 Pin"
  - "1x Resistor 10k ohm"
  - "1x DHT11 Temperature & Humidity Sensor (4 pins)"
  - "1x Jumper wires (generic)"
  - "1x ESP8266 ESP-12E"
description: "งาน IoT ง่ายแต่หล่อ มาดูกันว่าเราจะดึงข้อมูลเซนเซอร์วัดอุณหภูมิ-ความชื้น โยนขึ้นคลาวด์ Google Firebase ยังไงให้เทพๆ งานนี้จัดไปแบบไม่ต้องง้อเซิร์ฟเวอร์เอง!"
difficulty: "Advanced"
documentationLinks: []
downloadableFiles:
  - "https://github.com/adesolasamuel/ESP8266-NodeMCU-to-Google-Firebase/blob/main/README.md"
  - "https://github.com/adesolasamuel/ESP8266-NodeMCU-to-Google-Firebase/blob/main/README.md"
encryptedPayload: "U2FsdGVkX19vO/GAxXDG2uVhAezGPsnduHKOjarZd0lryId3cDX1ZFqIVSBWYC4DdEwwgu19PeVNf1EY0IKA1/yrGb00E6q9qrOn6bSnaU/VF6cfWW82m2v9E0v2J/15"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/how-to-send-dht-data-from-esp8266-to-google-firebase-595434_cover.jpg"
lang: "en"
likes: 0
passwordHash: "69d501a2742017e253c0bac599257605ed141aa5e68b7594f9294677507aabc0"
price: 2450
seoDescription: "An advanced IoT project to send temperature and humidity data from an ESP8266 to Google Firebase."
tags:
  - "arduino cloud"
  - "iot"
  - "cloud"
  - "nodemcu"
  - "arduino"
  - "firebase"
  - "data"
  - "dht11"
  - "esp8266"
  - "google firebase"
title: "ส่งข้อมูล DHT จาก ESP8266 ขึ้น Firebase แบบตึงๆ วัยรุ่นต้องรู้!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/7VXbVHssiQU"
  - "https://www.youtube.com/embed/7VXbVHssiQU"
views: 7365