Rất nhiều khi ta cần chia sẻ dữ liệu không dây trong mạng cục bộ qui mô nhỏ, thí dụ như từ file server đến TV hay các laptop… , khi đó ta cần RPI như một router không dây.
Phục vụ cho mục đích này, ta có thể xây dựng RPI như access point (Xem Bài 15) nhưng chỉ với usb wifi (có LAN/internet hoặc không) và tự động cài đặt với một động tác nhấn nút (xem Bài 14 và Bài 21)
1. Sửa lại mã của nút nhấn shutdown /mnt/tool/shutdown.py, ta qui ước
- Nhấn và giữ nút hơn 5 giây: shutdown
- Nhấn và giữ nút hơn 2 giây và dưới 5 giây: cài đặt router
from time import sleep from os import system import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO_NUM = 17 SHDN_CNT = 5 ROUT_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 > SHDN_CNT): system("/sbin/shutdown -h now") GPIO.cleanup() elif (sec > ROUT_CNT): system("/root/autonet.sh 1")
2. Sửa lại đoạn mã /root/autonet.sh (Xem Bài 21), thêm tham số yêu cầu xây dựng router
... ### List of devices ignr='-I*.*' if [ "$(cat /sys/class/net/eth0/carrier)" = "0" ]; then ignr="$ignr -Ieth*" fi devs=$(ls -1 $ignr /sys/class/net|grep -E '(eth|wlan)[0-9]') [[ -z "$devs" ]] && exit 0 [[ $# -ne 0 && ! $devs =~ eth0 ]] && devs="$devs eth0" for dev in $devs; do if [[ $dev == "eth"* ]]; then LAN=$dev elif [[ $dev == "wlan"* ]]; then WLAN=$dev fi done ...