151 lines
4.3 KiB
C++
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);
|
|
} |