บทความ WebThings Gateway ตอนที่ 5 รับข้อมูลจาก WebThings Gateway มาควบคุมการทำงานบนบอร์ด ESPino32

WebThings Gateway

        บทความ WebThings Gateway เป็นบทความเกี่ยวกับการสร้างเว็บไซต์สำหรับควบคุมอุปกรณ์ IoT ของตัวเองโดยใช้บอร์ด Raspberry Pi (บอร์ดคอมพิวเตอร์ขนาดเล็กเท่าบัตรเครดิต) เป็น Gateway ของอุปกรณ์ IoT ไม่จำเป็นต้องเขียนโปรเเกรมให้ยุ่งยาก จัดการส่วนต่างๆด้วยการลากวางเท่านั้น รายละเอียดในบทความนี้จะเเบ่งเนื้อหาออกเป็น หลายๆส่วน ซึ่งจะเเยกออกบทความหลายบท เพื่อจะไม่ให้เนื้อหาในเเต่ละบทนั้นยาวเกินไป โดยจะประกอบด้วย

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

เนื้อหาที่เกี่ยวข้อง

อุปกรณ์ใช้ภายในบทความ

1. ESPino32 Wifi BLE Development Board (ETEE061S) จำนวน 1 pcs บอร์ดไมโครคอนโทรลเลอร์พร้อมโมดูลสื่อสาร Wireless LAN และ Bluetooth ใช้โมดูล ESP-WROOM-32 จาก Espressif Systems เป็นไมโครคอนโทรลเลอร์ขนาด 32-bit สามารถนำไปประยุกต์ใช้งานในโครงงานอิเล็กทรอนิกส์ได้อย่างหลากหลาย 

2. 10mm RGB LED Module (ESEN280) โมดูล RGB LED หลอดไฟขนาด 10 มม. ใช้ไฟ 3-5V เหมาะสำหรับการทดลองในการควบคุมหลอดไฟแบบหลายสี สามารถผสมสีต่างๆ ได้โดยอาศัยการควบคุมจากไมโครคอนโทรลเลอร์

3. Female to Female Cable Jumper Wire 40 Pins (เมีย-เมีย) (ELNK051) จำนวน 1 pcs สาย Jumper Wire แบบสายแพ สามารถฉีกออกเป็นเล็กได้ 40 เส้น ความยาวสาย 20 cm ปลายทั้ง 2 ด้านเป็นหัว header ตัวเมีย

ตัวอย่างการใช้งาน WebThings ควบคุมการทำงานของ LED ด้วยบอร์ด ESPino32

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

WebThings ควบคุมการทำงานของ LED

วงจรที่ใช้

วงจร ESPino32 ควบคุมการทำงานของ LED 

โปรแกรมที่ใช้

#include <Arduino.h>
#include "Thing.h"
#include "WebThingAdapter.h"

const char *ssid = "YOUR_SSID_NAME";
const char *password = "YOUR_SSID_PASSWORD";

const int ledPin = 17;

WebThingAdapter *adapter;

const char *ledTypes[] = {"OnOffSwitch", "Light", nullptr};
ThingDevice led("led", "Built-in LED ESPino32", ledTypes);
ThingProperty ledOn("on", "", BOOLEAN, "OnOffProperty");

bool lastOn = false;

void setup(void) {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  Serial.begin(115200);
  Serial.println("");
  Serial.print("Connecting to \"");
  Serial.print(ssid);
  Serial.println("\"");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  bool blink = true;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    digitalWrite(ledPin, blink ? LOW : HIGH); // active low led
    blink = !blink;
  }
  digitalWrite(ledPin, HIGH); // active low led

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  adapter = new WebThingAdapter("w25", WiFi.localIP());

  led.addProperty(&ledOn);
  adapter->addDevice(&led);
  adapter->begin();
  Serial.println("HTTP server started");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.print("/things/");
  Serial.println(led.id);
}

void loop(void) {
  adapter->update();
  bool on = ledOn.getValue().boolean;
  digitalWrite(ledPin, on ? LOW : HIGH); // active low led
  if (on != lastOn) {
    Serial.print(led.id);
    Serial.print(": ");
    Serial.println(on);
  }
  lastOn = on;
}

หลังจากอัพโหลดโปรแกรมแล้ว เปิด Serial Monitor ของโปรเเกรม Arduino IDE การทำงานของโปรเเกรมนี้คือ เมื่อเริ่มต้นการทำงานไฟ LED ที่ต่ออยู่กับขา GPIO ของบอร์ด ESPino32 จะกระพริบจนกว่าจะต่ออินเทอร์เน็ตได้ จากนั้นโปรเเกรมจะเเสดงลิงค์ของเว็บไซต์ขึ้นมาดังรูป Serial Monitor Link ของ LED Thing

Serial Monitor Link ของ LED Thing

จากนั้นคัดลอง Link จากรูป Serial Monitor Link ของ LED Thing ไปยัง WebThings Gateway เพื่อทำการเพิ่ม LED Widget ดังรูป เพิ่ม LED Widget

เพิ่ม LED Widget

หลังจากเพิ่ม LED Widget สำเร็จเเล้ว ทดลองใช้งาน ดังรูป WebThings ควบคุมการทำงานของ LED

WebThings ควบคุมการทำงานของ LED

ตัวอย่างการใช้งาน WebThings ควบคุมระดับความสว่างของ LED

ตัวอย่างนี้จะเป็นการรับข้อมูลจาก Slide Bar บน WebThings เพื่อใช้งานในการควบคุมระดับความสว่างของหลอด LED จากฝั่งของ WebThings ดังรูป WebThings ควบคุมระดับความสว่างของ LED

WebThings ควบคุมระดับความสว่างของ LED

ตัวอย่างนี้ใช้วงจรเดียวกับตัวอย่าง WebThings ควบคุมการทำงานของ LED

ตัวอย่างนี้ต้องใช้งานไลบรารี่  ESP32 AnalogWrite เพิ่มเติมโดยสามารถดาวน์โหลดได้จาก Arduino IDE ในเมนู Librarymanager หรือดาวน์โหลดจากลิงค์ https://github.com/ERROPiX/ESP32_AnalogWrite 

โปรแกรมที่ใช้

#include <Arduino.h>
#include "Thing.h"
#include "WebThingAdapter.h"
#include <analogWrite.h>

const char *ssid = "YOUR_SSID_NAME";
const char *password = "YOUR_SSID_PASSWORD";

const int ledPin = 17;

WebThingAdapter *adapter;

const char *ledTypes[] = {"MultiLevelSwitch", nullptr};
ThingDevice led("led", "LED ON ESPino32", ledTypes);
ThingProperty ledOn("level", "Analog Output pin", INTEGER, "LevelProperty");

void setup(void) {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  Serial.begin(115200);
  Serial.println("");
  Serial.print("Connecting to \"");
  Serial.print(ssid);
  Serial.println("\"");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  bool blink = true;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    digitalWrite(ledPin, blink ? LOW : HIGH); // active low led
    blink = !blink;
  }
  digitalWrite(ledPin, HIGH); // active low led

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  adapter = new WebThingAdapter("w25", WiFi.localIP());

  led.addProperty(&ledOn);
  adapter->addDevice(&led);
  adapter->begin();
  Serial.println("HTTP server started");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.print("/things/");
  Serial.println(led.id);
}

void loop(void) {
  adapter->update();
  int level = map(ledOn.getValue().integer, 0, 100, 255, 0);  // led active low
  analogWrite(ledPin, level);
  delay(100);
}

หลังจากอัพโหลดโปรแกรมแล้ว เปิด Serial Monitor ของโปรเเกรม Arduino IDE ขึ้นมา การทำงานของโปรเเกรมนี้คือ เมื่อโปรเเกรมเริ่มต้น ไฟ LED ที่ต่ออยู่กับขา GPIO ของบอร์ด ESPino32 จะกระพริบจนกว่าจะต่ออินเทอร์เน็ตได้ จากนั้นโปรเเกรมจะเเสดงลิงค์ของเว็บไซต์ขึ้นมาดังรูป Serial Monitor Link ของ LED Level Thing

Serial Monitor Link ของ LED Level Thing

จากนั้นคัดลอง Link จากรูป Serial Monitor Link ของ LED Level Thing ไปยัง WebThings Gateway เพื่อทำการเพิ่ม LED ON ESPino32 Widget ดังรูป เพิ่ม LED ON ESPino32 Widget 

เพิ่ม LED ON ESPino32 Widget 

หลังจากเพิ่ม LED ON ESPino32 Widget  สำเร็จเเล้ว ทดลองใช้งาน ดังรูป WebThings ควบคุมระดับความสว่างของ LED

WebThings ควบคุมระดับความสว่างของ LED

จากตัวอย่างการสร้าง Things ทั้ง 2 ตัวอย่าง สำหรับการใช้งานบอร์ด ESPino32 เพื่อรับข้อมูลจากฝั่งของ WebThings  จะเห็นได้ว่าผู้ใช้งานสามารถสร้าง Things ขึ้นมาจากบอร์ด ESPino32 เเละสั่งงานบอร์ดดังกล่าวได้หลากหลายฟังก์ชันการทำงาน ถึงแม้ว่าในตัวอย่างนี้ยกตัวอย่างเป็นเพียงการควบคุมการทำงานของ LED แต่ในการใช้งานจริงผู้ใช้งานสามารถประยุกต์การทำงานเข้ากับอุปกรณ์อื่นๆ เช่น รีเลย์ มอเตอร์ไดร์ฟเวอร์ หรืออื่นๆ ตามที่ผู้ใช้งานต้องการได้เช่นกัน

ในบทความของ WebThings Gateway ขอจบการนำเสนอเนื้อหาเพียงเท่านี้ หากมีข้อสงสัยเพิ่มเติมสามารถสอบถามทีมงานได้ทาง อีเมล Support@thaieasyelec.com เบอร์โทร 089-514-8111 หรือ หากสนใจเลือกซื้ออุปกรณ์สามารถขอใบเสนอราคาได้ที่อีเมล Sales@thaieasyelec.com หรือสั่งซื้อทางหน้าเว็บไซต์ที่ https://www.thaieasyelec.com/ 

>>> กลับสู่ ตอนที่ 1 สร้างเว็ปไซต์ IoT ด้วย WebThings Gateway  <<<

ขอขอบคุณข้อมูลอ้างอิงจาก

2 thoughts on “บทความ WebThings Gateway ตอนที่ 5 รับข้อมูลจาก WebThings Gateway มาควบคุมการทำงานบนบอร์ด ESPino32

  1. Pingback: บทความ WebThings Gateway ตอนที่ 4 ส่งข้อมูลจากบอร์ด ESPino32 ไปยัง WebThings – ThaiEasyElec's Blog

  2. Pingback: บทความ WebThings Gateway ตอนที่ 2 ใช้งาน Add-ons ต่างๆ บน WebThings Gateway – ThaiEasyElec's Blog

Comments are closed.