Auteur Sujet: Communication Bluetooth (HC-06) / Arduino : c'est lent !  (Lu 20360 fois)

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #15 le: juin 09, 2021, 10:15:01 pm »
Ça voudrait dire une commande codée en numérique moins explicite qu'en alphanumérique ?
Si c'est ça et que j'ai bien compris, oui, un octet ne suffit pas même si je pense qu'on peut être à un peut moins de 13 bits. Donc on peut viser 12 ou 13 pour être tranquille, donc 16 en arrondissant, OK.
J'ai regardé côté smartphone, je ne vois pas, à priori j'envoie du texte...
J'utilise App Inventor qui fonctionne par blocs, et génère une appli sous forme de fichier apk.
J'ai l'impression que ma capture d'écran n'est pas passée dans mon post d'hier soir 21h38...
http://babsan.synology.me/terminus_montagne/apk_boutons_relais.jpg
« Modifié: juin 10, 2021, 01:37:50 pm par babskwal »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #16 le: juin 11, 2021, 08:12:33 am »
Bon ce n'est pas très grave si c'est du texte comme actuellement mais il faut trouver l'erreur côté smartphone qui envoi 7 x 7 octets !!!

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #17 le: juin 15, 2021, 08:28:05 pm »
Bon, ça y est, j'ai un code qui fonctionne, avec commande en binaire sur 2 bits.
#define hc06 Serial1            // définition de hc06 comme un objet série sur le port Serial1 (broches Rx1, Tx1)

// ci-dessous définition des noms de broches
const byte pin_relais[] = { A7, A6, A5, A4, A3, A2, A1, A0, 22, 24, 26, 28, 30, 32, 34, 36 };

byte nb_char_rec=0;
byte commande_recue[2];         // création d'un tableau de 2 bytes pour les caractères reçus du HC-06 et former la commande
unsigned int commande;
byte commande_relais;           // création d'une variable contenant le numéro de relais reçu du HC-06
byte commande_module;           // création d'une variable contenant le numéro de module reçu du HC-06
byte commande_type;             // création d'une variable contenant le type de commande reçu du HC-06
byte commande_etat_relais;      // création d'une variable contenant la commande d'état reçue du HC-06

void setup()
{
  Serial.begin(9600);           // initialise le moniteur série (pas nécessaire à termer)
  hc06.begin(9600);             // initialise le port série Bluetooth

// ci-dessous définition des broches (OUTPUT pour les relais)
  for (byte el : pin_relais)
  {
    pinMode(el, OUTPUT);
    digitalWrite(el, HIGH);
  }
}

void loop()
{
  // Lecture du HC06
  if (hc06.available())                                         // Si des données sont dispos sur le buffer du HC-06
  {
    commande_recue[nb_char_rec] = (byte)hc06.read();            // On met dans commande_recue[0] ou commande_recue[1]
    if(nb_char_rec==1)                                          // Si c'est dans commande_recue[1], c'est qu'on a reçu les deux octets
      {                                                         // On peut interpréter les deux octets de la commande
        commande=commande_recue[1]*256+commande_recue[0];       // On ré-intègre la commande sur deux octets
        commande_module=commande%8192/2048+1;                   // Le numéro de module sur les bits 11, 12, et 13
        commande_type=commande%2048/256;                        // Le type de commande sur les bits 8, 9 et 10
        if ((commande_module == 4) && (commande_type == 3))     // Si le module est n°4 et le type 3 (=Relais)
        {
          commande_relais=commande%128-1;                       // Le numéro de relais sur les bits 0 à 6 (numérotation à partir de 1)
          commande_etat_relais=!(commande%256/128);             // L'état commandé pour le relais sur le bit 7
          digitalWrite(pin_relais[commande_relais], commande_etat_relais);  // On envoie la commande
        }
      }
    nb_char_rec=!nb_char_rec;                                   // On switche sur l'autre octet
  }
}
Pour ce qui est du pourquoi ça marchait pas avec des caractères, et le pourquoi du comment du 7 bits, honnêtement... j'ai laissé tomber, l'essentiel est d'avoir un truc OK !

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #18 le: juin 15, 2021, 10:56:09 pm »
Bon, c'est super cool. Et la vitesse qui était le problème de base est améliorée ?

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #19 le: juin 15, 2021, 11:08:46 pm »
Oui, gros mieux ! Je vais maintenant voir pour distribuer les autres commandes sur les différents Arduino satellites des différents modules, mais le principe semble OK. Et la communication dans l'autre sens (autre bout de code que j'ai pas mis ici) du réseau vers le téléphone, fonctionne bien !
Merci beaucoup ! J'ai encore grillé qq neurones, mais les pistes étaient les bonnes. Bon, j'ai un peu abandonné qq jours, en partie à cause du HC-06 qui avait un faux contact sur l'alimentation 5V...
Je garde quand même dans un coin de la tête la solution ESP32...

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #20 le: juin 15, 2021, 11:32:09 pm »
Bon au risque de passer pour un chi..., je voudrais tout de même préciser qu'il est à mon sens préférable d'utiliser la manipulation de bits pour les opérations sur les bits que les opérations arithmétiques à base de modulo et divisions.

Décalages de bits et masques sont plus lisibles et présentent donc moins de risque au développement du programme. Au besoin, voir l'article de Jean-Luc : https://www.locoduino.org/spip.php?article70

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #21 le: juin 15, 2021, 11:34:27 pm »
Pas de souci, je vais creuser !

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #22 le: novembre 29, 2021, 08:04:05 pm »
Hello !
Après avoir avancé sur la partie structure du réseau, et le décor. Et tout n'étant pas possible en même temps dans une petite journée de 24h...
Bon, je suis allé à Rail Expo vendredi, j'ai vu un joli stand (Locoduino), j'y ai rencontré Dominique (et une autre personne, mais on ne s'est pas présentés, mes excuses !), et je me remets à la partie commande.
Après réflexion, je suis tenté par la solution wifi entre en ESP32 monté sur le réseau, qui héberge un serveur web et qui communique mon téléphone comme client en tant que "télécommande". Ce serait cet ESP32 qui serait aussi le "cerveau" du réseau, gérant le suivi des trains, les commandes à envoyer sur les alimentations des rails, les aiguillages et signaux, et recevant les informations d'occupation des voies.
Mais est-il assez puissant : calculs pour gérer l'ensemble + serveur pour la communication avec le smartphone comme IHM ?

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #23 le: décembre 01, 2021, 11:29:53 am »
A mon avis pifométrique, oui.

L’esp32 a plein de mémoire et 2 cœurs pour séparer wifi et gestionnaire.

Mais à essayer pour voir où sont les limites.
Cordialement,
Dominique

babskwal

  • Jr. Member
  • **
  • Messages: 67
  • Echelle N, analogique DIY
    • Voir le profil
Re : Communication Bluetooth (HC-06) / Arduino : c'est lent !
« Réponse #24 le: décembre 01, 2021, 12:08:25 pm »
Merci Dominique !
J'ai commandé celui-ci https://www.amazon.fr/gp/product/B08BV3L92G/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1, il arrive samedi. On verra !