การใช้งาน esp8266 กับ Blynk เบื้องต้น ด้วย sensor แบบ analog และ DIGITAL


หน้าจอโปรแกรม Blynk บนมือถือ

การทดลองในบทความนี้ จะเป็นการใช้ esp8266 กับ blynk โดยมีทั้ง sensor ทีเป็น digital และ Analog โดยในส่วนของ digital เราจะใช้ DHT11 สำหรับรับ อุณหภูมิและความชื้น ส่วน Analog เราจะใช้ตัว R แบบปรับค่าได้

ความรู้เบื้องต้นเกี่ยวกับ Blynk


   Blynk เป็น cloud platform ที่ให้บริการฟรี สำหรับ IOT  ไม่ว่าจะเป็น Arduino, Raspberry Pi หรือ ESP8266  โดยในโปรแกรมสามารถให้เราสร้างปุ่มกดเพื่อสั่งงานบน esp8266 ผ่าน wifi ได้เลย หรือจะสร้างหน้าจอแสดงผลเป็นกราฟ หรือ gauge หรืออะไรก็ได้ครับ ฟรีครับ

     การใช้งาน บนมือถือให้ download โปรแกรม Blynk มาครับ โดยจะให้พลังงานมาฟรีเริ่มต้น 2000 energy ในตัวอย่างเราจะใช้ Gauge จำนวน 1 อัน  และ graph จำนวน 2 อัน

หลักการ คือ เมื่อเราสร้าง new project เราจะได้ authen key มา โดย authen key จะถูกส่งมาทางอีเมล์ให้เราโดยอัตโนมัติ เราก็จะ copy มาใส่ใน code เรา แค่นั้นก็เสร็จ


การติดตั้ง Blynk สำหรับ Arduino IDE

ก่อนการใช้งาน ต้อง download library มาติดตั้งก่อน โดยดาวน์โหลดเป็น zip file จากที่นี่ https://github.com/blynkkk/blynk-library/releases/download/v0.4.6/Blynk_Release_v0.4.6.zip แล้วแตกไฟล์มาไว้ใน C:\Program Files (x86)\Arduino\libraries  จากนั้นก็ปิดเปิด arduino ide ให้เรียบร้อย 
จากนั้นก็เปิดตัวอย่างจาก example -> blynk -> board_wifi -> esp8266_Standalone





อุปกรณ์ที่ใช้
1.breadboard และสายไฟ ( 100 บาท)
2.esp8266 node CMU V.2 ( 250-300 บาท)
3. R แบบปรับค่าได้  ( 10 บาท)



การต่อวงจรขาของ R แบบปรับค่าได้   โดยหันตัวปรับค่า เข้าหาตัวเรา 
ซ้ายมือสุด ต่อ 3.3v     ขากลาง ต่อกับ AO   ส่วนขามือสุดต่อ GND (ground)

4. DHT11 ( 50 บาท)

การต่อวงจรขาของ DHT11   โดยหันด้านหน้าที่เป็นรูๆ  เข้าหาตัวเรา 
ซ้ายมือสุด ต่อ 3.3v     ขากลาง ต่อกับ D5   ขาที่สามปล่อยว่าง   ส่วนขามือสุดต่อ GND (ground)

5.สาย USB ( 50 บาท)


ภาพการต่อวงจร

software ที่ใช้
1.Arduino IDE
2.Blynk บนมือถือ ( ดาวน์โหลดได้จาก store ทั้ง android และ ios )



/// code  c++ บน arduino IDE //

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App
// Go to the Project Settings (nut icon).
char auth[] = "BLINK AUTH TOKEN"; //ได้มาจาก email หลังจาก new project


char ssid[] = "WIFI_SSID";
char pass[] = "WIFI_PASSWORD";

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}


///////////////////

ส่วนของ Blynk

เริ่มต้น ดาวน์โหลด blynk หลังจากนั้นสมัครสมาชิก โดยให้จำ email ไว้ให้ดีดี เนื่องจากหลังจากที่เรา new project ระบบจะส่ง authen key ไปให้ทางอีเมล์ครับ







เริ่มสร้าง project  หลังจากสร้าง project ก็จะส่ง authen key มาทางอีเมล์


หลังจาก สร้าง project ระบบจะส่ง authen key มาให้

หลังจากสร้าง project จะยังไม่มีอะไร จะมีแค่หน้าว่าง ให้เลื่อนจอไปทางข้างๆ จะพบกับกราฟต่างๆ


สามารถเลือกใช้ได้ตามชอบใจ แต่ energy ก็จะลดลงเรื่อยๆ 







ให้เลือก gauge เพื่อสร้างการแสดงผลจา R แบบปรับค่าได้ โดยให้เลือก pin เป็น ADC0
 เพราะเนื่องจาก esp8266 จะรับค่า analog ได้เพียง ขาเดียว 




จากนั้นก็ให้เลือก graph เพื่อแสดงผลอุณหภูมิ โดยเลือก pin เป็น Virtual V5
เนื่องจาก DHT11 สามารถรับค่าได้ทั้งอุณหภูมิและความชื้น จึงต้องใช้ค่า virtual


สร้าง graph แสดงผลความชื้น โดยเลือก pin เป็น virtual V6

ทดลอง RUN โดยกดปุ่มสามเหลี่ยม ด้านขวา ก็จะเห็นผล

เพิ่มเติม
             ต่อ Relay แบบ 1 channel โดยสั่งกดปุ่มที่ Blynk แล้วทำให้ไฟที่ relay ติด


Relay แบบ 1 channel  วิธีการต่อ ตามขาเลยครับ แต่ขา IN ให้ต่อกับขา D5 ( GPO14)




สร้างปุ่มกดมา 1 ปุ่ม โดยกำหนดขา PIN เป็น GPO14


เมื่อกดปุ่ม ไฟจะติด
///////////////////////

เล่นกับปุ่มเปิดดับ กดแล้วแจ้งเตือนผ่าน Line group

    ตัวอย่างเช่น  ทำกล่องแล้วว่างไว้ที่แผนกเวรเปลในโรงพยาบาล  ถ้ากดปุ่ม เวรเปลก็จะมารับที่จุดกดปุ่ม โดยอาจใช้ไฟจากถ่าน หรือแหล่งอื่นก็ได้


การต่อขา ปุ่มกด  ขาซ้ายสุดต่อ D5 ขากลางต่อกับ GND


////code c++ ///

void Line_Notify(String message) ;

#include <ESP8266WiFi.h>

// Config connect WiFi
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "wifi_password"

// Line config
#define LINE_TOKEN "line token key"

#define SW D5

String message = " Help me please";

void setup() {
  pinMode(SW, INPUT);

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (digitalRead(SW) == HIGH) {
    while(digitalRead(SW) == HIGH) delay(10);

    Serial.println("Enter !");
    Line_Notify(message);
    // Serial.println();
  }
  delay(10);
}

void Line_Notify(String message) {
  WiFiClientSecure client;

  if (!client.connect("notify-api.line.me", 443)) {
    Serial.println("connection failed");
    return;
  }

  String req = "";
  req += "POST /api/notify HTTP/1.1\r\n";
  req += "Host: notify-api.line.me\r\n";
  req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";
  req += "Cache-Control: no-cache\r\n";
  req += "User-Agent: ESP8266\r\n";
  req += "Content-Type: application/x-www-form-urlencoded\r\n";
  req += "Content-Length: " + String(String("message=" + message).length()) + "\r\n";
  req += "\r\n";
  req += "message=" + message;
  // Serial.println(req);
  client.print(req);
 
  delay(20);

  // Serial.println("-------------");
  while(client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
    //Serial.println(line);
  }
  // Serial.println("-------------");
}

///////////////

ความคิดเห็น

  1. นำโค้ดทั้ง3อันมารวมกันได้มั้ยครับ

    ตอบลบ
  2. ขอบคุณครับอธิบายได้เข้าใจมากขึ้น

    ตอบลบ
  3. ถ้าใช้กับหลายเครื่อง ต้องสร้างบนมือถือทุกเครื่องมั้ย หรือคัดลอกไปได้

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจ้งเตือนเข้าไลน์กลุ่ม ผ่าน Line notify เมื่อมีคน login เข้า server ของเราผ่าน SSH (linux) หรือ remote desktop เข้ามา (windows server)

การทำ cloud iot ด้วย thingsboard ไว้ใช้เองครับ

การประยุกต์ใช้ line notify ในการแจ้งปัญหาการใช้งาน สำหรับ php