P5js plotter nano BLE sketch segue il precedente articolo in cui hai visto come realizzare un semplice plotter grafico di 3 dati provenienti dal un device BLE.
In questo articolo leggerai e analizzerai lo sketch da caricare su Arduino per raccogliere i dati dell’accelerometro e trasferirli via Bluetooth all’interfaccia P5js.
Il Video del P5js plotter nano BLE sketch
riprendendo il video che hai visto nel precedente articolo capirai meglio come funziona il progetto P5js plotter nano BLE sketch e quindi la descrizione del codice riportata sotto:
hai visto come sia semplice collegare al tuo computer il device Arduino nano BLE e raccogliere i dati provenienti dall’IMU.
Prima di passare alla descrizione del codice per questo progetto ti invito a leggere i seguenti articoli di preparazione e test:
in cui l’ultimo rappresenta il precedente articolo citato sopra.
Ora che hai chiaro come funzionano le singole parti che ti servono per questo progetto potrai facilmente comprendere lo sketch che segue.
Sketch P5js plotter nano BLE sketch
Lo sketch che puoi caricare su Arduino Nano BLE deve fare due cose semplici:
- raccogliere i dati dell’accelerometro ( IMU ) presente sulla board stessa;
- attivare una interfaccia BLE con tanto di service e caratteristiche a cui possa collegarsi p5Js
Vediamo come eseguire questa semplice operazione:
#include <ArduinoBLE.h> #include <Arduino_LSM9DS1.h> BLEService accService("19B10010-E8F2-537E-4F6C-D104768A1214"); BLEByteCharacteristic accXCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify); BLEByteCharacteristic accYCharacteristic("19B10012-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify); BLEByteCharacteristic accZCharacteristic("19B10013-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify); void setup() { if (!BLE.begin()) { while (1); } if (!IMU.begin()) { while (1); } BLE.setLocalName("AccBLE"); BLE.setAdvertisedService(accService); accService.addCharacteristic(accXCharacteristic); accService.addCharacteristic(accYCharacteristic); accService.addCharacteristic(accZCharacteristic); BLE.addService(accService); accXCharacteristic.writeValue(0); accYCharacteristic.writeValue(0); accZCharacteristic.writeValue(0); BLE.advertise(); } void loop() { float x, y, z; BLE.poll(); if (IMU.accelerationAvailable()) { IMU.readAcceleration(x, y, z); accXCharacteristic.writeValue(map(x,-1,1,0,180)); accYCharacteristic.writeValue(map(y,-1,1,0,180)); accZCharacteristic.writeValue(map(z,-1,1,0,180)); } }
le prime linee includono le due librerie necessarie alla connessione BLE ed alla lettura dell’IMU;
linee 05-09: definisci il servizio e le caratteristiche BLE come già visto nell’articolo dedicato al codice BLE.
Nota che l’UUID del servizio e quello delle caratteristiche sono identici in quanto sia il peripheral sia il central, per comunicare, devono agganciarsi ai medesimi UUID.
In questo esempio l’Arduino Nano BLE si comporta come peripheral esponendo i propri servizi in advertising.
le linee 12-13: verificano la corretta comunicazione tra la scheda, il micro controllore, e le periferiche BLE e IMU;
linea 15: imposta il nome che desideri dare al device BLE;
linea 16: imposta come Advertising il servizio creato alla linea 05;
linee 18-20: aggiungi al servizio le tre caratteristiche con UUID definiti alle linee 07-09;
linea 22: aggiungi il servizio all’istanza BLE usando il metodo addService dell’oggetto BLE;
linee 24-26: invia il valore “0” via Bluetooth alle tre caratteristiche usando il metodo writeValue;
linea 28: avvia l’advertising del servizio e delle caratteristiche definite alle linee precedenti;
La funzione loop()
La funzione loop() del P5js plotter nano BLE sketch è definita alle linee 31-42 il cui funzionamento è definito di seguito:
linea 32: definisci tre variabili di tipo float ( x,y,z );
linea 33: usa il metodo poll() per eseguire l’invio dei dati raccolti via BLE;
linee 35-36: se nel buffer IMU ci sono dati raccolti dall’accelerometro li processa inserendo i rispettivi valori nelle tre variabili create alla linea 32;
linee 38-40: per ciascuna caratteristica converte il valore trigonometrico ricevuto dall’accelerometro ( valore che oscilla da -1 a 1 ) in un angolo che varia da 0 a 180 gradi e scrive tale valore nella caratteristica corrispondente.
Ad ogni loop() i valori delle tre caratteristiche saranno inviati al P5Js via BLE.
Ovviamente puoi definire altri device che mediante codice BLE possano ricevere ed interpretare tali informazioni per i tuoi progetti con P5js plotter nano BLE sketch.