Hiện nay, có rất nhiều ngôn ngữ lập trình cho Raspberry Pi, như Python, C, Java, Scratch … Với ngôn ngữ lập trình Python, chúng ta có bộ thư viện lập trình cho GPIO của Raspberry Pi là RPi.GPIO. Với ngôn ngữ lập trình C, chúng ta có bộ thư viện lập trình cho GPIO của Raspberry Pi là wiringPi. Hai bộ thư viện này sẽ giúp chúng ta lập trình điều khiển các chân GPIO của Raspberry Pi. Trong bài viết này, tôi sẽ giúp các bạn tìm hiểu cách lập trình cho Raspberry Pi dùng ngôn ngữ Python với thư viện RPi.GPIO.
Ngôn ngữ lập trình Python và thư viện lập trình RPi.GPIO
Ngôn ngữ lập trình Python
Python là một ngôn ngữ lập trình thông dịch hướng đối tượng, cấp cao, cho các mục đích lập trình đa năng, ra đời từ năm 1991. Python hiện là một trong những ngôn ngữ lập trình phổ biến nhất và phát triển nhanh nhất. Ngôn ngữ lập trình này có hình thức sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cho phép người lập trình viết mã với số lần gõ phím tối thiểu.
Xem thêm bài viết: Giới thiệu ngôn ngữ lập trình Python
Thư viện lập trình RPi.GPIO
RPi.GPIO là một gói thư viện dùng để điều khiển các chân GPIO của Raspberry Pi. Gói này cung cấp một lớp chứa các chức năng điều khiển GPIO. Tại thời điểm viết bài hướng dẫn này, tôi sử dụng thư viện RPi.GPIO phiên bản 0.7.0 (gói RPi.GPIO-0.7.0.tar.gz). Bạn có thể tham khảo các phiên bản khác tại địa chỉ: https://pypi.org/project/RPi.GPIO/.
Như đã trình bày ở bài viết trước, Raspberry Pi 3 model B có 28 chân GPIO, tất cả các chân này đều có thể dùng làm ngõ vào hoặc ngõ ra. Trong số 28 chân này, một số chân GPIO còn có các chức năng khác chứ không chỉ là ngõ ra/vào.
Xem thêm bài viết: Tìm hiểu về các chân GPIO của Raspberry Pi
Muốn sử dụng được thư viện RPi.GPIO để lập trình điều khiển GPIO, các bạn cần phải nắm được sơ đồ chân GPIO của Raspberry Pi để có thể kết nối và lập trình một cách chính xác.
Để sử dụng thư viện RPi.GPIO, chúng ta cần phải tải và cài đặt trên Raspberry Pi. Để cài đặt, chúng ta có 2 cách, cách thứ nhất là sử dụng lệnh linux, tải và cài đặt tự động, cách thứ hai là tải và cài đặt bằng tay, thực hiện tuần tự từng lệnh.
Cách thứ nhất: Tải và cài đặt tự động.
sudo apt-get update: Lệnh này để cập nhật kho chứa của Raspberry Pi.
sudo apt-get install python-rpi.gpio: Tải và cài đặt thư viện RPi.GPIO.
Cách thứ hai: Tải và cài đặt bằng tay, thực hiện tuần tự các bước sau.
Gói thư viện RPi.GPIO này có sẵn từ https://pypi.org/project/RPi.GPIO/ và phiên bản hiện tại là 0.7.0. Nếu phiên bản này được cập nhật, bạn chỉ cần thay đổi thích hợp đối với số phiên bản trong các lệnh bên dưới.
Bước 1: Tải gói RPi.GPIO-0.7.0.tar.gz từ website của Python về máy.
wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.7.0.tar.gz
Bước 2: Giải nén gói RPi.GPIO-0.7.0.tar.gz vừa mới tải về.
tar -xvf RPi.GPIO-0.7.0.tar.gz
Bước 3: Di chuyển đến đường dẫn của thư mục RPi.GPIO-0.7.0 vừa giải nén xong.
cd RPi.GPIO-0.7.0
Bước 4: Cài đặt thư viện.
sudo python setup.py install
Bước 5: Xóa thư mục RPi.GPIO-0.7.0.
cd ~
sudo rm -rf RPi.GPIO-0.7.0
Như vậy, chúng ta đã cài đặt xong RPi.GPIO và có thể sử dụng thư viện này trong Python rồi.
Sử dụng căn bản RPi.GPIO
Đính kèm thư viện RPi.GPIO vào chương trình Python
Để đính kèm RPi.GPIO vào chương trình Python, hãy viết mã lệnh Python như sau:
import RPi.GPIO as GPIO
Mục đích đính kèm thư viện RPi.GPIO vào chương trình Python là để tham khảo đến các chức năng của nó từ chương trình của chúng ta. Để kiểm tra hoạt động của RPi.GPIO, viết đoạn mã lệnh Python sau, tạo một tập tin gpio.py và lưu lại:
try:
import RPi.GPIO as GPIO
except RuntimeError:
print(“Lỗi đính kèm RPi.GPIO! Bạn cần phải thực thi tập tin này với quyền cao nhất là root.
Sử dụng lệnh ‘sudo’ để thực thi tập tin với quyền root”)
Thực thi tập tin gpio.py bằng cách gõ lệnh:
python gpio.py
Nếu câu thông báo trong đoạn lệnh trên được in ra, nghĩa là chúng ta phải thực thi tập tin với quyền root. Gõ lệnh:
sudo python gpio.py
Nếu không có thông báo gì được in ra, nghĩa là thư viện RPi.GPIO đã hoạt động, như vậy, chúng ta đã có thể sử dụng thư viện RPi.GPIO để lập trình.
Thiết lập chế độ đánh số chân GPIO
Trong bài viết trước tôi đã có trình bày về hai kiểu đánh số chân GPIO là kiểu BCM và kiểu BOARD. Ở đây sẽ không trình bày lại mà sẽ hướng dẫn cách thiết lập để sử dụng sơ đồ chân theo kiểu BCM hay kiểu BOARD.
Để sử dụng kiểu đánh số chân BCM, sử dụng mã lệnh sau:
GPIO.setmode(GPIO.BOARD)
Để sử dụng kiểu đánh số chân BOARD, sử dụng mã lệnh sau:
GPIO.setmode(GPIO.BCM)
Bật/tắt cảnh báo – thông báo của hệ thống
Có thể có nhiều hơn một script chạy trên Raspberry Pi sử dụng các chân GPIO. Nếu RPi.GPIO phát hiện một chân đã được cấu hình cho một chức năng nào đó bởi một script khác, RPi.GPIO sẽ phát ra một thông báo, và chúng ta cần phải cấu hình lại script hiện tại.
Để tắt chức năng thông báo, sử dụng mã lệnh:
GPIO.setwarnings(False)
Để bật lại chức năng thông báo, chỉ cần đổi False thành True.
GPIO.setwarnings(True)
Thiết lập mode (chế độ – là ngõ vào hay ngõ ra) cho một chân GPIO
Mỗi chân GPIO được sử dụng trong chương trình, chúng ta đều phải thiết lập cho nó là ngõ vào hoặc ngõ ra, nếu không, chương trình sẽ xuất ra thông báo lỗi rằng chúng ta chưa thiết lập cho chân GPIO được sử dụng đó.
Để thiết lập một chân GPIO là ngõ vào:
GPIO.setup(so_chan, GPIO.IN)
(so_chan là đánh số chân của chân GPIO theo kiểu BCM hoặc BOARD)
Để thiết lập một chân GPIO là ngõ ra:
GPIO.setup(so_chan, GPIO.OUT)
(so_chan là đánh số chân của chân GPIO theo kiểu BCM hoặc BOARD)
Có thể thiết lập giá trị ban đầu cho một ngõ ra (output):
GPIO.setup(so_chan,GPIO.OUT,initial=GPIO.high)
Với các chân ngõ vào, thông thường bạn phải đặt một điện trở kéo lên hoặc kéo xuống để tránh trạng thái thả nổi. Bạn thiết lập các điện trở này bằng cách dùng lệnh như sau:
GPIO.setup(so_chan, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(so_chan, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
Đọc giá trị của chân GPIO được thiết lập là ngõ vào (input)
Để đọc giá trị của ngõ vào:
GPIO.input(so_chan)
Giá trị trả về sẽ là 0 hoặc GPIO.LOW, 1 hoặc GPIO.HIGH
Thiết lập giá trị cho chân GPIO được thiết lập là ngõ ra (output)
Để thiết lập giá trị cho ngõ ra:
GPIO.output(so_chan, trang_thai)
(trang_thai là một trong các giá trị 0 hoặc GPIO.LOW, 1 hoặc GPIO.HIGH)
Xác lập lại trạng thái mặc định cho các chân GPIO
Có thể một chân hoặc một số chân GPIO đã được sử dụng bởi một script khác, các chân này có thể đã được thiết lập lập là output với giá trị GPIO.HIGH. Khi thực script hiện tại cũng có dùng đến chân GPIO đó, chương trình sẽ xuất ra cảnh
báo rằng chân GPIO đã được sử dụng. Nếu hai script cùng sử dụng một chân GPIO với hai chế độ khác nhau có thể tổn hại đến Raspberry Pi.
Để tránh đụng độ xảy ra, viết hàm cleanup() ở cuối chương trình:
GPIO.cleanup()
Hàm GPIO.cleanup() sẽ thiết lập tất cả các chân GPIO trở về trạng thái mặc định ban đầu của nó, nghĩa là tất cả các chân GPIO sẽ chưa được sử dụng cho bất cứ chức năng nào (ngõ vào hoặc ngõ ra).
Tuy nhiên, trong một số trường hợp, chúng ta chỉ muốn thiết lập lại trạng thái mặc định cho một chân, cũng sử dụng hàm GPIO.cleanup() nhưng truyền thêm tham số cho hàm, là số chân của GPIO:
GPIO.cleanup(so_chan)
Bây giờ chúng ta sẽ thực hành một ví dụ đơn giản sau để hiểu rõ hơn những điều đã được trình bày ở bên trên. Sử dụng ngôn ngữ Python và thư viện RPi.GPIO để lập trình điều khiển làm cho một đèn LED phát sáng.
Chuẩn bị
- 1 máy tính Raspberry Pi, 1 bàn phím, 1 chuột USB và 1 màn hình desktop
- 1 sạc microUSB 5V, cáp chuyển đổi HDMI sang VGA
- 1 đèn led đơn
- 1 điện trở 100Ω
- 1 breadboard
- 4 dây dẫn điện
Kết nối
Bạn sử dụng các dây điện để kết nối led đơn với điện trở hạn dòng vào các chân GPIO số 6 và số 7 của Raspberry Pi. Sau khi lắp ráp hoàn tất, chúng ta có sơ đồ mạch điện như hình bên dưới.
Khởi động Raspberry Pi, đăng nhập với người dùng pi và mật khẩu raspberry (hoặc mật khẩu của Raspberry Pi mà chúng ta cài đặt).
Tạo mới tập tin batdenled.py bằng cách gõ lệnh vi batdenled.py rồi nhấn phím Enter:
Nhấn phím i trên bàn phím để kích hoạt chức năng nhập ký tự cho tập tin batdenleb.py.
Đọc thêm bài viết: Hướng dẫn sử dụng VI
Nhập đoạn mã lệnh sau vào tập tin batdenled.py:
import RPi.GPIO as GPIO
## Đính kèm thư viện RPi.GPIO
GPIO.setmode(GPIO.BOARD)
## Sử dụng kiểu đánh số BOARD
GPIO.setup(7, GPIO.OUT)
## Thiết lập chân số 7 là ngõ ra
GPIO.output(7, True)
## Bật nguồn 3V cho chân số 7
Nếu muốn làm cho led tắt đi thì bạn dùng lệnh sau:
GPIO.output(7, False)
Nhấn phím Esc trên bàn phím để thoát chế độ nhập ký tự cho tập tin batdenled.py.
Gõ lệnh : x và nhấn phím Enter để lưu và thoát khỏi tập tin batdenled.py.
Thực thi tập tin batdenled.py bằng cách gõ lệnh:
sudo python3 batdenled.py
Sau khi gõ lệnh sudo python3 batdenled.py rồi nhấn phím Enter, đèn led sẽ phát sáng.
Lời kết
Như vậy là chúng ta đã tìm hiểu thư viện lập trình cho Raspberry Ri và biết cách sử dụng thư viện này vào việc viết một chương trình đơn giản để điều khiển làm cho một đèn LED phát sáng. Trong bài viết tiếp theo, chúng ta sẽ tiếp tục tìm hiểu một thư viện khác để bạn lựa chọn một trong hai thư viện này và tạo ra các ứng dụng của riêng mình. Các bạn tiếp tục theo dõi các bài viết và đừng ngại để lại các câu hỏi hoặc những ý kiến đóng góp bên dưới bài viết nhé!