จากบทความที่แล้วเราได้ทำการพูดถึงการตั้งค่าแพลตฟอร์ม 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();
}