ควบคุม GRATIA (RF SWITCH) ผ่านอินเตอร์เนต ด้วย ESP8266 ผ่าน NETPIE.io

ควบคุม GRATIA (RF SWITCH) ผ่านอินเตอร์เนต ด้วย ESP8266 ผ่าน NETPIE.io

ต้องขอบอกว่าหลังจากหายไปนาน ก็ถึงเวลาปัดฝุ่นบทความที่ยังคั่งค้าง วันนี้ ผมขอเสนอ ลูกเล่นเล็กๆน้อยๆที่จะมาช่วยเติมเต็มประสบการณ์การใช้งาน สวิตช์ GRATIA ในมือของทุกท่านให้มีชีวิตชีวา หวือหวาขึ้นอีกนิด จากที่แค่ทำงานผ่านทางรีโมต RF ในก้าวไปอีกขั้นโดยทำให้ทุกท่านสามารถสั่งการทำงานได้ผ่านอินเตอร์เน็ตโดยวันนี้จะขอใช้ NETPIE.io เป็นสื่อกลางในการสื่อสาร รวมถึงใช้อุปกรณ์ ESP8266 ในการทำหน้าที่ เป็น remote bub เพื่อประสานการทำงานระหว่าง gratia และ netpie

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

ก่อนที่จะเข้าสู่เนื้อหา ผมขอพาทุกท่านไปทำความรู้จักกับเจ้า gratia switch กันซักเล็กน้อย ก่อนนะครับว่ามันคืออะไรและมีหลักการทำงานอย่างไร

สวิตช์ gratia นั้น เป็นสวิตช์ไฟ ที่ทำงานในระบบสัมผัสผ่านทางเซนเซอร์แบบคาปาซิทีฟ พร้อมยังสามารถทำงานด้วยรีโมทไร้สายได้อีกด้วย โดยส่วนประกอบภายในจะแบ่งออกเป็นส่วนการทำงานดังนี้

เมื่อเราแยกชิ้นส่วนที่เป็นกระจกครอบด้านหน้าออกจะพบกับส่วนแรกนั่นคือส่วนของสวิตช์สัมผัส

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

เมื่อเรางัดส่วนของสวิตช์ออกจะพบกับส่วนที่สองซึ่งเป็นส่วนควบคุมการตัดต่อกระแสไฟรวมถึงส่วนการสื่อสารด้วย

เมื่อเราไขนอตและนำชิ้นส่วนที่สองออกมาจะพบกับส่วนของรีเลย์ที่ใช้ในการควบคุมตัดต่อกระแสไฟและ ส่วนของการสื่อสารที่ใช้รับคำสั่งจากรีโมทไร้สาย

และนี่คือหัวใจและช่องทางที่เราจะใช้ในการสื่อสารกับบอร์ด ESP8266 ของเรากัน จะสังเกตได้ว่าโมดูลสื่อสารที่สวิตช์ gratia ใช้นั้นจะเป็นโมดูลสื่อสารภาครับแบบ RF ที่ย่านความถี่ 433 นั่นเอง

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

YouTube Preview Image

http://www.gratiathailand.com/2017/


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

สิ่งที่ต้องเตรียมอย่างแรกก็คือ ให้ทุกท่านจัดหา โมดูลสื่อสารแบบ RF 433 โดยเราจะใช้เพียง ภาคส่งเท่านั้น จากนั้นทำการเชื่อมต่อเข้ากับบอร์ดของเราตามรูปได้เลยครับ

ที่มา : https://www.arduinoall.com/product/118/433mhz-wireless-rf-transmitter-and-receiver-module

ภาพการต่อสายสัญญาณ สายสีเหลืองต่อเข้ากับขา DIO5,ขา สายสีแดง ต่อกับขา 5V และ สายสีดำ ต่อกับขา GND ของบอร์ด

เมื่อทำการต่อขาสัญญาณเรียบร้อยแล้วให้ทุกท่าน ดาวน์โหลด Library สำหรับใช้ในการควบคุมไปติดตั้งยังโปรแกรม Arduino

https://goo.gl/ICw74h

จากนั้นเปิดไฟล์ใหม่ขึ้นมาและคัดลอก code ด้านล่างนี้ลงไปและเปลี่ยนค่าสำหรับเชื่อมต่อกับ netpie ทั้งสามส่วนคือ APPID,KEY,SECRET เสร็จแล้วจึง UPLOAD ลงไปยังบอร์ดที่เราเตรียมไว้

#include <AuthClient.h>
#include <MicroGear.h>
#include <MQTTClient.h>
#include <SHA1.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <MicroGear.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <SPI.h>
#include <livolo.h>

// Please visit netpie.io to get keys
#define APPID   " "
#define KEY     " "
#define SECRET  " "
#define ALIAS   "gratia"

WiFiClient client;
AuthClient *authclient;

char state = 0;

MicroGear microgear(client);
Livolo livolo(5);

//ในการสั่งการทำงานของรีโมท เราจะทำโดยการสั่งผ่านทางฟังก์ชั่น sendButton(unsigned int remoteID, byte keycode)
// remoteID คือรหัสประจำตัวของ remote รหัสตรงนี้ต้องแตกต่างกันในแต่ละชุดส่ง
// keycode  คือรหัสคำสั่งของปุ่มที่ต้องการส่งไปควบคุมสวิตซ์ โดยจะจัดเก็บในรูปแบบรหัส 7 bit
//Keycodes ที่อ่านได้จาก remote: #1: 0, #2: 96, #3: 120, #4: 24, #5: 80, #6: 48, #7: 108, #8: 12, #9: 72; #10: 40, #OFF: 106
void updateIO() {
  Serial.print(">>");
  Serial.println(state);
  switch (state) {
    case '1':
      livolo.sendButton(6400, 0);
      //delay(10);
      Serial.println("key1");
      break;
    case '2':
      livolo.sendButton(6400, 96);
      //delay(10);
      Serial.println("key2");
      break;
    case '3':
      livolo.sendButton(6400, 120);
      //delay(10);
      Serial.println("key3");
      break;
  }
}

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
  char m = *(char *)msg;
  Serial.print("Incoming message --> ");
  msg[msglen] = '\0';
  Serial.println((char *)msg);
  state = m;
  updateIO();
}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
  Serial.println("Connected to NETPIE...");
  microgear.subscribe("/gratia/key");
}

void setup() {
  Serial.begin(115200);
  Serial.println("Starting...");

  WiFiManager wifiManager;
  wifiManager.setTimeout(180);

  if (!wifiManager.autoConnect("gratia-hub")) {
    Serial.println("Failed to connect and hit timeout");
    delay(3000);
    ESP.reset();
    delay(5000);
  }

  microgear.on(MESSAGE, onMsghandler);
  microgear.on(CONNECTED, onConnected);

  microgear.init(KEY, SECRET, ALIAS);
  microgear.connect(APPID);
}

void loop() {
  if (microgear.connected()) {
    microgear.loop();
  }
  else {
    Serial.println("connection lost, reconnect...");
    microgear.connect(APPID);
  }
}

เมื่อเรา UPLOAD เสร็จสิ้น ให้เชื่อมต่อเข้าไปยัง บอร์ด โดยใช้การเชื่อมต่อผ่าน WIFI ค้นหา AP ชื่อ gratia-hub จากนั้นเข้าไปตั้งค่าการเชื่อมต่อ WIFI ให้กับบอร์ดของเราเมื่อเชื่อมต่อสำเร็จเราก็พร้อมใช้งานกันแล้ว

ขั้นตอนสุดท้าย โหลดไฟล์หน้าควบคุม ที่สร้างจาก HTML5 นี้ลงไปที่เครื่องของท่าน จากนั้นแก้ไขค่า APPID,KEY,SECRET ให้พร้อมใช้งานร่วมกับ NETPIE จากนั้นเปิดไฟล์ index.html ขึ้นมาก็จะพบหน้าจอพร้อมใช้งานของหน้าต่างรีโมท หากต้องการใช้งานจากหลายๆอุปกรณ์ สามารถอัพโหลดไฟล์นี้ไปยัง เว็บเซิฟเวอร์เพื่อให้สะดวกต่อการเรียกใช้ผ่านอินเตอร์เน็ต

https://goo.gl/bMLfiF

เมื่อเข้าไปยังไฟล์ index.html จะพบหน้ารีโมทจำลองดังภาพ

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

YouTube Preview Image


ที่มาและแหล่งข้อมูล :
https://github.com/platenspeler/LamPI-2.0/tree/master/transmitters/livolo