//wifi 라이브러리
#include <WiFi.h>
#include <Wire.h>
//현재 시간 불러오는 라이브러리
#include "time.h"
#include "SPI.h"
#include "Adafruit_GFX.h" // Adafruit의 그래픽 관련 라이브러리
#include "Adafruit_ILI9341.h"// ILI9341 제어용 라이브러리
//온습도 센서 라이브러리
#include "DHT.h"
#include <Adafruit_SSD1306.h>
#include "TM1637Display.h"
TM1637Display TMdisplay(17, 16);
#define LED 23
#define TFT_BLACK 0x0000
#define TFT_WHITE 0xFFFF
#define TFT_CS 15
#define TFT_DC 2
#define TFT_MOSI 23
#define TFT_CLK 18
#define TFT_RST 4
#define TFT_MISO 19
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
Adafruit_SSD1306 display(128, 32, &Wire, -1);
//온습도 센서
DHT dht(15, DHT22); // (DHTPIN, DHTTYPE)
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C.h 라이브러리추가
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); // (주소, 16 문자, 2 라인)
const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600 * 9;
const int daylightOffset_sec = 0;
void setup()
{
Serial.begin(115200);
tft.begin();
Serial.println("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
pinMode(LED, OUTPUT);
//LCD에 IoT 응용 제어 과제 출력
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("IoT Application");
lcd.setCursor(0,1);
lcd.print("Control Task");
//오늘 날짜, 시간
printLocalTime();
//온습도 측정
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
printHumidityTemperature();
TMdisplay.setBrightness(0x03);
}
void loop()
{
for(uint8_t rotation=0; ; rotation++) {
tft.setRotation(rotation);
printLocalTime();
printHumidityTemperature();
delay(500);
}
}
void printLocalTime()
{
struct tm timeinfo;
if (!getLocalTime(&timeinfo))
{
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
tft.setRotation(4); // 화면 회전
tft.setCursor(10, 30);
tft.setTextColor(ILI9341_WHITE,ILI9341_BLACK);
tft.setTextSize(3);
tft.println(&timeinfo, "%B %d %Y"); // month
tft.setCursor(10, 70);
tft.setTextSize(3);
tft.println(&timeinfo, "%a %H:%M:%S"); // clock
}
void printHumidityTemperature()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.println(h);
Serial.println(t);
display.clearDisplay();
display.setCursor(2,10);
display.setTextColor(WHITE);
display.print("Humidity: " + String(h) +" "+ char(37));
display.setCursor(2,25);
display.print("Temperature: " + String(t) + " `C");
display.display();
}