wersja mobilna

PiPhone - telefon komórkowy z Raspberry PI

Numer: Styczeń/2016

Jakiś czas temu pojawiła się chwilowa moda na korzystanie ze starych telefonów komórkowych zamiast nowoczesnych smartfonów, celem podkreślenia swojej indywidualności. Nie polemizujemy z tą modą, ale dotarliśmy do projektu telefonu, który zdecydowanie wyróżniłby w tłumie miłośnika alternatywnych rozwiązań - samodzielnie wykonany telefon z Raspberry PI. I nawet, jeśli Czytelnicy nie pałają potrzebą pokazania się w towarzystwie z takimi gadżetami, jest to świetny przykład jak stworzyć nowoczesne, przenośne urządzenie i zaimplementować komunikację GSM z użyciem popularnego komputerka jednopłytkowego.

Pobierz PDFMateriały dodatkowe

Omawiany projekt został wykonany przez Davida Hunta z Irlandii. Bazą wykonanego telefonu jest komputer jednopłytkowy Raspberry Pi Model B, choć inne modele też mogą zostać użyte. Model A pozwoli np. na obniżenie poboru energii.

Interfejs użytkownika zrealizowano na wyświetlaczu ciekłokrystalicznym TFT o rozdzielczości 320×240 pikseli, dostępnym w postaci modułu dla Raspberry PI. Wyświetlacz ma ekran dotykowy, przy czym nie ma większego znaczenia, czy zastosuje się model z interfejsem rezystancyjnym, czy dotykowym.

Rysunek 1. Sposób podłączenia zasilania w zmodernizowanej wersji projektu

Rysunek 2. Pozostałe połączenia w zmodernizowanej wersji projektu

Ten drugi będzie droższy, ale pozwoli łatwiej zrealizować zaawansowane interakcję z użytkownikiem, gdyby zaszła taka potrzeba. Idealny rozmiar wyświetlacza, pasującego do omawianej konstrukcji to 2,8". Autor wybrał model PiTFT firmy Adafruit.

Do komunikacji z siecią komórkową użyto modułu GSM/GPRS. W pierwotnej wersji projektu autor skorzystał z modelu SIM900 firmy ElecFreaks, w której znajdował się układ SimCom SIM900. W nowszej rewizji projektu użyto zminiaturyzowanego modułu Adafruit FONA, w którym zainstalowany był modem SimCom SIM800L. W tym drugim przypadku konieczne jest jeszcze dokupienie anteny.

Potrzebne komponenty:
  • Komputer Raspberry PI Model B; możliwość zastosowania innego modelu; koszt: 20-35 USD.
  • Moduł wyświetlacza 2,8" Adafruit PiTFT z ekranem rezystancyjnym; koszt 35 USD, a w wersji z ekranem pojemnościowym - 45 USD.
  • Akumulator litowo-polimerowy, 2500 mAh lub 1200 mAh (koszt: 10-15 USD).
  • Moduł GSM z układem SimCom lub moduł Adafruit SONA + antena; koszt ok. 50 USD.
  • Przetwornica DC/DC podwyższająca napięcie; koszt: 10 USD.
  • Karta pamięci SD 4 GB; koszt: 3 USD.
  • Zestaw słuchawkowy lub mały głośnik i mikrofon oraz przewody i konektory.

Aby zapewnić przenośność telefonu, konieczne było użycie akumulatora. Wybór padł na model litowo-polimerowy o pojemności 2500 mAh. W wersji usprawnionej, aby zmniejszyć całkowite wymiary sprzętu i zapewnić lepszą wentylację użyto mniejszego akumulatora litowo-polimerowego o pojemności 1200 mAh.

Ponieważ Raspberry Pi wymaga zasilania napięciem 5 V, a akumulator dostarcza 3,7 V, potrzebna była przetwornica podwyższająca napięcie. I znowu - pierwotnym wyborem był chiński podzespół, ale docelowo użyto przetwornicy Adafruit PowerBoost 500 z układem Texas Instruments TPS61090.

Fotografia 3. Pierwotna wersja projektu od spodu. Problematyczne są goldpiny modułu GSM

Fotografia 4. Sposób umieszczenia akumulatora w pierwotnej wersji projektu

Fotografia 5. Pierwotna wersja PiPhone z boku

Oczywiście potrzebna była jeszcze karta SD o pojemności przynajmniej 4 GB, z systemem operacyjnym oraz elementy montażowe. Warto też zwrócić uwagę na fakt, że Raspberry Pi nie ma wbudowanego głośnika i dlatego jest konieczne zastosowanie np. zestawu słuchawkowego.

Montaż podzespołów

Trzon konstrukcji to Raspberry Pi oraz płytka wyświetlacza ciekłokrystalicznego. Autor umieścił je - jedną na drugiej, a w przestrzeń pomiędzy złączami RPi wstawił wspomniany akumulator. Komponenty są zamocowane za pomocą golpinów, do których jest dołączony moduł wyświetlacza.

Odwzorowując samodzielnie tę konstrukcję warto zwrócić uwagę na przewiew powietrza pomiędzy płytkami. Nieco nagrzewają się one w trakcie pracy, co podwyższa temperaturę akumulatora, prawdopodobnie nie wpływając korzystnie na jego trwałość. Zamontowanie dodatkowego wentylatora może poprawić niezawodność urządzenia.

Fotografia 6. Front telefonu w wersji pierwotnej

Fotografia 7. Tył PiPhone w wersji zmodyfikowanej

Moduł z modemem został umieszczony od spodu Raspberry Pi. Aby odizolować go od PCB komputera, autor odseparował go grubą, twardą gąbką. Komponenty trzymają się siebie dzięki plastikowym taśmom zaciskowym, co nie jest rozwiązaniem eleganckim, ale w prototypie jest dopuszczalne. Obok modemu doczepiono przetwornicę, a całość połączono przewodami, zgodnie z rysunkami 1 i 2. Raspberry Pi jest dołączony do wyświetlacza, a wiec także i do zasilacza oraz modemu, poprzez goldpiny.

Oprogramowanie

W pierwszej kolejności należy zainstalować Raspbiana, a następnie skonfigurować obsługę wyświetlacza z ekranem dotykowym, zgodnie z instrukcją do wybranego modelu. Czasem dostawcy wyświetlaczy do Raspberry Pi dostarczają własne, już skonfigurowane wersje Raspbiana w postaci obrazów. Warto poszukać ich na stronie producenta.

Podczas pierwszego uruchomienia systemu, warto podłączyć monitor, klawiaturę i myszkę do przejścia przez procedurę konfiguracyjną. Ponieważ urządzenie będzie pracować z akumulatorem, lepiej zrezygnować z opcji przetaktowania komputera, by nie czerpał on zbyt wiele energii.

Ponieważ domyślnie wyświetlacz telefonu ma pracować w orientacji portretowej, należy przygotować go do tego trybu. W przypadku wyświetlacza w postaci modułu PiTFT polega to na edytowaniu pliku /etc/modprobe.d/adafruit.conf i przypisaniu do znajdującego się wewnątrz parametru rotate wartości 0.

O ile dodatkowe przyciski, znajdujące się na PCB modułu PiTFT nie są w niniejszym projekcie potrzebne, należy za to przeprowadzić kalibrację ekranu dotykowego.

W ramach konfiguracji trzeba też sprawić, by port szeregowy komputera komunikował się z modułem GSM. W tym celu w pliku /etc/inittab należy wykomentować linijkę:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Właściwy program

Kod programu PiPhone został napisany w Pythonie i nie jest skomplikowany. Dzięki wykorzystaniu wielu bibliotek, całość sprowadza się do około 300 linijek, po usunięciu komentarzy.

Na początek kodu importowane są biblioteki (listing 1). Najbardziej pomocna jest biblioteka pygame, która pozwała w łatwy sposób obsłużyć wyświetlacz oraz wyjścia i wejście audio. Definiowana jest klasa Icon (listing 2), która pozwala ładować pliki PNG jako obrazy z katalogu z ikonami.

Listing 1. Importowane biblioteki

Listing 2. Klasy potrzebne do obsługi elementów interfejsu

Autor zdecydował, że lista nie jest definiowana globalnie, tylko ładowana dynamicznie. Drugą z definiowanych klas jest Button, która określa region ekranu oraz opcjonalnie jego kolor tła, wyświetlaną w jego obszarze ikonę, funkcję wywoływaną po przytrzymaniu lub naciśnięciu danego regionu, a także parametr przekazywany tej funkcji.

Dzięki temu wszystkie przyciski korzystają z tej samej funkcji, a jedynie parametr określa, który przycisk został naciśnięty. Warto zwrócić uwagę, że jeśli przyciski będą na siebie nachodzić, istotna jest ich kolejność wpływająca na to, który z przycisków został naciśnięty.

Na listingu 3. Przedstawiono treść funkcji reagującej na naciśnięcie przycisku. Po pierwsze sprawdza ona, czy przycisk jest cyfrą, a po drugie, czy aktualnie trwa rozmowa. Naciśnięcie klawisza numerycznego wydłuża ciąg cyfr wybieranego numeru telefonu.

Przycisk cofania skraca ciąg. Przycisk słuchawki służy do nawiązywania lub rozłączania połączenia. Polecenie wybrania numeru lub rozłączenia wysyłane jest poprzez port szeregowy za pomocą komend AT. Przykładowo, do nawiązania połączenia służy linijka

serialport.write("ATD " + numberstring + ‘;r’)

Listing 3. Funkcja umożliwiająca reagowanie na zdarzenie wywoływane w momencie naciśnięcia przycisku na ekranie dotykowym

Listing 4. Zmienne globalne zadeklarowane w programie

Autor przygotował zestaw zmiennych globalnych (listing 4), do których odnoszą się poszczególne funkcje. Zmienne te przechowują m.in. informacje o tym, czy prowadzona jest aktualnie rozmowa, który katalog zawiera ikony przycisków oraz który przycisk został ostatni naciśnięty. Jako zmienne globalne zadeklarowano także tablicę ikon i przycisków (listing 5), tworzoną w oparciu o podane wcześniej klasy. Na listingu 6 można zobaczyć funkcje służące do zapamiętywania i odczytywania ustawień.

Listing 5. Deklaracja pozycji, wyglądu i funkcji przycisków

Listing 6. Funkcje do zapisywania i wczytywania ustawień

W ramach inicjalizacji programu (listing 7) skrypt konfiguruje zmienne środowiskowe dla ekranu dotykowego, a następnie uruchamia bibliotekę pygame. W następnej części ładuje ikony przycisków, wypełniając zadeklarowaną wcześniej globalną tablicę. Ładuje też dodatkowe ustawienia i tło wyświetlacza, a następnie inicjalizuje modem GSM. W tym celu również korzysta z poleceń AT przesyłanych przez port szeregowy.

Główna pętla programu (listing 8) nie jest długa. Przegląda ona stale listę zdarzeń zarejestrowanych za pomocą biblioteki pygame i jeśli znajdzie na niej zdarzenie typu MOUSEBUTTONDOWN, sprawdza dla każdego przycisku, czy obszar zdarzenia (pozycja kursora) nie leży czasem w zasięgu danego przycisku.

Listing 7. Inicjalizacja programu

Listing 8. Główna pętla programu

Jeśli tak jest, program przechodzi do odtworzenia poprawnego wyglądu ekranu - ponownego wyświetlenia tapety, wypisania wybieranego numeru lub np. narysowania na nowo przycisków. Sama obsługa przycisków jest bowiem realizowana za pomocą zdarzeń wywoływanych niezależnie.

Gotowy program w języku Python należy dopisać do skryptu inicjacji komputera, edytując plik /etc/rc.local i dodając treść:

cd/home/pi/PiPhone-master
python piphone.py
przed linijką exit 0.

Podsumowanie

Omawiany projekt jest bardzo dobrym przykładem tego, jak łatwe jest zrobienie bardzo zaawansowanego urządzenia, jeśli korzysta się z gotowych modułów i bibliotek. Kto by pomyślał, że telefon komórkowy z interfejsem dotykowym wymaga jedynie 300 linijek kodu i połączenia ze sobą maksymalnie kilkunastu punktów lutowniczych. A ponadto, znacząca część napisanego kodu służy przede wszystkim wyświetlaniu przycisków i informacji na ekranie.

Aby telefon faktycznie był użyteczny, należałoby jeszcze poprawić jego konstrukcje mechaniczną, by się nie rozpadał i zabezpieczyć go przed warunkami środowiskowymi. Najlepiej poprzez zaprojektowanie dla niego obudowy z tworzywa i wydrukowanie jej na drukarce 3D.

Można też wbudować mikrofon i miniaturowy głośnik, korzystając choćby z dodatkowych interfejsów modułu FONA, użytego w zmodernizowanej wersji projektu. Niestety, samodzielna budowa telefonu nie jest sposobem na zaoszczędzenie - łączny koszt użytych komponentów to około 150 dolarów + podatki.

Kompletny gotowy program można pobrać z adresu https://goo.gl/buWC7D, a opis zmodernizowanego projektu znajduje się tu https://goo.gl/3lFHZ1. Dla ułatwienia komplet skryptów można pobrać bezpośrednio do Raspberry Pi za pomocą komend:

wget https://github.com/climberhunt/Piphone/archive/master.zip
unzip master.zip

Spowodują one pobranie i rozpakowanie pliku z zasobami projektu, przy czym tamtejszy kod zawiera dodatkowe komentarze i linijki z starszych projektów autora, które nie są potrzebne do działania PiPhone i dla skrócenia listingów zostały w niniejszym artykule z nich usunięte.

Marcin Karbowniczek, EP

Pozostałe artykuły

Stacja pogodowa na Raspberry Pi

Numer: Czerwiec/2019

Fundacja Raspbery Pi wysłała do szkół na całym świecie ponad 10 tysięcy stacji pogodowych opartych na module HAT z zestawem potrzebnych sensorów. Teraz każdy w domu może skonstruować taką stację pogodową na bazie zaproponowanych modułów z sensorami lub po prostu samodzielnie łącząc układy scalone z komputerem jednopłytkowym Raspberry Pi.

Laserowy, bezprzewodowy sensor smogu dla Raspberry Pi

Numer: Maj/2019

W jednym z poprzednich numerów zaprezentowany został projekt sensora smogu z bezprzewodową technologią Bluetooth Low Energy. Wyposażony w dokładny, laserowy czujnik PMS7003 umożliwia on wykonywanie zdalnych pomiarów zawartości pyłów zawieszonych w powietrzu. Mierzy też temperaturę i wilgotność względną, korzystając z precyzyjnego układu SHT20. Prezentację wyniku pomiaru powierzono aplikacji BBair, która na ekranie smartfonu ...

Rower elektryczny (1)

Numer: Maj/2019

Już od jakiegoś czasu stały się dosyć mocno popularne różne pojazdy z napędem elektrycznym. Na ulicach często możemy zobaczyć hulajnogę lub deskorolkę elektryczną. Tego typu pojazdy są bardzo tanie w eksploatacji oraz umożliwiają łatwe przemieszczanie się po utwardzonych nawierzchniach w większych aglomeracjach. Niestety większość małych pojazdów elektrycznych może poruszać się tylko po utwardzonych drogach, a dodatkowo ...

Strumieniowy odtwarzacz audio na i.MX6ULL

Numer: Kwiecień/2019

W systemach mikroprocesorowych często zachodzi potrzeba porozumienia się z użytkownikiem nie tylko za pomocą obrazu i dotyku, ale również za pomocą dźwięku. Nie zawsze musi to być dźwięk o najwyższej jakości, szerokiej dynamice i pozbawiony zniekształceń. Do zwrócenia uwagi użytkownika na wyświetlany na ekranie komunikat, udźwiękowienia zapisanego w pamięci urządzenia filmiku instruktażowego, odtworzenia mowy lub muzyki z niewielkich, ...

Analizator stanów logicznych z modułu STM32F4DISCOVERY

Numer: Styczeń/2019

W artykule przedstawiono kolejny przykład użycia zestawu uruchomieniowego mikrokontrolera w roli analizatora stanów logicznych. Tym razem projekt analizatora powstał na bazie zestawu STM32F4DISCOVERY. Dzięki niestandardowemu użyciu układu DCMI w mikrokontrolerze STM32F407 uzyskano analizator stanów logicznych o godnych uwagi parametrach, przewyższający swymi osiągami popularny wśród hobbystów i studentów analizator Saleae.

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Czerwiec 2019

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym