Seltsames Problem mit dem Bluetooth-Modul JY-MCU (HC-06).

Kurze Erklärung: Daten, die über die Bluetooth-Serie gesendet werden, kommen nicht korrekt beim Arduino an.

Gestern habe ich ein JY-MCU-Bluetooth-Modul an meinen Arduino UNO R3 angeschlossen, um es zu testen. Ich habe die TXD- und RXD-Pins mit den Arduino-Pins 10 bzw. 11 verbunden und SoftSerial zur Kommunikation verwendet. Ich habe zuerst einige AT-Befehle ausprobiert, die ich online gefunden habe. Nach ATder Rückgabe habe ich den hierOK gefundenen Code ausgeführt und diese Ausgabe erhalten:

Starting config
OK
OKlinvorV1.6


OK57600
Done!

Das Ändern von Name und Pin ist also fehlgeschlagen, aber ich habe (angeblich) die Baudrate erfolgreich geändert. Jeder weitere Versuch, einen AT-Befehl auszuführen, schlug jedoch fehl (keine Ausgabe), selbst wenn ich die neue Baudrate (57600) im Softmodem einstellte. Ich habe dann versucht, es mit meinem PC zu koppeln und den folgenden Code zum Testen verwendet:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

void setup() {
  Serial.begin(9600);
  mySerial.begin(57600);
  delay(1000);
}

void waitForResponse() {
    if (mySerial.available()) {
      while (mySerial.available()) {
        int a = mySerial.read();
        Serial.println(a);
      }
      Serial.write("\n");
    }
}

void loop() {
  waitForResponse();
  delay(2000);
}

Kurz gesagt, ich warte darauf, dass das Modul etwas empfängt, und drucke dann den Wert jedes Bytes aus. Seltsam ist, dass die Daten, die ich (mit cutecom auf dem PC) sende, einfach nicht korrekt sind - zum Beispiel das Senden des Buchstabens A (entweder Klein- oder Großbuchstabe) gibt die Zahl 161 aus. Wenn Sie jedoch zwei Buchstaben A senden, werden die Zahlen 161 und 176 ausgegeben trotz der Tatsache, dass es sich um denselben Buchstaben handelt. Ich habe sehr wenig Erfahrung mit serieller Kommunikation, aber das sieht so aus, als ob die Baudrate nicht stimmt. Wenn dies jedoch der Fall ist, weiß ich nicht, wie ich die Baudrate wieder auf 9600 ändern kann, da ich keine AT-Befehle mehr an das Modul senden kann.

Jede Hilfe, wie man das Modul richtig zum Laufen bringt, oder zumindest eine Erklärung, was hier passiert, ist mehr als willkommen.

Ich würde vorschlagen, den HC-06 zum Konfigurieren und Testen über ein FT232 / PL2303-Kabel usw. direkt an Ihren PC anzuschließen. Machen Sie sich keine Sorgen mit Arduinos SoftwareSerial - SS ist nie eine gute Idee, es sei denn, Sie haben wirklich keine andere Wahl; besonders bei höheren Baudraten. Beachten Sie auch, dass der HC-06 nur auf AT-Befehle reagiert, wenn er nicht mit Ihrem PC gekoppelt ist.

Antworten (1)

Die Baudrate von 57600 ist bei einem AVR (dem verwendeten Mikrocontroller) bei 16 MHz ziemlich marginal, normalerweise OK mit nur etwas mehr als 2% Fehler, aber einige Module können wählerisch sein. Der AVR-Baudratenrechner der Website WormFood zeigt einige gute Tabellen mit Fehlerprozentsätzen für verschiedene Takt-/Baudratenkombinationen.

Außerdem habe ich gerade Majenkos Kommentar bemerkt und er hat recht, dass die von Ihnen verwendete Softwareserie bei dieser Geschwindigkeit schlechter sein wird. Versuchen Sie es also zunächst mit einem Hardware-UART.

Dieser Arduino läuft mit 5-V-Logikpegeln. Wenn Sie also keinen Spannungsteiler verwenden, um die Übertragungsleitung auf 3,3 V zu senken, ist dies möglicherweise einen ersten Versuch wert. Ich habe ein paar gemischte Dinge darüber gelesen, ob die HC-Module auf den seriellen Leitungen 5 V tolerant sind oder nicht, und es wird sicherlich nicht schaden, es zuerst zu versuchen, um zu sehen, ob es das Problem löst.

Aber wenn keiner dieser Schritte funktioniert, würde ich empfehlen, einen USB-zu-TTL-Seriell-Konverter zu kaufen. Es scheint, dass Sie für dieses Modul nach einem mit einem 3,3-V-Logikpegel wie diesem für Sparkfun suchen sollten. Sie sind auch für eine Vielzahl anderer Dinge nützlich, daher ist es im Allgemeinen nützlich, sie zur Verfügung zu haben.

Danke - ein USB zu TTL hat gut funktioniert und ich habe es geschafft, die Baudrate wieder auf 9600 zurückzusetzen, also funktioniert es jetzt gut. Sicherheitshalber möchte ich jedoch die Spannung am Arduino-Ausgang absenken. Ich weiß, wie man einen Spannungsteiler zusammenbaut, aber wie hoch sollte der Widerstand sein? Ich nehme an, es sollte hoch sein, da die Last für den Ausgang wahrscheinlich sehr niedrig ist, aber ich weiß nicht, wie ich den tatsächlichen Widerstand bestimmen soll.