[RESOLU]Dfrobot Romeo BLE ne répond pas

Bonjour,
J'ai acheté une carte arduino DFRobot Romeo BLE et j'ai suivi le tuto associé pour tester la carte avec mon smartphone. (c'est par ici: [TUTO](http://"http://" Allumage d'une LED avec un smartphone android en utilisant un module BLE - Le Blog Gotronic""))
J'ai suivi la procédure et j'ai obtenu une connexion à la carte. L'état de connexion BLE passe bien au vert lors de l'appui sur le bouton "connexion" et la carte répond en allumant la led verte nommée LINK. Quand j'appuie ensuite sur le bouton on/off pour allumer la LED rien ne se passe.
Je ne comprends pas ce qui pose problème.
Le SAV de Gotronic a tenté de m'aider mais je n'ai plus de réponses.....

Voici le code Arduino, la capture d'écran de lightBlue pour récupérer les info BLE de la carte et les blocs de l'app.
Si quelqu'un pouvait éclairer ma lanterne ce serait vraiment super.
Merci d'avance,

Romeo_BLE.ino (972 Bytes)

Bonjour

  1. le lien vers le tutoriel ne fonctionne pas

  2. le code en fichier joint n'est pas consultable facilement à partir d'un smartphone. :frowning:
    -> Sur ce forum on demande d'inclure le code dans le corps du message en utilisant le balisage indiqué en tête du forum dans des messages épinglés

ça donnera quelque chose comme ça :

mon code.......

Important : le code est-il compilé sans erreur ? le téléversement également ?

le bon lien vers le tuto

Quand j'appuie ensuite sur le bouton on/off pour allumer la LED rien ne se passe

essayez de charger ce code sur l'Arduino

#include <SoftwareSerial.h>
SoftwareSerial BLE(2, 3);

void setup()
{
  Serial.begin(115200);
  BLE.begin(9600);
  BLE.print("AT+CLEAR");
  BLE.print("AT+ROLE1"); //Configure le module BLE en tant que maître
  BLE.print("AT+SAVE1");
  Serial.println(F("BLE init done"));
}

void loop()
{
  int octetRecu = BLE.read();
  if (octetRecu != -1) {
    Serial.print(F("J'ai reçu la valeur 0x")); Serial.print((byte) octetRecu, HEX);
    if ((octetRecu >= ' ') && (octetRecu <= '~')) {
      Serial.print(F(" [")); Serial.print((char) octetRecu); Serial.print(F("]"));
    }
    Serial.println();
  }
}

ouvrez la console série à 115200 bauds et regardez ce qu'il s'affiche lorsque vous jouez avec l'application du téléphone

Bonjour,
Quelle réactivité c'est impressionnant, merci beaucoup pour votre intérêt.
@aIlfch: Pour le code placé en "attachment", j'ai du procéder de cette façon car j'avais un code erreur qui me disait que j'avais trop de caractères (>9000). En procédant comme cela ça a fonctionné..... désolé si la méthode n'est pas adéquate.
@J-M-L: J'ai copié le code et téléversé dans l'arduiono sans problème. La LED de connexion "LINK" s'allume après avoir appuyé sur connexion et le texte "BLE init done" s'affiche sur le moniteur série. Hélas quand j'appuie sur la commande de la LED rien ne s'affiche sur le moniteur série. Je suis vraiment très perplexe..... d'autant que la LED RX de la carte s'allume brièvement lorsque j'appuie sur le bouton On/Off.

OK, donc c'est que rien n'est transmis à l'arduino...

vérifiez les “service UUID” et la “characteristic UUID”

avec une application comme LightBlue

Voici ce que me renvois l'appli lightblue.
J'ai essayé en sélectionnant AT ctl et serial, la différence était sur le dernier chiffre de la première série de chiffre (2 pour ctl et 1 pour serial).
Je ne pense pas m'être trompé dans la série de nombre.
Dans le cas ou j'utilise le AT ctl aucun signe de contact avec le téléphone n'est visible sur la carte.
Dans le cas d'utilisation du sérial il y a un allumage bref de la LED RX sur la carte.
Mais dans aucun des 2 cas il n'y a d'affichage de données sur le moniteur série.

essayez de mettre les lettres en majuscules dans les identifiants (je n'ai jamais essayé avec App Inventor)

vous avez bien exactement le même montage et composants que dans le tuto ?

J'ai essayé de changer les minuscules en majuscules mais toujours rien...
Je n'ai pas le même matériel car ma carte est une ROMEO sur laquelle tout est intégré.
Le SAV de gotronic m'a dit de suivre le tuto avec mon matériel donc je suppose que cela devrait fonctionner.
Serait-ce possible que ce soit mon téléphone?

Bonjour

J'ai eu des soucis avec LIghtBlue qui me donnait pas toujours les bonnes valeurs d'UUID... où je ne savais pas les y trouver ....

Depuis je n'utilise que "nRFConnect pour Mobile"

Que donnent les valeurs d'UUID figurant dans le tuto ?
tuto.png
Ce sont deux valeurs correctes pour un module HM-10 de HMSoft or dans le tutoriel il est fait mention de ce constructeur de modules BLE

Par ailleurs j'ai un doute sur l'opportunité de déclarer la carte en MAÎTRE s'il s'agit de communiquer avec une application sur smartphone

 BLE.print("AT+ROLE1"); //Configure le module BLE en tant que maître

tuto.png

Je n'ai pas le même matériel car ma carte est une ROMEO sur laquelle tout est intégré.

Donnez un lien vers votre carte

au passage..... j'ai un doute sur l'oppotunité de déclarer le BLE de la carte en MAITRE s'il s'agit de communiquesr avec une application sur smartphone

 BLE.print("AT+ROLE1"); //Configure le module BLE en tant que maître

Que donne AT+ROLE0 ? (rôle = esclave)

Voici la ref de la carte: ROMEO
J'ai également installé l'appli nrfconnect mais je ne trouve que des valeurs du type 0xDFB0 puis-je les utiliser tel qu'elles?

si le service est en 0xdfb0....... et sa caractéristique unique (lecture et écritue) est en 0xdfb1....
oui , il faut les utiliser d'autant plus qu'elles semblent confirmer celles obtenues avec LightBlue.

lien vers la carte Romeo utilisée ?

il semble que cette carte ait directement un port transparent BLE sur Serial et donc zero chance effectivement que ce soit fonctionnel avec un port série virtuel

essayez ce code (en ouvrant la console série à 9600 bauds):

void setup()
{
  Serial.begin(9600);
  Serial.println(F("BLE init done"));
}

void loop()
{
  int octetRecu = BLE.read();
  if (octetRecu != -1) {
    Serial.print(F("J'ai reçu la valeur 0x")); Serial.print((byte) octetRecu, HEX);
    if ((octetRecu >= ' ') && (octetRecu <= '~')) {
      Serial.print(F(" [")); Serial.print((char) octetRecu); Serial.print(F("]"));
    }
    Serial.println();
  }
}

Comme le téléphone émet sur 32 bits, la lecture doit être un peu plus smart car un 1 va être émis comme 0x00000001 et donc on recevra aussi 3 octets à 0 ce qui éteint la LED...

@aIlfch: j'ai mis le lien vers la page gotronic de la carte dans mon post précédent. la voici: Carte Romeo BLE DFR0305 DFRobot - Cartes compatibles Léonardo | GO TRONIC

@J-M-L: J'ai téléversé le code mais ça ne donne toujours rien. "BLE init done" puis plus rien.

Bonsoir

Il est possible de tester l'envoi de données BLE vers la carte Romeo avec nRFConnect en remplacement de l'application perso

la bonne caractéristique est certainement celle dont l'UUID commence par 0xdbf1

Cliquer sur la petite flèche montante (elle correspond à une écriture dans la caractéristique), un epetite fenêtre s'ouvrira permettant la saisie ds données à envoyer
exemple ci desous d'envoi vers la caracrtéristique 0xffe1.... d'un HM-10

J'ai lancé nRFconnect et essayé d'envoyer une valeur à la carte. Lorsque la fenêtre s'est ouverte j'ai envoyé (0x)01 et c'est revenu à l'écran que vous montrez mais la donnée était ajoutée. J'ignore ce que ça veut dire mais la LED RX a clignoté très brièvement comme dans les cas précédent.

Si la led Rx clignote brièvement c'est signe que le module BLE de la carte qui gère les leds RX et Tx) à reçu la donnée envoyée du smartphone.
Reste à voir ce qu'il en fait selon le mode de fonctionnement en cours du module

PS : je joins le schéma probable de la carte Romeo utilisée (schéma de la version 1 de la carte)
Que se passe-

Romeo BLE SCH.pdf (76.8 KB)

A ce niveau là je suis complètement perdu.

Comprends qu tus as opté pour une carte très particulière , très peu utilisée

J'ai joins le schéma pour avancer dans la compréhension du fonctionnement de la carte, pas pour perdre !! Le schéma montre quelque chose d'inattendu : le module BLE de la carte assure en plus la fonction d'interfaçage UART/USB, nous ne sommes pas habitués à cette organisation.

Il faudrait plus se plonger dans le firmware pour voir le changement de mode de fonctionnement du module BLE (mode transparent, mode programmation)

Que se passe-t-il en remplaçant BLE.read() par Serial.read() dans la ligne suivante du code proposé par J-M-L au message #13 ?

  int octetRecu = BLE.read();