ควบคุม GRATIA (RF SWITCH) ผ่านอินเตอร์เนต ด้วย ESP8266 ผ่าน NETPIE.io
ต้องขอบอกว่าหลังจากหายไปนาน ก็ถึงเวลาปัดฝุ่นบทความที่ยังคั่งค้าง วันนี้ ผมขอเสนอ ลูกเล่นเล็กๆน้อยๆที่จะมาช่วยเติมเต็มประสบการณ์การใช้งาน สวิตช์ GRATIA ในมือของทุกท่านให้มีชีวิตชีวา หวือหวาขึ้นอีกนิด จากที่แค่ทำงานผ่านทางรีโมต RF ในก้าวไปอีกขั้นโดยทำให้ทุกท่านสามารถสั่งการทำงานได้ผ่านอินเตอร์เน็ตโดยวันนี้จะขอใช้ NETPIE.io เป็นสื่อกลางในการสื่อสาร รวมถึงใช้อุปกรณ์ ESP8266 ในการทำหน้าที่ เป็น remote bub เพื่อประสานการทำงานระหว่าง gratia และ netpie
เบื้องต้นเนื้อหาในบทความนี้จะเน้นไปทางการประยุกต์ใช้ เพราะฉะนั้นเนื้อหาที่เป็นส่วนของหลักการและทฤษฎีผมขอยกยอดไว้ไปเล่าต่อในอีกบทความถัดไปนะครับเพื่อให้ท่านที่ต้องการศึกษาและต่อยอดสามารถนำไปประยุกต์ได้หลากหลายขึ้นซึ่งจะยังขาดเนื้อหาของการแกะคำสั่งของรีโมทไร้สายขอให้ติดตามกันได้เร็วๆนี้นะครับ
ก่อนที่จะเข้าสู่เนื้อหา ผมขอพาทุกท่านไปทำความรู้จักกับเจ้า gratia switch กันซักเล็กน้อย ก่อนนะครับว่ามันคืออะไรและมีหลักการทำงานอย่างไร
สวิตช์ gratia นั้น เป็นสวิตช์ไฟ ที่ทำงานในระบบสัมผัสผ่านทางเซนเซอร์แบบคาปาซิทีฟ พร้อมยังสามารถทำงานด้วยรีโมทไร้สายได้อีกด้วย โดยส่วนประกอบภายในจะแบ่งออกเป็นส่วนการทำงานดังนี้
เมื่อเราแยกชิ้นส่วนที่เป็นกระจกครอบด้านหน้าออกจะพบกับส่วนแรกนั่นคือส่วนของสวิตช์สัมผัส
ด้านหลังของแผ่นสวิตช์เราจะพบกับขั้วต่อ และไมโครคอนโทรลเลอร์ซึ่งทำหน้าที่ในการประมวลผลและสั่งการทำงานทั้งหมดทั้งการอ่านค่าการกดสวิตช์ รวมทั้งการควบคุมรีเลย์ในชั้นการทำงานถัดไป
เมื่อเรางัดส่วนของสวิตช์ออกจะพบกับส่วนที่สองซึ่งเป็นส่วนควบคุมการตัดต่อกระแสไฟรวมถึงส่วนการสื่อสารด้วย
เมื่อเราไขนอตและนำชิ้นส่วนที่สองออกมาจะพบกับส่วนของรีเลย์ที่ใช้ในการควบคุมตัดต่อกระแสไฟและ ส่วนของการสื่อสารที่ใช้รับคำสั่งจากรีโมทไร้สาย
และนี่คือหัวใจและช่องทางที่เราจะใช้ในการสื่อสารกับบอร์ด ESP8266 ของเรากัน จะสังเกตได้ว่าโมดูลสื่อสารที่สวิตช์ gratia ใช้นั้นจะเป็นโมดูลสื่อสารภาครับแบบ RF ที่ย่านความถี่ 433 นั่นเอง
เมื่อเราทำความรู้จักับไส้ในของ สวิตช์ gratia ไปแล้วคราวนี้ก็ต้องมาเรียนรู้การใช้งานเบื้องต้นของสวิตช์กันก่อน ในที่นี้ผมจะให้ทุกท่านศึกษากันจาก สื่อของทางบ.เลยนะครับ ขั้นตอนทั้งการติดตั้งและการตั้งค่าใช้งานรีโมท
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
จากนั้นเปิดไฟล์ใหม่ขึ้นมาและคัดลอก 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 ขึ้นมาก็จะพบหน้าจอพร้อมใช้งานของหน้าต่างรีโมท หากต้องการใช้งานจากหลายๆอุปกรณ์ สามารถอัพโหลดไฟล์นี้ไปยัง เว็บเซิฟเวอร์เพื่อให้สะดวกต่อการเรียกใช้ผ่านอินเตอร์เน็ต
เมื่อเข้าไปยังไฟล์ index.html จะพบหน้ารีโมทจำลองดังภาพ
เมื่อเราเตรียมสภาพแวดล้อมในการทำงานเสร็จครบทุกส่วนแล้ว ต่อไปเราจะทำการผูกค่าของปุ่มรีโมทที่เราสร้างขึ้นเข้ากับปุ่มบนสวิตช์ของ gratia โดยการกดปุ่มบนสวิตช์ gratia ที่ต้องการผูกค่า ค้างไว้จนได้ยินเสียง ปี๊บ หนึ่งครั้ง จากนั้นกดปุ่มรีโมทบนเว็บแอพของเราหากสำเร็จจะได้ยินเสียงตอบรับการตั้งค่าเป็นเสียงปิ๊บจากสวิตช์ gratia ทำซ้ำขั้นตอนดังกล่าวกับปุ่มที่เหลือ คราวนี้ระบบเราก็จะพร้อมใช้แล้วครับ
ที่มาและแหล่งข้อมูล :
https://github.com/platenspeler/LamPI-2.0/tree/master/transmitters/livolo
You must log in to post a comment.