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 14:44:25 2016 +0000
Revision:
6:ac677b091f76
Parent:
5:dd5bc7b037c7
Child:
7:aa6d95034cf2
TEST

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