Bluetoothverbindung (HC-05) funktioniert nicht. Bitte um Hilfe...

Hallo,

ich bin neu hier und stehe mit meinem Arduino vor einer großen Herausforderung. Vor ab, ich kenne mich mit dieser Materie eigentlich nicht gut aus, hab es aber geschafft, mich irgendwie reinzuarbeiten. Jetzt komm ich aber nicht mehr weiter und brauche dringend Hilfe. Vor weg, meine Beschreibung ist sehr lang, dafür aber kleinschrittig.

Bitte lest es euch durch.

Das Projekt:
Ich möchte via Bluetooth einen Befehl von meinem PC an meinen Arduino senden (hab extra dafür ein HC-05 Modul gekauft) und einen kurzen Text zurückbekommen.

Etwas genauer:
Konkret möchte ich, dass, wenn ich ein A eintippe, der folgende Text „Es wurde der Buchstabe >A< eingegeben“, erscheint. Wenn hingegen ein anderer Buchstabe eingegeben wird, soll die Textausgabe wie folgt lauten: „Bitte einen anderen Buchstaben waehlen“.

Soweit ich weiß, müsste das mit folgendem Code funktionieren…


void setup(){
Serial.begin(9600);
}

void loop(){
if (Serial.available())
{
char data = Serial.read();
if(data == 'A')
{
Serial.println("Es wurde der Buchstabe >A< eingegeben");
}
else
{
Serial.println("Bitte einen anderen Buchstaben waehlen");
}
}
}


Wenn ich den Code uploade und dann ganz normal im Serial-Monitor verschiedene Buchstaben eingebe, funktioniert alles reibungslos.

Anschluss von HC-05 an Arduino:
Wie bereits erwähnt, soll die Informationsübertragung aber über Bluetooth laufen. Darum hab ich nach Anweisungen aus dem Web alles wie folgt verkabelt:

VCC mit 3,3V
GND mit GND
RXD mit 11
TXD mit 10
KEY mit 9

Wenn ich nun den Arduino mit verkabelten HC-05 Modul per USB an den PC anschließe, fängt das HC-05 an, sehr schnell zu blinken. Dann klicke ich auf den Bluetooth-Button, wähle „Geräte hinzufügen“, dass HC-05 Modul wird erkannt und ich gebe den Kupplungscode (1234) ein. So wie ich das sehe, ist nun alles mit einander verbunden.

Zum Problem:
Nach dem ich also der Ansicht bin, dass alles okay ist, lade ich den Sketch (siehe oben) auf den Arduino, öffne „Tera Term“ (das Programm wurde auch in einigen Beispielen aus dem Netz verwendet), wähle anstatt TCP/IP die Option Seriell und suche den passenden COM (bei mir COM 8). Nun alles noch mit OK bestätigt.

Das Blinken verändert sich daraufhin in zweimal schnell, gefolgt von einer längeren Pause.
Zudem erscheint ein kleines schwarzes Fenster, in der ich nun mein „A“ eintippen will. Das Problem ist, ich kann einfach dort nichts eingeben.

Was hab ich falsch gemacht???

Ich bitte um Antwort. Hab mir bereits sämtliche Internetvorschläge und Lösungen angeschaut, aber ich komme nicht weiter. Das Ganze ist ein Uni-Projekt. Ein Scheitern wäre für mich also alles andere als gut. :cry:

Danke für hoffentlich viele Antworten.

Welches HC Modul hast du im Einsatz?

Auf der Rückseite steht „CZ-HC-05“. Eigentlich sollte das für mein Vorhaben geeignet sein.

HC_05.jpg

Die Pin's 10 bzw. 11 sind "normale" I/O Pins.

Darum brauchst du die SoftwareSerial.h um eine Virtuelle Serielle mit diesen Pin's zu haben

Aha,

kannst du mir vielleicht zeigen, wie das dann bei mir auszusehen hat (mit dem Code und so). Ich kenne mich wirklich nur ganz rudimentär mit dem Programmieren aus :sweat_smile: .

Guck dir mal das Beispiel simple test der Tiny GPS an. Da siehst du, wie beide seriellen Schnittstellen konfiguriert werden.
Voraussetzung ist natürlich, das du die selbe Lib für die serielle Schnittstelle nimmst. Da gibt es zig Versionen von. SoftSerial, altsofterial, newsoftserial und was weiß ich noch. Aber gut, das es so viele Alternativen gibt, denn teilweise gibt es da die wunderlichsten Wechselwirkungen und Macken. Eine will nicht mit schnellen Baudraten, die andere stellt sich tot, wenn man I2C verwendet usw.

Gruß Gerald

Okay,

du hast mich abgehängt. Was ist der „simple test“ der „Tiny GPS“. Davon ha ich noch nie etwas gehört. Genau so geht es mir auch bei „Lib“.
:astonished:
Was soll ich machen???

Hallo,

kann es vielleicht sein, dass ich die Pins 10 und 11 erst noch „aktivieren“ (oder wie auch immer man das nennt) muss???

Wenn das die Probleme Verursacht, wie aktiviert man Pins. Soweit ich weiß, geht das direkt im Sketch. Kann mir das jemand an Hand meines Codes zeigen.
Das wäre wirklich eine extrem große Hilfe (wenn dies den die Probleme verursacht).

Ich bin für jede Antwort dankbar.

Guckst du hier: NewSoftSerial Library, for an extra serial port
Da sind Bespiele angegeben, wie man die verschiedenen Libarys verwendet. Das ist einfacher, als wenn du dir erst runterladen und in die IDE einbinden mußt.
In der IDE sind etliche Libarys schon als Grundausstattung drin. Das sind z.B. wire für I2C oder LiquidCrystal für die Ansteuerung eines alphanumerischen LCD-Displays (z.B. die 16 stelligen, 2 zeiligen Module)
Damit du dir nicht für jede neue Komponente deinen eigenen Code schreiben mußt, ist es sinnvoll mit der Bauteilbezeichnung +Arduino mal zu googeln. Meist trifft man dann auf eine sogenannte Libary oder agekürzt Lib. Diese liegt meist als ZIP Archiv vor. Diese entpackt man in einen Ordner mit dem Namen der Lib in den libraries Ordner der IDE Installation. Ein direkter Import in der laufenden IDE geht auch. Um die neue Lib nutzen zu können, muß man die IDE schließen und erneut öffnen.

Gruß Gerald

Die SoftSerial Klasse in der IDE basiert inzwischen auf NewSoftSerial! Deshalb braucht man das nicht extra zu verwenden. Siehe hier:
http://arduiniana.org/libraries/newsoftserial/

News: NewSoftSerial is in the core! Starting with Arduino 1.0 (December, 2011), NewSoftSerial has replaced the old SoftwareSerial library as the officially supported software serial library. This means that if you have 1.0 or later, you should not download this library. To port your code to 1.0, simply change all NewSoftSerial references to SoftwareSerial.

Wenn man was besseres will, greift man zu AltSoftSerial:
https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

Ganz ehrlich, ich bin genauso schlau wie vorher. Gibt es den Niemanden, der das Schritt für Schritt erklären kann und nicht nur einfach ein Stichwort fallen lässt???

Liege ich denn richtig, wenn mein Problem in der Ansteuerung der PINs liegt???

Schau dir mal in der IDE die Beispiele zur SoftwareSerial Klasse an.

Oder auch hier:

Da siehst du am Anfang das:

SoftwareSerial mySerial(10, 11);

Dann kann man mySerial ansonsten wie Serial verwenden. Aber der Punkt ist dass Serial die USB Verbindung zum PC ist! Da kannst du sonst nichts dranhängen. Statt dessen emuliert man an Pins 10 und 11 eine Schnittstelle in Software.
Man kann dann einfach Software Serial auf die Hardware Schnittstelle umleiten und umgekehrt. Wird da auch gezeigt.

Du solltest das aber anders als da gezeigt nicht mit 57600 Baud laufen lassen. Sondern nur 9600 oder weniger.

Hatte ich zufällig gerade selbst gebraucht:

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); // RX | TX

void setup()
{
  Serial.begin(9600);
  Serial.println("Start communication");
  BTSerial.begin(9600);  // HC-05 default speed in AT command more
}

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());
}

Ich wollte auch gerade einen Thread über ein ähnliches Modul erstellen (Das HC-06)
unzwar habe ich das selbe Problem, allerdings nutze ich schon SoftwareSerial :confused:

Habe den Fehler gefunden, ich habe mich von der Zeile SoftwareSerial BTSerial(2, 3); // RX | TX irritieren lassen.
Ich habe tatsächlich RX mit RX verbunden (Ich dachte es wurde schon getauscht).
Mit SoftwareSerial BTSerial(3, 2); // RX | TX klappt alles. Wobei RXD auf Pin 2 ist und TXD auf Pin 3

@ erni-berni

Wenn das mein Problem löst, bist du mein Held :grinning: !!