Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Wio_3G_HTTP-GET-example by
main.cpp@77:0194cca4103b, 2018-08-23 (annotated)
- Committer:
- atomichan
- Date:
- Thu Aug 23 04:01:41 2018 +0000
- Revision:
- 77:0194cca4103b
- Parent:
- 76:fe9dd61c5f5c
- Child:
- 78:7f66af24c678
part of the preparation works for Ina-city Hackerthon
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Jonathan Austin |
0:2757d7abb7d9 | 1 | #include "mbed.h" |
| atomichan | 76:fe9dd61c5f5c | 2 | #include <sstream> |
| atomichan | 76:fe9dd61c5f5c | 3 | #include "easy-connect.h" |
| atomichan | 76:fe9dd61c5f5c | 4 | #include "https_request.h" |
| atomichan | 76:fe9dd61c5f5c | 5 | #include "ssl_ca_pem.h" |
| atomichan | 76:fe9dd61c5f5c | 6 | |
| MACRUM | 73:d47320bcc568 | 7 | #if !defined(TARGET_WIO_3G) |
| MACRUM | 73:d47320bcc568 | 8 | #error Selected target is not supported. |
| MACRUM | 73:d47320bcc568 | 9 | #endif |
| MACRUM | 70:cb6d36218441 | 10 | |
| MACRUM | 73:d47320bcc568 | 11 | // on-board resources |
| MACRUM | 73:d47320bcc568 | 12 | Serial pc(USBTX, USBRX, 115200); |
| MACRUM | 70:cb6d36218441 | 13 | DigitalOut GrovePower(PB_10, 1); |
| MACRUM | 73:d47320bcc568 | 14 | |
| atomichan | 77:0194cca4103b | 15 | #define D20 (PB_4) |
| MACRUM | 74:847e5dc7b4d5 | 16 | |
| MACRUM | 73:d47320bcc568 | 17 | // Grove sensors |
| MACRUM | 74:847e5dc7b4d5 | 18 | |
| atomichan | 77:0194cca4103b | 19 | // buzzer |
| atomichan | 77:0194cca4103b | 20 | DigitalOut buzzer(D38); |
| atomichan | 77:0194cca4103b | 21 | int buzzer_on = 1, buzzer_off = 0; |
| MACRUM | 74:847e5dc7b4d5 | 22 | |
| atomichan | 77:0194cca4103b | 23 | // button or touch sensor |
| atomichan | 77:0194cca4103b | 24 | InterruptIn btn(D20); |
| MACRUM | 71:7d17edde2e03 | 25 | uint32_t button = 0; |
| atomichan | 77:0194cca4103b | 26 | int id = 0; |
| MACRUM | 70:cb6d36218441 | 27 | |
| MACRUM | 70:cb6d36218441 | 28 | void push() |
| MACRUM | 70:cb6d36218441 | 29 | { |
| MACRUM | 71:7d17edde2e03 | 30 | button++; |
| atomichan | 77:0194cca4103b | 31 | id++; |
| MACRUM | 70:cb6d36218441 | 32 | } |
| Jonathan Austin |
0:2757d7abb7d9 | 33 | |
| atomichan | 77:0194cca4103b | 34 | // For your API Token, refer to "API token" in your application setting page |
| atomichan | 77:0194cca4103b | 35 | const char API_TOKEN[] = "api-token"; |
| atomichan | 77:0194cca4103b | 36 | // Your domain name can be seen in the usage explanation with curl. |
| atomichan | 77:0194cca4103b | 37 | const char URL[] = "https://{domain}.cybozu.com/k/v1/record.json"; |
| MACRUM | 73:d47320bcc568 | 38 | |
| atomichan | 77:0194cca4103b | 39 | // app_id, application id, can be checked with your application's URL |
| atomichan | 77:0194cca4103b | 40 | // e.g. https://{domain}.cybozu.com/k/2/ -> app_id is 2 |
| atomichan | 77:0194cca4103b | 41 | int app_id = 1; |
| atomichan | 76:fe9dd61c5f5c | 42 | |
| atomichan | 76:fe9dd61c5f5c | 43 | |
| atomichan | 76:fe9dd61c5f5c | 44 | // JSON simplicity parser |
| atomichan | 76:fe9dd61c5f5c | 45 | char* j_paser( const char *buf , char *word , char *out ) |
| atomichan | 76:fe9dd61c5f5c | 46 | { |
| atomichan | 76:fe9dd61c5f5c | 47 | int i = 0; |
| atomichan | 76:fe9dd61c5f5c | 48 | char *p; |
| atomichan | 76:fe9dd61c5f5c | 49 | char _word[64] = "\"\0"; |
| atomichan | 76:fe9dd61c5f5c | 50 | |
| atomichan | 76:fe9dd61c5f5c | 51 | strcat(_word , word ); |
| atomichan | 76:fe9dd61c5f5c | 52 | strcat(_word , "\"" ); |
| atomichan | 76:fe9dd61c5f5c | 53 | |
| atomichan | 76:fe9dd61c5f5c | 54 | p = strstr( (char*)buf , _word ) + 2 + strlen(_word); |
| atomichan | 76:fe9dd61c5f5c | 55 | |
| atomichan | 76:fe9dd61c5f5c | 56 | while( (p[i] != ',')&&(p[i] != '\n')&&(p[i] != '"') ) |
| atomichan | 76:fe9dd61c5f5c | 57 | { |
| atomichan | 76:fe9dd61c5f5c | 58 | out[i] = p[i]; |
| atomichan | 76:fe9dd61c5f5c | 59 | i++; |
| atomichan | 76:fe9dd61c5f5c | 60 | } |
| atomichan | 76:fe9dd61c5f5c | 61 | out[i] = '\0'; |
| atomichan | 76:fe9dd61c5f5c | 62 | |
| atomichan | 76:fe9dd61c5f5c | 63 | return p; |
| atomichan | 76:fe9dd61c5f5c | 64 | } |
| atomichan | 76:fe9dd61c5f5c | 65 | |
| atomichan | 77:0194cca4103b | 66 | // main method. retrieve data from Kintone by HTTP GET |
| MACRUM | 70:cb6d36218441 | 67 | int main() |
| MACRUM | 70:cb6d36218441 | 68 | { |
| MACRUM | 73:d47320bcc568 | 69 | char buf[20]; |
| MACRUM | 73:d47320bcc568 | 70 | btn.fall(push); // set interrupt handler |
| MACRUM | 70:cb6d36218441 | 71 | |
| atomichan | 77:0194cca4103b | 72 | pc.printf("Greetings from Ina-city Hackerthon on 25-26 of August\n"); |
| atomichan | 77:0194cca4103b | 73 | |
| atomichan | 76:fe9dd61c5f5c | 74 | NetworkInterface* network = NULL; |
| atomichan | 76:fe9dd61c5f5c | 75 | |
| atomichan | 76:fe9dd61c5f5c | 76 | pc.printf("\r\n----- Start -----\r\n"); |
| atomichan | 76:fe9dd61c5f5c | 77 | |
| atomichan | 76:fe9dd61c5f5c | 78 | network = easy_connect(true); // If true, prints out connection details. |
| atomichan | 76:fe9dd61c5f5c | 79 | if (!network) { |
| atomichan | 76:fe9dd61c5f5c | 80 | pc.printf("\r\n----- Network Error -----\r\n"); |
| atomichan | 76:fe9dd61c5f5c | 81 | return -1; |
| atomichan | 76:fe9dd61c5f5c | 82 | } |
| atomichan | 76:fe9dd61c5f5c | 83 | |
| atomichan | 76:fe9dd61c5f5c | 84 | pc.printf("\r\n----- Network Connected -----\r\n"); |
| atomichan | 76:fe9dd61c5f5c | 85 | |
| atomichan | 76:fe9dd61c5f5c | 86 | wait(2.0); |
| atomichan | 76:fe9dd61c5f5c | 87 | |
| atomichan | 76:fe9dd61c5f5c | 88 | while(1){ |
| atomichan | 76:fe9dd61c5f5c | 89 | |
| atomichan | 76:fe9dd61c5f5c | 90 | while(1){ |
| atomichan | 77:0194cca4103b | 91 | // Set url |
| atomichan | 77:0194cca4103b | 92 | std::stringstream ss_url; |
| atomichan | 77:0194cca4103b | 93 | std::string s_url(URL); |
| atomichan | 77:0194cca4103b | 94 | |
| atomichan | 77:0194cca4103b | 95 | ss_url << s_url << "?app=" << app_id << "&id=" << id; |
| atomichan | 77:0194cca4103b | 96 | string url = ss_url.str(); |
| atomichan | 77:0194cca4103b | 97 | |
| atomichan | 77:0194cca4103b | 98 | pc.printf("%s\r\n",url.c_str()); |
| atomichan | 77:0194cca4103b | 99 | |
| atomichan | 76:fe9dd61c5f5c | 100 | pc.printf("\r\n----- HTTPS GET request -----\r\n"); |
| atomichan | 76:fe9dd61c5f5c | 101 | HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, url.c_str()); |
| atomichan | 76:fe9dd61c5f5c | 102 | |
| atomichan | 76:fe9dd61c5f5c | 103 | get_req->set_header("X-Cybozu-API-Token", API_TOKEN); |
| atomichan | 76:fe9dd61c5f5c | 104 | |
| atomichan | 76:fe9dd61c5f5c | 105 | HttpResponse* get_res = get_req->send(); |
| atomichan | 76:fe9dd61c5f5c | 106 | |
| atomichan | 76:fe9dd61c5f5c | 107 | pc.printf("\n----- HTTPS GET response [%d]-----\n",get_res->get_status_code()); |
| atomichan | 76:fe9dd61c5f5c | 108 | |
| atomichan | 76:fe9dd61c5f5c | 109 | if(get_res->get_status_code() == 200){ |
| atomichan | 76:fe9dd61c5f5c | 110 | pc.printf("\n----- HTTPS GET response 200 -----\n"); |
| atomichan | 76:fe9dd61c5f5c | 111 | const char* body = get_res->get_body_as_string().c_str(); |
| atomichan | 76:fe9dd61c5f5c | 112 | |
| atomichan | 76:fe9dd61c5f5c | 113 | pc.printf("%s\r\n",body); |
| atomichan | 76:fe9dd61c5f5c | 114 | |
| atomichan | 76:fe9dd61c5f5c | 115 | // Response JSON parse |
| atomichan | 76:fe9dd61c5f5c | 116 | char value[256]; |
| atomichan | 76:fe9dd61c5f5c | 117 | |
| atomichan | 76:fe9dd61c5f5c | 118 | char* p = j_paser(body,"日付",value); |
| atomichan | 76:fe9dd61c5f5c | 119 | j_paser(p,"value",value); |
| atomichan | 76:fe9dd61c5f5c | 120 | printf("date:%s\r\n",value); |
| atomichan | 76:fe9dd61c5f5c | 121 | |
| atomichan | 76:fe9dd61c5f5c | 122 | p = j_paser(body,"文字列__1行_",value); |
| atomichan | 76:fe9dd61c5f5c | 123 | j_paser(p,"value",value); |
| atomichan | 76:fe9dd61c5f5c | 124 | printf("%s\r\n",value); |
| atomichan | 76:fe9dd61c5f5c | 125 | |
| atomichan | 77:0194cca4103b | 126 | int buzz_flag = 1; |
| atomichan | 77:0194cca4103b | 127 | while(buzz_flag){ |
| atomichan | 77:0194cca4103b | 128 | buzzer = buzzer_on; |
| atomichan | 77:0194cca4103b | 129 | wait(.5); |
| atomichan | 77:0194cca4103b | 130 | buzzer = buzzer_off; |
| atomichan | 77:0194cca4103b | 131 | wait(.5); |
| atomichan | 77:0194cca4103b | 132 | buzz_flag = 0; |
| atomichan | 77:0194cca4103b | 133 | } |
| atomichan | 76:fe9dd61c5f5c | 134 | |
| atomichan | 76:fe9dd61c5f5c | 135 | delete get_req; |
| atomichan | 76:fe9dd61c5f5c | 136 | |
| atomichan | 76:fe9dd61c5f5c | 137 | break; |
| atomichan | 76:fe9dd61c5f5c | 138 | } |
| atomichan | 76:fe9dd61c5f5c | 139 | |
| atomichan | 76:fe9dd61c5f5c | 140 | delete get_req; |
| atomichan | 76:fe9dd61c5f5c | 141 | |
| atomichan | 76:fe9dd61c5f5c | 142 | wait(10.0); |
| atomichan | 76:fe9dd61c5f5c | 143 | } |
| atomichan | 77:0194cca4103b | 144 | |
| atomichan | 76:fe9dd61c5f5c | 145 | wait(1.0); |
| atomichan | 76:fe9dd61c5f5c | 146 | } |
| Jonathan Austin |
0:2757d7abb7d9 | 147 | } |
