test
Dependencies: BME280 EthernetInterface HTTPClient-wolfSSL NTPClient OAuth4Tw TSL2561_I2C mbed-rtos mbed wolfSSL
main.cpp@0:14479f8183a0, 2015-09-05 (annotated)
- Committer:
- zeus3110
- Date:
- Sat Sep 05 13:49:28 2015 +0000
- Revision:
- 0:14479f8183a0
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zeus3110 | 0:14479f8183a0 | 1 | #include <string.h> |
zeus3110 | 0:14479f8183a0 | 2 | #include "mbed.h" |
zeus3110 | 0:14479f8183a0 | 3 | #include "EthernetInterface.h" |
zeus3110 | 0:14479f8183a0 | 4 | #include "NTPClient.h" |
zeus3110 | 0:14479f8183a0 | 5 | #include "OAuth4Tw.h" |
zeus3110 | 0:14479f8183a0 | 6 | #include "BME280.h" |
zeus3110 | 0:14479f8183a0 | 7 | #include "TSL2561_I2C.h" |
zeus3110 | 0:14479f8183a0 | 8 | |
zeus3110 | 0:14479f8183a0 | 9 | Serial pc(USBTX, USBRX); |
zeus3110 | 0:14479f8183a0 | 10 | DigitalOut myled(LED1); |
zeus3110 | 0:14479f8183a0 | 11 | #ifndef USE_FIXEDIP |
zeus3110 | 0:14479f8183a0 | 12 | EthernetInterface eth; |
zeus3110 | 0:14479f8183a0 | 13 | #else |
zeus3110 | 0:14479f8183a0 | 14 | EthernetNetIf eth( |
zeus3110 | 0:14479f8183a0 | 15 | IpAddr(192,168,0,210), //IP Address |
zeus3110 | 0:14479f8183a0 | 16 | IpAddr(255,255,255,0), //Network Mask |
zeus3110 | 0:14479f8183a0 | 17 | IpAddr(192,168,0,1), //Gateway |
zeus3110 | 0:14479f8183a0 | 18 | IpAddr(192,168,0,1) //DNS |
zeus3110 | 0:14479f8183a0 | 19 | ); |
zeus3110 | 0:14479f8183a0 | 20 | #endif |
zeus3110 | 0:14479f8183a0 | 21 | |
zeus3110 | 0:14479f8183a0 | 22 | NTPClient ntp; |
zeus3110 | 0:14479f8183a0 | 23 | BME280 sensor(p9, p10); |
zeus3110 | 0:14479f8183a0 | 24 | TSL2561_I2C lum_sensor( p9, p10 ); |
zeus3110 | 0:14479f8183a0 | 25 | |
zeus3110 | 0:14479f8183a0 | 26 | OAuth4Tw oa4t("Your Consumer key", // Consumer key |
zeus3110 | 0:14479f8183a0 | 27 | "Your Consumer secret", // Consumer secret |
zeus3110 | 0:14479f8183a0 | 28 | "Your Access token", // Access token |
zeus3110 | 0:14479f8183a0 | 29 | "Your Access token secret"); // Access token secret |
zeus3110 | 0:14479f8183a0 | 30 | |
zeus3110 | 0:14479f8183a0 | 31 | #if defined(TARGET_LPC1768) |
zeus3110 | 0:14479f8183a0 | 32 | #define RESPONSE_BUFFER_SIZE 512 |
zeus3110 | 0:14479f8183a0 | 33 | #elif defined(TARGET_K64F) || defined(TARGET_LPC4088) |
zeus3110 | 0:14479f8183a0 | 34 | #define RESPONSE_BUFFER_SIZE 4096 |
zeus3110 | 0:14479f8183a0 | 35 | #else |
zeus3110 | 0:14479f8183a0 | 36 | #error not tested platform. |
zeus3110 | 0:14479f8183a0 | 37 | #endif |
zeus3110 | 0:14479f8183a0 | 38 | |
zeus3110 | 0:14479f8183a0 | 39 | char response_buffer[RESPONSE_BUFFER_SIZE]; |
zeus3110 | 0:14479f8183a0 | 40 | HTTPText response(response_buffer, sizeof(response_buffer)); |
zeus3110 | 0:14479f8183a0 | 41 | |
zeus3110 | 0:14479f8183a0 | 42 | // prototype |
zeus3110 | 0:14479f8183a0 | 43 | void updateTime(); |
zeus3110 | 0:14479f8183a0 | 44 | void EnvTweet(); |
zeus3110 | 0:14479f8183a0 | 45 | void example_getUserData(); |
zeus3110 | 0:14479f8183a0 | 46 | |
zeus3110 | 0:14479f8183a0 | 47 | // Constant Value |
zeus3110 | 0:14479f8183a0 | 48 | const int TweetIntervalSec=600; // 600sec 10min |
zeus3110 | 0:14479f8183a0 | 49 | |
zeus3110 | 0:14479f8183a0 | 50 | int main() |
zeus3110 | 0:14479f8183a0 | 51 | { |
zeus3110 | 0:14479f8183a0 | 52 | pc.baud(115200); |
zeus3110 | 0:14479f8183a0 | 53 | |
zeus3110 | 0:14479f8183a0 | 54 | eth.init(); //Use DHCP |
zeus3110 | 0:14479f8183a0 | 55 | printf("Initialized, MAC: %s\n", eth.getMACAddress()); |
zeus3110 | 0:14479f8183a0 | 56 | |
zeus3110 | 0:14479f8183a0 | 57 | int ret; |
zeus3110 | 0:14479f8183a0 | 58 | while ((ret = eth.connect()) != 0) { |
zeus3110 | 0:14479f8183a0 | 59 | printf("Error eth.connect() - ret = %d\n", ret); |
zeus3110 | 0:14479f8183a0 | 60 | } |
zeus3110 | 0:14479f8183a0 | 61 | |
zeus3110 | 0:14479f8183a0 | 62 | printf("Connected, IP: %s, MASK: %s, GW: %s\n", |
zeus3110 | 0:14479f8183a0 | 63 | eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); |
zeus3110 | 0:14479f8183a0 | 64 | |
zeus3110 | 0:14479f8183a0 | 65 | // requires accurate time, for OAuth Authorization. |
zeus3110 | 0:14479f8183a0 | 66 | updateTime(); |
zeus3110 | 0:14479f8183a0 | 67 | |
zeus3110 | 0:14479f8183a0 | 68 | while (1) { |
zeus3110 | 0:14479f8183a0 | 69 | |
zeus3110 | 0:14479f8183a0 | 70 | EnvTweet(); |
zeus3110 | 0:14479f8183a0 | 71 | |
zeus3110 | 0:14479f8183a0 | 72 | example_getUserData(); |
zeus3110 | 0:14479f8183a0 | 73 | |
zeus3110 | 0:14479f8183a0 | 74 | // Wait 600 seconds for next time. |
zeus3110 | 0:14479f8183a0 | 75 | for (int t=0; t<TweetIntervalSec; t++) { |
zeus3110 | 0:14479f8183a0 | 76 | myled = 1; |
zeus3110 | 0:14479f8183a0 | 77 | wait(0.2); |
zeus3110 | 0:14479f8183a0 | 78 | myled = 0; |
zeus3110 | 0:14479f8183a0 | 79 | wait(0.8); |
zeus3110 | 0:14479f8183a0 | 80 | } |
zeus3110 | 0:14479f8183a0 | 81 | |
zeus3110 | 0:14479f8183a0 | 82 | printf("\n"); |
zeus3110 | 0:14479f8183a0 | 83 | } |
zeus3110 | 0:14479f8183a0 | 84 | } |
zeus3110 | 0:14479f8183a0 | 85 | |
zeus3110 | 0:14479f8183a0 | 86 | |
zeus3110 | 0:14479f8183a0 | 87 | void updateTime() |
zeus3110 | 0:14479f8183a0 | 88 | { |
zeus3110 | 0:14479f8183a0 | 89 | printf("Trying to update time...\n"); |
zeus3110 | 0:14479f8183a0 | 90 | |
zeus3110 | 0:14479f8183a0 | 91 | time_t ctTime; |
zeus3110 | 0:14479f8183a0 | 92 | NTPResult result; |
zeus3110 | 0:14479f8183a0 | 93 | |
zeus3110 | 0:14479f8183a0 | 94 | while (1) { |
zeus3110 | 0:14479f8183a0 | 95 | result = ntp.setTime("pool.ntp.org"); |
zeus3110 | 0:14479f8183a0 | 96 | //result = ntp.setTime("pool.ntp.org", NTP_DEFAULT_PORT, 2000); |
zeus3110 | 0:14479f8183a0 | 97 | |
zeus3110 | 0:14479f8183a0 | 98 | if (result == NTP_OK) { |
zeus3110 | 0:14479f8183a0 | 99 | time(&ctTime); |
zeus3110 | 0:14479f8183a0 | 100 | printf("Time is set to (UTC): %s\n", ctime(&ctTime)); |
zeus3110 | 0:14479f8183a0 | 101 | break; |
zeus3110 | 0:14479f8183a0 | 102 | } |
zeus3110 | 0:14479f8183a0 | 103 | |
zeus3110 | 0:14479f8183a0 | 104 | switch (result) { |
zeus3110 | 0:14479f8183a0 | 105 | case NTP_CONN: ///<Connection error |
zeus3110 | 0:14479f8183a0 | 106 | printf("Connection error\n"); |
zeus3110 | 0:14479f8183a0 | 107 | break; |
zeus3110 | 0:14479f8183a0 | 108 | case NTP_TIMEOUT: ///<Connection timeout |
zeus3110 | 0:14479f8183a0 | 109 | printf("Connection timeout\n"); |
zeus3110 | 0:14479f8183a0 | 110 | break; |
zeus3110 | 0:14479f8183a0 | 111 | case NTP_PRTCL: ///<Protocol error |
zeus3110 | 0:14479f8183a0 | 112 | printf("Protocol error\n"); |
zeus3110 | 0:14479f8183a0 | 113 | break; |
zeus3110 | 0:14479f8183a0 | 114 | case NTP_DNS: ///<Could not resolve name |
zeus3110 | 0:14479f8183a0 | 115 | printf("Could not resolve name\n"); |
zeus3110 | 0:14479f8183a0 | 116 | break; |
zeus3110 | 0:14479f8183a0 | 117 | default: |
zeus3110 | 0:14479f8183a0 | 118 | printf("Error result=%d\n", result); |
zeus3110 | 0:14479f8183a0 | 119 | break; |
zeus3110 | 0:14479f8183a0 | 120 | } |
zeus3110 | 0:14479f8183a0 | 121 | |
zeus3110 | 0:14479f8183a0 | 122 | wait(5); |
zeus3110 | 0:14479f8183a0 | 123 | } |
zeus3110 | 0:14479f8183a0 | 124 | } |
zeus3110 | 0:14479f8183a0 | 125 | |
zeus3110 | 0:14479f8183a0 | 126 | void EnvTweet() |
zeus3110 | 0:14479f8183a0 | 127 | { |
zeus3110 | 0:14479f8183a0 | 128 | const char url[] = "https://api.twitter.com/1.1/statuses/update.json" |
zeus3110 | 0:14479f8183a0 | 129 | "?status=%s"; |
zeus3110 | 0:14479f8183a0 | 130 | char url2[128]; |
zeus3110 | 0:14479f8183a0 | 131 | char status[90]; |
zeus3110 | 0:14479f8183a0 | 132 | |
zeus3110 | 0:14479f8183a0 | 133 | time_t ctTime; |
zeus3110 | 0:14479f8183a0 | 134 | time(&ctTime); |
zeus3110 | 0:14479f8183a0 | 135 | |
zeus3110 | 0:14479f8183a0 | 136 | sprintf(status,"温度:%2.2f℃ 気圧:%04.2fhPa 湿度:%2.2f%% 照度:%4.2flx\n", sensor.getTemperature(), sensor.getPressure(), sensor.getHumidity(),lum_sensor.getLux()); |
zeus3110 | 0:14479f8183a0 | 137 | |
zeus3110 | 0:14479f8183a0 | 138 | snprintf(url2, sizeof(url2), url, status); |
zeus3110 | 0:14479f8183a0 | 139 | |
zeus3110 | 0:14479f8183a0 | 140 | HTTPResult result = oa4t.post(url2, &response); |
zeus3110 | 0:14479f8183a0 | 141 | |
zeus3110 | 0:14479f8183a0 | 142 | if (result == HTTP_OK) { |
zeus3110 | 0:14479f8183a0 | 143 | printf("POST success.\n%s\n", response_buffer); |
zeus3110 | 0:14479f8183a0 | 144 | } else { |
zeus3110 | 0:14479f8183a0 | 145 | printf("POST error. (result = %d)\n", result); |
zeus3110 | 0:14479f8183a0 | 146 | } |
zeus3110 | 0:14479f8183a0 | 147 | } |
zeus3110 | 0:14479f8183a0 | 148 | |
zeus3110 | 0:14479f8183a0 | 149 | void example_getUserData() |
zeus3110 | 0:14479f8183a0 | 150 | { |
zeus3110 | 0:14479f8183a0 | 151 | const char url[] = "https://api.twitter.com/1.1/users/show.json" |
zeus3110 | 0:14479f8183a0 | 152 | "?screen_name=twitter"; |
zeus3110 | 0:14479f8183a0 | 153 | |
zeus3110 | 0:14479f8183a0 | 154 | HTTPResult result = oa4t.get(url, &response); |
zeus3110 | 0:14479f8183a0 | 155 | |
zeus3110 | 0:14479f8183a0 | 156 | if (result == HTTP_OK) { |
zeus3110 | 0:14479f8183a0 | 157 | printf("GET success.\n%s\n", response_buffer); |
zeus3110 | 0:14479f8183a0 | 158 | } else { |
zeus3110 | 0:14479f8183a0 | 159 | printf("GET error. (result = %d)\n", result); |
zeus3110 | 0:14479f8183a0 | 160 | } |
zeus3110 | 0:14479f8183a0 | 161 | } |