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:
54
poe-variant/BOM.csv
Normal file
54
poe-variant/BOM.csv
Normal 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"
|
||||||
|
109
poe-variant/DESIGN.md
Normal file
109
poe-variant/DESIGN.md
Normal 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
|
||||||
59
poe-variant/PIN_MAPPING.md
Normal file
59
poe-variant/PIN_MAPPING.md
Normal 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
12532
poe-variant/body-poe.stl
Normal file
File diff suppressed because it is too large
Load Diff
133
poe-variant/enclosure-poe.scad
Normal file
133
poe-variant/enclosure-poe.scad
Normal 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();
|
||||||
193
poe-variant/esphome-presence-sensor-poe.yaml
Normal file
193
poe-variant/esphome-presence-sensor-poe.yaml
Normal 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
2200
poe-variant/lid-poe.stl
Normal file
File diff suppressed because it is too large
Load Diff
2
poe-variant/lid_only_poe.scad
Normal file
2
poe-variant/lid_only_poe.scad
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
use <enclosure-poe.scad>;
|
||||||
|
lid();
|
||||||
Reference in New Issue
Block a user