In questo articolo ci inoltreremo nel reame della programmazione di BlueTooth Arduino attraverso i comandi AT: massima attenzione!
Sino ad ora abbiamo utilizzato un sistema di collegamento basato su connettori fisici. Ma esistono occasioni in cui è necessario trasmettere le informazioni via etere, senza disporre della potenza necessaria per collegare un dispositivo di rete locale, sia esso via cavo o wi-fi. Quando dobbiamo trasmettere nell’ambito di costruzioni protette dal Ministero dei Beni Culturali, o all’interno di strutture particolari come gli ospedali o gli ambulatori medici, la nostra abilità di “tirare due fili” tra gli apparati di trasmissione viene meno. E’ a questo punto che la trasmissione Bluetooth ci viene in aiuto.
Possiamo tranquillamente affermare che il Bluetooth sia il sostituto moderno della connessione seriale.
Breve storia del Bluetooth
Tecnicamente, il Bluetooth è uno standard tecnico-industriale di trasmissione dati per reti personali senza fili. Fornisce un metodo standard, economico e sicuro per scambiare informazioni tra dispositivi diversi attraverso una frequenza radio sicura a corto raggio in grado di ricercare i dispositivi coperti dal segnale radio entro un raggio di qualche decina di metri mettendoli in comunicazione tra loro. La specifica Bluetooth è stata sviluppata dalla Ericsson e in seguito formalizzata dalla Bluetooth Special Interest Group (SIG), un’associazione formata da Ericsson, Sony, IBM, Intel, Toshiba, Nokia e altre società.
Questo standard venne progettato con l’obiettivo di ottenere bassi consumi, un corto raggio d’azione (fino a 100 metri di copertura per un dispositivo di Classe 1 e fino a un metro per dispositivi di Classe 3) e un basso costo di produzione per i dispositivi compatibili. Lo standard doveva consentire il collegamento senza fili tra periferiche come stampanti, tastiere, telefoni, microfoni, ecc. a computer o PDA o tra PDA e PDA. In data 4 gennaio 2007 è stato superato il miliardo di dispositivi che utilizzano questa tecnologia.
Funzionamento della tecnologia
Bluetooth prevede di sincronizzare la maggior parte delle operazioni con un segnale di clock in tempo reale. Esso serve, ad esempio, a sincronizzare gli scambi di dati tra i dispositivi, distinguere tra pacchetti ritrasmessi o persi del protocollo. Due o più dispositivi collegati tra loro formano una piconet (un sisterma punto-punto) e i dispositivi all’interno di una piconet possono essere di due tipi:
- master, è il dispositivo che all’interno di una piconet si occupa di tutto ciò che concerne la sincronizzazione del clock degli altri dispositivi (slave) e la sequenza dei salti di frequenza, inoltre nel caso di connessioni con altre piconet, esso può essere solo uno slave;
- slave, sono unità della piconet sincronizzate al clock del master e al canale di frequenza, inoltre possono appartenere a più piconet contemporaneamente come slave attraverso l’uso di tecniche TDM (Time Division Multiplexing).
Nel nostro progetto provvederemo a configurare una tantum gli apparati come master e slave, in modo che all’accensione si riconoscano automaticamente e possano comunicare tra loro.
Bluetooth e sicurezza del collegamento
Le trasmissioni Bluetooth avvengono alla frequenza di 2,4 GHz in aria libera, e sono quindi più soggette ad un dirottamento verso dispositivi non autorizzati (hacking). Tuttavia occorre ricordare che il sistema, al fine di ridurre i disturbi in radiofrequenza, cambia la propria frequenza di trasmissione 1600 volte al secondo nel range dei 79 canali ricavati all’interno della propria gamma di trasmissione.
Inoltre, per rendere il collegamento tra un apparato master ed uno slave, è necessario condividere una chiave di sicurezza (il PIN) con lunghzza variabile tra i 4 ed i 16 caratteri alfanumerici. Il PIN viene richiesto dal master, non viene mai ritrasmesso nelle comunicazioni con lo slave.
Occore infine ricordare che, trattandosi di un dispositivo a radiofrequenza, ogni sistema Bluetooth appartiene ad una determinata classe che ne rappresenta la potenza di trasmissione:
Classe | Potenza | Portata |
---|---|---|
1 | 100 mW | 100 m |
2 | 2.5 mW | 10 m |
3 | 1 mW | 1 m |
Configurazione HC-05 e comandi AT
Il modulo ha un LED per la visualizzazione dello stato installato. Quando il LED lampeggia velocemente significa che il dispositivo è pronto per la connessione; quando lampeggia lentamente, la connessione è stabilita e quando lampeggia ogni 2 secondi, la board risulta cconfigurata in modalità AT.
Il dispositivo ha un regolatore integrato da 5 V a 3,3 V e un pulsante di commutazione.Come abbiamo ricordato, il sistema Bluetooth è assimilabile al protocollo seriale, e utilizza i comandi AT (ove AT sta per “ATtention”) per la propria configurazione, un po’ come si usava ai tempi dei voice modem. Il protocollo è abbastanza semplice, basato sulla trasmissione di stringhe in formato ASCII testuale. Una trattazione completa dei comandi AT ci porterebbe fuori tema, tuttavia chi è interessato potrà trovare il manuale per Arduino a questo link.
Configurazione hardware
Per poter intragire in configurazione con un Arduino occorre installare il modulo HC-05 secondo il seguente sketch:
Il partitore di tensione serve per mantenere la tensione di controllo entro i 3.3V.
Configurazione software
Le schede HC-05 andranno configurate una sola volta, e manterranno i parametri di configurazione (attribuzione master/slave, baud rate, password e così via) salvati ed accessibili ad ogni riattivazione. In questo modo potremo utilizzare i moduli come apparati plug and play.
Per entrare in modalità AT occorre rimuovere l’alimentazione, premere il tasto di configurazione e ricollegare l’alimentazione della scheda, senza rilasciare il tasto. Il LED inizierà a lampeggiare lentamente, confermando l’entrata della scheda in modalità AT. A questo punto, rilasciare il tasto.
Per uscire dalla modalità AT occore nuovamente rimuovere l’alimentazione dell scheda, o eseguire da terminale il comando AT+RESET.
Per inviare i comandi è possibile utilizzare il monitor seriale di Arduino opportunamente configurato.
Vediamo ora la sequenza delle operazioni necessarie alla configurazione.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Configurazione comune Comando inviato Risposta Significato AT OK #Inserimento in modalità AT AT+PSWD? +PSWD:1234 #Lettura password AT+PSWD=0000 OK #Modifica password AT+PSWD? +PSWD:0000 #Conferma cambio password AT+NAME? +NAME:HC-05 #Il nome dell'apparato come comparirà alla scansione AT+NAME=MOREWARE OK #Modifichiamo il nome dell'apparato AT+NAME? +NAME:MOREWARE #Controllo dell'avvenuto cambio di nome AT+UART? +UART:9600:0:0 #I parametri di comunicazione seriale - baud:stopbit:parità AT+UART=38400:1:0 OK #Modifica parametri comunicazione AT+UART? +UART38400:1:0 #Conferma modifica Configurazione slave Comando inviato Risposta Significato AT+ORGL OK #Ripristino configurazione di fabbrica AT+ROLE? +ROLE:0 # 0 = slave, 1 = master AT+ADDR? +ADDR:xxxx:xx:xxxxxx #indirizzo della scheda - salvarlo per configurare il master Configurazione master (la password deve essere la stessa dello slave) Comando inviato Risposta Significato AT+ORGL OK #Ripristino configurazione di fabbrica AT+ROLE? +ROLE:0 # 0 = slave, 1 = master AT+ROLE=1 OK #Impostazione dekll ruolo a master AT+ROLE? +ROLE=1 #Conferma impostazione scheda master AT+BIND +BIND:0:0:0 #Indirizzo della scheda slave da collegare in automatico AT+BIND=xxxx,xx,xxxxxx OK #Configurazione indirizzo scheda slave AT+BIND +BIND:xxxx:xx:xxxxxx #Conferma impostazione indirizzo dello slave AT+CMODE? +CMOD:1 # 1 = associa qualsiasi slave - 0 = associa lo slave in bind AT+CMODE=0 OK #Configuriamo il master per farlo parlare solo con lo slave definito AT+CMODE? +CMOD:0 #Conferma impostazione cmode AT+RESET OK #Usciamo dalla modalità AT |
Il software di configurazione
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Configurazione modulo HC-05 // (UART software) #include <SoftwareSerial.h> const int RX = 8; const int TX = 9; char c; SoftwareSerial softUART(RX, TX); void setup() { Serial.begin(38400); softUART.begin(38400); } void loop() { if (softUART.available()) { c = softUART.read(); Serial.write(c); } if (Serial.available()) { c = Serial.read(); softUART.write(c); } } |
Lo sketch rappresentato ci servirà come programma di terminale per comunicare con il modulo HC-05 attraverso Arduino. Il monitor seriale dovrà essere configurato a 38400 baud con NL e CR attivi.
Una volta configurate le schede master e slave potranno riconoscersi e connettersi automaticamente quando saranno in prossimità l’una dell’altra, mentre tutti i programmi di trasmissione visti negli articoli precedenti continueranno a funzionare senza alcun problema, trasmettendo tuttavia le informazioni nell’etere aziché utilizzare i soliti cavetti.
Considerazioni finali
E con questo articolo si conclude la serie dedicata alla configurazione e all’utilizzo della seriale di Arduino. Ora sta a voi che ci leggete mettere in pratica le modalità di approfondimento e sviluppo per creare nuovi ed interessanti progetti.
Come sempre, Moreware sarà felice di pubblicare gli articoli più interessanti e originali.
Link utili
- Ricetrasmettitore Bluetooth HC-05
- Adattatore seriale FT232RL da USB a TTL
- Adattatore seriale MAX232 su RS232
- Paolo Di Leo – Seriale e Arduino – Edizioni Sandit
Le puntate precedenti:
- Comunicazione seriale tra due schede Arduino – #01
- Serial Arduino – Ricezione e trasmissione dati – #02
- Hardware vs. Software serial – The Arduino choices #03
- Connessione seriale-USB e protocolli su Arduino #04
- Arduino – Gestire connessioni BlueTooth seriali #5
Join our groups on Telegram…