HC-06 (ZS-040) Kann keine Daten über BT an den Arduino senden

Hallo Community,

ich verzweifle gerade hier. :frowning:

Ich hab an einem Arduino Uno einen HC-06 (ZS-040) angeschlossen. Möchte ich gerne über SoftwareSerial ansteuern.

Steckverbindungen auf dem Steckbrett scheinen zu stimmen, hab ich 1000x geprüft. :wink:

RX vom HC-06 über Widerstandsteiler (10K / 20K) an Pin11 vom Arduino
TX vom HC-06 direkt an Pin 10 vom Arduino

Auf dem HC-06 steht drauf, RX/TX brauchen 3.3V - hab ich gemessen, kommt an.
Habe also RX und TX auf 3.3V liegen.

Mein Sketch (zum Test):

#include <SoftwareSerial.h>

#define rxPin 10
#define txPin 11

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

void setup() {
  Serial.begin(9600);   
  Serial.println("Serial-Monitor:");

  mySerial.begin(9600);
  mySerial.println("Arduino -> Android"); //Kommt immer an
}

void loop(){

  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
    
}

Aber auch das Testbeispiel von SoftwareSerial funktioniert nur zu 50%. Ich kann nämlich nur Daten vom Arduino an das Endgerät (Android) senden.

Wenn ich in den Terminals vom Androiden was sende, blinkt auch die LED am Arduino (TX) nicht. Nur beim Senden über den Serial-Monitor die LED für RX (und der Text kommt auch am Androiden an).

Ich hab schon ein anderes Steckbrett benutzt, Kabel getauscht, sogar den HC-06 ausgetauscht, ich kann nichts vom Androiden über z.B. S2 Terminal for Bluetooth senden (hab auch andere Terminals versucht).

Jemand eine Idee, wie ich dem Ganzen auf die Spur kommen kann?

Gruß,
MiNo

Hallo MiNo,

woher hast Du die Info, dass Du einen Wiederstand zwischen dem HC-06 Rx und dem Pin vom Arduino benötigst?

Mein ´06er kann A) ohne Wiederstand angeschlossen werden und B) braucht zur Betriebsspannung 5V. Also VIN des HC-06.

Dann kann manchmal ein kleines delay nicht schaden um sicher zu gehen, dass die zu empfangenden Daten auch bereitstehen. Sonst fragt der Ardu pro loop den HC an, so dass der garkeine Zeit hat sich um die Verbindung oder den Empfang von Daten zu kümmern.

Hallo Trib,

VCC natürlich 5V.

Auf dem HC-06 steht das TX/RX nur mit 3.3V belegt werden dürfen. Die kommen auch am HC-06 an. Wenn ich den HC-06 ohne Teiler anschließe, habe ich exakt das selbe Ergebnis. Vom Arduoino zum Android geht, andersrum nicht.

Mit einem "delay" gehts leider auch nicht :(

Selbst wenn ich es "klassisch" ohne SoftwareSerial anschließe, funktioniert nur die Kommunikation Arduino -> Android. Andersrum leider gar nicht...

Gruß, MiNo

Hallo,

vielleicht hilft eine Skizze - ich mag es auch gar nicht ausschließen, dass ich vielleicht ein Verständnisproblem habe. :wink:

So der große Elektroniker bin ich halt nicht (wie man auch an der Skizze sieht)…

Ich hab wirklich keine Ahnung, warum die eine Richtung funktioniert und die andere nicht. :frowning:

Lohnt es sich, im englischsprachigen Forum einen Thread aufzumachen?

Gruß,
MiNo

EDIT:
Das HC-06 kann nur in eine Richtung kommunizieren, das ist dir bekannt? (Entweder nur als Master oder nur als Slave, ich weiss es gerade nicht).

Ich habe den HC-05 (Gleiche Platine wie HC-06/ZS-040), Anschluss wie folgt:

Bluetooth → Arduino
RX → TX
TX → RX
GND → GND
VCC → 5V
EN (manchmal auch “Key”) → Pin 9
State → Frei lassen, oder eigene LED anschliessen.

Keine Widerstände o.ä.

Code kommt gleich, aber wichtig ist zu schauen, ob der überhaupt im Empfangsmodus ist. Erkennbar ist es am 2-Sekunden-Blinken. Blinkt es schneller, ist er es nicht. Wenn du ihn in den Modus schalten möchtest, ziehst du im Betrieb das VCC-Kabel ab, drückst dann (sofern vorhanden, nicht jedes Modul hat es) den kleinen Knopf und schliesst 5V wieder an (den Knopf hältst du dabei gedrückt und lässt ihn 1-2 Sekunden später los).

Test kann dann im seriellen Monitor der IDE durch Eingabe von “AT” erfolgen. Kommt ein OK, ist er empfangsbereit. Siehst du wirre Zeichen, dann ist die Baudrate falsch eingestellt, andere Baudraten ausprobieren. Meistens 9.600 oder 38.400 Baud, kommt hier scheinbar auf die Lust des jeweiligen an, der das zusammengelötet hat.

Manche Commands werden NUR beim drücken des Knopfes beim Absenden angenommen (z.B. " AT+NAME? ")

Hier noch der von mir eingesetzte Code, ich habe RX+TX für das Modul auf Pin 10+11 gelegt! (Das kannst du beliebig ändern, wenn du allerdings den standard-RX-TX (0+1) nimmst, kann es dir mehr Probleme schaffen als Dir lieb ist, da Serial.print hier in die Suppe spuckt).

Im Serial Monitor 9600 Baud & NL+CR !

Hier nun der Code:

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(11, 10); // RX | TX

void setup() {
pinMode(9, OUTPUT); // this pin will pull the HC-05 key HIGH to switch module to AT mode
digitalWrite(9, HIGH);
Serial.begin(9600);
Serial.println(“Enter AT commands:”);
BTSerial.begin(38400); // HC-05 default speed in AT command mode

}

void loop() {
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());

// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
BTSerial.write(Serial.read());

Gruß,
Stefan

Hallo,

was ist denn hier los?

Erstens. Hast du wirklich ein hc06? Oder ein hc05?
Unter zs040 findet man leider beides.

Und jetzt muss ich mit dem Unsinn aufräumen.
Das 06er kann nur Slave.
Das 05er kann Master oder Slave.

Das heißt aber nicht das die nur in eine Richtung kommunizieren können. Das hat nur Einfluß wer wen kontaktieren kann zum generellen Verbindungsaufbau. Master findet den Slave.

Und zum konfigurieren muß man den Key Pin auf 3,3V legen. Dann Ub anlegen und er ist im Kommando Modus. Falls man das braucht. Default Baudrate im AT Modus ist 38400.

Doc_Arduino: Und jetzt muss ich mit dem Unsinn aufräumen.

Ich liebe Beschimpfungen...

Doc_Arduino: Das 06er kann nur Slave. Das 05er kann Master oder Slave.

Das heißt aber nicht das die nur in eine Richtung kommunizieren können. Das hat nur Einfluß wer wen kontaktieren kann zum generellen Verbindungsaufbau. Master findet den Slave.

Habe ich etwas andere geschrieben? Man kann sich auch leicht an dem Wort kommunizieren stören, gemeint war das Gleiche. Und ich denke, es hat auch jeder so verstanden. Spätestens beim nächsten Satz wäre es klar.

Doc_Arduino: Und zum konfigurieren muß man den Key Pin auf 3,3V legen. Dann Ub anlegen und er ist im Kommando Modus. Falls man das braucht. Default Baudrate im AT Modus ist 38400.

UB?

Habe ich etwas anderes geschrieben? Den Code überhaupt angeschaut?

Das mit den 3,3V auf Key halte ich mittlerweile für ein Gerücht aus dem Morgenland. Hat er das ZS-040, dann geht 5v.

Gruß, Stefan

Bitte keinen Streit vom Zaun brechen... ;-)

Also, ich hab einen HC-06 (definitiv!). Ich hab zwei Geräte, eins bereits mit AT-Befehlen befummelt und Name sowie Pin geändert - hat wunderbar funktioniert. Ich denke, die Verkabelung wird schon stimmen. Zumal ohne Widerstandsteiler ich die AT-Befehle nicht absetzen konnte. Ich musste nichts mit Key o.ä. machen, nur dafür Sorge tragen, dass RX/TX 3.3V haben.

Selbst der unbefummelte HC-06 hat die selben Probleme. An einen Androiden senden geht, von einem Androiden empfangen geht nicht.

Ich hab auch schon den Androiden getauscht. Ob mit oder ohne Widerstandsteiler - es will nicht klappen.

Habe aber in dem Zuge auch festgestellt, dass die HC-06 sich nicht mit iOS - Geräten verbinden können, wäre aber in der Tat für mich auch wichtig, somit hab ich mir erst einmal ein BLE 4.0-Modul bestellt. Mal sehen, wie der sich dann verhält...

Aber dennoch ist mir das mit dem Empfangen ein Rätsel...

Gruß, MiNo

PS: Hatte auch im englischen Forum einen Thread eröffnet -> http://forum.arduino.cc/index.php?topic=361353.0

Hallo,

schau mal hier:http://mcuoneclipse.com/2014/03/30/getting-bluetooth-working-with-jy-mcu-bt_board-v1-06/

mfg Martin

Wasjetzt: Hallo,

schau mal hier:http://mcuoneclipse.com/2014/03/30/getting-bluetooth-working-with-jy-mcu-bt_board-v1-06/

mfg Martin

Ha! Das werde ich heute Abend prüfen! Danke!

//EDIT: DAS WAR DER HINWEIS!!!!

Im Setup ein "pinMode(txPin, INPUT_PULLUP);" und alles funktioniert!!!

Hallo,

das war keine Beschimpfung. Sondern nur eine Korrektur. Beleidigung war keine Absicht. Nur muss man unterscheiden zwischen dem was man meint und dem was man schreibt. Was man meint kann der andere nicht lesen. Deswegen habe ich korrigiert. Und das halte ich auch jetzt noch für notwendig. Dein Edit ist einfach widersprüchlich in meinen Augen. Du redest vom 06 und gleichzeitig vom Master und Slave Modus. Und das stimmt nun einmal nicht. Das wäre der 05. Alles klar?

Tja, also, es funktioniert, wenn ich den Pin auf Strom setze, aber glücklich bin ich damit auch nicht.

Der Effekt ist, dass ich zwar jetzt Daten an den Arduino schicken kann, aber ich auch alles exakt wieder zurückbekomme.

Und ja, ich hab natürlich das "Bluetooth-Echo" auskommentiert.

Aber durch den "INPUT_PULLUP" wird mir einfach alles wieder ans Endgerät (Android) geschickt.

Das ist ja mal super nervig.

Kommt weg, ich erhoffe mir einfach mehr Spaß mit dem BLE - Modul....

Gruß, MiNo

Hallo,

der Pullup hat nichts mit dem Echo zu tun. Der Eingang mit Pullup dient nur für den AT Modus. Du musst die paar Zeilen in der loop verstehen. Lesen und wieder ausgeben. Jeweils für jede Richtung. Dann nimmste das raus was du nicht benötigst.

Bist du dir sicher? Selbst wenn ich nichts im Loop habe. Sende ich vom Androiden etwas, kommt es auch wieder am Androiden an. Die Verarbeitung klappt, hab aber immer das gesendete wieder auf meinem Endgerät....manchmal auch das erste Zeichen verschluckt....

Egal. HC-06 nervt. Ich steck da keine weitere Zeit mehr rein...

Hallo,

das sind 4 Zeilen einfachster Test Code für 2 serielle Schnittstellen. Das hat noch nicht einmal etwas mit dem BT Modul an sich zu tun. Das BT Modul ist nur der Briefträger.

Hoi,

hier ist mein Part aus void loop(), funktioniert in beide Richtungen Super

  // Read device output if available.  
  while(softSerial.available()) { // While there is more to be read, keep reading.
    command += (char)softSerial.read();
  }       
  while(Serial.available()) { // While there is more to be read, keep reading.
    command += (char)Serial.read();
  }

Ist zwar echt spät, aber dieser Beitrag hat mir gerade mein Glaube an mich selbst wieder gegeben. Dachte schon ich habe meine beiden HC-05 geschrottet, da ich keine Kommunikation aufbauen konnte.

Der Pullup hat das ganze nach 2 Tagen verzweifelter Suche endlich die Lösung gebracht.

Vielen Dank im Nachhinein!