การสร้าง และ กำหนดค่า Telegram Bot

Telegram Bot เป็นส่วนสำคัญที่ช่วยให้คุณสามารถโต้ตอบกับสมาชิกในกลุ่มได้ ขั้นตอนการสร้างและกำหนดค่ามีดังนี้:

สร้าง Telegram Bot:

  • พูดคุยกับ @BotFather บน Telegram
  • ใช้คำสั่ง /newbot เพื่อสร้างบอทใหม่ และบันทึก Token ที่ได้รับไว้

เปิดโหมด Group Privacy:

หากต้องการให้บอทสามารถอ่านข้อความทั่วไปในกลุ่ม (ไม่จำกัดเฉพาะคำสั่ง) ให้ปิดโหมด Privacy:

  • ส่งคำสั่ง /setprivacy ไปยัง BotFather
  • เลือกบอทของคุณ และตั้งค่าเป็น Disable

เพิ่มบอทเข้ากลุ่ม:

  • เชิญบอทเข้ากลุ่มตามขั้นตอนปกติของ Telegram

เชื่อมโยง Joomla กับ Telegram Bot

การเชื่อมโยง Joomla กับ Telegram Bot ต้องอาศัยการเขียนโค้ดเพื่อให้บอทสามารถโต้ตอบกับสมาชิกในกลุ่มได้ โดยใช้ Telegram Bot API ในการรับ-ส่งข้อมูล

ขั้นตอนการเชื่อมโยง:

สร้าง Webhook สำหรับ Telegram Bot:

  • Webhook คือ URL ที่ Telegram จะส่งข้อมูล (Update) เมื่อมีการโต้ตอบในกลุ่ม
  • สร้างไฟล์ PHP เช่น telegram-bot.php บนเว็บไซต์ของคุณ

ตั้งค่า Webhook:

curl -F "url=https://yourdomain.com/telegram-bot.php" https://api.telegram.org/bot<YourBotToken>/setWebhook

ตัวอย่างโค้ด PHP รับ-ส่งข้อความ:

<?php
// รับข้อมูลจาก Telegram
$content = file_get_contents("php://input");
$update = json_decode($content, true);

// ตรวจสอบข้อความ
if (isset($update['message'])) {
  $chat_id = $update['message']['chat']['id'];
  $text = $update['message']['text'];

  if ($text == "/start") {
    $reply = "สวัสดีครับ! ผมคือบอทของคุณ";
  } else {
    $reply = "คุณพิมพ์: " . $text;
  }

  // ส่งข้อความกลับไปยัง Telegram
  $url = "https://api.telegram.org/bot<YourBotToken>/sendMessage?chat_id=$chat_id&text=" . urlencode($reply);
  file_get_contents($url);
}
?>

ตัวอย่างโค้ด Python รับ-ส่งข้อความ:

import requests

TOKEN = '<YourBotToken>'
BASE_URL = f'https://api.telegram.org/bot{TOKEN}'

def send_message(chat_id, text):
    url = f'{BASE_URL}/sendMessage'
    payload = {'chat_id': chat_id, 'text': text}
    requests.post(url, json=payload)

def get_updates(offset=None):
    url = f'{BASE_URL}/getUpdates'
    response = requests.get(url)
    return response.json()

# ตัวอย่างเรียกใช้
if __name__ == '__main__':
    updates = get_updates()
    for update in updates['result']:
        chat_id = update['message']['chat']['id']
        text = update['message']['text']
        send_message(chat_id, f'คุณพิมพ์: {text}')

ทดสอบการทำงาน:

  • ส่งข้อความในกลุ่ม Telegram และตรวจสอบว่าบอทตอบกลับถูกต้องหรือไม่
  • หากพบปัญหา ให้ตรวจสอบ Log ของ Server หรือ Debug โค้ด

ข้อควรระวัง

  • ความปลอดภัย: อย่าเปิดเผย Token ของบอท ใช้ HTTPS สำหรับ Webhook
  • ประสิทธิภาพ: ทดสอบการตอบกลับข้อความเมื่อกลุ่มมีสมาชิกจำนวนมาก

สรุป

การเชื่อมต่อกับ Telegram Bot ต้องอาศัยการผสมผสานระหว่างการจัดการเนื้อหา และ การพัฒนาโปรแกรม หากคุณมีพื้นฐานด้านการเขียนโค้ด จะช่วยให้การเชื่อมโยง Telegram Bot เป็นไปอย่างราบรื่น

หากคุณมีคำถามเพิ่มเติมเกี่ยวกับการเขียนโค้ด หรือ การตั้งค่า สามารถสอบถามมาได้เลยครับ! 😊

เชื่อมต่อโลก AI กับ Telegram ผ่าน CircuitPython บน ESP32-S3

ปัจจุบัน Internet of Things (IoT) ได้เข้ามามีบทบาทมากขึ้น โดยเฉพาะในเรื่องของการควบคุมอุปกรณ์ระยะไกลและการสื่อสารผ่านแพลตฟอร์มยอดนิยมอย่าง Telegram ซึ่งเป็นเครื่องมือที่ดีสำหรับการแจ้งเตือนอัตโนมัติ หรือแม้แต่ควบคุมอุปกรณ์ต่าง ๆ

ในบทความนี้ ผมจะมาแชร์ประสบการณ์การใช้ CircuitPython เพื่อเชื่อมต่อ ESP32-S3 กับ Telegram และ AI รวมถึงการใช้ library requests ที่มีความเสถียรสูง และวิธีการสร้างโปรเจกต์ที่สามารถทดสอบได้ง่าย

CircuitPython คืออะไร? 🐍

CircuitPython เป็นภาษาการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์ที่พัฒนาโดย Adafruit ซึ่งถูกออกแบบมาให้ใช้งานง่ายและเหมาะสำหรับนักพัฒนาและนักเรียนที่ต้องการเรียนรู้การเขียนโค้ดสำหรับ Embedded Systems

ข้อดีของ CircuitPython

  • ✅ ใช้งานง่าย: ไม่ต้องติดตั้งซอฟต์แวร์เพิ่ม สามารถลากและวางไฟล์โค้ดลงไปที่บอร์ดได้เลย
  • ✅ มีไลบรารีให้ใช้งานเยอะ: มีไลบรารีสำเร็จรูปมากมาย ช่วยลดเวลาในการพัฒนา
  • ✅ รองรับหลายแพลตฟอร์ม: สามารถใช้ได้กับบอร์ดไมโครคอนโทรลเลอร์หลากหลาย เช่น ESP32, Raspberry Pi Pico, Adafruit Feather เป็นต้น
  • ✅ การดีบั๊กง่าย: สามารถรันโค้ดแบบ REPL (Read-Eval-Print Loop) ทำให้ตรวจสอบค่าได้แบบเรียลไทม์

การใช้ CircuitPython กับ ESP32-S3 เพื่อเชื่อมต่อ Telegram

1. เตรียมอุปกรณ์ที่ต้องใช้

  • ESP32-S3 (บอร์ดที่รองรับ CircuitPython)
  • Wi-Fi สำหรับเชื่อมต่ออินเทอร์เน็ต
  • บัญชี Telegram และ Telegram Bot API

2. ติดตั้ง CircuitPython บน ESP32-S3

ดาวน์โหลด CircuitPython firmware สำหรับ ESP32-S3 ได้จาก CircuitPython Downloads ใช้ ThonnyIDE เพื่อติดตั้ง CircuitPython ลงไปที่บอร์ด

หลังจากติดตั้งเสร็จ เมื่อเสียบ ESP32-S3 กับคอมพิวเตอร์ จะเห็นเป็นไดร์ฟ USB ที่สามารถคัดลอกโค้ดลงไปได้

3. เขียนโค้ด CircuitPython เพื่อเชื่อมต่อ Telegram

ก่อนอื่นให้ติดตั้งไลบรารี requests สำหรับการส่ง HTTP requests ไปยัง Telegram Bot API


import wifi
import socketpool
import ssl
import adafruit_requests
import board
import time

# กำหนดข้อมูล Wi-Fi และ Telegram Bot
WIFI_SSID = "ชื่อเครือข่าย"
WIFI_PASSWORD = "รหัสผ่าน"
BOT_TOKEN = "ใส่โทเค็นบอทจาก Telegram"
CHAT_ID = "ใส่ Chat ID ของคุณ"

# เชื่อมต่อ Wi-Fi
print("กำลังเชื่อมต่อ Wi-Fi...")
wifi.radio.connect(WIFI_SSID, WIFI_PASSWORD)
print("เชื่อมต่อสำเร็จ!")

# ตั้งค่าการสื่อสาร HTTP
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

# ฟังก์ชันส่งข้อความไปยัง Telegram
def send_telegram_message(message):
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
    payload = {"chat_id": CHAT_ID, "text": message}
    response = requests.post(url, json=payload)
    print(response.text)

# ทดสอบส่งข้อความ
send_telegram_message("Hello from ESP32-S3 using CircuitPython!")

ผลลัพธ์: ✅ เมื่อรันโค้ด ESP32-S3 จะเชื่อมต่อ Wi-Fi และส่งข้อความไปยัง Telegram

4. ควบคุมฮาร์ดแวร์ผ่าน Telegram

เราสามารถขยายฟังก์ชันเพื่อให้ Telegram รับคำสั่งจากผู้ใช้ และสั่งให้ ESP32-S3 ควบคุมรีเลย์, LED, มอเตอร์ หรืออุปกรณ์อื่น ๆ


import digitalio

# กำหนดขา LED (เช่น ขา D2)
led = digitalio.DigitalInOut(board.D2)
led.direction = digitalio.Direction.OUTPUT

def check_telegram():
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/getUpdates"
    response = requests.get(url).json()
    
    for update in response["result"]:
        if "message" in update:
            text = update["message"]["text"]
            if text.lower() == "on":
                led.value = True
                send_telegram_message("LED เปิดแล้ว! 💡")
            elif text.lower() == "off":
                led.value = False
                send_telegram_message("LED ปิดแล้ว! 🔴")

# เช็คข้อความจาก Telegram ทุก 5 วินาที
while True:
    check_telegram()
    time.sleep(5)

ผลลัพธ์: ✅ ผู้ใช้สามารถส่งคำว่า "on" หรือ "off" ใน Telegram เพื่อควบคุม LED บน ESP32-S3 ได้ 🎉

ทดสอบใช้งาน Bot @Panmaneecnc_learn_bot

สรุป

CircuitPython เป็นทางเลือกที่ดีสำหรับผู้ที่ต้องการใช้งาน ESP32-S3 ในการเชื่อมต่อ Telegram และ AI

requests library มีความเสถียร และทำให้การส่งข้อมูลผ่าน HTTP API ทำได้ง่าย

✅ สามารถนำไปประยุกต์ใช้กับ IoT, ระบบแจ้งเตือน, หรือการควบคุมอุปกรณ์ระยะไกล

📢 ใครที่สนใจ ลองนำไปปรับใช้ดูได้เลย! 🚀

MLX90640 : เซนเซอร์ตรวจจับความร้อนแบบอินฟราเรด

ในยุคที่เทคโนโลยีพัฒนาอย่างรวดเร็ว การตรวจจับความร้อน (Thermal Imaging) ได้กลายเป็นเครื่องมือสำคัญในหลากหลายอุตสาหกรรม ไม่ว่าจะเป็นการตรวจสอบสภาพแวดล้อม การตรวจสอบอุปกรณ์ไฟฟ้า การแพทย์ หรือแม้แต่การใช้งานในชีวิตประจำวัน เซนเซอร์ตรวจจับความร้อนแบบอินฟราเรด (Infrared Thermal Sensor) อย่าง MLX90640 ของบริษัท Melexis ได้รับความสนใจอย่างมาก เนื่องจากความสามารถในการตรวจจับความร้อนได้อย่างแม่นยำ และ ขนาดที่กะทัดรัด

MLX90640 คืออะไร?

MLX90640 เป็นเซนเซอร์ตรวจจับความร้อนแบบอินฟราเรดที่ทำงานโดยอาศัยหลักการของการตรวจจับรังสีอินฟราเรด (Infrared Radiation) ที่ปล่อยออกมาจากร่างกายหรือวัตถุ โดยไม่ต้องสัมผัสกับวัตถุนั้นๆ เซนเซอร์นี้สามารถสร้างภาพความร้อน (Thermal Image) ได้ในรูปแบบของข้อมูลเมทริกซ์ 32x24 พิกเซล ซึ่งแม้ว่าความละเอียดจะไม่สูงเท่ากล้องตรวจจับความร้อนระดับไฮเอนด์ แต่ MLX90640 ก็โดดเด่นด้วยขนาดที่เล็ก ราคาที่เหมาะสม และประสิทธิภาพที่ยอดเยี่ยม


คุณสมบัติเด่นของ MLX90640

  1. ความละเอียด 32x24 พิกเซล

    • MLX90640 มีความละเอียด 768 พิกเซล (32x24) ซึ่งเพียงพอสำหรับการสร้างภาพความร้อนเบื้องต้นและการวิเคราะห์อุณหภูมิในพื้นที่ขนาดเล็ก
    • เหมาะสำหรับงานที่ไม่ต้องการความละเอียดสูง เช่น การตรวจสอบอุณหภูมิในอาคาร การตรวจสอบอุปกรณ์ไฟฟ้า หรือการประยุกต์ใช้งานในหุ่นยนต์
  2. ช่วงการตรวจจับอุณหภูมิ

    • MLX90640 สามารถตรวจจับอุณหภูมิได้ในช่วง -40°C ถึง 300°C (ขึ้นอยู่กับรุ่น)
    • มีความแม่นยำสูง ±1°C ในช่วงอุณหภูมิที่กำหนด
  3. ขนาดกะทัดรัด

    • เซนเซอร์ MLX90640 มีขนาดเล็กและน้ำหนักเบา ทำให้สามารถนำไปติดตั้งในอุปกรณ์ขนาดเล็กหรือระบบ IoT ได้อย่างสะดวก
  4. รองรับการเชื่อมต่อ I2C

    • MLX90640 ใช้โปรโตคอล I2C ในการสื่อสารกับไมโครคอนโทรลเลอร์หรือคอมพิวเตอร์ ทำให้การติดตั้งและการใช้งานง่ายขึ้น
  5. Field of View (FOV)

    • MLX90640 มี FOV สองรุ่นให้เลือกใช้งาน คือ 55°x35° และ 110°x75° ซึ่งเหมาะสำหรับการใช้งานที่ต้องการมุมมองกว้างหรือแคบ

การประยุกต์ใช้งาน MLX90640

MLX90640 สามารถนำมาใช้งานได้หลากหลายในหลายอุตสาหกรรม ดังนี้:

  1. การตรวจสอบอุณหภูมิในอาคาร

    • ใช้สำหรับตรวจสอบการรั่วไหลของความร้อนในอาคารหรือโรงงาน เพื่อปรับปรุงประสิทธิภาพการใช้พลังงาน
  2. การตรวจสอบอุปกรณ์ไฟฟ้า

    • ช่วยตรวจจับจุดร้อน (Hot Spot) ในอุปกรณ์ไฟฟ้าหรือแผงวงจร เพื่อป้องกันการเกิดไฟไหม้หรือความเสียหาย
  3. การแพทย์

    • ใช้ในการตรวจจับอุณหภูมิร่างกายของมนุษย์ เช่น การตรวจวัดไข้ในสถานการณ์โรคระบาด
  4. หุ่นยนต์และโดรน

    • ติดตั้งบนหุ่นยนต์หรือโดรนเพื่อสร้างภาพความร้อนสำหรับการนำทางหรือการตรวจสอบสภาพแวดล้อม
  5. การเกษตร

    • ใช้ในการตรวจสอบอุณหภูมิของพืชผลหรือสัตว์ เพื่อควบคุมสภาวะแวดล้อมให้เหมาะสม

ข้อจำกัดของ MLX90640

แม้ว่า MLX90640 จะมีคุณสมบัติที่น่าสนใจ แต่ก็ยังมีข้อจำกัดบางประการที่ควรพิจารณา:

  • ความละเอียดต่ำ : ความละเอียด 32x24 พิกเซลอาจไม่เพียงพอสำหรับงานที่ต้องการรายละเอียดสูง
  • ความเร็วในการอ่านค่า : อัตราการอ่านค่าอุณหภูมิของ MLX90640 อยู่ที่ประมาณ 1-64 Hz ซึ่งอาจช้าเกินไปสำหรับงานที่ต้องการความเร็วสูง
  • ความซับซ้อนในการประมวลผล : การแปลงข้อมูลจากเซนเซอร์เป็นภาพความร้อนจำเป็นต้องใช้การประมวลผลที่ซับซ้อน

สรุป

MLX90640 เป็นเซนเซอร์ตรวจจับความร้อนที่มีประสิทธิภาพสูงในราคาที่เหมาะสม เหมาะสำหรับการใช้งานที่ต้องการการตรวจจับอุณหภูมิแบบไม่สัมผัสในพื้นที่ขนาดเล็ก ด้วยขนาดที่กะทัดรัดและการเชื่อมต่อที่ง่าย MLX90640 จึงเป็นตัวเลือกที่ดีสำหรับนักพัฒนาและวิศวกรที่ต้องการนำเทคโนโลยีตรวจจับความร้อนมาใช้งานในโครงการต่างๆ

หากคุณกำลังมองหาเซนเซอร์ที่ตอบโจทย์การใช้งานในระดับกลาง MLX90640 อาจเป็นคำตอบที่คุณตามหา

การใช้งานเซนเซอร์ MLX90640 กับ Arduino จำเป็นต้องใช้ไลบรารีเฉพาะที่รองรับการทำงานของเซนเซอร์นี้ เนื่องจาก MLX90640 ส่งข้อมูลผ่านโปรโตคอล I2C และข้อมูลที่ได้มาจะต้องถูกประมวลผลเพื่อแปลงเป็นค่าอุณหภูมิและสร้างภาพความร้อน (Thermal Image)

ในตัวอย่างนี้ เราจะใช้ไลบรารี Adafruit MLX90640 ซึ่งเป็นไลบรารีที่พัฒนาโดย Adafruit เพื่อช่วยให้การใช้งาน MLX90640 กับ Arduino ง่ายขึ้น

ขั้นตอนการติดตั้งไลบรารี

  1. เปิด Arduino IDE
  2. ไปที่เมนู Sketch > Include Library > Manage Libraries
  3. ค้นหาคำว่า Adafruit MLX90640 และ ติดตั้งไลบรารี
  4. ตรวจสอบว่าไลบรารี Adafruit BusIO และ Wire (สำหรับ I2C) ถูกติดตั้งแล้ว หากยังไม่มี ให้ติดตั้งด้วยเช่นกัน

การต่อวงจร

  • VCC -> 5V หรือ 3.3V (ขึ้นอยู่กับโมดูล)
  • GND -> GND
  • SDA -> SDA (บน Arduino: A4 สำหรับ Uno, 20 สำหรับ Mega)
  • SCL -> SCL (บน Arduino: A5 สำหรับ Uno, 21 สำหรับ Mega)

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

ตัวอย่างโค้ดนี้จะแสดงค่าอุณหภูมิของแต่ละพิกเซลใน Serial Monitor และสามารถนำไปประยุกต์ใช้เพื่อสร้างภาพความร้อนได้

#include <Wire.h>
#include <Adafruit_MLX90640.h>

// สร้างออบเจ็กต์ MLX90640
Adafruit_MLX90640 mlx;

// ขนาดของเมทริกซ์พิกเซล
#define PIXELS 768 // 32x24 = 768 พิกเซล

// อาเรย์สำหรับเก็บค่าอุณหภูมิ
float temperatures[PIXELS];

void setup() {
  // เริ่มต้น Serial Monitor
  Serial.begin(115200);
  
  // เริ่มต้น I2C
  Wire.begin();

  // ตรวจสอบการเชื่อมต่อ MLX90640
  if (!mlx.begin(MLX90640_I2CADDR_DEFAULT, &Wire)) {
    Serial.println("MLX90640 ไม่พบเซนเซอร์!");
    while (1) delay(10);
  }

  // กำหนดค่า Refresh Rate (Hz)
  mlx.setMode(MLX90640_INTERLEAVED);
  mlx.setResolution(MLX90640_ADC_18BIT); // ความละเอียด ADC
  mlx.setRefreshRate(MLX90640_4_HZ);    // อัตราการรีเฟรช 4 Hz

  Serial.println("MLX90640 เริ่มทำงานแล้ว!");
}

void loop() {
  // อ่านค่าอุณหภูมิจากเซนเซอร์
  if (mlx.getFrame(temperatures) != 0) {
    Serial.println("เกิดข้อผิดพลาดในการอ่านค่า!");
    return;
  }

  // แสดงค่าอุณหภูมิใน Serial Monitor
  for (int i = 0; i < PIXELS; i++) {
    Serial.print(temperatures[i]);
    Serial.print("\t");
    
    // เริ่มบรรทัดใหม่ทุกๆ 32 พิกเซล (32x24)
    if ((i + 1) % 32 == 0) {
      Serial.println();
    }
  }

  Serial.println(); // ขึ้นบรรทัดใหม่หลังแสดงข้อมูลทั้งหมด
  delay(500);       // รอ 500 มิลลิวินาทีก่อนอ่านค่าครั้งถัดไป
}

คำอธิบายโค้ด

  1. การเริ่มต้นเซนเซอร์

    • ใช้ฟังก์ชัน mlx.begin() เพื่อตรวจสอบการเชื่อมต่อเซนเซอร์
    • กำหนดโหมดการทำงาน เช่น setMode, setResolution, และ setRefreshRate เพื่อปรับแต่งการทำงานของเซนเซอร์
  2. การอ่านค่าอุณหภูมิ

    • ใช้ฟังก์ชัน mlx.getFrame() เพื่ออ่านค่าอุณหภูมิจากเซนเซอร์และเก็บไว้ในอาเรย์ temperatures
    • ค่าที่ได้จะเป็นค่าอุณหภูมิในหน่วยองศาเซลเซียส (°C)
  3. การแสดงผล

    • ค่าอุณหภูมิจะถูกแสดงใน Serial Monitor โดยจัดเรียงเป็นตาราง 32x24 พิกเซล

การปรับแต่งเพิ่มเติม

  1. การแสดงภาพความร้อน

    • คุณสามารถนำค่าอุณหภูมิไปประมวลผลเพื่อสร้างภาพความร้อน โดยใช้ไลบรารีเช่น Adafruit GFX หรือ TFT_eSPI สำหรับจอแสดงผล
  2. การปรับอัตราการรีเฟรช

    • ลองเปลี่ยนค่า setRefreshRate เป็น MLX90640_8_HZ หรือ MLX90640_16_HZ เพื่อเพิ่มความเร็วในการอ่านค่า
  3. การใช้งานร่วมกับจอ LCD

    • หากต้องการแสดงผลภาพความร้อนแบบเรียลไทม์ คุณสามารถต่อจอ LCD เช่น TFT หรือ OLED และใช้ไลบรารีกราฟิกเพื่อสร้างภาพความร้อน

ข้อควรระวัง

  • MLX90640 มีความละเอียดต่ำ (32x24 พิกเซล) การแสดงผลอาจไม่คมชัดเท่ากล้องตรวจจับความร้อนระดับไฮเอนด์
  • ตรวจสอบแรงดันไฟเลี้ยงของเซนเซอร์ (3.3V หรือ 5V) เพื่อป้องกันความเสียหาย
  • หากใช้งานร่วมกับจอแสดงผล ให้แน่ใจว่า Arduino มีประสิทธิภาพเพียงพอในการประมวลผลข้อมูล

คุณสามารถใช้งาน MLX90640 กับ ESP32 โดยใช้ MicroPython ได้เช่นกัน แม้ว่า MicroPython จะไม่มีไลบรารีสำเร็จรูปอย่าง Adafruit MLX90640 ที่มีใน Arduino แต่คุณยังสามารถเขียนโค้ดเพื่ออ่านข้อมูลจากเซนเซอร์ผ่านโปรโตคอล I2C ได้โดยตรง

คุณสามารถใช้งาน MLX90640 กับ ESP32 โดยใช้ MicroPython ได้เช่นกัน แม้ว่า MicroPython จะไม่มีไลบรารีสำเร็จรูปอย่าง Adafruit MLX90640 ที่มีใน Arduino แต่คุณยังสามารถเขียนโค้ดเพื่ออ่านข้อมูลจากเซนเซอร์ผ่านโปรโตคอล I2C ได้โดยตรง

ขั้นตอนการติดตั้งและเตรียมใช้งาน

  1. ติดตั้ง MicroPython บน ESP32

    • ดาวน์โหลดเฟิร์มแวร์ MicroPython สำหรับ ESP32 จาก MicroPython Official Website
    • ใช้เครื่องมือเช่น esptool.py เพื่อแฟลชเฟิร์มแวร์ลงใน ESP32
  2. ต่อวงจร

    • เชื่อมต่อ MLX90640 กับ ESP32 ตามแผนผังด้านล่าง:
      • VCC -> 3.3V (ESP32)
      • GND -> GND
      • SDA -> GPIO21 (หรือกำหนดเอง)
      • SCL -> GPIO22 (หรือกำหนดเอง)
  3. ติดตั้งไลบรารี I2C

    • MicroPython มีโมดูล machine.I2C สำหรับการทำงานกับ I2C ซึ่งจะใช้ในการสื่อสารกับ MLX90640

โค้ดตัวอย่างสำหรับ MLX90640 บน ESP32 (MicroPython)

ตัวอย่างโค้ดนี้จะอ่านค่าอุณหภูมิจาก MLX90640 และ แสดงผลผ่าน Terminal

from machine import Pin, I2C
import time
import struct

# กำหนดพิน I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)

# ที่อยู่ I2C ของ MLX90640
MLX90640_I2C_ADDR = 0x33

# ขนาดของเมทริกซ์พิกเซล
PIXELS = 768  # 32x24 = 768 พิกเซล

def read_mlx90640_temperatures():
    # ส่งคำสั่งอ่านข้อมูลจาก MLX90640
    i2c.writeto(MLX90640_I2C_ADDR, b'\x02')  # เลือก RAM เริ่มต้น
    raw_data = i2c.readfrom(MLX90640_I2C_ADDR, PIXELS * 2)  # อ่านข้อมูล 16-bit สำหรับแต่ละพิกเซล

    # แปลงข้อมูลเป็นค่าอุณหภูมิ
    temperatures = []
    for i in range(0, len(raw_data), 2):
        # รวมข้อมูล 2 ไบต์เป็นค่า 16-bit
        raw_temp = struct.unpack('>H', raw_data[i:i+2])[0]
        
        # แปลงค่าเป็นอุณหภูมิ (ปรับค่าตามเอกสาร MLX90640)
        temp_c = (raw_temp - 32768) * 0.02 - 273.15
        temperatures.append(temp_c)
    
    return temperatures

def main():
    while True:
        try:
            # อ่านค่าอุณหภูมิ
            temperatures = read_mlx90640_temperatures()
            
            # แสดงผลค่าอุณหภูมิ
            for i, temp in enumerate(temperatures):
                print(f"{temp:.2f}", end="\t")
                if (i + 1) % 32 == 0:  # เริ่มบรรทัดใหม่ทุกๆ 32 พิกเซล
                    print()
            print("\n---\n")
        
        except Exception as e:
            print("เกิดข้อผิดพลาด:", e)
        
        # รอ 1 วินาทีก่อนอ่านค่าครั้งถัดไป
        time.sleep(1)

if __name__ == "__main__":
    main()

คำอธิบายโค้ด

  1. การตั้งค่า I2C

    • ใช้โมดูล machine.I2C เพื่อสร้างออบเจ็กต์ I2C และกำหนดพิน SDA และ SCL
    • ความถี่ I2C ถูกตั้งไว้ที่ 400kHz ซึ่งเหมาะสมสำหรับ MLX90640
  2. การอ่านข้อมูล

    • ส่งคำสั่ง I2C เพื่ออ่านข้อมูลจาก RAM ของ MLX90640
    • ข้อมูลที่อ่านมาจะเป็นค่า 16-bit สำหรับแต่ละพิกเซล (768 พิกเซล)
  3. การแปลงข้อมูล

    • ใช้ฟังก์ชัน struct.unpack เพื่อรวมข้อมูล 2 ไบต์เป็นค่า 16-bit
    • แปลงค่าดิบเป็นอุณหภูมิโดยใช้สมการที่ระบุในเอกสาร MLX90640 (Datasheet)
  4. การแสดงผล

    • ค่าอุณหภูมิจะถูกแสดงในรูปแบบตาราง 32x24 พิกเซลผ่าน Serial Monitor

ข้อควรระวัง

  1. ประสิทธิภาพของ ESP32

    • การประมวลผลข้อมูลจาก MLX90640 อาจใช้ทรัพยากรมาก เนื่องจากต้องอ่านและแปลงข้อมูล 768 พิกเซล หากต้องการแสดงผลภาพความร้อนแบบเรียลไทม์ อาจต้องใช้จอแสดงผลที่รองรับ MicroPython เช่น SSD1306 หรือ ILI9341
  2. การจัดการหน่วยความจำ

    • MicroPython มีข้อจำกัดด้านหน่วยความจำ ดังนั้นควรทดสอบโค้ดบน ESP32 ที่มีหน่วยความจำเพียงพอ (เช่น ESP32-WROOM-32)
  3. การปรับค่า Offset

    • ค่า Offset และ Gain ของ MLX90640 อาจต้องปรับตามสภาพแวดล้อมหรือการตั้งค่าเฉพาะของเซนเซอร์ โปรดตรวจสอบเอกสาร MLX90640 สำหรับรายละเอียดเพิ่มเติม

การประยุกต์ใช้งาน

  • การตรวจสอบอุณหภูมิในอาคาร : ใช้ MLX90640 เพื่อตรวจสอบจุดร้อนหรือการรั่วไหลของความร้อน
  • การตรวจสอบอุปกรณ์ไฟฟ้า : ตรวจจับจุดร้อนในแผงวงจรหรืออุปกรณ์ไฟฟ้า
  • การควบคุมระบบ IoT : นำข้อมูลอุณหภูมิไปใช้ในการควบคุมอุปกรณ์อัตโนมัติ

เริ่มต้นกับ MicroPython โดยใช้ Thonny IDE สำหรับมือใหม่

1. แนะนำ MicroPython และ Thonny IDE

MicroPython คืออะไร?

MicroPython เป็นการนำภาษา Python 3 มาปรับให้เหมาะกับการใช้งานบนไมโครคอนโทรลเลอร์ เช่น ESP32, ESP8266, Raspberry Pi Pico และ STM32 เพื่อให้สามารถเขียนโค้ดควบคุมฮาร์ดแวร์ได้ง่ายขึ้นโดยไม่ต้องใช้ C/C++ เหมือนกับ Arduino

Thonny IDE คืออะไร?

Thonny เป็น IDE (Integrated Development Environment) ที่เหมาะสำหรับผู้เริ่มต้นเรียนรู้การเขียนโปรแกรมด้วย Python และยังรองรับ MicroPython ทำให้สามารถเขียนโค้ดและอัปโหลดไปยังบอร์ดไมโครคอนโทรลเลอร์ได้อย่างง่ายดาย

2. อุปกรณ์ที่ต้องใช้

  • คอมพิวเตอร์ (Windows, macOS หรือ Linux)
  • บอร์ดที่รองรับ MicroPython เช่น:
    • ESP32 / ESP8266
    • Raspberry Pi Pico
    • STM32, NRF52 หรือบอร์ดที่รองรับ MicroPython อื่นๆ
  • สาย USB (สำหรับเชื่อมต่อบอร์ดกับคอมพิวเตอร์)
  • Thonny IDE (สำหรับพัฒนาโค้ดและอัปโหลดไปยังบอร์ด)
  • ไฟล์เฟิร์มแวร์ MicroPython ที่เหมาะกับบอร์ดของคุณ

3. วิธีติดตั้ง Thonny IDE

  1. ดาวน์โหลด Thonny IDE จากเว็บไซต์ทางการ: https://thonny.org/
  2. ติดตั้งโปรแกรมตามขั้นตอนที่แสดงบนหน้าจอ
  3. เปิด Thonny ขึ้นมา

4. การติดตั้ง MicroPython บนบอร์ด

ดาวน์โหลดเฟิร์มแวร์ MicroPython

ไปที่เว็บไซต์ MicroPython: https://micropython.org/download/

เลือกบอร์ดที่คุณใช้งาน (เช่น ESP32, Raspberry Pi Pico) และดาวน์โหลดไฟล์ .uf2 หรือ .bin ตามที่บอร์ดรองรับ

แฟลช MicroPython ลงบอร์ด

สำหรับ Raspberry Pi Pico:

  1. กดปุ่ม BOOTSEL บนบอร์ดค้างไว้ และเสียบสาย USB เข้ากับคอมพิวเตอร์
  2. บอร์ดจะถูกตรวจพบเป็นไดรฟ์ USB
  3. คัดลอกไฟล์ .uf2 ที่ดาวน์โหลดมาแล้วลากลงไปในไดรฟ์ USB
  4. บอร์ดจะรีสตาร์ทและพร้อมใช้งาน MicroPython

สำหรับ ESP32 / ESP8266:

  1. ติดตั้งเครื่องมือ esptool.py โดยใช้คำสั่ง:
    pip install esptool
  2. เชื่อมต่อบอร์ด ESP32 หรือ ESP8266 กับคอมพิวเตอร์ผ่าน USB
  3. ใช้คำสั่งแฟลชเฟิร์มแวร์ (ปรับ /dev/ttyUSB0 หรือ COMX ตามพอร์ตที่ใช้งานจริง):
    
    esptool.py --port /dev/ttyUSB0 erase_flash
    esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash -z 0x1000 firmware.bin
                    
  4. รีสตาร์ท บอร์ด

5. ตั้งค่า Thonny IDE สำหรับ MicroPython

  1. เปิด Thonny IDE
  2. ไปที่ "Tools" > "Options..."
  3. เลือกแท็บ "Interpreter"
  4. ที่ช่อง "Which interpreter should Thonny use for running your code?" เลือก:
    • MicroPython (Raspberry Pi Pico) → สำหรับ Raspberry Pi Pico
    • MicroPython (ESP32/ESP8266) → สำหรับ ESP32 หรือ ESP8266
  5. ที่ช่อง "Port" ให้เลือกพอร์ต USB ที่บอร์ดเชื่อมต่อ (ถ้าไม่แน่ใจให้เลือก "Try to detect automatically")
  6. กด OK

6. เขียนโค้ด MicroPython เบื้องต้น

กระพริบ LED บนบอร์ด (Blink LED)

สำหรับ Raspberry Pi Pico:


from machine import Pin
from time import sleep

led = Pin(25, Pin.OUT)  # LED บนบอร์ด Pi Pico

while True:
    led.value(1)  # เปิด LED
    sleep(1)
    led.value(0)  # ปิด LED
    sleep(1)
        

สำหรับ ESP32 / ESP8266:


from machine import Pin
from time import sleep

led = Pin(2, Pin.OUT)  # ใช้ GPIO2 สำหรับ ESP32

while True:
    led.value(1)  # เปิด LED
    sleep(1)
    led.value(0)  # ปิด LED
    sleep(1)
        

บทสรุป

Thonny IDE เป็นเครื่องมือที่ง่ายสำหรับเริ่มต้นใช้งาน MicroPython และ MicroPython ทำให้การเขียนโปรแกรมบนไมโครคอนโทรลเลอร์ง่ายขึ้น สามารถใช้งานได้กับบอร์ดหลายประเภท เช่น ESP32, ESP8266, Raspberry Pi Pico และสามารถควบคุมอุปกรณ์ต่างๆ ได้ เช่น LED, Wi-Fi, เซ็นเซอร์ หากคุณเป็นมือใหม่ Thonny IDE เป็นตัวเลือกที่ดีที่สุดในการเริ่มต้น! 🚀

การใช้ Web Serial API สำหรับการติดต่อกับ Serial Port

Web Serial API เป็นเทคโนโลยีที่ช่วยให้เว็บแอปพลิเคชันสามารถสื่อสารกับอุปกรณ์ผ่านพอร์ตอนุกรม (Serial Port) ได้โดยตรงผ่านเบราว์เซอร์ โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม เทคโนโลยีนี้มีประโยชน์อย่างมากสำหรับการพัฒนาแอปพลิเคชัน IoT, การควบคุมอุปกรณ์ฮาร์ดแวร์, หรือการติดต่ออุปกรณ์ผ่านเว็บเบราว์เซอร์


ข้อดีของ Web Serial API

  1. ไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม: ผู้ใช้สามารถใช้งานได้ทันทีผ่านเบราว์เซอร์ที่รองรับ

  2. รองรับหลายแพลตฟอร์ม: ทำงานได้บน Windows, macOS, Linux และ Chrome OS

  3. ปลอดภัย: ต้องได้รับอนุญาตจากผู้ใช้ก่อนจึงจะสามารถเข้าถึง Serial Port ได้

  4. ง่ายต่อการพัฒนา: ใช้ JavaScript เพื่อสื่อสารกับอุปกรณ์


ขั้นตอนการทำงาน

  1. ขออนุญาตเข้าถึง Serial Port: ใช้ navigator.serial.requestPort() เพื่อขออนุญาตจากผู้ใช้

  2. เปิดการเชื่อมต่อ: กำหนดค่า Baud Rate และเปิดพอร์ต

  3. อ่าน/เขียนข้อมูล: ใช้ reader และ writer เพื่อรับและส่งข้อมูล

  4. ปิดการเชื่อมต่อ: ปิดพอร์ตเมื่อไม่ใช้งาน

ทดสอบการใช้งาน

Web Serial Terminal