การ Coding ESP8266 นำค่าอุณหภูมิจาก DHT22 ขึ้น Firebase

Fireboard กับ ESP8266 แสดงค่าอุณหภูมิออนไลน์ ตอนที่ 2 นำค่าอุณหภูมิขึ้น Firebase

ESP8266 สามารถเขียนโปรแกรมสั่งงานได้หลายภาษา แต่ในบทความนี้จะเลือกใช้ ESP8266 Arduino Core ซึ่งสามารถใช้โปรแกรมภาษา C++ แบบ Arduino รวมถึงสามารถใช้ไลบารี่ที่ทำมาสำหรับ Arduino ส่วนใหญ่ได้

การติดตั้ง ESP8266 Arduino Core

ESP8266 Arduino Core สามารติดตั้งได้กับโปรแกรม Arduino IDE เวอร์ชั่น 1.6.4 ขึ้นไปเท่านั้น หากท่านใช้เวอร์ชั่นที่เก่ากว่านี้ต้องเข้าไปที่เว็บไซต์ www.arduino.cc เพื่อเข้าไปดาว์นโหลดโปรแกรมเวอร์ชั่นใหม่ล่าสุดมาลงก่อน หลังจากเตรียมพร้อมโปรแกรม Arduino IDE แล้ว ให้เปิดโปรแกรม Arduino IDE ขึ้นมา จากนั้นกดไปที่ File > Preferences

ในช่อง Additional Board Manager URLs ให้ใส่ว่า http://arduino.esp8266.com/stable/package_esp8266com_index.json แล้วกด OK

จากนั้นกดไปที่ Tool > Board > Boards Manager...

พิมพ์ในช่องค้นหาว่า ESP8266 แล้วติดตั้งได้เลย (เลือก แล้วกดปุ่ม Installer) เมื่อเสร็จแล้วก็ปิดหน้าต่างไป

แค่นี้ก็พร้อมสำหรับเขียนโปรแกรม Arduino ใส่ลง ESP8266 แล้ว

ติดตั้งไลบารี่ Firebase

ดาว์นโหลดไฟล์ไลบารี่ได้ที่ https://github.com/googlesamples/firebase-arduino/archive/master.zip

เปิดโปรแกรม Arduino ขึ้นมา กดไปที่ Sketch > Include Library > Add .ZIP Library...

เลือกไฟล์ที่ได้ดาว์นโหลดไว้ กดปุ่ม Open

เป็นอันจบการลงไลบารี่ Firebase

ติดตั้งไลบารี่ DHT22

กดไปที่เมนู Sketch > Include Library > Manage Libraries...

เลือกติดตั้งที่เป็นของ Adafruit

เตรียมพร้อม Firebase

เข้าไปที่ลิ้ง https://firebase.google.com/console/ เข้าสู่ระบบให้เรียบร้อย (ด้วยบัญชี Google) จากนั้นกดปุ่ม CREATE NEW PROJECT

ใส่ชื่อโปรเจค เลือก Thailand แล้วกดปุ่ม CREATE PROJECT แล้วรอ Loading ซักครู่

กดไปที่รูปเฟือง แล้วเลือก Project settings

คลิกที่แท๊ป DATABASE นำเมาส์เลือนไปตรงช่อง •••••• กดที่ปุ่ม SHOW

คัดลอก Key เก็บไว้ ตัว Key นี้จะใช้ในการคอนฟิกในโค้ด เพื่อให้สามารถเข้ามาแก้ไขข้อมูลในฐานข้อมูล Firebase ได้

กดไปที่เมนู Database ในเมนูด้านซ้าย

ก๊อปลิ้งตามตำแหน่งในรูปเก็บไว้ ลิ้งนี้จะเอาไว้ใช้คอนฟิกในโค้ดเช่นเดียวกัน

กดไปที่ RULES แล้วแก้ตรง .read เป็น true

จากนั้นกดปุ่ม PUBLISH เพื่อบันทึกค่า

อัพโหลดโค้ดลง ESP8266

คัดลอกโค้ดด้านล่างนี้ลงไปในโปรแกรม Arduino IDE

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

// Config Firebase
#define FIREBASE_HOST "<Firebase URL>"
#define FIREBASE_AUTH "<Firebase Key>"

// Config connect WiFi
#define WIFI_SSID "<WiFi Name>"
#define WIFI_PASSWORD "<WiFi Password>"

// Config DHT
#define DHTPIN D2
#define DHTTYPE DHT22

// LED Debug
#define DEBUG_WIFICONNECT 14
#define DEBUG_PUTHDATA 5

// Config time
int timezone = 7;

char ntp_server1[20] = "ntp.ku.ac.th";
char ntp_server2[20] = "fw.eng.ku.ac.th";
char ntp_server3[20] = "time.uni.net.th";

int dst = 0;

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(DEBUG_WIFICONNECT, OUTPUT);
  pinMode(DEBUG_PUTHDATA, OUTPUT);

  Serial.begin(9600);

  WiFi.mode(WIFI_STA);
  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    digitalWrite(DEBUG_WIFICONNECT, !digitalRead(DEBUG_WIFICONNECT));
    delay(500);
  }
  digitalWrite(DEBUG_WIFICONNECT, HIGH);
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());

  configTime(timezone * 3600, dst, ntp_server1, ntp_server2, ntp_server3);
  Serial.println("Waiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.println("Now: " + NowString());

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  dht.begin();
}

void loop() {
  pinMode(DHTPIN, INPUT_PULLUP);

  // Read temp & Humidity for DHT22
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(500);
    return;
  }
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.println();

  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& root = jsonBuffer.createObject();
  root["temperature"] = t;
  root["humidity"] = h;
  root["time"] = NowString();

  digitalWrite(DEBUG_PUTHDATA, HIGH);
  // append a new value to /logDHT
  String name = Firebase.push("logDHT", root);
  // handle error
  if (Firebase.failed()) {
      Serial.print("pushing /logDHT failed:");
      Serial.println(Firebase.error());  
      return;
  }
  Serial.print("pushed: /logDHT/");
  Serial.println(name);
  delay(2000);
  digitalWrite(DEBUG_PUTHDATA, LOW);
  delay(28000);
}

String NowString() {
  time_t now = time(nullptr);
  struct tm* newtime = localtime(&now);

  String tmpNow = "";
  tmpNow += String(newtime->tm_hour);
  tmpNow += ":";
  tmpNow += String(newtime->tm_min);
  tmpNow += ":";
  tmpNow += String(newtime->tm_sec);
  return tmpNow;
}
  • ตรง FIREBASE_HOST ให้นำลิ้งที่ก๊อบไว้มาวาง โดยตัด https:// ออก และตัด / ข้างหลังออกไป
  • ตรง FIREBASE_AUTH ให้นำ Key ที่ได้ก๊อบไว้มาวาง
  • ตรง WIFI_SSID ให้กรอกชื่อ WiFi ที่ต้องการให้ ESP8266 (NodeMCU) ไปเกาะเพื่อใช้อินเตอร์เน็ต
  • ตรง WIFI_PASS ให้กรอกรหัสผ่าน WiFi กรณีไม่มีให้เว้นว่างไว้ (#define WIFI_PASSWORD "")

เมื่อแก้ไขเสร็จแล้วก็มาถึงขั้นตอนการอัพโหลด กดไปที่ Tool > Board เลือก NodeMCU 1.0

จากนั้นเลือกพอร์ตโดยกดไปที่ Tool > Port โดยเลือกพอร์ตที่ไม่ใช่ COM1 (กรณีเครื่อคอมพิวเตอร์ของท่านมี Serial ports)

จากนั้นกดปุ่ม Upload รอจนกว่าจะอัพโหลดเสร็จ

เมื่อเสร็จแล้ว กดไปที่มอนิเตอร์

หากขึ้นประมาณดังรูปแสดงว่ามีการส่งข้อมูลเข้าไปที่ Firebase ได้แล้ว

กลับที่ Firebase ก็จะพบว่ามีข้อมูลถูกเพิ่มเข้ามาแล้ว

results matching ""

    No results matching ""