ESP32 C3 quelle bibliothèque Bluetooth?

Bonjour à tous,
Une grosse page de rouge répond furieusement à mes tentatives de téléversement d'un code Bluetooth vers mon C3 mini.

Bluetooth Serial or SPP (Serial Port Profile) is part of BT 2.1 and uses RFCOMM to connect two peer devices.
It will only work for the ESP32.

ESP32-C3 has only BLE support. There is no SPP in BLE.
Therefore, BluetoothSerial will never work for the C3.

Si BluetoothSerial ne fonctionne pas sur C3, quelle bibliothèque BT utilisez-vous avec cette petite bestiole finalement vraiment très caractérielle je vous prie?

cet exemple est supposé compatible avec le C3 et S3

Bonjour

ESP32-C3 has only BLE support. There is no SPP in BLE.

la variante -C3 des ESP32 gère le BLE y compris la version 5 , pas le Bluetooth classique (c'est clairement annoncé dans la Data Sheet)

En BLE pas de profil SPP officiel, c'est un choix de l'organisme Bluetooth qui décidé de créer une multitude de profils très spécialisés, mais pas de profil à tout faire comme le SPP :grimacing:

Les principaux fabricants de puces BLE (Nordic Semi conductor , Texas Instruments, Microchip...) ont , chacun de leur côté défini leur solution maison de remplacement pour une émulation de port série en BLE .

On arrive donc , de fait, à deux principaux profils série BLE officieux :
-le profil BLE série NUS (Nordic SEmiconductor)
-le profil BLE série Texas ( celui des modules HM-10 par exemple)

Ma carte C3 MIni (version 1.0.0) , en utilisant de préférence la librairie BLE améliorée NImBLE , communique aujourd'hui 'out of the box' avec les applications Android suivantes : (de mémoire c'est aussi OK avec la librairie BLE fournie encore actuellement avec l'extension ESP32)

-Serial Bluetooth Terminal de Kai Morich
-BlueFruit Connect d'Adafruit (modules UART... et Plotter :+1:)
-Light Blue
-nRF Connect, nRF Toolbox

=5 Applications qui savent gérer le profil série BLE à la mode 'Nordic'

J'utilise comme base l'exemple BLE_Uart.ino (serveur au profil Série BLE style Nordic)

Le jour où j'arriverai à configurer correctement l'ESP32 en émulation de HM-10 (Peripheral et serveur au profil BLE Série à la mode Texas Instruments), l'ESP32 en version -C3 ou pas, communiquera avec l'application Bluetooth Electronics (qui ne sait pas gérér le profil série style 'Nordic Semiconductor' :grimacing: ) mes essais à ce jour ne sont pas OK, mais c'est faisable.

Avant d'utiliser une variante d'ESP32 on se renseigne sur les fonctionnalités assurées !
Si on veut utiliser le profil SPP officiel on choisit un ESP32 gérant le Bluetooth classique (versions < 4)

Je ne pensais pas que le BLE exclurait le BT classique. Maintenant je sais :upside_down_face:
Faut que je trouve des tutos pour refaire ce bout de code... QUelle galère

ce n'est pas parce que vous supportez le BT classique que vous supportez le profil SPP... il y a de nombreux profils possibles, SPP n'en est qu'un

le BLE n'est pas comme on purrait le penser le Bluetooth habituel avec un consommation réduite, c'est un autre Bluetooth sans aucune rétro compatibilité.

Faut que je trouve des tutos pour refaire ce bout de code.

Je ne connais pas de tutoriel expliquant l'émulation série en BLE avec ESP32
il faut s'auto-former avec les exemples fournis avec les librairies BLE pour ESP32

autre solution : câbler un HC-06 (BT Cassique) ou un HM-10 (BLE) sur l'ESP32 pour ne pas avoir se prendre la tête :wink:

coup dur. C'est uniquement pour récupérer le mdp du wifi, après il se débrouille tout seul.

Bonjour @kammo

C'est uniquement pour récupérer le mdp du wifi, après il se débrouille tout seul.

si tu étais plus précis pour expliquer le besoin et les contraintes on pourrait envisager une solution

S'agit-il d'un ESP32-C3 ayant besoin de recevoir d'un smartphone, en BLE, un mot de passe WIFi en vue d'une connection ultérieure au réseau local ?

Oui pardon.
Je suis toujours sur ce thermostat dont on règle les plages horaires par une page HTML hébergée par le µc.
Je n'utilise le BT QUE pour récupérer le mdp du wifi. Le programme ensuite cherche lui-même le wifi qui correspond à ce mdp et se connecte tout seul.

je fais ça avec un simple terminal BT

l'ESP32-C3 ne gèrant que le BLE :

-installes la librairie NimBLE Arduino (elle figure dans le gestionaire de librairies de l'IDE Arduino, PlatformIO la connait...)

-lances l'exemple BLE_uart.ino de cette librairie

-ouvres l'application Android Serial Bluetooth terminal

-connectes toi au 'device' nommé Uart Service (appairage non indispensable en BLE)

-saisit le mot de passe envoyer

Résultat : tu dois le voir apparaître côté ESP32-C3 dans le terminal de l'IDE Arduino ou celui de PlatformIO

Tout ceci pour montrer la faisabilité, ensuites tu arranges ça à ta convenance

pourquoi vous vous ennuyez avec le BT

Faites le en WiFi (captive portal) avec WiFiManager

En effet, il m'envoie des messages (c'est illisible pour le moment) et il lit bien les miens. Nous sommes presque amis maintenant mais je ne comprends pas trop ce qu'il raconte. De l'ASCII, une histoire de bauds? Je cherche

Parce que jusqu'ici je n'y arrivais pas et je trouvais plus simple le Bluetooth étant donné que ma voisine n'est pas experte et que je lui fabrique un clone de mon thermostat.
L'exemple cité ne fonctionne pas mais je vais trouver...

J'ai essayé avec trois autres codes trouvés sur le net, ça ne fonctionne pas sur Wemos Lolin c3 mini

j'ai pas cette carte, je ne peux pas tester... désolé

donc ce code d'exemple

ne fonctionne pas ?

quels sont les symptômes ? qu'avez vous essayé ?

autre question : quelle est la version de la carte LOLIN C3 mini testée ?

version 1.0.0 ou 2.1.0 ? ......Pour le WiFI ce n'est pas anodin

Comme ça ne fonctionnait pas sur lolin c3 mini 1 malgré la ligne de code qui bride l'émission en Wifi, j'ai essayé sur ESP32_devkitc_u4, ça me revoie plein de rouge aussi

#include <WiFi.h>  //https://github.com/esp8266/Arduin
#include <DNSServer.h>
#include <ESP32WebServer.h>
#include <WiFiManager.h>  //https://github.com/tzapu/WiFiManager

void setup() {

  Serial.begin(115200);

  WiFiManager wifiManager;
  wifiManager.autoConnect("AutoConnectAP");
  Serial.println("connected...yeey :)");
}

void loop() {
}

Attention les yeux:

c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'boolean WiFiManager::autoConnect()':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:161:36: error: 'class EspClass' has no member named 'getChipId'; did you mean 'getChipModel'?
String ssid = "ESP" + String(ESP.getChipId());
^~~~~~~~~
getChipModel
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'boolean WiFiManager::configPortalHasTimeout()':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:187:37: error: 'wifi_softap_get_station_num' was not declared in this scope
if(_configPortalTimeout == 0 || wifi_softap_get_station_num() > 0){
^~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'boolean WiFiManager::startConfigPortal()':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:195:36: error: 'class EspClass' has no member named 'getChipId'; did you mean 'getChipModel'?
String ssid = "ESP" + String(ESP.getChipId());
^~~~~~~~~
getChipModel
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'int WiFiManager::connectWifi(String, String)':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:286:7: error: 'ETS_UART_INTR_DISABLE' was not declared in this scope
ETS_UART_INTR_DISABLE();
^~~~~~~~~~~~~~~~~~~~~
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:286:7: note: suggested alternative: 'ESP_INTR_DISABLE'
ETS_UART_INTR_DISABLE();
^~~~~~~~~~~~~~~~~~~~~
ESP_INTR_DISABLE
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:287:7: error: 'wifi_station_disconnect' was not declared in this scope
wifi_station_disconnect();
^~~~~~~~~~~~~~~~~~~~~~~
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:287:7: note: suggested alternative: 'wifi_action_rx_cb_t'
wifi_station_disconnect();
^~~~~~~~~~~~~~~~~~~~~~~
wifi_action_rx_cb_t
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:288:7: error: 'ETS_UART_INTR_ENABLE' was not declared in this scope
ETS_UART_INTR_ENABLE();
^~~~~~~~~~~~~~~~~~~~
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:288:7: note: suggested alternative: 'ETS_UART1_INTR_SOURCE'
ETS_UART_INTR_ENABLE();
^~~~~~~~~~~~~~~~~~~~
ETS_UART1_INTR_SOURCE
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'void WiFiManager::startWPS()':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:333:8: error: 'class WiFiClass' has no member named 'beginWPSConfig'; did you mean 'beginSmartConfig'?
WiFi.beginWPSConfig();
^~~~~~~~~~~~~~
beginSmartConfig
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'void WiFiManager::handleWifi(boolean)':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:496:50: error: 'ENC_TYPE_NONE' was not declared in this scope
if (WiFi.encryptionType(indices[i]) != ENC_TYPE_NONE) {
^~~~~~~~~~~~~
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:496:50: note: suggested alternative: 'DNS_TYPE_DNAME'
if (WiFi.encryptionType(indices[i]) != ENC_TYPE_NONE) {
^~~~~~~~~~~~~
DNS_TYPE_DNAME
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'void WiFiManager::handleInfo()':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:655:15: error: 'class EspClass' has no member named 'getChipId'; did you mean 'getChipModel'?
page += ESP.getChipId();
^~~~~~~~~
getChipModel
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:658:15: error: 'class EspClass' has no member named 'getFlashChipId'; did you mean 'getFlashChipMode'?
page += ESP.getFlashChipId();
^~~~~~~~~~~~~~
getFlashChipMode
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:664:15: error: 'class EspClass' has no member named 'getFlashChipRealSize'; did you mean 'getFlashChipSize'?
page += ESP.getFlashChipRealSize();
^~~~~~~~~~~~~~~~~~~~
getFlashChipSize
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp: In member function 'void WiFiManager::handleReset()':
c:\Users\simon\Documents\Arduino\libraries\ESP32WiFiManager-master\WiFiManager.cpp:702:7: error: 'class EspClass' has no member named 'reset'; did you mean 'restart'?
ESP.reset();
^~~~~
restart

exit status 1

Compilation error: exit status 1

Bonjour @kammo

Est-tu certain d'avoir installé la librairie correspondant à ton exemple , celle de tzapu ?

#include <WiFiManager.h>  //https://github.com/tzapu/WiFiManager

image

je viens -
-d'installer la bonne librairie via l'IDE, pas à la main
-choisi une carte ESP32 basique
-chargé et compler l'exemple basic.ino
-téléverser le code en sélectionnant l'option qui effacte totalement la mémoire flash pour enlever toute trace éventuelle d'une connection résuuie antérieure avec ma box et donc passer en mode AP

résultat :+1:

le point d'accès provisoire AutoconnectAP apparait, connection avec le mot de passe figurant dans le code , puis la page Web arrive avec ses 4 boutons dont Configure WiFi qui donne accès à la sélection d'une box avec saisie de son mot de passe

C'est également ce que je soupçonne. La multiplication des bibliothèque est un vrai problème. Leur gestion aussi. Je trouve que le gestionnaire manque de clarté, on finit par tout virer à la main et recommencer avec des doublons...
Je pars sur cette piste, j'essaie d'y mettre de l'ordre. Merci, ça confirme mon idée...