Banana Pi + DS18B20 = IoT
Witajcie :) Jest mój pierwszy wpis na DP, ale bardzo ciekawy. Będzie trochę programowania, trochę zabawy z kabelkami - coś co lubią duzi chłopcy ;)
Co będziemy potrzebować:
- Banana PI
- ds18b20
- rezystor 4.7k?
- Płytka stykowa i parę kabelków
- 15 minut żeby złożyć i uruchomić
Skoro mamy skompletowany potrzebny sprzęt to zabieramy się do złożenia tego w działającą całość.
Podłączamy czujnik temperatury ds18b20 według schematu:
Z racji tego że banana pi nie ma wbudowanej sprzętowej obsługi 1 wire to musimy włączyć wersje programową. W tym celu musimy edytować plik script.bin i dodać w nim obsługę 1 wire. Zaczynamy od zalogowania się do naszego banana i pobrania potrzebnej aplikacji która odkoduje plik z ustawieniami i ponownie zakoduje poprawiony plik.
sudo su
cd ~
git clone git://github.com/linux-sunxi/sunxi-tools.git
apt-get install libusb-1.0
cd sunxi-tools
make
Jeśli nie macie domyślnie zamontowanej partycji boot ( u mnie nie była) to trzeba zamontować ją ręcznie na czas edycji wymaganego pliku. Ja partycje boot zamontowałem w /mnt
mount /dev/mmcblk0p1 /mnt
Edytujemy plik script.bin
./bin2fex /mnt/script.bin script.fex
nano script.fex
Po otwarciu pliku w edytorze dopisujemy na końcu pliku dwie linijki.
[w1_para]
gpio = 18
Pin 18 odpowiada pinowi 12 ze schematu powyżej. Zapisujemy plik i zapisujemy zmieniony plik na partycji boot, potem restartujemy urządzenie.
./fex2bin script.fex /mnt/script.bin
reboot
Po uruchomieniu ponownym przystępujemy do testu odczytu temperatury. Wykonujemy poniższe polecenie:
Dodanie modułów:
sudo su
modprobe wire
modprobe w1-gpio
modprobe w1-therm
Odszukanie urządzenia i odczyt temperatury:
ls /sys/bus/w1/devices/
w odpowiedzi dostaniemy informację o znalezionych termometrach w moim przypadku jest to 28-0000052e0305. Teraz wystarczy, że w poniższym kodzie wpiszecie adres swojego termometru.
cat /sys/bus/w1/devices/TuWpiszAdres/w1_slave
U mnie wygląda to następująco:
cat /sys/bus/w1/devices/28-0000052e0305/w1_slave
Po wykonaniu zapytania otrzymujemy informację o temperaturze:
5c 01 4b 46 7f ff 04 10 a1 : crc=a1 YES
5c 01 4b 46 7f ff 04 10 a1 t=21750
W moim przypadku jest to t=21750 czyli mam 21.75 stopni Celsjusza.
Teraz przystąpimy do wysyłania informacji z termometru przy użyciu skryptu napisanego w pythonie do bardzo ciekawej strony https://thingspeak.com
W tym celu musimy wykonać następujące czynności:
- Udajemy się na stronę i zakładamy darmowe konto https://www.thingspeak.com
- Logujemy się i klikamy ikonkę 'Channel'
- Klikamy ikonkę 'Create New Channel'
- Nadajemy nazwę projektowi np. Termometr w domu i wpisujemy nawę w polu 'Field 1' np. Temperatura
- Klikamy 'Update Channel' po uzupełnieniu informacji podanych w poprzednim kroku
- Klikamy zakładkę 'API Keys' wyświetlony tam kod api 'Write API Key' wykorzystamy w kodzie pythona
- W zakładce 'Private view' będziemy widzieć zapis graficzny z naszego miernika temperatury podpiętego do banana pi
- Pobieramy przygotowany prze zemnie skrypt temp.py
wget https://dl.dropboxusercontent.com/u/38897001/temp.py
- Edytujemy pobrany skrypt i zmieniamy w nim dwie wartości 'KOD-API' i '28-0000052e0305' odpowiednio w pierwszym wpisujemy swój kod api ze strony thingspeak.com a w drugiej adres naszego czujnika ds18d20
nano temp.py
- Uruchamiamy kod i obserwujemy w konsoli status przesyłania i odczytu temperatury. Na stronie internetowej naszego projektu też powinny się ładować nowe wartości.
python temp.py
- Po przetestowaniu poprawnego działania możemy uruchomić nasz skrypt w tle
screen python temp.py
w celu opuszczenia okna z aplikacją pracującą w tle klikamy Ctrl + a i Ctrl + d
A tutaj jak to wygląda u mnie: https://thingspeak.com/channels/34528
Mam nadzieję że jest przejrzyście i zrozumiale napisane :)
Liczne komentarze mile widziane jak i tworzenie własnych rozwiązań IoT i chwalenie się nimi na blogu dobrych programów.