Добрый день, форумчане.
Есть код, работает замечательно. Данные с датчиков отправляются на сайт раз в 10 минут и постоянно выводятся на дисплей. Но вот какая затыка, данные с BH1750 корректно уходят на сайт, а на дисплей, если показания превышают 3000 lux, то обратно ниже они не показываются. То есть, если показания ниже 3000 lux, то они меняются, все нормально, а если выше, например 8500 lux, то потом они уже меньше 3000 не становятся. При этом на сайте, на графике, все нормально. Что это может быть? Прошу сильно не ругаться.
Rui Santos
Complete project details at https://RandomNerdTutorials.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#ifdef ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#else
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#endif
#define STASSID "umobale"
#define STAPSK "rtf3872rtf"
#include <Wire.h>
#include "SPI.h"
#include "TFT_22_ILI9225.h"
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <RTClib.h>
#include <BH1750.h>
#include "ClosedCube_HDC1080.h"
#define TFT_RST 4
#define TFT_RS 2
#define TFT_CS 15 // SS
#define TFT_SDI 13 // MOSI
#define TFT_CLK 14 // SCK
#define TFT_LED 0 // 0 if wired to +5V directly
#define TFT_BRIGHTNESS 200
SPIClass hspi (HSPI);
// Укажите свой учетные данные сети
const char* ssid = STASSID;
const char* password = STAPSK;
// Укажите свой домен и путь к файлу
const char* serverName = "http://jan72.ru/post-esp-data.php";
// Оставьте ключ как есть, если вы его измените, то код не будет работать
// Потому, что API должен совпадать с ключом в файле PHP
String apiKeyValue = "tPmAT5Ab3j7F9";
String sensorLocation = "House";
Adafruit_BME280 bme; // I2C
TFT_22_ILI9225 tft = TFT_22_ILI9225(TFT_RST, TFT_RS, TFT_CS, TFT_LED, TFT_BRIGHTNESS);
int16_t x, y;
RTC_DS3231 rtc;
BH1750 lightMeter(0x23);
ClosedCube_HDC1080 hdc1080;
unsigned long previousMillis = 0;
const long interval_1 = 600000;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
// Вы также можете использовать библиотеку Wire
Wire.begin();
#if defined(ESP32)
hspi.begin();
tft.begin(hspi);
tft.setOrientation(1);
#else
tft.begin();
#endif
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
lightMeter.begin();
hdc1080.begin(0x40);
bool status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring or change I2C address!");
while (1);
}
tft.setBackgroundColor(COLOR_GREENYELLOW);
tft.setFont(Terminal12x16);
tft.drawText(20, 80, "Weather station", COLOR_RED);
delay(3000);
tft.clear();
}
void loop() {
unsigned long currentMillis = millis();
float temp_in = bme.readTemperature();
float hum_in = bme.readHumidity();
float pres = bme.readPressure()/133.3;
uint16_t lux = lightMeter.readLightLevel();
float temp_out = hdc1080.readTemperature();
float hum_out = hdc1080.readHumidity();
DateTime now = rtc.now();
char buf1[] = "hh:mm";
char buf2[] = "DD-MM-YYYY";
//}
if (currentMillis - previousMillis >= interval_1) {
previousMillis = currentMillis;
//Проверяем соединение WiFi
if(WiFi.status()== WL_CONNECTED){
WiFiClient client;
HTTPClient http;
// Укажите URL или IP вашего домена
http.begin(client, "http://jan72.ru/post-esp-data.php");
// Указываем тип данных
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Подготавливаем запрос
String httpRequestData = "api_key=" + apiKeyValue + "&location=" + sensorLocation
+ "&value1=" + String(temp_in, 1)
+ "&value2=" + String(hum_in, 1) + "&value3=" + String(pres, 1)
+ "&value4=" + String(lux) + "&value5=" + String(temp_out, 1)
+ "&value6=" + String(hum_out, 1) + "";
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);
// Отправляем запрос
int httpResponseCode = http.POST(httpRequestData);
// если вы делаете запрос с типом text/pain, раскомментируйте следующие строки
//http.addHeader("Content-Type", "text/plain");
//int httpResponseCode = http.POST("Hello, World!");
// если вы делаете запрос с типом application/json, раскомментируйте следующие строки
//http.addHeader("Content-Type", "application/json");
//int httpResponseCode = http.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\"78\"}");
if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Освобождаем память
http.end();
}
else {
Serial.println("WiFi Disconnected");
}
}
/*
tft.setBackgroundColor(COLOR_GRAY);
tft.setFont(Terminal12x16);
tft.drawText(5, 5, "Temp IN", COLOR_INDIGO);
tft.drawText(110, 5, String(temp_in, 1), COLOR_INDIGO);
tft.drawText(180, 5, "'C", COLOR_INDIGO);
tft.drawText(5, 32, "Hum IN", COLOR_CYAN);
tft.drawText(110, 32, String(hum_in, 1), COLOR_CYAN);
tft.drawText(180, 32, "%", COLOR_CYAN);
tft.drawText(5, 59, "Pres", COLOR_MAGENTA);
tft.drawText(95, 59, String(pres, 1), COLOR_MAGENTA);
tft.drawText(170, 59, "mmHg", COLOR_MAGENTA);
tft.drawText(5, 86, "Light", COLOR_RED);
tft.drawText(110, 86, String(lux), COLOR_RED);
tft.drawText(180, 86, "Lux", COLOR_RED);
tft.drawText(5, 113, "Temp OUT", COLOR_VIOLET);
tft.drawText(110, 113, String(temp_out, 1), COLOR_VIOLET);
tft.drawText(180, 113, "'C", COLOR_VIOLET);
tft.drawText(5, 140, "Hum OUT", COLOR_OLIVE);
tft.drawText(110, 140, String(hum_out, 1), COLOR_OLIVE);
tft.drawText(180, 140, "%", COLOR_OLIVE);
tft.setFont(Terminal6x8);
tft.drawText(5, 161, now.toString(buf1), COLOR_AZUR);
tft.drawText(120, 161, now.toString(buf2), COLOR_AZUR);
*/
tft.setBackgroundColor(COLOR_GRAY);
tft.setFont(Terminal12x16);
tft.drawText(10, 5, "Temp IN", COLOR_VIOLET);
tft.drawText(110, 5, "Temp OUT", COLOR_VIOLET);
tft.drawText(10, 32, String(temp_in, 1), COLOR_MAGENTA);
tft.drawText(110, 32, String(temp_out, 1), COLOR_MAGENTA);
tft.drawText(65, 32, "'C", COLOR_MAGENTA);
tft.drawText(165, 32, "'C", COLOR_MAGENTA);
tft.drawText(10, 59, "Hum IN", COLOR_CYAN);
tft.drawText(110, 59, "Hum OUT", COLOR_CYAN);
tft.drawText(10, 86, String(hum_in, 1), COLOR_MAGENTA);
tft.drawText(110, 86, String(hum_out, 1), COLOR_MAGENTA);
tft.drawText(65, 86, "%", COLOR_MAGENTA);
tft.drawText(165, 86, "%", COLOR_MAGENTA);
tft.drawText(10, 113, "Pres", COLOR_RED);
tft.drawText(120, 113, "Light", COLOR_RED);
tft.drawText(10, 140, String(pres, 1), COLOR_MAGENTA);
tft.drawText(120, 140, String(lux), COLOR_MAGENTA);
tft.drawText(75, 140, "mmHg", COLOR_MAGENTA);
tft.drawText(185, 140, "Lux", COLOR_MAGENTA);
tft.setFont(Terminal6x8);
tft.drawText(5, 161, now.toString(buf1), COLOR_AZUR);
tft.drawText(120, 161, now.toString(buf2), COLOR_AZUR);
}```