OpenWrt 18.06.1 + TP-Link WR841N = Czujnik temperatury cz.2

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 Top

WR841N_V9 Bottom

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:

WR841N_V9 DB18B20Jeż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 […]

Łukasz pisze:

Czy można prosić o skompilowany obraz dla tego routerka?

Dodaj komentarz