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 22:59:27 2012 +0000
Revision:
4:bf7431934cf5
Parent:
3:4b05781a0988
Ver 0.01

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fernandomachado 4:bf7431934cf5 1 /* HTTP and RPC * MBED RECEIVES AND SEND DATA TO A VISUAL BASIC 2008 PROGRAMM */
fernandomachado 4:bf7431934cf5 2 /* IP OF MBED IS USED BY VISUAL BASIC PRG */
fernandomachado 2:15c92a540ad2 3
MichaelW 1:71b64a776133 4 #include "mbed.h"
MichaelW 1:71b64a776133 5 #include "EthernetNetIf.h"
MichaelW 1:71b64a776133 6 #include "HTTPServer.h"
fernandomachado 2:15c92a540ad2 7 #include "RPCVariable.h"
fernandomachado 2:15c92a540ad2 8 #include "RPCFunction.h"
fernandomachado 2:15c92a540ad2 9 #include "TextLCD.h"
MichaelW 1:71b64a776133 10
fernandomachado 4:bf7431934cf5 11 // The LCD is connected as below
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 4:bf7431934cf5 23 //Create a function of the required format - READ DATE and HOUR
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 4:bf7431934cf5 34 //Create a function of the required format - CONTROL LED BRIGHT
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 4:bf7431934cf5 48 //Create a function of the required format - READ THE POTENTIOMETER CONNECTED TO p15
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 4:bf7431934cf5 60 //Create a function of the required format - READ THE TEMPERATURE USING A LM35 CONNECTED TO p16
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 4:bf7431934cf5 73 //Create the variables
fernandomachado 2:15c92a540ad2 74 //float f;
fernandomachado 2:15c92a540ad2 75 //int i;
fernandomachado 2:15c92a540ad2 76 //char c;
fernandomachado 4:bf7431934cf5 77 //Connect the variables to the 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 4:bf7431934cf5 82 //Define the LED´s and Buttons
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 4:bf7431934cf5 86 DigitalIn button1(p20, "button1");// BUTTON IS CONNECTED BETWEEN p20 AND VOUT VIA A 2.2K RESISTOR
MichaelW 1:71b64a776133 87
MichaelW 1:71b64a776133 88 LocalFileSystem fs("webfs");
MichaelW 1:71b64a776133 89
fernandomachado 2:15c92a540ad2 90 EthernetNetIf eth;
MichaelW 1:71b64a776133 91 HTTPServer svr;
MichaelW 1:71b64a776133 92
fernandomachado 2:15c92a540ad2 93 int main()
fernandomachado 2:15c92a540ad2 94 {
MichaelW 1:71b64a776133 95 Base::add_rpc_class<AnalogIn>();
MichaelW 1:71b64a776133 96 Base::add_rpc_class<AnalogOut>();
MichaelW 1:71b64a776133 97 Base::add_rpc_class<DigitalIn>();
MichaelW 1:71b64a776133 98 Base::add_rpc_class<DigitalOut>();
MichaelW 1:71b64a776133 99 Base::add_rpc_class<DigitalInOut>();
MichaelW 1:71b64a776133 100 Base::add_rpc_class<PwmOut>();
MichaelW 1:71b64a776133 101 Base::add_rpc_class<Timer>();
MichaelW 1:71b64a776133 102 Base::add_rpc_class<BusOut>();
MichaelW 1:71b64a776133 103 Base::add_rpc_class<BusIn>();
MichaelW 1:71b64a776133 104 Base::add_rpc_class<BusInOut>();
MichaelW 1:71b64a776133 105 Base::add_rpc_class<Serial>();
MichaelW 1:71b64a776133 106
fernandomachado 2:15c92a540ad2 107
fernandomachado 2:15c92a540ad2 108 printf("Setting up...\n\r");
fernandomachado 2:15c92a540ad2 109 EthernetErr ethErr = eth.setup();
fernandomachado 2:15c92a540ad2 110 if(ethErr) {
fernandomachado 2:15c92a540ad2 111 printf("Error %d in setup.\n\r", ethErr);
fernandomachado 2:15c92a540ad2 112 return -1;
MichaelW 1:71b64a776133 113 }
fernandomachado 2:15c92a540ad2 114 printf("Setup OK\n\r");
fernandomachado 2:15c92a540ad2 115
fernandomachado 2:15c92a540ad2 116 FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
fernandomachado 2:15c92a540ad2 117 FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
fernandomachado 2:15c92a540ad2 118
fernandomachado 2:15c92a540ad2 119 svr.addHandler<SimpleHandler>("/hello");
fernandomachado 2:15c92a540ad2 120 svr.addHandler<RPCHandler>("/rpc");
fernandomachado 2:15c92a540ad2 121 svr.addHandler<FSHandler>("/files");
fernandomachado 2:15c92a540ad2 122 svr.addHandler<FSHandler>("/"); //Default handler
fernandomachado 2:15c92a540ad2 123 //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
fernandomachado 2:15c92a540ad2 124
fernandomachado 2:15c92a540ad2 125 svr.bind(80);
fernandomachado 2:15c92a540ad2 126
fernandomachado 2:15c92a540ad2 127 printf("Listening...\n\r");
MichaelW 1:71b64a776133 128
fernandomachado 2:15c92a540ad2 129 Timer tm;
fernandomachado 2:15c92a540ad2 130 tm.start();
fernandomachado 2:15c92a540ad2 131 //Listen indefinitely
fernandomachado 2:15c92a540ad2 132 while(true) {
fernandomachado 2:15c92a540ad2 133 Net::poll();
fernandomachado 2:15c92a540ad2 134 if(tm.read()>.1) {
fernandomachado 2:15c92a540ad2 135 //led1=!led1; //Show that we are alive
fernandomachado 4:bf7431934cf5 136 printf("Working...\n\r");
fernandomachado 2:15c92a540ad2 137
fernandomachado 2:15c92a540ad2 138 //time_t seconds = time(NULL);
fernandomachado 2:15c92a540ad2 139 //printf("Data e hora = %s\n\r", ctime(&seconds));
fernandomachado 2:15c92a540ad2 140
fernandomachado 2:15c92a540ad2 141 //f = 0.23;
fernandomachado 2:15c92a540ad2 142 //i = i + 1;
fernandomachado 2:15c92a540ad2 143 //c = 'a';
fernandomachado 2:15c92a540ad2 144 volt = ain1.read() * 3.3;
fernandomachado 2:15c92a540ad2 145 temp = ain2.read() * 330; /* temp = ain.read() * 3.3 * 100; */
fernandomachado 2:15c92a540ad2 146 lcd.locate(0,0);
fernandomachado 2:15c92a540ad2 147 lcd.printf ("Voltagem= %2.2f V \n", volt);
fernandomachado 2:15c92a540ad2 148 lcd.locate(0,1);
fernandomachado 2:15c92a540ad2 149 lcd.printf ("Temp= %2.1f C \n", temp);
fernandomachado 2:15c92a540ad2 150
fernandomachado 2:15c92a540ad2 151 tm.start();
fernandomachado 2:15c92a540ad2 152 }
fernandomachado 2:15c92a540ad2 153 }
MichaelW 1:71b64a776133 154 }