Thingspeak IoT using Nucleo-F411RE and IDW01m1
Dependencies: mbed X_NUCLEO_IDW01M1v2 NetworkSocketAPI
main.cpp@14:753cc5807f05, 2019-11-14 (annotated)
- Committer:
- stiotchallenge
- Date:
- Thu Nov 14 04:21:20 2019 +0000
- Revision:
- 14:753cc5807f05
- Parent:
- 13:9a2016106dae
Thingspeak IoT using Nucleo-F411RE and IDW01m1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mridup | 0:dee849b0e6e6 | 1 | /* SpwfInterface NetworkSocketAPI Example Program |
mridup | 0:dee849b0e6e6 | 2 | * Copyright (c) 2015 ARM Limited |
mridup | 0:dee849b0e6e6 | 3 | * |
mridup | 0:dee849b0e6e6 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
mridup | 0:dee849b0e6e6 | 5 | * you may not use this file except in compliance with the License. |
mridup | 0:dee849b0e6e6 | 6 | * You may obtain a copy of the License at |
mridup | 0:dee849b0e6e6 | 7 | * |
mridup | 0:dee849b0e6e6 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
mridup | 0:dee849b0e6e6 | 9 | * |
mridup | 0:dee849b0e6e6 | 10 | * Unless required by applicable law or agreed to in writing, software |
mridup | 0:dee849b0e6e6 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
mridup | 0:dee849b0e6e6 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
mridup | 0:dee849b0e6e6 | 13 | * See the License for the specific language governing permissions and |
mridup | 0:dee849b0e6e6 | 14 | * limitations under the License. |
mridup | 0:dee849b0e6e6 | 15 | */ |
mridup | 0:dee849b0e6e6 | 16 | |
mridup | 0:dee849b0e6e6 | 17 | #include "mbed.h" |
mridup | 0:dee849b0e6e6 | 18 | #include "SpwfInterface.h" |
mridup | 0:dee849b0e6e6 | 19 | #include "TCPSocket.h" |
mapellil | 8:74b827befe72 | 20 | |
imi121 | 13:9a2016106dae | 21 | #define PORT 1234 |
imi121 | 13:9a2016106dae | 22 | #define MAX_PENDING 1 |
imi121 | 13:9a2016106dae | 23 | |
imi121 | 13:9a2016106dae | 24 | #define IP "184.106.153.149" |
imi121 | 13:9a2016106dae | 25 | char* thingSpeakUrl = "http://api.thingspeak.com/update"; |
stiotchallenge | 14:753cc5807f05 | 26 | char* thingSpeakKey = "HJM51JXEXCLTX2KQ"; |
mridup | 0:dee849b0e6e6 | 27 | //------------------------------------ |
mridup | 0:dee849b0e6e6 | 28 | // Hyperterminal configuration |
mridup | 0:dee849b0e6e6 | 29 | // 9600 bauds, 8-bit data, no parity |
mridup | 0:dee849b0e6e6 | 30 | //------------------------------------ |
mridup | 0:dee849b0e6e6 | 31 | |
mridup | 2:3a87dbea07a7 | 32 | Serial pc(USBTX, USBRX); |
mridup | 0:dee849b0e6e6 | 33 | DigitalOut myled(LED1); |
stiotchallenge | 14:753cc5807f05 | 34 | |
imi121 | 13:9a2016106dae | 35 | /*************************************/ |
mridup | 1:daf71fa3674c | 36 | |
mridup | 1:daf71fa3674c | 37 | SpwfSAInterface spwf(D8, D2, false); |
stiotchallenge | 14:753cc5807f05 | 38 | int temp=5; |
stiotchallenge | 14:753cc5807f05 | 39 | int humid=1; |
imi121 | 13:9a2016106dae | 40 | |
imi121 | 13:9a2016106dae | 41 | int http_demo(void) |
imi121 | 13:9a2016106dae | 42 | { |
imi121 | 13:9a2016106dae | 43 | TCPSocket socket(&spwf); |
imi121 | 13:9a2016106dae | 44 | char buffer[256]; |
imi121 | 13:9a2016106dae | 45 | char message[40]; |
imi121 | 13:9a2016106dae | 46 | int err; |
imi121 | 13:9a2016106dae | 47 | printf("Sending HTTP Data to thingspeak...\r\n"); |
imi121 | 13:9a2016106dae | 48 | |
imi121 | 13:9a2016106dae | 49 | // Open a socket on the network interface, and create a TCP connection to thingspeak |
imi121 | 13:9a2016106dae | 50 | //socket.open(&spwf); |
imi121 | 13:9a2016106dae | 51 | err=socket.connect(IP,80); // connecting to thingspeak |
stiotchallenge | 14:753cc5807f05 | 52 | if(err!=0) { |
stiotchallenge | 14:753cc5807f05 | 53 | pc.printf("\r\nCould not connect to Socket, err = %d!!\r\n", err); |
stiotchallenge | 14:753cc5807f05 | 54 | return -1; |
stiotchallenge | 14:753cc5807f05 | 55 | } |
stiotchallenge | 14:753cc5807f05 | 56 | else |
stiotchallenge | 14:753cc5807f05 | 57 | pc.printf("\r\nconnected to host server\r\n"); |
stiotchallenge | 14:753cc5807f05 | 58 | |
imi121 | 13:9a2016106dae | 59 | // Send a simple http request |
stiotchallenge | 14:753cc5807f05 | 60 | sprintf(message,"field1=%d&field2=%d",temp,humid); |
imi121 | 13:9a2016106dae | 61 | printf("Message Length=%d\r\n",(int)strlen(message)); |
imi121 | 13:9a2016106dae | 62 | 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); |
imi121 | 13:9a2016106dae | 63 | pc.printf("Request to %s\r\n", buffer); |
imi121 | 13:9a2016106dae | 64 | //char sbuffer[] = "GET / HTTP/1.1\r\nHost: www.arm.com\r\n\r\n"; |
imi121 | 13:9a2016106dae | 65 | int scount = socket.send(buffer, (int)strlen(buffer)); |
imi121 | 13:9a2016106dae | 66 | printf("sent %d [%.*s]\r\n", scount, strstr(buffer, "\r\n")-buffer, buffer); |
imi121 | 13:9a2016106dae | 67 | |
imi121 | 13:9a2016106dae | 68 | // Recieve a simple http response and print out the response line |
imi121 | 13:9a2016106dae | 69 | char rbuffer[64]; |
imi121 | 13:9a2016106dae | 70 | int rcount = socket.recv(rbuffer, sizeof rbuffer); |
imi121 | 13:9a2016106dae | 71 | printf("recv %d [%.*s]\r\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer); |
imi121 | 13:9a2016106dae | 72 | |
imi121 | 13:9a2016106dae | 73 | // Close the socket to return its memory and bring down the network interface |
imi121 | 13:9a2016106dae | 74 | socket.close(); |
imi121 | 13:9a2016106dae | 75 | return 0; |
imi121 | 13:9a2016106dae | 76 | } |
imi121 | 13:9a2016106dae | 77 | |
imi121 | 13:9a2016106dae | 78 | int main() |
imi121 | 13:9a2016106dae | 79 | { |
mridup | 0:dee849b0e6e6 | 80 | int err; |
stiotchallenge | 14:753cc5807f05 | 81 | char * ssid = "iPhone"; |
stiotchallenge | 14:753cc5807f05 | 82 | char * seckey = "abcd1234"; |
stiotchallenge | 14:753cc5807f05 | 83 | pc.printf("\r\nNucleo F411RE + WiFi + Thingspeak\r\n"); |
mridup | 0:dee849b0e6e6 | 84 | pc.printf("\r\nconnecting to AP\r\n"); |
mridup | 0:dee849b0e6e6 | 85 | |
mridup | 0:dee849b0e6e6 | 86 | if(spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA2)) { |
mridup | 0:dee849b0e6e6 | 87 | pc.printf("\r\nnow connected\r\n"); |
mridup | 0:dee849b0e6e6 | 88 | } else { |
mridup | 0:dee849b0e6e6 | 89 | pc.printf("\r\nerror connecting to AP.\r\n"); |
mridup | 0:dee849b0e6e6 | 90 | return -1; |
mridup | 0:dee849b0e6e6 | 91 | } |
mapellil | 8:74b827befe72 | 92 | |
mridup | 0:dee849b0e6e6 | 93 | const char *ip = spwf.get_ip_address(); |
mridup | 0:dee849b0e6e6 | 94 | const char *mac = spwf.get_mac_address(); |
mridup | 0:dee849b0e6e6 | 95 | |
mridup | 0:dee849b0e6e6 | 96 | pc.printf("\r\nIP Address is: %s\r\n", (ip) ? ip : "No IP"); |
imi121 | 13:9a2016106dae | 97 | pc.printf("\r\nMAC Address is: %s\r\n", (mac) ? mac : "No MAC"); |
mridup | 0:dee849b0e6e6 | 98 | |
imi121 | 13:9a2016106dae | 99 | while(1) |
imi121 | 13:9a2016106dae | 100 | { |
stiotchallenge | 14:753cc5807f05 | 101 | wait(20); |
stiotchallenge | 14:753cc5807f05 | 102 | myled = !myled; |
stiotchallenge | 14:753cc5807f05 | 103 | |
stiotchallenge | 14:753cc5807f05 | 104 | int err=http_demo(); |
stiotchallenge | 14:753cc5807f05 | 105 | if(err==0) |
stiotchallenge | 14:753cc5807f05 | 106 | pc.printf("Thingspeak update completed successfully\r\n"); |
imi121 | 13:9a2016106dae | 107 | else |
stiotchallenge | 14:753cc5807f05 | 108 | pc.printf("Error occurred %d\r\n",err); |
mridup | 0:dee849b0e6e6 | 109 | } |
imi121 | 13:9a2016106dae | 110 | } |
mridup | 0:dee849b0e6e6 | 111 |