Files
Baro_BMP280/BMP280_https_log/BMP280_https_log.ino

151 lines
4.3 KiB
C++

// target - DOIT ESP32 DEVKIT V1
#include <HTTPClient.h>
#define LED_BUILTIN 2
#include <GyverBME280.h>
#include <WiFiMulti_Generic.h>
GyverBME280 bme;
WiFiMulti_Generic wifiMulti;
#define BM280_READ_PERIOD 125
#define LOOPS_LIMIT 10
float bm_buf[LOOPS_LIMIT * 3];
uint32_t mil_list[LOOPS_LIMIT];
int loopnum = 0;
boolean blinkmode = false;
uint16_t blinktime = 1000;
uint32_t lastReading = 0;
time_t start_time = 0;
char your_ssid[] = "Keenetic-6595"; // your network SSID (name)
char your_pass[] = "1Q2w3e4r"; // your network password
char your_ssid1[] = "ShurikPoint"; // your network SSID (name)
char your_pass1[] = "IyeHjr15"; // your network password
//const char* httpuri ="http://192.168.1.79/pox"; // home 25.03.2026
const char* httpuri ="http://195.201.126.70:8080/pox"; // Germany
//const char* httpuri ="http://activity206.li.ru/cgi-bin/baro.sh"; // Владимир
const char *ap_id = "BMP280_01";
void setup() {
Serial.begin(115200);
while (!Serial && millis() < 5000);
pinMode(LED_BUILTIN, OUTPUT);
bme.setFilter(FILTER_COEF_2);
bme.setStandbyTime(STANDBY_125MS);
if(!bme.begin()){
Serial.println("BARO ERROR");
blinkmode = true;
blinktime = 100;
return;
}
Serial.print(F("\nStarting WiFiMulti on ")); Serial.println(BOARD_NAME);
Serial.println(WIFIMULTI_GENERIC_VERSION);
wifiMulti.addAP(your_ssid, your_pass);
wifiMulti.addAP(your_ssid1, your_pass1);
if (wifiMulti.run() == WL_CONNECTED)
{
Serial.print("\nWiFi connected, SSID: ");
Serial.print(WiFi.SSID());
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}else{
Serial.println("WiFi ERROR");
blinkmode = true;
blinktime = 500;
return;
}
// Получение мирового времени
Serial.print("Retrieving time: ");
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
time_t now = time(nullptr);
while (now < 24 * 3600)
{
Serial.print(".");
digitalWrite(LED_BUILTIN, HIGH);
delay(20);
digitalWrite(LED_BUILTIN, LOW);
delay(80);
now = time(nullptr);
//pisk(1);
}
Serial.println(now);
}
void getBaroData() {
//Serial.println(loopnum);
if (loopnum >= LOOPS_LIMIT) {return;}
if (loopnum == 0) start_time = time(nullptr);
bm_buf[loopnum * 3] = bme.readTemperature();
bm_buf[loopnum * 3 + 1] = bme.readHumidity();
bm_buf[loopnum * 3 + 2] = bme.readPressure();
mil_list[loopnum] = millis();
loopnum++;
return;
}
void loop() {
if(blinkmode)
{
digitalWrite(LED_BUILTIN, HIGH);
delay(blinktime);
digitalWrite(LED_BUILTIN, LOW);
delay(blinktime);
return;
}
lastReading = millis();
getBaroData();
if (loopnum >= LOOPS_LIMIT){
bool rez = sendData();
loopnum = 0;
}
delay(BM280_READ_PERIOD - (millis() - lastReading) % BM280_READ_PERIOD);
}
bool sendData(){
// send data to host
WiFiClient client;
time_t now = time(nullptr);
char fstr[16];
String ds = ap_id;
sprintf(fstr,"Start %lu", start_time);
ds += ", ";
ds += fstr;
sprintf(fstr,"Send %lu", now);
ds += ", ";
ds += fstr;
ds += " :\t";
for(int i=0; i< LOOPS_LIMIT; i++){
if(i>0) ds += "; ";
ds+= String(mil_list[i]);
ds += ",";
ds+= String(bm_buf[i * 3]);
ds += ",";
ds+= String(bm_buf[i * 3 + 1]);
ds += ",";
ds+= String(bm_buf[i * 3 + 2]); // / 100.0F);
}
HTTPClient http; //Объявить объект класса HttpClient
http.begin(client, httpuri); //Укажите адрес запроса
http.addHeader("Content-Type", "text/plain"); //Укажите заголовок типа содержимого
http.addHeader("Title", ds); // так передадим ID датчика
Serial.println("Send data:");
Serial.println(ds);
int httpCode = http.POST(ds); //Отправьте запрос
String payload = http.getString(); //Получите полезную нагрузку ответа
Serial.println("HTTP answer:");
Serial.println(httpCode); //Распечатать код возврата HTTP
Serial.println(payload); //Полезная нагрузка для ответа на запрос печати
http.end(); //Закрыть соединение
if(httpCode==200){
return(true);
}else{
return(false);
}
return(true);
}