Bluetooth łączy mikrokontrolery, cz 1


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


Wyszukiwarka