Để giúp cho việc viết mã nguồn sử dụng ngôn ngữ Python cho Raspberry Pi được đơn giản và nhanh chóng, thì trong phạm vi các bài thực hành sau đây chúng ta sẽ nhận sự hỗ trợ từ một số thư viện được cài đặt mặc định trong hệ điều hành hoặc phải cài đặt bổ sung vào thêm trong quá trình sử dụng Raspberry Pi. Chẳng hạn như: thư viện GPIOZero (thư viện mặc định có sẵn), các thư viện hỗ trợ riêng cho từng loại cảm biến (thư viện phải cài đặt bổ sung).
Những phần cứng cần phải chuẩn bị cho các bài thí nghiệm dưới đây:
Bảng 3.1 Liệt kê các phần cứng cần sử dụng trong bài thí nghiệm.
Raspberry Pi 4B
USB-TTL
Test board
Thẻ nhớ
Điện trở 470, 330
Nút nhấn
LED
Cảm biến HC-SR04
Cảm biến DHT22
Mô-đun 4 relay
Bài thí nghiệm 3
Trong bài thí nghiệm này chúng ta sẽ tìm hiểu cách thức mà Raspberry Pi nhập dữ liệu từ các thiết bị ngoại vi thông qua một GPIO cơ bản.
Yêu cầu thí nghiệm: Kiểm tra và hiển thị thông báo trạng thái hiện tại của nút nhấn trên màn hình Console.
Sơ đồ kết nối
Thực hiện kết nối nút nhấn với Raspberry Pi theo sơ đồ như sau:
Hình 3.4. Sơ đồ kết nối nút nhấn với Raspberry Pi.
Chân GPIO2/Pin-3 của Raspberry Pi được nối với một chân của nút nhấn, chân còn lại của nút nhấn này được nối với chân GND/Pin-6 của Raspberry Pi. Chi tiết được minh họa trong Hình 3.4.
Lưu đồ giải thuật
Giải thuật điều khiển như sau:
Hình 3.5. Lưu đồ giải thuật của bài thí nghiệm 3.
Mã nguồn
Dựa vào lưu đồ giải thuật để viết chương trình điều khiển bằng ngôn ngữ Python như sau:
fromgpiozeroimport Button # Khai bao su dung ham trong thu vien
button = Button(2) # Khai bao chan noi nut nhan
whileTrue:
if button.is_pressed: # Kiem tra nut duoc nhan
print(“Button is pressed”) # Xu ly khi nut duoc nhan
else:
print(“Button is not pressed”) # Xu ly khi nut khong duoc nhan
Để hiểu rõ hơn ta thực hiện thêm ví dụ khác, giả sử ta đợi đến khi nào nút được nhấn thì mới thực hiện việc hiển thị thông báo trên màn hình Console, chương trình điều khiển bằng ngôn ngữ Python như sau:
fromgpiozeroimport Button # Khai bao su dung ham trong thu vien
button = Button(2) # Khai bao chan noi nut nhan
button.wait_for_press() # Cho doi cho den khi nut nhan
print(“Button was pressed”) # Xu ly sau khi nut da duoc nhan
Ta thực hiện thêm ví dụ khác, giả sử ta sẽ thực hiện một thao tác hiển thị thông báo trên màn hình Console cho mỗi lần nút được nhấn, chương trình điều khiển bằng ngôn ngữ Python như sau:
fromgpiozeroimport Button # Khai bao su dung ham trong thu vien
fromsignalimport pause
def say_hello(): # Khai bao ham chuc nang
print(“Hello!”)
button = Button(2) # Khai bao chan noi nut nhan
button.when_pressed = say_hello # Kiem tra va thuc hien ham chuc nang khi nut nhan
pause() # Sleep Mode
Ta thực hiện thêm ví dụ khác, tương tự giả sử sẽ thực hiện thao tác hiển thị thông báo trên màn hình Console khác nhau cho mỗi lần nút được nhấn và được nhả, chương trình điều khiển bằng ngôn ngữ Python như sau:
fromgpiozeroimport Button # Khai bao su dung ham trong thu vien
fromsignalimport pause
def say_hello(): # Khai bao ham chuc nang
print(“Hello!”)
def say_goodbye(): # Khai bao ham chuc nang
print(“Goodbye!”)
button = Button(2) # Khai bao chan noi nut nhan
button.when_pressed = say_hello # Kiem tra va thuc hien ham chuc nang khi nut nhan
button.when_released = say_goodbye # Kiem tra va thuc hien ham chuc nang khi nut nha
pause() # Sleep Mode
Bài thí nghiệm 4
Trong bài thí nghiệm này chúng ta sẽ tìm hiểu cách thức mà Raspberry Pi nhập/xuất dữ liệu để điều khiển các thiết bị ngoại vi thông qua chân GPIO cơ bản.
Yêu cầu thí nghiệm: Điều khiển 1 LED đơn sáng hoặc tắt lần lượt tương ứng với trạng thái nhấn hoặc nhả của nút nhấn.
Sơ đồ kết nối
Thực hiện kết nối LED, nút nhấn với Raspberry Pi theo sơ đồ như sau:
Hình 3.6. Sơ đồ kết nối LED đơn, nút nhấn với Raspberry Pi.
Chân GPIO2/Pin-3 của Raspberry Pi được nối với một chân của nút nhấn, chân còn lại của nút nhấn này được nối với chân GND/Pin-6 của Raspberry Pi. Chân GPIO17/Pin-11 của Raspberry Pi được nối với một chân của điện trở 330, chân còn lại của điện trở này được nối với chân Anode của LED đơn. Cuối cùng, chân Cathode của LED đơn được nối với chân GND/Pin-6 của Raspberry Pi. Chi tiết được minh họa trong Hình 3.6.
Lưu đồ giải thuật
Giải thuật điều khiển như sau:
Hình 3.7. Lưu đồ giải thuật của bài thí nghiệm 4.
Mã nguồn
Dựa vào lưu đồ giải thuật để viết chương trình điều khiển bằng ngôn ngữ Python như sau:
fromgpiozeroimport LED, Button # Khai bao su dung ham trong thu vien
fromsignalimport pause
led = LED(17) # Khai bao chan noi LED va nut nhan
button = Button(2)
button.when_pressed = led.on # Bat LED khi nut duoc nhan
button.when_released = led.off # Tat LED khi nut duoc nha
pause() # Sleep Mode
Ngoài ra, ta cũng có thể viết theo một cách khác như sau:
fromgpiozeroimport LED, Button # Khai bao su dung ham trong thu vien
fromsignalimport pause
led = LED(17) # Khai bao chan noi LED va nut nhan
button = Button(2)
led.source = button # Thay doi trang thai LED theo nut nhan hoac nha