part of the preparation works for Ina-city Hackerthon

Dependencies:   mbed-http

Fork of Wio_3G_example by Toyomasa Watarai

Committer:
atomichan
Date:
Wed Aug 22 05:27:25 2018 +0000
Revision:
76:fe9dd61c5f5c
Parent:
75:f93c0063755c
Child:
77:0194cca4103b
used for Ina-city Hackerthon

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:2757d7abb7d9 1 #include "mbed.h"
MACRUM 71:7d17edde2e03 2 #include "Grove_LCD_RGB_Backlight.h"
MACRUM 72:aa14c091f860 3 #include "Grove_temperature.h"
MACRUM 73:d47320bcc568 4 #include "WS2812.h"
MACRUM 73:d47320bcc568 5 #include "PixelArray.h"
MACRUM 73:d47320bcc568 6 #include "Servo.h"
MACRUM 73:d47320bcc568 7
atomichan 76:fe9dd61c5f5c 8 #include <sstream>
atomichan 76:fe9dd61c5f5c 9 #include "easy-connect.h"
atomichan 76:fe9dd61c5f5c 10 #include "https_request.h"
atomichan 76:fe9dd61c5f5c 11 #include "ssl_ca_pem.h"
atomichan 76:fe9dd61c5f5c 12
MACRUM 73:d47320bcc568 13 #if !defined(TARGET_WIO_3G)
MACRUM 73:d47320bcc568 14 #error Selected target is not supported.
MACRUM 73:d47320bcc568 15 #endif
MACRUM 70:cb6d36218441 16
MACRUM 70:cb6d36218441 17 #define D20 (PB_4)
MACRUM 70:cb6d36218441 18 #define D19 (PB_3)
MACRUM 70:cb6d36218441 19
MACRUM 73:d47320bcc568 20 // on-board resources
MACRUM 74:847e5dc7b4d5 21
MACRUM 73:d47320bcc568 22 Serial pc(USBTX, USBRX, 115200);
MACRUM 70:cb6d36218441 23 DigitalOut GrovePower(PB_10, 1);
MACRUM 73:d47320bcc568 24
MACRUM 74:847e5dc7b4d5 25 #define WS2812_BUF 8
MACRUM 74:847e5dc7b4d5 26 #define NUM_COLORS 8
MACRUM 74:847e5dc7b4d5 27 #define NUM_LEDS_PER_COLOR 8
MACRUM 73:d47320bcc568 28 #define H0 8
MACRUM 73:d47320bcc568 29 #define L0 32
MACRUM 73:d47320bcc568 30 #define H1 17
MACRUM 73:d47320bcc568 31 #define L1 32
MACRUM 73:d47320bcc568 32
MACRUM 73:d47320bcc568 33 DigitalOut LEDPower(PE_8, 1);
MACRUM 73:d47320bcc568 34 PixelArray px(WS2812_BUF);
MACRUM 74:847e5dc7b4d5 35 WS2812 ws(PB_1, WS2812_BUF, H0, L0, H1, L1);
MACRUM 74:847e5dc7b4d5 36
MACRUM 73:d47320bcc568 37 // Grove sensors
MACRUM 74:847e5dc7b4d5 38
MACRUM 70:cb6d36218441 39 DigitalOut led1(D38);
MACRUM 73:d47320bcc568 40 AnalogIn ain(A6); // angle or light sensor
MACRUM 73:d47320bcc568 41 InterruptIn btn(D20); // button or touch sensor
MACRUM 73:d47320bcc568 42 Grove_LCD_RGB_Backlight lcd(I2C_SDA, I2C_SCL);
MACRUM 72:aa14c091f860 43 Grove_temperature temp(A4);
MACRUM 74:847e5dc7b4d5 44
MACRUM 71:7d17edde2e03 45 uint32_t button = 0;
MACRUM 70:cb6d36218441 46
MACRUM 70:cb6d36218441 47 void push()
MACRUM 70:cb6d36218441 48 {
MACRUM 71:7d17edde2e03 49 button++;
MACRUM 70:cb6d36218441 50 }
Jonathan Austin 0:2757d7abb7d9 51
MACRUM 73:d47320bcc568 52
atomichan 76:fe9dd61c5f5c 53 const char API_TOKEN[] = "tfa6Ud9FY760SfLLhHl3UBr0NFdVHEFLHvdjTsrW";
atomichan 76:fe9dd61c5f5c 54 const char URL[] = "https://devzfyjsa.cybozu.com/k/v1/record.json";
atomichan 76:fe9dd61c5f5c 55
atomichan 76:fe9dd61c5f5c 56 int app_id = 1;
atomichan 76:fe9dd61c5f5c 57
atomichan 76:fe9dd61c5f5c 58 // JSON simplicity parser
atomichan 76:fe9dd61c5f5c 59 char* j_paser( const char *buf , char *word , char *out )
atomichan 76:fe9dd61c5f5c 60 {
atomichan 76:fe9dd61c5f5c 61 int i = 0;
atomichan 76:fe9dd61c5f5c 62 char *p;
atomichan 76:fe9dd61c5f5c 63 char _word[64] = "\"\0";
atomichan 76:fe9dd61c5f5c 64
atomichan 76:fe9dd61c5f5c 65 strcat(_word , word );
atomichan 76:fe9dd61c5f5c 66 strcat(_word , "\"" );
atomichan 76:fe9dd61c5f5c 67
atomichan 76:fe9dd61c5f5c 68 p = strstr( (char*)buf , _word ) + 2 + strlen(_word);
atomichan 76:fe9dd61c5f5c 69
atomichan 76:fe9dd61c5f5c 70 while( (p[i] != ',')&&(p[i] != '\n')&&(p[i] != '"') )
atomichan 76:fe9dd61c5f5c 71 {
atomichan 76:fe9dd61c5f5c 72 out[i] = p[i];
atomichan 76:fe9dd61c5f5c 73 i++;
atomichan 76:fe9dd61c5f5c 74 }
atomichan 76:fe9dd61c5f5c 75 out[i] = '\0';
atomichan 76:fe9dd61c5f5c 76
atomichan 76:fe9dd61c5f5c 77 return p;
atomichan 76:fe9dd61c5f5c 78 }
atomichan 76:fe9dd61c5f5c 79
atomichan 76:fe9dd61c5f5c 80
atomichan 76:fe9dd61c5f5c 81
atomichan 76:fe9dd61c5f5c 82
MACRUM 70:cb6d36218441 83 int main()
MACRUM 70:cb6d36218441 84 {
MACRUM 73:d47320bcc568 85 char buf[20];
MACRUM 73:d47320bcc568 86 btn.fall(push); // set interrupt handler
MACRUM 70:cb6d36218441 87
MACRUM 73:d47320bcc568 88 lcd.clear();
MACRUM 73:d47320bcc568 89 lcd.setRGB(0xff, 0x00, 0x00);
MACRUM 73:d47320bcc568 90 lcd.locate(0, 0);
MACRUM 73:d47320bcc568 91 lcd.print("Hello World!");
MACRUM 73:d47320bcc568 92 lcd.locate(0, 1);
MACRUM 73:d47320bcc568 93
MACRUM 74:847e5dc7b4d5 94 // set up the colours we want to draw with
MACRUM 74:847e5dc7b4d5 95 const int colorbuf[NUM_COLORS] = {0x000000, 0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f, 0x2f2f2f};
MACRUM 74:847e5dc7b4d5 96
atomichan 76:fe9dd61c5f5c 97 ::ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling
MACRUM 74:847e5dc7b4d5 98
MACRUM 74:847e5dc7b4d5 99 // for each of the colours (j) write out 10 of them
MACRUM 74:847e5dc7b4d5 100 // the pixels are written at the colour*10, plus the colour position
MACRUM 74:847e5dc7b4d5 101 // all modulus 60 so it wraps around
MACRUM 74:847e5dc7b4d5 102 for (int i = 0; i < WS2812_BUF; i++) {
MACRUM 74:847e5dc7b4d5 103 px.Set(i, colorbuf[i]);
MACRUM 74:847e5dc7b4d5 104 px.SetI(i, 0x80);
MACRUM 74:847e5dc7b4d5 105 }
MACRUM 74:847e5dc7b4d5 106
MACRUM 74:847e5dc7b4d5 107 pc.printf("hello, Mbed world\n");
MACRUM 71:7d17edde2e03 108
atomichan 76:fe9dd61c5f5c 109 /*
MACRUM 70:cb6d36218441 110 int cnt = 0;
MACRUM 75:f93c0063755c 111 int idx = 0;
MACRUM 74:847e5dc7b4d5 112
Jonathan Austin 0:2757d7abb7d9 113 while (true) {
MACRUM 73:d47320bcc568 114 pc.printf("count = %4d, button = %d, analog = %2.2f, temp = %2.2f\n", cnt++, button, ain.read(), temp.getTemperature());
MACRUM 73:d47320bcc568 115 sprintf(buf, "L=%2.2f, T=%2.2f", ain.read(), temp.getTemperature());
MACRUM 75:f93c0063755c 116
MACRUM 73:d47320bcc568 117 lcd.setRGB(0xff, (255*ain.read()), 0x00);
MACRUM 73:d47320bcc568 118 lcd.locate(0, 1);
MACRUM 73:d47320bcc568 119 lcd.print(buf);
MACRUM 75:f93c0063755c 120
Jonathan Austin 0:2757d7abb7d9 121 led1 = !led1;
MACRUM 74:847e5dc7b4d5 122
MACRUM 75:f93c0063755c 123 ws.write_offsets(px.getBuf(), idx, idx, idx);
MACRUM 75:f93c0063755c 124 idx++;
MACRUM 75:f93c0063755c 125 if (idx >= WS2812_BUF) {
MACRUM 75:f93c0063755c 126 idx = 0;
MACRUM 74:847e5dc7b4d5 127 }
MACRUM 74:847e5dc7b4d5 128
mbed_official 22:af9dcf379926 129 wait(0.5);
Jonathan Austin 0:2757d7abb7d9 130 }
atomichan 76:fe9dd61c5f5c 131 */
atomichan 76:fe9dd61c5f5c 132 NetworkInterface* network = NULL;
atomichan 76:fe9dd61c5f5c 133
atomichan 76:fe9dd61c5f5c 134 /*
atomichan 76:fe9dd61c5f5c 135 pc.baud(115200);
atomichan 76:fe9dd61c5f5c 136
atomichan 76:fe9dd61c5f5c 137 lcd.cls();
atomichan 76:fe9dd61c5f5c 138 lcd.locate(0,3);
atomichan 76:fe9dd61c5f5c 139 lcd.printf("Network Connect..");
atomichan 76:fe9dd61c5f5c 140 */
atomichan 76:fe9dd61c5f5c 141
atomichan 76:fe9dd61c5f5c 142 pc.printf("\r\n----- Start -----\r\n");
atomichan 76:fe9dd61c5f5c 143
atomichan 76:fe9dd61c5f5c 144 network = easy_connect(true); // If true, prints out connection details.
atomichan 76:fe9dd61c5f5c 145 if (!network) {
atomichan 76:fe9dd61c5f5c 146 //lcd.printf("NG");
atomichan 76:fe9dd61c5f5c 147 pc.printf("\r\n----- Network Error -----\r\n");
atomichan 76:fe9dd61c5f5c 148 return -1;
atomichan 76:fe9dd61c5f5c 149 }
atomichan 76:fe9dd61c5f5c 150
atomichan 76:fe9dd61c5f5c 151 //lcd.printf("OK");
atomichan 76:fe9dd61c5f5c 152 pc.printf("\r\n----- Network Connected -----\r\n");
atomichan 76:fe9dd61c5f5c 153
atomichan 76:fe9dd61c5f5c 154 wait(2.0);
atomichan 76:fe9dd61c5f5c 155
atomichan 76:fe9dd61c5f5c 156 while(1){
atomichan 76:fe9dd61c5f5c 157 int id = 10;
atomichan 76:fe9dd61c5f5c 158
atomichan 76:fe9dd61c5f5c 159 /*
atomichan 76:fe9dd61c5f5c 160 // ID select
atomichan 76:fe9dd61c5f5c 161 lcd.cls();
atomichan 76:fe9dd61c5f5c 162 lcd.locate(0,3);
atomichan 76:fe9dd61c5f5c 163 lcd.printf("Please select id.");
atomichan 76:fe9dd61c5f5c 164 while(fire == 0){
atomichan 76:fe9dd61c5f5c 165 lcd.locate(0,14);
atomichan 76:fe9dd61c5f5c 166 lcd.printf("id = ");
atomichan 76:fe9dd61c5f5c 167 if( up == 1) id++;
atomichan 76:fe9dd61c5f5c 168 if( down == 1) id--;
atomichan 76:fe9dd61c5f5c 169 lcd.printf("%d ",id);
atomichan 76:fe9dd61c5f5c 170 wait(0.2);
atomichan 76:fe9dd61c5f5c 171 }
atomichan 76:fe9dd61c5f5c 172
atomichan 76:fe9dd61c5f5c 173 lcd.cls();
atomichan 76:fe9dd61c5f5c 174 lcd.locate(0,3);
atomichan 76:fe9dd61c5f5c 175 lcd.printf("It is polling with the selected id.");
atomichan 76:fe9dd61c5f5c 176 */
atomichan 76:fe9dd61c5f5c 177
atomichan 76:fe9dd61c5f5c 178 // Set url
atomichan 76:fe9dd61c5f5c 179 std::stringstream ss_url;
atomichan 76:fe9dd61c5f5c 180 std::string s_url(URL);
atomichan 76:fe9dd61c5f5c 181
atomichan 76:fe9dd61c5f5c 182 ss_url << s_url << "?app=" << app_id << "&id=" << id;
atomichan 76:fe9dd61c5f5c 183
atomichan 76:fe9dd61c5f5c 184 string url = ss_url.str();
atomichan 76:fe9dd61c5f5c 185
atomichan 76:fe9dd61c5f5c 186 pc.printf("%s\r\n",url.c_str());
atomichan 76:fe9dd61c5f5c 187
atomichan 76:fe9dd61c5f5c 188 while(1){
atomichan 76:fe9dd61c5f5c 189 pc.printf("\r\n----- HTTPS GET request -----\r\n");
atomichan 76:fe9dd61c5f5c 190 HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, url.c_str());
atomichan 76:fe9dd61c5f5c 191
atomichan 76:fe9dd61c5f5c 192 get_req->set_header("X-Cybozu-API-Token", API_TOKEN);
atomichan 76:fe9dd61c5f5c 193
atomichan 76:fe9dd61c5f5c 194 HttpResponse* get_res = get_req->send();
atomichan 76:fe9dd61c5f5c 195
atomichan 76:fe9dd61c5f5c 196 pc.printf("\n----- HTTPS GET response [%d]-----\n",get_res->get_status_code());
atomichan 76:fe9dd61c5f5c 197
atomichan 76:fe9dd61c5f5c 198 if(get_res->get_status_code() == 200){
atomichan 76:fe9dd61c5f5c 199 pc.printf("\n----- HTTPS GET response 200 -----\n");
atomichan 76:fe9dd61c5f5c 200 const char* body = get_res->get_body_as_string().c_str();
atomichan 76:fe9dd61c5f5c 201
atomichan 76:fe9dd61c5f5c 202 pc.printf("%s\r\n",body);
atomichan 76:fe9dd61c5f5c 203
atomichan 76:fe9dd61c5f5c 204 // Response JSON parse
atomichan 76:fe9dd61c5f5c 205 char value[256];
atomichan 76:fe9dd61c5f5c 206
atomichan 76:fe9dd61c5f5c 207 char* p = j_paser(body,"日付",value);
atomichan 76:fe9dd61c5f5c 208 j_paser(p,"value",value);
atomichan 76:fe9dd61c5f5c 209 printf("date:%s\r\n",value);
atomichan 76:fe9dd61c5f5c 210
atomichan 76:fe9dd61c5f5c 211 /*
atomichan 76:fe9dd61c5f5c 212 lcd.cls();
atomichan 76:fe9dd61c5f5c 213 lcd.locate(0,3);
atomichan 76:fe9dd61c5f5c 214 lcd.printf("Date:%s",value);
atomichan 76:fe9dd61c5f5c 215 */
atomichan 76:fe9dd61c5f5c 216
atomichan 76:fe9dd61c5f5c 217 p = j_paser(body,"文字列__1行_",value);
atomichan 76:fe9dd61c5f5c 218 j_paser(p,"value",value);
atomichan 76:fe9dd61c5f5c 219 printf("%s\r\n",value);
atomichan 76:fe9dd61c5f5c 220
atomichan 76:fe9dd61c5f5c 221 /*
atomichan 76:fe9dd61c5f5c 222 lcd.locate(0,14);
atomichan 76:fe9dd61c5f5c 223 lcd.printf("name:%s",value);
atomichan 76:fe9dd61c5f5c 224
atomichan 76:fe9dd61c5f5c 225 // Sound an alert
atomichan 76:fe9dd61c5f5c 226 spkr.period(1.0/5000.0);
atomichan 76:fe9dd61c5f5c 227 spkr=0.5;
atomichan 76:fe9dd61c5f5c 228 wait(1.0);
atomichan 76:fe9dd61c5f5c 229 spkr=0.0;
atomichan 76:fe9dd61c5f5c 230 */
atomichan 76:fe9dd61c5f5c 231
atomichan 76:fe9dd61c5f5c 232 delete get_req;
atomichan 76:fe9dd61c5f5c 233
atomichan 76:fe9dd61c5f5c 234 break;
atomichan 76:fe9dd61c5f5c 235 }
atomichan 76:fe9dd61c5f5c 236
atomichan 76:fe9dd61c5f5c 237 delete get_req;
atomichan 76:fe9dd61c5f5c 238
atomichan 76:fe9dd61c5f5c 239 wait(10.0);
atomichan 76:fe9dd61c5f5c 240 }
atomichan 76:fe9dd61c5f5c 241
atomichan 76:fe9dd61c5f5c 242 //while(fire == 0);
atomichan 76:fe9dd61c5f5c 243 wait(1.0);
atomichan 76:fe9dd61c5f5c 244 }
Jonathan Austin 0:2757d7abb7d9 245 }