Add PoE variant with W5500 Ethernet and 802.3af power

- W5500 SPI Ethernet controller for wired connectivity
- Silvertel Ag9905MT PoE PD module (48V to 5V)
- RJ45 connector with integrated magnetics
- Higher camera resolution (1024x768 vs 800x600) using wired bandwidth
- WiFi fallback if Ethernet disconnected
- Separate BOM, pin mapping, ESPHome config
- 3D-printable enclosure (50x40mm, larger for RJ45)
This commit is contained in:
root
2026-03-29 13:00:07 -05:00
parent 0240020cd2
commit c131a97ac4
8 changed files with 15282 additions and 0 deletions

54
poe-variant/BOM.csv Normal file
View File

@@ -0,0 +1,54 @@
Reference,Value,Footprint,JLCPCB_Part,Quantity,Description,Unit_Price_Est
U3,ESP32-S3-WROOM-1-N16R8,RF_Module:ESP32-S3-WROOM-1,C2913202,1,WiFi+BLE MCU 16MB Flash 8MB PSRAM,$2.80
U2,AMS1117-3.3,Package_TO_SOT_SMD:SOT-223-3_TabPin2,C6186,1,3.3V LDO Regulator 1A,$0.08
U4,AP2112K-1.8,Package_TO_SOT_SMD:SOT-23-5,C51118,1,1.8V LDO camera DOVDD,$0.10
U5,AP2112K-2.8,Package_TO_SOT_SMD:SOT-23-5,C51114,1,2.8V LDO camera AVDD,$0.10
U6,SHT41,Sensirion_DFN-4-1EP_1.5x1.5mm,C2911456,1,Temp/Humidity I2C,$1.20
U7,BH1750FVI,Package_SO:WSOF-6_1.4x1.7mm,C78960,1,Ambient Light I2C,$0.50
U8,W5500,Package_QFP:LQFP-48_7x7mm_P0.5mm,C32843,1,SPI Ethernet Controller 10/100,$1.50
U9,Ag9905MT,Module:Silvertel_Ag9905MT,N/A,1,802.3af PoE PD Module 5V/2A,$6.00
J1,RJ45_PoE,Connector_RJ:RJ45_Amphenol_ARJM11C7,C911253,1,RJ45 with magnetics + PoE tabs,$1.20
J2,FPC_24P_OV5640,Connector_FFC-FPC:Molex_503480-2400,C2856805,1,24-pin 0.5mm FPC camera,$0.20
J3,LD2410C,Connector_PinHeader_1.27mm:PinHeader_1x05_P1.27mm,N/A,1,1.27mm header for LD2410C,$0.05
J4,AM312_PIR,Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm,N/A,1,2.54mm header for AM312,$0.03
Y1,25MHz,Oscillator_SMD:Crystal_SMD_3215-2Pin_3.2x1.5mm,C9002,1,25MHz crystal for W5500,$0.10
D1,LED_Blue,LED_SMD:LED_0402_1005Metric,C2286,1,Blue status LED,$0.02
D2,LED_Green,LED_SMD:LED_0402_1005Metric,C2286,1,Green Ethernet link LED,$0.02
D3,LED_Yellow,LED_SMD:LED_0402_1005Metric,C2286,1,Yellow Ethernet activity LED,$0.02
R1,1K,Resistor_SMD:R_0402_1005Metric,C11702,1,Status LED resistor,$0.01
R2,10K,Resistor_SMD:R_0402_1005Metric,C25744,1,PIR pulldown,$0.01
R3,4.7K,Resistor_SMD:R_0402_1005Metric,C25900,1,I2C SDA pull-up,$0.01
R4,4.7K,Resistor_SMD:R_0402_1005Metric,C25900,1,I2C SCL pull-up,$0.01
R5,12.1K,Resistor_SMD:R_0402_1005Metric,C25752,1,W5500 RES pin (sets modes),$0.01
R6,1K,Resistor_SMD:R_0402_1005Metric,C11702,1,Ethernet link LED,$0.01
R7,1K,Resistor_SMD:R_0402_1005Metric,C11702,1,Ethernet activity LED,$0.01
R8,10K,Resistor_SMD:R_0402_1005Metric,C25744,1,W5500 INT pull-up,$0.01
R9,10K,Resistor_SMD:R_0402_1005Metric,C25744,1,W5500 RST pull-up,$0.01
C1,10uF,Capacitor_SMD:C_0805_2012Metric,C15850,1,LDO input,$0.02
C2,22uF,Capacitor_SMD:C_0805_2012Metric,C45783,1,LDO output,$0.03
C3-C5,100nF,Capacitor_SMD:C_0402_1005Metric,C1525,3,ESP32 decoupling,$0.03
C6,10uF,Capacitor_SMD:C_0805_2012Metric,C15850,1,ESP32 bulk,$0.02
C7,10uF,Capacitor_SMD:C_0805_2012Metric,C15850,1,Camera power,$0.02
C8,100nF,Capacitor_SMD:C_0402_1005Metric,C1525,1,Camera decoupling,$0.01
C9,10uF,Capacitor_SMD:C_0805_2012Metric,C15850,1,LD2410C decoupling,$0.02
C10,100nF,Capacitor_SMD:C_0402_1005Metric,C1525,1,SHT41 decoupling,$0.01
C11,100nF,Capacitor_SMD:C_0402_1005Metric,C1525,1,BH1750 decoupling,$0.01
C12-C14,100nF,Capacitor_SMD:C_0402_1005Metric,C1525,3,W5500 decoupling,$0.03
C15,10uF,Capacitor_SMD:C_0805_2012Metric,C15850,1,W5500 bulk,$0.02
C16,22pF,Capacitor_SMD:C_0402_1005Metric,C1555,2,W5500 crystal load,$0.02
C17,10uF,Capacitor_SMD:C_0805_2012Metric,C15850,1,PoE module output,$0.02
C18,100uF,Capacitor_SMD:C_1206_3216Metric,C15008,1,PoE module bulk output,$0.05
SW1,BOOT,Button_Switch_SMD:SW_SPST_PTS810,C116501,1,Boot button,$0.05
SW2,RESET,Button_Switch_SMD:SW_SPST_PTS810,C116501,1,Reset button,$0.05
H1-H2,MountingHole,MountingHole:MountingHole_2.2mm_M2_Pad,N/A,2,M2 mounting,$0.00
,,,,,,
,,,MODULES (plug-in),,,,
MOD1,OV5640,Camera Module 5MP 120° wide-angle,N/A,1,24-pin FPC camera,$3.50
MOD2,HLK-LD2410C,24GHz mmWave Radar Module,N/A,1,Presence radar,$2.50
MOD3,AM312,Mini PIR Sensor Module,N/A,1,PIR sensor,$0.50
,,,,,,
,,,TOTAL PCB COMPONENTS,,~40,~$14.50
,,,TOTAL WITH MODULES,,~43,~$21.00
,,,PCB FABRICATION (5pcs),,,~$8.00
,,,SMD ASSEMBLY (per board),,,~$15.00
,,,TOTAL PER BOARD (assembled),,,"~$44.00"
1 Reference Value Footprint JLCPCB_Part Quantity Description Unit_Price_Est
2 U3 ESP32-S3-WROOM-1-N16R8 RF_Module:ESP32-S3-WROOM-1 C2913202 1 WiFi+BLE MCU 16MB Flash 8MB PSRAM $2.80
3 U2 AMS1117-3.3 Package_TO_SOT_SMD:SOT-223-3_TabPin2 C6186 1 3.3V LDO Regulator 1A $0.08
4 U4 AP2112K-1.8 Package_TO_SOT_SMD:SOT-23-5 C51118 1 1.8V LDO camera DOVDD $0.10
5 U5 AP2112K-2.8 Package_TO_SOT_SMD:SOT-23-5 C51114 1 2.8V LDO camera AVDD $0.10
6 U6 SHT41 Sensirion_DFN-4-1EP_1.5x1.5mm C2911456 1 Temp/Humidity I2C $1.20
7 U7 BH1750FVI Package_SO:WSOF-6_1.4x1.7mm C78960 1 Ambient Light I2C $0.50
8 U8 W5500 Package_QFP:LQFP-48_7x7mm_P0.5mm C32843 1 SPI Ethernet Controller 10/100 $1.50
9 U9 Ag9905MT Module:Silvertel_Ag9905MT N/A 1 802.3af PoE PD Module 5V/2A $6.00
10 J1 RJ45_PoE Connector_RJ:RJ45_Amphenol_ARJM11C7 C911253 1 RJ45 with magnetics + PoE tabs $1.20
11 J2 FPC_24P_OV5640 Connector_FFC-FPC:Molex_503480-2400 C2856805 1 24-pin 0.5mm FPC camera $0.20
12 J3 LD2410C Connector_PinHeader_1.27mm:PinHeader_1x05_P1.27mm N/A 1 1.27mm header for LD2410C $0.05
13 J4 AM312_PIR Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm N/A 1 2.54mm header for AM312 $0.03
14 Y1 25MHz Oscillator_SMD:Crystal_SMD_3215-2Pin_3.2x1.5mm C9002 1 25MHz crystal for W5500 $0.10
15 D1 LED_Blue LED_SMD:LED_0402_1005Metric C2286 1 Blue status LED $0.02
16 D2 LED_Green LED_SMD:LED_0402_1005Metric C2286 1 Green Ethernet link LED $0.02
17 D3 LED_Yellow LED_SMD:LED_0402_1005Metric C2286 1 Yellow Ethernet activity LED $0.02
18 R1 1K Resistor_SMD:R_0402_1005Metric C11702 1 Status LED resistor $0.01
19 R2 10K Resistor_SMD:R_0402_1005Metric C25744 1 PIR pulldown $0.01
20 R3 4.7K Resistor_SMD:R_0402_1005Metric C25900 1 I2C SDA pull-up $0.01
21 R4 4.7K Resistor_SMD:R_0402_1005Metric C25900 1 I2C SCL pull-up $0.01
22 R5 12.1K Resistor_SMD:R_0402_1005Metric C25752 1 W5500 RES pin (sets modes) $0.01
23 R6 1K Resistor_SMD:R_0402_1005Metric C11702 1 Ethernet link LED $0.01
24 R7 1K Resistor_SMD:R_0402_1005Metric C11702 1 Ethernet activity LED $0.01
25 R8 10K Resistor_SMD:R_0402_1005Metric C25744 1 W5500 INT pull-up $0.01
26 R9 10K Resistor_SMD:R_0402_1005Metric C25744 1 W5500 RST pull-up $0.01
27 C1 10uF Capacitor_SMD:C_0805_2012Metric C15850 1 LDO input $0.02
28 C2 22uF Capacitor_SMD:C_0805_2012Metric C45783 1 LDO output $0.03
29 C3-C5 100nF Capacitor_SMD:C_0402_1005Metric C1525 3 ESP32 decoupling $0.03
30 C6 10uF Capacitor_SMD:C_0805_2012Metric C15850 1 ESP32 bulk $0.02
31 C7 10uF Capacitor_SMD:C_0805_2012Metric C15850 1 Camera power $0.02
32 C8 100nF Capacitor_SMD:C_0402_1005Metric C1525 1 Camera decoupling $0.01
33 C9 10uF Capacitor_SMD:C_0805_2012Metric C15850 1 LD2410C decoupling $0.02
34 C10 100nF Capacitor_SMD:C_0402_1005Metric C1525 1 SHT41 decoupling $0.01
35 C11 100nF Capacitor_SMD:C_0402_1005Metric C1525 1 BH1750 decoupling $0.01
36 C12-C14 100nF Capacitor_SMD:C_0402_1005Metric C1525 3 W5500 decoupling $0.03
37 C15 10uF Capacitor_SMD:C_0805_2012Metric C15850 1 W5500 bulk $0.02
38 C16 22pF Capacitor_SMD:C_0402_1005Metric C1555 2 W5500 crystal load $0.02
39 C17 10uF Capacitor_SMD:C_0805_2012Metric C15850 1 PoE module output $0.02
40 C18 100uF Capacitor_SMD:C_1206_3216Metric C15008 1 PoE module bulk output $0.05
41 SW1 BOOT Button_Switch_SMD:SW_SPST_PTS810 C116501 1 Boot button $0.05
42 SW2 RESET Button_Switch_SMD:SW_SPST_PTS810 C116501 1 Reset button $0.05
43 H1-H2 MountingHole MountingHole:MountingHole_2.2mm_M2_Pad N/A 2 M2 mounting $0.00
44
45 MODULES (plug-in)
46 MOD1 OV5640 Camera Module 5MP 120° wide-angle N/A 1 24-pin FPC camera $3.50
47 MOD2 HLK-LD2410C 24GHz mmWave Radar Module N/A 1 Presence radar $2.50
48 MOD3 AM312 Mini PIR Sensor Module N/A 1 PIR sensor $0.50
49
50 TOTAL PCB COMPONENTS ~40 ~$14.50
51 TOTAL WITH MODULES ~43 ~$21.00
52 PCB FABRICATION (5pcs) ~$8.00
53 SMD ASSEMBLY (per board) ~$15.00
54 TOTAL PER BOARD (assembled) ~$44.00

109
poe-variant/DESIGN.md Normal file
View File

@@ -0,0 +1,109 @@
# Presence Sensor - PoE Variant
Same sensors as the USB-C version, but powered and networked via Power over Ethernet (802.3af).
## Key Differences from USB-C Version
| Feature | USB-C Version | PoE Version |
|---------|--------------|-------------|
| Power | USB-C 5V | 802.3af PoE (48V → 5V) |
| Network | WiFi only | Ethernet (wired) + WiFi fallback |
| Connector | USB-C | RJ45 |
| Extra chips | None | W5500 (Ethernet) + AG9905MT (PoE PD) |
| Board size | 45x35mm | 50x40mm (RJ45 is bulky) |
| Reliability | WiFi dependent | Wired, rock-solid |
| Cost | ~$32 | ~$42 |
## Why PoE is Better for Cameras
- **No WiFi congestion** - camera streams are bandwidth-heavy
- **Single cable** - power + data in one Ethernet run
- **More reliable** - no WiFi dropouts
- **Centralized power** - PoE switch manages all device power
- **Remote reboot** - cycle PoE port to hard-reset device
## New Components
### W5500 Ethernet Controller
- SPI interface to ESP32-S3
- 10/100 Mbps Ethernet
- Hardware TCP/IP stack (offloads ESP32)
- QFP-48 package (7x7mm)
- JLCPCB: C32843
### RJ45 with Integrated Magnetics + PoE
- HR911105A or equivalent
- Includes PoE center-tap connections
- Through-hole (adds height but very robust)
### PoE PD Module - Silvertel Ag9905MT
- IEEE 802.3af compliant (up to 13W)
- 48V input → 5V/2A output
- Tiny module: 16.5x14.5mm
- Isolated, protected
- Alternative: AG9905M-R or TI TPS2376 discrete
### 25MHz Crystal Oscillator
- Required by W5500
- 3.2x2.5mm SMD package
## GPIO Changes for PoE Variant
| GPIO | USB-C Version | PoE Version |
|------|--------------|-------------|
| GPIO19 | USB D- | **Free** (no USB) |
| GPIO20 | USB D+ | **Free** (no USB) |
| GPIO33 | Free | **W5500 SPI MISO** |
| GPIO34 | Free | **W5500 SPI MOSI** |
| GPIO35 | Free | **W5500 SPI SCK** |
| GPIO36 | Free | **W5500 SPI CS** |
| GPIO37 | Free | **W5500 INT** |
| GPIO42 | Free | **W5500 RST** |
Camera, mmWave, PIR, I2C sensors - all unchanged.
## Power Path
```
PoE Switch (48V)
RJ45 Connector (center-taps)
Ag9905MT PoE PD Module
│ (48V → 5V isolated)
5V Rail ──→ LD2410C (direct)
AMS1117-3.3
3.3V Rail ──→ ESP32-S3, W5500, sensors, camera LDOs
```
## Power Budget (PoE)
| Component | Voltage | Current |
|-----------|---------|---------|
| ESP32-S3 | 3.3V | 240mA |
| W5500 | 3.3V | 132mA |
| OV5640 | 2.8V+1.8V | 140mA |
| LD2410C | 5V | 60mA |
| AM312 + SHT41 + BH1750 | 3.3V | 3mA |
| Ag9905MT overhead | - | ~50mA |
| **Total from PoE** | 48V | **~180mA @ 48V (~8.6W)** |
Well within 802.3af's 12.95W limit.
## Board Layout Notes
- RJ45 connector at bottom (cable exits down for wall mount)
- Ag9905MT module near RJ45 (short high-voltage traces)
- W5500 between RJ45 and ESP32 (short SPI traces)
- Camera at top (unchanged)
- mmWave on right (unchanged)
- PIR on left (unchanged)
- Sensors on left edge (unchanged)
- Board slightly larger: 50x40mm to accommodate RJ45 jack height

View File

@@ -0,0 +1,59 @@
# ESP32-S3 Pin Mapping - PoE Presence Sensor
## GPIO Assignments
| GPIO | Function | Peripheral | Direction | Notes |
|------|----------|-----------|-----------|-------|
| GPIO0 | BOOT button | - | Input | Pull-up, hold low for bootloader |
| GPIO1 | Camera D0 | OV5640 DVP | Input | Camera data bus |
| GPIO2 | Camera D1 | OV5640 DVP | Input | Camera data bus |
| GPIO3 | I2C SDA | SHT41 + BH1750 | Bidir | 4.7K pull-up |
| GPIO4 | I2C SCL | SHT41 + BH1750 | Bidir | 4.7K pull-up |
| GPIO5 | Camera D2 | OV5640 DVP | Input | Camera data bus |
| GPIO6 | Camera D3 | OV5640 DVP | Input | Camera data bus |
| GPIO7 | Camera D4 | OV5640 DVP | Input | Camera data bus |
| GPIO8 | Camera D5 | OV5640 DVP | Input | Camera data bus |
| GPIO9 | Camera D6 | OV5640 DVP | Input | Camera data bus |
| GPIO10 | Camera D7 | OV5640 DVP | Input | Camera data bus |
| GPIO11 | Camera XCLK | OV5640 | Output | 20MHz LEDC |
| GPIO12 | Camera PCLK | OV5640 | Input | Pixel clock |
| GPIO13 | Camera VSYNC | OV5640 | Input | Vertical sync |
| GPIO14 | Camera HREF | OV5640 | Input | Horizontal ref |
| GPIO15 | Camera SIOD | OV5640 SCCB | Bidir | Camera I2C data |
| GPIO16 | Camera SIOC | OV5640 SCCB | Output | Camera I2C clock |
| GPIO17 | mmWave UART TX | LD2410C RX | Output | 256000 baud |
| GPIO18 | mmWave UART RX | LD2410C TX | Input | 256000 baud |
| GPIO19 | Free | - | - | (was USB D-) |
| GPIO20 | Free | - | - | (was USB D+) |
| GPIO21 | Camera PWDN | OV5640 | Output | Power down |
| GPIO33 | W5500 SPI MISO | Ethernet | Input | SPI data in |
| GPIO34 | W5500 SPI MOSI | Ethernet | Output | SPI data out |
| GPIO35 | W5500 SPI SCK | Ethernet | Output | SPI clock (25MHz max) |
| GPIO36 | W5500 SPI CS | Ethernet | Output | SPI chip select |
| GPIO37 | W5500 INT | Ethernet | Input | Interrupt (active low) |
| GPIO38 | PIR output | AM312 | Input | Motion detect |
| GPIO39 | mmWave OUT | LD2410C | Input | Presence output |
| GPIO40 | Status LED | Blue LED | Output | Via 1K resistor |
| GPIO41 | Camera RESET | OV5640 | Output | Active low |
| GPIO42 | W5500 RST | Ethernet | Output | Active low |
## SPI Bus (GPIO33-36) - W5500 Ethernet
| Signal | GPIO | W5500 Pin |
|--------|------|-----------|
| MISO | GPIO33 | SO |
| MOSI | GPIO34 | SI |
| SCK | GPIO35 | SCLK |
| CS | GPIO36 | SCSn |
| INT | GPIO37 | INTn |
| RST | GPIO42 | RSTn |
## I2C Bus (GPIO3/GPIO4) - Sensors
| Device | Address | Function |
|--------|---------|----------|
| SHT41 | 0x44 | Temperature + Humidity |
| BH1750 | 0x23 | Ambient Light |
## UART1 (GPIO17/GPIO18) - Radar
| Device | Baud | Function |
|--------|------|----------|
| LD2410C | 256000 | mmWave presence |

12532
poe-variant/body-poe.stl Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,133 @@
// ============================================
// Presence Sensor PoE - Wall-Mount Enclosure
// Board: 50 x 40 mm (larger for RJ45 + PoE module)
// ============================================
pcb_w = 50;
pcb_h = 40;
pcb_t = 1.6;
wall = 1.8;
tolerance = 0.3;
bottom_gap = 3;
top_gap = 14; // Extra height for RJ45 jack
lid_lip = 1.5;
inner_w = pcb_w + tolerance * 2;
inner_h = pcb_h + tolerance * 2;
inner_d = bottom_gap + pcb_t + top_gap;
outer_w = inner_w + wall * 2;
outer_h = inner_h + wall * 2;
outer_d = inner_d + wall;
post_d = 4.5;
screw_d = 2.2;
post_h = bottom_gap;
// Component windows
cam_hole_w = 10;
cam_hole_h = 10;
pir_hole_d = 10;
light_hole_d = 4;
rj45_w = 16;
rj45_h = 14;
module rounded_box(w, h, d, r) {
hull() {
translate([r, r, 0]) cylinder(h=d, r=r, $fn=20);
translate([w-r, r, 0]) cylinder(h=d, r=r, $fn=20);
translate([r, h-r, 0]) cylinder(h=d, r=r, $fn=20);
translate([w-r, h-r, 0]) cylinder(h=d, r=r, $fn=20);
}
}
module wall_mount_keyhole() {
cylinder(h=wall+2, d=7, $fn=24);
translate([0, -5, 0])
hull() {
cylinder(h=wall+2, d=4, $fn=24);
translate([0, 5, 0]) cylinder(h=wall+2, d=4, $fn=24);
}
}
module body() {
difference() {
rounded_box(outer_w, outer_h, outer_d, 3);
translate([wall, wall, wall])
rounded_box(inner_w, inner_h, inner_d + 1, 2);
// Camera window (top center)
translate([wall + tolerance + pcb_w/2 - cam_hole_w/2,
wall + tolerance + pcb_h - 7,
-1])
rounded_box(cam_hole_w, cam_hole_h, wall + 2, 2);
// PIR window (left)
translate([wall + tolerance + 12,
wall + tolerance + pcb_h - 22,
-1])
cylinder(h=wall+2, d=pir_hole_d, $fn=32);
// Light sensor window
translate([wall + tolerance + 24,
wall + tolerance + pcb_h - 22,
-1])
cylinder(h=wall+2, d=light_hole_d, $fn=32);
// RJ45 cutout (bottom edge)
translate([wall + tolerance + pcb_w/2 - rj45_w/2,
-1,
wall + bottom_gap - 1])
cube([rj45_w, wall + 2, rj45_h]);
// Ventilation slots (sides)
for (i = [0:3]) {
translate([-1, wall + 5 + i * 10, wall + bottom_gap + pcb_t + 2])
cube([wall + 2, 8, 1.5]);
translate([outer_w - wall - 1, wall + 5 + i * 10, wall + bottom_gap + pcb_t + 2])
cube([wall + 2, 8, 1.5]);
}
// mmWave slot (back)
translate([wall + tolerance + pcb_w - 10,
wall + tolerance + 5,
outer_d - wall - 0.5])
rounded_box(8, 36, wall + 1, 1);
// Wall mount keyholes (back)
translate([outer_w/2, outer_h * 0.3, outer_d - wall - 1])
wall_mount_keyhole();
translate([outer_w/2, outer_h * 0.7, outer_d - wall - 1])
wall_mount_keyhole();
}
// PCB support posts
for (pos = [[wall + tolerance + 2.5, wall + tolerance + 2.5],
[wall + tolerance + pcb_w - 2.5, wall + tolerance + 2.5],
[wall + tolerance + 2.5, wall + tolerance + pcb_h - 2.5],
[wall + tolerance + pcb_w - 2.5, wall + tolerance + pcb_h - 2.5]]) {
translate([pos[0], pos[1], wall])
difference() {
cylinder(h=post_h, d=post_d, $fn=20);
cylinder(h=post_h + 1, d=screw_d, $fn=20);
}
}
}
module lid() {
difference() {
union() {
rounded_box(outer_w, outer_h, wall, 3);
translate([wall - lid_lip/2, wall - lid_lip/2, wall])
rounded_box(inner_w + lid_lip, inner_h + lid_lip, 2, 2);
}
// LED windows
translate([wall + tolerance + 42, wall + tolerance + 30, -1])
cylinder(h=wall+2, d=2, $fn=16);
translate([wall + tolerance + 44, wall + tolerance + 30, -1])
cylinder(h=wall+2, d=2, $fn=16);
}
}
// Render
body();
translate([outer_w + 10, 0, 0]) lid();

View File

@@ -0,0 +1,193 @@
substitutions:
name: presence-sensor-poe
friendly_name: Presence Sensor PoE
esphome:
name: ${name}
friendly_name: ${friendly_name}
platformio_options:
board_build.flash_mode: dio
board_build.arduino.memory_type: qio_opi
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
flash_size: 16MB
psram:
mode: octal
speed: 80MHz
logger:
level: INFO
api:
encryption:
key: !secret api_key
ota:
- platform: esphome
password: !secret ota_password
# ==========================================
# ETHERNET - W5500 SPI (primary network)
# ==========================================
ethernet:
type: W5500
clk_pin: GPIO35
mosi_pin: GPIO34
miso_pin: GPIO33
cs_pin: GPIO36
interrupt_pin: GPIO37
reset_pin: GPIO42
clock_speed: 25MHz
# WiFi as fallback only (if Ethernet cable disconnected)
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "${name}-fallback"
password: !secret fallback_password
# ==========================================
# I2C Bus - SHT41 + BH1750
# ==========================================
i2c:
sda: GPIO3
scl: GPIO4
scan: true
frequency: 400kHz
# ==========================================
# UART - LD2410C mmWave Radar
# ==========================================
uart:
id: uart_ld2410
tx_pin: GPIO17
rx_pin: GPIO18
baud_rate: 256000
parity: NONE
stop_bits: 1
# ==========================================
# Camera - OV5640 5MP
# ==========================================
esp32_camera:
name: Camera
external_clock:
pin: GPIO11
frequency: 20MHz
i2c_pins:
sda: GPIO15
scl: GPIO16
data_pins: [GPIO1, GPIO2, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10]
vsync_pin: GPIO13
href_pin: GPIO14
pixel_clock_pin: GPIO12
power_down_pin: GPIO21
reset_pin: GPIO41
# PoE = wired = more bandwidth, can push higher quality
resolution: 1024x768
max_framerate: 15fps
idle_framerate: 0.5fps
jpeg_quality: 10
vertical_flip: false
horizontal_mirror: false
esp32_camera_web_server:
- port: 8080
mode: stream
# ==========================================
# LD2410C mmWave Presence Radar
# ==========================================
ld2410:
uart_id: uart_ld2410
id: ld2410_radar
binary_sensor:
- platform: ld2410
has_target:
name: Presence
id: ld2410_presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
- platform: gpio
pin:
number: GPIO38
mode: INPUT
name: Motion
id: pir_motion
device_class: motion
filters:
- delayed_off: 10s
- platform: template
name: Occupancy
device_class: occupancy
lambda: |-
if (id(pir_motion).state || id(ld2410_presence).state) {
return true;
}
return false;
filters:
- delayed_off: 30s
sensor:
- platform: ld2410
moving_distance:
name: Moving Distance
still_distance:
name: Still Distance
moving_energy:
name: Moving Energy
still_energy:
name: Still Energy
detection_distance:
name: Detection Distance
- platform: sht4x
temperature:
name: Temperature
accuracy_decimals: 1
filters:
- offset: -1.5
humidity:
name: Humidity
accuracy_decimals: 1
address: 0x44
update_interval: 30s
heater_max_duty: 0.0
- platform: bh1750
name: Illuminance
address: 0x23
measurement_duration: 69
update_interval: 10s
- platform: uptime
name: Uptime
light:
- platform: status_led
name: Status LED
pin: GPIO40
button:
- platform: restart
name: Restart
- platform: factory_reset
name: Factory Reset
disabled_by_default: true
text_sensor:
- platform: ethernet_info
ip_address:
name: IP Address
- platform: version
name: ESPHome Version

2200
poe-variant/lid-poe.stl Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
use <enclosure-poe.scad>;
lid();