Bài 14: Thêm nút Reboot và Shutdown

Các chân GPIO trên các board mạch Raspberry pi Model B và B+ được bố trí không hoàn toàn giống nhau.

1. Nút Reboot

Nhóm P6 trên Model B và nhóm Run trên Model B+ được bố trí tách riêng một nơi. Các nhóm này có tác dụng như một công tắc phần cứng để reboot hay khởi động máy.

DSC_3661-e1355784030259

Chỉ cần lắp vào đấy một nút nhấn 2 chân là có nút reset. Khi RPI đang chạy, nhấn nút này máy sẽ reboot. Khi RPI đang được cấp điện và máy đã shutdown, nhấn nút này máy sẽ khởi động.

2. Nút shutdown

Nút shutdown được tạo kết hợp từ GPIO và một đoạn mã python.

Giả sử một cổng GPIO mặc định có trạng thái điện thế dương GPIO.HIGH. Khi GPIO được nối đất, ta có thể đọc được trạng thái điện thế suy giảm GPIO.LOW nhờ vào wiringPi, ta xem đó là tín hiệu để gọi lệnh shutdown. Để tránh phải tắt máy khi nút shutdown vô tình bị chạm phải, ta kiểm tra trạng thái GPIO.LOW phải kéo dài vài giây (tương ứng với việc ấn và giữ nút shutdown) mới gọi lệnh shutdown.

  • Tải về và cài đặt wiringPi

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

Raspberry-Pi-GPIO-Layout-Model-B-Plus

Sau khi cài đặt xong, chạy thử wiringPi bằng các dòng lệnh

gpio -v
gpio readall

  • Chọn một GPIO để làm nút shutdown

Bảng bên là GPIO của RPI model B+. Từ chân số 1 đến chân 26 trong bảng bên trùng khớp với model B

Chọn một GPIO không đảm trách một chức năng đặc biệt nào và gần với một chân GROUND, thí dụ GPIO17. Nối một nút nhấn 2 chân vào GPIO17 (pin 11) và GROUND (pin 9).

  • Viết đoạn mã python đọc trạng thái GPIO17
from time import sleep
from os import system
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM) 

GPIO_NUM = 17
DOWN_CNT = 2
GPIO.setup(GPIO_NUM, GPIO.IN, pull_up_down=GPIO.PUD_UP) 

while True: 
    GPIO.wait_for_edge(GPIO_NUM, GPIO.FALLING) 
    sec = 0
    while (GPIO.input(GPIO_NUM) == GPIO.LOW): 
        sleep(0.2)
        sec += 0.2
    if (sec > DOWN_CNT): 
        system("/sbin/shutdown -h now")
        GPIO.cleanup()

Giả sử file chứa đoạn mã trên là /mnt/tool/shutdown.py. Cho shutdown.py chạy thường trực mỗi khi khởi động máy bằng cách thêm vào cuối file /etc/rc.local (trước dòng exit) dòng lệnh sau đây

python sudo /mnt/tool/shutdown.py &

Khởi động lại máy và bấm thử nút shutdown (giữ 2 giây)

Chú thích Việc sử dụng nhầm lẫn các chân cắm GPIO có điện 5V hay 3.3V có thể gây hư hại board mạch

77f51653f1dbf380417e1ebdb3e079b5

2014-08-19-15.22.53
IMG_0313

Leave a Comment

Filed under Hardware, Software

Leave a Reply