Qualche tempo fa l’amico Mauro Alfieri mi ha mostrato una interessante scheda di sviluppo prodotta da DFRobot e chiamata Bluno Beetle (ora Beetle Ble). Mi è sembrata la scheda perfetta per iniziare a “giocare” con la tecnologia Bluetooth Low Energy (BLE) e quindi ne ho ordinato un esemplare direttamente dallo store di DFRobot.
Mi aspettavo di ricevere il solito pacco anonimo con la scheda all’interno di un sacchetto di plastica antistatica; invece DFRobot spedisce le proprie schede in una elegante scatolina di cartone, proteggendole all’interno con della spugna:
Bluno Beetle è davvero di dimensioni contenute ed è quindi ideale per progetti wearable:
Ma di cosa si tratta? Semplificando è una scheda compatibile con Arduino Uno (ospita infatti il micrcontrollore ATmega328P) a cui è stato aggiunto il chip CC2540 di Texas Instruments come controller USB e BLE. I due chip comunicano tramite interfaccia seriale:
In realtà il chip CC2540 è un vero e proprio microcontrollore che esegue un firmware sviluppato da DFRobot. E’ possibile configurare tale firmware utilizzando comandi AT. Normalmente il firmware è in transparent mode, ovvero fa da “ponte” tra le interfacce USB/BLE e il microcontrollore ATmega. Collegando quindi la Bluno al PC e attivando il monitor seriale, ogni carattere inviato viene inoltrato all’ATmega e viceversa.
Per utilizzare comandi AT, è necessario per prima cosa mettere il firmware in AT mode, inviando 3 volte il carattere + (senza terminatore di riga). Il firmware conferma la nuova modalità con la scritta “Enter AT Mode”:
Possiamo ora inviare i comandi, terminandoli con il terminatore di riga Windows (CRLF). Ad esempio per visualizzare la versione del firmware:
Per tornare in transparent mode, dobbiamo inviare il comando AT+EXIT.
Drivers
E’ possibile che – collegando per la prima volta una scheda Bluno Beetle ad un PC Windows – questa non venga correttamente riconosciuta:
I driver corretti si trovano all’interno della cartella dell’IDE di Arduino. E’ sufficiente effettuare una installazione manuale indicando a Windows tale percorso:
Windows riconoscerà il nuovo dispositivo come Arduino Uno:
Arduino
Come detto, se il firmware in esecuzione sul chip CC2540 è in transparent mode, tramite il collegamento USB possiamo raggiungere direttamente il chip ATmega328P. Questo significa che è possibile programmarlo dall’IDE di Arduino senza particolari problemi, scegliendo Arduino Uno come board e la corretta porta seriale:
BLE e transparent mode
In transparent mode Bluno trasmette via BLE ogni byte ricevuto da Arduino e – viceversa – invia ad Arduino ogni byte ricevuto via BLE.
In questo articolo vediamo come utilizzare l’applicazione demo fornita da DFRobot, nel successivo vi spiegherò invece come sviluppare una vostra applicazione per interagire con la scheda Bluno Beetle via BLE.
Per i telefoni Android, è possibile installare direttamente l’apk dell’applicazione BlunoBasicDemo (applicazione di cui è anche disponibile il codice sorgente). Nello stesso repository Github è presente anche il codice sorgente dell’applicazione per iPhone.
Carichiamo il seguente sketch sulla scheda:
unsigned long previous_time = 0; void setup() { Serial.begin(115200); } void loop() { if (Serial.available() > 0) { int incomingByte = Serial.read(); Serial.print("New byte received: 0x"); Serial.println(incomingByte, HEX); } unsigned long actual_time = millis(); if(actual_time - previous_time > 10000) { Serial.println("Hello world!"); previous_time = actual_time; } } |
Lo sketch legge i bytes in ingresso (provenienti dall’app) e ne rimanda all’app il codice esadecimale. Ogni 10 secondi lo sketch inoltre invia all’app la scritta Hello world!.
Eseguiamo l’app. Dopo aver cliccato il pulsante Scan, possiamo selezionare la scheda Bluno:
Ogni 10 secondi vedremo apparire la scritta HelloWorld!. Possiamo anche provare ad inviare un carattere (es. la lettera “a”); vedremo la risposta di Arduino (0x61 è proprio il codice esadecimale nella tabella ASCII del carattere “a”):
HID mode
Bluno supporta la modalità HID (Human Interface Device). In tale modalità Bluno simula una periferica di input (tastiera, mouse…) collegata via BLE.
Il comando AT per attivare tale modalità è:
[checklist]
- AT+FSM=FSM_HID_USB_COM_BLE_AT
[/checklist]
Attivata la modalità HID, possiamo inviare uno o più “tasti” con il comando:
[checklist]
- AT+KEY=
[/checklist]
possiamo inviare contemporaneamente fino a 3 tasti diversi, concatenando i loro codici con il carattere +. I codici da utilizzare, in base alla tipologia (page) di dispositivo HID, sono elencati nelle specifiche USB.
Debug mode
Tramite due comandi AT è possibile attivare la modalità debug del firmware. Questa modalità consente di ricevere – tramite la connessione USB – copia di tutti i pacchetti inviati e ricevuti tramite la connessione BLE.
I due comandi da utilizzare sono:
[checklist]
- AT+BLUNODEBUG=ON (copia i messaggi inviati dall’ATmega)
- AT+USBDEBUG=ON (copia i messaggi ricevuti via BLE)
[/checklist]
Di default la prima modalità è attiva, mentre la seconda è disattiva. Possiamo verificarlo se carichiamo lo sketch riportato sopra: nel monitor seriale saranno visibili le scritte Hello World! mentre non saranno visibili i caratteri inviati dall’app.
Did you give up on this little board and just end up using it as sensor readout over ble? xD