Skip to the content
PCBKitNew board
2 layers146 × 110 mmDrop ceiling smd, the printed circuit board in 3D

An 8-channel ArtNet to 0-10V converter for controlling drop ceiling lighting fixtures. Receives DMX values (0-255) over wired Ethernet using the ArtNet protocol and outputs corresponding 0-10V analog control voltages.

Size
146 × 110 mm
Copper layers
2
Thickness
1.6 mm
Parts
81
Nets
94
Pads
268
Tracks, vias
424, 154
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
8 Apr 2026
Updated
30 Apr 2026

Overview

Drop ceiling smd is an open-source printed circuit board by npuckett, from the npuckett/Drop-Ceiling-Controller repository on GitHub. It is a 2-layer board of 146 × 110 mm with 81 parts on 94 nets, routed with 424 tracks and 154 vias.

It is built around the AP63205WU. Its parts include 28 resistors, 19 capacitors, 10 connectors, 9 diodes and 4 ICs.

Main components

1

README

README.md

Drop Ceiling Controller

An 8-channel ArtNet to 0-10V converter for controlling drop ceiling lighting fixtures. Receives DMX values (0-255) over wired Ethernet using the ArtNet protocol and outputs corresponding 0-10V analog control voltages.

How It Works

text
ArtNet Controller (Python)
        |
        | UDP / ArtNet (port 6454)
        |
   Wired Ethernet
        |
  ESP32-S3 Feather
        |
        | I2C
        |
    DAC6578 (8-ch)
        |
        | 0-5V scaled to 0-10V via op amps
        |
   Lighting Fixtures (8 channels)

ArtNet Protocol

ArtNet is a protocol for transmitting DMX512 lighting data over Ethernet using UDP on port 6454. This project uses three ArtNet packet types:

ArtDmx (Opcode 0x5000)

Carries DMX channel data from the controller to the ESP32.

OffsetSizeFieldValue
08HeaderArt-Net\0
82Opcode (little-endian)0x5000
102Protocol Version (big-endian)0x000E (14)
121Sequence1-255 (rolling)
131Physical Port0x00
142Universe (little-endian)0x0000 (Universe 0)
162Data Length (big-endian)0x0008 (8 bytes)
188DMX DataCH1-CH8 values (0-255)
ArtPoll (Opcode 0x2000)

Broadcast by the Python controller to discover nodes on the network.

OffsetSizeFieldValue
08HeaderArt-Net\0
82Opcode (little-endian)0x2000
102Protocol Version (big-endian)0x000E (14)
121TalkToMe0x00
131Priority0x00
ArtPollReply (Opcode 0x2100)

Sent by the ESP32 in response to an ArtPoll. Key fields:

OffsetSizeFieldValue
08HeaderArt-Net\0
82Opcode (little-endian)0x2100
104IP AddressNode IP (e.g. 192.168.1.200)
142Port (little-endian)6454
162Firmware Version1.0
181Net0x00
191Sub0x00
2618Short NameDropCeiling
4464Long NameDrop Ceiling 0-10V Controller
1731Num Ports1
1741Port Type0x80 (output, DMX512)
1901SwOut0x00 (Universe 0)

Total packet size: 239 bytes. Broadcast on the local subnet.

Signal Flow

  1. The Python controller sends ArtDmx packets containing 8 channel values
  2. The ESP32 receives the packet over its WIZ5500 Ethernet FeatherWing
  3. DMX values (0-255) are mapped to 10-bit DAC values (0-1023)
  4. The DAC6578 outputs 0-5V per channel
  5. Op amp circuits scale the output to 0-10V

Hardware

ComponentPartConnection
MicrocontrollerAdafruit ESP32-S3 TFT Feather--
EthernetAdafruit Ethernet FeatherWing (WIZ5500)SPI via Feather Doubler
DACAdafruit DAC6578 (10-bit, 8-channel)I2C via STEMMA QT
Voltage scalingOp amp circuit (0-5V to 0-10V)DAC outputs

The ESP32-S3 TFT Feather has a built-in 240x135 TFT display that shows:

  • Current IP address and ArtNet universe
  • Connection status (LIVE / NO SIG)
  • Real-time bar graph of all 8 channel levels

Network Configuration

The firmware defaults to DHCP. If no DHCP server is available (common with a direct USB Ethernet adapter connection), it falls back to a static IP. Defaults can be changed in firmware/DropCeilingController/config.h:

SettingDefault
DHCPEnabled
Static IP192.168.1.200
Subnet255.255.255.0
ArtNet Universe0
ArtNet Start Channel1 (DMX)

When using a USB Ethernet adapter on macOS, you need to assign a static IP on the same subnet (e.g. 192.168.1.100) via System Settings > Network or:

bash
sudo ifconfig en6 inet 192.168.1.100 netmask 255.255.255.0 up

Firmware

Arduino firmware for the ESP32-S3. Located in firmware/DropCeilingController/.

Arduino Library

The new Arduino library implementation lives in firmware/DropCeiling/. It is structured as a standard Arduino library package so it can stay in this repo during development and move to its own repository later.

The library exposes a DropCeiling datatype with one shared output API and five input modes:

ModeExample
Ethernet ArtNetfirmware/DropCeiling/examples/EthernetArtNet/
WiFi ArtNetfirmware/DropCeiling/examples/WiFiArtNet/
BLEfirmware/DropCeiling/examples/BluetoothInput/
Serial CSVfirmware/DropCeiling/examples/SerialInput/
Standalonefirmware/DropCeiling/examples/Standalone/

Compile a library example from the repository root:

bash
arduino-cli compile --fqbn esp32:esp32:adafruit_feather_esp32s3_tft --libraries firmware firmware/DropCeiling/examples/EthernetArtNet

The upload script still defaults to the legacy sketch, but can target a library example:

bash
SKETCH_DIR=firmware/DropCeiling/examples/EthernetArtNet ./upload.sh

Prerequisites

Upload

The included upload script handles board core installation, library dependencies, port detection, compilation, and upload:

bash
./upload.sh

For the first upload (switching from CircuitPython or other firmware), put the board in bootloader mode first:

bash
FIRST_UPLOAD=1 ./upload.sh
# When prompted: hold BOOT, press RESET, release BOOT, then press Enter

Override the serial port if needed:

bash
PORT=/dev/cu.usbmodem1234 ./upload.sh

Libraries (installed automatically by upload.sh)

  • Ethernet
  • Adafruit GFX Library
  • Adafruit ST7735 and ST7789 Library
  • Adafruit BusIO
  • Adafruit DACX578

Software Controller

A Python/Qt desktop application for sending ArtNet data to the controller. Located in software/.

Setup

bash
cd software
python3 -m venv ../.venv
source ../.venv/bin/activate
pip install -r requirements.txt

Run

bash
python controller.py

Usage

  1. Press Connect -- the app broadcasts an ArtPoll on all network interfaces and auto-discovers the controller
  2. Use the 8 channel sliders to set output levels (0-255)
  3. All Zero / All Max -- set all channels at once
  4. Wave -- animated sine wave pattern across all 8 channels

Project Structure

text
firmware/
  DropCeilingController/
    DropCeilingController.ino   # Main firmware
    config.h                    # Network, ArtNet, DAC, display settings
  DropCeiling/
    src/                         # Arduino library implementation
    examples/                    # Ethernet, WiFi, BLE, Serial, Standalone examples
software/
  controller.py                 # Python ArtNet controller (PySide6)
  requirements.txt              # Python dependencies
hardwareComponents/
  hardwareComponents.md         # Hardware component details
upload.sh                       # Arduino CLI build & upload script

Parts

81
QtyValueFootprintReferences
120.1uFResistor_SMD:R_0603_1608MetricC2, C3, C5, C6, C7, C8, C9, C10, C11, C12, C13, C18
910KResistor_SMD:R_0603_1608MetricR4, R5, R7, R11, R14, R17, R18, R27, R28
8100RCapacitor_SMD:C_0805_2012MetricR9, R10, R13, R16, R21, R22, R23, R24
820KResistor_SMD:R_0603_1608MetricR6, R8, R12, R15, R19, R20, R25, R26
8Conn_01x02TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-02_1x02_P5.08mm_HorizontalJ2, J3, J4, J5, J6, J7, J8, J9
8D_ZenerDiode_SMD:D_SOD-323_HandSolderingD1, D2, D3, D4, D5, D6, D7, D8
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_PadH1, H2, H3, H4
310uFCapacitor_SMD:C_0805_2012MetricC1, C14, C17
34.7KResistor_SMD:R_0603_1608MetricR1, R2, R3
222uFCapacitor_SMD:C_1206_3216MetricC15, C16
2TLV274CPWRTLV274CPW:PW14U2, U3
1100uFCapacitor_SMD:CP_Elec_8x10.5C19
112V INConnector_BarrelJack:BarrelJack_CUI_PJ-102AH_HorizontalJ1
11uFResistor_SMD:R_0603_1608MetricC4
14.7uHETQ-P3M4R7KVP:ETQ-P3M_KVPL1
1ADDRJumper:SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabelsJP1
1AP63205WUPackage_TO_SOT_SMD:TSOT-23-6U4
1Adafruit_Ethernet_FeatherWingModule:Adafruit_FeatherA2
1Adafruit_Feather_GenericModule:Adafruit_FeatherA1
1BLM21PG121SN1DInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderFB1
1Conn_02x10_Counter_ClockwiseConnector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_VerticalJ10
1DAC6578xPWPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU1
1D_SchottkyDiode_SMD:D_SMA_HandsolderingD9

The 79 most common of 81 parts.

Questions

How big is the Drop ceiling smd PCB?

It measures 146 × 110 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Drop ceiling smd use?

81 parts, built around the AP63205WU. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Drop ceiling smd KiCad files?

From the npuckett/Drop-Ceiling-Controller repository on GitHub, at the commit this page was made from: the board is hardwareComponents/drop-ceiling-smd/drop-ceiling-smd.kicad_pcb and its schematic hardwareComponents/drop-ceiling-smd/drop-ceiling-smd.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Drop ceiling smd design in my own project?

Its repository states no licence, so its author keeps all rights: ask npuckett before reusing the design.

Similar boards

  • 2 layers28.3 × 14.3 mmTap Photosensor PCB, the printed circuit board in 3D

    Tap Photosensor PCB

    VoronDesign/Voron-Tap

    Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

    18 parts716GPL-3.0
  • 6 layers84 × 98 mmFujiNet-5200-Rev0, the printed circuit board in 3D

    FujiNet-5200-Rev0

    FujiNetWIFI/fujinet-hardware

    Schematics and design files for FujiNet hardware

    145 parts142
  • 2 layers65 × 70 mmOpenradfan, the printed circuit board in 3D

    Openradfan

    andrekuehne/openradfan

    An ESPHome-driven controller for radiator fans to improve heat output

    49 parts29MIT
  • 4 layers96 × 172 mmServo cpu, the printed circuit board in 3D

    Servo cpu

    wiciu15/servo2

    Servo inverter for 3-phase AC motor with/out encoder feedback

    167 parts29
  • 4 layers355 × 160 mmLiBCM, the printed circuit board in 3D

    LiBCM

    doppelhub/Honda_Insight_LiBCM

    Replacement BCM for G1 Honda Insight Lithium Conversion

    717 parts25CC-BY-SA-4.0
  • 2 layers82.5 × 140 mmQCamPCR, the printed circuit board in 3D

    QCamPCR

    GaudiLabs/qPocketPCR

    Quantitative PCR machine detecting fluorescence using a camera

    113 parts22GPL-3.0
  • 2 layers28.8 × 14.3 mmTap Photosensor PCB, the printed circuit board in 3D

    Tap Photosensor PCB

    Qballjos/Voron-2.4-Otopus-pro-SB2209-U2C-CAN

    Voron 2.4 R2 with ,Stealthburner, Voron Tap, Bambu lab Hotend. Octopus pro with TMC2209 UART, EBB SB2209 v1.0 and U2C v2.1 running klipper

    12 parts21
  • 2 layers130 × 53 mmTougherPowerMeter FeatherWing, the printed circuit board in 3D

    TougherPowerMeter FeatherWing

    ahillbom/TougherPowerMonitor-HW

    Triple-channel power monitor based on INA3221 and TPS1HB08A with some filtering for tougher conditions. Compatible with Arduino Nano and Feathers.

    85 parts19MIT