Toyomasa Watarai
/
Wio_3G_HTTP-GET-Firebase-example
Wio 3G with Firebase example
Fork of Wio_3G_HTTP-GET-example by
Revision 79:7cade4176d12, committed 2018-08-26
- Comitter:
- MACRUM
- Date:
- Sun Aug 26 01:51:34 2018 +0000
- Parent:
- 78:7f66af24c678
- Commit message:
- Enabled Firebase config
Changed in this revision
--- a/main.cpp Thu Aug 23 10:12:47 2018 +0000 +++ b/main.cpp Sun Aug 26 01:51:34 2018 +0000 @@ -1,123 +1,73 @@ #include "mbed.h" -#include <sstream> #include "easy-connect.h" #include "https_request.h" -#include "ssl_ca_pem.h" -// For your API Token, refer to "API token" in your application setting page -const char API_TOKEN[] = "api-token"; -// Your domain name can be seen in the usage explanation with curl. -const char URL[] = "https://{domain}.cybozu.com/k/v1/record.json"; - -// app_id, application id, can be checked with your application's URL -// e.g. https://{domain}.cybozu.com/k/2/ -> app_id is 2 -int app_id = 1; - -#if defined(__CC_ARM) -// To avoid "invalid multibyte character sequence" warning -#pragma diag_suppress 870 -#endif +Serial pc(USBTX, USBRX); -#if !defined(TARGET_WIO_3G) -#error Selected target is not supported. -#endif - -// on-board resources -Serial pc(USBTX, USBRX, 115200); -DigitalOut GrovePower(PB_10, 1); - -#define D20 (PB_4) +/* List of trusted root CA certificates + * This is the root CA for Google from GeoTrustGlobalCA + * + * To add more root certificates, just concatenate them. + */ +const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n" +"MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G\n" +"A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp\n" +"Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1\n" +"MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG\n" +"A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\n" +"hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL\n" +"v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8\n" +"eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq\n" +"tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\n" +"C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa\n" +"zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB\n" +"mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH\n" +"V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n\n" +"bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG\n" +"3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs\n" +"J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO\n" +"291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS\n" +"ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\n" +"AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n" +"TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n" +"-----END CERTIFICATE-----"; -// Grove sensors - -// buzzer -DigitalOut buzzer(D38); +void dump_response(HttpResponse* res) { + mbedtls_printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str()); -// button or touch sensor -InterruptIn btn(D20); -int id = 0; - -void push() -{ - id++; + mbedtls_printf("Headers:\n"); + for (size_t ix = 0; ix < res->get_headers_length(); ix++) { + mbedtls_printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str()); + } + mbedtls_printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str()); } -// JSON simplicity parser -char* j_paser( const char *buf , char *word , char *out ) -{ - int i = 0; - char *p; - char _word[64] = "\"\0"; - - strcat(_word , word ); - strcat(_word , "\"" ); - - p = strstr( (char*)buf , _word ) + 2 + strlen(_word); +int main() { + pc.baud(115200); - while( (p[i] != ',')&&(p[i] != '\n')&&(p[i] != '"') ) { - out[i] = p[i]; - i++; - } - out[i] = '\0'; - - return p; -} - -// main method. retrieve data from kintone by HTTP GET -int main() -{ - btn.mode(PullUp); - btn.fall(push); // set interrupt handler - - NetworkInterface* network = NULL; - network = easy_connect(true); // If true, prints out connection details. + NetworkInterface* network = easy_connect(true); if (!network) { - pc.printf("\n----- Network Error -----\n"); - return -1; + return 1; } - pc.printf("\n----- Network Connected -----\n"); - wait(2.0); - - while(1) { - // Set url - std::stringstream ss_url; - std::string s_url(URL); + // GET request to firebase.google.com + { + printf("\n----- HTTPS GET request -----\n"); - ss_url << s_url << "?app=" << app_id << "&id=" << id; - string url = ss_url.str(); - pc.printf("%s\n", url.c_str()); - - pc.printf("\n----- HTTPS GET request -----\n"); - HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, url.c_str()); - get_req->set_header("X-Cybozu-API-Token", API_TOKEN); - HttpResponse* get_res = get_req->send(); - - pc.printf("\n----- HTTPS GET response [%d]-----\n", get_res->get_status_code()); + HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, "https://firebase.google.com/styles/docs.css"); + get_req->set_debug(true); - if(get_res->get_status_code() == 200) { - pc.printf("\n----- HTTPS GET response 200 -----\n"); - const char* body = get_res->get_body_as_string().c_str(); - - pc.printf("%s\n", body); - - // Response JSON parse - char value[256]; - - char* p = j_paser(body, "日付", value); - j_paser(p,"value", value); - pc.printf("date:%s\n", value); - - p = j_paser(body, "文字列__1行_", value); - j_paser(p,"value", value); - pc.printf("%s\n", value); - - buzzer = 1; - wait(0.1); - buzzer = 0; + HttpResponse* get_res = get_req->send(); + if (!get_res) { + printf("HttpRequest failed (error code %d)\n", get_req->get_error()); + return 1; } + printf("\n----- HTTPS GET response -----\n"); + dump_response(get_res); delete get_req; - wait(10.0); } + + Thread::wait(osWaitForever); } +
--- a/mbed_app.json Thu Aug 23 10:12:47 2018 +0000 +++ b/mbed_app.json Sun Aug 26 01:51:34 2018 +0000 @@ -1,5 +1,6 @@ { "macros": [ + "MBEDTLS_USER_CONFIG_FILE=\"mbedtls_entropy_config.h\"" ], "config": { "sock-type": "TCP",
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbedtls_entropy_config.h Sun Aug 26 01:51:34 2018 +0000 @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2006-2018, Arm Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of Mbed TLS (https://tls.mbed.org) + */ + +#if !defined(MBEDTLS_ENTROPY_HARDWARE_ALT) && \ + !defined(MBEDTLS_ENTROPY_NV_SEED) && !defined(MBEDTLS_TEST_NULL_ENTROPY) +#error "This hardware does not have an entropy source." +#endif /* !MBEDTLS_ENTROPY_HARDWARE_ALT && !MBEDTLS_ENTROPY_NV_SEED && + * !MBEDTLS_TEST_NULL_ENTROPY */ + +#if !defined(MBEDTLS_SHA1_C) +#define MBEDTLS_SHA1_C +#endif /* !MBEDTLS_SHA1_C */ + +/* + * This value is sufficient for handling 2048 bit RSA keys. + * + * Set this value higher to enable handling larger keys, but be aware that this + * will increase the stack usage. + */ +#define MBEDTLS_MPI_MAX_SIZE 256 + +#define MBEDTLS_MPI_WINDOW_SIZE 1
--- a/ssl_ca_pem.h Thu Aug 23 10:12:47 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n" -"MIIFADCCA+igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx\n" -"EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\n" -"HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs\n" -"ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAw\n" -"MFoXDTMxMDUwMzA3MDAwMFowgcYxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6\n" -"b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj\n" -"aG5vbG9naWVzLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydHMuc3RhcmZpZWxk\n" -"dGVjaC5jb20vcmVwb3NpdG9yeS8xNDAyBgNVBAMTK1N0YXJmaWVsZCBTZWN1cmUg\n" -"Q2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" -"DwAwggEKAoIBAQDlkGZL7PlGcakgg77pbL9KyUhpgXVObST2yxcT+LBxWYR6ayuF\n" -"pDS1FuXLzOlBcCykLtb6Mn3hqN6UEKwxwcDYav9ZJ6t21vwLdGu4p64/xFT0tDFE\n" -"3ZNWjKRMXpuJyySDm+JXfbfYEh/JhW300YDxUJuHrtQLEAX7J7oobRfpDtZNuTlV\n" -"Bv8KJAV+L8YdcmzUiymMV33a2etmGtNPp99/UsQwxaXJDgLFU793OGgGJMNmyDd+\n" -"MB5FcSM1/5DYKp2N57CSTTx/KgqT3M0WRmX3YISLdkuRJ3MUkuDq7o8W6o0OPnYX\n" -"v32JgIBEQ+ct4EMJddo26K3biTr1XRKOIwSDAgMBAAGjggEsMIIBKDAPBgNVHRMB\n" -"Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUJUWBaFAmOD07LSy+\n" -"zWrZtj2zZmMwHwYDVR0jBBgwFoAUfAwyH6fZMH/EfWijYqihzqsHWycwOgYIKwYB\n" -"BQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vb2NzcC5zdGFyZmllbGR0ZWNo\n" -"LmNvbS8wOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zdGFyZmllbGR0ZWNo\n" -"LmNvbS9zZnJvb3QtZzIuY3JsMEwGA1UdIARFMEMwQQYEVR0gADA5MDcGCCsGAQUF\n" -"BwIBFitodHRwczovL2NlcnRzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkv\n" -"MA0GCSqGSIb3DQEBCwUAA4IBAQBWZcr+8z8KqJOLGMfeQ2kTNCC+Tl94qGuc22pN\n" -"QdvBE+zcMQAiXvcAngzgNGU0+bE6TkjIEoGIXFs+CFN69xpk37hQYcxTUUApS8L0\n" -"rjpf5MqtJsxOYUPl/VemN3DOQyuwlMOS6eFfqhBJt2nk4NAfZKQrzR9voPiEJBjO\n" -"eT2pkb9UGBOJmVQRDVXFJgt5T1ocbvlj2xSApAer+rKluYjdkf5lO6Sjeb6JTeHQ\n" -"sPTIFwwKlhR8Cbds4cLYVdQYoKpBaXAko7nv6VrcPuuUSvC33l8Odvr7+2kDRUBQ\n" -"7nIMpBKGgc0T0U7EPMpODdIm8QC3tKai4W56gf0wrHofx1l7\n" -"-----END CERTIFICATE-----\n"; \ No newline at end of file