GPS Clock Project – parte 2

Ah ri-eccoci, dopo la pausa natalizia riprendiamo il nostro tutorial per la realizzazione di un orologio che si sincronizza con un segnale GPS, utilizzando un Atmega 1284P e un modulo bluetooth HC-05 per collegarsi e comunicare con il modulo bluetooth GPS.

Nel frattempo mi è impazzito l’FTDI breakout per caricare gli sketch sull’Atmega 1284P (il temutissimo messaggio ‘avrdude not in sync’ e cose simili), mentre non ho alcuna difficoltà utilizzando il cavo FTDI. Ho perso un po’ di tempo per capire quale potesse essere la causa, perché un minuto funzionava alla grande e un minuto dopo non voleva più sentire ragione; alla fine ho deciso di semplicemente abbandonare per ora l’FTDI breakout e continuare ad utilizzare il cavo FTDI che non mi dà problemi.

Ora affrontiamo il modulo HC-05. Sentirete parlare anche di moduli HC-06, in verità hanno lo stesso chip del HC-05 (CSR BC417) ma hanno semplicemente un altro firmware (aka Linvor) che non permette al modulo di assumere il ruolo di Master. Mentre l’HC-05 può fare sia da Master che da Slave, l’HC-06 può fare soltanto da Slave, e accetta pertanto un minor numero di comandi AT. Se uno volesse utilizzare un HC-06 come un HC-05, basterebbe riscrivere il firmware del modulo con il firmware dell’HC-05 e via (si veda per esempio Byron’s blog per i più arditi e aguerriti). Molte volte però il breakout del HC-06 ha soli 4 pin anziché 6, limitando le funzionalità offerte.

Ora, l’utilizzo di questi moduli è abbastanza vario, a seconda del modello e del firmware che hanno. Possono cambiare i comandi AT che si utilizzano, può cambiare la baud rate di base… Se guardate bene dietro al modulo in vostro possesso, trovate (almeno sulla maggior parte dei moduli) un codice tipo ZS-040 o FC-114. In genere hanno firmware leggermente diversi. Per il modello ZS-040, Martin Currey ci offre delle informazioni molto utili e dettagliate sul suo blog. E sempre Martyn Currey ci offre altre informazioni utili e dettagliate anche per il modello FC-114.

Il modulo che utilizzerò per questo tutorial è un HC-05 FC-114, ma non seguirò tutte le indicazioni date nel blog di Martyn Currey perché ho comunque un firmware diverso. Il firmware che ho sul dispositivo che utilizzo qui è “2.0-20100601”, pertanto per i comandi AT seguo le indicazioni che si trovano su questa pagina di ITEAD Studio. Sia dalle informazioni di quest’ultima pagina, sia da vari tentativi di “Trial and Error” (tentativi, errori, nuovi tentativi fino ad arrivare a risultati), so che il mio modulo comunica con un baud rate di 38400.

La prima cosa da fare per prendere confidenza con il vostro modulo e per vedere che effettivamente funzioni, è quello di collegarlo al vostro PC con un cavo FTDI (o FTDI breakout) e provare a comunicare da un terminale seriale tipo TeraTerm. Ho tentato con Putty senza alcun successo; mentre Putty funziona alla grande per l’SSH, non ho avuto altrettanto successo per le comunicazioni seriali. Questa esperienza è stata confermata anche da Vincenzo, pertanto noi vi consigliamo TeraTerm. Alcuni moduli hanno un baudrate di 9600, altri di 38400, per cui è possibile che dovrete fare qualche tentativo prima di riuscire a comunicare con il vostro modulo.

Per prima cosa, collegate il modulo al cavo FTDI (o al FTDI breakout; nel caso di un FTDI breakout, di solito hanno un jumper o uno switch per scegliere tra 5V e 3.3V, impostate SEMPRE su 3.3V perché i pin del modulo HC-05 non supportano correnti più alte e si possono rovinare, pertanto abbiate sempre l’accortezza di utilizzare SOLTANTO 3.3V con questi moduli.) Collegate: VCC a VCC e GND a GND, mentre TX e RX vengono incrociati tra l’HC-05 e il cavo FTDI. Il TX di uno va al RX dell’altro, e viceversa. Per ora vi possono bastare queste connessioni.

RX / TX incrociati tra il modulo HC-05 e il modulo FTDI
RX / TX incrociati tra il modulo HC-05 (in basso) e l’FTDI breakout (in alto)

Ora, per rendervi la vita più semplice, ancora prima di provare la prima comunicazione, effettuiamo un passaggio non tanto scontato, ma che vi permetterà di comunicare in modo più certo con il vostro modulo. Il modulo HC-05 ha due “MODI” in cui può essere avviato. Il primo modo è il “Modo Comunicazione”, e il secondo è il “Modo Comando” o più semplicemente il “Modo AT” (potremmo anche chiamarlo il “Modo Full AT”). Alla prima accensione, con i soli pin indicati sopra, il vostro modulo è in modalità comunicazione (questo si vede anche dal led che flasha rapidamente, due volte al secondo). In modalità comunicazione può anche accettare dei comandi AT sebbene in modo limitato, a meno che il modulo è in stato di connessione ad un altro modulo bluetooth. Praticamente quando il modulo ha già fatto il pairing con un altro modulo bluetooth, e si connette a quel modulo, a quel punto non accetta più comandi AT ma fa semplicemente da “relay” (“staffetta”) per i dati seriali. Lo stato “connesso” in modo comunicazione si chiama anche “modo trasparente”. Tutti i dati che riceve dal terminale li inoltra all’altro modulo, e tutti i dati che riceve dall’altro modulo li inoltra al terminale. In questo caso, per far sì che accetti nuovamente comandi AT, bisogna farlo riavviare in modalità comando. Come si fa a farlo avviare invece in modalità comando? Con il pin 34, che purtroppo sulla maggior parte dei moduli in commercio non è esposto attraverso i pin dell’header. Se guardate a questa immagine (presa dal blog di Martyn Currey), vedete che il pin 34 è quello in alto a destra al modulo, ma non è collegato ai pin esposti sotto.

HC-05_FC-114__HC-06_FC-114_001_1600-584x265

I pin esposti sotto possono variare leggermente da un modulo all’altro, il modulo che sto utilizzando è come nell’immagine pubblicata da Martyn Currey. Ecco cosa fanno i pin esposti sotto:

EN: “enable” che sarebbe quasi meglio chiamare il pin “disable”, perché quando questo pin viene tirato LOW si disabilita il modulo. Pertanto per riavviare il modulo, anziché staccare e ri-attaccare la corrente, è sufficiente portare LOW questo pin (collegarlo per esempio a GND) e successivamente riportarlo HIGH. Alcuni modulo prevedono anche un pulsante vicino a questo pin, ma sinceramente non ho capito a cosa serva; alcuni scrivono “WAKEUP”, forse se il modulo va in modalità ibernazione questo pulsante serve per risvegliarlo, ma sinceramente non mi sono mai trovato in questa situazione e non so se è possibile
VCC: l’alimentazione a 3.3V
GND: va a GND
TXD: trasmissione seriale, va alla ricezione seriale del FTDI (o dell’Arduino, o qualunque dipositivo che “controlla” i suoi dati seriali)
RXD: ricezione seriale, va alla trasmissione seriale del FTDI (o dell’Arduino, o qualunque dipositivo che “controlla” i suoi dati seriali)
STATE: quando il modulo è in “Modo Comunicazione”, questo pin è HIGH quando il modulo è effettivamente connesso (“linked”) ad un altro modulo bluetooth, è LOW invece quando è disconnesso. Quando il modulo non è ancora connesso ad un altro modulo (e il pin STATE pertanto da un segnale LOW), può comunque accettare un numero ridotto di comandi AT; quando invece è connesso ad un altro modulo (e il pin STATE è HIGH), a quel punto non accetta più comandi AT.

Ma nessuno di questi sei pin è utile per avviare il modulo in Modo Comando! Per avviare il modulo in modo comando bisogna che il pin 34 sia tenuto HIGH mentre il modulo viene avviato (si può per esempio collegare il pin 34 direttamente a VCC). Vi consiglio di saldare un cavetto al pin 34 (alcuni lo chiamano il pin KEY oppure il pin CMD). Operazione non tanto semplice, perché non è predisposto per saldature, suggerisco di utilizzare un cavetto abbastanza fino perché se ha troppo spessore diventa quasi impossibile saldarlo sopra quel pad minuscolo. Qui una foto della saldatura effettuata egregiamente da Vincenzo (solo lui ci riesce, io non ho la visione abbastanza acuta per regolarmi in un’operazione simile!) Se vi scappa qualche imprecazione nel frattempo verso chi ha prodotto questi moduli per non aver previsto l’esposizione del pin 34, è comprensibile e non ci faremo caso (l’abbiamo fatto noi per primi!).

Cavetto saldato al pin 34, e collegato ad un pin digitale dell'Atmega 1284P
Cavetto saldato al pin 34, e collegato ad un pin digitale dell’Atmega 1284P

Potete anche provare a toccare un cavetto Dupont al pin 34 da una parte e a VCC dall’altra prima di accendere il modulo, giusto per vedere il procedimento. Quando il modulo viene avviato con il pin 34 HIGH, la maggior parte dei moduli ha anche un led che vi fa capire che il modulo è effettivamente entrato in modalità comando, perché inizia a flashare lentamente (una volta ogni due secondi). Invece in modo comunicazione il led flash due volte al secondo. Se avete provato ad accendere il modulo con il cavetto Dupont tra pin 34 e VCC, e vedete flashare il led una volta ogni due secondi, bene siete sulla buona strada. Se così non è, non vi disperate, può darsi che non avete toccato bene il cavetto al pin 34 o a VCC… Bisogna lavorare con pazienza usando il metodo del “Trial and Error” finché non avete il risultato desiderato. Da notare anche che, staccando il cavetto da VCC dopo che il modulo è avviato, il modulo rimarrà in Modo Comando ma comunque non funzioneranno bene tutti i comandi AT.

CMD pin 34 collegato a VCC per tenerlo HIGH quando viene avviato il modulo
CMD pin 34 collegato a VCC con un cavetto Dupont, in modo da tenerlo HIGH quando viene avviato il modulo

L’unico modo per farli funzionare tutti è tenere il pin 34 collegato a VCC (o comunque tenerlo HIGH). In questo documento ho creato un elenco di comandi AT che, in un test che ho fatto, funzionano anche in modo comunicazione (quando non in stato di connessione ad altro modulo bluetooth) o comunque quando il pin 34 è staccato o LOW; e altri che funzionano soltanto quando il pin 34 è HIGH e il modulo è in Modo Comando. Tutti funzionano invece quando il modulo è in Modo Comando. Detto questo, aggiungo anche che mi è capitato che con un modulo, riuscivo a inviare i comandi AT soltanto in modalità comando mentre in modalità comunicazione non mi rispondeva affatto. Invece con un altro modulo inviavo senza problemi un numero limitato di comandi AT anche in modalità comunicazione. Per questo motivo, per risparmiarvi inutili fatiche e grattacapi nel vostro primo tentativo di comunicazione, vi faccio fare da subito questo passaggio di saldare un cavetto al pin 34, così andate a colpo più sicuro per la prima comunicazione.

screenshot_gestione_dispositiviFatto il collegamento del pin 34, dovete ora impostare TeraTerm per la comunicazione con il cavo FTDI. Quando collegate il cavo FTDI al PC, potete trovare nella gestione dispositivi, sotto “Porte (COM e LPT)”, la porta COM che dovete impostare in TeraTerm per comunicare attraverso l’FTDI (stessa cosa per un FTDI breakout). Segnatevi la porta COM che risulta in gestione dispositivi,

TeraTerm -> Setup -> Serial port...
TeraTerm -> Setup -> Serial port…

poi in TeraTerm aprite “Setup -> Serial port…” e scegliete la stessa porta seriale che avete segnato. Se non sapete la baud rate del vostro modulo, potete provare prima 38400, poi se non avete successo potete provare in un secondo momento 9600 e riprovare la comunicazione.

Io imposto a 38400, sapendo che il mio modulo comunica con questa baud rate. Le altre impostazioni sono:

Data: 8 bit
Parity: none
Stop: 1 bit
Flow control: none
TeraTerm -> Setup -> Terminal...
TeraTerm -> Setup -> Terminal…

Poi aprite “Setup -> Terminal” e impostate “Receive: AUTO” e “Transmit: CR+LF”. I moduli HC-05 si aspettano di vedere la sequenza CR+LF (che corrisponde a “\r\n”) come chiusura di ogni comando che inviate. Suggerisco di spuntare anche “Local echo” in modo che vediate anche i comandi che voi inviate oltre che le risposte del modulo. Ora salvate le impostazioni: “Setup -> Save Setup” (sovrascrivete “TERATERM.INI”), chiudete e riaprite TeraTerm. Così vengono caricate le impostazioni che avete salvato.

Riaprendo TeraTerm, dovreste ora essere in comunicazione con il vostro modulo, in modalità comando. Per verificare, provate a scrivere “AT” (senza le virgolette ovviamente) e premete INVIO. Dovreste vedere la risposta “OK”. Questo significa che riuscite a comunicare con il vostro modulo! Se non avete visto “OK” provate ancora a scrivere “AT” + INVIO (se tante volte avete toccato per sbaglio un tasto e il modulo non ha visto “AT”… non potete per esempio usare BACKSPACE per cancellare un carattere scritto per sbaglio, se sbagliate a scrivere premete semplicemente INVIO e poi provate a scrivere di nuovo correttamente). Se non vedete la risposta “OK” oppure vedete caratteri strani, provate a cambiare baud rate, per esempio se avete impostato a 38400 allora impostate adesso a 9600, salvate di nuovo le impostazioni, chiudete e riaprite TeraTerm. E’ un po’ macchinoso chiudere e riaprire, ma è così che funziona TeraTerm. Una volta ri-aperto, provate di nuovo a scrivere “AT” e questa volta speriamo che abbiate ricevuto la risposta “OK”. Se avete ricevuto la risposta “OK”, siamo sulla strada giusta. Se no, ora potete cominciare a disperare. Oppure a chiedere aiuto!

Ora, i comandi AT si scrivono in due modi, uno per reperire i valori impostati e l’altro per impostare nuovi valori. La modalità di scrittura dei comandi dipende dal firmware, con il firmware 2.0-20100601 per “interrogare” il modulo puoi scrivere i comandi sia con o senza un punto interrogativo “?”. Pertanto “AT+VERSION” + INVIO, e “AT+VERSION?” + INVIO, avranno tutti e due lo stesso risultato:

AT+VERSION
+VERSION:2.0-20100601
OK

Potete sperimentare un po’ con i vari comandi, potete fare riferimento alla pagina su iTeadStudio se avete il firmware indicato (ho trovato utile anche questo documento che, sebbene sia per un altro modulo, comunque i comandi AT corrispondono praticamente tutti). Se invece avete un modello FC-114 con firmware del tipo “+BOLUTEK Firmware V2.43, Bluetooth V2.0, HCI V2.1, HCI Rev37, LMP V4, LMP SubV37” allora potete fare riferimento al blog di Martyn Currey. Sto vedendo che l’altra pagina di Martyn Currey per il modello ZS-040 è in effetti scritto per lo stesso firmware che io sto trovando sul mio FC-114, ossia “+VERSION:2.0-20100601”, ci sono però piccole discrepanze, per esempio Martyn indica un baud rate predefinito di 9600, mentre il mio baud rate predefinito (come indicato sulla pagina di iTeadStudio) è di 38400. Provate per esempio i seguenti comandi AT (in blu i comandi inviati da voi):

AT
OK
AT+NAME
+NAME:H-C-2010-06-01
OK
AT+NAME=MyNewName
OK
AT+NAME
+NAME:MyNewName
OK
AT+ROLE
+ROLE:0
OK
AT+ROLE=1
OK
AT+ROLE
+ROLE:1
OK

(Role 0 significa Slave, Role 1 significa Master.)

Ora proviamo a connettere il modulo con il bluetooth del vostro telefono per esempio. Consiglio di scaricare un’App che faccia da terminale bluetooth sul vostro telefono (io ho scaricato “Bluetooth Terminal” di Juan Sebastian Ochoa Zambrano). Assicuratevi che il bluetooth del telefono sia acceso e che il dispositivo sia visibile (“discoverable”). Non aprite ancora l’app, faremo prima il pairing, poi aprite l’app per fare il link. Seguite i passaggi di questi comandi AT, metto commenti dopo ogni comando per spiegare passo passo ma chiaramente voi non userete i commenti nel terminal Tera Term.

AT               //VERIFICATE CHE IL MODULO RISPONDA
OK
AT+ROLE=1        //IMPOSTATE IL RUOLO A 1 = MASTER, SOLO COSI' 
                 //POTETE SCANSIONARE ALTRI MODULI NELLE VICINANZE
OK
AT+ROLE          //CONTROLLATE CHE IL RUOLO SIA EFFETTIVAMENTE 
                 //IMPOSTATO COME MASTER
+ROLE:1
OK
AT+CMODE=1       //IMPOSTATE IL MODO DI CONNESSIONE DEL MODULO A "CONNECT ANY",
                 //SIGNIFICA CHE SI PUO' CONNETTERE A QUALSIASI DISPOSITIVO
                 //E NON SOLTANTO AD UN DISPOSITIVO A CUI HA FATTO UN BIND
OK
AT+CMODE         //VERIFICATE CHE CMODE SIA IMPOSTATO EFFETTIVAMENTE A 1 = CONNECT ANY
+CMOD:1
OK
AT+INQM=1,15,12  //IMPOSTATE INQUIRY MODE: 1 = MODO RSSI, 15 = MASSIMO 15 DISPOSITIVI,
                 //12 = TIMEOUT DI 12 (MOLTIPLICARE QUESTO VALORE PER 1.28
                 //PER GLI EFFETTIVI SECONDI, 12*1.28 = 15 SECONDI CIRCA)
OK
AT+INQM          //CONTROLLATE CHE INQUIRY MODE SIA EFFETTIVAMENTE IMPOSTATO A 1,15,12
+INQM:1,15,12
OK
AT+PSWD=2984     //IMPOSTATE LA PASSWORD DEL VOSTRO DISPOSITIVO, 
                 //SCEGLIETE UNA QUALSIASI FORMATA DA 4 NUMERI
OK
AT+PSWD          //VERIFICATE CHE LA PASSWORD SIA STATA EFFETTIVAMENTE IMPOSTATA
+PSWD:2984
OK
AT+INIT          //INIZIALIZZA LA LIBRERIA SPP (E' NECESSARIO INIZIALIZZARE
                 //QUESTA LIBRERIA PER POTER EFFETTUARE LA RICERCA DI ALTRI DISPOSITIVI)
OK
AT+INQ           //INIZIATE LA RICERCA (INQUIRY) DI ALTRI MODULI, 
                 //A QUESTO PUNTO POTRESTE VEDERE UNA PAUSA 
                 //MENTRE VIENE EFFETTUATA LA RICERCA, POI
                 //COMPARIRANNO GLI INDIRIZZI DEI MODULI BLUETOOTH SCOPERTI. 
                 //NOTERETE CHE IL LED DEL MODULO ORA FLASHA PIU' VELOCEMENTE, 
                 //PERCHE' NON E' PIU' PASSIVO, IN ATTESA DI COMANDI AT, 
                 //ORA E' ATTIVO E STA INTERROGANDO I MODULI VICINI. 
                 //NEL FRATTEMPO COMUNQUE PUO' ASCOLTARE I COMANDI AT CHE INVIATE
+INQ:C43A:BE:153972,5A020C,7FFF      //NEL MIO CASO, 
                                     //HA TROVATO L'INDIRIZZO DEL MIO TELEFONO
OK               //LA RICERCA FINISCE QUANDO HA TROVATO IL NUMERO MASSIMO DI DISPOSITIVI
                 //OPPURE QUANDO HA RAGGIUNTO IL TIMEOUT (15 SECONDI NEL NOSTRO CASO)
                 //ORA, L'INDIRIZZO VERO E PROPRIO SONO 
                 //LE PRIME TRE SEZIONI SEPARATE DA DUE PUNTI ":"
AT+RNAME C43A,BE,153972  //CHIEDETE AL MODULO DI REPERIRE IL NOME DEL DISPOSITIVO 
                         //CHE HA L'INDIRIZZO ELENCATO SOPRA, 
                         //PER VERIFICARE CHE SI TRATTI EFFETTIVAMENTE DEL VOSTRO TELEFONO. 
                         //SOSTITUITE L'INDIRIZZO CON QUELLO DEL VOSTRO TELEFONO, 
                         //USANDO VIRGOLE AL POSTO DEI DUE PUNTI
+RNAME:XPeria Z3+        //E VA BEH, AVETE SCOPERTO CHE TELEFONO C'HO
AT+PAIR=C43A,BE,153972,60 //DITE AL MODULO DI INOLTRARE AL TELEFONO LA RICHIESTA DI PAIRING, 
                         //CON UN TIMEOUT DI 60 SECONDI
                         //FATE ATTENZIONE ALLE NOTIFICHE DEL VOSTRO TELEFONO, 
                         //DOVREBBE COMPARIRE LA RICHIESTA DI PAIRING, 
                         //CLICCATE SULLA NOTIFICA E INSERITE LA PASSWORD DEL DISPOSITIVO 
                         //CHE AVETE IMPOSTATO POCO FA (NEL MIO CASO 2984)
OK                       //SE IL PAIRING AVVIENE CON SUCCESSO, ORA COMPARE OK, 
                         //ALTRIMENTI SE NON AVETE FATTO ENTRO 60 SECONDI 
                         //IL TIMEOUT FARA' TORNARE UN ERRORE O UN FAIL, 
                         //E DOVETE RIPROVARE
                         //ORA CHE AVETE FATTO IL PAIRING CON IL TELEFONO, 
                         //IL TELEFONO E IL DISPOSITIVO HC-05 ORA SONO AMICI 
                         //E SI FIDANO L'UNO DELL'ALTRO, 
                         //E QUINDI POSSONO INIZIARE UNA CONVERSAZIONE. 
                         //L'HC-05 E' DIFFIDENTE VERSO SCONOSCIUTI 
                         //E NON GLI PIACE INIZIARE CONVERSAZIONI CON SCONOSCIUTI. 
                         //SIETE ALLORA PRONTI PER EFFETTUARE IL LINK, 
                         //PERTANTO POTETE ORA APRIRE L'APP "BLUETOOTH TERMINAL". 
                         //POI FATE IL LINK:
AT+LINK=C43A,BE,153972   //APRITE IL LINK (LA CONNESSIONE O CONVERSAZIONE 
                         //CON IL VOSTRO TELEFONO, QUESTA VOLTA NON SERVE UN TIMEOUT)
OK                       //NELL'APP, DOVRESTE VEDERE "connected: Xperia Z3+"
                         //(O SIMILE, CON IL NOME DEL VOSTRO TELEFONO). 
                         //ORA PROVATE A SCRIVERE QUALCOSA NEL TERMINALE
                         //DELL'APP E PREMETE INVIO; QUELLO CHE SCRIVETE 
                         //DOVRESTE VEDERLO COMPARIRE NEL TERMINALE DEL PC (TERA TERM)
(DAL TERMINALE DELL'APP scrivete: "Hello HC-05!")
Hello HC-05!             //IL MESSAGGIO SCRITTO DALL'APP COMPARE IN TERA TERM
Ciao a te, Xperia Z3+!   //PROVATE A SCRIVERE UN MESSAGGIO DA TERA TERM E PREMETE INVIO, 
                         //DOVREBBE COMPARIRE NEL TERMINALE BLUETOOTH SUL TELEFONO

//NOTERETE CHE ORA IL LED DEL HC-05 FLASH DUE VOLTE RAPIDAMENTE, POI FA UNA PAUSA. 
//QUESTO SIGNIFICA CHE E' IN MODO COMUNICAZIONE ED E' IN STATO CONNESSO. 
//QUESTO SIGNIFICA ANCHE CHE NON ASCOLTA PIU' I COMANDI AT 
//PERCHE' ORA E' IN MODO TRASPARENTE, TUTTO L'INPUT CHE RICEVE DA TERA TERM 
//LO INOLTRA DIRETTAMENTE ALL'APP E VICEVERSA. 
//INOLTRE, A QUESTO PUNTO, ANCHE IL PIN "STATE" DOVREBBE DARE UN SEGNALE HIGH, 
//QUESTO LO USEREMO POI NEI NOSTRI SKETCH CON L'ATMEGA 1284P
AT+STATE                 //PROVANDO A SCRIVERE UN COMANDO AT, 
                         //ANZICHE' AVERE LA RISPOSTA, VERRA' INOLTRATO 
                         //COME TESTO AL TERMINALE BLUETOOTH DEL TELEFONO

Se siete umani come noi, vi sarà capitato di sbagliare a scrivere qualche comando, e senza poterlo correggere (perché in Tera Term non serve il tasto BACKSPACE) avrete dovuto premere INVIO, ricevere “ERROR(0)”, e poi riscrivere il comando correttamente. Possiamo però rimediare alla fatica di scrivere manualmente i comandi (magari con errori), se automatizziamo il tutto con l’Atmega 1284P. Anziché collegare l’HC-05 direttamente ad un cavo FTDI, lo possiamo collegare all’UART secondario dell’Atmega 1284P, mentre il cavo FTDI lo colleghiamo all’UART primario dell’Atmega 1284P. Così l’Atmega farà da intermediario per le comunicazioni. Proviamo anzitutto a fare uno sketch semplicissimo che permette di utilizzare il Serial Monitor di Arduino al posto del terminale di Tera Term.

I collegamenti da fare li vedete in questa immagine (dovreste aver già fatto i collegamenti tra l’FTDI e l’Atmega nel tutorial precedente, ora si tratta solo di aggiungere l’HC05):atmega1284p_HC-05_bb

Una volta effettuati i collegamenti, potete copiare questo sketch dal repository github e incollarlo in uno sketch nuovo nell’IDE di Arduino (oppure fate il clone del repository in locale utilizzando git):
HC-05_Manual_AT_Mode.ino

Caricate lo sketch sull’Atmega 1284P (dovrebbe lampeggiare il LED sul pin D0 quando viene re-inizializzato il bootloader dopo il caricamento). Impostate il Monitor Seriale nell’IDE di Arduino a 38400 baud e a “CR+LF” per l’invio. Ora scrivete “AT” e premete INVIO. Dovreste vedere la risposta “OK”. Ora potete utilizzare il Monitor Seriale di Arduino esattamente come avete utilizzato Tera Term, con il vantaggio che potete correggere gli errori di scrittura prima di inviare i comandi AT via seriale. Questo sketch utilizza due UART sull’Atmega 1284P, il primo (Serial) viene utilizzato sia per caricare gli sketch sia per comunicare con il Monitor Seriale nell’IDE Arduino; il secondo (Serial1) comunica con l’HC-05.

Questo sketch è utile da avere a portata di mano per effettuare un eventuale debugging o per impostare manualmente l’HC-05. Ma sebbene teniamo questo sketch nel nostro scrigno, possiamo fare ora un passo ancora in avanti, automatizzando tutto il processo di connessione tra l’HC-05 e un altro dispositivo. Copiate e incollate lo sketch seguente:
HC05_Automate_Communication/test. Potete effettuare un “git clone” di questo repository nella vostra cartella degli sketch se avete git installato sul vostro PC (attenzione su linux, arduino su linux è molto particolare per le cartelle degli sketch, non vede sempre cartelle che non siano create dal programma stesso). Nel caso che fate il clone, vi consiglio poi di effettuare il checkout del branch “test” che è l’ultimo stabile. Altrimenti se copiate a incollate lo sketch, dovete fare attenzione a creare anche il file HC05.h che è necessario per il corretto funzionamento dello sketch. Per creare il file HC05.h cliccate sulla freccia in giù che sta all’angolo superiore destro dell’IDE di Arduino e cliccate “Nuova scheda”; vi chiederà il nome del file, scrivete “HC05.h” + INVIO. Adesso potete copiare e incollare anche il contenuto di HC05.h

Caricate lo sketch. Questa volta il Monitor Seriale dovrebbe essere impostato a solo “LF” (o “NL”, newline) per l’invio. Quando aprite il Monitor Seriale, vedrete che tutti i comandi AT vengono inviati dallo stesso programma senza che dovete fare nulla. Prima l’HC-05 viene avviato dall’Atmega in Modo Comunicazione, per vedere se è stato già effettuato il link ad un dispositivo precedentemente e se riesce a ri-iniziare il link ora (lo sketch fa il rilevamento del pin STATE per vedere se è HIGH o LOW). Se il pin STATE è rilevato LOW, allora non c’è un link di connessione e dopo circa 5 secondi viene riavviato il modulo in Modo Comando. Il modulo viene impostato come Master, viene controllato se è stato effettuato già un link a qualche modulo e se sì tenta di ristabilire il link, in caso contrario inizializza la libreria SPP e inizia a scansionare i dispositivi vicini. Trovati i dispositivi, li prende uno alla volta e vi chiede se volete effettuare il link a quel dispositivo, potete rispondere “Y” o “N” (sì o no). Se provate a mettere “Y” per il vostro telefono, funzionerà solo nel caso che sia stato già effettuato il pairing, altrimenti risulterà un FAIL, perché questo sketch non prevede il pairing. Visto che è pensato per il link al modulo GPS Bluetooth che non richiede il passaggio del pairing, il link avrà probabilmente successo solo nel caso che rispondete “Y” per il modulo GPS Bluetooth. Lo sketch presuppone anche che il modulo GPS Bluetooth abbia PSWD 0000, perché anche la PSWD dell’HC-05 viene impostato a “0000” in modo da permettere il link automatico senza un pairing. Quando rispondete “Y” per il modulo GPS Bluetooth e il link ha successo, vedrete poi comparire nel Monitor Seriale le stringhe NMEA ricevute dal modulo GPS.

<- Torna alla prima parte      |      Continua alla terza parte… ->

Comments are closed.