HM-10 (CC2541) hat digitale Ausgänge und die lassen sich per AT- Befehle schalten. Die AT -Befehle können nicht nur über Serielle Schnittstelle gesendet werden. Sondern Ferngesteuert über Bluetooth Verbindung. Somit ist es möglich nur mit einem HM-10 (CC2541) Modul und einem Smartphone eine Steuerung aufzubauen. Ein Arduino oder zusätzliches Mikrocontroller ist dafür gar nicht nötig. Sobald Ihr Handy mit HM-10 Modul verbinden ist, Senden Sie AT -Befehl vom BLE Terminaltprogramm und HM-10 Modul schaltet ein Pin hoch oder runter. Ich werde auch eine Beispiel APP mit app Inventor Ihnen vorstellen.
Es stehen 10 digitale Ports bei einem HM-10-Modul zu Verfügung. Die können Entweder als Inputs oder Outputs benutzt werden werden.
Die 8 Ports besitzen auch ADC und können die Spannungen messen. Spannung wird in Volt gemessen mit 2 Nachkommastellen (Befehl: „AT+ADC4?“ Antwort „OK+ADC4:2.10“ ).
Datenblatt datasheet HM-10
Bezugsquelle Original HM-10 Modul Auf jeden Fall zu dem Zeitpunkt wo ich es gekauft habe hat der Anbieter keine fake Module verkauft
HM-10 (CC2541) für Fernsteuerung über Bluetooth konfigurieren.
Voraussetzung ist ein Original HM-10 Modul zu besitzen. Die HM-10 Fälschungen unterscheiden sich vom Original HM-10 Modul nur durch Firmware und unterstützen nicht alle AT-Befehle. Manchen fehlt sogar der Bootlader, so das Aufspielen richtiger Firmware über Serielle Schnittstelle nicht möglich ist (Genau so ein Modul aus China habe ich erwischt, war dafür aber billig)
So erkennt man Original HM-10 Modul
AT+VERS? oder AT+VERR? Antwort sollte lauten HMSoft V540
Dieses Tutorial bezieht sich auf HM-10 Modul mit Firmwareversion V540
Wenn das HM-10 Modul (CC2541) andere Firmwareversion hat lesen Sie hier weiter.
HM-10 in Batteriebetrieb mit 0,4 mA Stromverbrauch
Diese Betriebsart ist nur im Verbindung mit MODE1 und MODE2 möglich
Im Mode 1 Sind Ports so konfiguriert
2 Digitale Outputs PIO2, PIO3
8 Digitale/Analoge Inputs PIO4 – PIOB
Digitale Outputs behalten ihren Zustand nach dem Trennung der Bluetooth Verbindung. Und das ist auch ganz wichtig.
Im Mode 2 Sind Ports so konfiguriert
10 Digitale Outputs PIO2, PIOB
Digitale Outputs verlieren ihren Zustand nach dem Trennung der Bluetooth Verbindung.
So stellen wir den Stromsparmodus bei HM-10 Modul ein:
AT+MODE1 // Ermöglicht AT befehle über Bluetooth zu empfangen
AT+PWRM0 // Stromsparmodus 0,4 mA unverbunden, 8 mA verbunden
Damit ist es möglich: Bluetooth Verbindung aufbauen, Steuerbefehl senden und die Bluetooth Verbindung trennen. Bei diesem Betriebsart nur der Verbraucher (falls eingeschaltet) zieht den Strom + 0,4 mA HM-10 Modul in sleep Mode (empfangsbereit).
Nachdem wir mit dem Befehl AT+MODE1 über serielle Schnittstelle HM-10 in Fernsteuerung Modus umgeschaltet haben, können wir zum Handy greifen. Und von da alles anderes erledigen. Ich habe das Programm „Serial Bluetooth Terminal„entdeckt, das ist die beste app meine Meinung nach zwischen Bluetooth Terminals. Nicht vergessen die AT – Befehle werden ohne abschlusszeichen gesendet. Dazu bitte im „settings“ die Einstellung „Send“ „Newline“ auf „None“ umschalten.
settings
Send
Newline
None
Jetzt können die PIO2- PIO3– Ausgänge
mit AT befehlen umgeschaltet werden.
AT+PIO20
AT+PIO21
AT+PIO30
AT+PIO31
Beispiel APP MIT App Inventor 2 für HM-10 Modul
Ich habe einfache APP geschrieben, die 2 Ausgänge von dem HM-10 Modul schaltet.
Als Grundgerüst wurde APP vom Martyn Currey verwendet. Das App hat 4 Buttons: BLE Geräte suchen, Verbinden mit ausgewähltem Gerät, GPIO’s PIO2 PIO3 Ein / Aus-schalten. Download App: HM_10_GPIO_Steuerung_1 Download App Inventor 2 Projekt: HM_10_GPIO_Steuerung_1_Projekt |
Bei manchen Geräten muss extra für diese App Standortfreigabe gemacht werden , sonst läuft die Bluetooth suche nicht. Dazu gehen Sie im Smartphone zu Einstellungen / Apps, finden das Programm “HM-10 Bluetooth control 1”, scrollen Sie bis zum Berechtigungen und erteilen Standortermittlung( warum auch immer, ohne geht’s nicht).
Sieht simpel aus. Nicht wahr. Allerdings war es nicht so einfach wegen einem Fehler in der BluetoothLE Extension (Komponente). Ich habe mehrere Stunden gebraucht um das Problem zu finden. Das Problem liegt daran das BluetoothLE Extension die Strings falsch bearbeitet. Die Sendet Strings mit einem “00”-Zeichen am ende. Dieses Zeichen wird allen Strings angehängt. Arduinos haben damit kein Problem. Im Terminals wird “00”-Zeichen nicht angezeigt. Allerdings HM-10 Modul nimmt die AT-commands mit “00”-Zeichen am ende nicht an.
Die Lösung: AT-commands Byteweise zu senden. Aber die Funktion String to Char -Array oder String to Byte-Array gibt es bei App Inventor nicht. Pointers? Nein, auch nicht gehört.
Sie Werden in Quellcode das AT-Command AT+PIO21 so vorfinden:
Ich habe die Zahlen aus ASCII Tabelle entnommen. 65 steht für “A”
Bei manchen Geräten muss extra für diese App Standortfreigabe gemacht werden , sonst läuft die Bluetooth suche nicht. Dazu gehen Sie im Smartphone zu Einstellungen / Apps, finden das Programm “HM-10 Bluetooth control 1”, scrollen Sie bis zum Berechtigungen und erteilen Standortermittlung( warum auch immer, ohne geht’s nicht).
String to Byte Array in APP Inventor für BluetoothLE
Ich habe es doch geschafft aus einem String ein list (Array) mit Bytes zu bauen
Passwortgeschütztes Paaren
Es gibt aber ein Sicherheitsproblem. Mein Nachbar kann auch sein Handy mit einem HM-10 verbinden. Und wenn er AT-Befehle kennt, kann er mein Licht einschalten. Leider unterstützt BluetoothLE Extension keine Authenticated pairing (pairing password).
Aber es gibt einen Ausweg. Es gibt Möglichkeit HM-10 Modul so zu konfigurieren, das er nur mit einem Gerät mit bestimmten MAC sich verbinden lässt.
So finden Sie die Bluetooth Adresse eigenes Android Gerätes:
Einstellungen / Telefoninfo / Status Bluetooth-Adresse C8:D7:B0:9C:87:77
Mit dem AT-command AT+AD können Sie die MAC- Whitelist erstellen : AT+AD1C8D7B09C8777, AT+AD2[MAC], AT+AD3[MAC]
AT+ALLO1 bewirkt das die Verbindung nur mit zugelassenen MAC-Adressen (Max. 3 Adressen) aufgebaut wird. [ Ich musste feststellen dass, mit meinem Handy (Galaxy A3) das nicht funktioniert, aber mit meinem Tablet
(Galaxy Tab 4 10.1) geht alles super]
Ich habe hier Quatsch geschrieben. Neue Erkenntnis: Authenticated pairing ( Passwortgeschütztes Paaren ) funktioniert wunderbar. Es wird vom Android verwaltet und hat mit BluetoothLE Extension von APP Inventor nichts zu tun. Passwort Einrichten:
AT+PIN132456 ( Passwort 6 Zeichen )
AT+TYPE2
Nach dem betätigen des Buttons „Verbinden“ werden Sie vom Betriebssystem aufgefordert pairing password einzugeben. Aber leider bei jeder Verbindung
Weitere Erkenntnis:
AT+TYPE3
Bewirkt das der Smartphone den PIN nur ein Mal anfragt, dann werden die Verbindungsdaten gemerkt.
HM-10 Stromverbrauch reduzieren
Auf dem HM-10 Modulen sind Spannungsregler verbaut. Leider kann man nicht erkennen welche das sind. Die meiste Spannungsregler verbrauchen etwas Strom, auch wenn die unbelastet sind. Ich kenne einen Spannungsregler der sehr sparsam ist und ist sehr gut geeignet für andauernde batteriebetrieb. Falls Sie HM-10 Modul mit mehr als 3,3 Volt betreiben wollen empfehle ich Ihnen diesen Spannungsregler HT7333 Eigenverbrauch 0,04mA. Mindestspannung ist 2,5V + 0,09V = 2,59V Maximale Spannung 12V
Problem mit HM-10 Board mit 6 Pins aus China
Als ich versucht habe HM-10 Modul in Modus 2 zu betreiben, gab es ein Problem. Auf einmal hat Modul 35mA verbraucht, auch ohne Bluetooth Verbindung. Nach etwas Recherche habe ich herausgefunden das PIO4 mit + 3,3 Volt Stromversorgung verbunden ist, die Schuld daran hatte die Grundplatine, die wahrscheinlich fehlerhafte Layout hat. In Mode 2 schalten die GPIO s als Ausgänge mit 0 Zustand und bauen somit direkt ein Kurzschluss von 3,3 Volt auf Masse über GPIO. Ein Wunder dass mein Modul das überlebt hat. Nachdem ich die kleine Platine etwas angehoben habe und Lötverbindung gelöst habe, hat alles richtig funktioniert. Ich denke es ist besser direkt die kleine Platine ohne Adapter zu kaufen oder Adapter separat zu kaufen und überprüfen ob da alles okay ist.
HM-10 ADC Spannung messen
HM-10 hat ein ADC am Bord. Im AT+MODE1 stehen 8 Analoge Inputs PIO4 – PIOB zu verfügung.
Der AD-Wandler kann mit dem AT Command AT+ADCB? (hier PIOB) ausgelesen werden. Der Antwort hat folgende Format OK+ADCB:3.30 . Genauigkeit ist natürlich vom Referenzspannung abhängig. Betriebsspannung am CC2541 IC ist gleich Referenzspannung. Sorgen Sie dafür das Spannungsregler ausreichend Spannung am Eingang hat damit 3,3V zu Verfügung stehen. 3,3V ist die maximale messbare Spannung. Es ist möglich mit Hilfe eines Spannungsteilers höhere Spannungen zu messen. In dem Fall soll das Messwert mit einem Faktor multipliziert werden.
Download App und App Inventor 2 Projekt: HM-10 GPIO Steuerung 2
Firmware Update
So prüfen Sie die Version ihrer Firmware
AT+VERS? oder AT+VERR?
Wenn das Modul diese AT Befehle nicht kennt, prüfen Sie ob die Update Funktion und Bootloader vorhanden sind.
AT+SBLUP ist ein Befehl der die Update initialisiert. Führen Sie das Befehl AT+SBLUP aus. Wenn Sie die Antwort OK+SBLUP bekommen, dann kann Firmware mit HMSoft.exe upgedatet werden. Updater und Aktuelle Firmware V701 von 01.2019 sind hier: HMSoft-10-2541-V701
ACHTUNG nach dem Update zu Firmware V701 und den Befehlen AT+RENEW und AT+RESET wechselt HM-10 auf 115200 Baud
Wenn auf AT+SBLUP kein Antwort kommt. Dann muss Firmware auf anderem Weg zum CC2541 gelangen. Dafür ist ein CC Debugger vorgesehen. Aber es gibt eine Möglichkeit die Firmware mit Arduino zu Flashen https://github.com/RedBearLab/CCLoader. Bootloader in den CC2541 Chip Programmieren