Christians Webseite        << zurueck        vor >>

HM-10 Bluetooth 4.0 Funkmodul

hm10 hm10 hm10

Das HM-10 ist ein V4.0 BLE Bluetooth Kommunikationsmodul. Der Chipsatz ist ein CC2541 von Texas Instruments.
Es eignet sich gut wenn man eine UART-Verbindung drahtlos erweitern oder Geräte per Smartphone kontrollieren möchte.

Das Modul wird auch häufig auf einer Adapterplatine montiert angeboten. Die Bezeichungen sind dabei nicht konsistent, u.a. werden die Namen AT-09, MLT-BT05, HM-10, JDY-08 oder CC2541 verwendet.
hm10 hm10 hm10

Diese Adapter-Version ist recht praktisch zum Experimentieren. Die wichtigsten Anschlüsse des Moduls sind auf Kontaktstifte herausgeführt und es ist ein 3V-Spannungsregler mit Verpolschutz enthalten. Aber Vorsicht, die Signalleitungen sind nicht abgesichert und vertragen maximal 3.3V! Wenn man sie mit einem 5V-Prozessorsystem verbindet überleben sie das nur zufällig. Hier muss unbedingt eine aktive Pegelanpassung oder ein Spannungsteiler verwendet werden.

Die Unterstützung des BLE-4.0 Standards bedeutet gleichzeitig das BT-2.0 classic nicht unterstützt wird.

Kontakt!

Die elektrische Verbindung des Moduls läuft über eine UART-Schnittstelle. Ein simpler USB-UART-Umsetzer (virtueller COM-PORT) ist zur Verbindung mit einem PC ausreichend.
hm10

Wenn das Modul mit einer BLE-Gegenstelle gekoppelt ist werden die UART-Daten über Bluetooth verschickt oder empfangen. Dieser Mode nennt sich "data mode".

Wenn keine Verbindung besteht dann ist das Modul im "command mode". In diesem Mode kann das Modul über sog. "AT"-Befehle konfiguriert und gesteuert werden.

Mit einem Terminal-Programm kann man einen ersten Kontakt herstellen (9600,8,1,N) und einige Einstellungen auslesen.
AT -> OK, das Modul hat den Befehl erkannt und antwortet
AT+VERR? -> HMSoft V710, die Version der Firmware
AT+NAME? -> DSD TECH, der Name des Moduls im Netzwerk
AT+PASS? -> 123456, das akutelle Passwort

Eine Liste aller vorhandenen Befehle findet sich z.B. im Blog von Martyn Currey.

Eine umfassende Anleitung zum Verbinden mit einem iPhone liegt auf der Webseite von HANGAR42.
Ein allgemeineres Tutorial ist im MarkerPortal.

AT+TYPE3 aktiviert die Passworteingabe beim Pairing. Das scheint beim iPhone aus Sicherheitsgründen notwendig zu sein.
Eine passende iPhone-App ist z.B. BLE Serial tiny.

Die Kopplung über Bluetooth mit einem PC ist in der Windows-Welt leider etwas schwierig und holperig weil die 4.0 BLE Unterstützung nicht ab Werk vorhanden ist. Der im alten BT-2.0 Standard übliche virtuelle COM-Port ist für den 4.0 Standard nicht verfügbar. Das ist bei Linux oder iOS besser gelösst.

Clone und Clone von Clonen

Der ursprüngliche Anbieter des HM-10 scheint Jinan Huamao Technology gewesen zu sein. Auf der Webseite ist die aktuellste Version der Firmware (V710) zu finden. Sie funktioniert am besten und sollte bevorzugt werden.

Wie bei "solchen" Sachen üblich gibt es eine grosse Anzahl von Kopien und Nachbauten. Die sehen auf den ersten Blick identisch aus, funktionieren aber nicht immer. Übersichten und Erklärungen sind beispielhaft auf den folgenden Webseiten zu finden:

Arik Yavilevich's Blog 1
Arik Yavilevich's Blog 2
Arik Yavilevich's Blog 3
Martyn Currey 1
Martyn Currey 2
PD5DJ.

hm10

hm10

Einige Module werden als "HM-10 kompatibel" oder auch unter dem Namen CC41 angeboten. Typischwerweise fehlt bei ihnen der 32KHz-Quarz (manchmal ist der aber wohl im Chip enthalten). Es soll teilweise möglich sein auf diese Clone die neueste Huamao-Software aufzuspielen.
hm10 hm10 hm10

Bei meinem Clone-Exemplar hatte ich kein Glück. Das Modul ist wahrscheinlich von der Firma Bolutek Das bestückte IC ist mit "CC2541" bestempelt. Aber ich habe den Verdacht dass es sich um ein CC2540 handelt weil keine Variante der CC2541-Firmware lauffähig war. Somit war kein Update auf eine aktuelle Version möglich. Die Software meldete sich mit der Version "v6.3" und dem Namen "BT05". Mein zweites Exemplar, von einem "ordentlichen Versender, war dann ein originales oder tatsächlich kompatibles Exemplar.

Wer die (vermutliche) Variante und den Status seines Moduls wissen möchte kann den folgenden Arduino Sketch ausprobieren. Er sendet verschiedene AT-Befehle und schätzt an Hand der Antworten um was es sich handelt.

Firmware Update

Es wird generell empfohlen vorab die aktuellste Firmware in das Modul zu flashen. Es fehlen sonst eventuell wichtige Bluetooth Funktionen oder Security Features die in aktuellen Smartphones verwendet werden.

Das Update kann über 2 unterschiedliche Wege erfolgen:

  • 1. Über den normalen UART-Port mit einem Bootloader
  • 2. Über den Debug-Port mit einem speziellen Programmer

Firmware Update per Bootloader

Diese Methode funktioniert nur wenn die SW des Moduls bereits einen Bootloader enthält! Das ist üblicherweise der Fall bei einem "originalen" HM-10 ab der SW-Version V508.

Huamao hat dieses Dokument erstellt in dem die notwendigen Schritte beschrieben werden. Alle benötigten Dateien und Programme sind in den Upgrade-Paketen enthalten, z.B. in HM-10 HMSoft CC2541 V710 firmware upgrade file. Im Download-Bereich von Huamao finden sich auch noch andere (ältere) Versionen und zugehörige Anleitungen.

An Hardware wird eine UART-Verbindung zum PC benötigt, genau wie weiter oben bereits beschrieben:
hm10

Zur Initialisierung des Updatevorgangs muss dem Modul das folgende AT-Kommando gesendet werden:
AT+SBLUP
Das Modul antwortet mit:
OK+SBLUP
Danach die Terminalverbindung beenden (den COM-Port freigeben) und das Updateprogramm HMSoft.exe starten. Die neue Firmware und den COM-Port auswählen auswählen und die Übertragung mit "Load Image" starten.

hm10

Nach wenigen Minuten ist alles erledigt und das ist Modul einsatzbereit :)
Diese Methode scheint recht stabil zu funktionieren. Auf meinem Win10-System konnte ich bisher alle (3 Stück) Module problemlos upgraden.

Im Netz zirkulieren diverse Anleitungen die den Vorgang detailliert beschreiben, z.B. dieser Link. Und auch alternative Lösungen die z.B. einen Arduino als USB-UART-Schnittstelle einsetzen. Auch hier sollte man daran denken das der Arduino auf 5V-Basis läuft (das HM-10 arbeitet mit 3V) und im Zweifel mindestens einen 1K-Widerstand in die Signalleitungen einschleifen (als poor-man's Pegelanpassung).

Firmware Update per Debug-Port und CCLoader

Diese Methode programmiert das Flash direkt über den Debug-Port. Dafür wird ein spezieller HW-Programmer benötigt wie er z.B. im CC2541-Development-Kit von TI enthalten ist.

Erfreulicherweise hat sich aber die Firma "RedBearLab" diesem Problem gewidmet und den CCLoader entwickelt und im GitHub veröffentlicht. Die Idee dahinter:
Ein Arduino-Uno wird durch spezielle Software zu einem HW-Programmer für den CC2541 gemacht. Auf dem PC läuft eine dazu passende Steuersoftware die über einen COM-Port alles kontrolliert und das Programmieren steuert.

hm10

Der Aufwand bei dieser Programmiermethode ist beträchtlich und enthält viele potentielle Fehlerquellen. Bereits das Kontaktieren der 3 Signale des Debug-Ports erfordert viel Löterfahrung. Hinzu kommen noch 2 Programme die "irgendwann" von "irgendwem" zusammengebaut wurden.. Aber es ist der einzige Weg für Module die keinen Bootloader enthalten.

Die Firmware für den Arduino steht als Arduino-Sketch zur Verfügung. Entsprechend benötigt man eine installierte Arduino-Programmierumgebung um sie aufzuspielen. Im Sketch steckt leider auch direkt ein Fehlerchen das zum ersten Frust führen kann. Der Arduino bleibt typischwerweise wegen Timingproblemen in einer Endlosschleife hängen. Ein wenig zusätzlicher Code kann das aber schnell lösen:
hm10

Der zweite SW-Teil ist die Windows-Kontroll-Software. Sie liegt im GitHub im Windows-Verzeichnis (falls man einen Windows-PC verwendet..). Es ist eine sehr simple "Commandline"-Software der beim Aufrufen einige Parameter übergeben werden müssen.

- COM-Port Nummer
- Dateiname der zu schreibenden Daten, muss zwingend im BIN-Format sein
- 0 oder 1, abhängig ob ein Leonardo-Board verwendet wird (1) oder nicht (0) (wegen abweichender Port-Belegung)

Der Aufruf erfolgt in einem Command-Fenster. Alle Dateien sollten im selben Verzeichnis liegen und am besten verzichtet man auch auf Leerzeichen in den Dateinamen. Wenn alles korrekt läuft dann erhält man die folgende Ausgabe:
hm10

Der Update-Prozess wird auch in vielen Internet-Beiträgen erläutert. Hier 2 Beispiele:
Update Anleitung Link 1.
Update Anleitung Link 2.

Wie bereits erwähnt hatte ich mit meinen "Clones" kein Glück beim Update. Schlimmer noch, auch die ursprüngliche Firmware ist weg und nirgends verfügbar. Die Module sind damit Elektronik-Schrott :/