MicroPython cho học sinh: dòng lệnh Python đầu tiên trên ESP32
Hướng dẫn học sinh viết những dòng MicroPython đầu tiên trên ESP32 với Thonny: gõ lệnh trong Shell, bật tắt đèn, nháy đèn, chạm tay bật đèn, trò đoán số, lưu main.py.
MicroPython là ngôn ngữ Python thu gọn chạy ngay trên con chip ESP32. Điểm đặc biệt nhất với học sinh: gõ một dòng lệnh, bấm Enter là mạch làm ngay, không phải chờ biên dịch. Gõ den.on(), đèn sáng; gõ 7 * 8, mạch trả lời 56. Bài viết hướng dẫn học sinh đã biết Scratch hoặc mới làm quen Python viết những dòng lệnh đầu tiên trên ESP32, rồi làm ba chương trình nhỏ: nháy đèn, chạm tay bật đèn và trò chơi đoán số.
1. Chuẩn bị
- Một mạch ESP32 DevKit V1 hoặc mạch ESP32 MicroPython, và dây USB nạp code loại có dây dữ liệu.
- Một dây cắm test board cho chương trình chạm tay.
- Máy tính cài Thonny (trang thonny.org), trình soạn thảo Python cho người mới học.
Các chương trình trong bài dùng đèn LED có sẵn ở chân 2 và chân cảm ứng 4 của ESP32 DevKit V1. Nếu dùng mạch khác, kiểm tra lại chân đèn trên mạch.
2. 5 bước bắt đầu

- Cài Thonny trên máy tính.
- Cắm ESP32 vào máy tính. Máy tính phải nhận được một cổng COM; mạch ESP32 DevKit V1 dùng chip CP2102 nên có thể cần cài driver CP210x.
- Nạp firmware MicroPython (chỉ làm một lần cho mỗi mạch): trong Thonny vào Run > Configure interpreter, chọn MicroPython (ESP32), chọn cổng, bấm dòng Install or update MicroPython rồi làm theo hướng dẫn. Cách làm chi tiết có ở bài bắt đầu MicroPython với Thonny ở cuối bài.
- Gõ lệnh ở Shell, ô phía dưới cửa sổ Thonny.
- Lưu thành main.py trên mạch để chương trình tự chạy mỗi khi cấp điện.
Muốn quay lại dùng Arduino IDE, chỉ cần nạp một chương trình Arduino như bình thường; firmware MicroPython sẽ bị thay thế.
3. Những dòng lệnh đầu tiên trong Shell

Dấu >>> là dấu nhắc: mạch đang chờ lệnh. Cho trẻ gõ thử từng dòng:
- Máy tính bỏ túi:
2 + 3,7 * 8,100 / 4(phép chia luôn ra số thập phân),2 ** 10(2 mũ 10). - Biến và chữ:
ten = "An"rồiprint("Xin chao", ten). Chữ đặt trong ngoặc kép. - Điều khiển đèn:
from machine import Pinmở hộp công cụ điều khiển chân;den = Pin(2, Pin.OUT)đặt tên cho đèn ở chân 2;den.on(),den.off()bật, tắt đèn.
Đây là khoảnh khắc đáng nhớ nhất với trẻ: một dòng chữ mình gõ làm một chiếc đèn thật bật sáng.
4. Chương trình 1: nháy đèn 10 lần
Gõ từng dòng vào Shell thì mỗi lần chỉ làm một việc. Muốn mạch làm cả chuỗi việc, viết chúng thành chương trình ở ô soạn thảo phía trên của Thonny rồi bấm Run:
# PYWORLD.VN - MicroPython trên ESP32 DevKit V1: nháy đèn 10 lần
# Đèn LED có sẵn trên mạch ở chân 2
# Lưu với tên main.py để mạch tự chạy mỗi khi cấp điện
from machine import Pin
import time
den = Pin(2, Pin.OUT)
for lan in range(1, 11):
den.on()
time.sleep(0.5)
den.off()
time.sleep(0.5)
print("Da nhay lan", lan)
print("Xong!")
for lan in range(1, 11):lặp vớilanlần lượt bằng 1, 2, …, 10. Các lệnh lùi vào 4 dấu cách là phần được lặp lại.time.sleep(0.5)đợi nửa giây, giống khối "đợi 0.5 giây" của Scratch.

5. Chương trình 2: chạm tay bật, tắt đèn
Cắm một dây vào chân 4 (D4), đầu kia để trống. Chạy chương trình khi tay không chạm vào dây:
# PYWORLD.VN - MicroPython trên ESP32 DevKit V1: chạm tay vào dây ở chân 4 để bật, tắt đèn
# Chân 4 là chân cảm ứng; lúc chạy chương trình không chạm tay vào dây
# Bấm nút Stop trong Thonny để dừng
from machine import Pin, TouchPad
import time
den = Pin(2, Pin.OUT)
cam_ung = TouchPad(Pin(4))
# Đo giá trị nền khi chưa chạm: lấy trung bình 20 lần
tong = 0
for i in range(20):
tong += cam_ung.read()
time.sleep_ms(5)
nen = tong / 20
print("Gia tri nen:", nen)
dang_cham = False
while True:
lech = abs(cam_ung.read() - nen) / nen # độ lệch so với giá trị nền
if lech > 0.3 and not dang_cham: # vừa chạm vào
dang_cham = True
den.value(not den.value()) # đổi trạng thái đèn
print("Cham! Den", "sang" if den.value() else "tat")
elif lech < 0.15: # đã nhả tay
dang_cham = False
time.sleep_ms(50)
TouchPad(Pin(4))biến chân 4 thành nút cảm ứng;read()trả về một con số thay đổi khi ngón tay chạm vào dây.- Chương trình đo giá trị nền lúc chưa chạm, rồi so độ lệch: lệch hơn 30 % là đang chạm, dưới 15 % là đã nhả. Cách làm này giống hệt bản Arduino trong bài chạm tay bật đèn.
while True:lặp mãi, giống khối "liên tục". Bấm nút Stop của Thonny để dừng.
6. Chương trình 3: trò chơi đoán số
Lệnh input() chờ người chơi gõ vào ô Shell của Thonny. Mạch nghĩ một số từ 1 đến 100, người chơi đoán; mỗi lần sai, đèn nháy một cái và mạch gợi ý "lớn hơn" hay "nhỏ hơn":
# PYWORLD.VN - MicroPython trên ESP32: trò chơi đoán số từ 1 đến 100
# Gõ số vào ô Shell của Thonny rồi bấm Enter
# Mỗi lần đoán sai, đèn trên mạch nháy một cái; đoán đúng thì đèn sáng luôn
import random
import time
from machine import Pin
den = Pin(2, Pin.OUT)
so_bi_mat = random.randint(1, 100)
so_lan = 0
print("May dang nghi mot so tu 1 den 100. Ban doan xem!")
while True:
doan = int(input("So ban doan: "))
so_lan = so_lan + 1
if doan == so_bi_mat:
print("Dung roi! Ban doan", so_lan, "lan.")
den.on()
break
elif doan < so_bi_mat:
print("Lon hon nua!")
else:
print("Nho hon nua!")
den.on()
time.sleep(0.2)
den.off()
Hỏi trẻ: cần đoán nhiều nhất mấy lần thì chắc chắn trúng? Đoán số ở giữa khoảng còn lại (50, rồi 25 hoặc 75…) thì không quá 7 lần. Đây chính là thuật toán tìm kiếm nhị phân.
7. Cho chương trình tự chạy: lưu thành main.py
- Trong Thonny chọn File > Save as, chọn lưu vào MicroPython device, đặt tên
main.py. - Mỗi khi cấp điện (kể cả bằng sạc dự phòng), mạch tự chạy
main.py, không cần máy tính. - Chương trình chạy mãi (như chương trình chạm tay) mà muốn sửa thì bấm Stop trong Thonny để dừng rồi mở lại file.
8. Lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Thonny không thấy cổng COM | Cáp USB chỉ sạc, không có dây dữ liệu; thiếu driver CP210x | Đổi cáp có dây dữ liệu; cài driver rồi cắm lại |
ImportError: no module named 'machine' | Thonny đang chạy Python của máy tính, chưa chọn MicroPython (ESP32) | Run > Configure interpreter, chọn MicroPython (ESP32) và đúng cổng |
Shell không nhận lệnh, không thấy >>> | Chương trình cũ đang chạy | Bấm Stop trong Thonny, hoặc bấm nút EN trên mạch |
IndentationError | Thụt lề không đều | Các dòng bên trong for, while, if lùi đúng 4 dấu cách |
| Chạm dây không có tác dụng | Lúc chạy chương trình đang chạm dây, giá trị nền sai | Bỏ tay ra, chạy lại chương trình |
9. Gợi ý cho phụ huynh và giáo viên
- Độ tuổi: học sinh khoảng 11–15 tuổi, đã quen Scratch hoặc đã học vài buổi Python trên máy tính.
- Bắt đầu bằng Shell: 15 phút đầu chỉ gõ lệnh trong Shell, chưa viết chương trình. Trẻ sẽ thấy lập trình là "nói chuyện" với máy.
- Thử thách: sửa chương trình nháy đèn thành mã Morse tên của mình; sửa trò đoán số cho mạch đếm và in ra số lần đoán trung bình sau nhiều ván.
- Thời lượng: 2 buổi 45 phút: buổi 1 cài đặt, Shell, nháy đèn; buổi 2 chạm tay, đoán số, lưu main.py.
10. Xem thêm
- Hướng dẫn bắt đầu MicroPython trên ESP32 với Thonny (nạp firmware chi tiết)
- Chạm tay bật đèn: nút cảm ứng trên ESP32 (bản Arduino)
- Thuật toán qua trò chơi cho trẻ: đoán số, xếp hàng, tìm đường
- Bài đầu tiên với ESP32: đèn nhấp nháy và mã Morse
- Trong cùng loạt còn có bài từ Scratch sang Python: khi nào chuyển, khối nào ứng với lệnh nào.
Xem thêm