I tried ThinkSpeak functionality to the WiFi sample program. It is proven with ODIN-W2.

Dependencies:   LM75B

Fork of mbed-os-example-mbed5-wifi by mbed-os-examples

Revision:
8:72d49a084297
Parent:
1:aea78e21a7da
--- a/main.cpp	Thu Dec 15 16:30:04 2016 +0000
+++ b/main.cpp	Thu Dec 22 10:14:52 2016 +0000
@@ -1,5 +1,6 @@
-/* WiFi Example
+/* WiFi Example with ThingSpeak
  * Copyright (c) 2016 ARM Limited
+ *                    Fuji Electronics Hiroaki Okoshi 2016.12.22 Modify.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,11 @@
 ESP8266Interface wifi(D1, D0);
 #endif
 
+#include "LM75B.h"              //  温度センサー
+LM75B sensor(D14,D15);
+
+DigitalOut led1(LED1);
+
 const char *sec2str(nsapi_security_t sec)
 {
     switch (sec) {
@@ -60,8 +66,7 @@
 
     ap = new WiFiAccessPoint[count];
     count = wifi->scan(ap, count);
-    for (int i = 0; i < count; i++)
-    {
+    for (int i = 0; i < count; i++) {
         printf("Network: %s secured: %s BSSID: %hhX:%hhX:%hhX:%hhx:%hhx:%hhx RSSI: %hhd Ch: %hhd\r\n", ap[i].get_ssid(),
                sec2str(ap[i].get_security()), ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2],
                ap[i].get_bssid()[3], ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel());
@@ -71,28 +76,36 @@
     delete[] ap;
 }
 
-void http_demo(NetworkInterface *net)
+/*
+ * ThingSpeak Demo
+ */
+
+void ThingSpeak_demo(NetworkInterface *net)
 {
     TCPSocket socket;
+    socket.open(net);   // ソケットオープン
 
-    printf("Sending HTTP request to www.arm.com...\r\n");
+    socket.connect("api.thingspeak.com", 80);
+    char urlBuffer[128];
 
-    // Open a socket on the network interface, and create a TCP connection to www.arm.com
-    socket.open(net);
-    socket.connect("www.arm.com", 80);
+    // 温度情報取得
+    float temperature = sensor.read();
+
+    // メッセージ用テキストを生成
+    urlBuffer[0]=0;
+    sprintf(urlBuffer, "GET /update?api_key=%s&field1=%f\r\n\r\n", MBED_CONF_APP_THINGSPEAK_KEY, temperature);
 
-    // Send a simple http request
-    char sbuffer[] = "GET / HTTP/1.1\r\nHost: www.arm.com\r\n\r\n";
-    int scount = socket.send(sbuffer, sizeof sbuffer);
-    printf("sent %d [%.*s]\r\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+    // ThingSpeed にメッセージを送信
+    int BuffreLen = strlen(urlBuffer);
+    int scount = socket.send(urlBuffer, BuffreLen+1);
+    printf ("strlen=%d,urlBuffer=%.*s",BuffreLen,BuffreLen-2,urlBuffer);
 
-    // 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);
+    // for debug    // デバグ時に受信内容を確認する。
+    // 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();
+    socket.close(); //ソケットクローズ
 }
 
 int main()
@@ -115,9 +128,17 @@
     printf("Gateway: %s\r\n", wifi.get_gateway());
     printf("RSSI: %d\r\n\r\n", wifi.get_rssi());
 
-    http_demo(&wifi);
+    printf("ThingSpeak Demo\r\n");
+
+    // 60秒に1回メッセージを送信する。
+    for (int i=0 ; i<1000 ; i++) {
+        led1 = !led1;
+        printf ("%d:",i);
+        ThingSpeak_demo(&wifi); //ThingSpeed に
+        Thread::wait(60000);    //60秒に一回送信
+    }
 
     wifi.disconnect();
 
-    printf("\r\nDone\r\n");
+    printf ("Done\r\n");
 }