ESP32-Based Smart Power Monitoring System with OLED Display and Wi-Fi Connectivity
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This document provides a detailed overview of a circuit that includes various sensors, pushbuttons, an OLED display, and an ESP32 microcontroller. The circuit is designed to measure current and voltage, display the readings on an OLED screen, and potentially send data over WiFi.
Component List
Pushbutton
- Description: A simple pushbutton switch.
- Pins: Pin 1 (in), Pin 2 (in), Pin 3 (out), Pin 4 (out)
ACS712 Current Sensor 5A 20A 30A
- Description: A current sensor capable of measuring up to 30A.
- Pins: 1, 2, GND, OUT, VCC
Voltage Sensor DC 25V
- Description: A voltage sensor capable of measuring up to 25V.
- Pins: +, -, output, gnd, vcc
0.96" OLED
- Description: A small OLED display for visual output.
- Pins: GND, VDD, SCK, SDA
USB Male 2 Pin Connection
- Description: A USB male connector with 2 pins.
- Pins: Negative -, Positive +
USB Female
- Description: A USB female connector.
- Pins: VCC, GND, -D, +D
ESP32 Devkit V1
- Description: A development board based on the ESP32 microcontroller.
- Pins: 3V3, GND, D15, D2, D4, RX2, TX2, D5, D18, D19, D21, RX0, TX0, D22, D23, EN, VP, VN, D34, D35, D32, D33, D25, D26, D27, D14, D12, D13, VIN
Wiring Details
Pushbutton
Pushbutton 1
- Pin 1 (in) connected to ESP32 Devkit V1 D13
- Pin 4 (out) connected to ESP32 Devkit V1 GND
Pushbutton 2
- Pin 2 (in) connected to ESP32 Devkit V1 GND
- Pin 3 (out) connected to ESP32 Devkit V1 D12
ACS712 Current Sensor 5A 20A 30A
Current Sensor 1
- OUT connected to ESP32 Devkit V1 VP
- GND connected to ESP32 Devkit V1 GND
- VCC connected to ESP32 Devkit V1 VIN
- 1 connected to USB male 2 pin connection Negative -
- 2 connected to USB male 2 pin connection Positive +
Current Sensor 2
- OUT connected to ESP32 Devkit V1 D26
- GND connected to ESP32 Devkit V1 GND
- VCC connected to ESP32 Devkit V1 VIN
- 1 connected to USB male 2 pin connection Negative -
- 2 connected to USB male 2 pin connection Positive +
Current Sensor 3
- OUT connected to ESP32 Devkit V1 D35
- GND connected to ESP32 Devkit V1 GND
- VCC connected to ESP32 Devkit V1 VIN
- 1 connected to USB male 2 pin connection Negative -
- 2 connected to USB male 2 pin connection Positive +
Current Sensor 4
- OUT connected to ESP32 Devkit V1 D33
- GND connected to ESP32 Devkit V1 GND
- VCC connected to ESP32 Devkit V1 VIN
- 1 connected to USB male 2 pin connection Negative -
- 2 connected to USB male 2 pin connection Positive +
Current Sensor 5
- OUT connected to ESP32 Devkit V1 D27
- GND connected to ESP32 Devkit V1 GND
- VCC connected to ESP32 Devkit V1 VIN
- 1 connected to USB male 2 pin connection Negative -
- 2 connected to USB male 2 pin connection Positive +
Voltage Sensor DC 25V
Voltage Sensor 1
- output connected to ESP32 Devkit V1 VN
- gnd connected to USB male 2 pin connection Negative -
- vcc connected to USB male 2 pin connection Positive +
Voltage Sensor 2
- output connected to ESP32 Devkit V1 D34
- gnd connected to USB male 2 pin connection Negative -
- vcc connected to USB male 2 pin connection Positive +
Voltage Sensor 3
- output connected to ESP32 Devkit V1 D32
- gnd connected to USB male 2 pin connection Negative -
- vcc connected to USB male 2 pin connection Positive +
Voltage Sensor 4
- output connected to ESP32 Devkit V1 D25
- gnd connected to USB male 2 pin connection Negative -
- vcc connected to USB male 2 pin connection Positive +
Voltage Sensor 5
- output connected to ESP32 Devkit V1 D14
- gnd connected to USB male 2 pin connection Negative -
- vcc connected to USB male 2 pin connection Positive +
0.96" OLED
- VDD connected to ESP32 Devkit V1 3V3
- GND connected to ESP32 Devkit V1 GND
- SDA connected to ESP32 Devkit V1 D21
- SCK connected to ESP32 Devkit V1 D22
USB Male 2 Pin Connection
USB Male 1
- Negative - connected to Voltage Sensor DC 25V gnd
- Positive + connected to Voltage Sensor DC 25V vcc
USB Male 2
- Negative - connected to Voltage Sensor DC 25V gnd
- Positive + connected to Voltage Sensor DC 25V vcc
USB Male 3
- Negative - connected to Voltage Sensor DC 25V gnd
- Positive + connected to Voltage Sensor DC 25V vcc
USB Male 4
- Negative - connected to Voltage Sensor DC 25V gnd
- Positive + connected to Voltage Sensor DC 25V vcc
USB Male 5
- Negative - connected to Voltage Sensor DC 25V gnd
- Positive + connected to Voltage Sensor DC 25V vcc
USB Female
- No specific connections detailed in the provided net list.
ESP32 Devkit V1
- 3V3 connected to 0.96" OLED VDD
- GND connected to 0.96" OLED GND, Pushbutton Pin 4 (out), Pushbutton Pin 2 (in), ACS712 Current Sensor GND
- D21 connected to 0.96" OLED SDA
- D22 connected to 0.96" OLED SCK
- VP connected to ACS712 Current Sensor OUT
- VN connected to Voltage Sensor DC 25V output
- D34 connected to Voltage Sensor DC 25V output
- D35 connected to ACS712 Current Sensor OUT
- D32 connected to Voltage Sensor DC 25V output
- D33 connected to ACS712 Current Sensor OUT
- D25 connected to Voltage Sensor DC 25V output
- D26 connected to ACS712 Current Sensor OUT
- D27 connected to ACS712 Current Sensor OUT
- D14 connected to Voltage Sensor DC 25V output
- D12 connected to Pushbutton Pin 3 (out)
- D13 connected to Pushbutton Pin 1 (in)
- VIN connected to ACS712 Current Sensor VCC
Documented Code
ESP32 Devkit V1 Code
#include "secrets.h"
#include <WiFiClientSecure.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <time.h>
// Display settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
// Button pins
#define DOWN_BUTTON 12
#define SELECT_BUTTON 13
// Sensor pins
#define VOLTAGE_SENSOR_PIN 34
#define ACS_PIN 35
#define REF_VOLTAGE 3.3
#define ADC_RESOLUTION 4096.0
// Voltage sensor resistors
#define R1 30000.0
#define R2 7500.0
const float FACTOR = 0.100;
const float ADC_SCALE = 4095.0;
const float VCC = 4.0;
const int SAMPLES = 100;
// WiFi credentials
const char* ssid = "wifiname";
const char* password = "wifipassword";
// NTP server and time offset
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 19800; // GMT +5:30 for IST
// Screen state
enum ScreenState {
HOME,
SETTINGS,
RESET_CONFIRM,
WIFI_SETUP,
CALIB