Forum: Mikrocontroller und Digitale Elektronik [teilweise gelöst] HC-05 über AT Commands parametrieren


von Matthias S. (mathies_s)


Lesenswert?

Hallo zusammen,

Ich sitze gerade an meinem ersten Arduino Projekt und stosse gerade auf 
ein paar Probleme. Ich habe ein Arduino Leonardo mit einem HC-05 BT 
Modul. Es funktioniert soweit alles super bis auf das parametrieren über 
AT Commands.

Ich komme ohne Probleme in den AT Command Mode und wenn ich den Serial 
Monitor benutze, funktionieren auch alle AT Kommandos ohne Probleme. Im 
Code sende ich dabei einfach alles vom Serial Monitor zum BT Device 
(Serial -> Serial1). Dabei nutze ich sowohl CR als auch NL bei den 
Serial Monitor Optionen. Funktionierende Beispieleingabe:

AT+NAME=Testmodul

Sende ich jetzt einen Commando String direkt aus einer Funktion, hat 
dieser keine Auswirkung und ich weiß nicht warum?! Nicht 
funktionierender Beispielcode:

Serial1.write("AT+NAME=Testmodul\r\n");

Wo liegt da mein Fehler? Im Endeffekt ist das die gleiche Eingabe wie 
über den Serial Monitor, Commando Mode liegt vor, gleiche 
Randbedingungen... :(

Danke und Gruß,
mathies

von stefanus (Gast)


Lesenswert?

Du darfst die Kommandos nicht mit Zeilenumbruch terminieren!

Diese HC Module benutzen einen Timeout (von ca 500ms), um das Ende des 
Befehls zu erkennen. Und wenn dann der Befehl unerwartete Zeichen (\r\n) 
enthält, wird er ignoriert.

Die Antworten haben übrigens auch keine Zeilenvorschübe. Sehr merkwürdig 
finde ich das.

von Matthias S. (mathies_s)


Lesenswert?

Hi,

laut Bedienungsanleitung benötigt der HC-05 den Zeilenumbruch und 
Zeilenvorschub.

Zitat:
HC-03 and HC-05’s command should end up with “\r\n”. It means when you 
finish programming, you should add terminator (“ENTER” or “0x0d 0x0a”) 
to the program.
It’s different from HC-04 and HC-06 (They don’t need terminator).

Wie gesagt, über den Serial Monitor funktioniert es ja einwandfrei.

Ich habe es jetzt teilweise hinbekommen. Irgendwie scheint was im 
Sendepuffer zu hängen, denn für das erste Kommando bekomme ich das ASCII 
Zeichen 254 zurück. Schicke ich das Kommando nochmal, bekomme ich ein OK 
und es hat funktioniert. Somit sieht die Funktion jetzt in etwa so aus:
1
Serial1.write("AT+NAME=Testmodul\r\n");
2
3
// read out response --> ASCII sign 254
4
5
Serial1.write("AT+NAME=Testmodul\r\n");
6
7
// read out response --> OK

Grüße,
mathies

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.