Bài 29: Router không dây cho file server

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 14Bà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
...

Leave a Comment

Filed under Software

Leave a Reply

Your email address will not be published. Required fields are marked *