Vậy là ta đã đi được tới bài viết thứ 3 trong chuỗi series Micropython thần thánh. 2 bài viết trước mình đã nói về việc setup môi trường và dùng WebREPL để lập trình micropython, giờ thì chúng ta sẽ tiếp tục với Analog I/O

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 …

Còn để xem tổng hợp toàn bộ series thì ae có thể tham khảo link sau

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 đ…

Mỗi bài khi bắt đầu mình sẽ luôn để hình chân cẳng ở trên để anh em có thể dễ quan sát, khỏi phải đi qua đi lại post khác cho mệt, ai quan tâm có thể ấn nút Home để quay về đầu trang quan sát nha.

Analog Output (PWM) với RGB LED

Kết nối

Trong bài viết này mình sẽ lập trình điều khiển RGB LED với PWM. 4 chân của RGB LED sẽ được nối theo sơ đồ sau

Chân RGB LED NodeMCU
Chân 1(màu đỏ) D1 (GPIO5)
Chân 2 3V3
Chân 3(màu xanh lá) D2 (GPIO4)
Chân 4(màu xanh dương) D3 (GPIO0)

Để hiển thị một màu nhất định, chúng ta phải kết hợp các màu từ đỏ, xanh lá cây, xanh lam. NodeMCU cung cấp API cho PWM có thể đặt giá trị từ 0 đến 1023 bằng cách sử dụng thư viện PWM.

Chương trình

Giờ ta tạo một tệp, có tên là pwm.py. Sau đó, viết đoạn code như sau

from machine import Pin, PWM
import time
gpio_red = 5
gpio_green = 4
gpio_blue = 0
def set_rgb(red, green, blue):
    pwm_red = PWM(Pin(gpio_red), freq=1000, duty=red)
    pwm_green = PWM(Pin(gpio_green), freq=1000, duty=green)
    pwm_blue = PWM(Pin(gpio_blue), freq=1000, duty=blue)
    time.sleep(2)
    pwm_red.deinit()
    pwm_green.deinit()
    pwm_blue.deinit()
def run():
    print('print PWM with RGB led')
    while 1:
        print('red')
        set_rgb(1023, 0, 0)
        print('green')
        set_rgb(0, 1023, 0)
        print('blue')
        set_rgb(0, 0, 1023)
        print('yellow')
        set_rgb(1023, 1023, 0)
        print('purple')
        set_rgb(323, 0, 323)
        print('aqua')
        set_rgb(0, 1023, 1023)

Chương trình này sẽ tạo ra 6 màu red, green, blue, yellow, purple, and aqua.

Giờ thì ta dùng webREPL load vào rồi chạy thử xem kết quả sao

>>> import pwm
>>> pwm.run()  
print PWM with RGB led  
red
green 
blue  
yellow
purple
aqua

Analog Input với biến trở

Trong phần này, chúng ta học cách đọc ADC với MicroPython. Để minh họa, mình sử dụng biến trở đọc giá trị tương tự nó sau đó hiển thị.
NodeMCU v2 chỉ có một ADC là A0. Nếu bạn muốn làm việc với nhiều ADC thì phải mở rộng nó bằng cách sử dụng thêm chip ADC. Trong phạm vi bài viết này mình chỉ quẩy trên chân A0 thôi.

Kết nối

Chân biến trở NodeMCU
Chân 1 3V3
Chân 2 A0
Chân 3 GND

Chương trình

Chúng ta sẽ tạo ra một file tên là adc.py, và sử dụng hàm adc.read()

from machine import ADC
import time

def run():
    print('ADC demo')
    while 1:
        adc = ADC(0)
        print('ADC: ' + str(adc.read()))
        time.sleep(2)

Load file python và chạy xem kết quả thôi

>>> import adc  
>>> adc.run()
ADC demo  
ADC: 10
ADC: 20
ADC: 50
ADC: 102
ADC: 304
ADC: 501
ADC: 603
ADC: 677

Kết

Vậy là mình đã thử nghiệm xong ADC và PWM với Micropython, quả là đơn giản nhanh gọn lẹ phải không nào, cứ như là đang code arduino vậy đó các bạn. Nghỉ ngơi rồi tiếp tục qua với I2C và SPI nha anh em