Using the IDW01M1 board for the STM32 Nucleo F401RE board. This project reads data from Air quality MQ135 click and then read DHT11 values and publish on a private channel on the Thingspeak. A Good example of IoT project with the IDW01 board
Dependencies: DHT11 NetworkSocketAPI X_NUCLEO_IDW01M1v2 mbed
Fork of AirQuality_Thingspeak by
This example project uses IDW01M1 WiFi Module to support IoT projects with example sensors such as Airquality Click MQ135 and DHT11 sensor. The sensor values are then published on the Thingspeak channel. The program uses the DHT11, NetworksocketApi and the SPW library fromX_Nucleo_IDW01M1_v2. This project can easily be adapted to add further sensors or use ESP8266 WiFi module as plenty of support is available on mbed.
main.cpp
- Committer:
- imi121
- Date:
- 2017-05-06
- Revision:
- 13:9a2016106dae
- Parent:
- 12:80d8e97e81f2
File content as of revision 13:9a2016106dae:
/* SpwfInterface NetworkSocketAPI Example Program * Copyright (c) 2015 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #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 //------------------------------------ Serial pc(USBTX, USBRX); DigitalOut myled(LED1); 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) //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 = "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)) { pc.printf("\r\nnow connected\r\n"); } else { pc.printf("\r\nerror connecting to AP.\r\n"); return -1; } const char *ip = spwf.get_ip_address(); 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"); 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); } */ } }