iOS-Push – schnell und einfach realisierbar |
|||||
Einfache Kommunikation mit Embedded Systemen mittels iPhone & Co. |
|||||
|
Immer öfter fließen Trends aus dem täglichen Leben auch in die industrielle Entwicklung ein. Glücklicherweise ist es aber gar nicht so schwierig, eine iOS-Push-Meldung von einer Mikrocontroller-Anwendung an ein iPhone, einen iPod touch oder ein iPad zu senden. Die folgende Beschreibung zeigt, wie es mit Hilfe einer RX62N-MCU in der Praxis ganz einfach funktioniert. |
|||||
|
Ohne große Erfahrung lässt sich ein System realisieren, das bei Bedarf iOS-Push-Meldungen an ein iPhone, einen iPod touch oder ein iPad mit Prowl, einem Growl-Client für iOS, senden kann. Einen maßgeblichen Beitrag dazu leisten Mikrocontroller, die in den letzten Jahren mit ihrer Vielzahl an bereits integrierten Peripheriekomponenten zu echten Multitalenten herangereift sind und so einem Entwickler die tägliche Arbeit enorm erleichtern. Das für den Beitrag ausgewählte Demo-Beispiel basiert auf einem RX62N-32-Bit-Mikrocontroller von Renesas Electronics, denn er enthält alle Funktionen, die zur einfachen Implementierung und Prüfung des Systems benötigt werden. Der RX62N basiert auf einem leistungsfähigen 165-DMIPS-RX600-CPU-Kern mit bis zu 512 KByte On-Chip-Flash und 96 KByte On-Chip-SRAM; ferner auf zahlreichen On-Chip-Peripheriefunktionen (Bild 1), wobei für die ausgewählte Anwendung insbesondere entscheidend sind:
|
|
||||
|
Der RX62N bietet darüber hinaus den Vorteil, dass es für ihn zahlreiche standardmäßige Evaluierungs- und Entwicklungsplattformen gibt, die ohne Änderungen für diese Demo-Anwendung genutzt werden können. Für das Demobeispiel erhielt letztendlich das Renesas-Demo-Kit RSK-RX62N (Bild 2) den Vorzug. Es unterstützt nahezu alle der auf dem RX62N integrierten Peripheriefunktionen und Schnittstellen, mit denen sich unterschiedliche Anwendungen einfach erstellen und testen lassen. |
|
||||
Funktionen der Software-Hauptkomponenten |
|||||
|
Bevor die Arbeitsweise des Systems näher beschreiben wird, macht es Sinn, noch einen Blick auf die Funktionen der Software-Hauptkomponenten zu werfen. Die wahrscheinlich wichtigsten Komponenten sind hier Growl und Prowl. Growl ist ein Benachrichtigungssystem für Mac OS X und Microsoft Windows, das voreingestellte Ereignismeldungen in einem Benutzersystem anzeigt – z.B. bei Erhalt einer neuen E-Mail oder nach einem beendeten Download. Mit Growl können Ereignisse über ein Netzwerk computerübergreifend abgerufen werden. Weitere Informationen zu Growl finden Interessenten unter dem Link am Ende des Beitrags. Seit Oktober 2011 ist die Software kostenpflichtig (Stand April 2012: 1,59 Euro). Bei Prowl indes handelt es sich schlicht um einen Growl-Client für iOS-Geräte, also iPhone, iPod touch und iPad. Von einem Computer mit Internet-Anschluss und Prowl können Growl-Benachrichtigungen an ein iOS-Gerät gesendet werden, wo sie als Push-Meldung erscheinen. So ist der Benutzer nicht länger an seinen Computer gebunden, um Growl-Benachrichtigungen zu empfangen. Die Prowl-App ist zur Zeit im iTunes-App-Store für 2,39 Euro erhältlich. Als Alternative kann auch die kostenlose Boxcar-App verwendet werden, die in dieser Anwendung allerdings nicht getestet wurde. Außer der Versendung von Prowl-Benachrichtigungen von einer Growl-Anwendung unter Windows oder Mac OS X, z.B. „Growl for Windows“, können sämtliche internetfähigen Anwendungen über die Prowl-API-Schnittstelle konfiguriert werden. Das Demo-System verwendet die Prowl-API-Schnittstelle, um Meldungen vom RX62N-Mikrocontroller im RSK an die Prowl-App auf dem iOS-Gerät zu senden. Für die Prowl-API-Schnittstelle ist eine SSL-verschlüsselte Verbindung (Secure Socket Layer) zwischen Prowl-Client und Prowl-Server erforderlich. Eine SSL-Unterstützung im Mikrocontroller ist komplex und belastet den Prozessor. Aus diesem Grund wurde diese Funktion bei dem Demo-Beispiel auf ein Zwischengerät in Form eines Microsoft-Windows-PC ausgelagert. Dies kann aber auch ein Mac-OS-X- oder Linux-basiertes System sein. Auf diesem Host-Rechner läuft eine Server-Anwendung, die das Ethernet- und TCP/IP-Protokoll nach UDP-Meldungen vom RX62N durchsucht und diese zum Prowl-API-Server weiterleitet, der sie wiederum an das iOS-Gerät sendet. Die Implementierung der Server-Anwendung könnte über einen PHP Proxy-Server erfolgen, doch in dem gewählten Beispiel kommt stattdessen Node.js zum Zuge. Node.js ist ein Server-seitiges JavaScript für ereignisgesteuerte Ein-/Ausgabe, das in Verbindung mit einer V8-JavaScript-Maschine verwendet wird. Mit Node.js können komplexe, skalierbare Internet-Serveranwendungen mit wenigen Zeilen in JavaScript geschrieben werden. In der Demo-Anwendung wird mit Node.js ein UDP-Listenserver erstellt, der eingehende Meldungen an den Prowl-Server weiterleitet. Ein vollständiges Sourcecode-Listing finden Interessenten in einer Application Note, die sie von der MSC-Webseite herunterladen können. Dieser Code ist recht einfach, denn er verwendet ein fertiges Node.js-Modul namens “node-prowl”, das die schwierige Aufgabe der Kommunikation mit dem Prowl-Server vollständig übernimmt. In dem Demo-System läuft Node.js in einer Cygwin-Umgebung unter Windows. Alternativ könnte auch ein Linux-Rechner verwendet werden. Der Renesas-RX62N-Mikrocontroller kommuniziert über eine TCP/IP-basierte Ethernet-Schnittstelle mit dem Node.js-Server. Die auf dem RX62N laufende Software wiederum basiert auf dem Echtzeit-Betriebssystem µC/OS-III und dem µC/TCP-IP-Stack von Micrium. |
|||||
|
Bild 3 zeigt ein Blockdiagramm des Gesamtsystems mit allen beschriebenen Modulen. |
|||||
|
|
|||||
|
Die RX62N-Anwendung enthält einen Task namens AppProwlTask(), der Inputs über die Tasten des Starter-Kits handhabt und die entsprechende Meldung über UDP an den Node.js-Server sendet. Wenn der Taster SW1 (IRQ8) gedrückt wird, sendet die entsprechende Interrupt-Routine den Wert 8 an eine Message-Queue, die von AppProwlTask() abgefragt wird. Bei Empfang dieser speziellen Meldung aus der Warteschlange wird der Messwert vom integrierten Temperatursensor ausgelesen und in einer formatierten Meldung über UDP an den Node.js-Server gesendet. Die IP-Adresse des Servers wurde vorher festgelegt und ist in der Anwendung fest programmiert. Natürlich kann dieses Schema auch durch eine dynamische IP-Adresse verbessert werden (DHCP), wenn eine feste Adresse ungeeignet ist. Mit dem Taster SW2 (IRQ9) wird die Betriebszeit des RTOS seit dem letzten Reset gesendet, und mit SW3 (IRQ10) die Meldung, dass der Interrupt IRQ10 ausgelöst wurde. |
|||||
|
Bild 4 zeigt die von der Prowl-App erhaltene Push-Meldung, nachdem SW1 gedrückt wurde.
|
Bild 5 schließlich dokumentiert mehrere Benachrichtigungen in der Prowl-App selbst.
|
||||
|
Falls Interessierte die Anwendung mit dem bei MSC erhältlichen RSKRX62N-Starter-Kit selbst testen möchten, können sie das gesamte benötigte Software-Paket und die detaillierte Dokumentation dazu von der MSC-Webseite herunterladen. Der Link dazu findet sich im Anhang. Die dazu benötigten Schritte sind nicht besonders kompliziert und werden im Folgenden kurz skizziert. |
|||||
Cygwin, Node.js und Prowl Support installieren |
|||||
|
Die folgenden Installationshinweise gelten für eine Microsoft-Windows-7-Umgebung: Wer als Administrator Cygwin und Node.js installieren möchte,
befolgt dazu die Hinweise unter Achten Sie bitte darauf die Version v0.4.11 von Node.js auszuchecken. Neuere Versionen unterstützen Cygwin nicht mehr. Den Node-Package-Manager (NPM) installiert man mit folgendem Cygwin-Shell-Befehl: curl http://npmjs.org/install.sh | sh Den Inhalt des Node-Prowl-Pakets in das Cygwin-Stammverzeichnis (normalerweise C:\cygwin) entpacken In der Cygwin-BASH-Shell zum Ordner „mape-node-prowl-xxxxxxx“ weitergehen, in dem sich „package.json“ befindet. Den BASH-Shell-Befehl „npm install“ starten. |
|||||
|
Cygwin und der Node.js-Prowl-Support sollten damit nun installiert sein. |
|||||
Alternative Installation ohne Cygwin |
|||||
|
Inzwischen steht eine Node.js-Version zur Verfügung, die direkt unter Windows lauffähig ist. Diese Installationshinweise gelten für eine Microsoft Windows 7 Umgebung.
|
|||||
Das Node.js-Script konfigurieren und ausführen |
|||||
|
Das MSC-Software-Paket enthält den vollständigen Sourcecode für Node.js. Dieser Code ermöglicht es dem Server, die Anfrage vom RX62N-Gerät über die Prowl-API zum Prowl-Server zu senden. Auch das benötigte Script “UDP_Server.js” ist enthalten. Um dieses Script für das Demo-Beispiel verwenden zu können, müssen lediglich zwei Änderungen vorgenommen werden: Zeile 5 enthält eine Variablendefinition für “prowlApiKey”. Hier muss zwischen den einfachen Anführungszeichen der Prowl-API-Schlüssel des Benutzers eingegeben werden Einen Prowl-API-Schlüssel erhalten Interessenten nach der Registrierung auf der Prowl-Webseite unter http://www.prowlapp.com/api.php. Zeile 74 im Script enthält die IP-Adresse des Rechners, auf dem das Script läuft. Diese IP-Adresse muss in die entsprechende Adresse des Benutzers geändert werden. Hinweis: In Zeile 2 wird das Prowl-Modul importiert. Bei Verwendung der Windows-Version von Node.js muss hier der gesamte Pfad zum Modul angegeben werden, z.B. var Prowl = require("C:/Program Files/nodejs/node_modules/prowler/lib/prowl"); Das Script wird über die Cygwin-BASH-Shell mit folgender Befehlszeile ausgeführt: node UDP_Server.js |
|||||
|
Was passiert, wenn das Script ausgeführt und SW1 gedrückt wird, zeigt Bild 6. Im Internet stehen zahlreiche Anleitungen zur Verwendung von Node.js zur Verfügung, so dass auf dieses Thema hier nicht weiter eingegangen werden muss. |
|||||
|
|
|||||
Die RX62N-Anwendung konfigurieren, erstellen und ausführen |
|||||
|
Renesas stellt für die RX-Mikrocontroller-Familie die Entwicklungsumgebung HEW (High-Performance Embedded Workshop) zur Verfügung. Letztere integriert alle benötigten Werkzeuge – vom Editor über den C/C++-Compiler bis hin zu den Debug- und Simulations-Werkzeugen. Die hier vorgestellte Demo-Anwendung ist als komplettes HEW-Projekt Inhalt des Download-Pakets, ebenso wie HEW selbst. Nach der Installation von HEW und dem GNU-RX-Compiler, kann das Projekt mit einem Doppelklick auf die Workspace-Datei mit der Endung .hws geladen werden: ..\Software\EvalBoards\Renesas\YRSKRX62N\GNURX\GNURX.hws APP.C enthält den Code für AppProwlTask(). Dieser Task wartet, bis der TCP/IP-Stack und die Schnittstelle bereit sind und eine Meldung an die Warteschlange gesendet wird. Die Meldung in der Warteschlange zeigt an, welche Taste gedrückt wurde, so dass ein passender Text-String erzeugt und über UDP an die IP-Adresse des Node.js-Servers gesendet werden kann. Die IP-Adresse ist im Task fest programmiert, kann aber bei Bedarf dynamisch konfiguriert werden. Im Beispiel wird der Port 40000 verwendet. Der Task wartet danach auf weitere Meldungen, die an die Warteschlange weitergeleitet werden sollen. Damit der Node.js Server richtig adressiert werden kann, muss der Benutzer die IP-Adresse entsprechend ändern. Weitere Einzelheiten zu der hier beschriebenen Anwendung, eine Application Note mit dem detaillierten Code sowie alle erforderlichen Programm-Codes stehen auf der MSC-Webseite unter www.msc-ge.com zum kostenlosen Download bereit. |
|||||
Literatur & LinksWeitere Informationen zur verwendeten Software finden interessierte Anwender unter: Growl: www.growl.info Prowl: www.prowlapp.com Node.js: http://nodejs.org Node-Prowl: https://github.com/mape/node-prowl Cygwin: www.cygwin.com Weitere Informationen zu µC/OS-III RTOS und dem Buch speziell zum RX62N unter http://micrium.com/page/products/books/os-iii-books/os-iii-renesas-rx62n Informationen zum Starter-Kit: www.renesas.eu/products/tools/introductory_evaluation_tools/renesas_starter_kits/rsk_rx62n/index.jsp Bezugsmöglichkeit für das Starter-Kit: www.msc-toolguide.com/renesas-starter-kit-for-rx62n.html Download: RX62N_iPOD.zip [17.6MB] |
|||||
|
|||||








