Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny

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

Thông tin cơ bản của mạch ESP32 MicroPython
Hạng mụcThông tin
Vi điều khiểnESP32 hai nhân 32 bit, có Wi-Fi và Bluetooth; GPIO mức 3,3 V
Cổng USBType-C hoặc Micro USB tùy phiên bản
Chip USB–UARTHọ CH340 trên bản Micro USB trong ảnh; bản khác thì đọc chữ in trên chip
Hàng chân2 × 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ạchNối với chân 22 (mặt sau in 22/LED), sáng ở mức 0
Nút nhấnChỉ 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
Ảnh thực tế mạch ESP32 MicroPython ESP32 Lite V1.0.0 bản Micro USB nhìn từ mặt trên
Ảnh thực tế mạch ESP32 MicroPython (ESP32 Lite V1.0.0), bản Micro USB.
Sơ đồ chân mạch ESP32 Lite V1.0.0: LED chân 22, I2C chân 18 và 19, nút nhấn chân 27
Sơ đồ chân ESP32 Lite V1.0.0 nhìn từ mặt trên (hình vẽ minh họa); chân tô màu là chân dùng trong bài.

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

  1. Cắm mạch vào máy tính, mở Device Manager và xem mục Ports (COM & LPT).
  2. 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.
  3. 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.

  1. Vào Tools > Options..., chọn thẻ Interpreter rồi chọn MicroPython (ESP32) ở danh sách phía trên.
  2. Bấm liên kết Install or update MicroPython (esptool) ở góc dưới bên phải.
  3. 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.
  4. 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.
  5. Bấm Install, chờ hiện Done! rồi đóng hộp thoại.
  6. Ở 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.

Hình minh họa Thonny kết nối với mạch ESP32 MicroPython qua cáp USB và REPL
Hình vẽ minh họa (không phải ảnh chụp màn hình): Thonny gửi lệnh qua cáp USB tới REPL trên mạch.
>>> 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
  1. Chọn File > New và chép chương trình trên vào cửa sổ soạn thảo.
  2. 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.
  3. 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.
  4. 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

Nối nút nhấn và module I2C với mạch ESP32 Lite
Linh kiệnChân linh kiệnESP32 Lite
Nút nhấnHai chân của nút27 và G
Module I2CVCC3V
Module I2CGNDG (chia chung qua breadboard)
Module I2CSCL18
Module I2CSDA19
Sơ đồ nối nút nhấn và màn hình OLED I2C với mạch ESP32 Lite chạy MicroPython
Sơ đồ nối nút nhấn và module I2C với mạch ESP32 Lite (hình vẽ minh họa).

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.py chạ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ùng except: 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.


Tin tức liên quan

Hướng dẫn bắt đầu với Wemos D1 R2 (ESP8266) trên Arduino IDE
Hướng dẫn bắt đầu với Wemos D1 R2 (ESP8266) trên Arduino IDE

4 Lượt xem

Hướng dẫn dùng Wemos D1 R2 (ESP8266 khung Arduino UNO) với Arduino IDE 2.x: sơ đồ chân, cài driver CH340 và gói board ESP8266, nạp code nháy LED, kết nối WiFi và xử lý lỗi thường gặp.

Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ
Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ

3 Lượt xem

Hướng dẫn dùng mạch tạo trễ NE555 có relay bản 5 V và 12 V: nguyên lý tạo trễ, ý nghĩa các cọc VCC, GND, COM, CK, CB, cách chỉnh thời gian trễ, sơ đồ đấu dây và xử lý lỗi thường gặp.

Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32
Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32

5 Lượt xem

So sánh mạch hạ áp LM2596 và MP1584, cách chỉnh điện áp ra bằng đồng hồ vạn năng trước khi nối tải, cấp nguồn 5 V cho ESP32 DevKit V1 từ nguồn 12 V và xử lý lỗi thường gặp.

Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi
Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi

6 Lượt xem

Hướng dẫn dùng ESP32 DevKit V1 làm web server trong mạng WiFi nội bộ, mở trang trên điện thoại để bật, tắt module relay 4 kênh; có sơ đồ nối dây, code Arduino IDE và lưu ý an toàn.

Hướng dẫn dùng module thẻ nhớ Micro SD với ESP32
Hướng dẫn dùng module thẻ nhớ Micro SD với ESP32

6 Lượt xem

Hướng dẫn nối module thẻ nhớ Micro SD với ESP32 DevKit V1 qua SPI, định dạng thẻ FAT32, chạy code Arduino đọc ghi file, ghi dữ liệu định kỳ ra CSV và xử lý lỗi Card Mount Failed.

Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32
Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32

5 Lượt xem

Hướng dẫn nối màn hình OLED 1.3 inch SH1106 với ESP32 DevKit V1 qua I2C, cài thư viện Adafruit SH110X, chạy code hiển thị chữ và xử lý lỗi thường gặp.

Hướng dẫn dùng màn hình LCD 2004 I2C với ESP32
Hướng dẫn dùng màn hình LCD 2004 I2C với ESP32

5 Lượt xem

Hướng dẫn nối màn hình LCD 2004 I2C (mạch PCF8574) với ESP32 DevKit V1, quét địa chỉ I2C, hiển thị 4 dòng chữ, tạo ký tự riêng, làm bộ đếm thời gian và đổi sang LCD 1602.

Hướng dẫn dùng thanh cảm biến dò line 5 kênh TCRT5000 với ESP32
Hướng dẫn dùng thanh cảm biến dò line 5 kênh TCRT5000 với ESP32

4 Lượt xem

Hướng dẫn nối thanh dò line 5 kênh TCRT5000 (BFD-1000) với ESP32 DevKit V1, đọc trạng thái 5 kênh trên Serial Monitor, tính vị trí vạch và gợi ý hướng lái cho xe dò line.


Bình luận
Đã thêm vào giỏ hàng