Witam w części drugiej, w niej zajmiemy się modyfikacją sprzętową. Dodamy jeden czujnik na jednej z dostępnych linii GPIO. Dostępne linie GPIO sprawdzimy poleceniem:
root@OpenWrt:~# cat /sys/kernel/debug/gpio gpiochip0: GPIOs 0-31, parent: platform/ath79-gpio, ath79-gpio: gpio-3 ( |tp-link:green:qss ) out hi gpio-4 ( |tp-link:green:wan ) out hi gpio-11 ( |tp-link:green:lan4 ) out hi gpio-12 ( |Reset button ) in hi gpio-13 ( |tp-link:green:wlan ) out hi gpio-14 ( |tp-link:green:lan3 ) out hi gpio-15 ( |tp-link:green:lan2 ) out hi gpio-16 ( |tp-link:green:lan1 ) out hi gpio-17 ( |WIFI button ) in hi gpiochip1: GPIOs 494-511, parent: platform/qca953x_wmac, ath9k-phy0: gpio-495 ( |ath9k-phy0 ) in lo
Sprawdzone i dostępne linie to 11,13,14,15,16. Testowałem linię GPIO3 ale router nie uruchamia się wcale. Innych jeszcze nie miałem czasu przetestować, choć planuję to w najbliższej przyszłości.
Ale wracamy do czujnika temperatury. Potrzebujemy czujnik temperatury DS18B20, zamieszczam kartę produktu: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf. Do tego rezystor 3.3k przewlekany oraz kilka przewodów do podłączenia.

WR841N_V9 Top

WR841N_V9 Bottom
Wykorzystamy GPIO13 od diody WLAN, jest to druga dioda od lewej patrząc od dołu PCB. Na początek musimy usunąć diodę, można pomóc sobie małą ilością nowej cyny. Potrzebne są też trzy przewody o odpowiedniej długości, które cynujemy po obu stronach. Wszystko łączymy jak na zdjęciu poniżej:
Jeżeli wszystko mamy przylutowane możemy złożyć router. Podpinamy zasilanie oraz łączymy się z naszym routerem po SSH. Teraz kilka poleceń aby odzyskać linie GPIO używane przez system i wykorzystać je do własnych celów.
Na początek dodajemy zawartość do pliku /etc/rc.local który jest uruchamiany przy starcie:
root@OpenWrt:~# cat /etc/rc.local # Put your custom commands here that should be executed once # the system init finished. By default this file does nothing. /bin/sh /etc/config/leds.sh exit 0
Tworzymy plik /etc/config/leds.sh i wklejamy do niego zawartość oraz nadajemy mu bit wykonywalności:
root@OpenWrt:~# touch /etc/config/leds.sh root@OpenWrt:~# cat /etc/config/leds.sh /bin/echo "leds-gpio" > /sys/bus/platform/drivers/leds-gpio/unbind /bin/sleep 5 /sbin/insmod w1-gpio-custom bus0=0,13,0 root@OpenWrt:~# chmod +x /etc/config/leds.sh
Plik ten będzie uruchamiany przy starcie systemu. Restartujemy nasz router. Jeżeli wszystko poszło ok to w katalogu /sys/bus/w1/drivers/w1_slave_driver/ powinien pojawić się katalog o nazwie XX-YYYYYYYYYY w moim przypadku jest to:
root@OpenWrt:~# ls -l /sys/bus/w1/drivers/w1_slave_driver/ lrwxrwxrwx 1 root root 0 Sep 30 12:51 28-00ff984302e5 -> ../../../../devices/w1_bus_master1/28-00ff984302e5 --w------- 1 root root 4096 Sep 30 13:11 bind --w------- 1 root root 4096 Sep 30 13:11 uevent --w------- 1 root root 4096 Sep 30 13:11 unbind
Temperaturę odczytujemy drugim skryptem, dodatkowo skrypt tworzy plik tekstowy temp.txt z aktualną temperaturą. Skrypt ten dodany został do crona i jest uruchamiany co pięć minut, częstotliwość można zmienić wg. własnego upodobania.
root@OpenWrt:~# touch /etc/config/temp.sh root@OpenWrt:~# cat /etc/config/temp.sh awk -F= '/t=/ {printf "%.0f\n", $2/1000}' /sys/bus/w1/drivers/w1_slave_driver/28-00ff984302e5/w1_slave > /etc/config/temp.txt root@OpenWrt:~# chmod +x /etc/config/temp.sh root@OpenWrt:~# touch /etc/crontabs/root root@OpenWrt:~# cat /etc/crontabs/root */5 * * * * /etc/config/temp.sh root@OpenWrt:~# /etc/init.d/cron start root@OpenWrt:~# /etc/init.d/cron enable
W tym momencie możemy sprawdzić poprawność skryptów. Możemy uruchomić skrypt ręcznie lub poczekać pięć minut i sprawdzić czy pojawił się plik /etc/config/temp.txt i poleceniem cat /etc/config/temp.txt sprawdzić jego zawartość.
root@OpenWrt:~# cat /etc/config/temp.txt 28
W tym momencie kończymy drugą część, trzecia część będzie już krótka i opisywać będzie uruchomienie usługi SNMP. Konfiguracja i sprawdzenie poleceniem snmpwalk poprawności ustawień.
Comments
[…] pisałem w części 2 ostatnim krokiem będzie skonfigurowanie usługi SNMP na naszym czujniku abyśmy mogli monitorować […]
[…] przygotowany system do pracy z sensorami na 1-wire, w tym czujnikiem temperatury DS18B20. W części drugiej będzie o tym jak podłączyć czujnik pod jedną diodę LED routera i wykorzystać GPIO do odczytu […]
Czy można prosić o skompilowany obraz dla tego routerka?