Początki z Banana Pi i IoT
19.04.2015 22:21
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:
[numlist] [item]Udajemy się na stronę i zakładamy darmowe konto https://www.thingspeak.com[/item][item]Logujemy się i klikamy ikonkę 'Channel'[/item][item]Klikamy ikonkę 'Create New Channel'[/item][item]Nadajemy nazwę projektowi np. Termometr w domu i wpisujemy nawę w polu 'Field 1' np. Temperatura[/item][item]Klikamy 'Update Channel' po uzupełnieniu informacji podanych w poprzednim kroku[/item][item]Klikamy zakładkę 'API Keys' wyświetlony tam kod api 'Write API Key' wykorzystamy w kodzie pythona[/item][item]W zakładce 'Private view' będziemy widzieć zapis graficzny z naszego miernika temperatury podpiętego do banana pi[/item][item] Pobieramy przygotowany prze zemnie skrypt temp.py
wget https://dl.dropboxusercontent.com/u/38897001/temp.py
[/item][item]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
[/item][item]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
[/item][item]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[/item][/numlist]
A tutaj jak to wygląda u mnie: https://thingspeak.com/channels/34528
[join][img=obrazek3]
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.