part of the preparation works for Ina-city Hackerthon
Fork of Wio_3G_example by
main.cpp@78:7f66af24c678, 2018-08-23 (annotated)
- Committer:
- MACRUM
- Date:
- Thu Aug 23 10:12:47 2018 +0000
- Revision:
- 78:7f66af24c678
- Parent:
- 77:0194cca4103b
Code clean-up
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 | 78:7f66af24c678 | 7 | // For your API Token, refer to "API token" in your application setting page |
MACRUM | 78:7f66af24c678 | 8 | const char API_TOKEN[] = "api-token"; |
MACRUM | 78:7f66af24c678 | 9 | // Your domain name can be seen in the usage explanation with curl. |
MACRUM | 78:7f66af24c678 | 10 | const char URL[] = "https://{domain}.cybozu.com/k/v1/record.json"; |
MACRUM | 78:7f66af24c678 | 11 | |
MACRUM | 78:7f66af24c678 | 12 | // app_id, application id, can be checked with your application's URL |
MACRUM | 78:7f66af24c678 | 13 | // e.g. https://{domain}.cybozu.com/k/2/ -> app_id is 2 |
MACRUM | 78:7f66af24c678 | 14 | int app_id = 1; |
MACRUM | 78:7f66af24c678 | 15 | |
MACRUM | 78:7f66af24c678 | 16 | #if defined(__CC_ARM) |
MACRUM | 78:7f66af24c678 | 17 | // To avoid "invalid multibyte character sequence" warning |
MACRUM | 78:7f66af24c678 | 18 | #pragma diag_suppress 870 |
MACRUM | 78:7f66af24c678 | 19 | #endif |
MACRUM | 78:7f66af24c678 | 20 | |
MACRUM | 73:d47320bcc568 | 21 | #if !defined(TARGET_WIO_3G) |
MACRUM | 73:d47320bcc568 | 22 | #error Selected target is not supported. |
MACRUM | 73:d47320bcc568 | 23 | #endif |
MACRUM | 70:cb6d36218441 | 24 | |
MACRUM | 73:d47320bcc568 | 25 | // on-board resources |
MACRUM | 73:d47320bcc568 | 26 | Serial pc(USBTX, USBRX, 115200); |
MACRUM | 70:cb6d36218441 | 27 | DigitalOut GrovePower(PB_10, 1); |
MACRUM | 73:d47320bcc568 | 28 | |
atomichan | 77:0194cca4103b | 29 | #define D20 (PB_4) |
MACRUM | 74:847e5dc7b4d5 | 30 | |
MACRUM | 73:d47320bcc568 | 31 | // Grove sensors |
MACRUM | 74:847e5dc7b4d5 | 32 | |
atomichan | 77:0194cca4103b | 33 | // buzzer |
atomichan | 77:0194cca4103b | 34 | DigitalOut buzzer(D38); |
MACRUM | 74:847e5dc7b4d5 | 35 | |
atomichan | 77:0194cca4103b | 36 | // button or touch sensor |
atomichan | 77:0194cca4103b | 37 | InterruptIn btn(D20); |
atomichan | 77:0194cca4103b | 38 | int id = 0; |
MACRUM | 70:cb6d36218441 | 39 | |
MACRUM | 70:cb6d36218441 | 40 | void push() |
MACRUM | 70:cb6d36218441 | 41 | { |
atomichan | 77:0194cca4103b | 42 | id++; |
MACRUM | 70:cb6d36218441 | 43 | } |
Jonathan Austin |
0:2757d7abb7d9 | 44 | |
atomichan | 76:fe9dd61c5f5c | 45 | // JSON simplicity parser |
atomichan | 76:fe9dd61c5f5c | 46 | char* j_paser( const char *buf , char *word , char *out ) |
atomichan | 76:fe9dd61c5f5c | 47 | { |
atomichan | 76:fe9dd61c5f5c | 48 | int i = 0; |
atomichan | 76:fe9dd61c5f5c | 49 | char *p; |
atomichan | 76:fe9dd61c5f5c | 50 | char _word[64] = "\"\0"; |
atomichan | 76:fe9dd61c5f5c | 51 | |
atomichan | 76:fe9dd61c5f5c | 52 | strcat(_word , word ); |
atomichan | 76:fe9dd61c5f5c | 53 | strcat(_word , "\"" ); |
atomichan | 76:fe9dd61c5f5c | 54 | |
atomichan | 76:fe9dd61c5f5c | 55 | p = strstr( (char*)buf , _word ) + 2 + strlen(_word); |
MACRUM | 78:7f66af24c678 | 56 | |
MACRUM | 78:7f66af24c678 | 57 | while( (p[i] != ',')&&(p[i] != '\n')&&(p[i] != '"') ) { |
atomichan | 76:fe9dd61c5f5c | 58 | out[i] = p[i]; |
atomichan | 76:fe9dd61c5f5c | 59 | i++; |
atomichan | 76:fe9dd61c5f5c | 60 | } |
atomichan | 76:fe9dd61c5f5c | 61 | out[i] = '\0'; |
MACRUM | 78:7f66af24c678 | 62 | |
atomichan | 76:fe9dd61c5f5c | 63 | return p; |
atomichan | 76:fe9dd61c5f5c | 64 | } |
atomichan | 76:fe9dd61c5f5c | 65 | |
MACRUM | 78:7f66af24c678 | 66 | // main method. retrieve data from kintone by HTTP GET |
MACRUM | 70:cb6d36218441 | 67 | int main() |
MACRUM | 70:cb6d36218441 | 68 | { |
MACRUM | 78:7f66af24c678 | 69 | btn.mode(PullUp); |
MACRUM | 73:d47320bcc568 | 70 | btn.fall(push); // set interrupt handler |
MACRUM | 70:cb6d36218441 | 71 | |
atomichan | 76:fe9dd61c5f5c | 72 | NetworkInterface* network = NULL; |
atomichan | 76:fe9dd61c5f5c | 73 | network = easy_connect(true); // If true, prints out connection details. |
atomichan | 76:fe9dd61c5f5c | 74 | if (!network) { |
MACRUM | 78:7f66af24c678 | 75 | pc.printf("\n----- Network Error -----\n"); |
atomichan | 76:fe9dd61c5f5c | 76 | return -1; |
atomichan | 76:fe9dd61c5f5c | 77 | } |
atomichan | 76:fe9dd61c5f5c | 78 | |
MACRUM | 78:7f66af24c678 | 79 | pc.printf("\n----- Network Connected -----\n"); |
atomichan | 76:fe9dd61c5f5c | 80 | wait(2.0); |
MACRUM | 78:7f66af24c678 | 81 | |
MACRUM | 78:7f66af24c678 | 82 | while(1) { |
MACRUM | 78:7f66af24c678 | 83 | // Set url |
MACRUM | 78:7f66af24c678 | 84 | std::stringstream ss_url; |
MACRUM | 78:7f66af24c678 | 85 | std::string s_url(URL); |
MACRUM | 78:7f66af24c678 | 86 | |
MACRUM | 78:7f66af24c678 | 87 | ss_url << s_url << "?app=" << app_id << "&id=" << id; |
MACRUM | 78:7f66af24c678 | 88 | string url = ss_url.str(); |
MACRUM | 78:7f66af24c678 | 89 | pc.printf("%s\n", url.c_str()); |
MACRUM | 78:7f66af24c678 | 90 | |
MACRUM | 78:7f66af24c678 | 91 | pc.printf("\n----- HTTPS GET request -----\n"); |
MACRUM | 78:7f66af24c678 | 92 | HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, url.c_str()); |
MACRUM | 78:7f66af24c678 | 93 | get_req->set_header("X-Cybozu-API-Token", API_TOKEN); |
MACRUM | 78:7f66af24c678 | 94 | HttpResponse* get_res = get_req->send(); |
MACRUM | 78:7f66af24c678 | 95 | |
MACRUM | 78:7f66af24c678 | 96 | pc.printf("\n----- HTTPS GET response [%d]-----\n", get_res->get_status_code()); |
MACRUM | 78:7f66af24c678 | 97 | |
MACRUM | 78:7f66af24c678 | 98 | if(get_res->get_status_code() == 200) { |
MACRUM | 78:7f66af24c678 | 99 | pc.printf("\n----- HTTPS GET response 200 -----\n"); |
MACRUM | 78:7f66af24c678 | 100 | const char* body = get_res->get_body_as_string().c_str(); |
MACRUM | 78:7f66af24c678 | 101 | |
MACRUM | 78:7f66af24c678 | 102 | pc.printf("%s\n", body); |
MACRUM | 78:7f66af24c678 | 103 | |
MACRUM | 78:7f66af24c678 | 104 | // Response JSON parse |
MACRUM | 78:7f66af24c678 | 105 | char value[256]; |
MACRUM | 78:7f66af24c678 | 106 | |
MACRUM | 78:7f66af24c678 | 107 | char* p = j_paser(body, "日付", value); |
MACRUM | 78:7f66af24c678 | 108 | j_paser(p,"value", value); |
MACRUM | 78:7f66af24c678 | 109 | pc.printf("date:%s\n", value); |
MACRUM | 78:7f66af24c678 | 110 | |
MACRUM | 78:7f66af24c678 | 111 | p = j_paser(body, "文字列__1行_", value); |
MACRUM | 78:7f66af24c678 | 112 | j_paser(p,"value", value); |
MACRUM | 78:7f66af24c678 | 113 | pc.printf("%s\n", value); |
MACRUM | 78:7f66af24c678 | 114 | |
MACRUM | 78:7f66af24c678 | 115 | buzzer = 1; |
MACRUM | 78:7f66af24c678 | 116 | wait(0.1); |
MACRUM | 78:7f66af24c678 | 117 | buzzer = 0; |
atomichan | 76:fe9dd61c5f5c | 118 | } |
MACRUM | 78:7f66af24c678 | 119 | |
MACRUM | 78:7f66af24c678 | 120 | delete get_req; |
MACRUM | 78:7f66af24c678 | 121 | wait(10.0); |
atomichan | 76:fe9dd61c5f5c | 122 | } |
Jonathan Austin |
0:2757d7abb7d9 | 123 | } |