web-dev-qa-db-fra.com

Arduino: utilisation de la série et du logiciel Série avec le module Bluetooth

Mon but est d’utiliser Arduino pour configurer la communication entre un PC et un appareil Android à l’aide d’un module Bluetooth HC-05.

J'utilise la communication USB entre le PC et l'Arduino (moniteur série) et un logiciel série pour me connecter au HC-05.

Mon problème est que la communication fonctionne bien entre BT et le PC, mais ne fonctionne pas comme prévu dans l'autre sens. Lors de l'envoi du PC à BT, tous les caractères envoyés ne sont reçus par le périphérique BT que lorsque je ferme le moniteur série sur le PC ou lorsque je réinitialise l'Arduino.

J'ai exclu un problème avec le module BT ou l'application Android car, si je mets en œuvre un code "ECHO" dans Arduino (écriture dans Android et envoi dans Android), tout fonctionne correctement.

Le comportement attendu du code Arduino indiqué ci-dessous est le suivant: Arduino réinitialise-> Bonjour le mot envoyé, le moniteur série ouvert-> rien ne se passe, le caractère écrit sur le moniteur série-> caractère reçu sur BT, le caractère écrit sur BT-> caractère reçu sur le moniteur série , Moniteur série fermé -> rien ne se passe.

Le comportement réel est le suivant: réinitialisation Arduino-> Bonjour mot envoyé, moniteur série ouvert-> 2 Bonjour mot sur BT et 1 ("bonne nuit") sur PC, caractère écrit sur moniteur série-> rien, caractère écrit sur BT-> caractère reçu sur le moniteur série, le moniteur série est fermé-> le ou les caractères écrits précédemment dans le moniteur série ont été reçus + Hello Word.

Comment puis-je résoudre ce problème?

Code:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int a=0;
char c;
char d;
void setup() {
  Serial.begin(9600);
  Serial.println("Goodnight moon!");
  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}
void loop() {
  delay(10);
  if (Serial.available()) {
    c=Serial.read();
    delay(10);
    Serial.write(c);
  }
  delay(10);
  if (mySerial.available()) {
    d=mySerial.read();
    delay(10);
    mySerial.write(d);

  }
}
6
user2706612

J'ai mis en place une communication série entre Arduino Uno et le PC et c'était mon code, j'espère que cela peut aider:

int data;
char character;
int start_flag = 0;

void setup() {
  Serial.begin(921600); 
  pinMode(2, OUTPUT); 
}
void loop() {
  if(Serial.available() > 0){
    character = (char) Serial.read();
    if(character == 's') {
      start_flag = 1;
    }
    if(character == 't') {
      start_flag = 0;
    }
  }
  if (start_flag == 1) {
    Serial.print(data); //data that was acquired by internal ADC
  }
}
2
STiLLeN

Ce code fonctionne pour moi sur un Arduino Mini Pro (qui devrait être identique à UNO) avec un HC-05. J'ai le HC-05 couplé avec mon ordinateur portable. En utilisant HyperTerminal sur le port COM associé à la console série HC-05 et Arduino, je peux envoyer des messages de manière bidirectionnelle. Les instructions Serial.println apparaissent dans la fenêtre Hyperterminal comme elles le devraient.

#include <SoftwareSerial.h>

#define rxPin 8
#define txPin 7

SoftwareSerial mySerial(rxPin, txPin); // RX, TX
char myChar ; 

void setup() {
  Serial.begin(9600);   
  Serial.println("Goodnight moon!");

  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop(){
  while(mySerial.available()){
    myChar = mySerial.read();
    Serial.print(myChar);
  }

  while(Serial.available()){
   myChar = Serial.read();
   mySerial.print(myChar);
  }
}
2
imjosh

Utilisez cette configuration série. Avec ce code, je peux recevoir et envoyer une date à Bluetooth par Serial Monitor

void setup(){
  Serial.begin(9600); // Begin the serial monitor at 9600bps
  bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps
  bluetooth.print("$"); // Print three times individually
  bluetooth.print("$");
  bluetooth.print("$"); // Enter command mode
  delay(100); // Short delay, wait for the Mate to send back CMD
  bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity
  // 115200 can be too fast at times for NewSoftSerial to relay the data reliably
  bluetooth.begin(9600); // Start bluetooth serial at 9600
  pinMode(led, OUTPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
}

Pour plus d'informations, visitez http://www.circuitmagic.com/arduino/arduino-and-bluetooth-hc-06-to-control-the-led-with-Android-device/

0
Mandy

Vous pouvez essayer ceci . Il s’agit du code le plus simple que vous pouvez utiliser lors du test de la communication Arduino bluetooth <-> C #. Remarque: le code a été testé en connectant PIN1 (TX) <-> MODULE RX, PIN2 (RX) <-> MODULE TX et en divisant le PIN1 (TX) 5V à 2,5V avant de le charger dans le module.

J'espère que cela aide tous ceux qui essaient cela!

0
jaolho

Si vous aviez le même problème, vous devez voir le module BT sous 2 vitesses de transmission différentes du côté câblé et du côté radio. Le côté radio est défini par tout ce à quoi vous vous connectez via PuTTY, le côté câblé est programmé via les commandes AT. HC-05 par défaut à 38400.

0
Davee

Je recommande d'utiliser cette application pour tester:

https://play.google.com/store/apps/details?id=com.vagoscorp.virtualterminal

Il vous permet de voir et d’envoyer des octets sous forme d’octets (nombre compris entre 0b00000000 et 0b11111111 (de 0 à 255 en décimal)) Afin que vous puissiez créer un microprogramme d’écho simple pour tester si votre débit en bauds est correct commandes pour allumer/éteindre certaines LED

voici un exemple de code d'écho:

char dato = 0;

void setup() {
 Serial.begin(9600);//9600 is the default baudrate of the HC-05 (you can change it by AT commands, google it if you want)
 //pinMode(13, OUTPUT); //enable this pin if you want to use de LED idea
 //digitalWrite(13,  HIGH);
}
//////////////////////////////////////////////////////////////////////////
void serialEvent() {  //if you have received serial data
    while (Serial.available() > 0) {
        char dato = (byte)Serial.read();//save the byte
        Serial.write(dato);//send the just received byte (echo)
    }
}
///////////////////////////////////////////////////////////////////////////
void loop() {

}

J'espère que ça t'aide

0
Sebasu