// Codice per il monitoraggio da remoto della temperatura e umidità
// con NodeRED su http://NODEREDCLIENT_IPADDRESS/8080/ui
// con webserver ESP_IPADDRESS
// e display SSD1306
#include "Adafruit_Sensor.h"
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Links from the video:
// Lopaka editor: https://lopaka.app/
// 128x64 SSD1306 OLED Display 1.54": https://s.click.aliexpress.com/e/_DCYdWXb
// 128x64 SSD1306 OLED Display 0.96": https://s.click.aliexpress.com/e/_DCKdvnh
// 128x64 SSD1306 OLED Display 2.42": https://s.click.aliexpress.com/e/_DFdMoTh
// Arduino UNO: https://s.click.aliexpress.com/e/_AXDw1h
#define SCREEN_WIDTH 128 // OLED width, in pixels
#define SCREEN_HEIGHT 64 // OLED height, in pixels
// ------------------- For i2c -------------------
//// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ------------------- For SPI -------------------
// Declaration for SSD1306 display connected using software SPI (default case):
//#define OLED_MOSI D7
//#define OLED_CLK D5
//#define OLED_DC D2
//#define OLED_CS D8
//#define OLED_RESET D1
//Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT,
// OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
//Colori
//SSD1306_WHITE
//WHITE
//Constants
#define DHTPIN 4 // pin DATI sul GPIO
#define DHTTYPE DHT22 // Sensore DHT11 (AM2302)
DHT dht(DHTPIN, DHTTYPE); // Inizializza il sensore
float temp; // valori sensore temperatura
float humidity; // valori sensore umidità
// Gestione termostato
#define LED0 14
#define LED1 12
int i=0;
int j=0;
#define RELAY0 15
void setup() {
Serial.begin (115200);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(RELAY0, OUTPUT);
dht.begin();
while (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Initialize OLED display with I2C address 0x3C
Serial.println(F("Failed to start SSD1306 OLED"));
delay(500); // inizializzazione schermo
}
//oled.width(), oled.height()
//` 0, 0` sono le coordinate (X, Y) in cui vuoi posizionare l'immagine.
//`128, 64` sono le dimensioni del logo.
//`WHITE` è il colore dei pixel accesi (con libreria come Adafruit GFX)
// Show initial display buffer contents on the screen --
digitalWrite(LED0,HIGH);
digitalWrite(LED1,HIGH);
//Esempio display
oled.clearDisplay();
oled.setTextColor(1);
oled.setCursor(64, 32);
oled.print("xxx");
oled.setTextColor(1);
oled.setTextWrap(false);
oled.setCursor(62, 5);
oled.print("TempH");
oled.setCursor(97, 5);
oled.print("TempL");
oled.setTextSize(2);
oled.setCursor(66, 19);
oled.print("23");
oled.setCursor(100, 19);
oled.print("19");
oled.setTextSize(4);
oled.setCursor(8, 17);
oled.print(String(int(dht.readTemperature())));
oled.drawCircle(30, 31, 27, 1);
oled.display();
}
// loop(): se non assegnato è sempre il core1 che gestisce questo
void loop() {
/*
Serial.printf("Led %d, ciclo %d, eseguito dal core %d\n", LED0, i++, xPortGetCoreID());
digitalWrite (LED0, HIGH); // LED0 HIGH
delay (800);
digitalWrite (LED0, LOW); // LED0 LOW
delay (800);
Serial.printf("Led %d, ciclo %d, eseguito dal core %d\n", LED1, j++, xPortGetCoreID());
Serial.print ("Hello");
digitalWrite (LED1, HIGH); // LED1 HIGH
delay (300);
Serial.println (" World");
digitalWrite (LED1, LOW); // LED1 LOW
delay (300);
*/
}