Thingspeak IoT using Nucleo-F411RE and IDW01m1
Dependencies: mbed X_NUCLEO_IDW01M1v2 NetworkSocketAPI
Diff: main.cpp
- Revision:
- 13:9a2016106dae
- Parent:
- 12:80d8e97e81f2
- Child:
- 14:753cc5807f05
--- a/main.cpp Mon Jan 16 13:26:50 2017 +0000 +++ b/main.cpp Sat May 06 17:39:25 2017 +0000 @@ -16,10 +16,22 @@ #include "mbed.h" #include "SpwfInterface.h" +//#include "NTPClient.h" +//#include "HTTPClient.h" #include "TCPSocket.h" +#include "DHT11.h" - +#define PORT 1234 +#define MAX_PENDING 1 +/*Thing speak settings */ +//NTPClient ntp; +//HTTPClient http; + +//char* ntpServerUrl = "0.ca.pool.ntp.org"; +#define IP "184.106.153.149" +char* thingSpeakUrl = "http://api.thingspeak.com/update"; +char* thingSpeakKey = "SBYDOEXE50MNOBSI"; //------------------------------------ // Hyperterminal configuration // 9600 bauds, 8-bit data, no parity @@ -27,41 +39,84 @@ Serial pc(USBTX, USBRX); DigitalOut myled(LED1); - -/************************************* -//FRDM-K64: D9->UART1_TX, D7->UART1_RX -Pin connections: - FRDM IDW01M1 - ------ --------- - +3v3 <--> +3v3 - GND <--> GND - D9 <--> D8 - D7 <--> D2 - -SpwfSAInterface spwf(D9, D7, false); -*************************************/ -/************************************* -//LPCXpresso11U68: D9->UART1_TX, D7->UART1_RX -Pin connections: - LPC IDW01M1 - ------ --------- - +3v3 <--> +3v3 - GND <--> GND - A1 <--> D8 - A2 <--> D2 - -SpwfSAInterface spwf(A1, A2, false); -*************************************/ +AnalogIn ain(A0); +DHT11 sensor(PA_1); +/*************************************/ //NUCLEO: D8->UART1_TX (PA_9), D2->UART1_RX (PA_10) SpwfSAInterface spwf(D8, D2, false); +const double Rl = 10000.0; // Rl (Ohm) - Load resistance +const double Vadc_5 = 0.0048828125; // ADC step 5V/1024 4,88mV (10bit ADC) -int main() { +//const double Vadc_33 = 0.0032226562; // ADC step 3,3V/1024 3,22mV (10bit ADC) +double Vrl; // Output voltage +double Rs; // Rs (Ohm) - Sensor resistance +double ppm; // ppm +double ratio; +int temp; +int humid; + +//Calculation of PPM +void calculatePPM() +{ + double lgPPM; + Vrl = (double)ain*Vadc_5; // For 5V Vcc use Vadc_5 + Rs = (5 - Vrl)/Vrl; // Calculate sensor resistance + ratio = Rs/Rl; // Calculate ratio + lgPPM = (log10(ratio) * -0.8)+ 0.9; // Calculate ppm + ppm = pow(10,lgPPM); // Calculate ppm + pc.printf("The ppm value is %lf \n",ppm); + pc.printf("The raw Rs is %2.3lf\n",ratio); + pc.printf("The raw voltage is %2.3lf \n",Vrl); +} + +int http_demo(void) +{ + TCPSocket socket(&spwf); + char buffer[256]; + char message[40]; + int err; + printf("Sending HTTP Data to thingspeak...\r\n"); + + // Open a socket on the network interface, and create a TCP connection to thingspeak + //socket.open(&spwf); + err=socket.connect(IP,80); // connecting to thingspeak + if(err!=0) + { + pc.printf("\r\nCould not connect to Socket, err = %d!!\r\n", err); + return -1; + } else pc.printf("\r\nconnected to host server\r\n"); + // Send a simple http request + //buffer[0] = 0; + //sprintf(buffer, "GET https://api.thingspeak.com/update?api_key=SBYDOEXE50MNOBSI&field1=%f&field2=%d&field3=%d",(float)ppm,temp,humid);//thingSpeakUrl,thingSpeakKey, + sprintf(message,"field1=%f&field2=%d&field3=%d",ppm,temp,humid); + printf("Message Length=%d\r\n",(int)strlen(message)); + sprintf(buffer,"POST /update HTTP/1.1\r\nHost: api.thingspeak.com\r\nConnection: close\r\nX-THINGSPEAKAPIKEY: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s",thingSpeakKey,(int)strlen(message),message); + pc.printf("Request to %s\r\n", buffer); + //char sbuffer[] = "GET / HTTP/1.1\r\nHost: www.arm.com\r\n\r\n"; + int scount = socket.send(buffer, (int)strlen(buffer)); + printf("sent %d [%.*s]\r\n", scount, strstr(buffer, "\r\n")-buffer, buffer); + + // Recieve a simple http response and print out the response line + char rbuffer[64]; + int rcount = socket.recv(rbuffer, sizeof rbuffer); + printf("recv %d [%.*s]\r\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer); + + // Close the socket to return its memory and bring down the network interface + socket.close(); + return 0; +} + +int main() +{ int err; - char * ssid = "STM"; - char * seckey = "STMDemo"; - - pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n"); + char * ssid = "VM957191-2G"; + char * seckey = "krzvzkcw"; + //char buffer[255]; + //time_t ctTime; + //Host server(IpAddr(), 123, ntpServerUrl); + //ntp.setTime(server); + pc.printf("\r\nAir Quality and Environment monitoring Application\r\n"); pc.printf("\r\nconnecting to AP\r\n"); if(spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA2)) { @@ -75,42 +130,46 @@ const char *mac = spwf.get_mac_address(); pc.printf("\r\nIP Address is: %s\r\n", (ip) ? ip : "No IP"); - pc.printf("\r\nMAC Address is: %s\r\n", (mac) ? mac : "No MAC"); - - SocketAddress addr(&spwf, "st.com"); - pc.printf("\r\nst.com resolved to: %s\r\n", addr.get_ip_address()); - - pc.printf("\r\nconnecting to http://4.ifcfg.me\r\n"); - - TCPSocket socket(&spwf); - err = socket.connect("4.ifcfg.me", 23); - if(err!=0) - { - pc.printf("\r\nCould not connect to Socket, err = %d!!\r\n", err); - return -1; - } else pc.printf("\r\nconnected to host server\r\n"); - - char buffer[100]; - int count = 0; - pc.printf("\r\nReceiving Data\r\n"); - count = socket.recv(buffer, sizeof buffer); + pc.printf("\r\nMAC Address is: %s\r\n", (mac) ? mac : "No MAC"); - if(count > 0) - { - buffer [count]='\0'; - printf("%s\r\n", buffer); + while(1) + { + wait(20); + myled = !myled; + calculatePPM(); + err = sensor.readData(); + if (err ==DHT11::OK) + { + temp=sensor.readTemperature(); + humid=sensor.readHumidity(); + pc.printf("\r\nT: %d oC, H: %d\r\n",temp,humid); + } + else + printf("\r\nErr %i \n",err); + int err=http_demo(); + if(err ==0) + pc.printf("Thingspeak update completed successfully\r\n"); + else + pc.printf("Error occurred %d\r\n",err); + /* buffer[0] = 0; + sprintf(buffer, "%s?key=%s&field1=%s&field2=%d&field3=%d", thingSpeakUrl, thingSpeakKey, , (float)ppm,temp,humid); + printf("Request to %s\r\n", buffer); + + HTTPText resp; + HTTPResult res = http.get(buffer, &resp); + if (res == HTTP_OK) + { + printf("Result :\"%s\"\r\n", resp.gets()); + } + else + { + printf("Error %d\r\n", res); + } */ + + + } - else pc.printf("\r\nData not received\r\n"); + + +} - pc.printf("\r\nClosing Socket\r\n"); - socket.close(); - pc.printf("\r\nUnsecure Socket Test complete.\r\n"); - printf ("Socket closed\n\r"); - spwf.disconnect(); - printf ("WIFI disconnected, exiting ...\n\r"); - - while(1) { - wait(1); - myled = !myled; - } -}