HC-05 von 9600 auf 115200 Baud stellen


Hallo
Ich möchte gerne zwei Arduinos mithilfe von zwei Hc-05 Modulen kommunizieren lassen, was auch alles klappt über 9600 Baud.
Jedoch ist mir dies zu langsam und im möchte es auf 115200 Baud stellen. Wenn ich das bei beiden Modulen mache, kommt am am Seriellen Monitor folgendes raus ⸮ ⸮ ⸮…
Was kann ich tun?

Code ELegoo Mega2560:

#define button 8
int buttonState = 0;

void setup() {
  pinMode(button, INPUT);
  Serial.begin(115200);
}

void loop() {
  buttonState = digitalRead(button);
  if (buttonState == HIGH){
    Serial.write('1');}
    else{
      Serial.write('0');    
    }

}

Code Arduino Nano:


#define ledPin 9
int state = 0;


void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(115200);
 

}

void loop() {
  if (Serial.available() > 0){
    state = Serial.read();
    Serial.write(state);
  }
  if(state == '1'){
    digitalWrite(ledPin, HIGH);
   }
  else if(state == '0')
    {
    digitalWrite(ledPin, LOW);
  }
}

Du solltest nicht das HC-05 UND den Seriellen Monitor auf den gleichen Pins betreiben.
Auch wenn es erstmal so aussieht es ginge es...

In jedem Fall, musst Du aber unten rechts im serMon dann auch auf 115200 stellen, wenn da 9600 drin steht.
PS: Der 06 kann auf 115200 gestellt werden - der 05 ist doch fest defult auf 9600 und für AT 38400... - Du musst also erst im AT-Modus mit AT+UART die Geschwindigkeit setzen...

Habe gerade selber entdeckt und gemacht, jetzt bringt er manchmal 0 oder 1 im serMon aus.
Könnte das ein Wackelkontakt sein?

@my_xy_projekt Habe ich alles schon gemacht - mit (AT+UART=115200,0,0) und es gibt trotzdem willkürlich 0 oder 1 im serMon aus.

Da wird sich die Doppelbelegung der Pins bemerkbar machen.
Ich hätte das mit SoftwareSerial umgesetzt - manchmal gehts auch bis 115200 - wenn es da zu Problemen kommt könntest versuchen mit AltSoftwareSerial zu arbeiten. Der macht eine bessere Geschwindigkeit ist aber von den Pins nicht frei belegbar.

Hast du auch schon verstanden, dass die Serielle kein Bus ist?
Oder einfach nur ignoriert, weil dir das nicht in den Kram passt.....

Was meinst du damit?

Wo sind die Pins doppelt belegt, ich verstehe das nicht so…

Die Pin 0 und 1 hängen gleichzeitig am USB-UART.
Wenn Du den Seriellen Monitor benutzt, ist PIN 0 und 1 tabu.

Im reference-Design-Schematic siehst Du unten links den Chip, der die USB-Schnittstelle bedient. Und ganz unten rechts am Chip PD0 und PD1 geht sowohl die Verbindung ran, als auch die Leiste, die auf dem Board aufgelötet ist...

Seriell zum PC
Seriell zum HC-05
Seriell zum µC

Das sind nach meiner Zählung 3 Teilnehmer.
Seriell/ Uart ist aber nur eine P2P Verbindung.
Alles andere ist "verboten" bis unmöglich.

Mit SoftwareSerial har es geklappt - Danke :pray:

Bus heißt viele Teilnehmer an den gleichen Leitungen. Wie das dann funktioniert dafür gibt es verschiedene Techniken und Regeln.
Seriel ist aber eine 1 zu 1 Verbindung zwischen 2 Teilnehmern so wie das alte Telefohn ohne Konferenzschaltung.
Grüße Uwe

Hallo,
Thema ist ja inzwischen gelöst, aber was heist zu langsam. hast Du mal nur eine "1" auf dem Seriellen Monitor mit 9600 ausgegeben und mal beobachtet wie schnell das geht.
Heinz

Ja, also eine 1 mit einem Knopf was dann eine LED zum blinken bringt.

Wenn der HC-05 auf dem selben Port hängt...

Ich würde dir raten, die Serial-Geschwindigkeit zu verlangsamen und ein kleines delay(5); gegen das Prellen einzubauen.

Natürlich können prinzipiell 2 Teilnehmer lesen, was ein dritter sendet. Ein Sender merkt überhaupt nicht, ob jemand liest. (und wenn ja, wie viele)
Das Problem ist allerdings die Sendeleitung: Dass nicht zwei senden können, sollte schon klar sein. Eine nicht benutzte darf aber auch nicht verbunden sein, denn da liegt ein HIGH Potential drauf.

Das ist das eigentliche Problem.

Prinzipiell besteht eine UART Verbindung immer aus Tx und Rx.
Unter der Voraussetzung gibt es keine Möglichkeit eine gültige Verschaltung mit mehr als 2 Partnern aufzubauen.

Durch irgendwelche Schaltungstricks oder Weglassungen, kann man vielleicht etwas basteln. Aber dafür müssen schon profunde Kenntnisse vorliegen, im Köcher wohnen. Es ist und bleibt eine Basellösung.

UART ist per se nicht Kurzschluss fest. Zwei gegeneinander arbeitende Gegentaktendstufen können sich dabei zerstören. Arduino schützt sich durch Serienwiderstände gegen diese Zerstörung. Aber die Daten werden bei einer solchen Kollision zerstört/unbrauchbar.

RS232C muss per Definition solche Schaltungsfehler überleben. Aber auch hier opfern sich die Daten dabei.
Erst RS485 bietet die Auswahl der Senderichtung in Hardware, so sind dann auch mehr als 2 Partner möglich. Die Entscheidung, wer gerade senden darf muss allerdings in Software erfolgen.

CAN, LIN usw. können die Busarbitrierung in ihrer Hardware.

Arduino UNO und MEGA hat zwischen TX/RX vom ATmega328 zum RX/TX vom ATMEGA16U2 (USB Adapter) 500 Ohm 1 kOhm Widerstände. Wenn man einen andere TX/RX Leitung an D0 und D1 anschließt Wird der TX-Ausgang am Atmega16U2 nicht kaputt aber funktioniert auch wieder nicht. Die Verbindung Arduino (ATmega328) zum anderen Gerät funktioniert durch die Widerstände. Auf dieses Projekt bezogen müßte die Verbindung zum Treiber funktionieren aber nicht mehr die Verbindung über USB.

Grüße Uwe.

Kleine Anmerkung als (wie es bei uns hier heißt) I-Tüpferlreiter:
Die erwähnten Widerstände haben 1 Kiloohm. :-)

(Siehe

)