การแจ้งเตือน ทาง Telegram

เปลี่ยนจากการใช้ LINE Notify ในการแจ้งเตือนสำหรับ Arduino ไปใช้งานแพลตฟอร์มอื่น นี่คือแอปพลิเคชันหรือบริการที่เหมาะสมขึ้นอยู่กับความต้องการของคุณ: (ขอบคุณข้อมูลจาก Chat GPT)


 

1. Telegram

ข้อดี:

  • ใช้งานฟรี ไม่มีข้อจำกัดจำนวนข้อความต่อวัน
  • รองรับการส่งข้อความ, รูปภาพ, และข้อมูล JSON
  • มี API ที่ใช้ง่าย
  • ใช้งานผ่าน Bot ที่คุณสร้างเองได้

การตั้งค่า:

  1. สร้าง Telegram Bot ผ่าน @BotFather
  2. รับ API Token
  3. ใช้ Arduino Library เช่น UniversalTelegramBot
  4. ตัวอย่างโค้ดสำหรับส่งข้อความ:
    cpp
    #include <WiFi.h> #include <UniversalTelegramBot.h> const char* ssid = "your-SSID"; const char* password = "your-PASSWORD"; const char* telegramToken = "your-TELEGRAM_BOT_TOKEN"; const char* chatID = "your-CHAT_ID"; WiFiClientSecure client; UniversalTelegramBot bot(telegramToken, client); void setup() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); } bot.sendMessage(chatID, "Hello from Arduino!", ""); } void loop() { // Add code to check conditions and send alerts }

2. Pushbullet

ข้อดี:

  • รองรับทั้ง Android และ iOS
  • ใช้งานง่ายและรวดเร็ว
  • สามารถส่งข้อความหรือข้อมูลไปยังอุปกรณ์ต่าง ๆ ได้พร้อมกัน

การตั้งค่า:

  1. สมัครและรับ API Key ที่ Pushbullet
  2. ใช้ Arduino Library เช่น Pushbullet-for-Arduino
  3. ส่งข้อความแจ้งเตือนด้วยโค้ดง่าย ๆ

3. Pushover

ข้อดี:

  • รองรับทั้ง Android, iOS, และเดสก์ท็อป
  • รองรับการแจ้งเตือนหลายอุปกรณ์
  • ใช้งาน API ง่ายและเสถียร

การตั้งค่า:

  1. สมัครสมาชิกและรับ API Key ที่ Pushover
  2. ใช้ REST API สำหรับส่งข้อความจาก Arduino
  3. ตัวอย่างโค้ดสำหรับ Pushover:
    cpp
    #include <WiFi.h> #include <HTTPClient.h> const char* ssid = "your-SSID"; const char* password = "your-PASSWORD"; const char* pushoverToken = "your-APP-TOKEN"; const char* pushoverUser = "your-USER-KEY"; void setup() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); } HTTPClient http; http.begin("https://api.pushover.net/1/messages.json"); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); String message = "token=" + String(pushoverToken) + "&user=" + String(pushoverUser) + "&message=Hello from Arduino!"; http.POST(message); http.end(); } void loop() { // Add code to monitor and notify }

4. Blynk

ข้อดี:

  • ออกแบบมาเพื่อ IoT โดยเฉพาะ
  • มีระบบแจ้งเตือนผ่านแอป
  • รองรับ Dashboard สำหรับแสดงข้อมูลแบบเรียลไทม์
  • มี Library รองรับการใช้งานบน Arduino

การตั้งค่า:

  1. สมัครสมาชิกที่ Blynk
  2. ดาวน์โหลดแอป Blynk บนมือถือ
  3. ใช้ Library Blynk ใน Arduino IDE
  4. ตัวอย่างโค้ด:
    cpp
    #include <WiFi.h> #include <BlynkSimpleEsp32.h> const char* ssid = "your-SSID"; const char* password = "your-PASSWORD"; const char* authToken = "your-BLYNK_AUTH_TOKEN"; void setup() { Blynk.begin(authToken, ssid, password); } void loop() { Blynk.run(); Blynk.notify("Alert: Your Arduino is online!"); }

5. IFTTT

ข้อดี:

  • ใช้งานร่วมกับแอปและบริการอื่น ๆ ได้
  • ใช้งานง่ายสำหรับผู้เริ่มต้น
  • รองรับการแจ้งเตือนผ่านมือถือ, อีเมล หรืออื่น ๆ

การตั้งค่า:

  1. สร้าง Webhook Applet ใน IFTTT
  2. ใช้ HTTP Request จาก Arduino ส่งข้อมูลไปยัง IFTTT Webhook
  3. ตัวอย่าง URL สำหรับส่งข้อมูล:
    ruby
    https://maker.ifttt.com/trigger/{event_name}/with/key/{your_webhook_key}

ตัวเลือกที่แนะนำ

  • Telegram: หากต้องการระบบที่ง่ายและไม่มีข้อจำกัด
  • Blynk: หากต้องการแสดงข้อมูล IoT แบบ Dashboard
  • Pushover หรือ Pushbullet: หากต้องการการแจ้งเตือนแบบเรียบง่าย

 

Telegram Token สำหรับเขียนโค้ดใน Arduino สามารถหาได้จากการสร้าง Telegram Bot ผ่าน @BotFather ใน Telegram โดยทำตามขั้นตอนดังนี้:


ขั้นตอนการสร้าง Telegram Bot และรับ Token:

  1. เปิดแอป Telegram บนมือถือหรือเดสก์ท็อป
  2. ค้นหา @BotFather ในช่องค้นหา
  3. เริ่มต้นสนทนากับ @BotFather โดยพิมพ์คำว่า:
    bash
    /start
    @BotFather จะตอบกลับมาพร้อมคำแนะนำการใช้งาน
  4. สร้าง Bot ใหม่โดยพิมพ์:
    bash
    /newbot
  5. ตั้งชื่อให้กับ Bot ของคุณ:
    • ตัวอย่าง: MyArduinoBot
  6. ตั้งชื่อ username สำหรับ Bot (ต้องลงท้ายด้วยคำว่า bot เช่น MyArduino_Bot):
    • หากชื่อที่ตั้งซ้ำกับ Bot อื่น ๆ BotFather จะแจ้งให้คุณตั้งชื่อใหม่
  7. เมื่อสร้าง Bot สำเร็จ @BotFather จะส่ง API Token ให้คุณ:
    ruby
    Use this token to access the HTTP API: 123456789:ABCDEF1234ghIkl-zyx57W2v1u123ew11

ใช้งาน Token กับ Arduino

  • คัดลอก API Token ที่ได้รับมา
  • นำไปใส่ในโค้ด Arduino เพื่อส่งข้อความ

ตัวอย่างโค้ด:

cpp
#include <WiFi.h> #include <UniversalTelegramBot.h> const char* ssid = "your-SSID"; const char* password = "your-PASSWORD"; const char* telegramToken = "123456789:ABCDEF1234ghIkl-zyx57W2v1u123ew11"; // ใส่ API Token ที่ได้จาก BotFather const char* chatID = "YOUR_CHAT_ID"; // ใส่ Chat ID ของผู้ใช้งาน (ดูวิธีด้านล่าง) WiFiClientSecure client; UniversalTelegramBot bot(telegramToken, client); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); bot.sendMessage(chatID, "Hello from Arduino!", ""); } void loop() { // สามารถเพิ่มโค้ดตรวจสอบสถานะหรือเงื่อนไขเพื่อส่งข้อความ }

วิธีหาค่า Chat ID ของผู้ใช้

  1. พิมพ์ข้อความหาบอทที่คุณสร้างไว้
  2. ใช้ API ของ Telegram เรียกดูข้อมูล Chat ID:
    • เปิดเบราว์เซอร์และใส่ URL:
      bash
      https://api.telegram.org/bot<Your_Token>/getUpdates
      (แทน <Your_Token> ด้วย Telegram Token ที่คุณได้จาก BotFather)
    • ตัวอย่างผลลัพธ์:
      json
      { "ok": true, "result": [ { "update_id": 12345678, "message": { "message_id": 1, "from": { "id": 987654321, "is_bot": false, "first_name": "YourName" }, "chat": { "id": 987654321, "first_name": "YourName", "type": "private" }, "date": 1678920000, "text": "Hello" } } ] }
    • ค่า "id": 987654321 คือ Chat ID ของคุณ

เมื่อได้ Telegram Token และ Chat ID มาแล้ว คุณสามารถใช้ในโค้ด Arduino เพื่อส่งข้อความแจ้งเตือนได้ทันที!

2/2
 
4o
 
คุณพูดว่า:
ตั้งชื่อให้กับ Bot ของ app telegramดูจากเมนูไหน
ChatGPT พูดว่า:
ChatGPT

การตั้งชื่อให้กับ Bot ใน Telegram ไม่ได้ทำผ่านเมนูในแอป แต่ทำผ่าน @BotFather ซึ่งเป็นบอทที่ Telegram สร้างขึ้นสำหรับจัดการและตั้งค่าบอทต่าง ๆ โดยเฉพาะ ทำตามขั้นตอนนี้:


วิธีตั้งชื่อ Bot ผ่าน @BotFather:

  1. เปิดแอป Telegram บนมือถือหรือเดสก์ท็อป
  2. ค้นหา @BotFather ในช่องค้นหา
  3. กด Start หรือพิมพ์ /start เพื่อเริ่มการใช้งาน
  4. สร้าง Bot ใหม่ด้วยคำสั่ง:
    bash
    /newbot
  5. @BotFather จะถามให้คุณตั้ง ชื่อเต็ม (Name) สำหรับ Bot:
    • ตัวอย่าง: My Arduino Monitor Bot
  6. จากนั้นจะถามให้ตั้ง ชื่อผู้ใช้ (Username) สำหรับ Bot:
    • ชื่อนี้ต้อง ลงท้ายด้วยคำว่า bot เช่น MyArduino_Bot หรือ ArduinoMonitor_bot
    • ถ้าชื่อซ้ำกับคนอื่น คุณต้องตั้งชื่อใหม่จนกว่าจะสำเร็จ

ตัวอย่างการสนทนากับ @BotFather

vbnet
You: /newbot BotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot. You: My Arduino Monitor Bot BotFather: Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot. You: MyArduino_Bot BotFather: Done! Congratulations on your new bot. You will find it at t.me/MyArduino_Bot. Use this token to access the HTTP API: 123456789:ABCDEF1234ghIkl-zyx57W2v1u123ew11

เมื่อการสร้างเสร็จสิ้น:

  • คุณจะได้รับ Telegram Token สำหรับใช้ในโค้ด Arduino
  • สามารถเปิดใช้งาน Bot ได้โดยเข้าไปที่ลิงก์ที่ @BotFather ให้มา เช่น https://t.me/MyArduino_Bot

หากต้องการแก้ไขชื่อ Bot หลังจากสร้างเสร็จ:

  1. ใช้คำสั่ง:
    bash
    /setname
    แล้วเลือก Bot ที่ต้องการเปลี่ยนชื่อ
  2. ตั้งชื่อใหม่ตามต้องการ

การตั้งค่า Nodred

การตั้งค่า Node red (ขอบคุณข้อมูลจาก Chat GPT)

 

การสร้าง Node-RED Monitor Dashboard สำหรับใช้งานเอง มีขั้นตอนหลักดังนี้:

1. ติดตั้ง Node-RED

  • ติดตั้ง Node-RED บนคอมพิวเตอร์หรือเซิร์ฟเวอร์:
    bash
    npm install -g --unsafe-perm node-red
  • รัน Node-RED:
    bash
    node-red
  • เข้าถึง Node-RED ผ่านเบราว์เซอร์ที่ http://localhost:1880

2. ติดตั้ง Node-RED Dashboard

Node-RED Dashboard ใช้สำหรับสร้าง UI:

  1. เปิด Node-RED และไปที่เมนู "Manage Palette""Install"
  2. ค้นหา node-red-dashboard แล้วกด Install
  3. Dashboard Nodes จะปรากฏใน Node-RED Palette (เช่น Chart, Gauge, Switch เป็นต้น)

3. ออกแบบ Flow สำหรับ Monitor

สร้างฟังก์ชันพื้นฐานเพื่อดึงข้อมูลและแสดงผลบน Dashboard:

  • ตัวอย่าง: Monitor Sensor
    1. เพิ่ม Inject Node (สำหรับเริ่มต้นส่งข้อมูล)
    2. เพิ่ม Function Node (ประมวลผลข้อมูล)
      javascript
      msg.payload = Math.floor(Math.random() * 100); // ค่าจำลอง 0-100 return msg;
    3. เพิ่ม Gauge Node หรือ Chart Node (สำหรับแสดงผล)
    4. เชื่อมต่อ Node ทั้งหมดและ Deploy

4. ปรับแต่ง Dashboard

  1. ไปที่ Dashboard Tab ใน Node-RED
  2. ตั้งค่า Layout ของ Widgets (เช่น ขนาด, ตำแหน่ง)
  3. เข้า Dashboard ผ่าน http://localhost:1880/ui

5. เชื่อมต่อกับอุปกรณ์จริง

  • ใช้ MQTT หรือ HTTP Request Node สำหรับเชื่อมต่อกับเซ็นเซอร์หรืออุปกรณ์ IoT
  • ตัวอย่างการดึงข้อมูล:
    • หากเซ็นเซอร์ส่งข้อมูลผ่าน HTTP:
      • ใช้ HTTP Request Node
      • แสดงข้อมูลใน Gauge Node หรือ Chart Node

6. เพิ่มการแจ้งเตือน (Optional)

  • ใช้ Notification Node หรือ Email Node สำหรับส่งการแจ้งเตือน
  • ตัวอย่าง: ถ้าค่าเกิน 80 ให้แจ้งเตือน:
    javascript
    if (msg.payload > 80) { msg.payload = "Warning: Value exceeded!"; return msg; } return null; // ถ้าไม่เกิน ไม่ส่งข้อความ

7. การใช้งานผ่านมือถือ

  • ใช้ Browser บนมือถือเปิด http://<IP Address>:1880/ui
  • หากต้องการ URL สวยขึ้น ให้ใช้ Proxy เช่น Nginx หรือ Traefik

ตอนที่ 3 วงจรไฟกระพริบ (Stm32)

ตอนที่ 3 : “แสงที่มีชีวิต — การหรี่ไฟ (PWM) และจังหวะแสงด้วย DMA”
ซีรีส์: From Blink to DMX — เส้นทางไฟกระพริบสู่ป้ายไฟ STM32
จากตอนที่ 1: “ไฟกระพริบคือสัญญาณเวลา”
ตอนที่ 2: “ไฟวิ่งคือการควบคุมลำดับ”
ตอนนี้: “ไฟที่หรี่ขึ้นลงได้ คือการควบคุมระดับพลังงาน”
ถ้าเข้าใจตอนนี้ได้ — คุณจะสามารถ “ออกแบบอารมณ์ของแสง” ได้ทุกแบบ ไม่ว่าจะเป็นไฟวิ่ง, fade, หรือไฟระเบิด
🔹 1. บทนำ — “จากจังหวะ...สู่ความนุ่มนวล”
เปิดด้วยภาพไฟค่อย ๆ สว่างขึ้นและค่อย ๆ ดับลง (fade in/out)
ถามผู้เรียนว่า
“ทำไมไฟนี้ดูนุ่มกว่าไฟที่แค่เปิด–ปิด?”
คำตอบ: เพราะเราควบคุม “ปริมาณพลังงานเฉลี่ย” ที่ส่งให้ LED ด้วย PWM
⚙️ 2. หลักการของ PWM — Pulse Width Modulation
PWM = การเปิด–ปิดสัญญาณความเร็วสูง เพื่อสร้างค่าเฉลี่ยของพลังงาน
🔹 2.1 ภาพกราฟพื้นฐาน
Duty Cycle 25% = หรี่
Duty Cycle 50% = กลาง
Duty Cycle 100% = สว่างเต็ม
ความถี่ของ PWM จะสูงจนตาเรามองไม่เห็นการกระพริบ (โดยทั่วไป > 1kHz)
🔹 2.2 PWM ไม่ได้เปลี่ยนแรงดัน แต่เปลี่ยน “เวลาที่เปิด”
MCU ไม่สามารถ “ปรับแรงดันได้โดยตรง” แต่ปรับ “ช่วงเวลาที่เปิดขา” แทน
ภาพอธิบาย:
MCU → Timer → PWM Generator → MOSFET → LED
🔹 3. PWM ใน STM32 — แสงที่ MCU ขับเองได้
STM32 มี Timer ที่สร้างสัญญาณ PWM ได้โดยไม่ต้องใช้ CPU
🔹 3.1 โครงสร้างของ Timer PWM
Timer Count → Compare → Output toggle
Duty cycle = (CCR / ARR) × 100%
ภาพแสดงโครงสร้าง TIMx_CHx
PWM คือผลของการ “จับจังหวะ” ระหว่าง Counter และ Compare
🔹 3.2 การเชื่อมต่อ
STM32 → ขา TIMx_CHx → LED / Driver
ใช้ hardware timer เพื่อสร้างสัญญาณไฟฟ้า
ปรับ CCRx เพื่อควบคุมความสว่าง
🔹 4. จาก PWM → แสงเคลื่อนไหว (Fade / Wave)
เมื่อเราเปลี่ยน Duty Cycle ตามเวลา — เราได้แสงที่เคลื่อนไหว
🔹 4.1 แนวคิด Fade
CCR เพิ่มจาก 0 → MAX → 0 (แบบ sine หรือ linear)
ใช้ Timer interrupt หรือ DMA เพื่อปรับค่าอัตโนมัติ
🔹 4.2 การสร้างรูปคลื่นของแสง
รูปคลื่น ความรู้สึก
Sine wave นุ่มนวล มีชีวิต
Triangle เป็นจังหวะ
Square ดุดัน เร็วแรง
Random อิสระ
ภาพเปรียบเทียบ waveform → light pattern
🔹 5. การใช้ DMA — ทำให้แสง “เคลื่อนไหวเอง”
DMA = Direct Memory Access = “ระบบส่งค่าความสว่างอัตโนมัติไปยัง Timer โดยไม่ใช้ CPU”
🔹 5.1 หลักการ
เตรียม array ของค่า PWM (duty cycle) เช่น [0, 10, 20, 30, …]
DMA จะส่งค่าเหล่านี้ไปยัง CCRx ทุกครั้งที่ Timer ถึงจังหวะ
แสงจึงเปลี่ยนความสว่างอัตโนมัติ
🔹 5.2 ผลลัพธ์
Fade ลื่นไหล
CPU ว่างไปทำงานอื่น (เช่น สื่อสาร หรือ DMX)
สามารถสร้าง “pattern ของแสงแบบ wave” ได้
ภาพแสดง flow:
Memory → DMA → Timer Compare → PWM Output
🔹 6. การผสมผสาน PWM หลายช่อง
ระบบไฟจริงมีหลายสี หลายช่อง (RGB, RGBW)
🔹 6.1 RGB PWM Concept
R, G, B แต่ละช่องมี PWM แยก
การรวมค่า duty cycle = การผสมสี
R=255, G=0, B=0 → สีแดง
R=255, G=255, B=0 → เหลือง
R=128, G=0, B=255 → ม่วง
ภาพ: Cube RGB ที่เปลี่ยนสีแบบ smooth
🔹 6.2 การซิงค์หลายช่องด้วย DMA
Timer หลัก sync PWM ทุก channel
DMA ควบคุม duty cycle ของแต่ละสีพร้อมกัน
ทำให้เกิด “animation ของสี” ที่นุ่มนวล
🔹 7. จากแสง 1 ดวง สู่ไฟ RGB หลายร้อยดวง
นี่คือพื้นฐานของการสร้างไฟ DMX fixture
ไฟ RGB 1 ดวง = 3 PWM
ไฟ RGB 100 ดวง = 300 PWM (ในระบบจริงใช้ driver IC หรือ WS2812)
ถ้าเข้าใจ PWM + DMA → คุณเข้าใจ “หัวใจของ WS2812 และ DMX” แล้ว
🧩 8. แนวคิดต่อยอด
แนวคิด การประยุกต์
PWM Linear หรี่ไฟธรรมดา
PWM Sine เอฟเฟกต์นุ่มนวล
DMA Waveform Motion Lighting
RGB PWM ระบบสี
DMA Matrix LED Display / DMX Pixel
💡 9. Workshop (แนวคิดไม่ลงโค้ด)
แสงหรี่ขึ้นลงเอง (fade in/out)
ไฟ RGB ค่อย ๆ เปลี่ยนสีเป็นสีรุ้ง
สร้าง waveform ด้วย DMA แล้วปล่อยให้ MCU ทำงานอัตโนมัติ
ใช้เพียง 1 Timer + 1 DMA ก็สามารถสร้างแสงที่ดูเหมือน “มีชีวิต” ได้
“วันนี้เราไม่ได้แค่เปิดไฟ — เราสร้างชีวิตให้แสง”
ตอนหน้า…เราจะนำพลังของ PWM และ DMA ไปขับ LED ดิจิทัล (WS2812) เพื่อให้ไฟแต่ละดวงมีสมองของมันเอง — และนี่คือจุดเริ่มต้นของ “Smart Lighting”
🔖 สรุป Key Learning
หัวข้อ สิ่งที่เข้าใจ
PWM Concept การหรี่แสงด้วยการควบคุมเวลา
STM32 Timer เครื่องมือสร้างจังหวะไฟ
DMA ทำให้แสงเคลื่อนไหวอัตโนมัติ
RGB Mixing พื้นฐานของไฟสี
ต่อยอด DMX, WS2812, LED Panel

ตอนที่ 4 วงจรไฟกระพริบ (Stm32)

ตอนที่ 4 : “ไฟที่คิดเองได้ — ควบคุม WS2812 ด้วย STM32”
ซีรีส์: From Blink to DMX — เส้นทางไฟกระพริบสู่ป้ายไฟ STM32
⚙️ 1. “เมื่อไฟเริ่มมีสมองของตัวเอง”
เปิดด้วยภาพ LED หลายดวงที่เปลี่ยนสีต่างกัน แม้ใช้สายเส้นเดียว
ถามผู้เรียนว่า
“ใครสั่งให้หลอดที่ 1 สีแดง แต่หลอดที่ 2 สีฟ้า ทั้งที่ใช้สายข้อมูลเส้นเดียว?”
คำตอบคือ — แต่ละหลอดมีไมโครคอนโทรลเลอร์เล็ก ๆ อยู่ข้างใน
WS2812 = LED + ไมโครคอนโทรลเลอร์ในตัว
สื่อสารด้วยสัญญาณดิจิทัลที่มีความแม่นยำระดับไมโครวินาที
ทุกดวง “รับข้อมูล” → “ตัดเอาของตัวเอง” → “ส่งต่อส่วนที่เหลือ”
กล่าวอีกอย่างคือ “ทุกหลอดรู้หน้าที่ของตัวเองในสายเดียวกัน”
💡 2. โครงสร้างและหลักการของ WS2812
🔹 2.1 โครงสร้างภายใน
3 LED (R, G, B) + 1 ไมโครคอนโทรลเลอร์ + 1 shift register
ขาสำคัญ:
VDD (5V)
GND
DIN (ข้อมูลเข้า)
DOUT (ส่งข้อมูลต่อ)
🔹 2.2 หลักการรับส่งข้อมูล
ข้อมูลเป็น สัญญาณความถี่สูง (800 kHz)
1 ดวง = 24 บิต (8 บิตต่อสี RGB)
สัญญาณ High/Low ใช้ความกว้างพัลส์แทน “1” และ “0”
T1H ≈ 0.8 µs
T0H ≈ 0.4 µs
หลังส่งครบ ต้องมี reset > 50 µs
ภาพแสดง “Timing Diagram” ของ WS2812
⚙️ 3. ความต่างของ “PWM ปกติ” กับ “Data PWM”
ลักษณะ PWM ปกติ WS2812 Signal
จุดประสงค์ ควบคุมความสว่าง ส่งข้อมูลดิจิทัล
ความถี่ 1–20 kHz 800 kHz
Duty Cycle สัมพันธ์กับแสง สัมพันธ์กับบิตข้อมูล
Output ต่อ LED ตรง ต่อเข้า WS2812
การ Sync ไม่จำเป็น ต้องแม่นยำระดับไมโครวินาที
นี่คือเหตุผลที่ WS2812 ต้องใช้ Timer + DMA ในการส่งสัญญาณ
เพราะ CPU ทำเองไม่ทัน
⚡ 4. วิธีที่ STM32 สื่อสารกับ WS2812
ใช้ “Timer Output Compare + DMA” เพื่อสร้างรูปคลื่นสัญญาณที่แม่นยำ
🔹 4.1 การสร้างสัญญาณด้วย Timer
กำหนดค่า Timer ให้ 1 รอบ = 1.25 µs (800 kHz)
ในแต่ละรอบใช้ค่า compare ต่างกันระหว่าง 0 และ 1
High 0.8 µs = “1”
High 0.4 µs = “0”
🔹 4.2 DMA ทำหน้าที่ส่งข้อมูลอัตโนมัติ
เตรียม buffer ขนาด 24 × N (จำนวนหลอด)
DMA ส่งค่า duty cycle ไปยัง CCRx ทีละบิต
Timer ทำหน้าที่ “ยิงสัญญาณ” ออกไปโดยอัตโนมัติ
ภาพ flow:
Memory (RGB Data)
DMA
Timer PWM
Data Line
WS2812 LEDs
🔹 5. โครงสร้างข้อมูลของไฟแต่ละดวง
ดวงที่ ข้อมูล (24-bit) ค่า (RGB)
1 11111111 00000000 00000000 แดง
2 00000000 11111111 00000000 เขียว
3 00000000 00000000 11111111 น้ำเงิน
เรียงต่อกันเป็น stream
LED ตัวแรกจะอ่านของตัวเอง แล้วส่งต่อส่วนที่เหลือ
🌈 6. การออกแบบ Pattern แบบ “ดิจิทัล”
Pattern ไม่ใช่แค่ “เปิด–ปิด” อีกต่อไป แต่คือ “การสั่งสีและจังหวะ”
🔹 ตัวอย่างแนวคิด
Chase RGB: สีไล่ตามตำแหน่ง
Rainbow Flow: ใช้ค่า hue เปลี่ยนต่อเนื่อง
Breathing Effect: ใช้ sine waveform บวก PWM
DMX Mapping: Channel 1–3 = RGB ของดวงที่ 1
ที่นี่เรากำลังขับ “Pixel LED” เหมือนในป้าย LED Billboard
⚙️ 7. ฮาร์ดแวร์ที่ควรรู้
STM32 (เช่น F103, F401, G0, F4 series)
WS2812 หรือ SK6812
Level Shifter 3.3V → 5V (เช่น 74AHCT125)
Power Supply 5V (คำนวณกระแส 60mA × จำนวนหลอด)
Capacitor 1000 µF / 6.3V ที่ขาไฟเพื่อกันสัญญาณกระชาก
🧩 8. แนวคิดการต่อยอด
แนวคิด การประยุกต์
Pattern + Timing เอฟเฟกต์ไฟไล่แสง
PWM + DMA ควบคุมสีแบบลื่นไหล
WS2812 ระบบไฟพิกเซล
DMX Mapping เชื่อมกับคอนโทรลเลอร์ภายนอก
Art-Net / WiFi ควบคุมผ่านเครือข่าย
💡 9. Workshop แนวคิด (ไม่ลงโค้ด)
“Rainbow Wave” → สีวิ่งวนรอบสายไฟ
“Knight Rider RGB” → แสงวิ่งไปกลับ
“Breathing Color” → ค่อย ๆ เปลี่ยนโทนสีไปเรื่อย ๆ
🎬 10. ปิดท้ายตอน
“วันนี้เราไม่ได้แค่ควบคุมไฟ — เรากำลังควบคุมข้อมูลที่กลายเป็นแสง”
และนี่คือจุดเริ่มต้นของระบบ DMX Pixel, Art-Net, และ LED Display ที่ใช้หลักเดียวกัน
ตอนหน้า เราจะเชื่อม “ข้อมูลแสง” เข้ากับ DMX512
เพื่อควบคุมไฟจากภายนอก — และทำให้ STM32 ของเรากลายเป็น DMX Controller ตัวจริง!
🔖 Key Learning Summary
หัวข้อ สิ่งที่ได้เรียนรู้
WS2812 Structure เข้าใจหลักการไฟดิจิทัล
Data Timing การส่งสัญญาณระดับไมโครวินาที
DMA + Timer พื้นฐานระบบส่งข้อมูลความเร็วสูง
RGB Pattern ออกแบบเอฟเฟกต์ไฟ
Next Step เชื่อมกับ DMX512 / Art-Net

ตอนที่ 1 วงจรไฟกระพริบ (Stm32)

ตอนที่ 1: จุดเริ่มต้นไฟกระพริบ — Blink STM32
🔧 ซีรีส์: From Blink to DMX — เส้นทางไฟกระพริบสู่ป้ายไฟ STM32
🎯 เป้าหมายของตอนนี้
เข้าใจ “หลักการเบื้องหลังไฟกระพริบ”
และมองเห็นว่าไฟ 1 ดวงสามารถต่อยอดเป็นระบบไฟขนาดใหญ่ได้อย่างไร
โดยไม่จำเป็นต้องเขียนโปรแกรมมาก — แต่เข้าใจ “กลไกที่อยู่เบื้องหลังแสง”
📚 โครงสร้างคอนเทนต์ตอนที่ 1
🧩 1. บทนำ — ไฟกระพริบคือจุดเริ่มต้นของทุกอย่าง
เริ่มด้วยคำถามชวนคิด:
“ไฟ 1 ดวงกระพริบ มีความหมายแค่ไหนในโลกวิศวกรรม?”
อธิบายว่าไฟกระพริบ = สัญลักษณ์ของชีวิตในระบบอิเล็กทรอนิกส์
มันคือ “heartbeat” ของวงจร
ใช้ตรวจชีพจร MCU (boot, alive, error, signal)
คือระบบ logic + timing ที่จับต้องได้
เชื่อมโยงกับสิ่งที่ใหญ่กว่า:
จากไฟ 1 ดวง → แถบไฟ LED → ระบบแสงเวที → ป้าย LED Billboard → ระบบ DMX
⚙️ 2. แนวคิดพื้นฐานของการ “ทำให้ไฟกระพริบ”
ไม่ใช่การ “เขียนโค้ด delay()” — แต่คือ “การควบคุมเวลาและพลังงาน”
🔹 2.1 วงจรพื้นฐานของ LED
ไฟ LED ไม่ใช่แค่หลอดไฟ แต่คือ อุปกรณ์เปลี่ยนพลังงานไฟฟ้าเป็นแสง
อธิบาย โครงสร้างไฟ LED (ไดโอด → ขั้ว Anode/Cathode → แรงดันตกคร่อม Vf)
แสดงภาพกราฟ I–V (current–voltage curve)
หลักคิด “ถ้าไม่มีตัวต้านทาน ไฟก็พัง” — นำสู่ concept “การควบคุมกระแส”
🔹 2.2 การควบคุมไฟด้วยสวิตช์ไฟฟ้า
อธิบายด้วยภาพว่า MCU คือ “สมองที่สั่งสวิตช์”
สวิตช์จริงมี 3 แบบหลัก:
Manual Switch → คนกด
Transistor / MOSFET → อิเล็กทรอนิกส์กดแทน
Digital Output (GPIO) → MCU กดตามสัญญาณ logic
🔹 2.3 สัญญาณดิจิทัลคืออะไร
อธิบาย High / Low = 1 / 0
Pulse Train คือหัวใจของ “ไฟกระพริบ”
ภาพ waveform: On 500 ms / Off 500 ms = 1 Hz
นำเข้าสู่แนวคิด “Timing คือศิลปะของแสง”
⏱️ 3. การควบคุมเวลา — หัวใจของการกระพริบ
“เวลา” คือทรัพยากรสำคัญที่สุดในระบบไมโครคอนโทรลเลอร์
🔹 3.1 Delay vs Timer
อธิบายความต่างของ delay() (blocking) และ Timer (non-blocking)
ยกตัวอย่าง:
delay() = “รอเฉย ๆ”
timer interrupt = “ตั้งนาฬิกา แล้วให้มันเตือนเมื่อถึงเวลา”
ภาพเปรียบเทียบ 2 แบบนี้
🔹 3.2 สัญญาณ PWM — การสร้างแสงที่ “ไม่แค่เปิด–ปิด”
แนะนำแนวคิด PWM (Pulse Width Modulation)
duty cycle 25%, 50%, 75%, 100%
กราฟ waveform + ภาพ LED หรี่แสง
วางพื้นฐานให้ตอนต่อไป (ตอน 3)
🔌 4. STM32 กับการควบคุม LED
“ไฟกระพริบไม่ใช่โค้ด แต่คือฮาร์ดแวร์ที่เต้นตามเวลา”
🔹 4.1 GPIO Output
แสดงโครงสร้าง pin STM32 → Port → Register
concept “เปิดขาให้เป็น output แล้วเขียน logic ลงไป”
ภาพ block diagram: CPU → GPIO driver → LED
🔹 4.2 การใช้ Timer ของ STM32
ยกตัวอย่าง TIM2, TIM3
แสดงแนวคิด prescaler / ARR / interrupt
ภาพโฟลว์:
Timer นับ →
ถึงค่า reload →
Trigger event →
Toggle LED
🔹 4.3 ความแม่นยำและการต่อยอด
ความถี่กระพริบ 1 Hz ของ MCU อาจไม่เท่ากับของ DMX เพราะ DMX ต้อง precise timing
นำเข้าสู่แนวคิด “Precision Timing”
🌈 5. จากไฟ 1 ดวง สู่ไฟล้านดวง
ปิดตอนด้วยภาพใหญ่ — แสดงเส้นทางการต่อยอด
🔹 5.1 Scaling Up
LED 1 ดวง = 1 output
8 ดวง = 8 bits (parallel)
100 ดวง = multiplexing
1000 ดวง = shift register / serial driver
10000+ ดวง = pixel mapping + DMA + network
🔹 5.2 เส้นทางพัฒนา
ระดับ เทคโนโลยีที่เกี่ยวข้อง
Beginner GPIO, delay, PWM
Intermediate DMA, Timer, WS2812
Advanced HUB75, DMX512, Art-Net
Pro LED Controller, Sync System
🔹 5.3 แรงบันดาลใจ
“ไฟ 1 ดวงที่กระพริบวันนี้ คือจุดเริ่มต้นของระบบไฟเวทีระดับโลกในวันหน้า”
🧠 สรุป Key Learning
หัวข้อ สิ่งที่ผู้เรียนได้
หลักการไฟกระพริบ เข้าใจ logic, timing, และการควบคุมพลังงาน
GPIO ของ STM32 เห็นภาพโครงสร้างการสั่งขา
Timer & Interrupt เข้าใจการสร้างจังหวะโดยไม่ใช้ delay
วิวัฒนาการ จาก LED หนึ่งดวง → ระบบไฟขนาดใหญ่
“ตอนหน้า — เราจะเปลี่ยนไฟกระพริบธรรมดาให้กลายเป็นแสงที่เคลื่อนไหวอย่างมีจังหวะ
รู้จักกับ Timer Interrupt และการสร้าง Pattern แบบมืออาชีพ”

Subcategories

ไมโครคอนโทรลเลอร์ เบอร์ STM32

บอร์ด Arduino UNO

Free Joomla templates by Ltheme