กลับไปบทความทั้งหมด
เริ่มต้น ESP32: ส่งอุณหภูมิเข้า LINE เองใน 1 ชั่วโมง (งบหลักร้อย)
IoT

เริ่มต้น ESP32: ส่งอุณหภูมิเข้า LINE เองใน 1 ชั่วโมง (งบหลักร้อย)

SPV Tech Solutions9 มิถุนายน 25694 min
#esp32#iot#line-messaging-api#ds18b20#diy#sensor

ทำไมผู้ประกอบการเดี่ยวควรลองทำ IoT เอง

ถ้าคุณเป็นผู้ประกอบการเดี่ยวที่ดูแลทุกอย่างด้วยตัวเอง การรู้ว่า "ตู้แช่ร้านเริ่มไม่เย็น" หรือ "ห้องเซิร์ฟเวอร์ร้อนผิดปกติ" ก่อนที่ของจะเสียหาย คือเงินที่ประหยัดได้จริง ข่าวดีคือคุณไม่ต้องจ้างใครและไม่ต้องลงทุนหลักหมื่น ด้วยบอร์ด ESP32 ราคาหลักร้อย คุณต่อเซ็นเซอร์วัดอุณหภูมิแล้วให้มันส่งแจ้งเตือนเข้า LINE ของคุณเองได้ภายในเย็นเดียว บทความนี้พาทำจริงตั้งแต่ต่อสายจนข้อความเด้งเข้ามือถือ และตั้งใจให้ "ทำเองได้" จริง ๆ ไม่ต้องมีพื้นฐานอิเล็กทรอนิกส์

อัปเดตสำคัญ: หลายบทความเก่าสอนส่งเข้า LINE ผ่าน "LINE Notify" — วิธีนั้น ใช้ไม่ได้แล้ว LINE Notify ปิดบริการถาวรตั้งแต่ 31 มีนาคม 2025 (endpoint notify-api.line.me ตายหมด) บทความนี้ใช้ LINE Messaging API ซึ่งเป็นทางที่ LINE แนะนำเองให้มาแทน และยังฟรีสำหรับการใช้งานส่วนตัว

อุปกรณ์และราคา (อยู่ในหลักร้อย)

  • ESP32 DevKit V1 (DOIT/NodeMCU 30 ขา) ~ 230–290 บาท
  • เซ็นเซอร์ DS18B20 ตัวเปล่า ~ 40 บาท หรือรุ่นโพรบกันน้ำสาย 1 เมตร ~ 60–80 บาท
  • Breadboard 830 จุด (MB-102) ~ 50–70 บาท
  • สาย jumper ชุด 40 เส้น ~ 30–40 บาท
  • ตัวต้านทาน 4.7kΩ ~ 1–5 บาท (มักแถมในชุด resistor)

รวมทั้งชุดสำหรับมือใหม่ประมาณ 350–480 บาท — งบหลักร้อยจริง

ต่อวงจร ESP32 + DS18B20

ต่อแบบ external power (แนะนำสำหรับมือใหม่) 4 จุดเท่านั้น:

  1. VCC (สายแดง) ของ DS18B20 → ขา 3V3 ของ ESP32 (ห้ามใช้ 5V/VIN เด็ดขาด เพราะ GPIO ของ ESP32 ทนแค่ 3.3V ถ้าจ่าย 5V สาย DATA จะดึงขึ้น 5V ทำบอร์ดพังได้)
  2. GND (สายดำ) → ขา GND
  3. DATA (สายเหลือง/ขาว) → ขา GPIO4
  4. ตัวต้านทาน 4.7kΩ คร่อมระหว่าง DATA กับ VCC (3.3V) — คือเชื่อม DATA ↔ 3V3 ผ่าน R 4.7k บน breadboard

จุดพลาดอันดับ 1: ลืม pull-up 4.7kΩ ถ้าขาดตัวนี้ บัสจะลอย อ่านค่าได้ -127 หรือ 85.0 ตลอด (R ภายในของ ESP32 ไม่พอ ต้องใส่ตัวจริง) และอย่าใช้ GPIO0/2/12/15 (strapping pin บูตไม่ขึ้น) หรือ GPIO34–39 (input-only เขียนสัญญาณไม่ได้) — ใช้ GPIO4 ปลอดภัยสุด

เตรียม Arduino IDE และทดสอบอ่านค่า

ติดตั้ง board package ก่อน: ใน Preferences ใส่ URL https://espressif.github.io/arduino-esp32/package_esp32_index.json แล้วลง "esp32 by Espressif Systems" ใน Boards Manager เลือกบอร์ด ESP32 Dev Module จากนั้นลง 2 ไลบรารีผ่าน Library Manager: OneWire (Paul Stoffregen) และ DallasTemperature (Miles Burton)

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 4   // GPIO4 = ขา DATA

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();              // สั่งทุกตัวบนบัสวัดอุณหภูมิ
  float tempC = sensors.getTempCByIndex(0);   // อ่านตัวแรก
  if (tempC == DEVICE_DISCONNECTED_C) {       // = -127 แปลว่าต่อ/pull-up ไม่ดี
    Serial.println("Error: sensor ไม่ตอบ ตรวจสายและ pull-up 4.7k");
  } else {
    Serial.print("Temp: "); Serial.print(tempC); Serial.println(" C");
  }
  delay(1000);
}

เปิด Serial Monitor ตั้ง baud 115200 (ถ้าตั้ง 9600 จะเห็นตัวอักษรขยะ) ถ้าได้ค่าอุณหภูมิจริงแปลว่าวงจรพร้อมแล้ว ค่า -127 = บัสมีปัญหา, ค่า 85.0 = เซ็นเซอร์ยังไม่ได้ convert (มักเพราะ pull-up หรือไฟไม่นิ่ง)

ตั้งค่า LINE Messaging API (แทน LINE Notify)

เพราะ LINE Notify ปิดไปแล้ว เราจะสร้างช่องทางส่งเองด้วย Messaging API ทำครั้งเดียว:

  1. ไป LINE Official Account Manager ล็อกอินด้วย LINE ส่วนตัว สร้าง Official Account (OA) ใหม่ (ฟรี)
  2. ไป LINE Developers Console ล็อกอิน LINE เดียวกัน สร้าง Provider (ใส่ชื่อตัวเอง/บริษัท)
  3. สร้าง channel แบบ Messaging API แล้วผูกกับ OA ที่เพิ่งสร้าง
  4. ในแท็บ Messaging API เลื่อนหา Channel access token (long-lived) กด Issue แล้วก๊อปเก็บไว้ — ค่านี้ใช้ใน Authorization: Bearer
  5. เอามือถือ เพิ่มเพื่อน OA ของตัวเอง (สแกน QR หรือค้นจาก Basic ID @xxxx) — สำคัญมาก ถ้าไม่ add จะ push เข้าไม่ได้
  6. หา userId ของตัวเอง (ขึ้นต้นด้วย U... 33 ตัว ไม่ใช่ LINE ID @ ที่เห็นในแอป): วิธีเร็วสุดคือตั้ง Webhook URL ของ channel ไปที่ webhook.site (สร้าง URL ฟรี) เปิด Use webhook = ON แล้วทักข้อความหา OA 1 ที จะเห็น JSON เข้ามา ดูที่ source.userId ก๊อปเก็บไว้

โค้ดส่งเข้า LINE ด้วย ESP32

ESP32 ยิง HTTPS ตรงเข้า api.line.me ได้เลย ไม่ต้องมี server กลาง ต้องใช้ WiFiClientSecure (HTTP ธรรมดาใช้ไม่ได้ เพราะ LINE เป็น TLS เท่านั้น) endpoint คือ POST https://api.line.me/v2/bot/message/push

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>

const char* WIFI_SSID = "ชื่อWiFi";
const char* WIFI_PASS = "รหัสWiFi";
const char* TOKEN     = "ใส่ Channel Access Token ที่ Issue มา";
const char* USER_ID   = "Uxxxxxxxx...ของคุณเอง";

void pushToLine(float tempC) {
  WiFiClientSecure client;
  client.setInsecure();              // ข้ามตรวจ cert (ง่ายสุดสำหรับงานอดิเรก)
  HTTPClient https;
  https.begin(client, "https://api.line.me/v2/bot/message/push");
  https.addHeader("Content-Type", "application/json");
  https.addHeader("Authorization", String("Bearer ") + TOKEN);

  String body = String("{\"to\":\"") + USER_ID +
    "\",\"messages\":[{\"type\":\"text\",\"text\":\"อุณหภูมิ: " +
    String(tempC, 1) + " C\"}]}";

  int code = https.POST(body);       // สำเร็จ = HTTP 200, body {}
  Serial.printf("LINE push HTTP %d\n", code);
  https.end();
}

ใน setup() เพิ่ม WiFi.begin(WIFI_SSID, WIFI_PASS); แล้วรอจน WiFi.status() == WL_CONNECTED จากนั้นเรียก pushToLine(tempC) ตอนต้องการแจ้งเตือน ภาษาไทยใน text ส่งได้ (UTF-8) แต่ถ้าข้อความซับซ้อน แนะนำใช้ ArduinoJson ประกอบ body จะปลอดภัยกว่าต่อการ escape เอง หรือใช้ไลบรารีสำเร็จรูปอย่าง ESP32_LINE_Messaging_API (tomorrow56) ที่จัดการ JSON/TLS ให้

ข้อควรรู้ (สำคัญต่อการใช้จริง):

  • แผนฟรี Communication Plan push ได้ 200 ข้อความ/เดือน ส่วนเกินจะถูกบล็อก — อย่าให้ ESP32 push ทุกวินาที ให้ push เฉพาะ event สำคัญ เช่น อุณหภูมิเกินค่าที่ตั้ง
  • Channel Access Token คือความลับ ห้าม commit ลง git หรือแชร์โค้ดสาธารณะพร้อม token
  • client.setInsecure() ทำให้ไม่ verify เซิร์ฟเวอร์ (เสี่ยง MITM) งานจริงจังควรฝัง root CA ของ LINE ด้วย setCACert แทน

ทดสอบและต่อยอด

ทดสอบ: อัปโหลดโค้ด เปิด Serial Monitor ถ้าได้ LINE push HTTP 200 และข้อความเด้งเข้า LINE = สำเร็จ ถ้าไม่เข้า เช็คว่า add เพื่อน OA แล้วหรือยัง และ userId ขึ้นต้นด้วย U จริง

ต่อยอดสำหรับธุรกิจ: ตั้งเงื่อนไข push เฉพาะตอนอุณหภูมิเกินเกณฑ์ (เช่น ตู้แช่ > 8°C), ใส่ deep sleep ให้ประหยัดไฟเมื่อใช้แบตเตอรี่, หรือเพิ่มเซ็นเซอร์ความชื้น/ประตูเปิด-ปิด คุณเพิ่งสร้างระบบเฝ้าระวังของธุรกิจตัวเองด้วยงบไม่ถึง 500 บาท — ทำเองได้จริง และนี่คือก้าวแรกของการเป็นเจ้าของที่ "รู้หน้างานตลอดเวลา"

ถ้าบทความนี้มีประโยชน์ แชร์ให้เพื่อนๆ ด้วยนะ

ยังไม่แน่ใจว่าธุรกิจคุณควรเริ่มใช้ AI ตรงไหน?

เช็กฟรีใน 2 นาที → รู้คะแนนโอกาสใช้ AI + 3 ขั้นแรกที่ควรทำ ไม่ต้องสมัคร

เช็กสุขภาพธุรกิจฟรี