วิธีเก็บค่า Sensor ของ Things IoT ลงฐานข้อมูล MongoDB

HashtagF
4 min readJun 13, 2018

--

บทความนี้เป็นการนำค่าต่างๆ ที่ Sensor สามารถจับได้ หรือข้อมูลที่เราต้องการจะเก็บลงฐานข้อมูล MongoDB ตัวอย่างนี้เป็นการทำงานบนระบบปฏิบัติการ Ubuntu 16.04 LTS

สิ่งที่ต้องเตรียม

เมื่อเตรียมอุปกรณ์พร้อมแล้วก็มาดูวิธีทำกันเลยครับ

ขั้นตอนที่ 1 : ทำการติดตั้ง MongoDB

  • สามารถทำตามบทความด้านล่างนี้ได้เลย

ขั้นตอนที่ 2 : ทำการติดตั้ง NodeJS, npm

  • ตัวอย่างนี้เราจะใช้ NodeJS v.8.9.x นะครับ เพราะเวอร์ชั่นอื่น จะมีปัญหากับการใช้ Express
  • ทำการเปิดหน้าต่าง Terminal ใน Ubuntu และพิมพ์คำสั่งด้านล่างนี้
$ sudo apt-get update
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
  • ติดตั้ง npm (Node Package Manager) เป็นตัวช่วยติดตั้ง Modules
$ sudo apt-get install npm
  • เช็คว่าเราลงสำเร็จหรือไม่ ด้วยการตรวจสอบ Version ของแต่ละตัว
$ node -v
$ npm -v

ขั้นตอนที่ 3 : ติดตั้ง Modules ต่างๆที่จำเป็นในการทำงาน

  • ติดตั้ง Express ไว้สำหรับเป็น Web Framework Modules สำหรับการ routes การ request ต่างๆ เช่น GET POST PUT DELETE เป็นต้น
$ sudo npm install express --save
  • ต่อไปติดตั้ง Promise Modules
$ sudo npm install promise --save
  • ต่อไปเป็น modules > Mongojs ไว้สำหรับเชื่อมต่อ MongoDB กับ NodeJS
$ sudo npm install mongojs --save
  • และนี่เป็น modules ตัวสุดท้ายละครับ นั่นก็คือ forever เป็น tool สำหรับสั่งให้ NodeJS ของเรามีการทำงานอยู่ตลอดเวลา เมื่อมี Error เกิดขึ้นจะทำการ Restart ให้เราทันที
$ sudo npm install -g forever

ทีนี้เราก็ติดตั้ง Modules ที่จำเป็นครบแล้วไปต่อกันที่ Code ของเรากันเลยครับ

ขั้นตอนที่ 4 : เริ่มเขียน Code เพื่อทำการ Run Server ของเรา

ให้สามารถรับข้อมูลจาก NodeMCU ได้และเก็บข้อมูลลงฐานข้อมูล MongoDB

  • อันดับแรกสร้าง folder งานของเราก่อนด้วยคำสั่ง
$ mkdir iot-mongodb
$ cd iot-mongodb
  • จากนั้นทำการสร้าง File ที่มีชื่อว่า app.js เป็นไฟล์การทำงานของเรา
  • หรือเข้าไปโหลดได้ใน Github ของผมครับตามลิ้งด้านล่างนี้เลย
  • ต่อไปจะมาอธิบาย Code ในแต่ละส่วนนะครับ ส่วนที่สำคัญๆ
const express = require(‘express’)
const app = express()
var port = 4000
var mongojs = require(‘mongojs’)
var Promise = require(‘promise’)
var myiotdb = mongojs(‘test’)
var dhtdb = mongojs(‘test’)
  • ส่วนนี้เป็นการเรียก modules ต่างๆ เข้ามาเพื่อมาทำงานและกำหนดตำแหน่งที่เก็บข้อมูลของเรา
app.get(‘/’, function (req, res) {
res.send(“My IOT Protocol ready !”)
})
  • ส่วนนี้เป็นการเขียนการ Route เป็นการ GET ออกมาจะแสดงข้อมูลอะไร เช่นถ้าเราเข้า localhost:4000 ก็จะแสดงข้อความมาว่า “My IOT Protocol ready !”
ภาพการแสดงผล
/* For DHT write */
app.get(‘/writedht/:t/:h’, function (req, res) {
var strParseWriteReq = JSON.stringify(req.params)
var strWriteReq = JSON.parse(strParseWriteReq)
t = strWriteReq.t
h = strWriteReq.h
writeDHT(t, h, res)
})
/* For DHT data read */
app.get(‘/readdht/:datasize’, function (req, res) {
var strParseReadReq = JSON.stringify(req.params)
var strReadReq = JSON.parse(strParseReadReq)
datasize = strReadReq.datasize
readDHT(datasize, res)
})
  • ส่วนนี้เป็นการ route ให้มีการเขียนข้อมูลลงไปยัง Database ของเรา และการอ่านค่าข้อมูลจาก MongoDB
ตัวอย่างการอ่านข้อมูล
ตัวอย่างการเขียนข้อมูลลง DB

ขั้นตอนที่ 5 : เป็นการ Coding ลง NodeMCU ของเราครับ

  • Code ตัวนี้ก็มีอยู่ใน Github ของผมเหมือนกับ อยู่ใน testProject > testProject.ino
#include "ESP8266WiFi.h"
#include "DHT.h"
const char *ssid = "SSID WIFI";
const char *passw = "PASSWORD WIFI";
#define host "IP-Address Sever"
#define port 4000
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
String response;
float value;
String _str, _res, _t, _h;
float t, h;
void setup() {Serial.begin(115200);
WiFi.begin(ssid, passw);
Serial.print("WiFi connecting..");while ((WiFi.status() != WL_CONNECTED)) {
delay(200);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connected !");
sayHi();
} else {
Serial.println("Disconnected !");
}
}
void loop() {
t = dht.readTemperature();
h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.println("Temperature is " + String(t) + " celcuis");
Serial.println("Humidity is " + String(h) + " %RH");
Serial.println("----------------------------------------");
WriteDHT(t, h);
delay(5000);
}String sayHi() {
WiFiClient client;
if (client.connect(host, port)) {
_str = "GET /";
_str += " HTTP/1.1\r\n";
_str += "Host: ";
_str += host;
_str += ":";
_str += port;
_str += "\r\n";
_str += "Connection: keep-alive\r\n\r\n";
client.print(_str);delay(3000);while (client.available()) {
_res = client.readStringUntil('\r');
}
return _res;} else {
//..
}
}
String WriteDHT (float t, float h) {_t = String(t);
_h = String(h);
WiFiClient client;
if (client.connect(host, port)) {
_str = "GET /writedht/";
_str += _t;
_str += "/";
_str += _h;
_str += " HTTP/1.1\r\n";
_str += "Host: ";
_str += host;
_str += ":";
_str += port;
_str += "\r\n";
_str += "Connection: keep-alive\r\n\r\n";
client.print(_str);delay(3000);
Serial.println("Add Data to MongoDB Success");
while (client.available()) {
_res = client.readStringUntil('\r');
}
return _res;
} else {
//Nothing..
}
}
  • ทำการ Upload Code นี้ลงไปใน NodeMCU ของเราได้เลยครับ

จากนั้นทำการ Run NodeMCU แล้ว Board ของเราก็จะทำงานและ Sensor ก็จะทำการ Detect ข้อมูลมาและนำข้อมูลส่งไปเขียนที่ฐานข้อมูล MongoDB ของเรา ถ้าเขียนข้อมูลลงใน MongoDB สำเร็จถือเป็นอันว่าโปรเจคของเราเสร็จสิ้นแล้วครับ

  • วิธีเช็คข้อมูลว่าเข้า MongoDB มั้ย ให้ไปที่เครื่องที่ Run Service ของ MongoDB ของเราแล้วทำการรันคำสั่ง ดังนี้
$ mongo
  • จากนั้นทำการเข้าไปใน DB ที่กำหนด
> use test
> db.dht.find()
  • ถ้ามีข้อมูลอยู่ในนี้เป็นอันสำเร็จครับผม

ผมขอจบการเขียนบทความนี้เพียงเท่านี้ครับ อาจจะเป็นประโยชน์ไม่มากก็น้อยครับขอบคุณครับ

--

--