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:33:04 2012 +0000
Revision:
3:4b05781a0988
Parent:
2:15c92a540ad2
Child:
4:bf7431934cf5
Ver 0.01

Who changed what in which revision?

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