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
Còn để xem tổng hợp toàn bộ series thì ae có thể tham khảo link sau
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