ich würde sagen du hast die falsche baudrate/geschwindigkeit.
ich würde sagen du hast die falsche baudrate/geschwindigkeit.
das leben ist hart, aber wir müssen da durch.
Danke für den Tip. Damit werd ich gleich mal rumspielen.
Ansonsten habe ich mir vorhin auch mal einen Pegelwandler besorgt, damit ich den Chip nicht grille, falls ich es nicht schon getan habe
//Edit: Gibt es eigentlich ne Art Faustformel zur Berechnung der richtigen Baud-Rate? Bzw. woraus setzt sich die Rate eigentlich zusammen?
Hmmm....also bisher hab ich mit dem Ändern der Baudrate keinen Erfolg gehabt.
Die Ausgabe sieht immer noch wie folgt aus:
Code:Send something in serial-monitor or in bluetooth-terminal Here we go 69 82 82 79 82 61 50 48 49 13 10 69 82 82 79 82 61 49 48 49 13 10 -1 -1 -1 -1Code:#include <SoftwareSerial.h> SoftwareSerial softSerial(2, 3); // RX, TX void setup() { Serial.begin(9600); softSerial.begin(115200); delay(100); softSerial.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity // 115200 can be too fast at times for NewSoftSerial to relay the data reliably softSerial.begin(9600); // Start bluetooth serial at 9600 Serial.println("Send something in serial-monitor or in bluetooth-terminal"); delay(1000); softSerial.println("AT"); delay(1000); softSerial.println("AT+NAMEfunnylilbluetooththing"); Serial.println("Here we go"); delay(500); // Reset all settings. softSerial.write("AT+RENEW"); delay(300); //AT+ROLE1 = slave //AT+ROLE0 = is master softSerial.write("AT+ROLE1"); delay(300); //AT+PASSxxxxxx sets the password xxxxxx (6 characters) softSerial.write("AT+PASS000001"); delay(300); //The work mode only works for the Master HM-10. //AT+MODE0 = Transmission Mode //AT+MODE1 = Remote Control Mode //AT+MODE2 = Modes 0 + 1 softSerial.write("AT+MODE0"); delay(300); //AT+IMME0 = wait until "AT+START" to work //AT+WORK1 = connect right now softSerial.write("AT+IMME0"); delay(300); softSerial.write("AT+BAUD9600"); delay(300); //AT+START = AT+WORK softSerial.write("AT+START"); delay(300); } void loop() { if (softSerial.available()) softSerial.print("AT"); delay(500); Serial.println(softSerial.read()); if (Serial.available()) softSerial.println(Serial.read()); }
Ich wär momentan froh, wenn ich einfach auf ein AT ein OK bekommen würde...
//Edit: Der Chip auf meinem Modul ist übrigens ein CC2541.
- - - Aktualisiert - - -
Komisch....jetzt spuckt mir das HM-10 ein OK aus mit diesem Code:
Blöd nur, dass ich es bluetoothseitig vom Smartphone oder PC nicht finden kann.Code:#include <SoftwareSerial.h> //SoftwareSerial softSerial(6, 5); // RX, TX HC-05 SoftwareSerial softSerial(2, 3); // RX, TX HM-10 void setup() { Serial.begin(9600); softSerial.begin(9600); // Start bluetooth serial at 9600 Serial.println("Send something..."); delay(300); softSerial.println("AT"); delay(300); /* softSerial.write("AT+ROLE0"); delay(300); softSerial.write("AT+PASS000001"); delay(300); softSerial.write("AT+MODE2"); softSerial.write("AT+WORK1"); delay(300); */ } void loop() { if (softSerial.available()) Serial.write(softSerial.read()); if (Serial.available()) softSerial.write(Serial.read()); }
- - - Aktualisiert - - -
Finally it works!
Code:#include <SoftwareSerial.h> //SoftwareSerial softSerial(6, 5); // RX, TX HC-05 SoftwareSerial softSerial(2, 3); // RX, TX HM-10 void setup() { Serial.begin(9600); softSerial.begin(9600); // Start bluetooth serial at 9600 Serial.println("Send something..."); delay(300); Serial.println("AT"); softSerial.println("AT"); delay(500); Serial.println("AT+NAMEansgar"); softSerial.println("AT+NAMEansgar"); delay(500); Serial.println("AT+PASS000001"); softSerial.println("AT+PASS000001"); delay(500); Serial.println("AT+ROLE0"); softSerial.println("AT+ROLE0"); delay(500); Serial.println("AT+MODE2"); softSerial.println("AT+MODE2"); delay(500); Serial.println("AT+WORK1"); softSerial.println("AT+WORK1"); delay(500); } void loop() { if (softSerial.available()) Serial.write(softSerial.read()); if (Serial.available()) softSerial.write(Serial.read()); }
liefert im Serial-Monitor folgendes zurück:
(die Ausgabe ist war was durcheinander....aber hauptsche es funktioniert erstmal! Jetzt weiß ich immerhin, dass ich den Chip nicht mit 5V gegrillt habeCode:Send something... AT AT+NAMEansgar AT+PASS000001 AT+ROLE0 AT+MODE2 AT+WORK1 OK +NAME=ansgar OK +PASS=000001 OK +ROLE=0 OK)
Probleme hat das softSerial.write() gemacht, wobei ich gestern getestet hatte, ob alles mit write() oder print() funktioniert. Scheinbar ist wirklich ein println() nötig!
- - - Aktualisiert - - -
Arrrrgh....doch nicht.
Er hat kurzzeitig reagiert auf die AT-Commands.
Aber nun nicht mehr. Jetzt bekomme ich keine Antwort mehr vom Modul.
Also habe ich mal mein Austauschmodul angeklemmt....und da bekomme ich mit exakt dem selben Code wieder so ne komische Zahlenabfolge.
Ich werd jetzt mal die Delays hochschrauben und sehen, obs daran liegt.
//Edit: Infos zum HM-10 gibts übrigens hier: http://www.jnhuamao.cn/showNews.asp?id=87
Geändert von Cysign (04.12.2015 um 01:02 Uhr)
Ich vermute langsam, dass das eine Modul nen Defekt aufweist.
Beim zweiten Modul kann ich die AT-commands senden und erhalte auch als Feedback ein OK.
liefert mir soweit folgendes zurück:Code:#include <SoftwareSerial.h> SoftwareSerial softSerial(10, 11); // RX, TX void setup() { Serial.begin(9600); softSerial.begin(9600); Serial.println("Taraaaa"); delay(30); softSerial.println("AT"); //OK if it's connected properly delay(30); softSerial.println("AT+BAUD4"); // Sets Baud to 9600 delay(30); softSerial.println("AT+NAMEBRUNO"); // set name delay(30); softSerial.println("AT+ROLE1"); // ROLE1 slave - ROLE0 master delay(30); //softSerial.println("AT+MODE0"); // transmission mode, master only //delay(30); softSerial.println("AT+PASS000001"); // set password delay(30); //softSerial.println("AT+IMME0"); // wait for AT+START to work //delay(30); //softSerial.println("AT+START"); // start //delay(30); } void loop() { if (softSerial.available()) Serial.write(softSerial.read()); if (Serial.available()) softSerial.write(Serial.read()); }
Code:Taraaaa OK +BAUD=4 OK +NAME=BRUNO OK +ROLE=1 O +PASS=000001 OK
Geändert von Cysign (12.01.2016 um 01:24 Uhr)
Oh man...das Modul raubt mir noch den letzten Nerv.
Nachdem ich nun einige Zeit verschiedene AT-Commands ausprobeiren konnte (keins hat zu einer erfolgreichen Verbindung zum Smartphone geführt), antwortet auch dieses Modul nun nicht mehr.
Da ich kein bis dato ungenutzten Commands verwendet habe, frage ich mich grade, ob der Speicher auf dem Modul nur eine sehr, sehr begrenzte Anzahl an Writes durchhält.
Ich denke, ich bewege mich zwischen 50-200 Schreibzugriffen. Eigentlich sollte der verbaute Speicher eher 10000 Schreibzugriffe aushalten, aber anderst kann ich mir das Versagen der beiden Module nicht erklären.
Ich hab noch drei Ersatzmodule, die ich auf die Breakoutboards der zwei defekten auflöten könnte. Allerdings würde ich lieber gerne die Ursache für das Versagen wissen, bzw. die beiden endlich ordentlich verwenden können.
//Edit: Ok, da ich weiter kommen wollte, habe ich das Modul auf einem Breakoutboard getauscht.
Und eben habe ich das schönste AT-Kommando überhaupt rausgefunden:
AT+HELP
Das neue Modul reagiert darauf mit folgendem Output:
AT+VERSION liefertCode:******************************************************************** * Command Description * * ---------------------------------------------------------------- * * AT Check if the command terminal work normally * * AT+RESET Software reboot * * AT+VERSION Get firmware, bluetooth, HCI and LMP version * * AT+HELP List all the commands * * AT+NAME Get/Set local device name * * AT+PIN Get/Set pin code for pairing * * AT+PASS Get/Set pin code for pairing * * AT+BAUD Get/Set baud rate * * AT+LADDR Get local bluetooth address * * AT+ADDR Get local bluetooth address * * AT+DEFAULT Restore factory default * * AT+RENEW Restore factory default * * AT+STATE Get current state * * AT+PWRM Get/Set power on mode(low power) * * AT+POWE Get/Set RF transmit power * * AT+SLEEP Sleep mode * * AT+ROLE Get/Set current role. * * AT+PARI Get/Set UART parity bit. * * AT+STOP Get/Set UART stop bit. * * AT+START System start working. * * AT+IMME System wait for command when power on. * * AT+IBEA Switch iBeacon mode. * * AT+IBE0 Set iBeacon UUID 0. * * AT+IBE1 Set iBeacon UUID 1. * * AT+IBE2 Set iBeacon UUID 2. * * AT+IBE3 Set iBeacon UUID 3. * * AT+MARJ Set iBeacon MARJ . * * AT+MINO Set iBeacon MINO . * * AT+MEA Set iBeacon MEA . * * AT+NOTI Notify connection event . * * AT+UUID Get/Set system SERVER_UUID . * * AT+CHAR Get/Set system CHAR_UUID . * * -----------------------------------------------------------------* * Note: (M) = The command support slave mode only. * * For more information, please visit http://www.bolutek.com * * Copyright@2013 www.bolutek.com. All rights reserved. * ********************************************************************
Allerdings hätte ich statt "3.0.6" eher sowas wie "540" (oder darunter) erwartet.Code:+VERSION=Firmware V3.0.6,Bluetooth V4.0 LE
Geändert von Cysign (12.01.2016 um 03:55 Uhr)
Okay, beim Rumspielen mit der Baud-Rate habe ich irgendwann keine Reaktion vom Modul mehr bekommen (einfach gar keine Reaktion mehr).
Also habe ich im Datenblatt des HM-10 nachgesehen, welche Baudraten es gibt.
Da ich AT+BAUD2 eingegeben hatte, habe ich diese Baudrate natürlich als erstes versucht.Code:0 9600 1 19200 2 38400 3 57600 4 115200 5 4800 6 2400 7 1200 8 230400 Deafult: 0 (9600)
Erfolgreich 'wiederbeleben' konnte ich mein HM-10 jedoch mit einer Baud von 4800, welche eigentlich mit AT+BAUD5 eingestellt werden sollte.
Scheinbar liegt hier das Problem, denn auch mein anderes HM-10, welches ich als verloren glaubte, konnte ich mit der selben Baudrate 'wiederbeleben'.
Also im Arduino, dann wieder BAUD4 (9600) einstellen und danach wieder zurück zuCode:softSerial.begin(4800);Allerdings ist es mir nach wie vor nicht geglückt, mein Handy mit dem Modul zu koppeln.Code:softSerial.begin(9600);
//Edit: Scheinbar ist die Kommandoliste unter AT+HELP nicht komplett. AT+TYPE kommt dort zum Beispiel gar nicht vor.
//Edit2: So wies aussieht, ist mein vermeitliches HM-10 gar keins. Bolutek nennt sein Modell nämlich CC-41A. Was die Unterschiede zum HM-10 sind (bis auf den einen optischen) weiß ich noch nicht. Auch ist mir bisher nicht bekannt, ob ich irgendwie die Firmware des HM-10 darauf nutzen kann.
Laut https://forum.arduino.cc/index.php?topic=334466.0
Although both modules look very similar, CC-41A requires that AT commands are terminated by LF+CR and there are differences in the command set.
Interessanter Link zum CC41-A:
https://rydepier.wordpress.com/2015/...41a-bluetooth/
Leider funktionieren die hier dokumentierten ATA-Befehlr nicht uneingeschränkt:
https://halckemy.s3.amazonaws.com/up...GOIH90OKGT.pdf
Geändert von Cysign (12.01.2016 um 21:34 Uhr)
Soweit ich nun herausgefunden habe, soll man das CC41-A auch mit der Firmware des HM-10 bespielen können.
Bzgl. des Pinouts vom CC Debugger zum Modul:
https://flashandrc.wordpress.com/201...sted-on-hm-10/
Den CC Debugger kann man auch per Arduino emulieren:
https://github.com/RedBearLab/CCLoader
Nun muss ich nur noch rausfinden, woher ich ein Dumb einer installierten Firmware bekomme und wie ich diese aufspiele![]()
Auch wenn es nichts mehr bringt, die Zahlen am Anfang heißen nur
ERROR=201
ERROR=101
while (1) {
softSerial.listen();
while (softSerial.available() > 0) {
char inByte = softSerial.read();
Serial.write(inByte);
}
if (Serial.available()){
while (Serial.available()){
char c = Serial.read();
softSerial.write(c);Serial.write(c);
}
Serial.println("->");
softSerial.println("");
}
}
Sehr schwierige Frage Zufalls
AT+BAUD1: 1200bps
AT+BAUD2: 2400bps
AT+BAUD3: 4800bps
AT+BAUD4 9600bps (velocidad por defecto)
AT+BAUD5: 19200bps
AT+BAUD6: 38400bps
AT+BAUD7: 57600bps
AT+BAUD8: 115200bps
Esto de no tener documentación del bicho es un rollo
Lesezeichen