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
Twitter.cpp@12:12369ee344ab, 2015-09-27 (annotated)
- Committer:
- zeus3110
- Date:
- Sun Sep 27 11:04:54 2015 +0000
- Revision:
- 12:12369ee344ab
Network thermometer test program
Who changed what in which revision?
User | Revision | Line number | New 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 | } |