part of the preparation works for Ina-city Hackerthon

Dependencies:   mbed-http

Fork of Wio_3G_example by Toyomasa Watarai

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?

UserRevisionLine numberNew 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 }