Bluetooth łączy mikrokontrolery, część 1.pdf

(496 KB) Pobierz
32696472 UNPDF
K U R S
Bluetooth łączy
mikrokontrolery, część 1
Specyi cznym rodzajem danych
jest dźwięk zapisany w postaci cy-
frowej. BT jest więc wykorzystywa-
ny w bezprzewodowych zestawach
głośnomówiących przeznaczonych
do telefonów komórkowych. Upo-
wszechniają się także moduły BT,
których zalety można wykorzystać
już w urządzeniach budowanych
samodzielnie. Dodatkowo są one bar-
dzo odporne na wszelakiego rodzaju
zakłócenia. Mogą być zastosowane
wszędzie tam, gdzie jest potrzebna
bezprzewodowa transmisja danych,
przy czym użycie takich modułów
wyręcza programistę z konieczności
panowania nad protokołem. Przy za-
stosowaniu modułów BT należy jedy-
nie ustanowić połączenie i przesyłać
dane, nie martwiąc się o kontrolę
poprawności przesyłanych informacji.
Zajmie się tym układ sterujący mo-
dułem BT. Moduły BT mają zasięg
zazwyczaj do kilkuset metrów. Można
dla nich znaleźć wiele różnorodnych
zastosowań. Większość modułów BT
służących do przesyłania dźwięku
jest wyposażona w interfejsy USB,
RS232 oraz PCM. W artykule zosta-
ną przedstawione dwa przykłady wy-
korzystania modułów BT do bezprze-
wodowej komunikacji ze sobą mikro-
kontrolerów. Ich oprogramowanie ste-
rujące zostało napisane w Bascomie.
Jeden przykład przedstawi system
bezprzewodowego (zdalnego) odczytu
temperatury, natomiast drugi pokaże,
jak zrealizować bezprzewodowy sys-
tem przesyłania sygnałów z czujek
alarmowych do centrali. W drugim
przykładzie transmisja będzie szy-
frowana. W przykładach zawartych
w tym artykule wykorzystane zostały
moduły BT i rmy ConnectBlue, któ-
re były szczegółowo przedstawione
wraz z listą komend AT w EP9/03.
Moduły te mają jedynie interfejs
RS232, przy czym skoni gurowanie
modułu do nawiązania połączenia
jest niezwykle proste. Koni gurowa-
nie modułów odbywa się za pomocą
komend AT – tak jak w modemach
oraz niektórych modułach GSM lub
GPS. Użycie komend AT niezwykle
upraszcza tę czynność. Dodatkowym
Bluetooth (w skrócie BT) zdobywa coraz większą popularność,
świadczy o tym jego coraz częstsze występowanie
w urządzeniach powszechnego użytku. BT można spotkać nie
tylko w komputerach, mamy go już w komórkach i wielu
innych urządzeniach.
atutem użytych modułów BT jest
to, że po koni guracji i nawiązaniu
połączenia interfejs RS232 modułów
staje się „przezroczysty”. Użytkownik
odnosi wrażenie, jakby moduły były
połączone przewodem. Można więc
powiedzieć, że moduły BT i rmy
ConnectBlue tworzą bezprzewodowy
interfejs RS232.
Jedną z cech modułów, które
wykorzystano w drugim przykładzie,
jest możliwość szyfrowania przesy-
łanych danych. Znajdzie ona zasto-
sowanie wszędzie tam, gdzie będzie
wymagane duże bezpieczeństwo
przesyłanych danych. Moduł BT i r-
my ConnectBlue może komunikować
się jednocześnie nie tylko z jednym
(innym) modułem, ale przy pracy
z włączonym trybem „Multidrop” je-
den moduł może jednocześnie komu-
nikować się z wieloma modułami BT
(maksymalnie z siedmioma). W tym
przypadku jeden moduł BT jest mo-
dułem głównym (wielopunktowym)
– „MultiDrop”. Moduł pracujący jako
„Multidrop” automatycznie koni gu-
ruje bezprzewodową sieć BT i roz-
dziela dane do wszystkich modułów
dołączonych. Nie jest wymagane do-
datkowe oprogramowanie przy pracy
modułów BT w tym trybie. W przy-
kładzie pierwszym główny moduł BT
(np. z włączonym trybem Multidrop)
będzie mógł się komunikować bez-
przewodowo z wieloma oddalonymi
od siebie bezprzewodowymi czujni-
kami temperatury.
W dalszej części artykułu posta-
ram się udowodnić, że ich stosowa-
nie jest niezwykle proste. W dwóch
opisywanych dalej przykładach,
w których połączone będą ze sobą
tylko dwa moduły, tryb „MultiDrop”
będzie oczywiście wyłączony. Modu-
ły będą sterowane tylko za pośred-
nictwem mikrokontrolerów. Artykuł
ten ma pokazać sposób wykorzy-
stania BT w prostych projektach.
Zainteresowani przebiegiem trans-
misji danych przez interfejs RS232
pomiędzy dwoma mikrokontrolerami,
a zwłaszcza sposobem interpretowa-
nia odebranych danych, także znajdą
dla siebie w przedstawionych dwóch
przykładach wiele cennych informa-
cji. Moduły BT można zastosować
nie tylko w urządzeniach działają-
cych w oparciu o RS232, ale także
działających z RS422 lub RS485.
Przedstawione dalej przykłady progra-
mów można sprawdzić w praktyce
(bez potrzeby posiadania modułów
BT), łącząc mikrokontrolery przewo-
dem przystosowanym do RS232.
Praktyczne informacje
o wykorzystaniu modułów BT
i rmy ConnectBlue
Moduły BT i rmy ConnectBlue
mogą pracować w dwóch trybach:
w trybie przesyłania danych ( data
mode ) oraz w trybie koni gurowania
modułu za pomocą komend AT ( AT
mode ). Po włączeniu zasilania moduł
BT zawsze domyślnie pracuje w try-
bie wymiany danych. Aby przejść
do pracy modułu w trybie komend
AT, za pośrednictwem których bę-
dzie można dokonać koni guracji,
należy wysłać do modułu odpowied-
nią sekwencję znaków, które zmienią
tryb pracy na AT. Sekwencja przej-
ścia modułu do trybu AT zostanie
dokładnie przedstawiona w opisie
pierwszego przykładu. Moduł BT
może być skoni gurowany jako ser-
wer ( server ) lub jako klient ( client ).
Połączenie modułów BT odbywa się
zawsze pomiędzy serwerem a klien-
tem lub jednym serwerem i wieloma
klientami. Jeżeli inne moduły mają
się włączyć do danego modułu BT,
to ten moduł musi być skoni guro-
Elektronika Praktyczna 7/2004
73
Specyi cznym rodzajem danych
32696472.011.png 32696472.012.png 32696472.013.png
K U R S
wany do pracy jako serwer. Jeżeli
moduł BT (lub moduły) ma usta-
nawiać połączenie z serwerem, po-
winien zostać skonigurowany jako
klient (klient zawsze ustanawia połą-
czenie z serwerem). Moduł skonigu-
rowany jako klient musi znać adres
modułu serwera, z którym będzie
się łączył oraz jego nazwę. Moduły
BT mają swoje adresy, tak jak mają
je np. karty sieciowe. Moduły irmy
ConnectBlue mają trzy metody wy-
brania serwera, z którym będą się
łączyć. Pierwszą metodą jest znale-
zienie (wyszukanie) serwera. Drugą,
ręczne wpisanie jego adresu i na-
zwy, natomiast trzecia metoda pole-
ga na wyborze serwera z tzw. „listy
ulubionych”, na którą wcześniej zo-
stał wpisany. Moduł BT irmy Con-
nectBlue ma możliwość włączenia
opcji pozwalającej na odbiór danych
z innego modułu BT. Jeżeli moduł
pracuje jako klient i nadchodzi do
niego połączenie z odległego modu-
łu BT, zmienia automatycznie swoją
konigurację tak, by dla przychodzą-
cego połączenia stał się serwerem.
Wspomniana była tzw. „lista ulubio-
nych”. Jest to lista, na którą można
wpisać co najwyżej 10 modułów BT
pracujących jako serwery, z którymi
moduł ten będzie się łączył. Taka
lista może służyć do szybkiego wy-
boru modułów (serwerów), z którymi
klient będzie nawiązywał połączenie,
przy czym jest pomocna, gdy często
jest zmieniany serwer. Kiedy dany
moduł komunikuje się z poszczegól-
nymi modułami, to jest konigurowa-
ny jako master (układ nadrzędny).
Moduł BT pracujący jako master
ma prawa do ustanawiania połą-
czenia z innym modułem BT, do
wykonywania wyszukiwania oraz do
akceptacji połączeń przychodzących
od innych modułów. W przypadku,
gdy moduł BT pracuje jako układ
podrzędny ( slave ), ma prawa do łą-
czenia się do innych modułów BT,
a także jako master do wykonywa-
nia wyszukiwania oraz do akceptacji
połączeń przychodzących od innych
modułów BT. Wszystkie możliwe
parametry i funkcje modułów BT
można skonigurować za pomocą
komend AT. Dostępnych jest 50 ła-
twych w użyciu komend AT. Oczy-
wiście, jak wcześniej pisałem, przed
użyciem komend AT, moduł BT
powinien zostać przełączony z trybu
transmisji danych do trybu AT. Kon-
igurowane parametry oraz tryby pra-
cy modułu BT za pomocą komend
mogą być zapisane w modułach na
stałe (zapisanie w pamięci nieulotnej
modułu) lub mogą być pamiętane,
aż do wyłączenia zasilania modułu.
W przykładach wybrana została dru-
ga opcja, gdyż mikrokontrolery steru-
jące modułami BT zawsze po włą-
czeniu zasilania zaczynają swoją pra-
cę od konigurowania modułów BT.
Nie było więc potrzeby zapisywania
ustawianej koniguracji w nieulotnej
pamięci modułu BT. Dokładny wy-
kaz oraz opis komend modułów BT
irmy ConnectBlue można znaleźć na
stronie www.connectblue.com, a tak-
że w EP9/03 w artykule poświęco-
nym modułom BT tejże irmy.
skonigurowania modułu BT. Jeżeli
konigurowanie BT zakończy się po-
myślnie, dioda LED będzie świeciła
światłem ciągłym, w przeciwnym ra-
zie będzie migała. Ponieważ moduły
BT irmy ConnectBlue posiadają inter-
fejs RS232 zgodny z poziomami na-
pięć -12 V i +12 V (choć nie tylko,
bo mają one także linie interfejsu
RS232 zgodne z poziomami TTL),
zastosowano w układzie dodatkowy
konwerter poziomów MAX232. Dopa-
sowuje on sygnały interfejsu RS232
modułu BT do poziomów akceptowa-
nych przez mikrokontroler. Układ
MAX232 jest typową przetwornicą po-
jemnościową, która zwiększa napięcie
5 V oraz je neguje. Na list. 1 został
przedstawiony program realizujący
serwer temperatury napisany w Ba-
scomie. W pierwszej kolejności zosta-
ją skonigurowane parametry transmi-
sji RS232. Mikrokontroler sterujący
będzie się komunikował z modułem
z domyślnymi parametrami BT, czyli:
prędkość 57600 bd, dane 8-bitowe,
brak parzystości oraz 1 bit stopu.
Aby uzyskać taką prędkość transmisji
interfejsu szeregowego mikrokontrole-
ra, zastosowany został rezonator
kwarcowy o częstotliwości
7,3728 MHz. Taki rezonator gwarantu-
je uzyskanie wymaganej podstawy
czasu dla UART-u. Przy takim wybo-
rze rezonatora błędy transmisyjnej
podstawy czasu nie wystąpią nawet
dla większych prędkości niż 57600
bd. Oczywiście prędkość interfejsu
RS232 modułu BT można zmienić
odpowiednimi komendami AT. Linia
sterująca diodą LED została skonigu-
rowana jako wyjście, natomiast linia,
do której został dołączony czujnik,
jako linia 1-wire. Dodatkowo w pro-
gramie zastosowano odbiór buforowy
danych (z wykorzystaniem przerwania
od odbiornika RS232 i bufora).
W ten sposób uzyskuje się ochronę
przed przeoczeniem znaku otrzymane-
go z RS232. Bufor odbiorczy został
skonigurowany za pomocą instrukcji
conig serialin na wielkość 10
znaków. W programie zadeklarowano
dwie procedury: procedurę sprawdza-
nia poprawności wykonania komendy
AT oraz procedurę pomiaru tempera-
tury. Zadeklarowano także kilka
zmiennych, z których odczyt , s
i uniw służą do interpretacji otrzy-
manych z RS232 znaków, pozostałe
wykorzystywane są przy pomiarze
i obliczaniu temperatury. W dalszej
części programu, linii sterującej diodą
został przypisany alias, dla instrukcji
System bezprzewodowego odczytu
temperatury
W tej części artykułu zostanie
pokazany przykład bezprzewodowego
systemu odczytu temperatury mie-
rzonej w odległym pomieszczeniu.
Na marginesie warto zaznaczyć, że
pomiar jest wykonywany z dokładno-
ścią do 0,1 stopnia. Wykorzystano tu
tylko jeden czujnik temperatury, ale
nie znaczny to, że nie można za-
stosować ich więcej. Układ mierzący
temperaturę pracuje z modułem BT
skonigurowanym jako serwer. Urzą-
dzenie to można więc nazwać „ser-
werem temperatury”. Natomiast urzą-
dzenie odczytujące (bezprzewodowo)
temperaturę zostało skonigurowane
jako klient. Gdyby „serwer tempe-
ratury” został skonigurowany do
pracy w trybie „MultiDrop”, mogłoby
się z nim łączyć wiele końcówek
typu klient. W ten sposób można
zrealizować wyświetlanie mierzonej
przez serwer temperatury w wielu
pomieszczeniach, w których znajdują
się „klienci temperatury”. W przy-
kładzie występuje tylko jeden klient,
więc nie został wykorzystany tryb
„MultiDrop”. Przykładowy system
działa tak, że na zapytanie klienta
serwer dokonuje pomiaru i odsy-
ła wartość zmierzonej temperatury.
Bezprzewodowy odczyt zmierzonej
temperatury jest także możliwy za
pomocą jedynie modułu BT i kom-
puterowego terminala.
Serwer temperatury
Na rys . 1 przedstawiono schemat
ideowy serwera temperatury, którym
steruje mikrokontroler ATMEGA8.
Czujnikiem temperatury jest znany
układ DS1820 z magistralą 1-wire.
Dioda LED sygnalizuje błąd wykona-
nia komendy AT oraz prawidłowość
74
Elektronika Praktyczna 7/2004
32696472.014.png 32696472.001.png 32696472.002.png
K U R S
Rys. 1. Schemat ideowy serwera temperatury
input zostało wyłączone echo (in-
strukcja input nie będzie wysyłała
zwrotnie otrzymanych znaków) oraz
włączone zostają globalne przerwania,
by działała transmisja buforowa. Jak
pisałem, aby przejść z trybu przesyła-
nia danych do trybu AT, należy do
modułu BT wysłać odpowiednią se-
kwencję znaków. Domyślną sekwencją
znaków (można ją zmienić komenda-
mi AT), które zmieniają tryb danych
modułu BT na tryb AT, jest wysłanie
trzech znaków „/”. Ale to nie wystar-
czy, by wejść w tryb AT. Należy
spełnić jeszcze odpowiednie kryteria
przed i po wysłaniu tej sekwencji.
Przed i po wysłaniu sekwencji zna-
ków „/” przez jedną sekundę nie
mogą być przesyłane przez RS232
żadne znaki. W programie przed wy-
słaniem znaków „/” odczekiwana jest
1 sekunda, a po wysłaniu, dla bez-
pieczeństwa 2 sekundy. Co najważ-
niejsze, cała sekwencja znaków „/”
(czyli wysłanie) „///” musi odbyć się
w czasie nie większym niż 200 ms.
Tak więc wejście modułu do trybu
AT z poziomu komputerowego termi-
nala nie będzie raczej możliwe. Po-
wrót z trybu AT do trybu danych
jest możliwy poprzez wykonanie od-
powiedniej komendy. W dalszej części
programu wysyłane są komendy, na
przykładzie których krótko opiszę, co
będzie się dziać z modułem BT.
Wcześniej przedstawię pokrótce dane
o formacie instrukcji AT i informa-
cjach zwrotnych po ich przesłaniu.
Komenda AT składa się z trzech czę-
ści: preiksu, ciała i zakończenia. Pre-
iksem są zawsze znaki „AT”. Wiel-
kość liter nie ma znaczenia przy
wysyłaniu komend do modułu BT.
Ciałem jest łańcuch znaków składają-
cych się na rozkaz, a zakończeniem
znak CR. Znak CR odpowiada znako-
wi ASCII o numerze 13 i jest równo-
ważny np. klawiszowi Enter . Do mo-
dułów BT mogą być wysyłane także
komendy rozszerzone, których znaki
„AT” są dodatkowo rozszerzone
o znak „*”. W programie większość
wysyłanych komend to komendy roz-
szerzone. Należy także zwrócić uwagę
na to, że parametry komend AT są
oddzielone przecinkami. Jeżeli wysła-
na komenda ma zwrócić ciąg żąda-
nych z modułu parametrów, otrzymy-
wana informacja jest poprzedzona
znakami CR, LF, gdzie CR to znak
potwierdzenia, a LF (kod ASCII 10)
to znak nowej linii. Poprawne wysła-
nie i wykonanie komendy przez BT
jest sygnalizowane wysłaniem przez
BT znaków: CR, LF, „OK”, CR, LF.
Znaki „OK” świadczą o prawidłowym
wykonaniu przesłanej komendy.
W przypadku jakiegoś błędu i niewy-
konania komendy, moduł BT zwróci
CR, LF, „ERROR”, CR, LF – czyli wy-
śle komunikat „ERROR”. Pierwsza
wysyłana w programie komenda
„ate0” wyłącza echo znaków, które
otrzymuje moduł BT. Domyślnie echo
modułu BT jest włączone, ale przy
współpracy z mikrokontrolerem jest
ono wyłączone, gdyż jest niewykorzy-
stywane. Instrukcja print , jeśli nie
jest zakończona znakiem „;” sama
dba o zakończenie wysyłanych zna-
ków znakiem CR. Po wysłaniu każdej
komendy wywoływana jest procedura
sprawdz_stat , która sprawdza, czy
wysłana komenda została poprawnie
wykonana. W procedurze tej na po-
czątku czyszczona jest zmienna od-
czyt typu string . Następnie w pętli
do-loop odczytywane są za pomocą
instrukcji inkey znaki, aż do otrzy-
mania znaku LF. Ma to na celu po-
zbycie się początkowych znaków CR
i LF, które uniemożliwią proste po-
równanie, czy otrzymano znaki „OK”.
W kolejnej pętli do-loop , także wy-
konywanej aż do otrzymania znaku
LF, odbywa się odczyt znaków i za-
pis ich ze zmiennej s do łańcucha
znaków odczyt . Jeżeli otrzymany
znak to „O” lub „K”, to jest on do-
dawany do zmiennej odczyt . Poje-
dyncze odebrane znaki są zapisywane
do zmiennej s . Jeżeli odczytano znak
LF kończący wysłany przez BT ko-
munikat, następuje sprawdzenie, czy
zmienna odczyt posiada znaki różne
od „OK”. Jeśli tak, to znaczy że
otrzymano inne znaki niż „OK”. Na-
stępuje wtedy wejście do nieskończo-
nej pętli do-loop , w której naprze-
miennie co 250 ms zostaje zmieniony
stan diody LED (LED będzie migała).
Wyjście z tej pętli będzie możliwe po
wyzerowaniu mikrokontrolera. Oczy-
wiście ta procedura nie może być
użyta w tej postaci, jeśli po wykona-
niu komendy moduł BT będzie odsy-
łał żądane dane, gdyż będzie to po-
wodowało zawieszenie programu. Na-
leży wtedy napisać nową lub przero-
bić opisaną procedurę, by dodatkowo
umożliwiała odczyt żądanych danych,
wysłanych przez BT po wykonaniu
danej komendy. Kolejne wysyłane ko-
mendy mają znak „*”, czyli są to
komendy rozszerzone. Komenda
„AGDM...” ma pierwszy parametr
równy „1”, który powoduje, że moduł
nie będzie widoczny dla innych mo-
dułów, tzn. inne moduły nie będą od
niego mogły odczytać informacji
o adresie, nazwie, nie będzie możli-
we skorzystanie z komendy wyszuka-
nia modułu itp. Ostatni parametr tej
komendy, jak i w kolejnych komen-
dach oznacza, czy ustawienia dokona-
ne daną komendą będą pamiętanie
w nieulotnej pamięci modułu, czy
nie. Nie ma potrzeby zapisywania
ustawień w pamięci nieulotnej, ponie-
waż jak pisałem, zawsze po włącze-
niu mikrokontrolera będzie on koni-
gurował moduł BT. Tak więc ostatnie
parametry komend mają wartości „0”.
Komenda „AGCM...” z pierwszym pa-
Elektronika Praktyczna 7/2004
75
32696472.003.png 32696472.004.png 32696472.005.png
K U R S
List. 1. Program realizujący serwer temperatury
‘Serwer Temperatury z Bluetooth
‘Przyklad programu konigurujacego Bluetooth jako serwer wysylajacy na otrzymane
‘zapytanie zmierzona temperature czujnikiem DS1820
‘przesyłanie dany niekodowane
‘Marcin Wiazania
‘marcin.wiazania@ep.com.pl
$regile = „m8def.dat” ‘rejestry mikrokontrolera atmega8
$crystal = 7372800 ‘czestotliwosc taktowania mikrokontrolera
$baud = 57600 ‘informuje kompilator o predkosci transmisji
Conig Pinb.1 = Output ‘linia pb.1 jako wyjscie
Conig Serialin = Buffered , Size = 10 ‘koniguracja by interfejs rs232 uzywal przy odbiorze transmisji buforowej (bufor o wielkosci 10 znakow)
Conig 1wire = Portb.2
‘koniguracja 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 proilu dla clienta (wylaczenie pracy jako clienta)
Call Sprawdz_stat
‘sprawdzenie statusu wykonania komendy
Print „at*addsp=0,0”
‘wlaczenie proilu 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 koniguracji 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
76
Elektronika Praktyczna 7/2004
32696472.006.png 32696472.007.png 32696472.008.png
K U R S
rametrem równym „2” włącza przyj-
mowanie i akceptację połączeń. Będą
więc mogły łączyć się do niego mo-
duły BT. Komenda „agpm...” z pierw-
szym parametrem równym „1” wyłą-
cza tryb parowania modułów, który
jest wykorzystywany przy bezpiecz-
nym nawiązywaniu połączenia modu-
łów. Komenda „agsm...” także
z pierwszym parametrem równym „1”
wyłącza tryb szyfrowanego przesyła-
nia danych. Te dwa wymienione try-
by są wykorzystywane w drugim
przykładzie. Komenda „agmsp...” okre-
śla rolę mastera i slave’a modułu.
Pierwszy parametr o wartości „0” po-
woduje, że moduł w nadchodzących
połączeniach zawsze będzie próbował
być masterem . Komenda „agln...” na-
daje mu ją, ponieważ wszystkie mo-
duły BT mają swoją nazwę. W tym
przypadku została mu nadana nazwa
„Serwer Temp”. Wysyłana nazwa
musi się zawierać w cudzysłowach
„”, a zostały już one użyte w in-
strukcji print , więc zostały wstawio-
ne przez zastosowanie zapisu {034},
gdzie 034 to znak ASCII cudzysłowu.
Komenda „aglc...” zapisuje „COD” mo-
dułu o wartości 0. „COD” to klasa
modułu (moduł może należeć do kla-
sy audio, sieciowej itp.), który może
zostać odczytany podczas przeszuki-
wania. Na przykład dany moduł
może sprawdzić, czy znajduje się
inny moduł BT, z którym może się
połączyć i ma odpowiednią klasę
„COD”. „COD” we wszystkich przy-
kładach został ustawiony na wartość
„0”, gdyż moduły w prezentowanych
przykładach są wykorzystywane do
własnego celu. Komenda „addcp...”
z pierwszym parametrem równym
„255” powoduje wyłączenie pracy
modułu jako „klient”, natomiast ko-
menda „addsp...” z pierwszym para-
metrem o wartości „0” koniguruje
moduł jako serwer. Komenda
„adwm...” z pierwszym parametrem
równym „0” wyłącza pracę modułu
BT w trybie „MultiDrop”, z kolei
drugi parametr określa sposób działa-
nia modułu w tym trybie. Komenda
„accb...” z pierwszym parametrem
o wartości „0” wyłącza możliwość
zdalnej koniguracji modułu (poprzez
inny moduł BT). Wykonanie opisa-
nych komend wystarczy, by moduł
BT pracował jako serwer i poprawnie
komunikował się z innym modułem
BT. Aby przesyłać dane, należy z po-
wrotem przejść do trybu danych. Jest
to możliwe po wykonaniu komendy
„addm”. Po prawidłowym wejściu
w tryb danych zapalana jest dioda
LED, po czym program wykonuje pę-
tlę główną programu. Za pomocą in-
strukcji input oczekuje w niej na
odbiór zapytania o temperaturę, po-
twierdzonego znakiem CR – np. kla-
wiszem Enter . Serwer wysyła kliento-
wi wartość zmierzonej temperatury
na zapytanie składające się ze zna-
ków „t?”. Funkcja instr zwraca po-
zycję szukanego ciągu znaków w ode-
branym łańcuchu, w tym przypadku
szuka znaków „t?” w zmiennej od-
czyt . Jeżeli ciąg zostanie znaleziony,
funkcja zwróci wartość większą od 0.
W tym przypadku zostanie wywołana
procedura pomiaru i obliczenia tem-
peratury. Jest to typowa procedura
odczytu temperatury z DS1820 i jej
przeliczenia dla uzyskania dokładno-
ści 0,1 stopnia C, więc nie będzie tu
dokładnie omawiana. Po pomiarze
temperatury i odpowiednich oblicze-
niach jej wartość przechowuje zmien-
na t . Wartość zmiennej t zamieniana
jest funkcją str na tekst. Następnie
zostaje wysłany przez moduł BT tekst
„Temp=” oraz zmierzona i odpowied-
nio sformatowana wartość temperatu-
ry (na przykład może to być: 23.5).
Po wysłaniu temperatury, pętla pro-
gramu powtarza się i następuje ocze-
kiwanie na kolejne zapytanie o tem-
peraturę. Wadą identyikacji znaków
zapytania w przedstawiony sposób –
jak łatwo zauważyć – jest to, że tem-
peratura będzie wysyłana nie tylko
po odebraniu znaków „t?”, ale i do-
wolnych znaków przed „t?”, np.
otrzymanie łańcucha „abdt?” także
spowoduje wysłanie przez serwer in-
formacji o temperaturze. Aby temu
zaradzić, należy przerobić program
odpowiedzialny za identyikację zapy-
tania. W tym przypadku nie jest to
jednak uciążliwa wada. Po odpowied-
nim skonigurowaniu serwera tempe-
ratury należy skonigurować drugi
moduł BT, by pracował jako klient
i by było możliwe nawiązanie komu-
nikacji z serwerem. Klient temperatu-
ry będzie otrzymywał zmierzoną tem-
peraturę po wysłaniu zapytania oraz
wyświetlał ją na wyświetlaczu LCD.
ter poziomów napięcia RS232. Na
list. 2 został przedstawiony program
realizujący klienta temperatury.
Także i w tym przypadku wy-
korzystany został odbiór buforowy
danych z RS232. Początkowe in-
strukcje w programie odpowiednio
konigurują LCD, deiniują znak
stopnia, wyłączają echo instrukcji
input oraz włączają przerwania
globalne. Po wyświetleniu komunika-
tu „Konig BT” następuje koniguro-
wanie modułu. Niektóre komendy są
identyczne jak w przypadku serwera
temperatury, dlatego opisane zostaną
tylko te, których parametry różnią
się lub te, które nie występowały
w przypadku serwera temperatury.
Komenda „agmsp...” w tym przypad-
ku ma parametr pierwszy nie „0”,
lecz „1”. Koniguruje on moduł tak,
by pozwalał drugiej stronie w nad-
chodzącym połączeniu zadecydować,
czy ma być masterem , czy slave-
’em . Procedura sprawdz_stat jest
podobna jak w serwerze tempera-
tury, tylko że informacja o błędzie
jest wyświetlana na LCD. Komenda
„agln...” nadaje modułowi klienta
nazwę „Client BT”. Komenda „ad-
dcp...” wraz z pierwszym parame-
trem o wartości „0” koniguruje mo-
duł do pracy jako klient, natomiast
komenda „addsp...” z wartością
pierwszego parametru równą „255”
wyłącza pracę modułu jako serwer.
W przypadku serwera temperatury
było odwrotnie, czyli komenda „ad-
dcp” miała parametr równy „255”,
a „addsp...” parametr równy „0”.
Pierwszy parametr komendy „ad-
nrp...” określa, z iloma modułami
BT będzie można się połączyć.
W przykładzie wpisano wartość
„1”, co oznacza łączenie się tylko
z jednym modułem BT. Aby było
możliwe połączenie klienta z serwe-
rem, należy zapisać do modułu BT
klienta dane o serwerze, z którym
ma nastąpić połączenie. Dane te to
adres oraz nazwa serwera. Realizuje
to komenda „adwdrp...”. Pierwszy
parametr to numer (identyikator)
wpisywanych danych o wybranym
module serwera. Dla danych pierw-
szego serwera będzie to wartość „0”
(numery są liczone od 0). Drugi pa-
rametr to adres modułu serwera za-
wierający sześć pól reprezentujących
wartość szesnastkową składającą się
z dwóch znaków. Trzeci parametr,
o wartości „2”, określa, w jaki spo-
sób nastąpi połączenie modułów. Do
wyboru są warianty, w których: po-
Klient temperatury
Na rys . 2 przedstawiono sche-
mat ideowy klienta temperatury.
Układ klienta temperatury ma jedy-
nie dołączony do mikrokontrolera
wyświetlacz LCD, na którym będzie
prezentowana temperatura oraz ko-
munikaty. Podobnie jak w serwerze
temperatury, układ ma także konwer-
Elektronika Praktyczna 7/2004
77
32696472.009.png 32696472.010.png
Zgłoś jeśli naruszono regulamin