part of the preparation works for Ina-city Hackerthon

Dependencies:   mbed-http

Fork of Wio_3G_example by Toyomasa Watarai

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?

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