#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Пины подключения
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// Указание адреса дисплея (по умолчанию 0x3C или 0x3D)
#define OLED_ADDR 0x3C
// Инициализация дисплея
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
float generateRandomTemperature() {
return random(150, 350) / 10.0; // Температура от 15.0 до 35.0 °C
}
float generateRandomHumidity() {
return random(30, 80); // Влажность от 30% до 80%
}
void setup() {
// Запуск сериального монитора
Serial.begin(115200);
// Инициализация дисплея с правильным адресом
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println(F("Не удалось найти дисплей SSD1306"));
while (true); // Ожидаем, пока не подключится дисплей
}
// Очистка экрана
display.clearDisplay();
display.display();
delay(2000);
}
void loop() {
// Генерация случайных значений для температуры и влажности
float t = generateRandomTemperature();
float h = generateRandomHumidity();
// Очистка экрана перед выводом новых данных
display.clearDisplay();
// Устанавливаем размер текста
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
// Отображаем температуру по центру
String tempStr = String(t) + " °C";
int16_t xTemp, yTemp;
uint16_t wTemp, hTemp;
display.getTextBounds(tempStr, 0, 0, &xTemp, &yTemp, &wTemp, &hTemp);
display.setCursor((SCREEN_WIDTH - wTemp) / 2, SCREEN_HEIGHT / 4);
display.print(tempStr);
// Отображаем влажность по центру
String humStr = String(h) + " %";
int16_t xHum, yHum;
uint16_t wHum, hHum;
display.getTextBounds(humStr, 0, 0, &xHum, &yHum, &wHum, &hHum);
display.setCursor((SCREEN_WIDTH - wHum) / 2, SCREEN_HEIGHT / 2);
display.print(humStr);
// Отображаем на экране
display.display();
// Задержка в 2 секунды перед обновлением
delay(2000);
}