Table des matières:

Récupérer le module Bluetooth HC-06 mal configuré : 4 étapes
Récupérer le module Bluetooth HC-06 mal configuré : 4 étapes

Vidéo: Récupérer le module Bluetooth HC-06 mal configuré : 4 étapes

Vidéo: Récupérer le module Bluetooth HC-06 mal configuré : 4 étapes
Vidéo: Arduino et HC06 bluetooth module 2024, Novembre
Anonim
Récupérer le module Bluetooth HC-06 mal configuré
Récupérer le module Bluetooth HC-06 mal configuré

Par pur maximalisme, j'ai configuré mon module Bluetooth HC-06 (esclave) à un débit en bauds de 1 382, 400 bauds avec la commande AT+BAUDC. Depuis que l'Arduino qui lui est connecté n'a pas pu utiliser le module avec la bibliothèque SoftwareSerial. J'ai essayé de restaurer le débit en bauds avec la série matérielle d'Arduino (broches 0 et 1) sans succès.

J'ai également essayé de rechercher le sujet sur Google sans trouver de solution passable. Peut-être que l'utilisation du port série intégré d'un ordinateur aurait pu être une solution (avec un changement de niveau logique de 12V à 3V3), mais mon ordinateur n'a pas ce port obsolète, j'ai donc dû trouver une autre solution.

Étape 1: ce dont vous aurez besoin

Ce dont vous aurez besoin
Ce dont vous aurez besoin
  • Carte Arudino/Genuino avec le MCU Atmel ATMEGA328P-PU par défaut (@16MHz).
  • Un module Bluetooth HC-06 écoutant à 1 382 400 bauds
  • IDE arduino de base de

Étape 2: la solution

La solution
La solution
La solution
La solution

Veuillez noter que ce Instructable et la solution est faite pour le scénario 1, 382, 400 bauds (AT + BAUDC). La solution ne fonctionnera pour aucun autre débit en bauds. Pour traiter d'autres cas, veuillez vous référer aux étapes à partir de l'étape 3.

La solution est vraiment simple.

  1. Connectez la broche VCC de HC-06 à la broche 5V d'Arduino.
  2. Connectez la broche GND de HC-06 à la broche GND d'Arduino.
  3. Connectez la broche RXD du HC-06 à la broche 2 d'Arduino.
  4. Laissez la broche TXD du HC-06 non connectée (ou connectez-la à la broche 8).
  5. Téléchargez le croquis hc06reset.ino.
  6. Le programme réglera le HC-06 en mode 115, 200 bauds (AT+BAUD8).
  7. Utilisez votre module HC-06 récupéré comme avant.

Étape 3: Dans les coulisses…

Dans les coulisses…
Dans les coulisses…
Dans les coulisses…
Dans les coulisses…

La bibliothèque SoftwareSerial fournie avec Arduino IDE est capable de transmettre au plus 115 200 bits/seconde, elle n'est donc pas assez rapide pour communiquer au débit souhaité de 1 382 400 bauds. Étant donné qu'une carte Arduino par défaut fonctionne sur 16 MHz, le débit binaire maximum non compressé théorique est de 16 000 000 bits/sec. On est bien pour l'instant !

D'après ma compréhension de SoftwareSerial.cpp, la communication seial se fait en définissant une broche de sortie High (=1) ou Low (=0) par rapport à un délai (qui vient du débit en bauds) entre les changements.

  • La broche de sortie est haute par défaut (signifie pas de données), alors
  • un bit de démarrage est transmis (ce qui tire la broche vers le bas), puis
  • 8 bits de données transmises de LSB vers MSB, (+5V quand le bit 1 et 0 sinon) puis
  • un bit d'arrêt est transmis (ce qui tire la broche vers le haut)

De cette façon, 1 octet est transmis en utilisant 10 bits.

Le message que nous devons envoyer est AT+BAUD8 (sans \n, \r à la fin). Cette commande remet le HC-06 à 115 200 bauds, ce qui peut être géré par les bibliothèques classiques.

Afin d'envoyer des bits avec une vitesse de 1 382, 400 bits/s, pour chaque bit, nous avons un temps de 1/1 382, 400 secondes (soit environ 723,38 ns) pour chaque bit. Arduino fonctionne sur 16 000 000 Mhz, donc chaque cycle dure 1/16 000 000 secondes, soit 62,5 ns par cycle.

En utilisant le code d'assemblage AVR, nous pouvons utiliser la commande OUT pour définir la broche de sortie haute ou basse et NOP pour attendre exactement un cycle CPU. Les deux commandes consomment exactement 1 cycle de processeur. De cette façon, le temps de bit de 723,38 ns peut être couvert par 11 à 12 instructions arduino par bit transmis. Une chose à considérer: la commande OUT définit un octet entier à la fois, nous devons donc sélectionner un PORTx où ce n'est pas un problème. L'utilisation d'ATMEGA328P-PU par exemple PORTD (broches arduino 0-7) est parfaite pour cette condition. Après avoir réglé le bit, seul le temps approprié doit s'écouler, ce qui est fait par 10 à 11 NOP et c'est tout.

Vous pouvez trouver les détails du calcul dans le fichier Excel ci-dessous. Ce fichier a généré les instructions d'assemblage requises pour le programme. Seuls quelques remplacements ont dû être effectués après avoir collé le code généré.

Étape 4: Autres lectures/possibilités d'amélioration

  • Peut-être qu'une bibliothèque SoftwareSerial plus rapide peut être créée en utilisant la technique décrite à l'étape précédente.
  • FedericoK2 a créé un excellent outil qui génère le code de récupération HC-06 pour chaque débit binaire possible. Accédez au site ici: https://tools.krum.com.ar/save_your_hc-06/ Merci FedericoK2

Conseillé: