จากบทความที่แล้วเราได้ทำการพูดถึงการตั้งค่าแพลตฟอร์ม Blynk ให้พร้อมใช้งานกับอุปกรณ์ แต่วันนี้เราจะมาดูกันว่าคำสั่งที่เราจะใช้ รับส่งข้อมูลของอุปกรณ์นั้นมีอะไรบ้าง
โครงสร้างของโปรแกรม
โดยพื้นฐานแล้วการเขียนโปรแกรมควบคุมนั้นจะแบ่งออกเป็น 2 ส่วนหลักๆคือ setup() และ loop() ซึ่งการที่เราจะใช้ Blynk นั้นเรามีความจำเป็นต้องโหลดไลบรารี่ของทางแพลตฟอร์มมาก่อนโดยสามารถติดตั้งด้วยการเลือกแถบ Tools -> manage Libraries.. หรือจะกดจากแถบข้างขวาได้เช่นกันแล้วทำการค้นหา Blynk ให้ทำการติดตั้งไลบรารี่ดังรูป
เมื่อติดตั้งสำเร็จแล้วเราจะสามารถเรียกใช้ไลบรารี่ต่างๆ ได้ให้เรียกใช้ไลบรารี่ที่ตรงกับบอร์ดของท่านแล้วทำการนำค่าที่ได้จากการสร้างอุปกรณ์ในเว็บไซต์มาใส่ โดยให้ใส่อยู่บนสุด (ก่อนเรียกใช้ไลบรารี่)
//Get from platform when you create device.
#define BLYNK_TEMPLATE_ID "TMPL6T-YU_RpF"
#define BLYNK_TEMPLATE_NAME "Basic IOT"
#define BLYNK_AUTH_TOKEN "DmMlhnT6F2esNT_xSWZsRgPmQp7f2SO4"
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char ssid[] = "Wifi name";
char pass[] = "Wifi password";
ส่งค่าด้วย Blynk.virtualWrite()
Blynk.virtualWrite( Pin , Value); เป็นฟังชั่นที่ใช้สำหรับการส่งค่า โดย Pin คือค่าที่เรากำหนดไว้ใน Datastream และ Value คือตัวแปรที่เก็บค่าที่ต้องการจะส่งขึ้นไป ซึ่งค่านี้จะมาจาก เซ็นเซอร์หรือการคำนวนของบอร์ด
void myTimerEvent()
{
//Send Temperature to V2 pin
Blynk.virtualWrite(V2, Temperature);
}
รับค่าจากแพลตฟอร์มด้วย BLYNK_WRITE()
BLYNK_WRITE( Pin ); เป็นฟังชั่นที่ใช้สำหรับรับค่าโดยฟังชั่นนี้จะใช้หลักการของการ override ฟังชั่นที่มากับไลบรารี่แต่ฟังชั่นยังคงผูกมัดกับออบเจ็ค Blynk อยู่ โดยฟังชั่นนี้จะถูกเรียกใช้อัตโนมัติเมื่อค่าของ Pin ที่เรากำหนดนั้นมีการเปลี่ยนแปลง โดยเราจะต้องแปลงค่าให้ใช้งานได้โดยใช้ param.asInt(); เพื่อที่จะได้ค่าของ Pin ดังกล่าวที่ส่งมาจากแพลตฟอร์ม
BLYNK_WRITE(V0)
{
//Get value Pin V0 from platform
int value = param.asInt();
Blynk.virtualWrite(V1, value);
}
กำหนดการทำงานด้วย BlynkTimer
BlynkTimer เป็นคลาสๆนึงที่อยู่ในไลบรารี่ซึ่งเราสามารถนำมาสร้างเป็นออบเจ็คได้โดย ออบเจ็คนี้มีหน้าที่ควบคุมการทำงานต่างๆ เช่น จะทำการส่งค่าทุกกี่วินาที หรือจะทำการใดๆ ที่มีการกำหนดเวลารอบการทำงาน โดยขั้นตอนแรกจะต้องทำการประกาศสร้างออบเจ็คดังกล่าวก่อน
char ssid[] = "Wifi name";
char pass[] = "Wifi password";
//Create BlynkTimer object name timer
BlynkTimer timer;
เมื่อเราประกาศเสร็จแล้วเราจะต้องทำการกำหนดค่าว่าจะให้ BlynkTimer เรียกฟังชั่นที่ผูกอยู่กับตัวเองนั้นทำงานหลังจากเวลานั้นผ่านไปเท่าไหร่ และเป็นการกำหนดด้วยว่าฟังชั่นนั้นจะเป็นอะไร ด้วยคำสั่ง setInterval( time , function ) โดย time คือการกำหนดว่าจะทำงานทุกกี่มิลลิวินาที
void setup()
{
Serial.begin(115200);
//Setup Blynk object by Token,Wifi name and Wifi password.
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
//Setup BlynkTimer object by time and function.
timer.setInterval(1000L, myTimerEvent);
}
เริ่มต้นการเชื่อมต่อและการทำงาน
ในการที่เราจะทำการเชื่อมต่อกับทางแพลตฟอร์มนั้น เรามีความจำเป็นต้องประกาศเริ่มต้น แต่ก่อนหน้านั้นเรามีความจำเป็นต้องประกาศการเชื่อมต่อและโทเคนที่ได้รับมา ด้วยฟังชั่น Blynk.begin( token , ssid , pass); โดย token คือสิ่งที่เราได้รับมาตอนสร้างอุปกรณ์กับแพลตฟอร์มและเรานั้นได้ประกาศไว้ข้างบนสุดของโปรแกรม ส่วน ssid และ pass คือชื่อ wifi และรหัสผ่านของท่าน
void setup()
{
Serial.begin(115200);
//Setup Blynk object by Token,Wifi name and Wifi password.
//----------------------------------------------
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
//----------------------------------------------
//Setup BlynkTimer object by time and function.
timer.setInterval(1000L, myTimerEvent);
}
เมื่อเรากำหนดค่าเสร็จแล้วเราจะทำการสั่งให้ทำงานด้วย .run() ซึ่งจะทำในฟังชั่น loop()
void loop()
{
//Start flow time.
Blynk.run();
timer.run();
}
ซึ่งในขั้นตอนนี้เราจะทำสั่ง run() ของออบเจ็ค BlynkTimer ทั้งหมดที่เราประกาศและตั้งค่าไว้ด้วยหลังจากนั้นให้ทำการอัพลงบอร์ดของท่านก็จะใช้งานได้แล้ว
จะเห็นได้ว่าการเขียนโปรแกรมควบคุม โดยการใช้แพลตฟอร์มนั้นจะมีความสะดวกกว่าการที่ท่านจะต้องกำหนด การเชื่อมต่อและโครงสร้างข้อมูลเป็นสตริงที่ค่อนข้างยาว การเขียนโดยเราใช้โครงสร้างของทางแพลตฟอร์มจึงมีความง่าย แหมะสำหรับผู้ที่เริ่มต้นศึกษา
Code ทั้งหมดจากการทดลอง
//Get from platform when you create device.
#define BLYNK_TEMPLATE_ID "TMPL6T-YU_RpF"
#define BLYNK_TEMPLATE_NAME "Basic IOT"
#define BLYNK_AUTH_TOKEN "DmMlhnT6F2esNT_xSWZsRgPmQp7f2SO4"
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char ssid[] = "Wifi name";
char pass[] = "Wifi password";
//Create BlynkTimer object name timer
BlynkTimer timer;
int Temperature = 0;
BLYNK_WRITE(V0)
{
//Get value Pin V0 from platform
int value = param.asInt();
Blynk.virtualWrite(V1, value);
}
void myTimerEvent()
{
//Send Temperature to V2 pin
Blynk.virtualWrite(V2, Temperature);
}
void setup()
{
Serial.begin(115200);
//Setup Blynk object by Token,Wifi name and Wifi password.
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
//Setup BlynkTimer object by time and function.
timer.setInterval(1000L, myTimerEvent);
}
void loop()
{
//Start flow time.
Blynk.run();
timer.run();
}