research_king / Mbed 2 deprecated WiFi_Camera

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of WiFi_Camera by Hiroshi Nakanishi

Committer:
h_nakanishi
Date:
Fri Nov 04 16:08:51 2016 +0000
Revision:
8:6baeb73b4728
Parent:
7:aa6d95034cf2
ADD SYSTEM RESET

Who changed what in which revision?

UserRevisionLine numberNew contents of line
thorai 4:4ea6299ad00e 1 #include "mbed.h"
h_nakanishi 6:ac677b091f76 2 #include "rtos.h"
h_nakanishi 6:ac677b091f76 3
h_nakanishi 6:ac677b091f76 4 #define GPS_ENABLE 1
h_nakanishi 6:ac677b091f76 5 #define WIFI_ENABLE 1
h_nakanishi 6:ac677b091f76 6 #define ETHER_ENABLE 0
h_nakanishi 6:ac677b091f76 7
h_nakanishi 6:ac677b091f76 8 #if WIFI_ENABLE
thorai 4:4ea6299ad00e 9 #include "ESP8266.h"
h_nakanishi 6:ac677b091f76 10 #endif // WIFI_ENABLE
h_nakanishi 6:ac677b091f76 11
h_nakanishi 6:ac677b091f76 12 #if ETHER_ENABLE
h_nakanishi 6:ac677b091f76 13 #include "EthernetInterface.h"
h_nakanishi 6:ac677b091f76 14 #endif // ETHER_ENABLE
h_nakanishi 6:ac677b091f76 15
h_nakanishi 6:ac677b091f76 16 #if GPS_ENABLE
h_nakanishi 5:dd5bc7b037c7 17 #include "gps.h"
h_nakanishi 6:ac677b091f76 18 #endif // GPS_ENABLE
thorai 4:4ea6299ad00e 19
h_nakanishi 6:ac677b091f76 20 /****************************************************************************/
h_nakanishi 6:ac677b091f76 21 /* Ether関連の定義 */
h_nakanishi 6:ac677b091f76 22 /****************************************************************************/
h_nakanishi 6:ac677b091f76 23 #if ETHER_ENABLE
h_nakanishi 6:ac677b091f76 24 EthernetInterface eth;
h_nakanishi 6:ac677b091f76 25 #define HOST_NAME "104.199.222.173" // HOST Address
h_nakanishi 6:ac677b091f76 26 #define HOST_URL "/r-king/space/webapi.php?" // HOST URL
h_nakanishi 6:ac677b091f76 27 #define HOST_PORT (80) // HOST Port
h_nakanishi 6:ac677b091f76 28 #endif // ETHER_ENABLE
thorai 4:4ea6299ad00e 29
thorai 4:4ea6299ad00e 30 /****************************************************************************/
thorai 4:4ea6299ad00e 31 /* Wi-Fi関連の定義 */
thorai 4:4ea6299ad00e 32 /****************************************************************************/
h_nakanishi 6:ac677b091f76 33 #if WIFI_ENABLE
h_nakanishi 5:dd5bc7b037c7 34 SerialBuffered serial_buffered(P8_14, P8_15);
thorai 4:4ea6299ad00e 35 ESP8266 wifi;
h_nakanishi 6:ac677b091f76 36 //#define WLAN_SSID "4CE67630E22B" // AP Name
h_nakanishi 6:ac677b091f76 37 //#define WLAN_PASS "t3340pn5mkmkh" // AP PassWord
h_nakanishi 6:ac677b091f76 38 //#define HOST_NAME "104.199.222.173" // HOST Address
h_nakanishi 6:ac677b091f76 39 //#define HOST_URL "/r-king/space/webapi.php?" // HOST URL
h_nakanishi 6:ac677b091f76 40
h_nakanishi 6:ac677b091f76 41
h_nakanishi 6:ac677b091f76 42 #define WLAN_SSID "DIRECT-W4Q0:DSC-QX10" // AP Name
h_nakanishi 6:ac677b091f76 43 #define WLAN_PASS "kXocAsgx" // AP PassWord
h_nakanishi 6:ac677b091f76 44 #define HOST_NAME "10.0.0.1" // HOST Address
h_nakanishi 6:ac677b091f76 45 #define HOST_PORT (10000) // HOST Port
thorai 4:4ea6299ad00e 46 #define ESP_Serial serial_buffered // WiFi Module Port
thorai 4:4ea6299ad00e 47 #define ESP_Baud 115200 // WiFi Module Port
thorai 4:4ea6299ad00e 48 #define WIFI_BUF 256 // WiFi Buffer Length
thorai 4:4ea6299ad00e 49
h_nakanishi 7:aa6d95034cf2 50 #define CAMERA_SET_PICMODE "{\"method\": \"setShootMode\",\"params\": [\"still\"],\"id\": 1,\"version\": \"1.0\"}"
h_nakanishi 7:aa6d95034cf2 51 #define CAMERA_SET_MOVIEMODE "{\"method\": \"setShootMode\",\"params\": [\"movie\"],\"id\": 1,\"version\": \"1.0\"}"
h_nakanishi 7:aa6d95034cf2 52 #define CAMERA_SHOT "{\"method\": \"actTakePicture\",\"params\": [],\"id\": 1,\"version\": \"1.0\"}"
h_nakanishi 7:aa6d95034cf2 53 #define CAMERA_REC_START "{\"method\": \"startMovieRec\",\"params\": [],\"id\": 1,\"version\": \"1.0\"}"
h_nakanishi 7:aa6d95034cf2 54 #define CAMERA_REC_STOP "{\"method\": \"stopMovieRec\",\"params\": [],\"id\": 1,\"version\": \"1.0\"}"
h_nakanishi 7:aa6d95034cf2 55 int cameraStat = 0;
h_nakanishi 6:ac677b091f76 56 #endif // WIFI_ENABLE
h_nakanishi 6:ac677b091f76 57
thorai 4:4ea6299ad00e 58 /****************************************************************************/
thorai 4:4ea6299ad00e 59 /* グローバル変数の定義 */
thorai 4:4ea6299ad00e 60 /****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 61 int isEnableWiFi = false;
h_nakanishi 5:dd5bc7b037c7 62 int isEnableGPS = false;
h_nakanishi 5:dd5bc7b037c7 63 double g_lat = 12.3f;
h_nakanishi 5:dd5bc7b037c7 64 double g_lon = 45.6f;
h_nakanishi 5:dd5bc7b037c7 65 double g_alt = 78.9f;
h_nakanishi 5:dd5bc7b037c7 66 int g_year = 2016;
h_nakanishi 5:dd5bc7b037c7 67 int g_month = 01;
h_nakanishi 5:dd5bc7b037c7 68 int g_day = 01;
h_nakanishi 5:dd5bc7b037c7 69 int g_hour = 00;
h_nakanishi 5:dd5bc7b037c7 70 int g_min = 00;
h_nakanishi 5:dd5bc7b037c7 71 int g_sec = 00;
thorai 4:4ea6299ad00e 72
thorai 4:4ea6299ad00e 73 /****************************************************************************/
thorai 4:4ea6299ad00e 74 /* プロトタイプ宣言 */
thorai 4:4ea6299ad00e 75 /****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 76 static void loop(void);
h_nakanishi 6:ac677b091f76 77 #if ETHER_ENABLE
h_nakanishi 6:ac677b091f76 78 static int setupEther();
h_nakanishi 6:ac677b091f76 79 static int sendEther();
h_nakanishi 6:ac677b091f76 80 #endif // ETHER_ENABLE
h_nakanishi 6:ac677b091f76 81 #if WIFI_ENABLE
h_nakanishi 5:dd5bc7b037c7 82 static int setupWiFi();
h_nakanishi 5:dd5bc7b037c7 83 static int sendWiFi();
h_nakanishi 5:dd5bc7b037c7 84 static void resetWiFi();
h_nakanishi 6:ac677b091f76 85 #endif // WIFI_ENABLE
h_nakanishi 5:dd5bc7b037c7 86 #if GPS_ENABLE
h_nakanishi 5:dd5bc7b037c7 87 int setupGPS();
h_nakanishi 5:dd5bc7b037c7 88 static void onGpsGdaReceivedCallback(SerialGPS::NMEA_GGA* data);
h_nakanishi 5:dd5bc7b037c7 89 static void onGpsZdaReceivedCallback(SerialGPS::NMEA_ZDA* data);
h_nakanishi 5:dd5bc7b037c7 90 static SerialGPS s_SerialGPS(P2_14, P2_15); // ★PIN番号は機器にあわせること★
h_nakanishi 5:dd5bc7b037c7 91 static SerialGPS::GpsCallbackTable s_GpsCallbackTable = {
h_nakanishi 5:dd5bc7b037c7 92 /*.log_cbfunc = */ NULL,
h_nakanishi 5:dd5bc7b037c7 93 /*.gga_cbfunc = */ onGpsGdaReceivedCallback,
h_nakanishi 5:dd5bc7b037c7 94 /*.gll_cbfunc = */ NULL,
h_nakanishi 5:dd5bc7b037c7 95 /*.gsa_cbfunc = */ NULL,
h_nakanishi 5:dd5bc7b037c7 96 /*.gsv_cbfunc = */ NULL,
h_nakanishi 5:dd5bc7b037c7 97 /*.rmc_cbfunc = */ NULL,
h_nakanishi 5:dd5bc7b037c7 98 /*.vtg_cbfunc = */ NULL,
h_nakanishi 5:dd5bc7b037c7 99 /*.zda_cbfunc = */ onGpsZdaReceivedCallback
h_nakanishi 5:dd5bc7b037c7 100 };
h_nakanishi 5:dd5bc7b037c7 101 #endif //GPS_ENABLE
thorai 4:4ea6299ad00e 102
thorai 4:4ea6299ad00e 103 int main() {
h_nakanishi 5:dd5bc7b037c7 104 printf("[Serial Start]\r\n");
thorai 4:4ea6299ad00e 105
thorai 4:4ea6299ad00e 106 // Setup Wi-Fi
h_nakanishi 6:ac677b091f76 107 #if WIFI_ENABLE
thorai 4:4ea6299ad00e 108 isEnableWiFi = setupWiFi();
h_nakanishi 6:ac677b091f76 109 #endif // WIFI_ENABLE
h_nakanishi 6:ac677b091f76 110
h_nakanishi 6:ac677b091f76 111 #if ETHER_ENABLE
h_nakanishi 6:ac677b091f76 112 setupEther();
h_nakanishi 6:ac677b091f76 113 #endif // ETHER_ENABLE
h_nakanishi 6:ac677b091f76 114
h_nakanishi 5:dd5bc7b037c7 115 // Setup GPS
h_nakanishi 5:dd5bc7b037c7 116 isEnableGPS = setupGPS();
thorai 4:4ea6299ad00e 117
h_nakanishi 5:dd5bc7b037c7 118 //mc.baud(115200);
h_nakanishi 5:dd5bc7b037c7 119 /*
thorai 4:4ea6299ad00e 120 char data1[7] = {0xFF,0x1C,0x04,0x03,0x01,0x01,0x28};//時計回り
thorai 4:4ea6299ad00e 121 mc.printf(data1);
thorai 4:4ea6299ad00e 122 printf(data1);
thorai 4:4ea6299ad00e 123
thorai 4:4ea6299ad00e 124 wait(3);
thorai 4:4ea6299ad00e 125
thorai 4:4ea6299ad00e 126 char data2[7] = {0xFF,0x1C,0x04,0x03,0x01,0x02,0x28};//反時計まわり
thorai 4:4ea6299ad00e 127 mc.printf(data2);
thorai 4:4ea6299ad00e 128 printf(data2);
thorai 4:4ea6299ad00e 129
thorai 4:4ea6299ad00e 130 wait(3);
thorai 4:4ea6299ad00e 131
thorai 4:4ea6299ad00e 132 char data3[7] = {0xFF,0x1C,0x04,0x03,0x01,0x00,0x3C};//モータ停止TODO:00
thorai 4:4ea6299ad00e 133 // mc.printf(data3);
thorai 4:4ea6299ad00e 134 for(int i = 0 ; i < sizeof(data3) ; i++){
thorai 4:4ea6299ad00e 135 mc.putc(data3[i]);
thorai 4:4ea6299ad00e 136 }
thorai 4:4ea6299ad00e 137 // printf(data3);
thorai 4:4ea6299ad00e 138
thorai 4:4ea6299ad00e 139 printf("[Serial End]\n");
h_nakanishi 5:dd5bc7b037c7 140 */
thorai 4:4ea6299ad00e 141
h_nakanishi 5:dd5bc7b037c7 142 loop();
h_nakanishi 5:dd5bc7b037c7 143 }
h_nakanishi 5:dd5bc7b037c7 144 int cnt = 0;
h_nakanishi 5:dd5bc7b037c7 145 void loop(void)
h_nakanishi 5:dd5bc7b037c7 146 {
h_nakanishi 5:dd5bc7b037c7 147 while(true)
h_nakanishi 5:dd5bc7b037c7 148 {
h_nakanishi 5:dd5bc7b037c7 149 #if GPS_ENABLE
h_nakanishi 5:dd5bc7b037c7 150 s_SerialGPS.Processing();//
h_nakanishi 5:dd5bc7b037c7 151 #endif //GPS_ENABLE
h_nakanishi 5:dd5bc7b037c7 152 wait_ms(10);
h_nakanishi 5:dd5bc7b037c7 153
h_nakanishi 5:dd5bc7b037c7 154 if(cnt >= 1000)
h_nakanishi 5:dd5bc7b037c7 155 {
h_nakanishi 6:ac677b091f76 156 #if ETHER_ENABLE
h_nakanishi 6:ac677b091f76 157 sendEther();
h_nakanishi 6:ac677b091f76 158 #endif // ETHER_ENABLE
h_nakanishi 6:ac677b091f76 159 #if WIFI_ENABLE
h_nakanishi 6:ac677b091f76 160 sendWiFi();
h_nakanishi 6:ac677b091f76 161 #endif // WIFI_ENABLE
h_nakanishi 5:dd5bc7b037c7 162 cnt = 0;
h_nakanishi 5:dd5bc7b037c7 163 }
h_nakanishi 5:dd5bc7b037c7 164 cnt++;
h_nakanishi 5:dd5bc7b037c7 165 }
thorai 4:4ea6299ad00e 166 }
thorai 4:4ea6299ad00e 167
h_nakanishi 6:ac677b091f76 168 #if ETHER_ENABLE
h_nakanishi 6:ac677b091f76 169 /****************************************************************************/
h_nakanishi 6:ac677b091f76 170 // 機能 : Ether通信機能のセットアップ
h_nakanishi 6:ac677b091f76 171 // 引数 : なし
h_nakanishi 6:ac677b091f76 172 // 返り値 : ret FALSE(0):失敗 TRUE(1):成功
h_nakanishi 6:ac677b091f76 173 // 備考 : なし
h_nakanishi 6:ac677b091f76 174 /****************************************************************************/
h_nakanishi 6:ac677b091f76 175 static int setupEther()
h_nakanishi 6:ac677b091f76 176 {
h_nakanishi 6:ac677b091f76 177 eth.init(); //Use DHCP
h_nakanishi 6:ac677b091f76 178 eth.connect();
h_nakanishi 6:ac677b091f76 179 printf("IP Address is %s\n", eth.getIPAddress());
h_nakanishi 6:ac677b091f76 180
h_nakanishi 6:ac677b091f76 181 return 1;
h_nakanishi 6:ac677b091f76 182 }
h_nakanishi 6:ac677b091f76 183
h_nakanishi 6:ac677b091f76 184 /****************************************************************************/
h_nakanishi 6:ac677b091f76 185 // 機能 : Ether送信処理
h_nakanishi 6:ac677b091f76 186 // 引数 : なし
h_nakanishi 6:ac677b091f76 187 // 返り値 : ret FALSE(0):失敗 TRUE(1):成功
h_nakanishi 6:ac677b091f76 188 // 備考 : なし
h_nakanishi 6:ac677b091f76 189 /****************************************************************************/
h_nakanishi 6:ac677b091f76 190 static int sendEther()
h_nakanishi 6:ac677b091f76 191 {
h_nakanishi 6:ac677b091f76 192 TCPSocketConnection sock;
h_nakanishi 6:ac677b091f76 193 sock.connect(HOST_NAME, HOST_PORT);
h_nakanishi 6:ac677b091f76 194
h_nakanishi 6:ac677b091f76 195 // build GET Request
h_nakanishi 6:ac677b091f76 196 char buf[1024] = {'\0'};
h_nakanishi 6:ac677b091f76 197 // sprintf(buf, "GET %saction=add&token=001&lat=%lf&lon=%lf&height=%lf HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",
h_nakanishi 6:ac677b091f76 198 sprintf(buf, "GET %saction=add&token=001&lat=%lf&lon=%lf&height=%lf HTTP/1.1\r\nHost: %s\r\n\r\n",
h_nakanishi 6:ac677b091f76 199 HOST_URL,
h_nakanishi 6:ac677b091f76 200 g_lat,
h_nakanishi 6:ac677b091f76 201 g_lon,
h_nakanishi 6:ac677b091f76 202 g_alt,
h_nakanishi 6:ac677b091f76 203 HOST_NAME);
h_nakanishi 6:ac677b091f76 204
h_nakanishi 6:ac677b091f76 205 printf(buf);
h_nakanishi 6:ac677b091f76 206
h_nakanishi 6:ac677b091f76 207 sock.send_all(buf, sizeof(buf)-1);
h_nakanishi 6:ac677b091f76 208
h_nakanishi 6:ac677b091f76 209 char buffer[300];
h_nakanishi 6:ac677b091f76 210 int ret;
h_nakanishi 6:ac677b091f76 211 while (true) {
h_nakanishi 6:ac677b091f76 212 ret = sock.receive(buffer, sizeof(buffer)-1);
h_nakanishi 6:ac677b091f76 213 if (ret <= 0)
h_nakanishi 6:ac677b091f76 214 break;
h_nakanishi 6:ac677b091f76 215 buffer[ret] = '\0';
h_nakanishi 6:ac677b091f76 216 printf("Received %d chars from server:\n%s\n", ret, buffer);
h_nakanishi 6:ac677b091f76 217 }
h_nakanishi 6:ac677b091f76 218
h_nakanishi 6:ac677b091f76 219 sock.close();
h_nakanishi 6:ac677b091f76 220
h_nakanishi 6:ac677b091f76 221 return 1;
h_nakanishi 6:ac677b091f76 222 }
h_nakanishi 6:ac677b091f76 223 #endif // ETHER_ENABLE
h_nakanishi 6:ac677b091f76 224
h_nakanishi 6:ac677b091f76 225 #if WIFI_ENABLE
thorai 4:4ea6299ad00e 226 /****************************************************************************/
thorai 4:4ea6299ad00e 227 // 機能 : Wi-Fi通信機能のセットアップ
thorai 4:4ea6299ad00e 228 // 引数 : なし
thorai 4:4ea6299ad00e 229 // 返り値 : ret FALSE(0):失敗 TRUE(1):成功
thorai 4:4ea6299ad00e 230 // 備考 : なし
thorai 4:4ea6299ad00e 231 /****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 232 static int setupWiFi()
thorai 4:4ea6299ad00e 233 {
thorai 4:4ea6299ad00e 234 int ret = false;
thorai 4:4ea6299ad00e 235
h_nakanishi 5:dd5bc7b037c7 236 // Wi-Fiとのシリアル通信を開始する
thorai 4:4ea6299ad00e 237 wifi.begin(ESP_Serial, ESP_Baud);
h_nakanishi 5:dd5bc7b037c7 238
h_nakanishi 5:dd5bc7b037c7 239 // Wi-Fiモジュールをリセット
h_nakanishi 5:dd5bc7b037c7 240 resetWiFi();
h_nakanishi 5:dd5bc7b037c7 241
h_nakanishi 5:dd5bc7b037c7 242 // FWバージョンを取得
thorai 4:4ea6299ad00e 243 printf("FW Version:");
h_nakanishi 5:dd5bc7b037c7 244 printf(wifi.getVersion().c_str()); // AT+GMR
thorai 4:4ea6299ad00e 245 printf("\r\n");
thorai 4:4ea6299ad00e 246
h_nakanishi 5:dd5bc7b037c7 247 // 既に接続済みであれば切断
h_nakanishi 5:dd5bc7b037c7 248 wifi.leaveAP(); // AT+CWQAP
h_nakanishi 5:dd5bc7b037c7 249
thorai 4:4ea6299ad00e 250 // 接続の準備
h_nakanishi 5:dd5bc7b037c7 251 if (wifi.setOprToStationSoftAP()) { // AT+CWMODE=3
thorai 4:4ea6299ad00e 252 printf("to station + softap ok\r\n");
thorai 4:4ea6299ad00e 253 } else {
thorai 4:4ea6299ad00e 254 printf("to station + softap err\r\n");
thorai 4:4ea6299ad00e 255 //return ret;
thorai 4:4ea6299ad00e 256 }
h_nakanishi 5:dd5bc7b037c7 257
h_nakanishi 5:dd5bc7b037c7 258 // 接続可能なAP一覧を表示
h_nakanishi 5:dd5bc7b037c7 259 //printf("%s\r\n", wifi.getAPList().c_str()); // AT+CWLAP
h_nakanishi 5:dd5bc7b037c7 260
thorai 4:4ea6299ad00e 261 // APに接続する
h_nakanishi 5:dd5bc7b037c7 262 if (wifi.joinAP(WLAN_SSID, WLAN_PASS)) { // AT+CWJAP="SSID","PASSWORD"
thorai 4:4ea6299ad00e 263 printf("Join AP success\r\n");
thorai 4:4ea6299ad00e 264 printf("IP:");
thorai 4:4ea6299ad00e 265 printf( wifi.getLocalIP().c_str());
thorai 4:4ea6299ad00e 266 printf("\r\n");
thorai 4:4ea6299ad00e 267 } else {
thorai 4:4ea6299ad00e 268 printf("Join AP failure\r\n");
thorai 4:4ea6299ad00e 269 return ret;
thorai 4:4ea6299ad00e 270 }
thorai 4:4ea6299ad00e 271
thorai 4:4ea6299ad00e 272 // コネクションを1つのみに設定
h_nakanishi 5:dd5bc7b037c7 273
h_nakanishi 5:dd5bc7b037c7 274 if (wifi.disableMUX()) { // AT+CIPMUX=0
h_nakanishi 5:dd5bc7b037c7 275 printf("multi ok\r\n");
thorai 4:4ea6299ad00e 276 } else {
h_nakanishi 5:dd5bc7b037c7 277 printf("multi err\r\n");
thorai 4:4ea6299ad00e 278 return ret;
thorai 4:4ea6299ad00e 279 }
thorai 4:4ea6299ad00e 280
thorai 4:4ea6299ad00e 281 printf("setup end\r\n");
thorai 4:4ea6299ad00e 282 ret = true;
thorai 4:4ea6299ad00e 283
thorai 4:4ea6299ad00e 284 return ret;
thorai 4:4ea6299ad00e 285 }
thorai 4:4ea6299ad00e 286
thorai 4:4ea6299ad00e 287 /****************************************************************************/
thorai 4:4ea6299ad00e 288 // 機能 : Wi-Fi送信機能
thorai 4:4ea6299ad00e 289 // 引数 : buffer 送信データ
thorai 4:4ea6299ad00e 290 // 返り値 : ret FALSE(0):失敗 TRUE(1):成功
thorai 4:4ea6299ad00e 291 // 備考 : なし
thorai 4:4ea6299ad00e 292 /****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 293 static int sendWiFi()
thorai 4:4ea6299ad00e 294 {
thorai 4:4ea6299ad00e 295 int ret = false;
thorai 4:4ea6299ad00e 296
thorai 4:4ea6299ad00e 297 uint8_t buffer[2048] = {0};
thorai 4:4ea6299ad00e 298 bool sendRet = false;
thorai 4:4ea6299ad00e 299
h_nakanishi 5:dd5bc7b037c7 300 printf("sendWiFi\r\n");
h_nakanishi 5:dd5bc7b037c7 301 if (wifi.createTCP(HOST_NAME, HOST_PORT)) { // AT+CIPSTART="TCP","104.199.222.173",80
thorai 4:4ea6299ad00e 302 printf("create tcp ok\r\n");
thorai 4:4ea6299ad00e 303 } else {
thorai 4:4ea6299ad00e 304 printf("create tcp err\r\n");
h_nakanishi 8:6baeb73b4728 305 // システムリセット
h_nakanishi 8:6baeb73b4728 306 NVIC_SystemReset();
h_nakanishi 5:dd5bc7b037c7 307 return ret;
thorai 4:4ea6299ad00e 308 }
h_nakanishi 5:dd5bc7b037c7 309 wait(1);
h_nakanishi 5:dd5bc7b037c7 310
h_nakanishi 6:ac677b091f76 311 // build POST Request
h_nakanishi 5:dd5bc7b037c7 312 char buf[1024] = {'\0'};
h_nakanishi 7:aa6d95034cf2 313 // 動画の撮影
h_nakanishi 7:aa6d95034cf2 314 char dat[128] = {'\0'};
h_nakanishi 7:aa6d95034cf2 315
h_nakanishi 7:aa6d95034cf2 316 //sprintf(dat, "%s", CAMERA_SHOT);
h_nakanishi 7:aa6d95034cf2 317
h_nakanishi 7:aa6d95034cf2 318 switch(cameraStat)
h_nakanishi 7:aa6d95034cf2 319 {
h_nakanishi 7:aa6d95034cf2 320 case 0:
h_nakanishi 7:aa6d95034cf2 321 sprintf(dat, "%s", CAMERA_SET_MOVIEMODE);
h_nakanishi 7:aa6d95034cf2 322 cameraStat++;
h_nakanishi 7:aa6d95034cf2 323 break;
h_nakanishi 7:aa6d95034cf2 324
h_nakanishi 7:aa6d95034cf2 325 case 1:
h_nakanishi 7:aa6d95034cf2 326 sprintf(dat, "%s", CAMERA_REC_START);
h_nakanishi 7:aa6d95034cf2 327 cameraStat++;
h_nakanishi 7:aa6d95034cf2 328 break;
h_nakanishi 7:aa6d95034cf2 329
h_nakanishi 7:aa6d95034cf2 330 case 2:
h_nakanishi 7:aa6d95034cf2 331 sprintf(dat, "%s", CAMERA_REC_STOP);
h_nakanishi 7:aa6d95034cf2 332 cameraStat++;
h_nakanishi 7:aa6d95034cf2 333 break;
h_nakanishi 7:aa6d95034cf2 334
h_nakanishi 7:aa6d95034cf2 335 default:
h_nakanishi 8:6baeb73b4728 336 //
h_nakanishi 7:aa6d95034cf2 337 break;
h_nakanishi 7:aa6d95034cf2 338 }
h_nakanishi 7:aa6d95034cf2 339
h_nakanishi 7:aa6d95034cf2 340 sprintf(buf, "POST /sony/camera HTTP/1.1\r\nHost: 10.0.0.1\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s\r\n",(strlen(dat)+1), dat);
h_nakanishi 6:ac677b091f76 341
h_nakanishi 6:ac677b091f76 342 /*
h_nakanishi 5:dd5bc7b037c7 343 sprintf(buf, "GET %saction=add&token=001&lat=%lf&lon=%lf&height=%lf HTTP/1.1\r\nHost: %s\r\n\r\n",
h_nakanishi 5:dd5bc7b037c7 344 HOST_URL,
h_nakanishi 5:dd5bc7b037c7 345 g_lat,
h_nakanishi 5:dd5bc7b037c7 346 g_lon,
h_nakanishi 5:dd5bc7b037c7 347 g_alt,
h_nakanishi 5:dd5bc7b037c7 348 HOST_NAME);
h_nakanishi 6:ac677b091f76 349 */
thorai 4:4ea6299ad00e 350
h_nakanishi 5:dd5bc7b037c7 351 printf(buf);
thorai 4:4ea6299ad00e 352
h_nakanishi 5:dd5bc7b037c7 353 // Send GET Request
h_nakanishi 5:dd5bc7b037c7 354 sendRet = wifi.send((const uint8_t*)buf, strlen(buf)); // AT+CIPSEND=送信バイト数
thorai 4:4ea6299ad00e 355 if(sendRet == true) {
thorai 4:4ea6299ad00e 356 printf("Success!!\r\n");
h_nakanishi 5:dd5bc7b037c7 357 ret = true;
thorai 4:4ea6299ad00e 358 } else {
thorai 4:4ea6299ad00e 359 printf("Fail!!\r\n");
h_nakanishi 5:dd5bc7b037c7 360 // Wi-Fiモジュールをリセット
h_nakanishi 5:dd5bc7b037c7 361 resetWiFi();
h_nakanishi 5:dd5bc7b037c7 362 return ret;
thorai 4:4ea6299ad00e 363 }
h_nakanishi 5:dd5bc7b037c7 364 wait(1);
thorai 4:4ea6299ad00e 365
h_nakanishi 5:dd5bc7b037c7 366 // wait Response (T/O 10Sec)
thorai 4:4ea6299ad00e 367 uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
thorai 4:4ea6299ad00e 368 if (len > 0) {
thorai 4:4ea6299ad00e 369 printf("Received:[");
thorai 4:4ea6299ad00e 370 for(uint32_t i = 0; i < len; i++) {
thorai 4:4ea6299ad00e 371 printf("%c", buffer[i]);
thorai 4:4ea6299ad00e 372 }
thorai 4:4ea6299ad00e 373 printf("]\r\n");
thorai 4:4ea6299ad00e 374 }
h_nakanishi 5:dd5bc7b037c7 375
h_nakanishi 5:dd5bc7b037c7 376 // release TCP
thorai 4:4ea6299ad00e 377 if (wifi.releaseTCP()) {
thorai 4:4ea6299ad00e 378 printf("release tcp ok\r\n");
thorai 4:4ea6299ad00e 379 } else {
thorai 4:4ea6299ad00e 380 printf("release tcp err\r\n");
thorai 4:4ea6299ad00e 381 }
h_nakanishi 8:6baeb73b4728 382
h_nakanishi 8:6baeb73b4728 383
h_nakanishi 5:dd5bc7b037c7 384
h_nakanishi 5:dd5bc7b037c7 385 return ret;
h_nakanishi 5:dd5bc7b037c7 386 }
h_nakanishi 5:dd5bc7b037c7 387
h_nakanishi 5:dd5bc7b037c7 388 /****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 389 // 機能 : Wi-Fiリセット機能
h_nakanishi 5:dd5bc7b037c7 390 // 引数 : buffer 送信データ
h_nakanishi 5:dd5bc7b037c7 391 // 返り値 : ret FALSE(0):失敗 TRUE(1):成功
h_nakanishi 5:dd5bc7b037c7 392 // 備考 : なし
h_nakanishi 5:dd5bc7b037c7 393 /****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 394 static void resetWiFi()
h_nakanishi 5:dd5bc7b037c7 395 {
h_nakanishi 5:dd5bc7b037c7 396 printf("Wi-Fi kick\r\n");
h_nakanishi 5:dd5bc7b037c7 397 wifi.kick(); // AT
h_nakanishi 5:dd5bc7b037c7 398 printf("Wi-Fi reset\r\n");
h_nakanishi 5:dd5bc7b037c7 399 wifi.restart(); // AT+RST
h_nakanishi 5:dd5bc7b037c7 400 wait(10);
h_nakanishi 5:dd5bc7b037c7 401 }
h_nakanishi 6:ac677b091f76 402 #endif // WIFI_ENABLE
h_nakanishi 5:dd5bc7b037c7 403
h_nakanishi 5:dd5bc7b037c7 404 #if GPS_ENABLE
h_nakanishi 5:dd5bc7b037c7 405 /****************************************************************************
h_nakanishi 5:dd5bc7b037c7 406 モジュール名 : GPS Setup
h_nakanishi 5:dd5bc7b037c7 407 関数名 : setupGPS
h_nakanishi 5:dd5bc7b037c7 408 引数 : なし
h_nakanishi 5:dd5bc7b037c7 409 戻り値 : GPS受信データ
h_nakanishi 5:dd5bc7b037c7 410 処理概要 : GPS受信処理
h_nakanishi 5:dd5bc7b037c7 411 注意事項 : なし
h_nakanishi 5:dd5bc7b037c7 412 ****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 413 int setupGPS()
h_nakanishi 5:dd5bc7b037c7 414 {
h_nakanishi 5:dd5bc7b037c7 415 int ret = false;
h_nakanishi 5:dd5bc7b037c7 416 #if GPS_ENABLE
h_nakanishi 5:dd5bc7b037c7 417 // GPSライブラリの呼び出しサンプルコード
h_nakanishi 5:dd5bc7b037c7 418 s_SerialGPS.Init(); // GPS初期化
h_nakanishi 5:dd5bc7b037c7 419 s_SerialGPS.SetGpsCallback(&s_GpsCallbackTable); // GPSコールバック登録
h_nakanishi 5:dd5bc7b037c7 420 s_SerialGPS.RcvIsrEnable(); // GPS受信有効
h_nakanishi 5:dd5bc7b037c7 421 ret = true;
h_nakanishi 5:dd5bc7b037c7 422 #endif // GPS_ENABLE
thorai 4:4ea6299ad00e 423 return ret;
thorai 4:4ea6299ad00e 424 }
thorai 4:4ea6299ad00e 425
h_nakanishi 5:dd5bc7b037c7 426
h_nakanishi 5:dd5bc7b037c7 427 /****************************************************************************
h_nakanishi 5:dd5bc7b037c7 428 モジュール名 : GPS受信コールバック
h_nakanishi 5:dd5bc7b037c7 429 関数名 : onGpsGdaReceivedCallback
h_nakanishi 5:dd5bc7b037c7 430 引数 : なし
h_nakanishi 5:dd5bc7b037c7 431 戻り値 : GPS受信データ
h_nakanishi 5:dd5bc7b037c7 432 処理概要 : GPS受信処理
h_nakanishi 5:dd5bc7b037c7 433 注意事項 : なし
h_nakanishi 5:dd5bc7b037c7 434 ****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 435 void onGpsGdaReceivedCallback(SerialGPS::NMEA_GGA* data)
h_nakanishi 5:dd5bc7b037c7 436 {
h_nakanishi 5:dd5bc7b037c7 437 double d_lat,d_lon,m_lat,m_lon;
h_nakanishi 5:dd5bc7b037c7 438
h_nakanishi 5:dd5bc7b037c7 439 // lat
h_nakanishi 5:dd5bc7b037c7 440 d_lat=int(data->latitude/100);
h_nakanishi 5:dd5bc7b037c7 441 m_lat=(data->latitude - d_lat*100)/60;
h_nakanishi 5:dd5bc7b037c7 442 g_lat=d_lat+m_lat;
h_nakanishi 5:dd5bc7b037c7 443
h_nakanishi 5:dd5bc7b037c7 444 // lon
h_nakanishi 5:dd5bc7b037c7 445 d_lon=int(data->longitude/100);
h_nakanishi 5:dd5bc7b037c7 446 m_lon=(data->longitude - d_lon*100)/60;
h_nakanishi 5:dd5bc7b037c7 447 g_lon=d_lon+m_lon;
h_nakanishi 5:dd5bc7b037c7 448
h_nakanishi 5:dd5bc7b037c7 449 // alt
h_nakanishi 5:dd5bc7b037c7 450 g_alt = data->altitude;
h_nakanishi 5:dd5bc7b037c7 451
h_nakanishi 5:dd5bc7b037c7 452 printf("lat=%lf, lon=%lf, alt=%lf\r\n", g_lat, g_lon, g_alt);
h_nakanishi 5:dd5bc7b037c7 453 }
h_nakanishi 5:dd5bc7b037c7 454
h_nakanishi 5:dd5bc7b037c7 455 /****************************************************************************
h_nakanishi 5:dd5bc7b037c7 456 モジュール名 : GPS受信コールバック
h_nakanishi 5:dd5bc7b037c7 457 関数名 : onGpsZdaReceivedCallback
h_nakanishi 5:dd5bc7b037c7 458 引数 : なし
h_nakanishi 5:dd5bc7b037c7 459 戻り値 : GPS受信データ
h_nakanishi 5:dd5bc7b037c7 460 処理概要 : GPS受信処理
h_nakanishi 5:dd5bc7b037c7 461 注意事項 : なし
h_nakanishi 5:dd5bc7b037c7 462 ****************************************************************************/
h_nakanishi 5:dd5bc7b037c7 463 void onGpsZdaReceivedCallback(SerialGPS::NMEA_ZDA* data)
h_nakanishi 5:dd5bc7b037c7 464 {
h_nakanishi 5:dd5bc7b037c7 465 g_year = data->year;
h_nakanishi 5:dd5bc7b037c7 466 g_month = data->month;
h_nakanishi 5:dd5bc7b037c7 467 g_day = data->day;
h_nakanishi 5:dd5bc7b037c7 468 g_hour = (data->hour) + (data->hour_diff);
h_nakanishi 5:dd5bc7b037c7 469 g_min = (data->min) + (data->min_diff);
h_nakanishi 5:dd5bc7b037c7 470 g_sec = data->sec;
h_nakanishi 5:dd5bc7b037c7 471
h_nakanishi 5:dd5bc7b037c7 472 printf("TIME:%04d/%02d/%02d %02d:%02d:%02d\r\n",
h_nakanishi 5:dd5bc7b037c7 473 g_year,
h_nakanishi 5:dd5bc7b037c7 474 g_month,
h_nakanishi 5:dd5bc7b037c7 475 g_day,
h_nakanishi 5:dd5bc7b037c7 476 g_hour,
h_nakanishi 5:dd5bc7b037c7 477 g_min,
h_nakanishi 5:dd5bc7b037c7 478 g_sec);
h_nakanishi 5:dd5bc7b037c7 479 }
h_nakanishi 5:dd5bc7b037c7 480 #endif //GPS_ENABLE