Wykorzystanie Arduino do stworzenia wyświetlacza kursu Bitcoina.

Wykorzystanie Arduino do stworzenia wyświetlacza kursu Bitcoina.

Artykuł ten przedstawia projekt łączący w sobie kilka różnych technik, które wzajemnie ze sobą współpracują. Projekt, który jest opiszę jest to zewnętrzny wyświetlacz przedstawiający aktualny kurs kryptowaluty Bitcoin. Używając przedstawionych technik można z powodzeniem zrealizować wiele innych gadżetów, jak na przykład stację pogodową, wyświetlającą aktualne dane o pogodzie pobierane z internetu.

Do zrealizowania projektu użyłem:

  • płytki “Arduino Duemilanove”, która dostarcza nam programowalny mikrokontroler
  • wyświetlacza Oled o rozdzielczości 128×64 punkty
  • aplikacji dostarczanej wraz z Arduino, służącej do programowania mikrokontrolera
  • języka Ruby, do pobierania danych z internetu i wysyłania ich do Arduino
  • publicznego API dostarczanego przez serwis bitmarket.pl
  • komputera PC z systemem operacyjnym GNU/Linux (Ubuntu 14.04)

 

Arduino nie posiada żadnych modułów, poza wyświetlaczem OLED, zatem do pobierania danych z sieci, będziemy używać aplikacji uruchomionej na komputerze PC. Komunikacja z Arduino będzie się odbywać poprzez port USB.

 

Końcowy rezultat będzie wyglądał tak:

preview

 

Wyświetlanie tekstu

Na początek podłączymy wyświetlacz do Arduino. Nazwy punktów są wypisane na obu płytkach (Arduino i wyświetlacza). Połączeń dokonujemy według schematu:

connections

Następnie podłączamy Arduino do komputera, przy pomocy kabla USB i napiszemy prosty program, dzięki któremu sprawdzimy czy wyświetlacz jest podłączony poprawnie i działa.

 

Tworzymy nowy szkic w aplikacji do programowania Arduino i importujemy biblioteki:

  • Adafruit GFX Library
  • Adafruit SSD1306

 

Biblioteki dodajemy poprzez menu “Szkic > Include Library > Manage Libraries”. Jeśli nie znajdziemy tam potrzebnej biblioteki, należy sciągnąć ją z internetu i dodać przy pomocy opcji “Szkic > Include Library > Add .ZIP Library”.

 

Do szkicu wklejamy poniższy kod:

 

Program należy skompilować i wgrać do Arduino. Jeśli wszystko przebiegło pomyślnie, po chwili na ekranie OLED podłączonym do Ardunio zacznie się wyświetlać losowa liczba z zakresu <0,100>. Liczba będzie się zmieniać co sekundę.

number

Wyjaśnienie kodu:

Na początku dołączamy potrzebne biblioteki:

Następnie ustawiamy piny zgodnie z połączeniami jakie zrobiliśmy między Arduino i wyświetlaczem:

Tworzymy metodę setup, w której inicjalizujemy obsługę wyświetlacza oraz ustawiamy rozmiar i kolor czcionki.

 

Teraz tworzymy metodę loop, która wykonywana jest cyklicznie przez Arduino:

 

W metodzie tej mamy następujące polecenia:

setCursor – ustawia kursor w pozycji x,y

clearDisplay – czyści ekran

println – wypisuję linię tekstu

random(0,100) – losuje liczbę całkowitą od 0 do 100

display – wyświetla to co zostało “narysowane” od ostatniego wyczyszczenia ekranu

delay(1000) – “usypia” na 1000ms, czyli następne wykonanie metody loop nastąpi po upływie jednej sekundy.

 

Komunikacja Arduino z komuterem

Dane do wyświetlenia na ekranie będą dostarczane poprzez port szeregowy, zatem do programu musimy dodać jego obsługę.

W metodzie setup dodajemy:

Prędkość transmisji ustawiliśmy na 9600. Dla naszej aplikacji nie potrzebujemy wyższej prędkości.

Natomiast metodę loop przerobimy tak, żeby wyświetlała na ekranie odebrany przez port szeregowy tekst:

Całość kodu na ten moment wygląda następująco:

 

Po skompilowaniu programu i wgraniu go do Arduino, możemy przetestować komunikację z urządzeniem. Do tego celu bardzo przydatny jest “Szeregowy monitor”, który znajdziemy w aplikacji do programowania Arduino, w menu narzędzia.

 

W “szeregowym monitorze” ustawiamy prędkość transmisji na taką jaka była zapisana w kodzie programu, czyli 9600. Następnie w pierwszym polu wpisujemy jakiś tekst, np. “abc” i klikamy “Wyślij”.
serial_monitor

W tym momencie tekst “abc” powinien wyświetlić się na ekranie oled.
abc

Przesyłanie danych do Arduino, program w języku Ruby

 

Napiszemy teraz prosty program w języku Ruby, który na początek będzie pełnił funkcję podobną do tej, jaką pełnił “Szeregowy Monitor”. Zatem zadaniem tego programu będzie: wysłać do arduino krótki tekst.

Oto kod programu:

 

Istotne jest ustawienie prawidłowego portu. W moim przypadku jest to /dev/ttyUSB0

Skrypt zapisujemy w pliku controler.rb i uruchamiamy poprzez polecenie ruby controller.rb.

Jeśli wystąpi błąd jakiejś biblioteki, należy ją doinstalować i uruchomić polecenie ponownie.

Na pewno wymagana jest biblioteka ruby-serialport (dostępna w repozytorium ubuntu).

 

Jeśli wszystko poszło sprawdznie, na ekranie oled zobaczymy tekst “Text from Ruby”.

text_fr

Pobieranie danych z internetu i przesyłanie ich do Arduino

 

Została nam ostatnia część aplikacji: pobranie kursu Bitcoina w skrypcie Ruby i przesłanie go do Arduino. Celowo pominę takie kwestie jak sprawdzanie poprawności odpowiedzi API, czy walidacja otrzymanych danych, aby skupić się na tym, co jest istotne dla wykonania naszego zadania.

 

Na początek zmienię nieco wywołanie metody println w naszej aplikacji Arduino, aby wyświetlał się tekst “BTC/PLN: ” przed wartością otrzymaną ze skryptu Ruby.

Ostateczny kod programu dla Arduino wygląda następująco:

 

Teraz zmodyfikujemy skrypt Ruby.

Dodajemy potrzebne nam biblioteki, do pobierania zawartości z url’a oraz do parsowania jsona (odpowiedź api jest w formacie json).

Dodajemy również parametr ‘url’, którego wartością jest adres api, z którego będziemy pobierać dane:

Następnie zamiast metody serial.write dodajemy pętlę:

 

Pętla wykonywać się będzie w nieskończoność (do momentu przerwania programu). Wewnątrz pętli:

  • Otwieramy url, open(url). Połączenie zapisujemy w zmiennej f
  • Pobieramy content z urla używając metody f.read(), content zapisujemy w zmiennej content
  • Parsujemy json’a (JSON.parse(content)) i wynik parsowania zapisujemy w zmiennej data.
  • Wyciągamy z data klucz last i przesyłamy go portem szeregowym do Arduino sp.write(data[“last”])
  • Wykonujemy sleep 2, czyli następny przebieg pętli wykona się po upływie dwóch sekund.

 

Ostateczny skrypt ruby wygląda następująco:

 

 

Jeśli wszystko poszło sprawnie, na ekranie OLED zobaczymy aktualny kurs kryptowaluty Bitcoin do PLN w formacie: “BTC/PLN: 915.0”. Czas uśpienia obu aplikacji możemy wydłużyć, ponieważ API Bitmarket.pl nie odświeża danych tak często, żeby był możliwy odczyt nowej wartości co dwie sekundy. Z drugiej strony, krótki czas uśpienia będzie przydatny w przypadku innych API, które oferują odświeżanie danych w czasie rzeczywistym.

btc

Całość kodu znajduje się na githubie: https://github.com/jakubkrysakowski/arduino_bitcoin_rate_display

Konkluzja

 

Napisaliśmy kod aplikacji Arduino oraz skrypt Ruby, które wykonują zadanie założone w projekcie. Po opanowaniu wiedzy przedstawionej w artykule, napisanie samodzielnie obu części nie powinno zająć więcej niż pół godziny. Dodatkowo nauczyliśmy się, jak podłączyć wyświetlacz OLED do Arduino, oraz jak go używać.

 

W celu dalszego kształcenia się polecam dorobić następujące funkcjonalności:

  • Wyświetlanie symboli graficznych na wyświetlaczu oled (metoda display.drawBitmap() oraz narzędzie Img2Code, służące do konwersji bitmap na kod (dostarczane wraz z biblioteką)
  • Ostatnich 10 wartości i rysowanie ich wykresu (zapis ostatnich wartości można rozwiązać po stronie Ruby, aby ograniczyć użycie pamięci Arduino).
  • Pobieranie danych z innych api, np. danych pogodowych
  • Niezależna aplikacja Arduino (nie wymagająca komunikacji z komputerem). Np. Licznik rowerowy – będziemy do niego potrzebować czujnika magnetycznego do zliczania obrotów koła oraz baterii/akumulatora do zasilania urządzenia.

 

Ocena: 4.51/5 (głosów: 70)

Podobne posty

22 komentarzy do “Wykorzystanie Arduino do stworzenia wyświetlacza kursu Bitcoina.

Odpowiedz

anuluj

Masz uwagi?