28 Дек 16:49 Admin
Прикупил несколько экранчиков и датчиков температуры\давления\влажности. Все ссылки в конце поста.


AHT10, новое поколение датчиков температуры и влажности, устанавливает новый стандарт по размерам и интеллектуальности: он встроен в двухрядный плоский SMD-корпус без свинца для пайки оплавлением с размером дна 4 x 5 мм и высотой 1,6 мм. Датчик выдает откалиброванный цифровой сигнал в стандартном формате I 2C. AHT10 оснащен новым чипом, разработанным специально для ASIC, улучшенным полупроводниковым емкостным датчиком влажности MEMS и стандартным встроенным датчиком температуры. Его производительность была значительно улучшена по сравнению с уровнем надежности датчиков предыдущего поколения. Первое поколение датчиков температуры и влажности было усовершенствовано, чтобы сделать их более стабильными в суровых условиях эксплуатации.
Характеристики:
1. Размер модуля: 16 * 11 мм
2. Тип интерфейса: I2C
3. Рабочее напряжение: 1,8 - 6,0 В
4. Размер интерфейса: шаг 4 * 2,54 мм
5. Точность измерения влажности: обычно ± 2%
6. Разрешение по влажности: 0,024%
7. Точность измерения температуры: обычно ± 0,3 ° C
8. Разрешение по температуре: обычно 0,01 ° C
9. Рабочая температура: -40°C--85°C
Экран:


Интерфейс : SPI
Драйвер: ST7789
Библиотека: Adafruit_ST7789.h + Adafruit_GFX.h
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#include <Wire.h>
#include <AHT10.h>
// BLACK — 0x0000
// BLUE — 0x001F
// RED — 0xF800
// GREEN — 0x07E0
// CYAN — 0x07FF
// MAGENTA — 0xF81F
// YELLOW — 0xFFE0
// WHITE — 0xFFFF
AHT10Class AHT10;
unsigned long previousMillis = 0;
const long interval = 10000; // 10 секунд
// Переменные для хранения значений
float currentTemperature = 0.0;
float currentHumidity = 0.0;
float currentDewpoint = 0.0;
#if defined(ARDUINO_FEATHER_ESP32)
#define TFT_CS 14
#define TFT_RST 15
#define TFT_DC 32
#elif defined(ESP8266)
#define TFT_CS 4
#define TFT_RST 16
#define TFT_DC 5
#else
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#endif
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(115200);
// Инициализация дисплея
tft.init(172, 320); // Для ST7789 2.4" экран
tft.setRotation(1); // Установка ориентации
tft.fillScreen(ST77XX_BLACK);
// Инициализация датчика 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.setCursor(20, 40);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(3);
tft.print("Temp:");
tft.setCursor(20, 70);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(3);
tft.print("Humidity:");
tft.setCursor(20, 100);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(3);
tft.print("Dewpoint:");
tft.setCursor(20, 130);
tft.setTextColor(ST77XX_MAGENTA);
tft.setTextSize(3);
tft.print("https://sorny.ru");
tft.drawRoundRect(5, 2, 309, 168, 10, ST77XX_CYAN);
}
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(220, 40, 90, 30, ST77XX_BLACK);
// Очищаем области с влажностью
tft.fillRect(220, 70, 90, 30, ST77XX_BLACK);
// Очищаем области с точкой росы
tft.fillRect(220, 100, 90, 30, ST77XX_BLACK);
// Выводим температуру
tft.setCursor(220, 40);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(3);
tft.print(temperature, 1); // 1 знак после запятой
// Выводим влажность
tft.setCursor(220, 70);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(3);
tft.print(humidity, 1); // 1 знак после запятой
// Выводим точку росы
tft.setCursor(220, 100);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(3);
tft.print(dewpoint, 1); // 1 знак после запятой
}

Головная плата Arduino Nano. Китайская само-собой.
Подключение
Экран (имеет встроенный регулятор напряжения):
DL > +5
CS > D10
DC > D8
RES > D9
SDA > D11
SCL > D13
VDD > +5
GND > GND
Датчик AHT10:
VIN > +5
GND > GND
SCL > A5
SDA > A4