My first attempt to play with the RPC commands and a Visual Basic 2008 program.

Dependencies:   EthernetNetIf HTTPServer RPCInterface TextLCD mbed

Fork of RPC_HTTP by Fernando Machado

Committer:
fernandomachado
Date:
Mon Oct 29 21:25:42 2012 +0000
Revision:
2:15c92a540ad2
Parent:
1:71b64a776133
Child:
3:4b05781a0988
The programm is to help some one that is starting with RPC (like me).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fernandomachado 2:15c92a540ad2 1 /* Funcionou com os arquivos 'RPCdemo.htm' e 'mbedRPC.js' na raiz do Mbed */
fernandomachado 2:15c92a540ad2 2 /* Funcionou com os arquivos 'launch.htm e 'mbedapp.jar' na raiz do Mbed */
fernandomachado 2:15c92a540ad2 3 /* Funcionou com o prg escrito em VB */
fernandomachado 2:15c92a540ad2 4
MichaelW 1:71b64a776133 5 #include "mbed.h"
MichaelW 1:71b64a776133 6 #include "EthernetNetIf.h"
MichaelW 1:71b64a776133 7 #include "HTTPServer.h"
fernandomachado 2:15c92a540ad2 8 #include "RPCVariable.h"
fernandomachado 2:15c92a540ad2 9 #include "RPCFunction.h"
fernandomachado 2:15c92a540ad2 10 #include "TextLCD.h"
MichaelW 1:71b64a776133 11
fernandomachado 2:15c92a540ad2 12 TextLCD lcd(p21, p22, p23, p24, p25, p26); // rs, e, d4-d7
fernandomachado 2:15c92a540ad2 13
fernandomachado 2:15c92a540ad2 14 AnalogIn ain1(p15);
fernandomachado 2:15c92a540ad2 15 AnalogIn ain2(p16);
fernandomachado 2:15c92a540ad2 16
fernandomachado 2:15c92a540ad2 17 float temp;
fernandomachado 2:15c92a540ad2 18 float volt;
fernandomachado 2:15c92a540ad2 19
fernandomachado 2:15c92a540ad2 20 using namespace mbed;
fernandomachado 2:15c92a540ad2 21
fernandomachado 2:15c92a540ad2 22 //***************************************************************
fernandomachado 2:15c92a540ad2 23 //Create a function of the required format LER DATA e HORA
fernandomachado 2:15c92a540ad2 24 void DateHour(char * input, char * output);
fernandomachado 2:15c92a540ad2 25 //Attach it to an RPC object
fernandomachado 2:15c92a540ad2 26 RPCFunction LeDataHora(&DateHour, "LeDataHora");
fernandomachado 2:15c92a540ad2 27
fernandomachado 2:15c92a540ad2 28 void DateHour(char * input, char * output)
fernandomachado 2:15c92a540ad2 29 {
fernandomachado 2:15c92a540ad2 30 time_t seconds = time(NULL);
fernandomachado 2:15c92a540ad2 31 sprintf(output, "%s", ctime(&seconds));
fernandomachado 2:15c92a540ad2 32 }
fernandomachado 2:15c92a540ad2 33 //***************************************************************
fernandomachado 2:15c92a540ad2 34 //Create a function of the required format CONTROLA BRILHO do LED
fernandomachado 2:15c92a540ad2 35 void dimLed(char * input, char * output);
fernandomachado 2:15c92a540ad2 36 //Attach it to an RPC object
fernandomachado 2:15c92a540ad2 37 RPCFunction rpc_dimLed(&dimLed, "LedDimmer");
fernandomachado 2:15c92a540ad2 38
fernandomachado 2:15c92a540ad2 39 void dimLed(char * input, char * output)
fernandomachado 2:15c92a540ad2 40 {
fernandomachado 2:15c92a540ad2 41 float x;
fernandomachado 2:15c92a540ad2 42 sscanf(input, "%f", &x);
fernandomachado 2:15c92a540ad2 43 PwmOut myLed4 (LED4);
fernandomachado 2:15c92a540ad2 44 myLed4 = x/100;
fernandomachado 2:15c92a540ad2 45 sprintf(output, "%f", x);
fernandomachado 2:15c92a540ad2 46 }
fernandomachado 2:15c92a540ad2 47 //**************************************************************
fernandomachado 2:15c92a540ad2 48 // Função para ler voltagem do potenciometro
fernandomachado 2:15c92a540ad2 49 void Levolt(char * input, char * output);
fernandomachado 2:15c92a540ad2 50
fernandomachado 2:15c92a540ad2 51 RPCFunction Voltagem(&Levolt, "Voltagem");
fernandomachado 2:15c92a540ad2 52
fernandomachado 2:15c92a540ad2 53 void Levolt(char * input, char * output)
fernandomachado 2:15c92a540ad2 54 {
fernandomachado 2:15c92a540ad2 55 // float volt;
fernandomachado 2:15c92a540ad2 56 volt = ain1.read() * 3.3;
fernandomachado 2:15c92a540ad2 57 sprintf (output,"%2.2f", volt);
fernandomachado 2:15c92a540ad2 58 }
fernandomachado 2:15c92a540ad2 59 //**************************************************************
fernandomachado 2:15c92a540ad2 60 // Função para ler a temperatura por meio de um LM35
fernandomachado 2:15c92a540ad2 61 void Letemp(char * input, char * output);
fernandomachado 2:15c92a540ad2 62
fernandomachado 2:15c92a540ad2 63 RPCFunction Temperatura(&Letemp, "Temperatura");
fernandomachado 2:15c92a540ad2 64
fernandomachado 2:15c92a540ad2 65 void Letemp(char * input, char * output)
fernandomachado 2:15c92a540ad2 66 {
fernandomachado 2:15c92a540ad2 67 // float temp;
fernandomachado 2:15c92a540ad2 68 temp = ain2.read() * 330;
fernandomachado 2:15c92a540ad2 69 sprintf (output, "%2.1f", temp);
fernandomachado 2:15c92a540ad2 70 }
fernandomachado 2:15c92a540ad2 71 //**************************************************************
fernandomachado 2:15c92a540ad2 72
fernandomachado 2:15c92a540ad2 73 //Primeiro: crio as variaveis que vou usar via RPC
fernandomachado 2:15c92a540ad2 74 //float f;
fernandomachado 2:15c92a540ad2 75 //int i;
fernandomachado 2:15c92a540ad2 76 //char c;
fernandomachado 2:15c92a540ad2 77 //Segundo: associo as variaveis aos RPCVariable Object
fernandomachado 2:15c92a540ad2 78 //RPCVariable<float> rpc_f(&f, "f");
fernandomachado 2:15c92a540ad2 79 //RPCVariable<int> rpc_i(&i, "i");
fernandomachado 2:15c92a540ad2 80 //RPCVariable<char> rpc_c(&c, "c");
fernandomachado 2:15c92a540ad2 81
fernandomachado 2:15c92a540ad2 82 //Defino os led´s e o botão
MichaelW 1:71b64a776133 83 DigitalOut led1(LED1, "led1");
MichaelW 1:71b64a776133 84 DigitalOut led2(LED2, "led2");
MichaelW 1:71b64a776133 85 DigitalOut led3(LED3, "led3");
fernandomachado 2:15c92a540ad2 86 //DigitalOut led4(LED4, "led4");
fernandomachado 2:15c92a540ad2 87 DigitalIn button1(p20, "button1");
MichaelW 1:71b64a776133 88
MichaelW 1:71b64a776133 89 LocalFileSystem fs("webfs");
MichaelW 1:71b64a776133 90
fernandomachado 2:15c92a540ad2 91 EthernetNetIf eth;
MichaelW 1:71b64a776133 92 HTTPServer svr;
MichaelW 1:71b64a776133 93
fernandomachado 2:15c92a540ad2 94 int main()
fernandomachado 2:15c92a540ad2 95 {
MichaelW 1:71b64a776133 96 Base::add_rpc_class<AnalogIn>();
MichaelW 1:71b64a776133 97 Base::add_rpc_class<AnalogOut>();
MichaelW 1:71b64a776133 98 Base::add_rpc_class<DigitalIn>();
MichaelW 1:71b64a776133 99 Base::add_rpc_class<DigitalOut>();
MichaelW 1:71b64a776133 100 Base::add_rpc_class<DigitalInOut>();
MichaelW 1:71b64a776133 101 Base::add_rpc_class<PwmOut>();
MichaelW 1:71b64a776133 102 Base::add_rpc_class<Timer>();
MichaelW 1:71b64a776133 103 Base::add_rpc_class<BusOut>();
MichaelW 1:71b64a776133 104 Base::add_rpc_class<BusIn>();
MichaelW 1:71b64a776133 105 Base::add_rpc_class<BusInOut>();
MichaelW 1:71b64a776133 106 Base::add_rpc_class<Serial>();
MichaelW 1:71b64a776133 107
fernandomachado 2:15c92a540ad2 108
fernandomachado 2:15c92a540ad2 109 printf("Setting up...\n\r");
fernandomachado 2:15c92a540ad2 110 EthernetErr ethErr = eth.setup();
fernandomachado 2:15c92a540ad2 111 if(ethErr) {
fernandomachado 2:15c92a540ad2 112 printf("Error %d in setup.\n\r", ethErr);
fernandomachado 2:15c92a540ad2 113 return -1;
MichaelW 1:71b64a776133 114 }
fernandomachado 2:15c92a540ad2 115 printf("Setup OK\n\r");
fernandomachado 2:15c92a540ad2 116
fernandomachado 2:15c92a540ad2 117 FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
fernandomachado 2:15c92a540ad2 118 FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
fernandomachado 2:15c92a540ad2 119
fernandomachado 2:15c92a540ad2 120 svr.addHandler<SimpleHandler>("/hello");
fernandomachado 2:15c92a540ad2 121 svr.addHandler<RPCHandler>("/rpc");
fernandomachado 2:15c92a540ad2 122 svr.addHandler<FSHandler>("/files");
fernandomachado 2:15c92a540ad2 123 svr.addHandler<FSHandler>("/"); //Default handler
fernandomachado 2:15c92a540ad2 124 //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
fernandomachado 2:15c92a540ad2 125
fernandomachado 2:15c92a540ad2 126 svr.bind(80);
fernandomachado 2:15c92a540ad2 127
fernandomachado 2:15c92a540ad2 128 printf("Listening...\n\r");
MichaelW 1:71b64a776133 129
fernandomachado 2:15c92a540ad2 130 Timer tm;
fernandomachado 2:15c92a540ad2 131 tm.start();
fernandomachado 2:15c92a540ad2 132 //Listen indefinitely
fernandomachado 2:15c92a540ad2 133 while(true) {
fernandomachado 2:15c92a540ad2 134 Net::poll();
fernandomachado 2:15c92a540ad2 135 if(tm.read()>.1) {
fernandomachado 2:15c92a540ad2 136 //led1=!led1; //Show that we are alive
fernandomachado 2:15c92a540ad2 137 printf("Funcionando...\n\r");
fernandomachado 2:15c92a540ad2 138
fernandomachado 2:15c92a540ad2 139 //time_t seconds = time(NULL);
fernandomachado 2:15c92a540ad2 140 //printf("Data e hora = %s\n\r", ctime(&seconds));
fernandomachado 2:15c92a540ad2 141
fernandomachado 2:15c92a540ad2 142 //f = 0.23;
fernandomachado 2:15c92a540ad2 143 //i = i + 1;
fernandomachado 2:15c92a540ad2 144 //c = 'a';
fernandomachado 2:15c92a540ad2 145 volt = ain1.read() * 3.3;
fernandomachado 2:15c92a540ad2 146 temp = ain2.read() * 330; /* temp = ain.read() * 3.3 * 100; */
fernandomachado 2:15c92a540ad2 147 lcd.locate(0,0);
fernandomachado 2:15c92a540ad2 148 lcd.printf ("Voltagem= %2.2f V \n", volt);
fernandomachado 2:15c92a540ad2 149 lcd.locate(0,1);
fernandomachado 2:15c92a540ad2 150 lcd.printf ("Temp= %2.1f C \n", temp);
fernandomachado 2:15c92a540ad2 151
fernandomachado 2:15c92a540ad2 152 tm.start();
fernandomachado 2:15c92a540ad2 153 }
fernandomachado 2:15c92a540ad2 154 }
MichaelW 1:71b64a776133 155 }