Browse Category

Embedded

Call WCF Web Service from Rasberry PI (Raspbian)

Install Gsoap on Rasberry PI running Raspbian

sudo apt-get install gSoap

Check installed gSoap version (May 1,2014 version is 2.8.7)

Download the correspondent toolchain (class generator) from sourgeforce (Installed library and toolchain must have SAME VERSION!)

Open console as Administrator and go to the tools folder. For Example:

cd C:\gsoap\gsoap-2.8.7\gsoap\bin\win32

Then use toolchain to build file as follow for c++:

wsdl2h -o test.h http://yourws.net/yourWCF/Service1.svc?wsdl
soapcpp2 -I"C:\gsoap\gsoap-2.8.7\gsoap\import" test.h

Import all generated files in your project (Exclude test.h , soapClientLib.cpp and soapServerLib.cpp)

Add stdsoap2.cpp and stdsoap2.h from toolchain directory.

Include *.nsmap and *Proxy.h in header.

Code Example

#include "Soap/BasicHttpBinding_USCOREIService1.nsmap"
#include "Soap/soapBasicHttpBinding_USCOREIService1Proxy.h"

int main(int argc, char *argv[])
{

BasicHttpBinding_USCOREIService1 s;
_ns1__GetData req;
_ns1__GetDataResponse resp;

int i = 29;
req.value = &i;

int err = s.__ns1__GetData(&req,&resp);

if (SOAP_OK == err)
cout << "WCF Response: " << *resp.GetDataResult << endl;
else
cout << "Error: " << err << endl;

}

Now you can see result in your console:

WCF Response: You entered: 29

If you receive Error 415 (Bad request) you have to change SOAP operation mode (WCF use an unusual charset for SOAP 1.1).

For removing soap 1.2 namespace from the your web-service client project you should to change strings

{"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://www.w3.org/2003/05/soap-envelope", NULL},
 {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL},
 {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
 {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},

to

{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", NULL, NULL},
 {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", NULL, NULL},
 {"xsi", "http://www.w3.org/2001/XMLSchema-instance", NULL, NULL},
 {"xsd", "http://www.w3.org/2001/XMLSchema", NULL, NULL},

in all your .nsmap file and *Proxy.cpp file.

Far lampeggiare un led con Rasberry PI

Il modo più rapido per far lampeggiare un led tramite Raspberry Pi è utilizzando il connettore e l’interfaccia GPIO.

Collegare il led (dopo averlo protetto con una deguata resistenza) al connettore (In questo esempio utilizziamo le porte 13 e 14)

Importare la libreria WiringPI (la più completa per la gestione dell’interfaccia GPIO del Raspberry PI. Leggi come importarla).

Il codice

#include <wiringPi.h>
#include "stdio.h"

int main(int argc, char *argv[])
{
    wiringPiSetup();
    const int pinNumber = 2;

    pinMode(pinNumber, OUTPUT);

    for (int i=1; i<=1000;i++)
    {
        digitalWrite(pinNumber, HIGH);
        delay(100);
        digitalWrite(pinNumber, LOW);
        delay(100);
    }
    return 0;
}

Installare WiringPI su Rasberry PI (Raspbian)

WiringPI è la libreria più completa per la gestione dell’interfaccia GPIO del Raspberry PI.
E’ distribuita tramite GIT e la via più facile per scaricare ed installare la libreria è quindi tramite git-core.

Per installare GIT accedere alla console e dare il comando:

sudo apt-get install git-core

Se si verificano degli errori verificare di avere Raspbian aggiornato. E’ possibile aggiornare il sistema operativo tramite i comandi:

sudo apt-get update
sudo apt-get upgrade

Per ottenere WiringPI tramite GIT:

git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin

Per compilare ed installare la libreria non rimane altro che fare il build:

cd wiringPi
./build

Ora potete usare la libreria per comandare le porte del rasberry PI (Esempi di utilizzo)

Per testare la corretta installazione e vedere lo stato della GPIO

gpio -v
gpio readall