LED Blinking Circuit Design
Ini
[env:esp32dev] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 lib_deps = adafruit/Adafruit BusIO adafruit/Adafruit INA219 adafruit/Adafruit ADS1X15 adafruit/Adafruit SSD1306 adafruit/Adafruit GFX Library milesburton/DallasTemperature paulstoffregen/OneWire
Table
| Function | ESP32 GPIO | Schematic net | Connected hardware |
|---|---|---|---|
| Discharge MOSFET gate | GPIO13 | ESP_D13_DISCH_GATE_DRV -> Q1_GATE | R1 100 ohm -> Q1 gate, R3 10k pulldown |
| Fan MOSFET gate | GPIO14 | ESP_D14_FAN_GATE_DRV -> Q2_GATE | R2 100 ohm -> Q2 gate, R4 10k pulldown |
| I2C SDA | GPIO21 | I2C_SDA | INA219, ADS1115, OLED, R5 4.7k pullup |
| I2C SCL | GPIO22 | I2C_SCL | INA219, ADS1115, OLED, R6 4.7k pullup |
| DS18B20 One-Wire | GPIO27 | ONEWIRE_DQ | DS18B20 data, R7 4.7k pullup |
| Button 1 | GPIO25 | BTN_D25 | SW1 active-low to PGND |
| Button 2 | GPIO26 | BTN_D26 | SW2 active-low to PGND |
| Button 3 | GPIO32 | BTN_D32 | SW3 active-low to PGND |
| Green LED 1 | GPIO33 | LED_GREEN1_D33 | R8 330 ohm -> D2 |
| Green LED 2 | GPIO4 | LED_GREEN2_D4 | R9 330 ohm -> D3 |
| Yellow LED 1 | GPIO2 | LED_YELLOW1_D2 | R10 330 ohm -> D4 |
| Yellow LED 2 | GPIO15 | LED_YELLOW2_D15 | R11 330 ohm -> D5 |
| Red LED 1 | GPIO18 | LED_RED1_D18 | R12 330 ohm -> D6 |
| Red LED 2 | GPIO19 | LED_RED2_D19 | R13 330 ohm -> D7 |
Cpp
#include <Wire.h> #include <Adafruit_INA219.h> #include <Adafruit_ADS1X15.h> #include <Adafruit_SSD1306.h> #include <OneWire.h> #include <DallasTemperature.h> constexpr int PIN_DISCHARGE = 13; constexpr int PIN_FAN = 14; constexpr int PIN_ONEWIRE = 27; constexpr int PIN_BTN1 = 25; constexpr int PIN_BTN2 = 26; constexpr int PIN_BTN3 = 32; constexpr int PIN_LED_G1 = 33; constexpr int PIN_LED_G2 = 4; constexpr int PIN_LED_Y1 = 2; constexpr int PIN_LED_Y2 = 15; constexpr int PIN_LED_R1 = 18; constexpr int PIN_LED_R2 = 19; constexpr int I2C_SDA = 21; constexpr int I2C_SCL = 22; Adafruit_INA219 ina219; Adafruit_ADS1115 ads; Adafruit_SSD1306 display(128, 64, &Wire, -1); OneWire oneWire(PIN_ONEWIRE); DallasTemperature ds18b20(&oneWire); void setOutputsSafe() { digitalWrite(PIN_DISCHARGE, LOW); digitalWrite(PIN_FAN, LOW); digitalWrite(PIN_LED_G1, LOW); digitalWrite(PIN_LED_G2, LOW); digitalWrite(PIN_LED_Y1, LOW); digitalWrite(PIN_LED_Y2, LOW); digitalWrite(PIN_LED_R1, LOW); digitalWrite(PIN_LED_R2, LOW); } void setup() { pinMode(PIN_DISCHARGE, OUTPUT); pinMode(PIN_FAN, OUTPUT); pinMode(PIN_LED_G1, OUTPUT); pinMode(PIN_LED_G2, OUTPUT); pinMode(PIN_LED_Y1, OUTPUT); pinMode(PIN_LED_Y2, OUTPUT); pinMode(PIN_LED_R1, OUTPUT); pinMode(PIN_LED_R2, OUTPUT); setOutputsSafe(); pinMode(PIN_BTN1, INPUT_PULLUP); pinMode(PIN_BTN2, INPUT_PULLUP); pinMode(PIN_BTN3, INPUT_PULLUP); Serial.begin(115200); Wire.begin(I2C_SDA, I2C_SCL); ina219.begin(); ads.begin(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); ds18b20.begin(); } void loop() { ds18b20.requestTemperatures(); float tempC = ds18b20.getTempCByIndex(0); float busV = ina219.getBusVoltage_V(); float currentmA = ina219.getCurrent_mA(); int16_t a0 = ads.readADC_SingleEnded(0); bool startPressed = !digitalRead(PIN_BTN1); digitalWrite(PIN_DISCHARGE, startPressed ? HIGH : LOW); digitalWrite(PIN_FAN, tempC > 40.0 ? HIGH : LOW); Serial.printf("T=%.2f C, INA V=%.3f V, I=%.1f mA, ADS A0=%d\n", tempC, busV, currentmA, a0); delay(1000); }
Board/Framework
ESP32 Pin Map
Minimal Arduino Bring-Up Skeleton
Bring-Up Order