/*
ESP32 + ILI9341 LCD Basic Example
https://wokwi.com/projects/325324981270479442
*/
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "DHT.h"
#include <TFT_eSPI.h> // Hardware-specific library
#define TFT_GREY 0x5AEB
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
uint32_t targetTime = 0; // for next 1 second timeout
//static uint8_t conv2d(const char* p); // Forward declaration needed for IDE 1.6.x
//uint8_t hh = conv2d(__TIME__), mm = conv2d(__TIME__ + 3), ss = conv2d(__TIME__ + 6); // Get H, M, S from compile time
byte omm = 99, oss = 99;
byte xcolon = 0, xsecs = 0;
unsigned int colour = 0;
#define TFT_DC 2
#define TFT_CS 15
#define DHTPIN 13
// Global variables and defines
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
int displayMode = 0;
bool displayInit = false;
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
struct Sensor{
String Location;
int xPos;
int yPos;
int Color;
//DHT Dht;
};
Sensor sensors[1];
void setup() {
dht.begin();
changeDisplay(0);
sensors[0].Location = "Tank";
sensors[0].xPos = 32;
sensors[0].yPos = 40;
sensors[0].Color = ILI9341_YELLOW;
}
void loop() {
float dhtHumidity = dht.readHumidity();
// Read temperature in Celsius, for Fahrenheit use .readTempF()
float dhtTempC = dht.readTemperature();
Serial.print(F("Humidity: ")); Serial.print(dhtHumidity); Serial.print(F(" [%]\t"));
Serial.print(F("Temp: ")); Serial.print(dhtTempC); Serial.println(F(" [C]"));
delay(5000);
switch(displayMode){
case 0:
displaySensors();
break;
default:
displaySensors();
break;
}
}
void displaySensors() {
float dhtHumidity = dht.readHumidity();
// Read temperature in Celsius, for Fahrenheit use .readTempF()
float dhtTempC = dht.readTemperature();
float dhtTempF = (int)round(1.8*dhtTempC+32);
int xPos = 18;
int yPos = 20;
if (!displayInit) {
tft.begin();
tft.setRotation(3);
tft.setCursor(xPos, yPos);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("Location Temp Hum");
tft.drawLine(140,20, 140, 160, ILI9341_WHITE);
tft.drawLine(230,20, 230, 160, ILI9341_WHITE);
tft.drawLine(10,38, 300, 38, ILI9341_WHITE);
displayInit = true;
}
for (int i=0; i<sizeof sensors/sizeof sensors[0]; i++) {
tft.setCursor(sensors[i].xPos, sensors[i].yPos);
tft.print(sensors[i].Location);
tft.setCursor(160, sensors[i].yPos);
tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
tft.print(format3(dhtTempF));
}
}
void changeDisplay(int display) {
if(displayMode != display)
{
tft.fillScreen(TFT_BLACK);
displayMode = display;
displayInit = false;
}
}
char * format3(float x)
{
static char buffer[6]; // 5 chars + terminating NUL
snprintf(buffer, sizeof buffer, "%5d", x);
return buffer;
}