BLE pour un ESP32 en lien avec l'application Fizziq

Bonsoir,

il m'arrive d’utiliser la géniale application FizziQ (https://www.fizziq.org) pour faire des manips de physique (d'où le nom) avec les smartphones (et les capteurs intégrés) de mes élèves. Une de ses fonctionnalités est d’accepter de communiquer via BLE avec des capteurs externes reliés à des arduino, ESP32 ou même micro:bit

J'ai pour un premier test utilisé la doc ici :

et notamment le code minimaliste fourni

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <BLE2902.h>

// Define the UUIDs for service and characteristic
#define SERVICE_UUID        "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_RX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" 
#define CHARACTERISTIC_UUID_TX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" 

// Declare the characteristic globally
BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200);

  // Create the BLE Device
  BLEDevice::init("FizziQ"); // Set your BLE device name

  // Create the BLE Server
  BLEServer *pServer = BLEDevice::createServer();

  // Create the BLE Service
  BLEService *pService = pServer->createService(SERVICE_UUID);

//   Create a BLE Characteristic
  pCharacteristic = pService->createCharacteristic(
                    CHARACTERISTIC_UUID_TX,
                    BLECharacteristic::PROPERTY_WRITE |
                     BLECharacteristic::PROPERTY_NOTIFY
                  );

  pCharacteristic->addDescriptor(new BLE2902()); 

 // BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(
 //                      CHARACTERISTIC_UUID_TX,
 //                     BLECharacteristic::PROPERTY_WRITE
 //                   );

  // Start the service
  pService->start();

  // Start advertising
  pServer->getAdvertising()->start();
  Serial.println("Waiting for a client connection...");
}

void loop() {
  // Send the temperature value every 5 seconds
  pCharacteristic->setValue("temperature : 20");
  pCharacteristic->notify(); // Send notification if connected
  delay(2000);
  pCharacteristic->setValue("temperature : 21");
  pCharacteristic->notify(); // Send notification if connected
  delay(2000);
}

Évidement dans le loop() on a provisoirement une pseudo lecture de capteur mais là n’est pas le problème.

La compilation ne passe pas :

/home/christian/Arduino/BLE_test/BLE_test.ino:12:1: error: 'BLECharacteristic' does not name a type; did you mean 'Character_h'?
 BLECharacteristic *pCharacteristic;
 ^~~~~~~~~~~~~~~~~
 Character_h
/home/christian/Arduino/BLE_test/BLE_test.ino: In function 'void setup()':
/home/christian/Arduino/BLE_test/BLE_test.ino:18:3: error: 'BLEDevice' has not been declared
   BLEDevice::init("FizziQ"); // Set your BLE device name
   ^~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:21:3: error: 'BLEServer' was not declared in this scope
   BLEServer *pServer = BLEDevice::createServer();
   ^~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:21:3: note: suggested alternative: 'Server'
   BLEServer *pServer = BLEDevice::createServer();
   ^~~~~~~~~
   Server
/home/christian/Arduino/BLE_test/BLE_test.ino:21:14: error: 'pServer' was not declared in this scope
   BLEServer *pServer = BLEDevice::createServer();
              ^~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:21:14: note: suggested alternative: 'Server'
   BLEServer *pServer = BLEDevice::createServer();
              ^~~~~~~
              Server
/home/christian/Arduino/BLE_test/BLE_test.ino:21:24: error: 'BLEDevice' has not been declared
   BLEServer *pServer = BLEDevice::createServer();
                        ^~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:24:3: error: 'BLEService' was not declared in this scope
   BLEService *pService = pServer->createService(SERVICE_UUID);
   ^~~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:24:15: error: 'pService' was not declared in this scope
   BLEService *pService = pServer->createService(SERVICE_UUID);
               ^~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:24:15: note: suggested alternative: 'Serial'
   BLEService *pService = pServer->createService(SERVICE_UUID);
               ^~~~~~~~
               Serial
/home/christian/Arduino/BLE_test/BLE_test.ino:27:3: error: 'pCharacteristic' was not declared in this scope
   pCharacteristic = pService->createCharacteristic(
   ^~~~~~~~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:27:3: note: suggested alternative: 'Character_h'
   pCharacteristic = pService->createCharacteristic(
   ^~~~~~~~~~~~~~~
   Character_h
/home/christian/Arduino/BLE_test/BLE_test.ino:29:21: error: 'BLECharacteristic' has not been declared
                     BLECharacteristic::PROPERTY_WRITE |
                     ^~~~~~~~~~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:30:22: error: 'BLECharacteristic' has not been declared
                      BLECharacteristic::PROPERTY_NOTIFY
                      ^~~~~~~~~~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:33:38: error: expected type-specifier before 'BLE2902'
   pCharacteristic->addDescriptor(new BLE2902());
                                      ^~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino: In function 'void loop()':
/home/christian/Arduino/BLE_test/BLE_test.ino:50:3: error: 'pCharacteristic' was not declared in this scope
   pCharacteristic->setValue("temperature : 20");
   ^~~~~~~~~~~~~~~
/home/christian/Arduino/BLE_test/BLE_test.ino:50:3: note: suggested alternative: 'Character_h'
   pCharacteristic->setValue("temperature : 20");
   ^~~~~~~~~~~~~~~
   Character_h

Utilisation de la bibliothèque ESP32 BLE Arduino version 2.0.0 dans le dossier: /home/christian/.arduino15/packages/esp32/hardware/esp32/2.0.14/libraries/BLE 
exit status 1

Compilation error: 'BLECharacteristic' does not name a type; did you mean 'Character_h'?

Je ne comprends pas du tout les erreurs de compilation, je suppose (peut-être à tort) que c'est la première qui est la source du reste mais c'est totalement mystérieux pour moi...

Est-ce que qq'un pourrait m'aider ?

Tu es sûr que la classe BLECharacteristic est déclarée dans les fichier d'entête ?

Bonjour @ProfesseurMephisto

Quelle variante d'ESP32 utilises-tu ?

Ton programme se compile sans problème pour un ESP32, un ESP32-C3 ou un ESP32-S3 mais une tentative de compilation pour un ESP32-S2 (dépourvue de Bluetooth et de BLE) donne les messages d'erreur indiqués

Avec un ESP32-S2 qui ne fait pas le BLE ton message d'erreur est normal,
Par contre le programme se compile sans errur pour un ESP32, un ESP32-C3 ou un ESP32-S3

Outch... andouille que je suis. :fearful:

Je retente ce soir avec un C3

Avec la carte citée ici : Que vaut cette toute petite carte à ESP32 ? (basée sur ESP32-C3) ça fonctionne impeccablement !

Il n'y a plus qu'à faire le reste...

Bonjour @ProfesseurMephisto

Intéressante cette application Fizziq (Android ou iOS) !
Merci pour l'info

Pour l'instant le BLE sur ESP32-C3 avec IDE Arduino n'est pas du tout optimisé du point de vue de la consommation (70mA) contre 40mA pour le même sketch (Serveur sur Peripheral) avec ESP32.

Dans les deux cas la consommation pose problème pour un montage alimenté par accu, ce qui réduit les usages possibles du BLE avec un ESP32, c'est ballot.....

J'ai en commande une carte XIAO BLE nRF52840 avec l'espoir que sous IDE Arduino il sera possible d'atteindre (pour un Serveur sur Peripheral) une consommation en courant compatible avec une alimentation par pile Lithium CR123

C'est juste une tuerie pour les manips de collège et de lycée... (et même après - ou avant avec la version junior)
Avis aux collégien(ne)s et lycéen(ne)s qui traînent par là (coucou @pandaroux007 si tu veux faire des bidouilles pour ton prof de physique préféré :wink: )

un petit tour rapide de l'application ne m'a pas montré de possibilité de sauvegarde des données (en CSV ou autre) pour une analyse sur ordinateur. Ai-je loupé quelquechose ?

C'est dans les options de partage des "cahiers" : en haut à droite de l'écran, l'icône courante avec 3 points reliés...

(on commence à être HS, si un gentil modo souhaite téléporter au bar, pas de souci)

merci pour l'info

je ne déplace pas le fil dans le bar :

Tous les messages à ce jour 'collant' encore avec le avec le titre du fil ', ça reste dans le thème
ESP32 + BLE + Fizziq

Par curiosité,tu espères une autonomie de quelle ordre de grandeur ?

Bonjour @ProfesseurMephisto !
Désolé, je ne connais pas du tout cette application mais elle a l'air super !

J'aimerai pouvoir l'essayer, mais...


Depuis quelques années la techno au collège, est passée d'intéressante à vraiment nulle... Autant la physique chime on fait encore des bidouillages avec l'électricité (allumer deux leds : alors les enfants, c'est en série ou en dérivation ? :rofl:), autant en techno, le sujet "l'automatisme" ça se résume à dire "la partie commande, qui est constituée d'ordinateur, de mémoire et de programmes, envoie des ordres à la partie opérative qui est composée de moteurs" > pas forcément juste et totalement barbant... Le truc le plus intéressant au collège que j'ai jamais fait, c'est... scratch. :rage: Donc cette application... Y'a même pas de tablette au collège, juste des ordinateurs de 2010 :cold_face:

Dites moi tout, quelles sont ces bidouilles :wink: ?

Cordialement
Pandaroux007

Tu l'installes sur ton téléphone à toi :wink:

Le pire c'est que tu n'as probablement même pas connue l'époque de la techno vraiment intéressante (ah si je crois que tu avais dit que qq'un de ta famille était un ou une ancienne prof de techno) mais c'est vrai que les dernier programmes ont totalement plombé cette discipline qui pourrait être si intéressante.

Avantage de la physique, c'est qu'on peut faire de la belle physique (enfin je ne suis sûrement pas objectif) avec très peu de matériel...

C'est sûr qu'à force de traîner ici, les montages « de base » doivent te paraître un peu léger... Et pourtant, même si je bosse dans un collège avec un public plutôt favorisé, il y a une énorme disparité entre les élèves. Par exemple ce matin, j'ai fait 3 séances de TP d’électricité avec des 4e. Les plus rapides m'ont terminé la séance en 1/4 h et j'ai dû compléter avec des montages plus complexes pour les occuper pendant que d'autres peinaient à finir le montage et m'ont flingué une alim en la mettant en court-circuit :cry:

Chez moi non plus pas de tablettes (mais des PC à jour quand même faut pas pousser) mais j'ai pris le parti de faire bosser mes élèves avec leur propre téléphone et c'est le sujet de mon message initial (ouf, on revient en thème)

Exemple : je vais essayer de de faire des mesures de températures avec l'ESP32 et une sonde genre DS18B20. La partie ESP, code et tout ça c'est pour moi. Mais l’utilisation par les élèves c'est (enfin ce sera si ça marche bien) les expériences de changement d'état : ils mettent la sonde dans un tube a essai avec de l'eau, on refroidi l'eau gèle et les mesures sont faites par l'ESP32, récupérées par l'appli FizziQ et la courbe est tracée par l'application aussi.
Ça n’empêche pas de tracer des courbes « papier millimétré - crayon » mais cela permet de multiplier les expériences (eau pure, eau salée, cyclohexane, etc) à un coût très raisonnable :dollar:

Faudrait que j'arrive à en avoir une dizaine pour pouvoir faire des expériences en classe entière.

Vu le nombre de capteurs disponibles, on peut faire un nombre pas raisonnable d'expériences

Mais bon, je raconte ma vie, je code, etc alors que j'ai des copies à corriger :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.