Reads the value of A0 and sets LED1 if A0>2000mV; also dweets data to thingspace.io

Dependencies:   NetworkSocketAPI X_NUCLEO_IDW01M1v2 mbed

Committer:
tamershek
Date:
Wed Nov 02 13:25:17 2016 +0000
Revision:
0:45e9e04829d0
Using v2 of IDW01M1 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamershek 0:45e9e04829d0 1 // read analog0 and send to thingspace.io
tamershek 0:45e9e04829d0 2 // toma 2016-11-01
tamershek 0:45e9e04829d0 3
tamershek 0:45e9e04829d0 4 #include "mbed.h"
tamershek 0:45e9e04829d0 5 #include "stdio.h"
tamershek 0:45e9e04829d0 6 #include "SpwfInterface.h"
tamershek 0:45e9e04829d0 7 #include "TCPSocket.h"
tamershek 0:45e9e04829d0 8 #include <string>
tamershek 0:45e9e04829d0 9
tamershek 0:45e9e04829d0 10 /*************************************
tamershek 0:45e9e04829d0 11 //FRDM-K64: D9->UART1_TX, D7->UART1_RX
tamershek 0:45e9e04829d0 12 Pin connections:
tamershek 0:45e9e04829d0 13 FRDM IDW01M1
tamershek 0:45e9e04829d0 14 ------ ---------
tamershek 0:45e9e04829d0 15 +3v3 <--> +3v3
tamershek 0:45e9e04829d0 16 GND <--> GND
tamershek 0:45e9e04829d0 17 D9 <--> D8
tamershek 0:45e9e04829d0 18 D7 <--> D2
tamershek 0:45e9e04829d0 19
tamershek 0:45e9e04829d0 20 SpwfSAInterface spwf(D9, D7, false);
tamershek 0:45e9e04829d0 21 *************************************/
tamershek 0:45e9e04829d0 22 /*************************************
tamershek 0:45e9e04829d0 23 //LPCXpresso11U68: D9->UART1_TX, D7->UART1_RX
tamershek 0:45e9e04829d0 24 Pin connections:
tamershek 0:45e9e04829d0 25 LPC IDW01M1
tamershek 0:45e9e04829d0 26 ------ ---------
tamershek 0:45e9e04829d0 27 +3v3 <--> +3v3
tamershek 0:45e9e04829d0 28 GND <--> GND
tamershek 0:45e9e04829d0 29 A1 <--> D8
tamershek 0:45e9e04829d0 30 A2 <--> D2
tamershek 0:45e9e04829d0 31
tamershek 0:45e9e04829d0 32 SpwfSAInterface spwf(A1, A2, false);
tamershek 0:45e9e04829d0 33 *************************************/
tamershek 0:45e9e04829d0 34
tamershek 0:45e9e04829d0 35 //NUCLEO: D8->UART1_TX (PA_9), D2->UART1_RX (PA_10)
tamershek 0:45e9e04829d0 36
tamershek 0:45e9e04829d0 37 using namespace std;
tamershek 0:45e9e04829d0 38
tamershek 0:45e9e04829d0 39 AnalogIn analog_input_A0(A0);
tamershek 0:45e9e04829d0 40 Serial serial_port(USBTX, USBRX);
tamershek 0:45e9e04829d0 41 DigitalOut myLed(LED1);
tamershek 0:45e9e04829d0 42 SpwfSAInterface spwf(D8, D2, false);
tamershek 0:45e9e04829d0 43
tamershek 0:45e9e04829d0 44 int errConnect;
tamershek 0:45e9e04829d0 45 int errSend;
tamershek 0:45e9e04829d0 46
tamershek 0:45e9e04829d0 47 int main()
tamershek 0:45e9e04829d0 48 {
tamershek 0:45e9e04829d0 49 float panel_voltage;
tamershek 0:45e9e04829d0 50 DigitalOut led(LED1);
tamershek 0:45e9e04829d0 51 serial_port.baud(9600);
tamershek 0:45e9e04829d0 52
tamershek 0:45e9e04829d0 53 printf("\r\n\r\n*** system restart");
tamershek 0:45e9e04829d0 54 printf("\r\n\r\nanalog0 example using thingspace.io ...\n");
tamershek 0:45e9e04829d0 55
tamershek 0:45e9e04829d0 56 char *ssid = "";
tamershek 0:45e9e04829d0 57 char *seckey = "";
tamershek 0:45e9e04829d0 58 const char *mac;
tamershek 0:45e9e04829d0 59
tamershek 0:45e9e04829d0 60 printf("X-NUCLEO-IDW01M1v2 mbed application\r\n");
tamershek 0:45e9e04829d0 61
tamershek 0:45e9e04829d0 62 int spwfResponse;
tamershek 0:45e9e04829d0 63 spwfResponse = 0;
tamershek 0:45e9e04829d0 64
tamershek 0:45e9e04829d0 65 while(spwfResponse != 1) {
tamershek 0:45e9e04829d0 66 printf("connecting to access point ...\r\n");
tamershek 0:45e9e04829d0 67 spwfResponse = spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA2);//WPA
tamershek 0:45e9e04829d0 68 printf("\nresponse: %i\n", spwfResponse);
tamershek 0:45e9e04829d0 69 if(spwfResponse != 1)
tamershek 0:45e9e04829d0 70 {
tamershek 0:45e9e04829d0 71 printf("error making connecting to access point\r\n");
tamershek 0:45e9e04829d0 72 }
tamershek 0:45e9e04829d0 73 else
tamershek 0:45e9e04829d0 74 {
tamershek 0:45e9e04829d0 75 printf("success connecting to access point\r\n");
tamershek 0:45e9e04829d0 76 const char *ip = spwf.get_ip_address();
tamershek 0:45e9e04829d0 77 mac = spwf.get_mac_address();
tamershek 0:45e9e04829d0 78 printf("\r\nip address = %s\r\n", (ip) ? ip : "error getting ip address");
tamershek 0:45e9e04829d0 79 printf("mac address = %s\r\n", (mac) ? mac : "error getting the mac address\n");
tamershek 0:45e9e04829d0 80 }
tamershek 0:45e9e04829d0 81 }
tamershek 0:45e9e04829d0 82
tamershek 0:45e9e04829d0 83 SocketAddress addrDweetServer(&spwf, "thingspace.io");
tamershek 0:45e9e04829d0 84 printf("\r\nthingspace.verizon.com resolved to: %s\r\n\r\n", addrDweetServer.get_ip_address());
tamershek 0:45e9e04829d0 85
tamershek 0:45e9e04829d0 86 TCPSocket socket(&spwf);
tamershek 0:45e9e04829d0 87
tamershek 0:45e9e04829d0 88 // connect socket
tamershek 0:45e9e04829d0 89 errConnect = socket.connect("thingspace.io", 80);
tamershek 0:45e9e04829d0 90 if(errConnect!=0) {
tamershek 0:45e9e04829d0 91 printf("\r\ncould not connect to socket; error = %d\r\n", errConnect);
tamershek 0:45e9e04829d0 92 } else {
tamershek 0:45e9e04829d0 93 printf("socket connected\r\n");
tamershek 0:45e9e04829d0 94 }
tamershek 0:45e9e04829d0 95
tamershek 0:45e9e04829d0 96 // get the last 2 bytes of the mac for the thing name
tamershek 0:45e9e04829d0 97 std::string macString = mac;
tamershek 0:45e9e04829d0 98 macString.erase(0,9);
tamershek 0:45e9e04829d0 99 macString.erase(2,1);
tamershek 0:45e9e04829d0 100 macString.erase(4,1);
tamershek 0:45e9e04829d0 101 const char *macBytes = macString.c_str();
tamershek 0:45e9e04829d0 102
tamershek 0:45e9e04829d0 103 while(1) {
tamershek 0:45e9e04829d0 104 panel_voltage = analog_input_A0.read();
tamershek 0:45e9e04829d0 105 printf("voltage: %f\r\n", panel_voltage);
tamershek 0:45e9e04829d0 106 // A0 is voltage tolerant to 3.3V, and analog read returns a percentage of the maximum
tamershek 0:45e9e04829d0 107 // need to convert the percentage back to a representative number
tamershek 0:45e9e04829d0 108 panel_voltage = panel_voltage * 3300; // change the value to be in the 0 to 3300 range
tamershek 0:45e9e04829d0 109 // printf("a0 reads %.3f mV\n", panel_voltage); // use 3 decimals of precision
tamershek 0:45e9e04829d0 110
tamershek 0:45e9e04829d0 111 // enable LED if voltage exceeds 2000 mV
tamershek 0:45e9e04829d0 112 if (panel_voltage > 2000) {
tamershek 0:45e9e04829d0 113 myLed = 1;
tamershek 0:45e9e04829d0 114 }
tamershek 0:45e9e04829d0 115 else {
tamershek 0:45e9e04829d0 116 myLed = 0;
tamershek 0:45e9e04829d0 117 }
tamershek 0:45e9e04829d0 118
tamershek 0:45e9e04829d0 119 // don't bother if never connected ...
tamershek 0:45e9e04829d0 120 if (spwfResponse == 1) {
tamershek 0:45e9e04829d0 121 // get length of jsonContent as string without streams
tamershek 0:45e9e04829d0 122 // adapted from http://codereview.stackexchange.com/questions/51270/socket-http-post-request
tamershek 0:45e9e04829d0 123
tamershek 0:45e9e04829d0 124 char dweetBuffer[72] = "";
tamershek 0:45e9e04829d0 125
tamershek 0:45e9e04829d0 126 // create GET HTTP header for dweeting
tamershek 0:45e9e04829d0 127 strcpy(dweetBuffer, "GET /dweet/for/nucleo-");
tamershek 0:45e9e04829d0 128 strcat(dweetBuffer, macBytes);
tamershek 0:45e9e04829d0 129 char valueRead[20];
tamershek 0:45e9e04829d0 130 sprintf(valueRead, "?voltage=%f", panel_voltage);
tamershek 0:45e9e04829d0 131 strcat(dweetBuffer, valueRead);
tamershek 0:45e9e04829d0 132 strcat(dweetBuffer, " HTTP/1.1\r\n\r\n");
tamershek 0:45e9e04829d0 133
tamershek 0:45e9e04829d0 134 serial_port.printf("\r\n%s", dweetBuffer);
tamershek 0:45e9e04829d0 135
tamershek 0:45e9e04829d0 136 char bufferRx[512] = "";
tamershek 0:45e9e04829d0 137 int countRx = 0;
tamershek 0:45e9e04829d0 138 serial_port.printf("sending and receiving data ...\r\n");
tamershek 0:45e9e04829d0 139 errSend = socket.send(dweetBuffer, strlen(dweetBuffer));
tamershek 0:45e9e04829d0 140 countRx = socket.recv(bufferRx, sizeof bufferRx);
tamershek 0:45e9e04829d0 141 printf("sent %d bytes\r\nand received %d bytes\r\n\r\n", errSend, countRx);
tamershek 0:45e9e04829d0 142 printf(bufferRx);
tamershek 0:45e9e04829d0 143 printf("\r\n\r\n*** 5-second pause ...\r\n");
tamershek 0:45e9e04829d0 144 }
tamershek 0:45e9e04829d0 145 wait(5.0); // 5000 ms delay before looping to next read
tamershek 0:45e9e04829d0 146 }
tamershek 0:45e9e04829d0 147 }