IoT

การเชื่อมต่อ IoT Arduino เข้ากับ Firebase Real-time Database

บทเรียนการพัฒนา IoT ด้วย Arduino ร่วมกับการส่งข้อมูลผ่านอินเทอร์เน็ตด้วย NodeMCU เพื่อส่งสัญญาณการเปิดปิดสถานะ 0 และ 1 ไปยัง Firebase

หลังจากที่เราทดสอบการวางแผนวงจรไฟฟ้าเบื้องต้น และศึกษาการเขียนโปรแกรมภาษา C ลงบน Arduino Project ผ่านบทความ “เริ่มต้นกับ Internet of Things หรือ IoT” (https://www.daydev.com/iot/start-with-iot.html) ในบทเรียนนี้เราจะผสมผสานองค์ความรู้ด้าน IoT ใหม่เข้ากับ Firebase ส่วของเว็บไซต์ เพื่อที่จะต่อยอดไปสู่การพัฒนาแอพพลิเคชันระบบปฏิบัติการ Android

เริ่มต้นให้เราสร้าง Project Firebase ขึ้นมา โดยไปที่ https://firebase.google.com

ไปที่ Console จนเราพบหน้าจอ Project ให้เราไปที่ Project Overview -> Project Setting

เลือกเมนู แล้วไปยัง เพื่อรับค่า Database Secrets โดยไปที่แทบ Service Accounts

เลื่อนไปที่ Datase Secret กด Show เพื่อทำการ Copy ตัว Secret ไว้ใช้อ้างอิง หลังจากนั้นให้ไปที่เมนู Develop-> Database ปรับส่วนของ Rule ดังนี้:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

กด Publish เพื่อเปิดสิทธิให้อ่าน และเขียน

เปิดโปรแกรม Arduino IDE ขึ้นมาทำการติดตั้ง Firebase Arduino ซึ่งเป็น Free Library เราสามารถไปดาวน์โหลดได้ที่

https://github.com/googlesamples/firebase-arduino/archive/master.zip

เพื่อทำการดาวน์โหลดมาติดตั้ง

ไปที่เมนู Sketch เลือก Include Library  คลิกที่ Add .zip Library เราจะสามารถใช้งาน Firebase Arduino ได้แล้วโดยหลักการใช้งานคือการประกาศ Header ดังนี้

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define WIFI_SSID       "AndroidAP"
#define WIFI_PASSWORD   "<<PASSWORD WIFI HOT SPOT>>"
#define FIREBASE_HOST "banyapon-312ed.firebaseio.com"
#define FIREBASE_AUTH "<<ใส่ SECRET>>"

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println(WiFi.localIP());
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.setInt("device/led_control", 1);
}

void loop() {
  // put your main code here, to run repeatedly:

}

โดยเราต้องเชื่อมต่อกับ Wifi วงเดียวกัน ในตัวอย่างใช้ Mobile Hotspot ในการเชื่อมต่อ ที่เหลือคือการตั้งค่า Host โดยเอา URL ของ firebaseio ที่เราสร้างขึ้นจาก Real-Time Database มาใส่ อย่าลืมใส่ SECRET KEY ของเราลงไปใน FIREBASE_AUTH

โดยการส่งสัญญาณ Wifi นั้นสามารถทำได้โดย:

#include <ESP8266WiFi.h>

ขั้นตอนต่อไปให้เรา เชื่อมหลอด LED เข้ากับ บอร์ด ESP8266 ดังนี้:

ให้เรานำสาย ตัวผู้ ตัวเมีย ทั้งหมด 3 สาย โดยช่อง V ให้ต่อไปที่ฝั่ง Digital ส่วนของ 3V และสายแต่ละสี เช่น R(Red) ไปที่ D4, B(Blue) ไปที่ D3 และ G(Green) ไปที่ D2

รูปแบบการเชื่อมไปยังบอร์ด Arduino

เมื่อพร้อมก็เสียบ LEDs ลงไปตามขาที่เชื่อมต่อ หลังจากนี้ให้ทำการเปิด Arduino IDE ขึ้นมา เราจะควบคุมไฟสีเขียวดวงเดียวกันก่อน นั่นคือ D2 ให้ประกาศตัวแปร

const int ledGreen = D2;

หลังจากนั้นกำหนดค่าใน Setup()

pinMode(ledGreen, OUTPUT);

เพิ่มคำสั่งใน Loop() เพิ่มเติมคือการอัพเด็ตสถานะ 0 คือปิด และ 1 คือ เปิด ไปยัง Firebase

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledGreen, Firebase.getInt("device/led_control"));
  delay(200);
}

ดังนั้นคำสั่งจะเป็นดังนี้:

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define WIFI_SSID       "AndroidAP"
#define WIFI_PASSWORD   "รหัส Wifi"
#define FIREBASE_HOST "banyapon-312ed.firebaseio.com"
#define FIREBASE_AUTH "รหัส SECRET"

const int ledGreen = D2;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println(WiFi.localIP());
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  
  pinMode(ledGreen, OUTPUT);
  
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.setInt("device/led_control", 1);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledGreen, Firebase.getInt("device/led_control"));
  delay(200);
}

ทดสอบการทำงาน โดยการ Upload คำสั่ง C ไปยัง Arduino เมื่อ 100% ไปดูที่ Firebase Database จะเห็นว่ามี ข้อมูลปรากฏขึ้นมาดังนี้:

ถ้าเราทำการเปลี่ยนสถานะของ led_control จาก 0 เป็น 1 ดวงไฟจะปิด และถ้าเปลี่ยนจาก 1 เป็น 0 ไฟจะเปิด ตามตัวอย่างข้างล่าง:

จะเห็นว่าตอนนี้เราสามารถควบคุมการทำงานของ LEDs ผ่าน Firebase ด้วย RealTime Database ได้แล้ว เราลองมาปรับค่าของ Led ให้ปรากฏทั้งหมด 3 สีกันหน่อยดีกว่า:

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define WIFI_SSID       "AndroidAP"
#define WIFI_PASSWORD   "รหัส Wifi"
#define FIREBASE_HOST "banyapon-312ed.firebaseio.com"
#define FIREBASE_AUTH "รหัส SECRET"

const int ledGreen = D2;
const int ledBlue = D3;
const int ledRed = D4;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println(WiFi.localIP());
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  
  pinMode(ledGreen, OUTPUT);
  pinMode(ledBlue, OUTPUT);
  pinMode(ledRed, OUTPUT);
  
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.setInt("device/led_control/red", 1);
  Firebase.setInt("device/led_control/green", 1);
  Firebase.setInt("device/led_control/blue", 1);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledRed, Firebase.getInt("device/led_control/red"));
  digitalWrite(ledGreen, Firebase.getInt("device/led_control/green"));
  digitalWrite(ledBlue, Firebase.getInt("device/led_control/blue"));
  delay(200);
}

ทดสอบตาม วีดีโอจะได้แบบที่เห็น

ขั้นตอนในบทเรียนต่อไปเราจะใช้ แอพพลิเคชัน Android ที่พัฒนาขึ้นมาควบคุม Firebase Database เพื่อจัดการการเปิดปิดสัญญาไฟทั้ง 3 แบบ ในรูปแบบ Real-Time เพื่อตรง concept ของ IoT

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)
Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน