С 13 января 2025 года стоимость обслуживание одного трекера 220 в месяц
ESP32 примеры  кода использования  датчика температуры и вдлажности DHT22 выводаданных на дисплей SSD1306 обработка много задачности  хранение  данных в  памяти ESP32 использование EEPROM
ESP32 примеры  кода использования  датчика температуры и вдлажности DHT22 выводаданных на дисплей SSD1306
#include "DHTesp.h"
#include <EEPROM.h> //Библиотека для сохранения данных в память
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Ширина OLED-дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота OLED-дисплея, в пикселях
// Декларация для дисплея SSD1306, подключенного к I2C (контакты SDA, SCL)
#define OLED_RESET -1 // Сброс pin-кода # (или -1, если используется общий pin-код сброса Arduino)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define PINDHT 27

#define PINBUTTON1 26

#define PINLEDBUTTON1 25

#define ESP32RESETPIN 15

bool BUTTON1 = false; //Состояние кнопки  зажата или нет
bool STATUSBUTTON1 = false; // Вкл или выкл по стоянию кнопки
bool FLAGBUTTON1 = false; // Удерживается ли кнопка
bool LASTBUTTON1 = false; // Последние состояние кнопки

bool FLAGESP32RESETPIN = false;

DHTesp dhtSensor;

uint32_t timer0 = 0;
uint32_t timer1 = 0;
uint32_t timer2 = 0;

int16_t temperatureC = 0;

float temp = 0.00;
float dav = 0.00;

void setup() {
Serial.begin(115200);
EEPROM.begin(512);//Старт сохранения
Serial.println("ESP32 Start");

pinMode(PINBUTTON1, INPUT_PULLUP);
pinMode(ESP32RESETPIN, INPUT_PULLUP);
pinMode(PINLEDBUTTON1, OUTPUT);

//Читаем состоние кнопки  из памяти для STATUSBUTTON1
byte TEMPSTATUSBUTTON1 = EEPROM.read(0); // Читаем значение
if ((TEMPSTATUSBUTTON1 != 0) &&(TEMPSTATUSBUTTON1 != 1)){//Проверяем что считали
    STATUSBUTTON1 = false;// если  там не тот формат  данных, то обнуляем
  }
else{
    STATUSBUTTON1 = TEMPSTATUSBUTTON1; //Если формат данных верный приравниваем.
  }

  dhtSensor.setup(PINDHT, DHTesp::DHT22);

if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
  }
  display.clearDisplay();
  display.setCursor(36, 12);
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.println("ESP32");
  display.setCursor(36, 32);
  display.println("START");
  display.display();
}

void loop() {
if((millis() - timer0) >= 300){//Раз в 1000 МС
    timer0 = millis();
    setdisp();
//Serial.println("1000");
  }

if((millis() - timer1) >= 500){//Раз в 3 секунды
    timer1 = millis();
//Serial.println("3000");
    gettemp();
  }

if((millis() - timer2) >= 50){//Раз в 1000 МС
    timer2 = millis();
    getbutton();
//Serial.println("5000");
  }

}

void getbutton(){
//BUTTON1 //STATUSBUTTON1 //FLAGBUTTON1 //LASTBUTTON1
  BUTTON1 = !digitalRead(PINBUTTON1);//Считываем  нажатие кнопки
if(BUTTON1 && LASTBUTTON1){
    FLAGBUTTON1 = true; //Кнопка удерживается
//Serial.println("Кнопка удерживается");
  }
else{;
    FLAGBUTTON1 = false; // Разовое нажатие на кнопку
  }

if(BUTTON1){// Проверяем нажание кнопки
if(!FLAGBUTTON1){
      STATUSBUTTON1 = !STATUSBUTTON1;
EEPROM.write(0, STATUSBUTTON1);//Записываем состоние кнопки
EEPROM.commit();// потверждаем запись
    }
  }
digitalWrite(PINLEDBUTTON1, FLAGBUTTON1);
  LASTBUTTON1 = BUTTON1; //Записываем последние состояние  кнопки

  FLAGESP32RESETPIN = !digitalRead(ESP32RESETPIN);
if(FLAGESP32RESETPIN){
    ESP.restart();
  }
}

void setdisp(){
  display.clearDisplay();
  display.setCursor(36, 0);
  display.setTextColor(WHITE);
  display.setTextSize(2);
char ArrayTemp[20];
  dtostrf(temp, 2, 2, ArrayTemp);
  strcat(ArrayTemp,"C");
  display.println(ArrayTemp);
  display.setCursor(36, 20);
char ArrayDav[20];
  dtostrf(dav, 2, 2, ArrayDav);
  strcat(ArrayDav,"%");
  display.println(ArrayDav);
  display.setCursor(36, 40);
if(STATUSBUTTON1){
    display.println("ON");
  }
else{
    display.println("OFF");
  }  
  display.display();
}

void gettemp(){
  TempAndHumidity  data = dhtSensor.getTempAndHumidity();
  temp = data.temperature;
  dav = data.humidity;
//Serial.println("Temp: " + String(data.temperature, 2) + "°C");
//Serial.println("Humidity: " + String(data.humidity, 1) + "%");
}
Информация на сайте не является публичной офертой, информацию уточняйте по электронной почте. Консультации и техническая поддержка осуществляется только по электроноой почте gpslife@yandex.ru; Материал (сайт/статьи) может содержать не точности, содержать тексты и материалы которые могут генерировать ИИ/нейронные сети. Ресурс (сайт) содержит рекламные материалы.