W budowie urządzenia zastosowano moduł Bluetooth typu BT222. Może on komunikować się z systemem nadrzędnym za pośrednictwem różnych interfejsów, ale ze względu na łatwość obsługi oraz implementacji oprogramowania do tego celu jest polecany UART. Do poprawnej komunikacji za pośrednictwem UART nie jest wymagana obsługa sygnałów RTS i CTS, ale wtedy należy wprowadzić niewielkie opóźnienia czasowe pomiędzy bajtami danych wysyłanymi do modułu.
Należy bardzo ostrożnie zmieniać parametry komunikacji interfejsu UART, ponieważ niewłaściwe ustawienie może zablokować dostęp do modułu, a nie ma sposobu na przywrócenie ustawień bez poprawnej komunikacji z modułem. Uwaga! Moduł wymaga zasilania napięciem 3,3 V i nie toleruje napięcia 5 V na wejściach, więc przy współpracy z typowym Arduino musi być wyposażony w translator poziomu napięcia.
Arduino i BTM222
Płytka Arduino ma sprzętowy interfejs szeregowy UART, ale jest on połączony z konwerterem USB i dlatego bardzo przydaje się w czasie uruchamiania programów. Z tego powodu do komunikacji z modułem Bluetooth zostanie wykorzystany UART wykonany programowo.
Podzespoły należy połączyć, jak na fotografii 1 lub według schematu z rysunku 2. Po dołączeniu interfejsu USB dioda CONN na płytce AVT1635 powinna migać. Już teraz moduł Bluetooth będzie widziany przez inne urządzenia jako Serial Adapter (rysunek 3) i można go sparować np. ze smartfonem podając w trakcie tej operacji PIN 1234.
Program testowy
Pierwszy program posłuży do sprawdzenia poprawności połączeń i komunikacji z płytką AVT1635. Na początku dołączana jest biblioteka SoftwareSerial.h, deklarowane są zmienne, dwa bufory i dwa znaczniki odebranych komunikatów. Ostatecznie w sekcji setup() program uruchamia dwa interfejsy szeregowe, jeden programowy do komunikacji z modułem Bluetooth, drugi sprzętowy do śledzenia przebiegu programu i komunikatów z i do modułu (listing 1).
W pętli głównej program sprawdza czy zostały odebrane jakieś dane i umieszcza je w buforach - listing 2, funkcje baseReceive() i blueReceive(). W przypadku komunikacji po USB pierwsze wystąpienie znaku nowej linii n jest traktowane jako koniec komunikatu, co naturalnie pokrywa się z wciśnięciem klawisza ENTER na klawiaturze, natomiast moduł BTM222 każdy komunikat poprzedza i kończy znakiem nowej linii, dlatego odebranie komunikatu następuje po drugim znaku nowej linii (blueComplete >=2).
Ważną funkcją jest blueSend(), która odpowiada za wysyłanie komunikatów do modułu (listing 3). Po wysłaniu każdego znaku wstawiona jest przerwa delay(50). Dodatkowo, znak nowej linii n jest zamieniany na znak r, ponieważ moduł BTM222 wymaga, aby każda komenda zakończona była najpierw właśnie tym znakiem.
Po zaprogramowaniu płytki Arduino należy uruchomić dostępny w pasku narzędzi monitor szeregowy, ustawić prędkość komunikacji na 19200, a obok ustawić "nowa linia", jak na rysunku 4. Teraz w pasku wyślij należy wpisać AT i przycisnąć Enter, a moduł powinien odpowiedzieć OK. Tak można wysłać każdą z komend modułu BTM222 np. ATB?, która powoduje odesłanie sprzętowego identyfikatora układu.
Wykrywanie połączenia
Na każdy odebrany komunikat moduł BTM222 odpowiada OK lub ERROR. Ponadto, może wysłać jeden z komunikatów CONNECT lub DISCONNECT, które sygnalizują nawiązanie i zakończenie połączenia. Teraz program zostanie rozbudowany o funkcje wykrywające te zdarzenia.
Na początku jednak zostanie dodana nowa zmienna, która będzie przechowywała informacje o stanie połączenia oraz będzie decydowała o zaświeceniu diody LED znajdującej się na płytce Arduino (listing 4). Pętlę główną zmodyfikujemy, tak jak pokazano na listingu 5.
Po skompilowaniu zaprogramowaniu płytki należy uruchomić monitor szeregowy i połączyć się z modułem Bluetooth za pomocą dołączonej aplikacji. Temperatura jeszcze nie jest wskazywana, ale dioda LED reaguje prawidłowo - zaświeca się przy nawiązaniu połączenia i gaśnie po zamknięciu aplikacji a urządzenie wysyła komunikaty podobne do tych z rysunku 5.
Pomiar temperatury
Do pomiaru temperatury zastosowano czujnik LM35, który ma wyjście analogowe. Napięcie na wyjściu jest proporcjonalne do temperatury i wynosi 10 mV/°C. Takie rozwiązanie jest łatwe w realizacji i daje zakres pomiarowy od ok. 2 do 110°C. Najpierw zostaną dodane odpowiednie zmienne i skonfigurowane wyprowadzenia, ponieważ czujnik będzie zasilany z wyprowadzeń Arduino. Sposób skonfigurowania czujnika temperatury zaprezentowano na listingu 6.
Teraz w pętli głównej zostanie dodany fragment, który odpowiada za pomiar temperatury oraz jej zapis w postaci ramki "xx,x°C". Informacja ta będzie wysyłana do USB oraz, jeśli połączenie będzie aktywne (blueStatus == 1), to ramka będzie wysyłana także do modułu Bluetooth i w efekcie wartość temperatury będzie wyświetlana w oknie aplikacji (listing 7).
Aplikacja
Aplikację wykonano za pomocą Android Studio na podstawie projektu Arduino-Android-Sensors opisanego na stronie https://github.com/HarryGoodwin/Arduino-Android-Sensors. Po uruchomieniu aplikacji jest wyświetlane okno z wyborem urządzenia Bluetooth. Należy wybrać Serial Adapter, a aplikacja połączy się z modułem i zacznie wyświetlać temperaturę (rysunek 6 i 7).
Pełne źródła wszystkich programów i oraz aplikacji dostępne są w materiałach dodatkowych do artykułu.
KS