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

Micropython với WebREPL | Học ARM
Hello anh em, lâu lắm rồi mới lại về lại series học tập sau thời gian dài ngủ đông, bắt đầu lại với serie micropython để khởi động cho nóng người thôi. MicroPython và ESP8266 | Học ARMMicropython và ESP8266 có liên quan gì với nhau? Python có thể chạy được trên các phần cứng nhúng được không ? Hẳn …

Series tổng hợp Micropython tại đây nhá

Học Micropython cơ bản | Học ARM
Hello anh em, lại là mình đây, sau khi hoàn thành serie micropython thì đây sẽ là bài tổng hợp của mình tóm gọn nhẹ nhàng tình cảm lại cho anh em có thể theo dõi. Micropython về cơ bản là dễ, dễ hiểu dễ đọc, dễ làm, nhanh gọn lẹ và có thể nói là giống mì ăn liền như Arduino. Tùy mỗi người một mục đ…

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

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

Để 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é