Ich habe gerade mit zwei Modulen gespielt (angeschlossen am FTDI USB Adapter) und die Konfigs eingestellt (FU3, CH100, 11dbm, 115200 baud und probeweise AT+U8O1 (eight data bits, odd check, and one stop bit) ausprobiert. Alles wurde korrekt im Serial Monitor bestätigt. Nach dem Neustart der module wollte ich wiederholt ein paar Änderungen machen, doch nun bekomme ich auf den Befehl "AT" kein OK mehr zurück, sondern komische Hieroglyphen (EI⸮⸮J⸮) - alle Baudrates ausprobiert, probiert alles auf default zu setzen - kein Erfolg. Hat jemand dafür eine Lösung?
Direkt kann ich bei deinem Problem nicht helfen, ist mir noch nicht passiert.
Aber probiere mal das Tool dieser Seite.
Das ist sehr hilfreich.
Hi,
ich hatte mir irgendwann mal eine Art Erkennung für die Baudrate und das BT-Modell gebaut.
Hatte mehrere Module im Einsatz, die mal mit, mal ohne Linefeed waren.
Sah in etwa so aus:
uint8_t wiVersion = 0; //0 not Set, 2 FC-114 (hc01.comV2), 3 1744 (VERSION:3.0-20170609), 4 ZS-40 (Firmware V3.0.6,Bluetooth V4.0 LE)
//Firmware V3.0.6,Bluetooth V4.0 LE - CR + LF AT+ROLE0 (Slave) Commands without " = "
#define WIBAUD 57600
SoftwareSerial WI(8, 7);
bool WiInitialization() {
unsigned long baud = WiFindCurrentBaud();
//Change Version to use Linefeed & Carriage Return
if (baud == 0) {
if(wiVersion == 0)
wiVersion = 3;
else
wiVersion = 0;
baud = WiFindCurrentBaud();
}
if (baud == 0) {
//Error
return false;
}
if (baud != WIBAUD)
if (ChangeWiBaud()) {
WI.begin(WIBAUD);
}
else {
if (baud != 0)
WI.begin(baud);
return false;
}
return true;
}
unsigned long WiFindCurrentBaud() {
static const unsigned long rates[] = {4800, 9600, 19200, 38400, 57600, 115200};
uint8_t numRates = sizeof(rates) / sizeof(unsigned long); //6
for (int rn = 0; rn < numRates; rn++) {
WI.begin(rates[rn]);
WI.setTimeout(100);
WI.flush();
if (wiVersion >= 3) {
WI.println("AT");
delay(100);
}
else {
WI.print("AT");
delay(1000);
}
if (WI.available()) {
//Read what´s still on the buffer
while (WI.available())
WI.read();
return rates[rn];
}
}
return 0;
}
// AT+BAUD<X> -> OK<X>
// X=4 : 9600bps (Default)
// X=6 : 38400bps
// X=7 : 57600bps
// X=8 : 115200bps
bool ChangeWiBaud() {
if (wiVersion != 3)
WI.print("AT+BAUD7");
else
WI.println("AT+UART=57600,0,0");
delay(1000);
if (WI.available()) {
//Read what´s still on the buffer
while (WI.available())
WI.read();
return true;
}
else
return false;
}
Sicher nicht das prachtvollste Stück Code, hat mir damals aber ausgereicht und 3-4 Modelle erkannt und entsprechend konfiguriert.
Ich habe es wieder hinbekommen. Der trick war "AT+DEFAULT" MEHRMALS zu senden bis ein OK zurück kam.
skaman82:
Ich habe es wieder hinbekommen. Der trick war "AT+DEFAULT" MEHRMALS zu senden bis ein OK zurück kam.
Prima und danke für die Rückmeldung.