28 Дек   16:49    Admin

Arduino Nano + TFT 172x320 (ST7789) + AHT10

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

Датчик температуры\давления\влажности:

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

 

Экран:

1,47-дюймовый TFT ЖК-экран ST7789P3, небольшой экран 172*320

Интерфейс : 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

Оставить комментарий