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ị

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

Năm bước nối bằng mũi tên: 1 cài Thonny, 2 cắm ESP32 bằng cáp USB dữ liệu và máy tính nhận cổng COM, 3 nạp firmware MicroPython một lần duy nhất, 4 gõ lệnh ở Shell, 5 lưu main.py để chương trình tự chạy khi cấp điện
Hình minh họa: từ cài Thonny tới chương trình tự chạy.
  1. Cài Thonny trên máy tính.
  2. 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.
  3. 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.
  4. Gõ lệnh ở Shell, ô phía dưới cửa sổ Thonny.
  5. 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

Cửa sổ Shell với các lệnh: 2 + 3 ra 5, 7 * 8 ra 56, 100 / 4 ra 25.0, 2 ** 10 ra 1024, đặt ten bằng An rồi print Xin chao An, from machine import Pin, den = Pin(2, Pin.OUT), den.on() đèn trên mạch sáng, den.off() đèn tắt
Hình minh họa: dòng xanh là lệnh gõ vào, dòng trắng là máy trả lời.

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ồi print("Xin chao", ten). Chữ đặt trong ngoặc kép.
  • Điều khiển đèn: from machine import Pin mở 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ới lan lầ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.
Ba cột so sánh chương trình nháy đèn 10 lần: khối Scratch lặp lại 10 lần bật đèn đợi tắt đèn đợi; mã MicroPython dùng Pin, for và time.sleep; mã Arduino C++ dùng pinMode, digitalWrite và delay
Hình minh họa: một việc, ba cách viết.

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

Lỗi thường gặp khi bắt đầu MicroPython
Hiện tượngNguyên nhân thường gặpCách xử lý
Thonny không thấy cổng COMCá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ạyBấm Stop trong Thonny, hoặc bấm nút EN trên mạch
IndentationErrorThụt lề không đềuCá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ụngLúc chạy chương trình đang chạm dây, giá trị nền saiBỏ 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


Tin tức liên quan

Cảm biến nhiệt độ: cấu tạo, nguyên lý và cách chế tạo cặp nhiệt điện, RTD, NTC, IC bán dẫn
Cảm biến nhiệt độ: cấu tạo, nguyên lý và cách chế tạo cặp nhiệt điện, RTD, NTC, IC bán dẫn

Cấu tạo, nguyên lý và cách chế tạo năm họ cảm biến nhiệt độ: cặp nhiệt điện, Pt100, NTC, IC bán dẫn, hồng ngoại; cách chọn theo ứng dụng và ví dụ đọc NTC 10 kΩ bằng ESP32.

Vali đựng máy ảnh, ống kính chống sốc: chọn cỡ theo bộ máy và cách xếp xốp
Vali đựng máy ảnh, ống kính chống sốc: chọn cỡ theo bộ máy và cách xếp xốp

Chọn vali đựng máy ảnh, ống kính: liệt kê những gì bộ máy cần chỗ, xếp xốp, đặt ống kính đứng hay nằm, gợi ý cỡ vali chống nước theo bộ máy, chống ẩm và mang lên xe, máy bay.

1-Wire là gì: khe thời gian, mã ROM và cách đọc DS18B20 bằng ESP32
1-Wire là gì: khe thời gian, mã ROM và cách đọc DS18B20 bằng ESP32

Giải thích giao tiếp 1-Wire: một dây dữ liệu, điện trở kéo lên, bốn kiểu khe thời gian, mã ROM 64 bit và CRC. Kèm hai chương trình ESP32 tự viết giao thức để đọc mã ROM và nhiệt độ DS18B20.

Pin LiPo cho flycam: 1S–6S, mAh, C, tính thời gian bay, sạc cân bằng và bảo quản an toàn
Pin LiPo cho flycam: 1S–6S, mAh, C, tính thời gian bay, sạc cân bằng và bảo quản an toàn

Pin LiPo cho flycam: ý nghĩa S, P, mAh, C, điện áp đầy và bảo quản, đường cong xả, cách tính thời gian bay, sạc cân bằng, dấu hiệu pin phồng và quy định mang pin khi đi máy bay.

Truyền động máy CNC: vít me T8, vít me bi, dây đai GT2, cách tính steps/mm và khe hở backlash
Truyền động máy CNC: vít me T8, vít me bi, dây đai GT2, cách tính steps/mm và khe hở backlash

Vít me T8, vít me bi, dây đai GT2 và thanh răng biến vòng quay thành chuyển động thẳng thế nào, cách tính steps/mm, khe hở backlash và cách chọn cơ cấu cho máy CNC, máy laser.

Cấu tạo máy CNC mini và máy khắc laser: khung, ray trượt, truyền động, đầu công cụ, bộ điều khiển
Cấu tạo máy CNC mini và máy khắc laser: khung, ray trượt, truyền động, đầu công cụ, bộ điều khiển

Cấu tạo máy CNC kiểu cổng và máy khắc laser khung hở: khung nhôm định hình, ray dẫn hướng, vít me và dây đai, động cơ bước, spindle, module laser, phần điện và ba kiểu kết cấu.

Học lập trình có lợi gì cho trẻ? Lợi ích thật và những hiểu lầm thường gặp
Học lập trình có lợi gì cho trẻ? Lợi ích thật và những hiểu lầm thường gặp

Học lập trình có lợi gì cho trẻ: sáu lợi ích có cơ sở, nghiên cứu nói gì, sáu hiểu lầm thường gặp và cách phụ huynh nhìn ra tiến bộ thật của con qua năm bậc.

Thực hành hiệu chuẩn load cell bằng quả cân với HX711 và ESP32: khớp đa thức và độ không đảm bảo
Thực hành hiệu chuẩn load cell bằng quả cân với HX711 và ESP32: khớp đa thức và độ không đảm bảo

Tự hiệu chuẩn load cell 5 kg bằng quả cân với HX711, ESP32: ghi điểm kèm độ lệch chuẩn, khớp đa thức bậc 1, bậc 2, lưu hệ số, kiểm tra lại và ước lượng độ không đảm bảo.


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