ch-open-wstage2015


/ch/open Workshop WS4 "Internet der Dinge", Referent: Marcel Bernet

Services

Einführung

/media/uploads/marcel1691/mbedrpc.png

Remote Procedure Call (RPC - „Aufruf einer fernen Prozedur“) ist eine Technik zur Realisierung von Interprozesskommunikation. Sie ermöglicht den Aufruf von Funktionen in anderen Adressräumen. Im Normalfall werden die aufgerufenen Funktionen auf einem anderen Computer als das aufrufende Programm ausgeführt. Es existieren viele Implementierungen dieser Technik, in der Regel sind sie untereinander nicht kompatibel

Die mbed Plattform beinhaltet eine RPC Library, welche ausgesuchte mbed Objekte (DigitalPin, DigitalOut etc.) mittels Serieller Schnittstelle oder via HTTP Aufrufen, zur Verfügung stellt.

Die mbed RCP Klassen verwenden C++ Templates, siehe Zeilen mit <Argument> und den Namespace RPC, siehe Zeilen mit RPC::.

Vorgehen

  • Klasse(n), bzw. deren RPC Variante (Digital = RpcDigitalOut etc.) welche angesprochen werden soll, registrieren
  • Objekte mit den externen Namen definieren
  • RPC Handler im HTTP Server registrieren
  • HTTP Server starten

int main()
{
    printf("RPC HTTP Server\n");
    eth.init(); //Use DHCP
    eth.connect();
    printf("IP Address is %s\n\r", eth.getIPAddress());
        
    // Klassen
    RPC::add_rpc_class<RpcDigitalOut>();
    RPC::add_rpc_class<RpcDigitalIn>();
    RPC::add_rpc_class<RpcAnalogIn>(); 
    RPC::add_rpc_class<RpcPwmOut>();    
    
    // Objekte
    RPC::construct<RpcDigitalOut, PinName, const char*>(D10, "led1");
    RPC::construct<RpcDigitalOut, PinName, const char*>(D11, "led2");
    RPC::construct<RpcPwmOut, PinName, const char*>(D12, "led3");
    RPC::construct<RpcAnalogIn, PinName, const char*>(A0, "poti");
    RPC::construct<RpcAnalogIn, PinName, const char*>(A1, "light");
    RPC::construct<RpcDigitalIn, PinName, const char*>(A2, "b1");
 
    // Handler
    HTTPServerAddHandler<RPCHandler>("/rpc");
    
    // Start HTTP Server auf Port 80
    printf( "Starte Server\n" );
    HTTPServerStart(80);
}

Client

Aufruf der entsprechenden Objekt-Methode mittels:

http://<url of mbed>/rpc/<Object name>/<Method name> <Arguments separated by spaces>

z.B. durch Starten des Browser und Eingabe von "http://<IP-Adresse mbed>/rpc/led2/write+1". Entspricht led2.write(1); led2 wurde vorher mittels DigitalOut led2(D11); instanziert.

Zum lesen kann http://<IP-Adresse mbed>/rpc/poti/read verwendet werden.











Programme

Import programRPCHTTPServerSimple

Einfaches mbed RPC Beispiel

Import programRPCHTTPServerSimpleV2

Minimalistischer Remote Procedure Call (RPC) HTTP Server V2

Import programRPCHTTPServerVariable

HTTP RPC Server mit vordefinierten Objekten











Übungen

Sensordaten abfragen (RPC Variante)

Kombiniert das Übung 6.1 Licht bei Dämmerung einschalten mit RPC Variable um die Sensordaten via Client abzufragen.

Anwendung: Abfragen von Sensordaten.

Hinweis: Daten im Browser mittels http://..../rpc/light/read abfragen.

Import program2-08-01-Uebung

8.1 Kombiniert das Übung 6.1 Licht bei Dämmerung einschalten mit RPC Variable um die Sensordaten via Client abzufragen.











Zusammenfassung

Remote Procedure Call (RPC; engl. „Aufruf einer fernen Prozedur“) ist eine Technik zur Realisierung von Interprozesskommunikation. Sie ermöglicht den Aufruf von Funktionen in anderen Adressräumen. Im Normalfall werden die aufgerufenen Funktionen auf einem anderen Computer als das aufrufende Programm ausgeführt. Es existieren viele Implementierungen dieser Technik, in der Regel sind sie untereinander nicht kompatibel

Die mbed Plattform beinhaltet eine RPC Library, welche ausgesuchte mbed Objekte (DigitalPin, DigitalOut etc.) mittels Serieller Schnittstelle oder via HTTP Aufrufen, zur Verfügung stellt.


All wikipages