IT General
น้องๆ เคยสงสัยไหมว่าไอ้เจ้า ESP32 เนี่ย มันเอาไปทำอะไรได้บ้าง? สมัยผมทำร้านเน็ตฯ แรกๆ เทคโนโลยีมันยังไม่ล้ำขนาดนี้หรอกครับ แต่พอมาถึงยุค IoT เนี่ย ESP32 มันกลายเป็นพระเอกไปเลย เพราะมันเล็ก ราคาถูก แถมยังทำอะไรได้เยอะแยะมากๆ
ESP32 มันคือ microcontroller ที่มี Wi-Fi และ Bluetooth ในตัว ทำให้เราสามารถเชื่อมต่ออุปกรณ์ต่างๆ เข้ากับอินเทอร์เน็ตได้ง่ายๆ ไม่ต้องพึ่งพาอุปกรณ์เสริมอะไรมากมาย สมัยก่อนนะ กว่าจะทำอะไรแบบนี้ได้ ต้องต่อสายระโยงระยาง แถมโปรแกรมก็ยากอีกต่างหาก
ที่มันสำคัญก็เพราะว่ามันเปิดโลกของการทำ IoT projects ให้กับทุกคน ไม่ว่าจะเป็นนักเรียน นักศึกษา หรือแม้แต่คนทั่วไปที่อยากจะลองทำอะไรสนุกๆ เองที่บ้าน ลองคิดดูสิครับ เราสามารถสร้างระบบควบคุมไฟในบ้านผ่านมือถือ หรือเซ็นเซอร์วัดอุณหภูมิที่ส่งข้อมูลขึ้น cloud ได้ง่ายๆ ด้วย ESP32 ตัวเดียว
ลองแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ดูนะครับ อาจจะเจอไอเดียเจ๋งๆ เอาไปต่อยอดได้อีกเยอะเลย
Microcontroller มันก็คือคอมพิวเตอร์ขนาดเล็กจิ๋ว ที่ถูกออกแบบมาให้ทำงานเฉพาะอย่าง เช่น ควบคุมมอเตอร์ อ่านค่าเซ็นเซอร์ หรือแสดงผลบนหน้าจอ สมัยผมเรียนคอมฯ รุ่นแรกๆ Microcontroller มันแพงมากกกก แต่เดี๋ยวนี้ราคาถูกลงเยอะ แถมยังใช้งานง่ายขึ้นด้วย
Wi-Fi ก็คือเทคโนโลยีที่ทำให้เราเชื่อมต่ออินเทอร์เน็ตได้แบบไร้สาย ส่วน Bluetooth ก็คือเทคโนโลยีที่ทำให้เราเชื่อมต่ออุปกรณ์ต่างๆ แบบไร้สายในระยะใกล้ๆ ทั้งสองอย่างนี้สำคัญมากสำหรับ IoT เพราะมันทำให้เราสามารถควบคุมและรับส่งข้อมูลกับอุปกรณ์ต่างๆ ได้แบบไม่ต้องต่อสาย
ส่วนใหญ่แล้วเราจะเขียนโปรแกรมให้ ESP32 ด้วยภาษา C/C++ ผ่าน Arduino IDE ซึ่งเป็นโปรแกรมที่ใช้งานง่าย เหมาะสำหรับมือใหม่ Arduino IDE มันเหมือนโปรแกรม Word ที่เอาไว้พิมพ์โค้ด แล้วก็มีปุ่มให้เรากด "อัพโหลด" โค้ดลงไปใน ESP32 ง่ายๆ เลย
เริ่มต้นใช้งาน ESP32 ไม่ยากอย่างที่คิดครับ ผมจะเล่าให้ฟังแบบ step-by-step เลยนะ
https://dl.espressif.com/dl/package_esp32_index.json จากนั้นไปที่ Tools -> Board -> Boards Manager... แล้วค้นหา "ESP32" แล้วกด installแค่นี้เองครับ! ถ้าทำตามขั้นตอนเหล่านี้ได้ เราก็พร้อมที่จะเริ่มทำ IoT projects สนุกๆ ได้แล้ว
โปรเจกต์แรกที่เราจะลองทำกันก็คือ "Blinking LED" หรือไฟกระพริบ เป็นโปรเจกต์ที่ง่ายที่สุด แต่ก็ช่วยให้เราเข้าใจหลักการทำงานพื้นฐานของการเขียนโปรแกรมให้ ESP32 ได้
// กำหนดขาที่ LED ต่ออยู่
const int ledPin = 2;
void setup() {
// กำหนดให้ขา ledPin เป็น output
pinMode(ledPin, OUTPUT);
}
void loop() {
// เปิด LED
digitalWrite(ledPin, HIGH);
// รอ 1 วินาที
delay(1000);
// ปิด LED
digitalWrite(ledPin, LOW);
// รอ 1 วินาที
delay(1000);
}
โค้ดนี้จะทำให้ LED ที่ต่ออยู่กับขา 2 ของ ESP32 กระพริบทุกๆ 1 วินาที ลองเอาไปปรับแก้เล่นดูนะครับ
โปรเจกต์ต่อมา เราจะลองอ่านค่าอุณหภูมิและความชื้นจากเซ็นเซอร์ DHT11 ซึ่งเป็นเซ็นเซอร์ที่นิยมใช้กันมากใน IoT projects
ก่อนอื่นเราต้องติดตั้ง library DHT sensor library ก่อน โดยไปที่ Sketch -> Include Library -> Manage Libraries... แล้วค้นหา "DHT sensor library" แล้วกด install
#include "DHT.h"
// กำหนดขาที่ DHT11 ต่ออยู่
#define DHTPIN 4
// กำหนดชนิดของ DHT ที่ใช้
#define DHTTYPE DHT11
// สร้าง object ของ DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
// อ่านค่าความชื้น
float humidity = dht.readHumidity();
// อ่านค่าอุณหภูมิ (เซลเซียส)
float temperature = dht.readTemperature();
// ตรวจสอบว่าอ่านค่าได้หรือไม่
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// แสดงผลค่าที่อ่านได้
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
// รอ 2 วินาที
delay(2000);
}
โค้ดนี้จะอ่านค่าอุณหภูมิและความชื้นจากเซ็นเซอร์ DHT11 ทุกๆ 2 วินาที แล้วแสดงผลผ่าน Serial Monitor ลองเอาไปต่อยอดทำเป็นระบบแจ้งเตือนอุณหภูมิและความชื้นได้เลยนะครับ
ถ้าอยากได้ไอเดียโปรเจกต์ IoT เจ๋งๆ ลองเข้าไปดูที่ SiamCafe Blog นะครับ มีบทความดีๆ เพียบเลย
ถึงแม้ว่า ESP32 จะเป็นตัวเลือกที่ดีสำหรับ IoT projects แต่ก็ยังมีทางเลือกอื่นๆ อีกมากมายที่น่าสนใจ ลองมาดูกันว่าแต่ละตัวมีข้อดีข้อเสียยังไง
| อุปกรณ์ | ข้อดี | ข้อเสีย |
|---|---|---|
| ESP32 | ราคาถูก, มี Wi-Fi และ Bluetooth ในตัว, ใช้งานง่าย | หน่วยความจำน้อยกว่าบางตัว, กินไฟมากกว่าบางตัว |
| Raspberry Pi | ประสิทธิภาพสูง, มีระบบปฏิบัติการ Linux, ทำอะไรได้หลากหลาย | ราคาสูงกว่า, กินไฟมากกว่า, ต้องใช้ SD card |
| Arduino Uno | ใช้งานง่ายมาก, มี library ให้เลือกใช้เยอะ, ราคาถูก | ไม่มี Wi-Fi และ Bluetooth ในตัว, ประสิทธิภาพต่ำกว่า |
| NodeMCU | ราคาถูก, มี Wi-Fi ในตัว, ใช้งานง่าย | ประสิทธิภาพต่ำกว่า ESP32, Bluetooth ไม่ค่อยเสถียร |
จะเห็นได้ว่าแต่ละตัวก็มีข้อดีข้อเสียแตกต่างกันไป การเลือกใช้อุปกรณ์ก็ขึ้นอยู่กับความต้องการและงบประมาณของแต่ละโปรเจกต์
สมัยผมทำร้านเน็ตคาเฟ่ SiamCafe เมื่อ 20 กว่าปีที่แล้ว เรื่องความเสถียรของระบบนี่สำคัญสุดๆ ลูกค้าเล่นเกมอยู่แล้วหลุดเนี่ย เค้าด่าเอาได้เลย IoT ก็เหมือนกัน ต้องทำให้มันเสถียรที่สุดเท่าที่จะทำได้
เรื่องความปลอดภัยก็สำคัญนะ อย่าคิดว่าอุปกรณ์ IoT เล็กๆ จะไม่มีใครสนใจแฮก สมัยนี้แฮกเกอร์มันเก่งขึ้นเยอะ ต้องป้องกันไว้ก่อนดีกว่าแก้
การอัพเดทเฟิร์มแวร์แบบ OTA นี่โคตรสำคัญเลย สมัยก่อนต้องวิ่งไปอัพเดทคอมพ์ลูกค้าทีละเครื่อง โคตรเหนื่อย! IoT ก็เหมือนกัน ถ้ามีบั๊ก หรือช่องโหว่ความปลอดภัย จะได้แก้ได้ง่ายๆ โดยไม่ต้องไปแตะอุปกรณ์เลย
// Arduino IDE Code Snippet (ตัวอย่าง)
#include
#include
void setup() {
Serial.begin(115200);
WiFi.begin("YOUR_WIFI_SSID", "YOUR_WIFI_PASSWORD");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle();
}
โค้ดนี้เป็นตัวอย่างง่ายๆ ในการตั้งค่า OTA บน ESP32 พอรันแล้ว เราสามารถอัพโหลดโค้ดใหม่ผ่าน WiFi ได้เลย สะดวกมากๆ
พวกอุปกรณ์ IoT ที่ใช้แบตเตอรี่เนี่ย การจัดการพลังงานสำคัญสุดๆ Deep Sleep Mode ช่วยให้ ESP32 กินไฟน้อยมากๆ ตอนที่ไม่ได้ทำงานอะไร ทำให้แบตอยู่ได้นานขึ้นเยอะ
// Arduino IDE Code Snippet (ตัวอย่าง)
#include "esp_sleep.h"
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 5 /* Time ESP32 will go to sleep (in seconds) */
void setup() {
Serial.begin(115200);
Serial.println("Going to sleep now");
esp_sleep_enableTimerWakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
}
void loop() {
// This will not be executed
}
โค้ดนี้จะทำให้ ESP32 เข้าสู่ Deep Sleep เป็นเวลา 5 วินาที แล้วค่อยตื่นขึ้นมาทำงานใหม่ ลองเอาไปปรับใช้ดู
MQTT เป็นโปรโตคอลที่นิยมใช้กันใน IoT เพราะมันเบา กินทรัพยากรน้อย และทำงานได้ดีบนเครือข่ายที่ไม่เสถียร เหมาะกับพวกเซ็นเซอร์ หรืออุปกรณ์ที่ต้องส่งข้อมูลบ่อยๆ
ลองใช้ Broker อย่าง Mosquitto ดูครับ ฟรี และใช้งานง่าย
เรื่องความปลอดภัยนี่มองข้ามไม่ได้เลยนะ สมัยนี้ Hackers เก่งขึ้นทุกวัน อย่าคิดว่าข้อมูลเราไม่สำคัญ ต้องเข้ารหัสข้อมูล (Encryption) และตรวจสอบสิทธิ์การเข้าถึง (Authentication) อย่างสม่ำเสมอ
ESP32 กินไฟไม่เยอะเท่าพวก Microcontroller ตัวใหญ่ๆ แต่ก็ไม่ได้ประหยัดไฟขนาดนั้น ถ้าต้องการประหยัดไฟมากๆ ต้องใช้ Deep Sleep Mode ช่วย
มันมีหลาย Platform ให้เลือกนะ แล้วแต่ความชอบและความถนัดส่วนตัว ผมแนะนำให้ลองดู ThingSpeak, Adafruit IO, หรือถ้าถนัด AWS ก็ใช้ AWS IoT Core ได้
อันนี้ก็แล้วแต่คนชอบอีกแหละ Arduino IDE ใช้ง่าย เหมาะสำหรับมือใหม่ แต่ PlatformIO มี Feature เยอะกว่า และจัดการ Library ได้ดีกว่า ลองใช้ทั้งคู่แล้วค่อยเลือกก็ได้
มีครับ! ลองดู ESP-IDF (Espressif IoT Development Framework) ดู มันเป็น Framework ที่ Espressif (บริษัทที่ทำ ESP32) ทำขึ้นมาเอง จะ Advance กว่า Arduino IDE เยอะ แต่ก็เรียนรู้ยากกว่า
IoT มันเป็นโลกที่กว้างใหญ่ และเปลี่ยนแปลงเร็วมาก ต้องเรียนรู้ตลอดเวลา อย่ากลัวที่จะลองผิดลองถูก และอย่าท้อแท้ถ้าเจอปัญหา iCafeForex ใครสนใจเรื่อง Forex ก็ลองเข้าไปดูได้นะ
หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนที่สนใจเรื่อง IoT นะครับ อย่าลืมแวะไปอ่านบทความอื่นๆ ใน SiamCafe Blog ด้วยนะ!
| หัวข้อ | รายละเอียด |
|---|---|
| OTA Update | อัพเดท Firmware ผ่าน WiFi สะดวก รวดเร็ว |
| Deep Sleep Mode | ประหยัดพลังงาน ยืดอายุแบตเตอรี่ |
| MQTT Protocol | โปรโตคอลสื่อสารน้ำหนักเบา เหมาะสำหรับ IoT |
| Security | ปกป้องข้อมูลจากการถูก Hack |