Relais mit HM-10 (CC2541) ohne Arduino schalten

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

HM-10 in Batteriebetrieb ohne Arduino 0,4mA 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.
AT-commands über Bluetooth Terminal HM-10

settings

Send

Newline

None

HM-10 Terminal Bluetooth


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

HM-10 MIT App Inventor 2 BluetoothLE Extension Beispiel 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.app inventor Bluetooth Beispiel blocks BLE HM-10

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:
Mit Inventor BLE String Char Byte ProblemIch 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

APP Inventor String to Char / Byte Array

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.

DownloHM-10 ADC Wandler Spannung messen APP Inventorad 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

CC2541 HM-10 Bootloader flashen mit Arduino Programmieren Chip
CC2541 über Debug Port mit Arduino Nano flashen