K U R S Bluetooth łączy mikrokontrolery, część 1 Specyficznym rodzajem danych Bluetooth (w skrócie BT) zdobywa coraz większą popularność, jest dzwięk zapisany w postaci cy- świadczy o tym jego coraz częstsze występowanie frowej. BT jest więc wykorzystywa- w urządzeniach powszechnego użytku. BT można spotkać nie ny w bezprzewodowych zestawach głośnomówiących przeznaczonych tylko w komputerach, mamy go już w komórkach i wielu do telefonów komórkowych. Upo- innych urządzeniach. wszechniają się także moduły BT, których zalety można wykorzystać już w urządzeniach budowanych atutem użytych modułów BT jest ten ma pokazać sposób wykorzy- samodzielnie. Dodatkowo są one bar- to, że po konfiguracji i nawiązaniu stania BT w prostych projektach. dzo odporne na wszelakiego rodzaju połączenia interfejs RS232 modułów Zainteresowani przebiegiem trans- zakłócenia. Mogą być zastosowane staje się przezroczysty . Użytkownik misji danych przez interfejs RS232 wszędzie tam, gdzie jest potrzebna odnosi wrażenie, jakby moduły były pomiędzy dwoma mikrokontrolerami, bezprzewodowa transmisja danych, połączone przewodem. Można więc a zwłaszcza sposobem interpretowa- przy czym użycie takich modułów powiedzieć, że moduły BT firmy nia odebranych danych, także znajdą wyręcza programistę z konieczności ConnectBlue tworzą bezprzewodowy dla siebie w przedstawionych dwóch panowania nad protokołem. Przy za- interfejs RS232. przykładach wiele cennych informa- stosowaniu modułów BT należy jedy- Jedną z cech modułów, które cji. Moduły BT można zastosować nie ustanowić połączenie i przesyłać wykorzystano w drugim przykładzie, nie tylko w urządzeniach działają- dane, nie martwiąc się o kontrolę jest możliwość szyfrowania przesy- cych w oparciu o RS232, ale także poprawności przesyłanych informacji. łanych danych. Znajdzie ona zasto- działających z RS422 lub RS485. Zajmie się tym układ sterujący mo- sowanie wszędzie tam, gdzie będzie Przedstawione dalej przykłady progra- dułem BT. Moduły BT mają zasięg wymagane duże bezpieczeństwo mów można sprawdzić w praktyce zazwyczaj do kilkuset metrów. Można przesyłanych danych. Moduł BT fir- (bez potrzeby posiadania modułów dla nich znalezć wiele różnorodnych my ConnectBlue może komunikować BT), łącząc mikrokontrolery przewo- zastosowań. Większość modułów BT się jednocześnie nie tylko z jednym dem przystosowanym do RS232. służących do przesyłania dzwięku (innym) modułem, ale przy pracy jest wyposażona w interfejsy USB, z włączonym trybem Multidrop je- Praktyczne informacje RS232 oraz PCM. W artykule zosta- den moduł może jednocześnie komu- o wykorzystaniu modułów BT ną przedstawione dwa przykłady wy- nikować się z wieloma modułami BT firmy ConnectBlue korzystania modułów BT do bezprze- (maksymalnie z siedmioma). W tym Moduły BT firmy ConnectBlue wodowej komunikacji ze sobą mikro- przypadku jeden moduł BT jest mo- mogą pracować w dwóch trybach: kontrolerów. Ich oprogramowanie ste- dułem głównym (wielopunktowym) w trybie przesyłania danych (data rujące zostało napisane w Bascomie. MultiDrop . Moduł pracujący jako mode) oraz w trybie konfigurowania Jeden przykład przedstawi system Multidrop automatycznie konfigu- modułu za pomocą komend AT (AT bezprzewodowego (zdalnego) odczytu ruje bezprzewodową sieć BT i roz- mode). Po włączeniu zasilania moduł temperatury, natomiast drugi pokaże, dziela dane do wszystkich modułów BT zawsze domyślnie pracuje w try- jak zrealizować bezprzewodowy sys- dołączonych. Nie jest wymagane do- bie wymiany danych. Aby przejść tem przesyłania sygnałów z czujek datkowe oprogramowanie przy pracy do pracy modułu w trybie komend alarmowych do centrali. W drugim modułów BT w tym trybie. W przy- AT, za pośrednictwem których bę- przykładzie transmisja będzie szy- kładzie pierwszym główny moduł BT dzie można dokonać konfiguracji, frowana. W przykładach zawartych (np. z włączonym trybem Multidrop) należy wysłać do modułu odpowied- w tym artykule wykorzystane zostały będzie mógł się komunikować bez- nią sekwencję znaków, które zmienią moduły BT firmy ConnectBlue, któ- przewodowo z wieloma oddalonymi tryb pracy na AT. Sekwencja przej- re były szczegółowo przedstawione od siebie bezprzewodowymi czujni- ścia modułu do trybu AT zostanie wraz z listą komend AT w EP9/03. kami temperatury. dokładnie przedstawiona w opisie Moduły te mają jedynie interfejs W dalszej części artykułu posta- pierwszego przykładu. Moduł BT RS232, przy czym skonfigurowanie ram się udowodnić, że ich stosowa- może być skonfigurowany jako ser- modułu do nawiązania połączenia nie jest niezwykle proste. W dwóch wer (server) lub jako klient (client). jest niezwykle proste. Konfigurowa- opisywanych dalej przykładach, Połączenie modułów BT odbywa się nie modułów odbywa się za pomocą w których połączone będą ze sobą zawsze pomiędzy serwerem a klien- komend AT tak jak w modemach tylko dwa moduły, tryb MultiDrop tem lub jednym serwerem i wieloma oraz niektórych modułach GSM lub będzie oczywiście wyłączony. Modu- klientami. Jeżeli inne moduły mają GPS. Użycie komend AT niezwykle ły będą sterowane tylko za pośred- się włączyć do danego modułu BT, upraszcza tę czynność. Dodatkowym nictwem mikrokontrolerów. Artykuł to ten moduł musi być skonfiguro- Elektronika Praktyczna 7/2004 73 K U R S wany do pracy jako serwer. Jeżeli mogą być zapisane w modułach na skonfigurowania modułu BT. Jeżeli moduł BT (lub moduły) ma usta- stałe (zapisanie w pamięci nieulotnej konfigurowanie BT zakończy się po- nawiać połączenie z serwerem, po- modułu) lub mogą być pamiętane, myślnie, dioda LED będzie świeciła winien zostać skonfigurowany jako aż do wyłączenia zasilania modułu. światłem ciągłym, w przeciwnym ra- klient (klient zawsze ustanawia połą- W przykładach wybrana została dru- zie będzie migała. Ponieważ moduły czenie z serwerem). Moduł skonfigu- ga opcja, gdyż mikrokontrolery steru- BT firmy ConnectBlue posiadają inter- rowany jako klient musi znać adres jące modułami BT zawsze po włą- fejs RS232 zgodny z poziomami na- modułu serwera, z którym będzie czeniu zasilania zaczynają swoją pra- pięć -12 V i +12 V (choć nie tylko, się łączył oraz jego nazwę. Moduły cę od konfigurowania modułów BT. bo mają one także linie interfejsu BT mają swoje adresy, tak jak mają Nie było więc potrzeby zapisywania RS232 zgodne z poziomami TTL), je np. karty sieciowe. Moduły firmy ustawianej konfiguracji w nieulotnej zastosowano w układzie dodatkowy ConnectBlue mają trzy metody wy- pamięci modułu BT. Dokładny wy- konwerter poziomów MAX232. Dopa- brania serwera, z którym będą się kaz oraz opis komend modułów BT sowuje on sygnały interfejsu RS232 łączyć. Pierwszą metodą jest znale- firmy ConnectBlue można znalezć na modułu BT do poziomów akceptowa- zienie (wyszukanie) serwera. Drugą, stronie www.connectblue.com, a tak- nych przez mikrokontroler. Układ ręczne wpisanie jego adresu i na- że w EP9/03 w artykule poświęco- MAX232 jest typową przetwornicą po- zwy, natomiast trzecia metoda pole- nym modułom BT tejże firmy. jemnościową, która zwiększa napięcie ga na wyborze serwera z tzw. listy 5 V oraz je neguje. Na list. 1 został ulubionych , na którą wcześniej zo- System bezprzewodowego odczytu przedstawiony program realizujący stał wpisany. Moduł BT firmy Con- temperatury serwer temperatury napisany w Ba- nectBlue ma możliwość włączenia W tej części artykułu zostanie scomie. W pierwszej kolejności zosta- opcji pozwalającej na odbiór danych pokazany przykład bezprzewodowego ją skonfigurowane parametry transmi- z innego modułu BT. Jeżeli moduł systemu odczytu temperatury mie- sji RS232. Mikrokontroler sterujący pracuje jako klient i nadchodzi do rzonej w odległym pomieszczeniu. będzie się komunikował z modułem niego połączenie z odległego modu- Na marginesie warto zaznaczyć, że z domyślnymi parametrami BT, czyli: łu BT, zmienia automatycznie swoją pomiar jest wykonywany z dokładno- prędkość 57600 bd, dane 8-bitowe, konfigurację tak, by dla przychodzą- ścią do 0,1 stopnia. Wykorzystano tu brak parzystości oraz 1 bit stopu. cego połączenia stał się serwerem. tylko jeden czujnik temperatury, ale Aby uzyskać taką prędkość transmisji Wspomniana była tzw. lista ulubio- nie znaczny to, że nie można za- interfejsu szeregowego mikrokontrole- nych . Jest to lista, na którą można stosować ich więcej. Układ mierzący ra, zastosowany został rezonator wpisać co najwyżej 10 modułów BT temperaturę pracuje z modułem BT kwarcowy o częstotliwości pracujących jako serwery, z którymi skonfigurowanym jako serwer. Urzą- 7,3728 MHz. Taki rezonator gwarantu- moduł ten będzie się łączył. Taka dzenie to można więc nazwać ser- je uzyskanie wymaganej podstawy lista może służyć do szybkiego wy- werem temperatury . Natomiast urzą- czasu dla UART-u. Przy takim wybo- boru modułów (serwerów), z którymi dzenie odczytujące (bezprzewodowo) rze rezonatora błędy transmisyjnej klient będzie nawiązywał połączenie, temperaturę zostało skonfigurowane podstawy czasu nie wystąpią nawet przy czym jest pomocna, gdy często jako klient. Gdyby serwer tempe- dla większych prędkości niż 57600 jest zmieniany serwer. Kiedy dany ratury został skonfigurowany do bd. Oczywiście prędkość interfejsu moduł komunikuje się z poszczegól- pracy w trybie MultiDrop , mogłoby RS232 modułu BT można zmienić nymi modułami, to jest konfigurowa- się z nim łączyć wiele końcówek odpowiednimi komendami AT. Linia ny jako master (układ nadrzędny). typu klient. W ten sposób można sterująca diodą LED została skonfigu- Moduł BT pracujący jako master zrealizować wyświetlanie mierzonej rowana jako wyjście, natomiast linia, ma prawa do ustanawiania połą- przez serwer temperatury w wielu do której został dołączony czujnik, czenia z innym modułem BT, do pomieszczeniach, w których znajdują jako linia 1-wire. Dodatkowo w pro- wykonywania wyszukiwania oraz do się klienci temperatury . W przy- gramie zastosowano odbiór buforowy akceptacji połączeń przychodzących kładzie występuje tylko jeden klient, danych (z wykorzystaniem przerwania od innych modułów. W przypadku, więc nie został wykorzystany tryb od odbiornika RS232 i bufora). gdy moduł BT pracuje jako układ MultiDrop . Przykładowy system W ten sposób uzyskuje się ochronę podrzędny (slave), ma prawa do łą- działa tak, że na zapytanie klienta przed przeoczeniem znaku otrzymane- czenia się do innych modułów BT, serwer dokonuje pomiaru i odsy- go z RS232. Bufor odbiorczy został a także jako master do wykonywa- ła wartość zmierzonej temperatury. skonfigurowany za pomocą instrukcji nia wyszukiwania oraz do akceptacji Bezprzewodowy odczyt zmierzonej config serialin na wielkość 10 połączeń przychodzących od innych temperatury jest także możliwy za znaków. W programie zadeklarowano modułów BT. Wszystkie możliwe pomocą jedynie modułu BT i kom- dwie procedury: procedurę sprawdza- parametry i funkcje modułów BT puterowego terminala. nia poprawności wykonania komendy można skonfigurować za pomocą AT oraz procedurę pomiaru tempera- komend AT. Dostępnych jest 50 ła- Serwer temperatury tury. Zadeklarowano także kilka twych w użyciu komend AT. Oczy- Na rys. 1 przedstawiono schemat zmiennych, z których odczyt, s wiście, jak wcześniej pisałem, przed ideowy serwera temperatury, którym i uniw służą do interpretacji otrzy- użyciem komend AT, moduł BT steruje mikrokontroler ATMEGA8. manych z RS232 znaków, pozostałe powinien zostać przełączony z trybu Czujnikiem temperatury jest znany wykorzystywane są przy pomiarze transmisji danych do trybu AT. Kon- układ DS1820 z magistralą 1-wire. i obliczaniu temperatury. W dalszej figurowane parametry oraz tryby pra- Dioda LED sygnalizuje błąd wykona- części programu, linii sterującej diodą cy modułu BT za pomocą komend nia komendy AT oraz prawidłowość został przypisany alias, dla instrukcji Elektronika Praktyczna 7/2004 74 K U R S Rys. 1. Schemat ideowy serwera temperatury input zostało wyłączone echo (in- dułów BT mogą być wysyłane także pis ich ze zmiennej s do łańcucha strukcja input nie będzie wysyłała komendy rozszerzone, których znaki znaków odczyt. Jeżeli otrzymany zwrotnie otrzymanych znaków) oraz AT są dodatkowo rozszerzone znak to O lub K , to jest on do- włączone zostają globalne przerwania, o znak * . W programie większość dawany do zmiennej odczyt. Poje- by działała transmisja buforowa. Jak wysyłanych komend to komendy roz- dyncze odebrane znaki są zapisywane pisałem, aby przejść z trybu przesyła- szerzone. Należy także zwrócić uwagę do zmiennej s. Jeżeli odczytano znak nia danych do trybu AT, należy do na to, że parametry komend AT są LF kończący wysłany przez BT ko- modułu BT wysłać odpowiednią se- oddzielone przecinkami. Jeżeli wysła- munikat, następuje sprawdzenie, czy kwencję znaków. Domyślną sekwencją na komenda ma zwrócić ciąg żąda- zmienna odczyt posiada znaki różne znaków (można ją zmienić komenda- nych z modułu parametrów, otrzymy- od OK . Jeśli tak, to znaczy że mi AT), które zmieniają tryb danych wana informacja jest poprzedzona otrzymano inne znaki niż OK . Na- modułu BT na tryb AT, jest wysłanie znakami CR, LF, gdzie CR to znak stępuje wtedy wejście do nieskończo- trzech znaków / . Ale to nie wystar- potwierdzenia, a LF (kod ASCII 10) nej pętli do-loop, w której naprze- czy, by wejść w tryb AT. Należy to znak nowej linii. Poprawne wysła- miennie co 250 ms zostaje zmieniony spełnić jeszcze odpowiednie kryteria nie i wykonanie komendy przez BT stan diody LED (LED będzie migała). przed i po wysłaniu tej sekwencji. jest sygnalizowane wysłaniem przez Wyjście z tej pętli będzie możliwe po Przed i po wysłaniu sekwencji zna- BT znaków: CR, LF, OK , CR, LF. wyzerowaniu mikrokontrolera. Oczy- ków / przez jedną sekundę nie Znaki OK świadczą o prawidłowym wiście ta procedura nie może być mogą być przesyłane przez RS232 wykonaniu przesłanej komendy. użyta w tej postaci, jeśli po wykona- żadne znaki. W programie przed wy- W przypadku jakiegoś błędu i niewy- niu komendy moduł BT będzie odsy- słaniem znaków / odczekiwana jest konania komendy, moduł BT zwróci łał żądane dane, gdyż będzie to po- 1 sekunda, a po wysłaniu, dla bez- CR, LF, ERROR , CR, LF czyli wy- wodowało zawieszenie programu. Na- pieczeństwa 2 sekundy. Co najważ- śle komunikat ERROR . Pierwsza leży wtedy napisać nową lub przero- niejsze, cała sekwencja znaków / wysyłana w programie komenda bić opisaną procedurę, by dodatkowo (czyli wysłanie) /// musi odbyć się ate0 wyłącza echo znaków, które umożliwiała odczyt żądanych danych, w czasie nie większym niż 200 ms. otrzymuje moduł BT. Domyślnie echo wysłanych przez BT po wykonaniu Tak więc wejście modułu do trybu modułu BT jest włączone, ale przy danej komendy. Kolejne wysyłane ko- AT z poziomu komputerowego termi- współpracy z mikrokontrolerem jest mendy mają znak * , czyli są to nala nie będzie raczej możliwe. Po- ono wyłączone, gdyż jest niewykorzy- komendy rozszerzone. Komenda wrót z trybu AT do trybu danych stywane. Instrukcja print, jeśli nie AGDM... ma pierwszy parametr jest możliwy poprzez wykonanie od- jest zakończona znakiem ; sama równy 1 , który powoduje, że moduł powiedniej komendy. W dalszej części dba o zakończenie wysyłanych zna- nie będzie widoczny dla innych mo- programu wysyłane są komendy, na ków znakiem CR. Po wysłaniu każdej dułów, tzn. inne moduły nie będą od przykładzie których krótko opiszę, co komendy wywoływana jest procedura niego mogły odczytać informacji będzie się dziać z modułem BT. sprawdz_stat, która sprawdza, czy o adresie, nazwie, nie będzie możli- Wcześniej przedstawię pokrótce dane wysłana komenda została poprawnie we skorzystanie z komendy wyszuka- o formacie instrukcji AT i informa- wykonana. W procedurze tej na po- nia modułu itp. Ostatni parametr tej cjach zwrotnych po ich przesłaniu. czątku czyszczona jest zmienna od- komendy, jak i w kolejnych komen- Komenda AT składa się z trzech czę- czyt typu string. Następnie w pętli dach oznacza, czy ustawienia dokona- ści: prefiksu, ciała i zakończenia. Pre- do-loop odczytywane są za pomocą ne daną komendą będą pamiętanie fiksem są zawsze znaki AT . Wiel- instrukcji inkey znaki, aż do otrzy- w nieulotnej pamięci modułu, czy kość liter nie ma znaczenia przy mania znaku LF. Ma to na celu po- nie. Nie ma potrzeby zapisywania wysyłaniu komend do modułu BT. zbycie się początkowych znaków CR ustawień w pamięci nieulotnej, ponie- Ciałem jest łańcuch znaków składają- i LF, które uniemożliwią proste po- waż jak pisałem, zawsze po włącze- cych się na rozkaz, a zakończeniem równanie, czy otrzymano znaki OK . niu mikrokontrolera będzie on konfi- znak CR. Znak CR odpowiada znako- W kolejnej pętli do-loop, także wy- gurował moduł BT. Tak więc ostatnie wi ASCII o numerze 13 i jest równo- konywanej aż do otrzymania znaku parametry komend mają wartości 0 . ważny np. klawiszowi Enter. Do mo- LF, odbywa się odczyt znaków i za- Komenda AGCM... z pierwszym pa- na 7/2004 Elektronika Praktyczna 7/2004 75 K U R S List. 1. Program realizujący serwer temperatury Serwer Temperatury z Bluetooth Przyklad programu konfigurujacego Bluetooth jako serwer wysylajacy na otrzymane zapytanie zmierzona temperature czujnikiem DS1820 przesyłanie dany niekodowane Marcin Wiazania marcin.wiazania@ep.com.pl $regfile = m8def.dat rejestry mikrokontrolera atmega8 $crystal = 7372800 czestotliwosc taktowania mikrokontrolera $baud = 57600 informuje kompilator o predkosci transmisji Config Pinb.1 = Output linia pb.1 jako wyjscie Config Serialin = Buffered , Size = 10 konfiguracja by interfejs rs232 uzywal przy odbiorze transmisji buforowej (bufor o wielkosci 10 znakow) Config 1wire = Portb.2 konfiguracja linii pb2 jako 1wire Declare Sub Sprawdz_stat procedura sprawdzajaca status wykonania wyslanego polecenia at Declare Sub Pom_temp procedura pomiaru temperatury z rozdzielczoscia 0,1 st. C Dim Odczyt As String * 5 zmienna string ktora przechewuje odczytanu status z bluetooth oraz z formatowana wartosc temperatury Dim S As String * 1 pomocnicza zmienna tekstowa Dim Uniw As Byte uniwersalna zmienna pomocnicza Dim Bd(9) As Byte tablica przechowujaca wyniki odczytanych pomiarow temperatury z termometru DS1820 Dim T As Integer zmienna przechowujaca zmierzona temperature Dim T1 As Integer zmienna pomocnicza do obliczania temperatury Dim Tmp As Byte zmienna pomocnicza do obliczania temperatury Led Alias Portb.1 przypisanie aliasu led linii pb.1 Set Led wylaczenie diody led Echo Off wylaczenie echa instrukcji input Enable Interrupts globalne odblokowanie przerwan Wait 1 czekaj 1 sekunde Print /// ; wyslij 3x / bez wysylania dodatkowego kodu 13 (CR enter) przelacza modul BT w tryb AT z trybu danych Wait 2 czekaj 2 sekundy Print ate0 wyłączenie echa wysyłanych komend Call Sprawdz_stat sprawdzenie statusu wykonania wyslanej do BT komendy Print at*agdm=1,0 modul BT nie bedzie widoczny dla innych modulow BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agcm=2,0 wlaczenie przyjmowania i akceptowania polaczen Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agpm=1,0 wylaczenie trybu parowania modulow Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agsm=1,0 wylaczenie bezpieczenstwa polaczen (autoryzacja i szyfrowanie) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agmsp=0,0 modul BT w nadchodzacych polaczeniach zawsze bedzie probowal stac sie masterem Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agln={034}Server Temp{034},0 nadaje nazwe Server Temp modulowi BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*aglc=0,0 zapisuje COD modułu BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*addcp=255,0 wylaczenie profilu dla clienta (wylaczenie pracy jako clienta) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*addsp=0,0 wlaczenie profilu portu szeregowego dla serwera (praca jako serwer) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*adwm=0,0,0 wylaczenie mozliwosci jednoczesnej pracy z wieloma modulami BT (wylaczenie trybu wireless MultiDrop) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*accb=0,0 wyłacza mozliwosc zdalnej konfiguracji modulu BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*addm przelacza modul BT z powrotem w tryb transmisji danych Call Sprawdz_stat sprawdzenie statusu wykonania komendy Reset Led zapala diode LED Do Input Odczyt odczytanie znakow z bufora odbiorczego Uniw = Instr(odczyt , t? ) spawdzenie czy w odczytanym ciagu znakow znajduje sie slowo t? If Uniw > 0 Then jesli uniw>0 (znajduje sie slowo t? ) to Call Pom_temp wywolanie procedury pomiaru temeratury Odczyt = Str(t) konwersja odczytanej temperatury na postac tekstowa Print Temp= ; wyslanie znakow Temp= bez dodatkowego znaku CR (13 enter) Print Format(odczyt , 0.0 ) waslanie z formatowanej do 0.0 wartosci temperatury End If Loop koniec petli do-loop End koniec programu Sub Pom_temp procedura pomiaru temperatury z dokladnioscia do 0,1 st C 1wreset zerowanie magistrali 1wire 1wwrite &HCC przeskocz zapis numeru ID 1wwrite &H44 Start pomiaru Waitms 750 czekaj 600 ms czas potrzebny na dokonanie pomiaru temperatury 1wreset zerowanie magistrali 1wire 1wwrite &HCC przeskocz zapis numeru ID 1wwrite &HBE rozkaz odczytu danych Bd(1) = 1wread(9) odczyt danych do tablicy bd 1wreset zerowanie magistrali 1wire kolejne instrukcje obliczaja temperature z precyzja 0,1 st C Tmp = Bd(1) And 1 obliczenie wartosci zmiennej tmp If Tmp = 1 Then Decr Bd(1) jesli tmp=1 to zmniejsz o jeden pierwszy element tablicy bd T = Makeint(bd(1) , Bd(2)) laczy dwa bajty w zmienna integer T = T * 50 : T = T 25 : T1 = Bd(8) Bd(7) : T1 = T1 * 100 obliczenie temperatury T1 = T1 / Bd(8) : T = T + T1 : T = T / 10 obliczenie temperatury (zmienna T zawiera obliczana temperature) End Sub koniec procedury pomiaru temperatury Sub Sprawdz_stat procedura sprawdzania statusu wykonania komendy Odczyt = zaladowanie do zmiennej string wartosci pustej Do poczatek petli S = Inkey() zapisz do zmiennej s znak odczytany z bufora odbiorczego Loop Until S = Chr(10) zakoncz petle gdy odebrany znak ma kod ascii 13 (CR enter) Do poczatek drugiej warunkowej petli do-loop S = Inkey() zapisz do zmiennej s znak odczytany z bufora odbiorczego If S = O Or S = K Then jesli znak zapisany do s to O lub K to Odczyt = Odczyt + S dodaj do zmiennej odczyt znak zapisany w zmiennej s End If Loop Until S = Chr(10) zakoncz petle gdy odebrany znak ma kod ascii 13 (CR enter) If Odczyt <> OK Then jesli wartosc zapisana w odczyt rozna ok slowa OK to Do poczatek petli nieskonczonej do-loop Toggle Led zmien na przeciwny stan diody LED Waitms 250 czekaj 250 ms Loop koniec nieskonczonej petli do-loop End If End Sub koniec procedury sprawdzajacej status wykonania komendy Elektronika Praktyczna 7/2004 76 K U R S rametrem równym 2 włącza przyj- w tryb danych zapalana jest dioda ter poziomów napięcia RS232. Na mowanie i akceptację połączeń. Będą LED, po czym program wykonuje pę- list. 2 został przedstawiony program więc mogły łączyć się do niego mo- tlę główną programu. Za pomocą in- realizujący klienta temperatury. duły BT. Komenda agpm... z pierw- strukcji input oczekuje w niej na Także i w tym przypadku wy- szym parametrem równym 1 wyłą- odbiór zapytania o temperaturę, po- korzystany został odbiór buforowy cza tryb parowania modułów, który twierdzonego znakiem CR np. kla- danych z RS232. Początkowe in- jest wykorzystywany przy bezpiecz- wiszem Enter. Serwer wysyła kliento- strukcje w programie odpowiednio nym nawiązywaniu połączenia modu- wi wartość zmierzonej temperatury konfigurują LCD, definiują znak łów. Komenda agsm... także na zapytanie składające się ze zna- stopnia, wyłączają echo instrukcji z pierwszym parametrem równym 1 ków t? . Funkcja instr zwraca po- input oraz włączają przerwania wyłącza tryb szyfrowanego przesyła- zycję szukanego ciągu znaków w ode- globalne. Po wyświetleniu komunika- nia danych. Te dwa wymienione try- branym łańcuchu, w tym przypadku tu Konfig BT następuje konfiguro- by są wykorzystywane w drugim szuka znaków t? w zmiennej od- wanie modułu. Niektóre komendy są przykładzie. Komenda agmsp... okre- czyt. Jeżeli ciąg zostanie znaleziony, identyczne jak w przypadku serwera śla rolę mastera i slave a modułu. funkcja zwróci wartość większą od 0. temperatury, dlatego opisane zostaną Pierwszy parametr o wartości 0 po- W tym przypadku zostanie wywołana tylko te, których parametry różnią woduje, że moduł w nadchodzących procedura pomiaru i obliczenia tem- się lub te, które nie występowały połączeniach zawsze będzie próbował peratury. Jest to typowa procedura w przypadku serwera temperatury. być masterem. Komenda agln... na- odczytu temperatury z DS1820 i jej Komenda agmsp... w tym przypad- daje mu ją, ponieważ wszystkie mo- przeliczenia dla uzyskania dokładno- ku ma parametr pierwszy nie 0 , duły BT mają swoją nazwę. W tym ści 0,1 stopnia C, więc nie będzie tu lecz 1 . Konfiguruje on moduł tak, przypadku została mu nadana nazwa dokładnie omawiana. Po pomiarze by pozwalał drugiej stronie w nad- Serwer Temp . Wysyłana nazwa temperatury i odpowiednich oblicze- chodzącym połączeniu zadecydować, musi się zawierać w cudzysłowach niach jej wartość przechowuje zmien- czy ma być masterem, czy slave- , a zostały już one użyte w in- na t. Wartość zmiennej t zamieniana em. Procedura sprawdz_stat jest strukcji print, więc zostały wstawio- jest funkcją str na tekst. Następnie podobna jak w serwerze tempera- ne przez zastosowanie zapisu {034}, zostaje wysłany przez moduł BT tekst tury, tylko że informacja o błędzie gdzie 034 to znak ASCII cudzysłowu. Temp= oraz zmierzona i odpowied- jest wyświetlana na LCD. Komenda Komenda aglc... zapisuje COD mo- nio sformatowana wartość temperatu- agln... nadaje modułowi klienta dułu o wartości 0. COD to klasa ry (na przykład może to być: 23.5). nazwę Client BT . Komenda ad- modułu (moduł może należeć do kla- Po wysłaniu temperatury, pętla pro- dcp... wraz z pierwszym parame- sy audio, sieciowej itp.), który może gramu powtarza się i następuje ocze- trem o wartości 0 konfiguruje mo- zostać odczytany podczas przeszuki- kiwanie na kolejne zapytanie o tem- duł do pracy jako klient, natomiast wania. Na przykład dany moduł peraturę. Wadą identyfikacji znaków komenda addsp... z wartością może sprawdzić, czy znajduje się zapytania w przedstawiony sposób pierwszego parametru równą 255 inny moduł BT, z którym może się jak łatwo zauważyć jest to, że tem- wyłącza pracę modułu jako serwer. połączyć i ma odpowiednią klasę peratura będzie wysyłana nie tylko W przypadku serwera temperatury COD . COD we wszystkich przy- po odebraniu znaków t? , ale i do- było odwrotnie, czyli komenda ad- kładach został ustawiony na wartość wolnych znaków przed t? , np. dcp miała parametr równy 255 , 0 , gdyż moduły w prezentowanych otrzymanie łańcucha abdt? także a addsp... parametr równy 0 . przykładach są wykorzystywane do spowoduje wysłanie przez serwer in- Pierwszy parametr komendy ad- własnego celu. Komenda addcp... formacji o temperaturze. Aby temu nrp... określa, z iloma modułami z pierwszym parametrem równym zaradzić, należy przerobić program BT będzie można się połączyć. 255 powoduje wyłączenie pracy odpowiedzialny za identyfikację zapy- W przykładzie wpisano wartość modułu jako klient , natomiast ko- tania. W tym przypadku nie jest to 1 , co oznacza łączenie się tylko menda addsp... z pierwszym para- jednak uciążliwa wada. Po odpowied- z jednym modułem BT. Aby było metrem o wartości 0 konfiguruje nim skonfigurowaniu serwera tempe- możliwe połączenie klienta z serwe- moduł jako serwer. Komenda ratury należy skonfigurować drugi rem, należy zapisać do modułu BT adwm... z pierwszym parametrem moduł BT, by pracował jako klient klienta dane o serwerze, z którym równym 0 wyłącza pracę modułu i by było możliwe nawiązanie komu- ma nastąpić połączenie. Dane te to BT w trybie MultiDrop , z kolei nikacji z serwerem. Klient temperatu- adres oraz nazwa serwera. Realizuje drugi parametr określa sposób działa- ry będzie otrzymywał zmierzoną tem- to komenda adwdrp... . Pierwszy nia modułu w tym trybie. Komenda peraturę po wysłaniu zapytania oraz parametr to numer (identyfikator) accb... z pierwszym parametrem wyświetlał ją na wyświetlaczu LCD. wpisywanych danych o wybranym o wartości 0 wyłącza możliwość module serwera. Dla danych pierw- zdalnej konfiguracji modułu (poprzez Klient temperatury szego serwera będzie to wartość 0 inny moduł BT). Wykonanie opisa- Na rys. 2 przedstawiono sche- (numery są liczone od 0). Drugi pa- nych komend wystarczy, by moduł mat ideowy klienta temperatury. rametr to adres modułu serwera za- BT pracował jako serwer i poprawnie Układ klienta temperatury ma jedy- wierający sześć pól reprezentujących komunikował się z innym modułem nie dołączony do mikrokontrolera wartość szesnastkową składającą się BT. Aby przesyłać dane, należy z po- wyświetlacz LCD, na którym będzie z dwóch znaków. Trzeci parametr, wrotem przejść do trybu danych. Jest prezentowana temperatura oraz ko- o wartości 2 , określa, w jaki spo- to możliwe po wykonaniu komendy munikaty. Podobnie jak w serwerze sób nastąpi połączenie modułów. Do addm . Po prawidłowym wejściu temperatury, układ ma także konwer- wyboru są warianty, w których: po- na 7/2004 Elektronika Praktyczna 7/2004 77 K U R S List. 2. Program realizujący klienta temperatury Client odczytujacy temperature przez Bluetooth Przyklad programu konfigurujacego Bluetooth jako client, ktory odbiera w serwera temperatury zmierzona temperature przesyłanie danych niekodowane Marcin Wiazania marcin.wiazania@ep.com.pl $regfile = m8def.dat rejestry mikrokontrolera atmega8 $crystal = 7372800 czestotliwosc taktowania mikrokontrolera $baud = 57600 informuje kompilator o predkosci transmisji Config Lcd = 16 * 2 konfiguracja organizacji znakow wyswietlacza LCD Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 konfiguracja pinow mikrokontrolara do Config Serialin = Buffered , Size = 20 konfiguracja by interfejs rs232 uzywal przy odbiorze transmisji buforowej (bufor o wielkosci 20 znakow) Declare Sub Sprawdz_stat procedura sprawdzajaca status wykonania wyslanego polecenia at Dim Odczyt As String * 15 zmienna string ktora przechowuje odczytanu status z bluetooth oraz otrzymana wartosc temperatury Dim S As String * 1 pomocnicza zmienna tekstowa Dim Licz As Integer zmienna licznikowa czasu braku odpowiedzi z serwera na zapytania Dim Czekaj As Byte zmienna licznikowa czasu oczekiwania na odebranie danych o temperaturze Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 deklaracja znaku stopnia dla wyswietlacza LCD Echo Off wylaczenie echa instrukcji input Enable Interrupts globalne odblokowanie przerwan Cursor Off wylaczenie kursora Cls czysc LCD Lcd Konfig BT informacja o konfiguracji Bluetooth Wait 1 czekaj 1 sekunde Print /// ; wyslij 3x / bez wysylania dodatkowego kodu 13 (CR enter) przelacza modul BT w tryb AT z trybu danych Wait 2 czekaj 2 sekundy Print ate0 wyłączenie echa wysyłanych komend Call Sprawdz_stat sprawdzenie statusu wykonania wyslanej do BT komendy Print at*agdm=1,0 modul BT nie bedzie widoczny dla innych modulow BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agcm=2,0 wlaczenie przyjmowania i akceptowania polaczen Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agpm=1,0 wylaczenie trybu parowania modulow Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agsm=1,0 wylaczenie bezpieczenstwa polaczen (autoryzacja i szyfrowanie) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agmsp=1,0 modul BT w nadchodzacych polaczeniach bedzie pozwalal drugiej stronie zadecydowac, czy ma byc masterem czy slavem Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*agln={034}Client BT{034},0 nadaje nazwe Client BT modulowi BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*aglc=0,0 zapisuje COD modułu BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*addcp=0,0 wlaczenie profilu dla clienta (wylaczenie pracy jako serwer) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*addsp=255,0 wylaczenie profilu portu szeregowego dla serwera (praca jako client) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*adnrp=1,0 modul BT bedzie mial mozliwosc laczenia sie tylko do jednego odleglego modulu BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*adwdrp=0,00803719bea4,2,0,{034}Server Temp{034},0 wpisanie adresu modulu bt z ktorym bedzie odbywac sie komunikacja (w tym przypadku bedzie to numer modulu serwera) oraz modul bedzie caly czas sie probowal polaczyc Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*adwm=0,0,0 wylaczenie mozliwosci jednoczesnej pracy z wieloma modulami BT (wylaczenie trybu wireless MultiDrop) Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*accb=0,0 wyłacza mozliwosc zdalnej konfiguracji modulu BT Call Sprawdz_stat sprawdzenie statusu wykonania komendy Print at*addm przelacza modul BT z powrotem w tryb transmisji danych Call Sprawdz_stat sprawdzenie statusu wykonania komendy Wait 1 czekaj 1 sekunde Cls czysc lcd Lcd Czekanie na Temp wyswietla na lcd komunikat oczekiwania na odbior temperatury Do petla glowna programu Odczyt = zapisz do zmiennej odczyt znak pusty Czekaj = 0 zerowanie zmiennej czekaj Print t? wysyla zapytanie o temperature Incr Licz zwieksz zmienna licznikowa braku odpowiedzi z serwera Do poczatek petli do-loop Incr Czekaj zwieksz o jeden zmienna czekaj While _rs_head_ptr0 <> _rs_tail_ptr0 petla wykonawana gdy parametry rozne Waitms 1 czekaj 1 ms S = Inkey() zapisz do zmiennej s pierwszy znak odczytany z bufora odbiorczego If S > Chr(31) Then jesli znak zapisany do s ma kod ascii wiekszy niz 31 to Odczyt = Odczyt + S dodaj do zmiennej odczyt znak zapisany w zmiennej s End If If S = Chr(13) Then jesli s ma kod znaku 13 (enter) to Licz = 0 wyzeruj zmienna licz Cls czysc LCD Lcd Odczyt ; Chr(0) ; C wyswietl na LCD otrzynana z serwera wartosc temperatury z dodatkowym znakiem stopnia i znakiem C Exit Do opusc petle do-loop End If Wend koniec petli while Waitms 100 czekaj 100 ms Loop Until Czekaj = 30 wykonuje petle do-loop az czekaj=30 (uplynie ok. 3 sekundy) If Licz = 3 Then jesli licz=3 to Cls czysc LCD Lcd Brak komunikacji wyswietl komunikat braku otrzymania temperatury po 6 sekundach od czasu wyslania rozkazu jej przeslania Licz = 0 wyzeruj zmienna licz End If Loop koniec petli glownej programu End koniec programu Sub Sprawdz_stat procedura sprawdzania statusu wykonania komendy Odczyt = zaladowanie do zmiennej string wartosci pustej Do poczatek petli S = Inkey() zapisz do zmiennej s znak odczytany z bufora odbiorczego Loop Until S = Chr(10) zakoncz petle gdy odebrany znak ma kod ascii 13 (CR enter) Do poczatek drugiej warunkowej petli do-loop S = Inkey() zapisz do zmiennej s znak odczytany z bufora odbiorczego If S = O Or S = K Then jesli znak zapisany do s to O lub K to Odczyt = Odczyt + S dodaj do zmiennej odczyt znak zapisany w zmiennej s End If Loop Until S = Chr(10) zakoncz petle gdy odebrany znak ma kod ascii 13 (CR enter) If Odczyt <> OK Then jesli wartosc zapisana w odczyt rozna ok slowa OK to Cls czysc LCD Lcd Blad komendy wyswietl na LCD komunikat Blad komendy Do poczatek petli nieskonczonej do-loop Loop koniec nieskonczonej petli do-loop End If End Sub koniec procedury sprawdzajacej status wykonania komendy Elektronika Praktyczna 7/2004 78 K U R S Rys. 2. Schemat ideowy klienta temperatury łączenie nastąpi po wykryciu prze- oczekiwania na temperaturę od po wysłaniu zapytania przez ok. 3 syłania danych, moduł zawsze bę- serwera. Wysyłane jest także za- sekundy nie otrzyma się wartości dzie próbował się połączyć oraz po pytanie o temperaturę do serwera, temperatury od serwera, zmienna wykryciu zewnętrznego sygnału na czyli znaki t? zakończone zna- licz zostaje zwiększona o jeden odpowiednim pinie modułu BT. Me- kiem CR. Program główny został oraz ponownie zostaje wysłane do tody połączenia można także łączyć napisany w taki sposób, by nie serwera zapytanie. Pętla wewnętrz- ze sobą razem. Wpisanie wartości dochodziło do jego wstrzymywania. na do-loop odlicza 100 ms opóz- 2 powoduje, że moduł klienta cały Odliczane jest opóznienie, po któ- nienia, gdy nie odebrano żadnych czas będzie się próbował połączyć rym w przypadku braku przesłania danych z serwera. Zliczenie 30 z serwerem temperatury. Czwarty od serwera temperatury wyświetla- takich opóznień powoduje opusz- parametr o wartości 0 spowoduje, ny jest stosowny komunikat. Ko- czenie pętli jest to równoznacz- że klient będzie się łączył tylko munikat o braku połączenia z ser- ne z odliczeniem 3 sekund. Próba z jednym określonym serwerem i z werem jest wyświetlony dopiero po wysłania trzech zapytań o tempe- żadnym innym. Przedostatnim pa- trzech nieudanych wysłaniach za- raturę zakończonych niepowodze- rametrem jest nazwa serwera, która pytania o temperaturę. Zmienna niem spowoduje, że zmienna licz także musi być zapisana w cudzy- licz liczy nieudane zapytania przyjmie wartość 3 i zostanie słowach. W tym przypadku również (zapytania bez odpowiedzi serwera wyświetlony komunikat o braku został wykorzystany zapis {034}, temperatury). W pętli do-loop, łączności z serwerem. Po wyświe- który wstawia dodatkowe cudzysło- która jest wykonywana aż czekaj tleniu tegoż komunikatu zmienna wy. Adres modułu BT, z którym osiągnie wartość 30, zwiększana licz jest zerowana, ale działanie będzie nawiązywane połączenie, jak jest zmienna czekaj o jeden. programu nie jest wstrzymywane i jego nazwę można odczytać zdal- Pętla while jest wykonywana do- i program nadal będzie wysyłał za- nie poprzez wykonanie odpowiedniej tąd, aż parametry _rs_head_ptr0 pytania o temperaturę do serwera. komendy. W tym przypadku moduł i _rs_tail_ptr0 (tworzone przy Jeśli ją otrzyma, to zostanie ona serwera musi mieć włączoną opcję użyciu buforowego przesyłania da- wyświetlona na LCD. widoczności dla innych modułów nych) są różne, czyli gdy w bu- Jak widać na przykładzie pętli BT. W przykładach ta możliwość forze odbiorczym RS232 znajdują głównej powyższego programu, nie nie jest wykorzystywana, lecz adres się nieodebrane znaki. Jeśli tak jest trudno napisać program, który oraz nazwa serwera są znane i wpi- jest, do zmiennej s ładowane są nie będzie wstrzymany oczekiwa- sane na stałe w programie. Adres odczytywane znaki i jeżeli ode- niem na dane z serwera temperatu- oraz nazwę serwera można także brany znak ma kod ASCII więk- ry (oczekiwaniem na dane z RS232), odczytać z listy ulubionych , jeśli szy od 31, to odczytany znak jest lecz będzie mógł reagować po odpo- wcześniej zostały na nią wpisane. dodawany do zmiennej odczyt. wiednim czasie na brak oczekiwa- To już wystarczy, by moduł po wej- W ten sposób są ignorowane znaki nych informacji. Przekazywane infor- ściu w tryb przesyłania danych na- o kodach ASCII mniejszych niż 32. macje w tym przykładzie pomiędzy wiązał połączenie z serwerem, któ- Gdy zostanie odebrany znak końca modułami BT nie były utajnione. rego dane zostały wpisane podczas wysyłanej przez serwer temperatury Dlaczego by nie skorzystać z tej konfiguracji, czyli nastąpi połączenie (znak CR), zerowana jest zmienna możliwości w urządzeniach, w któ- z serwerem temperatury. licz oraz na LCD zostaje wyświe- rych byłoby to zaletą, przecież mo- Po skonfigurowaniu modu- tlona otrzymana temperatura wraz duły BT firmy ConnectBlue oferują łu i wyświetleniu odpowiednie- z dodatkowymi znakami stopnia funkcję autoryzacji oraz szyfrowania go komunikatu na LCD, program i znaku C . Po wykonaniu instruk- transmitowanych danych. Funkcje przechodzi do wykonywania pętli cji exit do nastąpi opuszczenie te zostaną wykorzystane w drugim głównej. Na początku tej pętli wewnętrznej pętli do-loop. Teraz przykładzie. czyszczona jest zmienna odczyt program ponownie wyśle zapytanie Marcin Wiązania, EP oraz czekaj, która liczy czas o nową wartość temperatury. Gdy marcin.wiazania@ep.com.pl na 7/2004 Elektronika Praktyczna 7/2004 79