ESP32 Sensor and Control Schematic
Table
| Function | Schematic net | ESP32 DevKit pin | Arduino GPIO |
|---|---|---|---|
| DS18B20 sensor 1 data | ONEWIRE_TEMP1 | U1:D4 | 4 |
| DS18B20 sensor 2 data | ONEWIRE_TEMP2 | U1:RX2 | 16 |
| TFT SCK | SPI_SCK | U1:D18 | 18 |
| TFT MISO | SPI_MISO | U1:D19 | 19 |
| TFT MOSI | SPI_MOSI | U1:D23 | 23 |
| TFT CS | SPI_CS_TFT | U1:D5 | 5 |
| TFT DC/RS | TFT_DC | U1:D21 | 21 |
| TFT RESET | TFT_RST | U1:D22 | 22 |
| Relay control | RELAY_CTRL | U1:D25 | 25 |
| Active buzzer control | BUZZER_CTRL | U1:D26 | 26 |
| Red LED control | LED_CTRL | U1:D27 | 27 |
| Push button input | BUTTON_INPUT | U1:D32 | 32 |
Ini
[env:esp32dev] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 lib_deps = paulstoffregen/OneWire milesburton/DallasTemperature adafruit/Adafruit ILI9341 adafruit/Adafruit GFX Library
Cpp
#include <Arduino.h> #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_ILI9341.h> #define PIN_TEMP1 4 #define PIN_TEMP2 16 #define PIN_TFT_CS 5 #define PIN_TFT_DC 21 #define PIN_TFT_RST 22 #define PIN_TFT_SCK 18 #define PIN_TFT_MISO 19 #define PIN_TFT_MOSI 23 #define PIN_RELAY 25 #define PIN_BUZZER 26 #define PIN_LED 27 #define PIN_BUTTON 32 #define TEMP_SETPOINT_C 50.0 #define TEMP_HYST_C 2.0 OneWire oneWire1(PIN_TEMP1); OneWire oneWire2(PIN_TEMP2); DallasTemperature temp1(&oneWire1); DallasTemperature temp2(&oneWire2); Adafruit_ILI9341 tft(PIN_TFT_CS, PIN_TFT_DC, PIN_TFT_RST); bool heaterOn = false; unsigned long lastReadMs = 0; void setHeater(bool on) { heaterOn = on; digitalWrite(PIN_RELAY, on ? HIGH : LOW); digitalWrite(PIN_LED, on ? HIGH : LOW); } void setup() { Serial.begin(115200); pinMode(PIN_RELAY, OUTPUT); pinMode(PIN_BUZZER, OUTPUT); pinMode(PIN_LED, OUTPUT); pinMode(PIN_BUTTON, INPUT_PULLUP); setHeater(false); digitalWrite(PIN_BUZZER, LOW); temp1.begin(); temp2.begin(); SPI.begin(PIN_TFT_SCK, PIN_TFT_MISO, PIN_TFT_MOSI, PIN_TFT_CS); tft.begin(); tft.setRotation(1); tft.fillScreen(ILI9341_BLACK); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2); tft.setCursor(10, 10); tft.println("Heater Controller"); } void loop() { if (millis() - lastReadMs >= 1000) { lastReadMs = millis(); temp1.requestTemperatures(); temp2.requestTemperatures(); float t1 = temp1.getTempCByIndex(0); float t2 = temp2.getTempCByIndex(0); float controlTemp = min(t1, t2); if (!heaterOn && controlTemp < TEMP_SETPOINT_C - TEMP_HYST_C) setHeater(true); if (heaterOn && controlTemp > TEMP_SETPOINT_C + TEMP_HYST_C) setHeater(false); bool alarm = (t1 == DEVICE_DISCONNECTED_C || t2 == DEVICE_DISCONNECTED_C); digitalWrite(PIN_BUZZER, alarm ? HIGH : LOW); Serial.printf("T1=%.2f C, T2=%.2f C, Heater=%s\n", t1, t2, heaterOn ? "ON" : "OFF"); tft.fillRect(0, 40, 320, 120, ILI9341_BLACK); tft.setCursor(10, 50); tft.printf("T1: %.1f C\n", t1); tft.setCursor(10, 75); tft.printf("T2: %.1f C\n", t2); tft.setCursor(10, 100); tft.printf("Heater: %s\n", heaterOn ? "ON" : "OFF"); } if (digitalRead(PIN_BUTTON) == LOW) { setHeater(false); digitalWrite(PIN_BUZZER, LOW); } }
ESP32 Pin Mapping
PlatformIO Setup
Arduino Starter Code
Bring-Up Sequence