part of the preparation works for Ina-city Hackerthon
Fork of Wio_3G_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 | } |