Thermometer connected to internet

Dependencies:   BME280 EthernetInterface FXOS8700Q HTTPClient-wolfSSL NTPClient NetworkAPI OAuth4Tw TSL2561_I2C eCompass_FPU_Lib mbed-rtos mbed wolfSSL

Fork of TCP_Server_Example by Roy van Dam

Committer:
zeus3110
Date:
Sun Sep 27 11:04:54 2015 +0000
Revision:
12:12369ee344ab
Network thermometer test program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zeus3110 12:12369ee344ab 1 #include <string.h>
zeus3110 12:12369ee344ab 2 #include "mbed.h"
zeus3110 12:12369ee344ab 3 #include "rtos.h"
zeus3110 12:12369ee344ab 4 #include "EthernetInterface.h"
zeus3110 12:12369ee344ab 5 #include "NTPClient.h"
zeus3110 12:12369ee344ab 6 #include "OAuth4Tw.h"
zeus3110 12:12369ee344ab 7
zeus3110 12:12369ee344ab 8 #include "Twitter.h"
zeus3110 12:12369ee344ab 9 #include "OAuthKey.h"
zeus3110 12:12369ee344ab 10 #include "Sensor.h"
zeus3110 12:12369ee344ab 11
zeus3110 12:12369ee344ab 12 // NTP Client to correct RTC
zeus3110 12:12369ee344ab 13 NTPClient ntp;
zeus3110 12:12369ee344ab 14
zeus3110 12:12369ee344ab 15 // Twitter API URL
zeus3110 12:12369ee344ab 16 const char url[] = "https://api.twitter.com/1.1/statuses/update.json";
zeus3110 12:12369ee344ab 17
zeus3110 12:12369ee344ab 18 char response_buffer[RESPONSE_BUFFER_SIZE];
zeus3110 12:12369ee344ab 19 HTTPText response(response_buffer, sizeof(response_buffer));
zeus3110 12:12369ee344ab 20
zeus3110 12:12369ee344ab 21 void TwitterClient(void const *arg)
zeus3110 12:12369ee344ab 22 {
zeus3110 12:12369ee344ab 23 int i;
zeus3110 12:12369ee344ab 24
zeus3110 12:12369ee344ab 25 for(;;) {
zeus3110 12:12369ee344ab 26 EnvTweet();
zeus3110 12:12369ee344ab 27 example_getUserData();
zeus3110 12:12369ee344ab 28 for(i=0; i<10; i++) {
zeus3110 12:12369ee344ab 29 Thread::wait(60*1000);
zeus3110 12:12369ee344ab 30 }
zeus3110 12:12369ee344ab 31 }
zeus3110 12:12369ee344ab 32 }
zeus3110 12:12369ee344ab 33
zeus3110 12:12369ee344ab 34
zeus3110 12:12369ee344ab 35 void updateTime()
zeus3110 12:12369ee344ab 36 {
zeus3110 12:12369ee344ab 37 printf("Trying to update time...\n");
zeus3110 12:12369ee344ab 38
zeus3110 12:12369ee344ab 39 time_t ctTime;
zeus3110 12:12369ee344ab 40 NTPResult result;
zeus3110 12:12369ee344ab 41
zeus3110 12:12369ee344ab 42 while (1) {
zeus3110 12:12369ee344ab 43 //result = ntp.setTime("pool.ntp.org");
zeus3110 12:12369ee344ab 44 //result = ntp.setTime("pool.ntp.org", NTP_DEFAULT_PORT, 2000);
zeus3110 12:12369ee344ab 45 result = ntp.setTime("ntp.nict.jp");
zeus3110 12:12369ee344ab 46
zeus3110 12:12369ee344ab 47 if (result == NTP_OK) {
zeus3110 12:12369ee344ab 48 time(&ctTime);
zeus3110 12:12369ee344ab 49 printf("Time is set to (UTC): %s\n", ctime(&ctTime));
zeus3110 12:12369ee344ab 50 break;
zeus3110 12:12369ee344ab 51 }
zeus3110 12:12369ee344ab 52
zeus3110 12:12369ee344ab 53 switch (result) {
zeus3110 12:12369ee344ab 54 case NTP_CONN: ///<Connection error
zeus3110 12:12369ee344ab 55 printf("Connection error\n");
zeus3110 12:12369ee344ab 56 break;
zeus3110 12:12369ee344ab 57 case NTP_TIMEOUT: ///<Connection timeout
zeus3110 12:12369ee344ab 58 printf("Connection timeout\n");
zeus3110 12:12369ee344ab 59 break;
zeus3110 12:12369ee344ab 60 case NTP_PRTCL: ///<Protocol error
zeus3110 12:12369ee344ab 61 printf("Protocol error\n");
zeus3110 12:12369ee344ab 62 break;
zeus3110 12:12369ee344ab 63 case NTP_DNS: ///<Could not resolve name
zeus3110 12:12369ee344ab 64 printf("Could not resolve name\n");
zeus3110 12:12369ee344ab 65 break;
zeus3110 12:12369ee344ab 66 default:
zeus3110 12:12369ee344ab 67 printf("Error result=%d\n", result);
zeus3110 12:12369ee344ab 68 break;
zeus3110 12:12369ee344ab 69 }
zeus3110 12:12369ee344ab 70
zeus3110 12:12369ee344ab 71 wait(5);
zeus3110 12:12369ee344ab 72 }
zeus3110 12:12369ee344ab 73 }
zeus3110 12:12369ee344ab 74
zeus3110 12:12369ee344ab 75 void EnvTweet()
zeus3110 12:12369ee344ab 76 {
zeus3110 12:12369ee344ab 77
zeus3110 12:12369ee344ab 78 std::vector<std::string> post;
zeus3110 12:12369ee344ab 79 post.reserve(3);
zeus3110 12:12369ee344ab 80
zeus3110 12:12369ee344ab 81 struct tm tmptr;
zeus3110 12:12369ee344ab 82 char tmstr[34];
zeus3110 12:12369ee344ab 83 char status[150];
zeus3110 12:12369ee344ab 84 char location_lat[24];
zeus3110 12:12369ee344ab 85 char location_long[24];
zeus3110 12:12369ee344ab 86
zeus3110 12:12369ee344ab 87 time_t ctTime;
zeus3110 12:12369ee344ab 88 time(&ctTime);
zeus3110 12:12369ee344ab 89 ctTime += 9 * 60 * 60; // Timezone: JST(+9h)
zeus3110 12:12369ee344ab 90 localtime_r(&ctTime, &tmptr);
zeus3110 12:12369ee344ab 91
zeus3110 12:12369ee344ab 92 // Tweets in Japanese
zeus3110 12:12369ee344ab 93 strftime(tmstr, sizeof(tmstr), "%Y年%m月%d日 %H時%M分%S秒", &tmptr);
zeus3110 12:12369ee344ab 94 snprintf(status, sizeof(status), "status=只今%sですよ~\n温度:%2.2f℃ 気圧:%04.2fhPa 湿度:%2.2f%% 照度:%5.2flx",
zeus3110 12:12369ee344ab 95 tmstr, pSensor->getTemperature(), pSensor->getPressure(), pSensor->getHumidity(),pLumSensor->getLux());
zeus3110 12:12369ee344ab 96 post.push_back(status);
zeus3110 12:12369ee344ab 97
zeus3110 12:12369ee344ab 98 // Option: add Location information
zeus3110 12:12369ee344ab 99 // snprintf(location_lat, sizeof(location_lat), "lat=%f", 35.359577);
zeus3110 12:12369ee344ab 100 // snprintf(location_long, sizeof(location_long), "long=%f", 138.731414);
zeus3110 12:12369ee344ab 101 // post.push_back(location_lat);
zeus3110 12:12369ee344ab 102 // post.push_back(location_long);
zeus3110 12:12369ee344ab 103
zeus3110 12:12369ee344ab 104 HTTPResult result = oa4t.post(url, &post, &response);
zeus3110 12:12369ee344ab 105
zeus3110 12:12369ee344ab 106 if (result == HTTP_OK) {
zeus3110 12:12369ee344ab 107 printf("POST success.\n%s\n", response_buffer);
zeus3110 12:12369ee344ab 108 } else {
zeus3110 12:12369ee344ab 109 printf("POST error. (result = %d)\n", result);
zeus3110 12:12369ee344ab 110 }
zeus3110 12:12369ee344ab 111 }
zeus3110 12:12369ee344ab 112
zeus3110 12:12369ee344ab 113 void example_getUserData()
zeus3110 12:12369ee344ab 114 {
zeus3110 12:12369ee344ab 115 const char url[] = "https://api.twitter.com/1.1/users/show.json"
zeus3110 12:12369ee344ab 116 "?screen_name=twitter";
zeus3110 12:12369ee344ab 117
zeus3110 12:12369ee344ab 118 HTTPResult result = oa4t.get(url, &response);
zeus3110 12:12369ee344ab 119
zeus3110 12:12369ee344ab 120 if (result == HTTP_OK) {
zeus3110 12:12369ee344ab 121 printf("GET success.\n%s\n", response_buffer);
zeus3110 12:12369ee344ab 122 } else {
zeus3110 12:12369ee344ab 123 printf("GET error. (result = %d)\n", result);
zeus3110 12:12369ee344ab 124 }
zeus3110 12:12369ee344ab 125 }