Mein Weg ins IoT (6): Schalten per Smartphone
23. Februar 2016
über
über
In der letzten Folge der Serie habe ich zum ersten Mal eine funktionierende IoT-Steuerung aufgebaut. Basis ist mein in C# programmierter MQTT-Client; man kann diesen auf zwei PCs irgendwo auf der Welt starten und Nachrichten hin- und herschicken, die über einen MQTT-Testserver in der Cloud weitergeleitet werden. Den Client hatte ich noch so erweitert, dass er empfangene Nachrichten automatisch über einen wählbaren (virtuellen) COM-Port weitergibt. Jetzt musste ich nur ein Board anschließen, das Kommandos interpretieren und etwas steuern konnte, am besten drahtlos. Ich habe diese Aufgabe mit dem Atmel SAM-D20-Board, einer Relaiserweiterung und einem Funksteckdosenset aus dem Baumarkt gelöst. Nun konnte ich die Lampe in meinem Home-Office schalten (siehe Folge 5).
Ein PC als Eingabegerät für Kommandos ist freilich etwas unhandlich; ich wollte daher noch mein Android-Smartphone (Galaxy S6) in die Steuerung einbinden. Eine kleine App musste her, von der ich die Nachrichten zum Schalten der Relais absetzen konnte. Am einfachsten erschien es mir, die Befehle über einfaches TCP/IP zu einem PC zu schicken, der sich mit dem Handy in einem gemeinsamen WLAN-Netzwerk befand. Denn Code zum Versenden von TCP/IP-Nachrichten mit Android/Java und zum Empfangen mit C# kann man vielfach im Netz finden. Außerdem ließen sich die Routinen dann immer wieder in allerlei kommenden Elektor-Projekten verwenden.
Gesagt, getan: Meinen MQTT-Client erweiterte ich so, dass er auf hereinkommende TCP/IP-Nachrichten lauscht und diese über MQTT weitersendet (Download von Quellcode und Exe-Datei siehe unten). Die Bedienung ist simpel: Zuerst müssen Sie ein MQTT-Topic wie zum Beispiel „Lamp“ eingeben, unter dem die Nachrichten veröffentlicht werden sollen (siehe Folge 4). Am besten abonnieren Sie sich auch gleich auf das Topic, um eine Rückmeldung zu haben, was wirklich über MQTT versendet wurde. Dann geben Sie die IP-Adresse ein, die der Rechner im Heimnetzwerk besitzt (zum Beispiel „192.168.0.10“, ein Tool wie der Network Scanner von SoftPerfect leistet hier gute Dienste). Zum Schluss klicken Sie auf den Button „TCP Listen“. Sie können nun noch eine weitere Instanz des MQTT-Clients auf einem entfernten Rechner starten, an den Sie eigene Elektronik hängen. Oder Sie probieren alles mit einem einzigen PC aus. Im entsprechenden MQTT-Client geben Sie noch den COM-Port an, an den Sie ihr SAM-Board, Arduino oder was auch immer angeschlossen haben.
Nun benötigte ich noch eine App, die TCP/IP-Nachrichten versenden konnte. Meine Kenntnisse in Android-Programmierung waren durch eine längere Pause etwas eingerostet und ich musste auch zuerst noch „Android Studio“ auf meinem neuen Laptop installieren. Wieder einmal sollte ich feststellen, dass Android und die IDE fortgeschrittene Entwickler mit einem mächtigen, gut gesicherten System verwöhnen. Einsteiger müssen sich allerdings durchbeißen. Man benötigt Geduld, starke Nerven und die Bereitschaft, viel Zeit zum Lernen mitzubringen. Wer nicht direkt in Android/Java programmieren will, für den gibt es verschiedene Ansätze, trotzdem eine Steuerung auf dem Smartphone hinzubekommen. Wir werden in Elektor und auch in dieser Serie noch öfter darauf zurückkommen.
Meine kleine App versendet TCP/IP-Nachrichten an eine wahlfreie IP-Adresse im Heimnetzwerk, beides ist in Textboxen einzugeben, bevor der „Send“-Button betätigt wird. Aus Zeitgründen habe ich weder ein Settings-Menü noch ein Timeout implementiert. Wenn der PC die Nachrichten nicht empfängt, weil der TCP-Listener auf dem MQTT-Client noch nicht gestartet ist oder die Adressen nicht stimmen, friert die Anzeige ein. Für eine erste Demo reicht es aber, und vielleicht können Sie den Code auch für eine eigene Steuerung von Irgendetwas auf dem PC verwenden.
So, nun konnte ich mit Kommandos wie „R 0 1 +“, „R 0 1 –“ meine Funksteckdose vom Smartphone aus schalten. So richtig komfortabel ist es allerdings nicht, Textnachrichten eintippen zu müssen. Und wir haben einen hohen Aufwand an Hardware. Das lässt sich sicher noch optimieren!
Ein PC als Eingabegerät für Kommandos ist freilich etwas unhandlich; ich wollte daher noch mein Android-Smartphone (Galaxy S6) in die Steuerung einbinden. Eine kleine App musste her, von der ich die Nachrichten zum Schalten der Relais absetzen konnte. Am einfachsten erschien es mir, die Befehle über einfaches TCP/IP zu einem PC zu schicken, der sich mit dem Handy in einem gemeinsamen WLAN-Netzwerk befand. Denn Code zum Versenden von TCP/IP-Nachrichten mit Android/Java und zum Empfangen mit C# kann man vielfach im Netz finden. Außerdem ließen sich die Routinen dann immer wieder in allerlei kommenden Elektor-Projekten verwenden.
Gesagt, getan: Meinen MQTT-Client erweiterte ich so, dass er auf hereinkommende TCP/IP-Nachrichten lauscht und diese über MQTT weitersendet (Download von Quellcode und Exe-Datei siehe unten). Die Bedienung ist simpel: Zuerst müssen Sie ein MQTT-Topic wie zum Beispiel „Lamp“ eingeben, unter dem die Nachrichten veröffentlicht werden sollen (siehe Folge 4). Am besten abonnieren Sie sich auch gleich auf das Topic, um eine Rückmeldung zu haben, was wirklich über MQTT versendet wurde. Dann geben Sie die IP-Adresse ein, die der Rechner im Heimnetzwerk besitzt (zum Beispiel „192.168.0.10“, ein Tool wie der Network Scanner von SoftPerfect leistet hier gute Dienste). Zum Schluss klicken Sie auf den Button „TCP Listen“. Sie können nun noch eine weitere Instanz des MQTT-Clients auf einem entfernten Rechner starten, an den Sie eigene Elektronik hängen. Oder Sie probieren alles mit einem einzigen PC aus. Im entsprechenden MQTT-Client geben Sie noch den COM-Port an, an den Sie ihr SAM-Board, Arduino oder was auch immer angeschlossen haben.
Nun benötigte ich noch eine App, die TCP/IP-Nachrichten versenden konnte. Meine Kenntnisse in Android-Programmierung waren durch eine längere Pause etwas eingerostet und ich musste auch zuerst noch „Android Studio“ auf meinem neuen Laptop installieren. Wieder einmal sollte ich feststellen, dass Android und die IDE fortgeschrittene Entwickler mit einem mächtigen, gut gesicherten System verwöhnen. Einsteiger müssen sich allerdings durchbeißen. Man benötigt Geduld, starke Nerven und die Bereitschaft, viel Zeit zum Lernen mitzubringen. Wer nicht direkt in Android/Java programmieren will, für den gibt es verschiedene Ansätze, trotzdem eine Steuerung auf dem Smartphone hinzubekommen. Wir werden in Elektor und auch in dieser Serie noch öfter darauf zurückkommen.
Meine kleine App versendet TCP/IP-Nachrichten an eine wahlfreie IP-Adresse im Heimnetzwerk, beides ist in Textboxen einzugeben, bevor der „Send“-Button betätigt wird. Aus Zeitgründen habe ich weder ein Settings-Menü noch ein Timeout implementiert. Wenn der PC die Nachrichten nicht empfängt, weil der TCP-Listener auf dem MQTT-Client noch nicht gestartet ist oder die Adressen nicht stimmen, friert die Anzeige ein. Für eine erste Demo reicht es aber, und vielleicht können Sie den Code auch für eine eigene Steuerung von Irgendetwas auf dem PC verwenden.
So, nun konnte ich mit Kommandos wie „R 0 1 +“, „R 0 1 –“ meine Funksteckdose vom Smartphone aus schalten. So richtig komfortabel ist es allerdings nicht, Textnachrichten eintippen zu müssen. Und wir haben einen hohen Aufwand an Hardware. Das lässt sich sicher noch optimieren!
Mehr anzeigen
Weniger anzeigen
Diskussion (0 Kommentare)