07 Янв   22:29    Admin

Arduino Nano + TFT 128x160 (ST7735S) + AHT10

Датчик 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 знак после запятой
}

Экран
Датчик AHT10

Подключение.

Экран:

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

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