Interfaccia Bluetooth per Basicx 24 con il modulo UARTDNG101Data di pubblicazione: 24-04-2005 | Versione Italiana | (No English Version) Parole chiave: - BlueTooth - BX24 - How-To - |
In quest'articolo vedremo come, utilizzando il modulo UARTDNG101, è semplice e veloce implementare una connessione seriale wireless Bluetooth, tra un BasicX-24 ad un dispositivo dotato d'interfaccia Bluetooth, come ad esempio: un PC, un palmare o uno smart phone.
Il Bluetooth insieme all Wi-Fi è una tecnologia di tipo wireless in grado di far comunicare tra loro più dispositivi senza l'ausilio di cavi. Mentre la prima è orientata principalmente al mondo networking, il Bluetooth si sta diffondendo sempre di più nella comunicazione tra piccoli elettrodomestici di vario genere e categoria: dai PC ai palmari ai telefonini fino a alla domotica.
Il modulo UARTDNG101, come visibile dalla foto, è composto da un piastrino di ridotte dimensioni (44x33 mm) su cui alloggia tutta l'elettronica necessaria per la gestione della comunicazione Bluetooth.
In pratica, quello che andremo a realizzare è un semplice dispositivo con quattro linee d'uscita collegate, a scopo didattico, ad altrettanti LED, controllabile attraverso una connessone seriale incapsulata in una comunicazione radio Bluetooth, da un PC o un cellulare dotati d'interfaccia Bluetooth.
Il circuito elettrico da realizzare è molto semplice, oltre ai due moduli, richiede soltanto uno stabilizzatore di tensione e sei LED con relativi resistori per la limtazione di corrente. I LED D4 e D5 hanno emtrambe la funzione di indicare lo stato della connessione Bluetooth.Mentre D5 lampeggia quando non connesso e resta fisso in presenza di connessione, D4 resta spento e si attiva soltanto a connessione avvenuta. La linea 28 del UARTDNG101 oltre a pilotare il transistor del LED D4, è collegata alla linea PC7 del BX 24, in questo modo è possibile, da firmware, sapere se è attiva una connessione Bluetooth e leggere o inviare valori sulla linea seriale. Di seguito è riportato lo schema elettrico:
Alimentando il circuito dovremmo vedere lampeggiare il LED D5. A questo punto possiamo caricare, attraverso il tool di sviluppo NetMedia (scaricabile gratuitamente dal sito web http://www.basicx.com), il firmware in basic contenuto nel file Bluetooth&BX24.zip e riportato di seguito:
Option Explicit
Public Const InputBufferSize As Integer = 50 Public InputBuffer(1 To InputBufferSize) As Byte Public Const OutputBufferSize As Integer = 50 Public OuputBuffer(1 To OutputBufferSize) As Byte '----------------------------------------------- 'Funzioni per la comunicazione con la seriale '----------------------------------------------- 'FUNZIONE PER INVIARE UNA STRINGA Public Sub PutStr( _ ByVal Tx As String) Call PutQueueStr(OuputBuffer, Tx) End Sub 'FUNZIONE PER RICEVERE UN BYTE Public Sub GetByte( _ ByRef Value As Byte, _ ByRef Success As Boolean) Success = StatusQueue(InputBuffer) If (Success) Then Call GetQueue(InputBuffer, Value, 1) Else Value = 0 End If End Sub 'FUNZIONE PER RICEVERE UNA STRINGA Public Function GetStr( _ ByVal BufferSize As Integer, _ ByVal Delay_read As Single) As String Dim Key As Byte Dim Success As Boolean Dim I As Integer Dim Value As string Call Delay(Delay_read) Value="" For I = 1 To BufferSize Call GetByte(Key, Success) if(Success) then Value=Value & chr(Key) End if Next GetStr = Value End Function 'FUNZIONE CHE CONVERTE DA BYTE AI PIN Sub Put2Bits (ByVal bByte As Byte, _ ByVal MSBbit As Byte) Dim bMask As Byte Dim bCount As Byte bMask = bx00001000 For bCount = 0 to 3 'Put most significant bits first Call PutPin(MSBbit + bCount, ((bByte And bMask)Mask)) bMask = bMask 2 Next End Sub 'FUNZIONE PER LA CONVERSIONE STRINGA BYTE Function Str2byte (ByVal stringa As string) As byte Dim TmpSng As Single Dim Success As Boolean Call ValueS(stringa, TmpSng, Success) Str2byte = Cbyte(TmpSng) End Function '----------------------------------------------- 'FINE Funzioni per la comunicazione con la seriale '----------------------------------------------- '--------------------------------------------------- 'PROGRAMMA PRINCIPALE '--------------------------------------------------- Public Sub Main() 'Parametri della seriale Const PortNumber As Byte = 3 Const TxPin As Byte = 20 Const RxPin As Byte = 19 Const BaudRate As Long = 9600 'Varie Const LED_RED As Byte = 25 Const LED_CONNECT As Byte = 26 Const DELAY_SEND As single = 0.1 'VARIABILI Dim i as byte Dim buffer As String Dim tmpInt as integer Dim cmd As String * 1 Dim line as String * 1 Dim state as string * 1 Dim line_state(4) as byte Dim tmpByte as byte dim enabled as boolean 'CONFIGURA LA SERIALE SW Call OpenQueue(InputBuffer, InputBufferSize) Call OpenQueue(OuputBuffer, OutputBufferSize) Call DefineCom3(RxPin, TxPin, bx0000_1000) 'Setta la seriale come inverted, no parity, 8 bits. Call OpenCom(PortNumber, BaudRate, InputBuffer, OuputBuffer) Debug.Print "Bluetooth" Debug.Print "Dev By DeSantiX.iT" line_state(1) = 0 line_state(2) = 0 line_state(3) = 0 line_state(4) = 0 'LOOP Do Call PutPin(LED_RED, 0) If(GetPin(5)=1) Then Call PutPin(LED_CONNECT, 0) buffer = "" buffer = GetStr(InputBufferSize, 0.01) tmpInt = Len(buffer) If(tmpInt>2) then debug.print buffer cmd = mid(buffer,1,1) line = mid(buffer,2,1) state = mid(buffer,3,1) If ((asc(cmd) = asc("L")) and (Str2byte(line) >=0) And ((Str2byte(state) = 1) Or (Str2byte(state) = 0))) then line_state(Str2byte(line))=Str2byte(state) Call PutPin((Str2byte(line) + 9), Str2byte(state)) End if tmpByte =0 For i=1 to 4 tmpByte = tmpByte + (line_state(i) * cbyte(pow(2.0, csng(i-1))) ) Next If(tmpByte > 9)then buffer = cstr(tmpByte) Else buffer = "0" & cstr(tmpByte) End if call PutStr(buffer) End if Else Call PutPin(LED_CONNECT, 1) End if Call Delay(DELAY_SEND) Call PutPin(LED_RED, 1) Call Delay(0.1) Loop End Sub
Terminato il download del firmware, passiamo ad analizzare come avvine la connessione Bluetooth con un PC. Requisito fondamentale, che quest'ultimo sia dotato di un interfaccia Bluetooth, in caso contraio è possibile, con poca spesa, implementarne una di tipo USB.
Al termine dell'installazione del device, se è statanecessaria, cliccando sull'icona presente nella task bar di Windows:
Si aprirà la finestra "Risorse di rete Bluetooth" con la quale, cliccando su "Cerca periferiche nell'intervallo", sarà possibile cercare i dispositivi presenti nelle vicinanze del nostro PC, in un raggio di 10 metri circa.
Una volta individuato il dispositivo con nome "eikon-dev" assegnato di default al modulo UARTDNG101 (per modificare i parametri del modulo è necessario usare la DEVBOARDBT), cliccandoci sopra con il tasto sinisto del mouse vengono mostati i servizi forniti dal device remoto. Scrutando tra quelli forniti dal modulo UARTDNG101 troviamo soltanto il servizio SPP (Serial Port Profile) slave:
Cliccando con il tasto destro del mouse, apparirà un menù con evidenziata la voce "Connetti a porta seriale Bluetooth". Cliccando su quest'ultima, verrà aviata la procedura d'autenticazione della connessione Bluetooth detta PERING. Sull'iconcina, presente sulla try bar, apparirà una nuvoletta che ci richiederà d'inserire il codice PIN che dovrà combaciare con quello fornito dal dispositivo Slave. Nel nostro caso il modulo UARTDNG101 è in grado di ritornare il PIN settato di default 1234. Valore quest'ultimo che andrà digitato nella finesta di Windows:
A PERING terminato, ci apparirà un'altra finestra in cui viene comunicata la porta COM assegnata dal sistema alla connessione Bluetooth. Da questo momento tutto quello che trasmetteremo sulla porta seriale, lo ritroveremo sulla linea RX del modulo UARTDNG101 e viceversa.
Il software client d'esempio, scritto in Visual Basic, i cui sorgenti sono presenti nel file Bluetooth&BX24.zip scaricabile da quest'articolo, usa l'ormai famoso MSCOMM. Infatti, come precedentemente detto, una volta instaurata la connessione Bluetooth possiamo lavorare come se avessimo una connessione fisica tra i due dispositivi.
Ad ogni pressione di uno dei tasti ON - OFF viene aperta una connessione seriale (es: COM6) ed inviata una stringa di comando al modulo BX con la seguente sintassi:
L[linea 0 - 3][stato 0 - 1]
Ad esempio per accendere il LED commegato al PIN 9 del Basicx dovremo inviare, sulla seriale Bluetooth, la stringa:
L01
A comando eseguito, il BX24 ritorna lo stato attuale di tutte le linee.
Es: 01 (solo il primo led acceso) 03 (led 1 e 2 accesi)
Ricevuta la risposta dal micro, il software in VB aggiorna lo stato dei led virtuali presenti sul form e chiude la connessione seriale, rilasciando così la risorsa radio del modulo UARTDNG101 che si mette in attesa di una nuova connessione Bluetooth.
L'esempio appena visto è una dimostrazione paratica di quanto è semplice implementare uno stack Bluetooth usando l'UARTDNG101, ed effettuare una connessione seriale tra un microprocessore ed un computer senza l'ausilio del solito cavo. L'uso di una tecnologia wireless Bluetooth permette di realizzare apparati con i quali è possibile comunicare, ad esempio per settare impostazione o parametri di configurazione, senza dover
effettuare connessioni fisiche e senza aprire il contenitore dove questi alloggiano.
Sorgente d'esempio per BasicX24 e Visual Basic Bluetooth&BX24.zip
Datasheet modulo UARTDNG101
Datasheet DEVBOARD
Segnala questo articolo:
Parole chiave: - BlueTooth - BX24 - How-To -
|