Micropython và GPIO
Trong bài trước chúng ta đã biết được cách để setup môi trường lập trình micropython rồi, giờ chúng ta thử lập trình GPIO cơ bản với micropython xem thế nào
Nếu các bạn đã lỡ bỏ qua bài đầu tiên trong series micropython thì có thể quay lại bài viết sau
Series tổng hợp Micropython tại đây nhá
Trong bài viết này, đơn giản chỉ là blink LED thông qua Python shell dùng micropython firmware.
Có 2 cách để chúng ta làm việc này.
- Cách 1 là kết nối với kit esp8266 nodemcu thông qua Teraterm và viết chương trình trên đó
- Cách 2 là viết sẵn 1 file
.py
, sau đó load xuống WebREPL và chạy, mình thích cách này hơn
Đầu tiên chúng ta sẽ xem lại layout của board NodeMCU ESP8266 thông qua hình bên dưới
Bạn có thể dùng các chân 0, 2, 4, 5, 12, 13, 14, 15, và 16.
GPIO LED
Viết chương trình blink qua Teraterm
Chương trình blink LED mặc định của kit qua COM và teraterm
from machine import Pin
led = Pin(2, Pin.OUT)
led.value(0)
led.value(1)
led.value()
Kết quả bạn có thể thấy LED chớp tắt và value chân pin cuối cùng là 1
Để led blink liên tục thì ta có thể điều chỉnh code một chút
from machine import Pin
import time
led = Pin(2, Pin.OUT)
while 1:
led.value(1)
time.sleep(2)
led.value(0)
time.sleep(2)
Kết quả bạn có thể thấy LED đã chớp tắt liên tục.
Ôi copy từng line mỏi tay quá các bạn à, đổi phương án về cách 2 thôi
Upload chương trình blink với WebREPL
Để chương trình có thể upload với WebREPL thì mình phải điều chỉnh code một chút xíu nữa, mình tạo 1 file có tên gpio_script.py
như sau
from machine import Pin
import time
def run():
led = Pin(2, Pin.OUT)
while 1:
led.value(1)
time.sleep(2)
led.value(0)
time.sleep(2)
Giờ thì các bạn có thể load file này xuống thông qua nút Send to device rồi.
Lưu ý nhớ connect device trước khi send file nhé, send xong có kết quả như này là ổn
Giờ thì bạn có thể chạy command sau trên WebREPL và quan sát kết quả
>>> import gpio_script
>>> gpio_script.run()
Vì bộ nhớ của các board dùng micropython khá là giới hạn nên chúng ta phải xóa các file nếu không còn dùng đến nữa
Ví dụ để xóa file vừa tạo là gpio_script.py
thì dùng lệnh sau
import os
os.remove('gpio_script.py')
Để biết chúng ta còn bao nhiêu file chưa xóa thì các bạn có thể sử dụng lệnh sau
import os
os.listdir()
Danh sách các lệnh tham khảo cho os có tại đây.
Điều khiển led với nút nhấn
Thông thường khi nói tới GPIO thì ta có thể điều khiển được I/O của kit Micropython. Với Micropython hiện tại base trên NodeMCU ESP8266 thì các chân có thể sử dụng được là 0, 1, 2, 3, 4, 5, 12, 13, 14,15, 16, tương ứng với các chân IO thực tế của ESP8266 chip.
Ở ví dụ trên chúng ta đã thực hiện blink led rồi, giờ thì tăng cấp độ lên 1 chút với nút nhấn và LED, bài toán đơn giản ấn nút sáng LED với chân GPIO5 nối với LED và GPIO4 với nút nhấn
Chương trình
Mình sẽ viết 1 chương trình python như sau
from machine import Pin
def run():
print('Button LED digital I/O')
led = Pin(5, Pin.OUT) # create output pin on GPIO5
button = Pin(4, Pin.IN) # create output pin on GPIO4
while 1:
state = button.value()
if state > 0:
led.value(1)
else:
led.value(0)
Sau đó chúng ta sẽ load file này xuống thông qua webREPL và thử chạy với lệnh sau và xem kết quả sau khi ấn nút
>>> import gpio_ledbut
>>> gpio_ledbut.run()
Button LED digital I/O
Kết
Ok hôm nay tới đây cho nhẹ nhàng, bạn có thể viết được vài đoạn code để điều khiển IO với micropython rồi, có thể tăng độ khó cho game bằng cách biến hóa tùy ý thêm các đoạn code khác nhau với IO để mình có thể thử nghiệm tiếp. Cùng chờ đón bài tiếp theo PWM và analog nhé