Главная » Микроконтроллеры » Взаимодействие ESP8266 NodeMCU с ST7789 TFT и датчиком DHT22

Взаимодействие ESP8266 NodeMCU с ST7789 TFT и датчиком DHT22

В этом проекте рассмотрим, как подключить плату ESP8266 NodeMCU к TFT-дисплею ST7789 SPI и цифровому датчику влажности и температуры DHT22 (AM2302 — RHT03). Значения температуры и относительной влажности печатаются на TFT-дисплее ST7789 соответственно в °C и rH%.

TFT-модуль ST7789 содержит одноименный контроллер дисплея: ST7789. Это цветной дисплей, использующий протокол SPI и требующий 3, 4 или 5 управляющих контактов, недорогой и простой в использовании.

TFT-модуль ST7789

Это IPS-дисплей, он бывает разных размеров (1,3″, 1,54″…), но все они должны иметь одинаковое разрешение 240×240 пикселей. Этот модуль работает только с 3,3 В и не поддерживает 5 В.

О датчике DHT22

Датчик DHT22

Датчик DHT22 имеет следующие характеристики:

  • Диапазон измерения влажности: 0 ~ 100% относительной влажности
  • Точность измерения влажности: ±2%  (макс. ±5%)
  • Диапазон измерения температуры: -40 ~ 80 °C
  • Точность измерения температуры: ± 0,5 ° C
  • Рабочее напряжение: 3,3 В ~ 5,5 В

Требуемое оборудование:

  • Плата ESP8266 NodeMCU
  • Модуль дисплея ST7789 TFT
  • Датчик влажности и температуры DHT22
  • Резистор 4,7 кОм
  • Кабель Micro USB (для программирования и питания всей схемы)
  • Макетная плата
  • Перемычки
Подключение

NodeMCU со схемой датчика ST7789 TFT и DHT22 (AM2302)

Принципиальная схема проекта показана ниже.

Датчик DHT22 (AM2302) имеет 4 контакта (слева направо):

  • контакт 1 — это контакт питания, подключенный к контакту NodeMCU 3V3,
  • контакт 2 — это контакт вывода данных, подключенный к контакту D2 NodeMCU,
  • контакт 3 — это контакт не подключен,
  • контакт 4 — это контакт GND (земля), подключенный к контакту GND NodeMCU.

Так же необходим подтягивающий резистор 4,7 кОм, поскольку датчик DHT22 имеет выход с открытым стоком.

Принципиальная схема проекта

Модуль дисплея ST7789 , приведенный на принципиальной схеме, имеет 7 контактов: (справа налево):

  • GND (земля),
  • VCC (питание),
  • SCL,
  • SDA ,
  • RES (сброс),
  • DC,
  • BLK (подсветка).

Модуль ST7789 TFT-дисплея подключается к плате NodeMCU следующим образом:

  • GND подключен к контакту GND платы NodeMCU,
  • VCC и BL подключен к контакту 3V3,
  • SCL подключен к D5 (ESP8266EX GPIO14),
  • SDA подключен к D7 (ESP8266EX GPIO13),
  • RES подключен к D4 (ESP8266EX GPIO2),
  • DC подключен к D3 (ESP8266EX GPIO0).

Если дисплейный модуль имеет контакт CS (выбор чипа), то его следует подключить к контакту D8 NodeMCU (GPIO15).

Подключение контакта BLK не является обязательным. Подсветка выключается, когда контакт BLK подключается к земле (GND).

Контакты D5 (GPIO14) и D7 (GPIO13) являются контактами аппаратного SPI микроконтроллера ESP8266EX.

Код

Для следующего кода потребуются 3 библиотеки от Adafruit Industries:

Первая библиотека — это драйвер для TFT-дисплея ST7789, который можно установить из диспетчера библиотек Arduino IDE (Sketch -> Include Library — > Управление библиотеками…, в поле поиска напишите «st7789» и установите ту, что от Adafruit).

Вторая библиотека — это графическая библиотека Adafruit GFX, которую также можно установить из менеджера библиотек Arduino IDE.

Третья  библиотека предназначена для датчика DHT22, ее можно установить с помощью менеджера библиотек (в поле поиска напишите «dht» и выберите ту, что от Adafruit).

Возможно, вам потребуется установить библиотеку Adafruit Unified Sensor, если она еще не установлена.

Описание кода

Все три библиотеки включены в основной код следующим образом:

#include <Adafruit_GFX.h>     // Core graphics library
#include <Adafruit_ST7789.h>  // Hardware-specific library for ST7789
#include <DHT.h>              // Adafruit DHT library code

Соединение TFT-дисплея ST7789 с NodeMCU показано ниже, где дисплей подключен к аппаратному SPI-модулю NodeMCU (контакты: SCK и MOSI):

// ST7789 TFT module connections
#define TFT_DC    D3     // TFT DC  pin is connected to NodeMCU pin D3 (GPIO0)
#define TFT_RST   D4     // TFT RST pin is connected to NodeMCU pin D4 (GPIO2)
#define TFT_CS    D8     // TFT CS  pin is connected to NodeMCU pin D8 (GPIO15)
// initialize ST7789 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

TFT-дисплей инициализируется с помощью следующей команды:

// if the display has CS pin try with SPI_MODE0
tft.init(240, 240, SPI_MODE2);    // init ST7789 display 240x240 pixel

Определение типа датчика, подключение его контакта данных и инициализация библиотеки DHT:

#define DHTPIN  D2           // DHT22 data pin is connected to NodeMCU pin D2 (GPIO4)
#define DHTTYPE DHT22        // DHT22 sensor is used
DHT dht22(DHTPIN, DHTTYPE);  // configure DHT library

Полный код Ардуино:

/**************************************************************************
 * 
 * Interfacing ESP8266 NodeMCU (ESP-12E) with ST7789 TFT display and
 *   DHT22 (AM2302) digital humidity & temperature sensor.
 * This is a free software with NO WARRANTY.
 * https://simple-circuit.com/
 *
 *************************************************************************/

#include <Adafruit_GFX.h>     // Core graphics library
#include <Adafruit_ST7789.h>  // Hardware-specific library for ST7789
#include <DHT.h>              // Adafruit DHT library code

// ST7789 TFT module connections
#define TFT_DC    D3     // TFT DC  pin is connected to NodeMCU pin D3 (GPIO0)
#define TFT_RST   D4     // TFT RST pin is connected to NodeMCU pin D4 (GPIO2)
#define TFT_CS    D8     // TFT CS  pin is connected to NodeMCU pin D8 (GPIO15)
// initialize ST7789 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

#define DHTPIN  D2           // DHT22 data pin is connected to NodeMCU pin D2 (GPIO4)
#define DHTTYPE DHT22        // DHT22 sensor is used
DHT dht22(DHTPIN, DHTTYPE);  // configure DHT library

void setup(void)
{
  // if the display has CS pin try with SPI_MODE0
  tft.init(240, 240, SPI_MODE2);    // init ST7789 display 240x240 pixel

  // if the screen is flipped, remove this command
  tft.setRotation(2);
  // fill the screen with black color
  tft.fillScreen(ST77XX_BLACK);

  tft.setTextWrap(false);                        // turn off text wrap option
  tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK);  // set text color to green and black background
  tft.setTextSize(3);           // text size = 3
  tft.setCursor(15, 40);        // move cursor to position (15, 27) pixel
  tft.print("TEMPERATURE:");
  tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);  // set text color to yellow and black background
  tft.setCursor(43, 140);    // move cursor to position (15, 27) pixel
  tft.print("HUMIDITY:");
  tft.setTextSize(4);        // text size = 4
  // print °C
  tft.drawCircle(161, 77, 4, ST77XX_RED);  // print degree symbol ( ° )
  tft.drawCircle(161, 77, 5, ST77XX_RED);
  tft.setCursor(170, 71);
  tft.setTextColor(ST77XX_RED, ST77XX_BLACK);  // set text color to red with black background
  tft.print("C");
  // initialize DHT22 sensor
  dht22.begin();
  
}

// main loop
void loop()
{
  delay(1000);    // wait a second

  // read humidity in rH%
  int Humi = dht22.readHumidity() * 10;
  // read temperature in degrees Celsius
  int Temp = dht22.readTemperature() * 10;

  // print temperature (in °C)
  tft.setCursor(26, 71);
  tft.setTextColor(ST77XX_RED, ST77XX_BLACK);  // set text color to red with black background
  if(Temp < 0)    // if temperature < 0
    tft.printf("-%02u.%1u", (abs(Temp)/10)%100, abs(Temp) % 10);
  else            // temperature >= 0
    tft.printf(" %02u.%1u", (Temp/10)%100, Temp % 10);

  // print humidity (in %)
  tft.setCursor(50, 171);
  tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);  // set text color to cyan and black background
  tft.printf("%02u.%1u %%", (Humi/10)%100, Humi % 10);
}

// end of code.

 

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

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*