#include #include "DHT.h" // Stuff for reading Tmperature/Humidity sensor #define DHTPIN 13 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Global variable declarations float localHum = 0; float localTemp = 0; char TempBuffer[10]=""; char HumBuffer[10]=""; // Pin definitions for Nokia display #include "font.h" #define RST 15 #define CE 16 #define DC 17 #define DIN 18 #define CLK 19 // Various Subroutines void getDHT() { float tempIni = localTemp; float humIni = localHum; localTemp = dht.readTemperature(); localHum = dht.readHumidity(); if (isnan(localHum) || isnan(localTemp)) // Check if any reads failed and exit early (to try again). { localTemp = tempIni; localHum = humIni; return; } } void LcdXY(int x, int y) { LcdWriteCmd(0x80 | x); // Column LcdWriteCmd(0x40 | y); // Row } void LcdWriteString(char *characters) { while (*characters) LcdWriteCharacter(*characters++); } void LcdWriteCharacter(char character) { for(int i=0; i<5; i++) LcdWriteData(ASCII[character - 0x20][i]); LcdWriteData(0x00); } void LcdWriteData(byte dat) { digitalWrite(DC, HIGH); //DC pin is low for commands digitalWrite(CE, LOW); shiftOut(DIN, CLK, MSBFIRST, dat); //transmit serial data digitalWrite(CE, HIGH); } void LcdWriteCmd(byte cmd) { digitalWrite(DC, LOW); //DC pin is low for commands digitalWrite(CE, LOW); shiftOut(DIN, CLK, MSBFIRST, cmd); //transmit serial data digitalWrite(CE, HIGH); } // the setup function runs once when you press reset or power the board void setup() { // Prepare serial monitor for debugging Serial.begin(115200); delay(5000); // give me 5 seconds to bring up serial monitor Serial.println(""); Serial.println("ESP32 DHT Temperature and Humidity "); Serial.println(""); dht.begin(); // initialize pins to the Nokia display pinMode(LED_BUILTIN, OUTPUT); pinMode(RST, OUTPUT); pinMode(CE, OUTPUT); pinMode(DC, OUTPUT); pinMode(DIN, OUTPUT); pinMode(CLK, OUTPUT); // Reset the Nokia display digitalWrite(RST, LOW); digitalWrite(RST, HIGH); LcdWriteCmd(0x21); // LCD extended commands LcdWriteCmd(0xB8); // set LCD Vop (contrast) LcdWriteCmd(0x04); // set temp coefficent LcdWriteCmd(0x14); // LCD bias mode 1:40 LcdWriteCmd(0x20); // LCD basic commands LcdWriteCmd(0x0C); // Normal video mode // clear LCD by printing spaces for (int i=0; i<504; i++) LcdWriteData(0x00); // print temperature & humdity labels LcdXY(1,1); LcdWriteString("Temperature:"); LcdXY(1,3); LcdWriteString("Humidity:"); } // the loop function runs over and over again forever void loop() { // Call subroutine to read sensor getDHT(); // convert from temperature & humidity from float to string dtostrf(localTemp, 4, 2, TempBuffer); // 4 numerals wide, 2 decimal point places dtostrf(localHum, 4, 2, HumBuffer); // for debugging print temperature & humidity to serial port Serial.print("Temp: "); Serial.print(TempBuffer); Serial.print(" C Humidity: "); Serial.print(HumBuffer); Serial.print("% \n"); // print data to Nokia display LcdXY(1,2); LcdWriteString(TempBuffer); LcdXY(1,4); LcdWriteString(HumBuffer); delay(500); }