IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Librairie Bluetooth ESP32


Sujet :

Arduino

  1. #1
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 283
    Par défaut Librairie Bluetooth ESP32
    Bonjour,

    Je porte progressivement mes programmes Nano vers ESP32 car Bluetooth et WiFi sont intégrés, ce qui simplifie ma partie Hardware (plus besoin de rajouter des HC06 aux Arduino).

    Pour mon 1er essai, il semble que la librairie "BluetoothSerial" que j'ai déposée dans le répertoire "lib" du projet PlatformIO, me pose quelques soucis: l'instruction "BluetoothSerial SerialBT;" ne semble pas reconnue par le compilateur.
    Ce qui évidemment engendre des erreurs en cascade si ma compréhension est bonne.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    #include <Arduino.h>
    #include <Wire.h> 	// librairy requise pour l'écran LCD, incluse dans l'IDE Arduino et qui n'apparaitra donc pas 
    						// dans le sous-dossier 'Librairies' du répertoire Arduino
                // sur platformIO on a mis manuellement la v3.3.0 dans le répertoire "lib" du projet
    #include <DFRobot_LCD.h> // librairy gérant les afficheurs DFRobot 0555 et équivalents
    	DFRobot_LCD lcd(16,2);  //16 characters and 2 lines of show
     
      // Ce pgm a été fait avec PlatformIO, et se trouve donc ici: C:\Users\ordic\Documents\PlatformIO\Projects\BT_ESP32_v1.001\src\main.cpp
    #include <BluetoothSerial.h>  // librairy Bluetooth
    BluetoothSerial SerialBT; // selon tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
    							// et selon tutorial: https://dronebotworkshop.com/esp32-bluetooth
    // On a passé le Moniteur série à 115.200 en rajoutant monitor_speed = 115200 dans Platformio.ini
     
    String messageRecu; // contiendra la commande BLUETOOTH reçue complète terminée par 'Z' majuscule tel
                        // que définit dans mon appli APPINVENTOR.
                        // messageRecu accumulera tous les caractères reçues par Bluetooth
                        // jusqu'à ce que le caractère "Z" soit reçu
     
     
    // put function declarations here:
    // int myFunction(int, int);
    void stop();
    void record();
    void play();
    void fastforward();
    void rew();
    void pause();
    // FIN DE LA DECLARATION DES NOMS DE FONCTIONS
     
    void setup() {
      	// put your setup code here, to run once:
      	// int result = myFunction(2, 3);
      	Serial.begin(115200);	//démarre le Moniteur série à 115000 bauds.
      	SerialBT.begin("Denon_K7");	// selon tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
                                	// "Denon_K7" est le nom du device qui apparaitra sur Smartphone quand on se connectera
     
    }
     
    void loop() {
      // put your main code here, to run repeatedly:
      while(SerialBT.available()) // ici on met SerialBT pour coler au tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
    	{
    		  delay(3);
    		  char c = SerialBT.read();  // ici aussi on met Serial3.read (non Serial.read) car on a connecté le HC08 à Serial3
    		  messageRecu += c;
    		  if(c == 'Z') // si le caractère reçu est 'Z' cela signifie que la commande est complète (j'utilise 'Z' car je n'arrive pas à détecter '\n')
    		  {
    			  // Serial.println(messageRecu); // en commentaire imprime donc la commande reçue du Smartphone qui est entière, par ex.: STOPZ
    			  break;  // et on sort de la boucle While puisque la commande est complète et est stockée dans messageRecu
                    //et donc prête à être interprétée pour declencher des actions
    		  }
    	}
     
      if (messageRecu == "STOPZ")
        {
    		Serial.println(F("Bluetooth: Appui sur Bouton STOP du Smartphone:"));
    		Serial.println(messageRecu); // devrait afficher la chaine complète reçue par Bluetooth avec le 'Z' à la fin, càd "STOPZ"
    		// on recopie mot pour mot le code correspondant au STOP reçu de la télécommande 
    		stop();
    		Serial.println(F("Bluetooth boucle IF stopZ: la fonction Stop a été appelée"));
    		//ici ne faut-il pas réinitialiser la variable "messageRecu" puisqu'on est dans une boucle Loop ???
        } // Fin du If STOPZ pour Smartphone
     
      if (messageRecu == "RECORDZ")
        {
            Serial.println(F("Bluetooth: Appui sur Bouton RECORD du Smartphone:"));
    		Serial.println(messageRecu); // devrait afficher la chaine complète reçue par Bluetooth avec le 'Z' à la fin, càd "RECZ"
    		record(); // appel de la fonction factorisée "record" définie plus haut
    		Serial.println(F("Bluetooth boucle IF recordZ: la fonction Record a été appelée"));
    		//ici ne faut-il pas réinitialiser  la variable "messageRecu" puisqu'on est dans une boucle Loop ???
        } // Fin du IF pour la fonction RECORDZ par Smartphone
     
      if (messageRecu == "PLAYZ")
        {
            Serial.println(F("Bluetooth: Appui sur Bouton PLAY du Smartphone:"));
    		Serial.println(messageRecu); // devrait afficher la chaine complète reçue par Bluetooth avec le 'Z' à la fin, càd "PLAYZ"
    		play();
    		Serial.println(F("Bluetooth boucle IF playZ: la fonction Play a été appelée"));
    		//ici ne faut-il pas réinitialiser  la variable "messageRecu" puisqu'on est dans une boucle Loop ???
        } // Fin du IF pour la fonction PLAYZ par Smartphone
     
      if (messageRecu == "FFZ")
        {
            Serial.println(F("Appui sur Bouton FF du Smartphone:"));
    		Serial.println(messageRecu); // devrait afficher la chaine complète reçue par Bluetooth avec le 'Z' à la fin, càd "FFZ"
    		fastforward();
    		Serial.println(F("Bluetooth boucle IF ffZ: la fonction FF a été appelée"));
    		//ici ne faut-il pas réinitialiser  la variable "messageRecu" puisqu'on est dans une boucle Loop ???
        } // Fin du IF pour la fonction FFZ par Smartphone
     
      if (messageRecu == "REWINDZ")
        {
            Serial.println(F("Appui sur Bouton REWIND du Smartphone:"));
    		Serial.println(messageRecu); // devrait afficher la chaine complète reçue par Bluetooth avec le 'Z' à la fin, càd "REWZ"
    		rew();
    		Serial.println(F("Bluetooth boucle IF rewZ: la fonction REW a été appelée"));
    		//ici ne faut-il pas réinitialiser  la variable "messageRecu" puisqu'on est dans une boucle Loop ???
        } // Fin du IF pour la fonction REWZ par Smartphone
     
      if (messageRecu == "PAUSEZ")
        {
            Serial.println(F("Appui sur Bouton PAUSE du Smartphone:"));
    		Serial.println(messageRecu); // devrait afficher la chaine complète reçue par Bluetooth avec le 'Z' à la fin, càd "PAUSEZ"
    		pause();
    		Serial.println(F("Bluetooth boucle IF pauseZ: la fonction PAUSE a été appelée"));
    		//ici ne faut-il pas réinitialiser  la variable "messageRecu" puisqu'on est dans une boucle Loop ???
        }  
     
      messageRecu=""; // on remet la chaine à vide pour préparer la réception de la commande suivante
     
     
    }
     
    // put function definitions here:
    int myFunction(int x, int y) {
      return x + y;
    }
    et voici ce que me dit le compilateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    The terminal process "C:\Users\ordic\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
     *  Terminal will be reused by tasks, press any key to close it. 
     
     *  Executing task in folder BT_ESP32_v1.00: C:\Users\ordic\.platformio\penv\Scripts\platformio.exe run 
     
    Processing esp-wrover-kit (platform: espressif32; board: esp-wrover-kit; framework: arduino)
    ---------------------------------------------------------------------------------------------------------------------------------------
    Verbose mode can be enabled via `-v, --verbose` option
    CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp-wrover-kit.html
    PLATFORM: Espressif 32 (6.12.0) > Espressif ESP-WROVER-KIT
    HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
    DEBUG: Current (ftdi) On-board (ftdi) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
    PACKAGES:
     - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b
     - tool-esptoolpy @ 2.40900.250804 (4.9.0)
     - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
    LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 36 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- BluetoothSerial @ 1.1.0
    |-- DFRobot_LCD-master
    |-- Wire @ 2.0.0
    Building in release mode
    Compiling .pio\build\esp-wrover-kit\src\main.cpp.o
    src/main.cpp:10:17: error: no matching function for call to 'BluetoothSerial::BluetoothSerial()'
     BluetoothSerial SerialBT; // selon tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
                     ^~~~~~~~
    In file included from src/main.cpp:9:
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:42:5: note: candidate: 'BluetoothSerial::BluetoothSerial(HardwareSerial&, bool)'       
         BluetoothSerial(HardwareSerial& serial, bool verbose = true);
         ^~~~~~~~~~~~~~~
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:42:5: note:   candidate expects 2 arguments, 0 provided
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:17:7: note: candidate: 'constexpr BluetoothSerial::BluetoothSerial(const BluetoothSerial&)'
     class BluetoothSerial {
           ^~~~~~~~~~~~~~~
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:17:7: note:   candidate expects 1 argument, 0 provided
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:17:7: note: candidate: 'constexpr BluetoothSerial::BluetoothSerial(BluetoothSerial&&)' 
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:17:7: note:   candidate expects 1 argument, 0 provided
    src/main.cpp:26:6: error: ambiguating new declaration of 'void pause()'
     void pause();
          ^~~~~
    In file included from C:/Users/ordic/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include/sys/unistd.h:23,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\sys-include\unistd.h:4,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\sys-include\pthread.h:25,
                     from C:/Users/ordic/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include/pthread.h:21,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\xtensa-esp32-elf\no-rtti\bits\gthr-default.h:48,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\xtensa-esp32-elf\no-rtti\bits\gthr.h:151,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\ext\atomicity.h:35,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\bits\basic_string.h:39,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\string:52,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\stdexcept:39,      
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\array:39,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\tuple:39,
                     from c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\include\c++\8.4.0\functional:54,     
                     from C:/Users/ordic/.platformio/packages/framework-arduinoespressif32/cores/esp32/HardwareSerial.h:49,
                     from C:/Users/ordic/.platformio/packages/framework-arduinoespressif32/cores/esp32/Arduino.h:196,
                     from src/main.cpp:1:
    c:\users\ordic\.platformio\packages\toolchain-xtensa-esp32\xtensa-esp32-elf\sys-include\sys\unistd.h:177:9: note: old declaration 'int pause()'
     int     pause (void);
             ^~~~~
    src/main.cpp: In function 'void setup()':
    src/main.cpp:33:19: error: invalid conversion from 'const char*' to 'int' [-fpermissive]
        SerialBT.begin("Denon_K7"); // selon tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
                       ^~~~~~~~~~
    In file included from src/main.cpp:9:
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:51:20: note:   initializing argument 1 of 'void BluetoothSerial::begin(int)'
         void begin(int baudRate = 9600);
                    ~~~~^~~~~~~~~~~~~~~
    src/main.cpp: In function 'void loop()':
    src/main.cpp:40:18: error: 'class BluetoothSerial' has no member named 'available'
       while(SerialBT.available()) // ici on met SerialBT pour coler au tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
                      ^~~~~~~~~
    src/main.cpp:43:23: error: 'class BluetoothSerial' has no member named 'read'
         char c = SerialBT.read();  // ici aussi on met Serial3.read (non Serial.read) car on a connecté le HC08 à Serial3
                           ^~~~
    Compiling .pio\build\esp-wrover-kit\FrameworkArduino\esp32-hal-bt.c.o
    *** [.pio\build\esp-wrover-kit\src\main.cpp.o] Error 1
    ===================================================== [FAILED] Took 1.31 seconds =====================================================
     
     *  The terminal process "C:\Users\ordic\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
     *  Terminal will be reused by tasks, press any key to close it.
    Merci pour votre éclairage !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 290
    Billets dans le blog
    48
    Par défaut
    Salut,

    Il semble que tu utilises une librairie spécifique qui est différente de la librairie officielle.

    Citation Envoyé par grizzli06 Voir le message
    et voici ce que me dit le compilateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    src/main.cpp:10:17: error: no matching function for call to 'BluetoothSerial::BluetoothSerial()'
     BluetoothSerial SerialBT; // selon tutorial https://www.youtube.com/watch?v=EWxM8Ixnrqo
                     ^~~~~~~~
    In file included from src/main.cpp:9:
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:42:5: note: candidate: 'BluetoothSerial::BluetoothSerial(HardwareSerial&, bool)'       
         BluetoothSerial(HardwareSerial& serial, bool verbose = true);
         ^~~~~~~~~~~~~~~
    lib/BluetoothSerial-1.1.0/src/BluetoothSerial.h:42:5: note:   candidate expects 2 arguments, 0 provided
    Par exemple, avec ta librairie le constructeur de la classe BluetoothSerial attend deux paramètres, voir l'exemple Hello_World.ino :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <BluetoothSerial.h>
     
    #define bluetoothModuleSerial Serial1
     
    // Create a BluetoothSerial object
    // Serial port that the bluetooth module is connected
    // Verbose mode: true
    BluetoothSerial blueSerial(bluetoothModuleSerial, true);

  3. #3
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 283
    Par défaut
    Il semble que tu utilises une librairie spécifique qui est différente de la librairie officielle.
    C'est bien ce que je soupçonnais !

    Et pour ce que je fais, ce qu'il y a de plus standard me conviendra parfaitement...

    Mais au risque de paraître "nian-nian", je n'ai pas trouvé de lien pour télécharger la librairie officielle: s'agit-il de celle-ci ???

    Je l'ai télécahrgée fichier par fichier...

    Mille mercis

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 683
    Par défaut
    Hello,

    La librairie BluetoothSerial.h est incluse nativement dans le framework arduinoespressif32. Elle ne s'installe pas ; elle s'active simplement par l'include.

    Dans votre fichier main.cpp, remplacez toutes les occurrences de la fonction pause() par un nom non réservé.
    • Remplacer : void pause() et pause();
    • Par : void pausePlayback() ou void k7_pause()


    Ne copiez jamais manuellement des librairies "standard" (Wifi, Bluetooth, SPI, Wire) dans le dossier lib d'un projet PlatformIO ESP32.


    Supprimer la lib que vous aviez ajouté précédemment...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 283
    Par défaut
    La librairie BluetoothSerial.h est incluse nativement dans le framework arduinoespressif32. Elle ne s'installe pas ; elle s'active simplement par l'include.
    Voilà qui est parfaitement clair !

    Dans votre fichier main.cpp, remplacez toutes les occurrences de la fonction pause() par un nom non réservé.
    Ah je comprends : je n'avais pas besoin de cette précaution sur NANO, et comme je porte mes programmes de NANO vers ESP32....

    Je vais donc faire la modif, puis je reviens vers vous demain, car je cherche à avoir un code le plus universel possible entre NANO et ESP32, donc il y a des petits ajustements à faire dans les noms.

    Mille mercis

Discussions similaires

  1. Librairie Bluetooth C# / C++
    Par geforce dans le forum C#
    Réponses: 0
    Dernier message: 07/05/2010, 17h21
  2. Librairie Bluetooth C++
    Par demss dans le forum Visual C++
    Réponses: 0
    Dernier message: 06/05/2010, 09h02
  3. Une librairie bluetooth ?
    Par kmedghaith dans le forum C++
    Réponses: 2
    Dernier message: 25/01/2010, 11h44
  4. Librairie Bluetooth introuvable
    Par Invité dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 09/05/2008, 12h32
  5. Librairie Bluetooth pour Windows
    Par Janitrix dans le forum Windows
    Réponses: 2
    Dernier message: 03/07/2007, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo