Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny
- 1. MicroPython là gì, khi nào chọn thay cho Arduino?
- 2. Tìm hiểu mạch ESP32 Lite V1.0.0
- 3. Cần chuẩn bị
- 4. Cài driver USB và tìm cổng COM
- 5. Cài Thonny và nạp firmware MicroPython
- 6. Làm quen với REPL
- 7. Nháy LED và lưu main.py để tự chạy khi cấp nguồn
- 8. Đọc nút nhấn bằng điện trở kéo lên bên trong
- 9. Quét I2C và hiện chữ lên OLED, LCD
- 10. Xử lý lỗi thường gặp
Hướng dẫn cài driver, cài Thonny và nạp firmware MicroPython cho mạch ESP32 Lite, dùng REPL, nháy LED, lưu main.py, đọc nút nhấn, quét I2C và xử lý lỗi thường gặp.
Mạch ESP32 MicroPython của PYWORLD là bo ESP32 Lite V1.0.0 nhỏ gọn, có cổng USB Type-C hoặc Micro USB và LED trên mạch. Bài viết hướng dẫn người mới cài driver, cài Thonny, nạp firmware MicroPython, dùng REPL, nháy LED, lưu main.py để tự chạy khi cấp nguồn, đọc nút nhấn và quét I2C.
1. MicroPython là gì, khi nào chọn thay cho Arduino?
MicroPython là bản Python thu gọn chạy ngay trên vi điều khiển; phần giới thiệu và danh sách firmware có ở trang MicroPython của PYWORLD. Chương trình là file .py lưu trên mạch, và có thể gõ từng lệnh để thử mà không phải biên dịch rồi nạp lại như Arduino.
- Chọn MicroPython khi học lập trình, cần thử nhanh cảm biến hoặc thường xuyên sửa chương trình.
- Chọn Arduino (C/C++) khi cần tốc độ cao, thời gian chính xác hoặc thư viện có sẵn cho module chuyên dụng.
Cùng một mạch có thể nạp lại MicroPython hoặc Arduino bất cứ lúc nào.
2. Tìm hiểu mạch ESP32 Lite V1.0.0
| Hạng mục | Thông tin |
|---|---|
| Vi điều khiển | ESP32 hai nhân 32 bit, có Wi-Fi và Bluetooth; GPIO mức 3,3 V |
| Cổng USB | Type-C hoặc Micro USB tùy phiên bản |
| Chip USB–UART | Họ CH340 trên bản Micro USB trong ảnh; bản khác thì đọc chữ in trên chip |
| Hàng chân | 2 × 13 chân, bố trí kiểu LOLIN32 Lite; chỉ có một chân G (GND), một chân 3V, không có chân 5 V |
| LED trên mạch | Nối với chân 22 (mặt sau in 22/LED), sáng ở mức 0 |
| Nút nhấn | Chỉ có nút RST để khởi động lại, không có nút BOOT |
| Cổng pin | Đầu cắm 2 chân; xem dấu + in cạnh cổng trước khi cắm pin |
Số in cạnh mỗi chân là số GPIO, ví dụ chân 22 là GPIO22. Chân in số 5 là GPIO5, không phải nguồn 5 V. Các chân VP, VN, 34, 35 chỉ làm ngõ vào và không có điện trở kéo lên bên trong.
3. Cần chuẩn bị
- Mạch ESP32 MicroPython, bản Type-C hoặc Micro USB; cần hàn hàng chân nếu làm mục 8 và 9.
- Cáp USB có dây truyền dữ liệu (cáp chỉ sạc không tạo ra cổng COM).
- Máy tính Windows 10 hoặc 11 có Internet.
- Cho mục 8 và 9: breadboard, nút nhấn, dây jumper và một module I2C như màn hình OLED 0,96 inch SSD1306.
4. Cài driver USB và tìm cổng COM
- Cắm mạch vào máy tính, mở Device Manager và xem mục Ports (COM & LPT).
- Nếu có cổng mới, ví dụ USB-SERIAL CH340 (COM5), driver đã sẵn sàng; ghi lại số cổng COM.
- Nếu không có cổng mới hoặc thiết bị hiện dấu chấm than, tải driver đúng với chip USB–UART ở trang Driver của PYWORLD, cài đặt rồi cắm lại mạch.
5. Cài Thonny và nạp firmware MicroPython
Thonny là phần mềm soạn thảo Python miễn phí, có sẵn công cụ nạp firmware và REPL; tải tại thonny.org. Tên menu dưới đây theo Thonny 5.0, giao diện tiếng Anh.
- Vào Tools > Options..., chọn thẻ Interpreter rồi chọn MicroPython (ESP32) ở danh sách phía trên.
- Bấm liên kết Install or update MicroPython (esptool) ở góc dưới bên phải.
- Trong hộp thoại vừa mở, chọn Target port là cổng COM của mạch, MicroPython family là ESP32, variant là Espressif • ESP32 / WROOM; giữ version mới nhất.
- Giữ dấu chọn Erase all flash before installing (not just the write areas); thao tác này xóa mọi chương trình và file đang có trên mạch.
- Bấm Install, chờ hiện Done! rồi đóng hộp thoại.
- Ở mục Port or WebREPL, chọn cổng COM của mạch rồi bấm OK.
Thonny tải firmware từ micropython.org nên cần Internet. Để dùng file .bin tải sẵn (bản ESP32_GENERIC ở trang MicroPython, không dùng bản SPIRAM), bấm nút ≡ cạnh nút Install, chọn Select local MicroPython image ... và vẫn chọn family ESP32. Nếu Thonny báo không kết nối được với mạch, xem mục 10.
6. Làm quen với REPL
Sau khi kết nối, khung Shell ở phía dưới Thonny hiện dấu nhắc >>>. Đây là REPL: gõ một lệnh, nhấn Enter và mạch thực hiện ngay.
>>> print("Xin chao tu ESP32")
Xin chao tu ESP32
>>> from machine import Pin
>>> led = Pin(22, Pin.OUT)
>>> led.value(0)
>>> led.value(1)
led.value(0) làm LED trên mạch sáng, led.value(1) làm LED tắt, vì LED của mạch này sáng ở mức 0. Trong Shell, Ctrl+C dừng chương trình đang chạy, Ctrl+D khởi động mềm lại MicroPython.
7. Nháy LED và lưu main.py để tự chạy khi cấp nguồn
# PYWORLD.VN - ESP32 Lite: nháy LED trên mạch (chân 22)
from machine import Pin
import time
LED_ON = 0 # LED trên mạch sáng ở mức 0
LED_OFF = 1
led = Pin(22, Pin.OUT, value=LED_OFF)
while True:
led.value(LED_ON)
time.sleep_ms(200) # sáng 0,2 giây
led.value(LED_OFF)
time.sleep_ms(800) # tắt 0,8 giây
- Chọn File > New và chép chương trình trên vào cửa sổ soạn thảo.
- Chọn File > Save as..., bấm MicroPython device ở hộp thoại Where to save to? rồi đặt tên file là
main.py. - Bấm Run current script (F5): LED sáng 0,2 giây, tắt 0,8 giây. Nếu thấy ngược lại (sáng lâu, tắt ngắn), đổi thành
LED_ON = 1,LED_OFF = 0. - Rút cáp rồi cắm lại, hoặc nhấn nút RST: chương trình tự chạy mà không cần Thonny.
Khi khởi động, MicroPython chạy boot.py (nếu có) rồi main.py, sau đó mới vào REPL; vì vậy file cần tự chạy phải có tên main.py. Muốn sửa chương trình đang chạy, nhấn Ctrl+C trong Shell hoặc bấm Stop/Restart backend rồi mới lưu lại.
8. Đọc nút nhấn bằng điện trở kéo lên bên trong
| Linh kiện | Chân linh kiện | ESP32 Lite |
|---|---|---|
| Nút nhấn | Hai chân của nút | 27 và G |
| Module I2C | VCC | 3V |
| Module I2C | GND | G (chia chung qua breadboard) |
| Module I2C | SCL | 18 |
| Module I2C | SDA | 19 |
Rút cáp USB trước khi nối dây. Với nút nhấn 4 chân, dùng hai chân nằm chéo nhau.
# PYWORLD.VN - ESP32 Lite: đọc nút nhấn nối giữa chân 27 và G
from machine import Pin
import time
LED_ON = 0
LED_OFF = 1
led = Pin(22, Pin.OUT, value=LED_OFF)
button = Pin(27, Pin.IN, Pin.PULL_UP) # thả nút = 1, nhấn nút = 0
last = 1
while True:
state = button.value()
if state != last:
last = state
if state == 0:
led.value(LED_ON)
print("Nut duoc nhan")
else:
led.value(LED_OFF)
print("Nut duoc tha")
time.sleep_ms(20) # đọc mỗi 20 ms để bỏ qua dội phím
Pin(27, Pin.IN, Pin.PULL_UP) bật điện trở kéo lên bên trong ESP32 nên không cần điện trở ngoài: thả nút thì chân 27 đọc 1, nhấn nút thì đọc 0. Chương trình đọc nút mỗi 20 ms, bật LED khi nhấn và in Nut duoc nhan, Nut duoc tha ra Shell.
9. Quét I2C và hiện chữ lên OLED, LCD
Mạch ESP32 Lite không có chân 21 và chân 22 đã nối LED, nên bài viết dùng cặp chân mặc định của bus I2C(0) trong MicroPython: SCL = 18, SDA = 19.
# PYWORLD.VN - ESP32 Lite: quét bus I2C (SCL = chân 18, SDA = chân 19)
from machine import Pin, I2C
i2c = I2C(0, scl=Pin(18), sda=Pin(19), freq=100000)
addresses = i2c.scan()
if not addresses:
print("Khong tim thay thiet bi I2C nao.")
for address in addresses:
print("Tim thay thiet bi: 0x%02X" % address)
Màn hình OLED SSD1306 thường cho kết quả Tim thay thiet bi: 0x3C. Để hiện chữ, tải file ssd1306.py từ thư viện micropython-lib, lưu vào mạch với đúng tên đó theo cách ở mục 7, rồi chạy:
# PYWORLD.VN - ESP32 Lite: hiện chữ trên OLED SSD1306 (cần file ssd1306.py trên mạch)
from machine import Pin, I2C
import ssd1306
i2c = I2C(0, scl=Pin(18), sda=Pin(19))
display = ssd1306.SSD1306_I2C(128, 64, i2c) # địa chỉ mặc định 0x3C
display.fill(0)
display.text("PYWORLD.VN", 0, 0, 1)
display.text("MicroPython OK", 0, 16, 1)
display.show()
Với LCD 1602 I2C, xem thư viện và chương trình mẫu trong bài HX711 với load cell và LCD 1602 bằng MicroPython; khi dùng mạch ESP32 Lite, đổi thành SDA = 19, SCL = 18. Mạch không có chân 5 V, nên module 5 V cần nguồn riêng, nối chung GND và không để SDA, SCL bị kéo lên 5 V. Các lệnh khác có trong tài liệu MicroPython cho ESP32 (tiếng Anh).
10. Xử lý lỗi thường gặp
- Không thấy cổng COM: đổi cáp USB có dây dữ liệu, đổi cổng USB trên máy tính, cài driver như mục 4.
- Nạp firmware báo không kết nối được: đóng phần mềm khác đang mở cổng COM rồi thử lại. Nếu vẫn lỗi, đưa mạch vào chế độ nạp bằng tay rồi bấm Install lại. Mạch có nút BOOT: giữ BOOT, nhấn rồi thả nút reset, sau đó thả BOOT. Mạch ESP32 Lite chỉ có nút RST: nối chân 0 với G bằng dây jumper rồi nhấn RST; nạp xong tháo dây và nhấn RST lần nữa.
- Shell hiện ký tự lạ, không có
>>>: nhấn RST rồi bấm Stop/Restart backend (Ctrl+F2). Nếu không hết, nạp lại firmware đúng ESP32 và Espressif • ESP32 / WROOM, có xóa flash. Phần mềm terminal khác phải đặt 115200 baud. main.pychạy vòng lặp nên không gõ được lệnh, hoặc Thonny báo Device is busy khi lưu file: nhấn Ctrl+C trong Shell để dừng chương trình. Không dùngexcept:trống trong vòng lặp vô hạn vì lệnh này bắt cả Ctrl+C; nếu không dừng được, nạp lại firmware có xóa flash.- Quét I2C không thấy thiết bị: kiểm tra nguồn 3V và G, thử đổi chỗ SCL và SDA. Module không có sẵn điện trở kéo lên cần thêm 4,7 kΩ từ SDA và SCL lên 3V.
Xem thêm: HX711 với load cell và LCD 1602 bằng MicroPython, nạp file .bin vào ESP32 bằng Flash Download Tool, trang Download (firmware, driver) và sản phẩm Mạch ESP32 MicroPython.
Xem thêm