前回、WiFiへ接続しました。
今回は、サーバーへ測定値を送付したいと思います。
ソース
(1)ヘッダ
データを格納するString dataと、サーバーのIPアドレス、ポートを定義します。YN_Wifiは、WiFi接続に成功したかどうか判別するためのフラグです。
String data; const char* host = "192.168.**.**"; const uint16_t port = 8080; int YN_Wifi; WiFiClient client;
(2)loop()
温湿度を測定した後、サーバーへ送信するdataを作成します。フォーマットはBME280と共通して使うため、気圧(Press)の項を残しておきます。
Vcは電池の電圧で、後で説明します。
if(Vc>3.6)は電池の残量が少なくなったときに、「起動→WiFi接続失敗→リセット」を繰り返さないようにする仕組みです。3.6Vは暫定値で、実際に使いながら最適化したいと思います。WiFiへ接続できたら、POST2()を実行てdataをサーパーに送信します。
void loop(){ read_SHT31(); //<---温湿度測定 data = "Vc= " + String(Vc) + " [V]"; data += ", Temp5= " + String(temp_31) + " [degC]"; data += ", Humid5= " + String(humid_31) + " [%]"; data += ", Press5= 1000 [hPa]"; data += "||data>text"; Serial.println(data); if(Vc>3.6){ //<---過放電保護 YN_Wifi = setupWiFi2(); //<---WiFi接続 if(YN_Wifi==1) Post2(); //<---POST送信 WiFi.disconnect(); } Display_Pic3(1); //<---OLED表示 DeepSleep(); delay(1000); }
(3)関数 Post2()
サーバーに接続して、dataをHTTPでPOST送信します。
void Post2(){ if (!client.connect(host, port)) { Serial.println("connection failed"); return; } Serial.println("Requesting POST: "); client.println("POST / HTTP/1.1"); client.println("Host: server_name"); client.println("Accept: */*"); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(data.length()); client.println(); client.print(data); delay(100); //<---(190706)Responce解析 while(true){ while (client.available()) { char c = client.read(); } if (!client.connected()) { Serial.println("disconnecting."); client.stop(); break; } } if (client.connected()) { client.stop(); // DISCONNECT FROM THE SERVER } Serial.println("closing connection"); delay(100); }
測定値をサーバーに送信することができるようになりました。
次回は、電池駆動部を作りたいと思います。
サーバー側は、そのうち整理するつもりです。