สร้างอุปกรณ์ IoT ง่าย ๆ ด้วย NETPIE และ NB-IoT

Sirawit Sek
NEXPIE
Published in
4 min readAug 16, 2018
Arduino UNO R3 + True NB-IoT Shield + DHT 22 + NETPIE

บทความนี้จะสอนการใช้งาน NB-IoT (ใช้ได้ทั้ง True และ AIS) ด้วย NETPIE Platform เบื้องต้น โดยการส่งค่าอุณหภูมิและความชื้นไปยัง Web Application สำเร็จรูป NETPIE Freeboard เพื่อเป็นตัวอย่างสำหรับนำไปประยุกต์เป็นอุปกรณ์ IoT แบบต่าง ๆ ต่อไป

เกริ่นนำ

เมื่อนึกอยากจะสร้างอุปกรณ์ Internet of Things (IoT) ซักตัวนึง คลื่นที่เรามักจะใช้ในการเชื่อมต่อ Internet ก็คือสัญญาณ Wifi ใช่ไหมครับ เพราะเดี๋ยวนี้ไม่ว่าจะบ้านหรือที่ทำงานเราก็มี Wifi ใช้ทั้งนั้น ส่วนถ้าหากอยากจะใช้ในที่ไกล ๆ ไม่มีสัญญาณ WiFi ก็มักจะนิยมใช้ 2G/3G

แต่มาวันนี้ ผมขอนำเสนออีกหนึ่งทางเลือก นั่นก็คือ!! คลื่น NB-IoT ( Narrow Band Internet of Things ) โดยมีคุณสมบัติที่น่าสนใจคือ Long Range & Low Power หรือก็คือ สามารถส่งสัญญาณได้ไกล และใช้พลังงานต่ำครับ (เนื่องจากสัญญาณต่าง ๆ ที่ได้กล่าวถึงข้างบนนั้นใช้พลังงานสูงทั้งสิ้น)

อ่านรายละเอียดเพิ่มเติมเกี่ยวกับ NB-IoT ได้ที่: https://techsauce.co/tech-and-biz/narrow-band-internet-of-things-nb-iot/

ถ้าถูกใจหรือสนใจ NB-IoT ขึ้นมาแล้วล่ะก็…

มาลองสร้างอุปกรณ์ IoT กับสัญญาณ NB-IoT กันเถอะ !!

สำหรับมือใหม่มาก ๆ ที่ไม่เคยสร้างอุปกรณ์ IoT เลย สามารถทำตามเพื่อเรียนรู้วิธีและติดตามผลลัพธ์ได้ แต่แนะนำให้ศึกษาเรื่อง Arduino และ NETPIE เพื่อความเข้าใจยิ่งขึ้นครับ

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

  • Arduino UNO หรือ Arduino Mega (บทความนี้เลือกใช้ UNO)
  • True NB-IoT Shield
  • DHT22 (เซ็นเซอร์วัดอุณหภูมิและความชื้น)
หน้าตาบอร์ด Arduino UNO R3 (หน้าตาอาจมีแตกต่างกันออกไปบ้างนิดหน่อยตามผู้ผลิต)
หน้าตา True NB-IoT Shield ที่ใช้ เป็นบอร์ด Arduino Shield สำหรับเชื่อมต่อสัญญาณ NB-IoT ของ True
หน้าตาเซ็นเซอร์วัดอุณหภูมิและความชื้น รุ่น DHT-22 ที่แนะนำให้ใช้สำหรับการทดลอง อย่าใช้ตามแบบที่บทความนี้ใช้อยู่เลย ลำบาก 555 (ภาพจาก: inventelectronics.com)

สิ่งที่ต้องมี

  • ติดตั้ง Arduino IDE เวอร์ชัน 1.6.0 ขึ้นไปบนเครื่องเรียบร้อยแล้ว
  • สมัครสมาชิก netpie.io และสร้าง appid, freeboard เรียบร้อยแล้ว
    (การสมัครสมาชิกและสร้าง appid คลิก, การใช้งาน freeboard คลิก)

ติดตั้ง Arduino Library

Microgear NB-IoT

  1. เปิดโปรแกรม Arduino IDE
เปิดโปรแกรม Arduino IDE

2. คลิกที่เมนู Manage Libraries… โดยเข้าจาก Sketch -> Include Library

คลิกที่เมนู Manage Libraries… โดยเข้าจาก Sketch -> Include Library

3. กรอกข้อความ “microgear-nbiot” ในช่องค้นหา และคลิกที่ microgear-nbiot ที่แสดงขึ้นมา 1 ครั้ง

ค้นหา microgear-nbiot library

4. คลิกปุ่ม Install ที่แสดงขึ้นมา

ติดตั้ง microgear-nbiot library

Adafruit Unified Sensor และ DHT Library

ทำซ้ำวิธีเดียวกับ Microgear NB-IoT ในขั้นตอน 3 และ 4 แต่เปลี่ยนข้อความสำหรับค้นหาในขั้นตอนที่ 3 เป็น Adafruit Unified Sensor และ DHT Library

ติดตั้ง Adafruit Unified Sensor
ติดตั้ง DHT Library
ติดตั้ง AltSoftSerial

การเชื่อมต่ออุปกรณ์

  1. ประกบ NB-IoT Shield เข้ากับ Arduino
Arduino UNO R3 + True NB-IoT Shield

2. เชื่อมต่อ DHT-22 เข้ากับ NB-IoT Shield ดังรูปภาพ

การต่อสายระหว่าง Arduino Shield และ DHT22

โค้ดคำสั่ง Arduino

#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)      // Arduino UNO
#include <AltSoftSerial.h>
AltSoftSerial bc95serial;
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) // Arduino MEGA2560
#define bc95serial Serial1
#endif
#include <Arduino.h>
#include <DHT.h>
#include <BC95Udp.h>
#include <MicrogearNB.h>
// กำหนดข้อมูลเชื่อมต่อ NETPIE
#define APPID "YOUR_APPID" // ต้องแก้ไข
#define KEY "YOUR_KEY" // ต้องแก้ไข
#define SECRET "YOUR_SECRET" // ต้องแก้ไข
// กำหนดข้อมูลเชื่อมต่อ DHT22
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BC95UDP client;
Microgear microgear(&client);
#define MAXBUFFSIZE 32
char payload[MAXBUFFSIZE];
long lastDHTRead = 0;
void setup() {
bc95serial.begin(9600);
BC95.begin(bc95serial);
BC95.reset();

Serial.begin(9600);
Serial.println(F("Microgear Arduino NB-IoT Start!"));
Serial.print(F("IMEI: "));
Serial.println(BC95.getIMEI());
Serial.print(F("IMSI: "));
Serial.println(BC95.getIMSI());
Serial.print(F("Attach Network..."));
while (!BC95.attachNetwork()) {
Serial.print(".");
delay(1000);
}
Serial.println(F("\nNB-IOT attached!"));
Serial.print(F("RSSI: "));
// ค่าความแรงสัญญาณ NB-IoT
Serial.println(BC95.getSignalStrength());
Serial.print(F("IPAddress: "));
Serial.println(BC95.getIPAddress());
microgear.init(APPID, KEY, SECRET);
microgear.begin(5555);
}
void loop() {
// เซนเซอร์​ DHT อ่านถี่เกินไปไม่ได้ จะให้ค่า error
// จึงต้องเช็คเวลาครั้งสุดท้ายที่อ่านค่าว่าทิ้งช่วงนานพอหรือยัง ในที่นี้ตั้งไว้ 1 วินาที
if(millis() - lastDHTRead > 1000){
float humid = dht.readHumidity(); // อ่านค่าความชื้น
float temp = dht.readTemperature(); // อ่านค่าอุณหภูมิ
lastDHTRead = millis();

Serial.print(F("Humid: "));
Serial.print(humid);
Serial.print(F(" %, "));
Serial.print(F("Temp: "));
Serial.print(temp);
Serial.println(F(" C "));
// ตรวจสอบค่า humid และ temp เป็นตัวเลขหรือไม่
if (isnan(humid) || isnan(temp)) {
Serial.println(F("Failed to read from DHT sensor!"));
}
else{
// เตรียมสตริงในรูปแบบ "humid,temp"
String datastring = (String)humid + "," + (String)temp;

Serial.print(F("Sending --> "));
Serial.println(datastring);
datastring.toCharArray(payload, MAXBUFFSIZE-1);
microgear.publish("/nbiot/sensor", payload);
}
Serial.print(F("Sent Signal Strength: "));
Serial.println(BC95.getSignalStrength());
microgear.publish("/nbiot/rssi", BC95.getSignalStrength());
}
microgear.loop();
}

สำคัญ !! อย่าลืมใส่ appid, key, secret ของตัวเองลงไปใน code ด้วย

เสร็จแล้ว Upload และกด Serial Monitor ดู ถ้าสมบูรณ์และไม่มีอะไรผิดพลาด ก็จะได้ผลลัพธ์แบบดังนี้ (ปล. Microgear NB-IoT ตอนนี้ยังไม่สามารถแสดงสถานะ Online บนเว็บ netpie.io ได้)

ตั้งค่าการแสดงผลบนเว็บ

  1. เพิ่ม Datasoure

2. เพิ่ม Gauge แสดงค่า RSSI จาก NB-IoT

3. เพิ่ม Gauge แสดงค่า อุณหภูมิและความชื้น จาก NB-IoT

เนื่องด้วยข้อความอุณหภูมิและความชื้นมาคู่กัน เช่น 27.61,60.10 แต่เราอยากได้แค่อุณหภูมิอย่างเดียว คือ 27.61 จึงจำเป็นต้องใช้ split เพื่อแยกข้อความ 2 ตัวที่เชื่อมกันด้วยเครื่องหมาย , ออกมา

เสร็จแล้วววว เย้!

เมื่อทำตามขั้นตอนต่าง ๆ เสร็จแล้ว ก็จะได้อุปกรณ์ส่งค่าความแรงสัญญาณ, อุณหภูมิ และความชื้น ขึ้น Internet เปิดที่ไหนบนโลกก็ได้แล้วตอนนี้

ผลงานที่ได้จากบทความนี้

หรือจะเปิดดูจาก application netpie บนมือถือก็ได้

ดูข้อมูลผ่านแอพ netpie บนมือถือ

ข้อจำกัด

ข้อจำกัดของ NETPIE & NB-IoT ตอนนี้ (11/11/2561) คือ ไม่สามารถแสดงสถานะการ Offline หรือ Online บนหน้าเว็บไซต์ netpie.io ได้นะครับ แต่ยังสามารถส่งค่าจากอุปกรณ์มายัง NETPIE ได้เท่านั้น ยังไม่เหมาะที่จะทำงานที่มีการส่งค่าจาก NETPIE ไปยังอุปกรณ์

ทิ้งท้าย

สำหรับมือใหม่อาจใช้เวลาในการทำความคุ้นเคยกับโปรแกรมใหม่ ๆ กันนานพอสมควร หากสุดท้ายแล้วพยายามแล้วไม่ได้จริง ๆ สามารถสอบถามมาได้ทุกอย่างเลยในคอมเม้นข้างล่างเลยครับ

หวังว่าจะมีประโยชน์กับหลาย ๆ ท่านเพื่อนำไปพัฒนาเป็นอุปกรณ์ IoT ที่ตอบโจทย์ผู้ใช้งานยิ่ง ๆ ขึ้นไป และหลากหลายยิ่งขึ้น ถ้าอยากให้บทความต่อไปสอนเรื่องอะไรก็คอมเม้นบอกกันข้างล่างได้เช่นกันครับ

พูดคุย แลกเปลี่ยน สอบถามข้อมูลเกี่ยวกับ NETPIE ได้ที่
Facebook Group: https://www.facebook.com/groups/netpie

ติดตามข่าวสาร ติดต่อธุรกิจกับ NEXPIE ได้ที่
Facebook Fanpage: https://www.facebook.com/nexpie

--

--