07 Янв 22:29 Admin
Датчик AHT10 тут.
Все ссылки в конце поста.


#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Arduino.h>
#include <SPI.h>
#include <AHT10.h>
AHT10Class AHT10;
unsigned long previousMillis = 0;
const long interval = 10000; // 10 секунд
// Переменные для хранения значений
float currentTemperature = 0.0;
float currentHumidity = 0.0;
float currentDewpoint = 0.0;
// Пины для ST7735
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
uint16_t width = 128; // Ширина экрана
uint16_t height = 160; // Высота экрана для 1.8" дисплея
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(115200);
// Инициализация дисплея
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
Serial.println(F("Initialized"));
// Инициализация датчика AHT10
if (!AHT10.begin(eAHT10Address_Low)) {
tft.setCursor(5, 20);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(4);
tft.println("AHT10 Error!");
return;
}
// Первое отображение данных (включая статический текст)
displayStaticText();
displaySensorData();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
displaySensorData();
}
delay(100);
}
void displayStaticText() {
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_BLACK);
// Отображаем постоянный текст
tft.setCursor(5, 10);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(2);
tft.print("===Temp===");
tft.setCursor(5, 55);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.print("=Humidity=");
tft.setCursor(5, 100);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(2);
tft.print("=Dewpoint=");
tft.setCursor(17, 147);
tft.setTextColor(ST77XX_MAGENTA);
tft.setTextSize(1);
tft.print("https://sorny.ru");
// Рисуем рамку для экрана 128x160
// Учитываем, что координаты отсчитываются от 0,0
tft.drawRoundRect(0, 0, 128, 160, 5, ST77XX_ORANGE);
}
void displaySensorData() {
// Извлекаем значения
float temperature = AHT10.GetTemperature();
float humidity = AHT10.GetHumidity();
float dewpoint = AHT10.GetDewPoint();
// Проверяем, успешны ли чтения
if (isnan(temperature) || isnan(humidity) || isnan(dewpoint)) {
Serial.println("Failed to read from AHT10 sensor!");
return;
}
currentTemperature = temperature;
currentHumidity = humidity;
currentDewpoint = dewpoint;
// Очищаем только области с данными (не весь экран)
// Очищаем области с температурой
tft.fillRect(40, 25, 80, 30, ST77XX_BLACK);
// Очищаем области с влажностью
tft.fillRect(40, 70, 80, 30, ST77XX_BLACK);
// Очищаем области с точкой росы
tft.fillRect(40, 115, 80, 30, ST77XX_BLACK);
// Выводим температуру
tft.setCursor(40, 30);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(2);
tft.print(temperature, 1); // 1 знак после запятой
// Выводим влажность
tft.setCursor(40, 75);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.print(humidity, 1); // 1 знак после запятой
// Выводим точку росы
tft.setCursor(40, 120);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(2);
tft.print(dewpoint, 1); // 1 знак после запятой
}

Подключение.
Экран:
1 GND > GND
2 VCC > +3 (Регулятора нет. Не подключайте к 5v)
3 SCK > D13
4 SDA > D11
5 RES > D9
6 RS > D8
7 CS > D10
8 LEDA > +3 (Регулятора нет. Не подключайте к 5v)
AHT10:
VIN > +5
GND > GND
SCL > A5
SDA > A4