Go Down

Topic: Application communication ESP32 (Read 1 time) previous topic - next topic

Calvin-duino

Bonjour,

Je suis en train d'apprendre le Java et, j'ai du mal avec la partie Bluetooth.

Je cherche d'abord à faire fonctionner le bluetooth de l'ESP32 et de créer un échange avec mon télephone.
Je voudrais savoir si vous connaissiez un tuto ?

J'ai essayé en vain les différents programmes BLE dans les Examples de l'IDE Arduino et j'ai téléchargé une appli "NRF"

Si une âme charitable passe, thx

al1fch

#1
Dec 13, 2018, 09:30 am Last Edit: Dec 13, 2018, 09:48 am by al1fch
Bonjour

Pour un premier test de communication BLE je propose :
-l'exemple BLE-Uart côté ESP32
-l'application Serial Bluetooth Terminal sur Android (elle gère l'émulation série en BT Classique et en BLE)

Avec les outils de Nordic Semiconducteur ?
je ne suis pas certain que ça fonctionne avec nRF UART.
Avec nRF Connect ça n'est pas très convivial car il faut travailler au niveau des caractéristiques dans le bon service.

Bien entendu il y App Inventor mais le recours à ce genre d'outil facilitateur ne correspond peut être pas  à l'objectif recherché. (BLE en apprentissage Java ?)

Calvin-duino

Merci pour les informations. Et pour l'application je ne cherche pas de faciliter, je veux le faire moi même en java (via Android Studio).

Pour le programme, je l'ai televerse sans problème mais sur l'appli, voici l'erreur :

19:01:34.647 Connecting to UART Service ...
19:01:35.186 Connection failed: no serial profile found ‑> use long click on device to define a custom profile

Mon téléphone n'arrive pas a s'y connecter.
Est ce normal ?

hazerty565

Enfaite, de ce que je comprends tu as plus un soucis coté java que arduino??

Si c'est plus un probleme d'application java ( android studio) ca va etre compliqué ici, car peu de monde connais ce language...
Ici ils utilisent en general app inventor

deja regarde sur google "android studio bluetooth arduino" tu trouves plein de cas d'exemple...

ce que tu peux faire dans un premier temps c'est de le faire sur app inventor  ou une autre app android ( comme Serial Bluetooth Terminal) ou d'autre sur sur le playstore pour simuler les données que tu envois/reçois pour valider le coté arduino...

je te conseil d'aller sur des forum special androit studio..


je cherches a faire la meme chose sur android/Ios.. mais j'utilise un language cross platform


Calvin-duino

Aurais-tu un code pour l'esp qui marcherait avec BLE uart ?

al1fch

#5
Dec 14, 2018, 10:16 am Last Edit: Dec 14, 2018, 08:51 pm by al1fch
Bonjour
je viens de tester avec succès la communication entre :
-sur l'ESP32 : l'exemple BLE_uart
-sur le smartphone : soit nRF Connect , soit Serial Bluetooth Terminal (de Kai Moritch)

Dans le second  cas (Serial Bluetooth Terminal) après avoir scanné  en BLE, et après connection à "Uart Service" (nom sous lequel l'ESP32 s'annonce) je vois défiler les codes ASCII croissants emis par l'ESP32 et je peux également envoyer  sur la ligne en bas de l'écran, des octets qui aparaissent ensuite dans le terminal Arduino


Dans le premier cas (nRF Connect) après avoir scanné  et après connection à "Uart Service" je déroule le  Service Nordic UART et peux ensuite voire arriver (Value) les données succesives  notifiées par la caractéristique TX de l'ESP32 , je peux également envoyer un octet vers  l'ESP32 en écrivant sa valeur dans la caractéristique RX de l'ESP32 (cliquer sur la flèche sortante)




al1fch

#6
Dec 14, 2018, 10:56 am Last Edit: Dec 14, 2018, 11:23 am by al1fch
L'application Bluefruit LE Connect d'Adafruit  permet également d'échanger en mode UART avec un ESP32 exécutant l'exemple BLE_uart non modifié.

Il en est de même pour toute application smartphone reconnaissant la définition de l'émulation série BLE adoptée par Nordic Semiconductor. ( /!\ contrairement au Bluetooth Classic et son profil SPP standard , en BLE ce profil n'est pas défini , chacun le crée comme il veut avec son bouquet de Services et caractéristiques 'maison'. Il faudrait par exemple modifier l'exemple BLE_uart pour dialoguer avec un HM-10 , qui à 'sa' définition de l'émulation série.)

Calvin-duino

Bonsoir,

J'ai continué mes recherches hier et aujourd'hui.
Pour les trois applications Android, deux arrivent à se connecter à l'esp. Et la troisième Serial Bluetooth Terminal a le même problème. Sinon, je reçois des valeurs aléatoires ce qui est normal (enfin je suppose).

J'ai essayé un autre programme de l'IDE mais qui ne marche pas : SerialToSerialBT.

C'est dommage car, c'est ce que je cherche, j'envoie une commande Bluetooth et, l'esp me répond (en Bluetooth également).

Auriez-vous se code ?

al1fch

#8
Dec 16, 2018, 11:13 am Last Edit: Dec 16, 2018, 11:38 am by al1fch
Bonjour

Quote
Et la troisième Serial Bluetooth Terminal a le même problème. Sinon, je reçois des valeurs aléatoires ce qui est normal (enfin je suppose).

J'ai essayé un autre programme de l'IDE mais qui ne marche pas : SerialToSerialBT.
Il vaudrait mieux préciser quel Bluetooth tu veux utliser le Bluetooth 'classique' ou le Bluetooth  'LE'.  Les deux sont incompatibles et présentent d'importantes différences de protocole.

1) En Bluetooth 'LE' j'ai montré plus haut  avec des copies d'écran comment l'application Android Serial Bluetooth Terminal communique avec le sketch BLE_uart sur ESP32
Les données reçues ne sont pas aléatoires elle proviennent de ce code dans loop() :
Code: [Select]

if (deviceConnected) {
        pTxCharacteristic->setValue(&txValue, 1);
        pTxCharacteristic->notify();
        txValue++;
delay(10); // bluetooth stack will go into congestion, if too many packets are sent
}

......d'ou les caractères successifs correpondant à un code ASCII croissant.
Pour  avoir un autre comportement il faut modifier le code dans loop()

2) en BT 'Classique' l'application Android Serial Bluetooth Terminal communique sans problème avec le sketch SerialToSerialBT une fois effectué l'appairage (indispensable en BT Classique)
Aprèsl' appairage se connecter à l'ESP32 (device ESP32test)

tester ensuite l'envoi de caractère et le retour en echo distant (c'est ce que fais le code de SerialToSerialBT)


Calvin-duino

Re, alors pour commencer, j'ai réussi à me connecter à l'ESP avec serial terminal.

Après je voulais essayer le WIFI, tout marche niquel, je crée ma page et interagit avec des requêtes ce que je cherche à faire avec Bluetooth.

Le code SerialToSerialBT fait se qunil faudrait mais, même problème je n'arrive pas à m'y connecter.



Par contre, pourquoi celui-ci complètement différent des BLE_uart et autre ? Il est beaucoup plus simple ce qui n'est pas plus mal.

J'ai toujours des problèmes c'est bien dommage ^^

al1fch

#10
Dec 16, 2018, 05:33 pm Last Edit: Dec 16, 2018, 05:49 pm by al1fch
le message d'erreur '"gatt status....." pourrait indiquer que tu tentes de te connecter en Bluetooth Low Energy (BLE) à un ESP32 qui fonctionne en Bluetooth Classique (=sketch SerialToSerialBT)
L'appairage a-t-il eté effectué auparavant ? Si oui l'application Android devrait lister l'ESP32 parmi les devices 'BT Classiques' disponibles.

Il y a deux Bluetooth ditincts, l'ESP32 sait les utliser  tous les deux.... à condition de ne pas confondre ou mélanger les 2 Bluetooth différents.
Les librairies pour ESP32/IDE Arduino (et leurs exemples) sont distinctes

BT Classique : SerialToSerialBT
BT LE : divers exemples dont BLE_uart

Simplicite ou complexité du code ?
En Bluetooth Classique, profil SPP, la complexité du code est cachée  dans la librairie
En Bluetooth LE la complexité reste visible (avec la librairie actuelle) et il faut impérativement  entrer dans le détail des "services et des caractéristiques"

Calvin-duino

Vous aviez raison, merci beaucoup !

Et pour finir, comment comparer :

Code: [Select]
if (SerialBT.available()) {
    test = SerialBT.read();
    Serial.write(test);
    if (test = "abc") {
      Serial.write("Ok");
    }
  }

al1fch

un test d'égalité se fait avec == , pas =

Calvin-duino

J'ai également essayé ^^ mais cela ne marchait pas. En effet, L'IDE me renvoyer une erreur de comparaison.

Donc j'ai essayé test comme étant un string ou un char mais la comparaison ne marche pas. Alors que ceci marche très bien :

if (SerialBT.available()) {
    char test = SerialBT.read();
    Serial.write(test);
  }

Calvin-duino


Le problème devient Hors Sujet, je vais poser ma question autre part.

Go Up