MicroPython trên ESP32: Lập trình IoT ‘nhanh như chớp’ cho dân Dev phần mềm

Python tutorial - IT technology blog
Python tutorial - IT technology blog

Chạy code đầu tiên trên ESP32 trong 5 phút

Trước đây, nhắc đến lập trình nhúng là mình “né” ngay vì đống syntax C++ loằng ngoằng và lỗi tràn bộ nhớ (memory leak) cực kỳ khó debug. MicroPython đã thay đổi hoàn toàn cuộc chơi này. Giờ đây, bạn có thể điều khiển đèn LED hay đọc cảm biến chỉ bằng vài dòng code Python ngắn gọn, sạch sẽ.

Để bắt đầu, hãy chuẩn bị bộ kit cơ bản sau:

  • Board ESP32: Ưu tiên loại DevKit V1 (giá khoảng 80k – 100k VNĐ).
  • Cáp Micro-USB: Loại có khả năng truyền dữ liệu (data cable).
  • Thonny IDE: Công cụ siêu nhẹ, cài đặt là dùng được ngay MicroPython.

Bước 1: Flash Firmware – Nạp “linh hồn” cho chip

Mở Thonny, truy cập Tools > Options > Interpreter và chọn MicroPython (ESP32). Tiếp theo, nhấn Install or update MicroPython. Tại đây, bạn chọn đúng cổng COM và file firmware (.bin) tải từ micropython.org. Quá trình này thường mất chưa đầy 30 giây để hoàn tất.

Mẹo nhỏ: Nếu Thonny không nhận diện được board, hãy nhấn giữ nút BOOT trên ESP32 khi bắt đầu flash.

Bước 2: Viết code “Hello World” thực thụ

Thay vì in dòng chữ ra màn hình, giới phần cứng chào nhau bằng cách làm nhấp nháy đèn LED. Hãy copy đoạn code này vào Thonny:

from machine import Pin
import time

# Chân GPIO 2 thường nối sẵn với LED onboard trên ESP32
led = Pin(2, Pin.OUT)

while True:
    led.value(1)  # Bật LED
    time.sleep(0.5)
    led.value(0)  # Tắt LED
    time.sleep(0.5)

Nhấn F5 và xem thành quả. Chiếc đèn LED nhỏ xíu trên board sẽ chớp tắt đều đặn. Bạn đã chính thức điều khiển được phần cứng rồi đấy!

MicroPython vs Arduino (C++): Tại sao nên chuyển đổi?

Mình từng mất cả buổi sáng chỉ để cấu hình thư viện HTTP trên Arduino. Với MicroPython, tác vụ tương tự chỉ tốn đúng 10 dòng code. Sự khác biệt nằm ở tốc độ triển khai.

Điểm ăn tiền nhất chính là REPL (Read-Eval-Print Loop). Bạn có thể gõ lệnh trực tiếp vào cửa sổ Terminal và board sẽ thực thi ngay lập tức. Không cần chờ biên dịch (compile), không cần nạp lại toàn bộ chương trình. Quy trình prototyping nhờ đó nhanh gấp 3 lần so với cách làm truyền thống.

Với cấu hình Dual Core 240MHz và 520KB RAM, ESP32 dư sức vận hành runtime Python cho các dự án Smart Home hoặc Gateway công nghiệp nhẹ.

Dự án thực tế: Web Server giám sát nhiệt độ

Hãy nâng cấp lên một ứng dụng thực tế hơn: Đọc dữ liệu từ cảm biến DHT11 và đẩy lên giao diện Web do chính ESP32 khởi tạo.

Kết nối phần cứng

  • DHT11 VCC kết nối chân 3.3V của ESP32.
  • DHT11 GND kết nối chân GND.
  • DHT11 DATA kết nối chân GPIO 4.

Script tạo Web Server

import network
import socket
import dht
from machine import Pin

# Cấu hình WiFi
ssid = 'Ten_Wifi_Cua_Ban'
password = 'Mat_Khau_Wifi'

# Kết nối mạng
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

while not wlan.isconnected():
    pass

print('IP của bạn:', wlan.ifconfig()[0])
sensor = dht.DHT11(Pin(4))

def get_html(temp, hum):
    return f"""HTTP/1.1 200 OK\nContent-Type: text/html\n\n
    <html><body><h1>ESP32 Monitor</h1>
    <p>Nhiet do: {temp}C</p><p>Do am: {hum}%</p>
    </body></html>"""

# Khởi tạo Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
    conn, addr = s.accept()
    sensor.measure()
    response = get_html(sensor.temperature(), sensor.humidity())
    conn.send(response)
    conn.close()

Chạy script, mở trình duyệt điện thoại và truy cập địa chỉ IP hiện trên Thonny. Bạn sẽ thấy thông số nhiệt độ phòng cập nhật theo thời gian thực. Một hệ thống Smart Home cơ bản đã hình thành!

3 lưu ý “sống còn” để tránh cháy chip và treo code

Sau nhiều lần làm hỏng board và gặp lỗi không rõ nguyên nhân, mình rút ra 3 bài học đắt giá:

  1. Giải phóng RAM thủ công: MicroPython có Garbage Collector, nhưng với chip nhớ hạn chế, bạn nên chủ động gọi gc.collect() sau khi xử lý các chuỗi JSON lớn hoặc HTML dài.
  2. Tuyệt đối không để vòng lặp “đói”: Đừng bao giờ dùng while True: pass. Hãy luôn thêm time.sleep_ms(10). Điều này giúp CPU có khoảng nghỉ, giảm nhiệt độ chip từ 5-10 độ C và tiết kiệm pin đáng kể.
  3. Xử lý ngoại lệ (Exception Handling): Kết nối IoT thường xuyên bị rớt mạng. Hãy bọc code kết nối trong khối try...except. Nếu không, chỉ cần một lần mất WiFi, toàn bộ thiết bị của bạn sẽ “đứng hình” và cần khởi động lại thủ công.

Mở rộng: Hướng tới hệ thống chuyên nghiệp với MQTT

Web Server chỉ phù hợp cho nhu cầu đơn giản. Nếu muốn quản lý hàng trăm thiết bị, bạn cần MQTT. Đây là giao thức tiêu chuẩn giúp ESP32 giao tiếp với các nền tảng như Home Assistant hay AWS IoT.

Kinh nghiệm của mình khi làm dự án giám sát kho bãi là dùng thư viện umqtt.simple. Thay vì để Client truy cập trực tiếp vào ESP32, board sẽ chủ động đẩy dữ liệu lên Broker (như Mosquitto). Cách này giúp hệ thống bảo mật hơn và không bị quá tải khi nhiều người cùng xem dữ liệu.

Lập trình phần cứng không hề đáng sợ. Với MicroPython, mọi sai lầm đều có thể sửa bằng nút Reset. Hãy bắt đầu ngay hôm nay!

Share: