Smart Relay Design Requirements

Assuming you mean LCSC: No, not all components are currently available/assigned from LCSC.
LCSC-available in current BOM
  • KF128-5.08-2P-AA terminals — LCSC stock shown
  • LMR16030SDDAR buck regulator — LCSC stock shown
  • ESP32-S3-WROOM-1U-N16R8 — LCSC stock shown
  • AP2112K-3.3TRG1 — LCSC stock shown
  • TPS2051CDBVR — LCSC stock shown, but wrong for requirement because it is 0.5 A class and USB host target is 1 A
  • STTH212S diode — LCSC stock shown
  • SMBJ30CA TVS — LCSC part metadata present
Not confirmed / not LCSC-ready
  • ISO6741 digital isolator — no LCSC SKU/stock shown
  • ISO1212 isolated DI receivers — no LCSC SKU/stock shown
  • ISOW1044 isolated CAN transceiver — no LCSC SKU/stock shown
  • AD7329 ADC — no LCSC SKU/stock shown
  • JQC-3F-1C-24VDC relay — no LCSC SKU/stock shown
  • USB4105-GF-A USB-C connector — LCSC stock shown as 0
  • ULN2003A — LCSC stock shown as 0 for current selected part
  • Generic resistors/capacitors/inductor — not assigned to specific LCSC MPNs yet
  • Solenoid FET Driver 3.3V blocks — not production BOM-ready as discrete LCSC parts
So the design is not yet LCSC/JLCPCB procurement-ready. Next step should be a sourcing pass to replace/assign LCSC-stocked MPNs for the unavailable ICs, relay, USB connector, passives, inductor, and 1 A USB power switch.
Run sourcing pass
Fix USB switch
Assign passives
Resolve production risks
Check relay options
U28
U1
J1
U3
U27
U29
DRV1
J1 CC2 - R9 P1
U2 VIN - C9 P1
U2 FB - R11 P1
U1 3V3 - U3 VOUT
U4 CANL - U24 2
U1 3V3 - U3 VOUT
U1 3V3 - U3 VOUT
VIN_24V_PROT
U29 Gate - U1 IO13
J1 D+ - D1 I/O1
U4 VISOOUT - U4 VSIN
U7 V_{DD} - C16 P1
U14 2 - U6 FGND2
U2 BOOT - C2 P1
U9 ~ - U27 PWR
U4 GND2 - U4 GISOIN
U30 ~{FLT} - U1 IO5
U12 2 - U5 FGND1
U5 OUT2 - U1 IO7
U12 2 - U5 FGND1
U1 IO45 - R6 P1
R18 P2 - U6 IN2
U11 ~ - U18 1
U12 1 - R11 P1
U8A OUTA - U7 SCLK
R19 P2 - U6 IN2
U14 2 - U6 FGND1
U1 EN - R4 P1
U8A V_{CC2} - U8A EN2
U27 Gate - U1 IO11
U10 ~ - U17 1
U1 3V3 - U3 VOUT
R11 P2 - U3 VIN
J2 1 - D1 1
U1 3V3 - U3 VOUT
U8A OUTB - U7 DIN
U8A OUTB - U7 DIN
U19 2 - U20 2
J1 D- - U1 IO19
U4 CANH - U24 1
R11 P2 - U3 VIN
U1 3V3 - U3 VOUT
K1 ~ - U15 2
U11 ~ - U31 4C
U30 ~{FLT} - U1 IO5
U4 CANH - U24 1
U9 ~ - U16 1
U30 EN(EN#) - U1 IO4
R11 P2 - U5 SENSE1
U4 VISOIN - C23 P1
U1 3V3 - U3 VOUT
U14 2 - U6 FGND2
U12 1 - R17 P1
U21 1 - R22 P1
U4 VISOOUT - U4 VSIN
U2 SW - L1 P1
R20 P2 - U7 V_{IN}0
U19 2 - U20 2
K1 ~ - U9 ~
R15 P2 - U6 SENSE1
U1 IO9 - U31 2B
U1 IO46 - R7 P1
U5 OUT1 - U1 IO6
U14 2 - U6 FGND1
K1 ~ - U16 2
U14 1 - R19 P1
U4 GND2 - U4 GISOIN
U14 1 - R15 P1
U2 FB - R11 P1
K1 ~ - U16 2
U8A OUTC - U7 ~{CS}
U6 OUT1 - U1 IO8
U12 2 - U5 FGND1
U19 2 - U20 2
R11 P2 - U3 VIN
U1 IO11 - U31 4B
U7 AGND - C15 P2
U1 IO0 - R5 P1
U3 EN - C11 P1
R11 P2 - U3 VIN
U20 1 - R21 P1
R15 P2 - U6 SENSE1
U1 3V3 - U3 VOUT
K1 ~ - U16 2
K1 ~ - U9 ~
U1 3V3 - U3 VOUT
U1 IO14 - U8A INC
J1 D+ - U1 IO20
U9 ~ - U16 1
U7 MUX_{OUT}+ - U7 ADC_{IN}+
U15 1 - R17 P1
U4 CANL - U24 2
U4 CANL - U24 2
U11 ~ - U18 1
U9 ~ - U16 2
U4 GISOIN - C23 P2
U13 1 - R18 P1
R11 P2 - U3 VIN
U2 BOOT - C10 P1
J1 CC1 - R8 P1
R13 P2 - U5 SENSE2
U13 2 - U6 FGND1
R11 P2 - U5 SENSE1
U2 FB - R29 P1
U1 3V3 - U3 VOUT
U11 ~ - U29 PWR
R11 P2 - U5 SENSE1
R13 P2 - U5 SENSE2
R17 P2 - U5 IN2
U30 ~{FLT} - U1 IO5
U1 IO10 - U31 3B
R16 P2 - U6 IN1
U21 1 - R22 P1
U19 2 - U20 2
U2 SW - C10 P2
J1 CC2 - R9 P1
U1 IO13 - U8A INB
R18 P2 - U6 IN2
K1 ~ - U15 1
K1 ~ - U16 2
U9 ~ - U16 2
U1 IO45 - R6 P1
U7 V_{DD} - C16 P1
R11 P2 - U3 VIN
U30 EN(EN#) - U1 IO4
U1 IO12 - U8A INA
U8A OUTA - U7 SCLK
U10 ~ - U17 2
U2 SW - C10 P2
U12 2 - U5 FGND1
R11 P2 - U3 VIN
J2 1 - D1 1
U4 VISOIN - C23 P1
U6 OUT2 - U1 IO9
K1 ~ - U16 2
R11 P2 - U3 VIN
U4 GISOIN - C14 P2
K1 ~ - U9 ~
R11 P2 - U5 SENSE1
U15 1 - R17 P1
U19 2 - U20 2
U31 COMPO - K1 ~
U13 2 - U6 FGND1
U22 1 - R23 P1
R20 P2 - U7 V_{IN}0
U7 MUX_{OUT}+ - U7 ADC_{IN}+
R17 P2 - U6 SENSE2
U7 REF_{IN/OUT} - C16 P2
U6 OUT1 - U1 IO8
U3 EN - C11 P1
U2 BOOT - C2 P1
U19 2 - U20 2
R19 P2 - U6 IN2
U19 2 - U20 2
R10 P2 - U4 VIO
U2 SW - L1 P1
U14 1 - R19 P1
U1 IO0 - R5 P1
R12 P2 - U5 IN1
K1 ~ - U16 2
R14 P2 - U5 IN2
U1 3V3 - U3 VOUT
K1 ~ - DRV1 PWR
U1 3V3 - U3 VOUT
U15 1 - R17 P1
U9 ~ - U31 2C
U9 ~ - U27 PWR
U5 OUT1 - U1 IO6
U2 FB - R29 P1
K1 ~ - U16 2
U13 1 - R18 P1
R10 P2 - U4 VIO
K1 ~ - U16 2
R16 P2 - U6 IN1
U1 3V3 - U3 VOUT
U1 3V3 - U3 VOUT
U15 1 - R17 P1
U10 ~ - U28 PWR
R18 P2 - U6 IN1
U4 RXD - U1 IO18
U4 GND2 - U4 GISOIN
U10 ~ - U28 PWR
R21 P2 - U7 V_{IN}1
U15 1 - R17 P1
U1 3V3 - U3 VOUT
R17 P2 - U6 SENSE2
U15 1 - R17 P1
U7 AGND - C15 P2
U10 ~ - U17 2
U27 Gate - U1 IO11
U11 ~ - U29 PWR
U6 OUT2 - U1 IO9
U10 ~ - U31 3C
U1 EN - R4 P1
U1 3V3 - U3 VOUT
U14 2 - U6 FGND1
J1 VBUS - U30 OUT
U20 1 - R21 P1
U7 REF_{IN/OUT} - C16 P2
J1 VBUS - U30 OUT
DRV1 Gate - U1 IO10
U28 Gate - U1 IO12
U2 SSorPGOOD - C3 P1
U2 SW - L1 P1
U12 1 - R11 P1
U1 3V3 - U3 VOUT
K1 ~ - DRV1 PWR
U12 2 - U5 FGND2
U4 RXD - U1 IO18
U4 TXD - U1 IO17
U2 FB - R11 P1
U13 1 - R13 P1
U19 1 - R20 P1
K1 ~ - U15 2
K1 ~ - U16 2
U11 ~ - U18 2
U1 IO8 - U31 1B
R13 P2 - U5 SENSE2
U7 DOUT - U8A IND
U1 3V3 - U3 VOUT
R17 P2 - U5 IN2
U2 FB - R29 P1
U12 2 - U5 FGND1
U4 GISOIN - C23 P2
K1 ~ - U16 2
U4 TXD - U1 IO17
U14 2 - U6 FGND1
J1 D+ - U1 IO20
U28 Gate - U1 IO12
R11 P2 - U3 VIN
R21 P2 - U7 V_{IN}1
R15 P2 - U6 SENSE1
R12 P2 - U5 IN1
U2 VIN - C9 P1
U8A V_{CC2} - U8A EN2
U22 1 - R23 P1
U12 2 - U5 FGND1
U5 OUT2 - U1 IO7
U1 IO14 - U8A INC
U2 RT/SYNC - R3 P1
U22 1 - R23 P1
U7 DOUT - U8A IND
U10 ~ - U17 1
U4 CANH - U24 1
U8A V_{CC2} - U8A EN2
U21 1 - R22 P1
R17 P2 - U6 SENSE2
K1 ~ - U15 1
J1 D- - U1 IO19
U1 3V3 - U3 VOUT
U14 2 - U6 FGND1
R18 P2 - U6 IN1
U13 1 - R13 P1
K1 ~ - U9 ~
R15 P2 - U6 SENSE1
U15 1 - R17 P1
U12 2 - U5 FGND2
CAN_NC_PLACEHOLDER
U8A OUTC - U7 ~{CS}
U12 1 - R17 P1
J1 CC1 - R8 P1
U1 EN - R4 P1
U2 RT/SYNC - R3 P1
J2 1 - D1 1
U8A OUTD - U1 IO15
R11 P2 - U3 VIN
R14 P2 - U5 IN2
K1 ~ - U31 1C
U14 2 - U6 FGND1
J2 1 - D1 1
U1 IO46 - R7 P1
U2 SSorPGOOD - C3 P1
U2 SW - L1 P1
U8A V_{CC2} - U8A EN2
U11 ~ - U18 2
U11 ~ - U31 4C
U8A OUTD - U1 IO15
DRV1 Gate - U1 IO10
U2 BOOT - C10 P1
U1 3V3 - U3 VOUT
R17 P2 - U6 SENSE2
U8A V_{CC2} - U8A EN2
U29 Gate - U1 IO13
K1 ~ - U16 2
U14 1 - R15 P1
U15 1 - R17 P1
U15 1 - R17 P1
U15 1 - R17 P1
R13 P2 - U5 SENSE2
U2 EP - U3 GND
U24
R2 P2 - C3 P2
C22
Capacitance
100nF
J2 2 - D1 2
C12
Capacitance
Capacitance
GND
C21
Capacitance
100nF
GND
C7
Capacitance
100nF
U4 GND1 - C22 P2
R2 P2 - C3 P2
U2 EP - U3 GND
C13
Capacitance
Capacitance
U2 EP - U3 GND
C23
Capacitance
100nF
U1 GND - C6 P2
C2
Capacitance
100nF
R6 P2 - R7 P2
U6 GND1 - C12 P2
C5 P2 - U1 GND
U26
U25
U30 GND - C8 P2
C3
Capacitance
100nF
C5
Capacitance
100nF
U1 GND - U1 GND
R6 P2 - R7 P2
U1 GND - U1 GND
U1 GND - C6 P2
GND
U1 GND - C12 P2
R2 P2 - C3 P2
U5 GND1 - C9 P2
U1 GND - C6 P2
U18
U1 GND - C12 P2
C16
Capacitance
Capacitance
C9
Capacitance
Capacitance
U19
U13
U30 GND - C8 P2
R6 P2 - R7 P2
R2 P2 - C3 P2
U12
U6 GND1 - C12 P2
U1 GND - C12 P2
C5 P2 - U1 GND
U4 GND1 - C22 P2
U14
U1 GND - C12 P2
U2 EP - C21 P2
C10
Capacitance
Capacitance
J2 2 - D1 2
C11
Capacitance
Capacitance
C17
Capacitance
Capacitance
R6 P2 - R7 P2
U4 GND1 - C22 P2
C20
Capacitance
Capacitance
U2 EP - C21 P2
C8
Capacitance
100nF
U5 GND1 - U6 GND1
C18
Capacitance
Capacitance
GND
J2
R6 P2 - R7 P2
U1 GND - C12 P2
C24
Capacitance
100nF
U5 GND1 - C9 P2
U2 EP - C21 P2
U22
C5 P2 - U1 GND
J2 2 - D1 2
C19
Capacitance
Capacitance
U1 GND - U1 GND
C14
Capacitance
Capacitance
U17
C15
Capacitance
Capacitance
U16
GND
C1
Capacitance
100nF
C6
Capacitance
100nF
GND
C4
Capacitance
100nF
U15
U20
U2 EP - C21 P2
U21
U1 GND - U1 GND
U2 EP - U3 GND
R2 P2 - C3 P2
U23
U30 GND - C8 P2
R26
Resistance
500 Ω
R27
Resistance
500 Ω
R25
Resistance
500 Ω
R2
Resistance
10kΩ
U2
R13
Resistance
5.1 kΩ
R32
Resistance
10kΩ
R33
Resistance
10kΩ
R31
Resistance
10kΩ
U8A
R23
Resistance
249 Ω
R15
Resistance
10 kΩ
R12
Resistance
17.8 kΩ
R5
Resistance
10kΩ
U5
R3
Resistance
10kΩ
U6
R28
Resistance
500 Ω
R30
Resistance
10kΩ
R18
Resistance
200 Ω
R21
Resistance
500 Ω
R11
Resistance
100 kΩ
R22
Resistance
249 Ω
R14
Resistance
5.1 kΩ
R4
Resistance
10kΩ
R16
Resistance
200 Ω
R8
Resistance
10kΩ
R6
Resistance
10kΩ
R24
Resistance
500 Ω
R29
Resistance
10kΩ
R19
Resistance
200 Ω
R17
Resistance
200 Ω
R20
Resistance
500 Ω
R7
Resistance
10kΩ
R10
Resistance
10kΩ
R9
Resistance
10kΩ
U10
U7
D1
U30
K1
U11
L1
Inductance
8.2uH
D2
U9
U4
U31

Refine this doc
Ask about this doc
Firmware Starter — ESP32-S3 Smart Relay
Platform
  • Framework: Arduino on PlatformIO
  • MCU: ESP32-S3-WROOM-1U-N16R8
Pin Mapping

Table


FunctionGPIO
USB D-GPIO19
USB D+GPIO20
CAN TXGPIO17
CAN RXGPIO18
DI1..DI4GPIO4, GPIO5, GPIO6, GPIO7
DO1..DO4 relay driversGPIO8, GPIO9, GPIO10, GPIO11
ADC SPI SCLK/MOSI/CS/MISOGPIO12, GPIO13, GPIO14, GPIO15
platformio.ini

Ini


[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
build_flags =
  -DARDUINO_USB_MODE=1
  -DARDUINO_USB_CDC_ON_BOOT=1
src/main.cpp

Cpp


#include <Arduino.h>
#include <SPI.h>

#define PIN_DI1 4
#define PIN_DI2 5
#define PIN_DI3 6
#define PIN_DI4 7
#define PIN_DO1 8
#define PIN_DO2 9
#define PIN_DO3 10
#define PIN_DO4 11
#define PIN_AI_SCLK 12
#define PIN_AI_MOSI 13
#define PIN_AI_CS 14
#define PIN_AI_MISO 15
#define PIN_CAN_TX 17
#define PIN_CAN_RX 18

SPIClass aiSpi(FSPI);

static uint16_t readAd7329Raw(uint8_t channel) {
  uint16_t command = 0x8000 | ((channel & 0x07) << 10);
  digitalWrite(PIN_AI_CS, LOW);
  uint16_t result = aiSpi.transfer16(command);
  digitalWrite(PIN_AI_CS, HIGH);
  return result & 0x0FFF;
}

static void setRelay(uint8_t index, bool on) {
  const uint8_t pins[] = {PIN_DO1, PIN_DO2, PIN_DO3, PIN_DO4};
  if (index < 4) digitalWrite(pins[index], on ? HIGH : LOW);
}

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("ESP32-S3 Smart Relay starting");

  pinMode(PIN_DI1, INPUT);
  pinMode(PIN_DI2, INPUT);
  pinMode(PIN_DI3, INPUT);
  pinMode(PIN_DI4, INPUT);

  pinMode(PIN_DO1, OUTPUT);
  pinMode(PIN_DO2, OUTPUT);
  pinMode(PIN_DO3, OUTPUT);
  pinMode(PIN_DO4, OUTPUT);
  setRelay(0, false); setRelay(1, false); setRelay(2, false); setRelay(3, false);

  pinMode(PIN_AI_CS, OUTPUT);
  digitalWrite(PIN_AI_CS, HIGH);
  aiSpi.begin(PIN_AI_SCLK, PIN_AI_MISO, PIN_AI_MOSI, PIN_AI_CS);
}

void loop() {
  bool di[4] = {digitalRead(PIN_DI1), digitalRead(PIN_DI2), digitalRead(PIN_DI3), digitalRead(PIN_DI4)};
  for (int i = 0; i < 4; ++i) setRelay(i, di[i]);

  uint16_t ai0 = readAd7329Raw(0);
  uint16_t ai1 = readAd7329Raw(1);
  uint16_t ai2 = readAd7329Raw(2);
  uint16_t ai3 = readAd7329Raw(3);

  Serial.printf("DI=%d%d%d%d AI=%u,%u,%u,%u\n", di[0], di[1], di[2], di[3], ai0, ai1, ai2, ai3);
  delay(100);
}
Notes
  • Relay GPIOs drive ULN2003A inputs; HIGH energizes the corresponding relay coil.
  • ADC scaling/calibration constants must be finalized after the analog front-end protection/divider BOM is locked.
  • CAN driver setup should be added after the final ESP32 TWAI/CAN stack choice is selected.
  • Platform

  • Pin Mapping

  • platformio.ini

  • src/main.cpp

  • Notes

smart relay

smart relay thumbnail
Smart relay based on ESP32-S3 with CAN bus module extension capability

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Arrow

$2.61–$4.49

Digi-Key

$6.88–$7.10

HQonline

$5.19–$5.50

LCSC

$10.93–$11.53

Mouser

$14.77

TME

$1.37

Verical

$1.26–$2.57

Controls