Skip to the content
PCBKitNew board
2 layers33 × 128.5 mmEncoder, the printed circuit board in 3D

Firmware ESP32 (ESP-IDF) para programar e configurar módulos de rádio LoRa, expondo a configuração através de um servidor HTTP em Wi-Fi (SoftAP/STA), acessível também via mDNS (http:// .local/).

Size
33 × 128.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
84
Nets
87
Pads
272
Tracks, vias
575, 58
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
26 Aug 2026
Updated
27 Aug 2026

Overview

Encoder is an open-source printed circuit board by cukier, from the cukier/LoraProgrammer repository on GitHub, published under the MIT licence. It is a 2-layer board of 33 × 128.5 mm with 84 parts on 87 nets, routed with 575 tracks and 58 vias.

It is built around the ESP32-WROOM-32, LM2596S-5.0 and SP3485EN-Y, with the BC807, MMBF170 and MMBT2222ALT1G-CN among its other parts. Its parts include 35 resistors, 15 transistors, 12 diodes, 9 capacitors and 5 ICs. It belongs with the ESP32 boards of this library.

Main components

12

README

README.md

LoraProgrammer

Firmware ESP32 (ESP-IDF) para programar e configurar módulos de rádio LoRa, expondo a configuração através de um servidor HTTP em Wi-Fi (SoftAP/STA), acessível também via mDNS (http://<hostname>.local/).

Dois rádios são suportados; apenas um é compilado por build, escolhido no menuconfig:

RádioInterfaceComo funciona
RF1276 / YL_800IL — AppConWireless (padrão)UARTMódulo com MCU próprio. O ESP32 lê/escreve os parâmetros (baudrate, paridade, frequência, spreading factor, modo, largura de banda, ID, Net ID, potência) pelo protocolo de comandos com header 0xAF; os dados de payload são transparentes (bytes crus na mesma UART).
LoRa127X-C1 / SX1276 — NiceRFSPI nativaModem SX1276 controlado diretamente pelo ESP32 (componente dernasherbrezon/sx127x). Não tem memória de configuração: "programar" significa aplicar os parâmetros (frequência, largura de banda, SF, coding rate, sync word, preâmbulo, potência, CRC) a cada boot e em runtime via POST /lora.

Selecionar o rádio

bash
cd src
idf.py menuconfig   # → "KLORA Configuration" → "LoRa radio module"
idf.py build

Sem menuconfig, o build usa o RF1276 (CONFIG_KLORA_RADIO_RF1276=y). Os pinos (UART ou SPI) e os parâmetros de rádio ficam no mesmo menu, e são aplicados no boot. A escolha do rádio também está exposta como variável de CMake, então o main/CMakeLists.txt compila só o back end selecionado (kuart.c + RF1216.c ou klora_sx127x.c).

API HTTP (igual para os dois rádios)

MétodoRotaDescrição
GET/infoRAM livre, versão do firmware, IP, uptime, hora local
GET/loraConfiguração atual do rádio (JSON)
POST/loraAplica/grava parâmetros do rádio (corpo JSON, qualquer subconjunto)
GET/lora/rxtxHex dump do último pacote recebido pelo ar
POST/lora/rxtxTransmite um payload — corpo JSON {"message": "..."}
POST/otaAtualização de firmware
POST/rebootReinicia o dispositivo após 5 s

O formato do JSON de /lora difere entre os rádios (parâmetros distintos), mas a saída do GET sempre volta a valer como corpo do POST para o mesmo back end.

Estrutura do repositório

text
src/        Firmware ESP-IDF (projeto CMake)
  main/     Componente principal (código-fonte)
sch/        Projeto de hardware em KiCad
.github/    Workflows de CI (build do firmware e exports do KiCad)

Firmware

Projeto ESP-IDF padrão. Para compilar:

bash
cd src
idf.py build
idf.py -p <PORT> flash monitor

O CI (.github/workflows/firmware.yml) compila o firmware a cada push/PR em src/** e publica os binários (.bin, bootloader.bin, partition-table.bin) como artifact.

Hardware

Esquemático e PCB em sch/ (KiCad 9). O CI (.github/workflows/hardware.yml) exporta Gerbers, drill files e BOM a cada push/PR em sch/**.

Configuração

radio.json documenta o formato dos parâmetros de rádio (back end RF1276) expostos pela API HTTP do firmware.

Licença

MIT — veja LICENSE.

Parts

84
QtyValueFootprintReferences
2310kResistor_SMD:R_0805_2012MetricR1, R2, R3, R10, R11, R16, R17, R18, R20, R21, R23, R25, R27, R28, R29, R31 +7
6100nFCapacitor_SMD:C_0805_2012MetricC2, C4, C6, C7, C8, C9
61kResistor_SMD:R_0805_2012MetricR8, R15, R19, R24, R26, R30
4560RResistor_SMD:R_0805_2012MetricR12, R14, R34, R36
4BC807Package_TO_SOT_SMD:SOT-23Q7, Q8, Q9, Q10
4MMBF170Package_TO_SOT_SMD:SOT-23Q3, Q4, Q13, Q14
4MMBT2222ALT1GPackage_TO_SOT_SMD:SOT-23Q1, Q2, Q5, Q15
3BC817Package_TO_SOT_SMD:SOT-23Q6, Q11, Q12
2 SM712Package_TO_SOT_SMD:SOT-23D4, D13
2120RResistor_SMD:R_0805_2012MetricR13, R35
2470uFCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC3, C5
2RX2LED_THT:LED_D3.0mmD9, D10
2SP3485ENPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU4, U5
2US1MDiode_SMD:D_SMAD2, D5
11000uFCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC1
1100uHInductor_THT:L_Radial_D8.7mm_P5.00mm_Fastron_07HCPL1
110D390KVaristor:RV_Disc_D12mm_W6.3mm_P7.5mmRV1
1AP1117-33Package_TO_SOT_SMD:SOT-223-3_TabPin2U3
1CON_IConnector_PinSocket_2.54mm:PinSocket_1x09_P2.54mm_VerticalJ4
1CON_OConnector_PinSocket_2.54mm:PinSocket_1x09_P2.54mm_VerticalJ5
1ENCConnector_Phoenix_MC:PhoenixContact_MCV_1,5_4-G-3.81_1x04_P3.81mm_VerticalJ3
1ENCLED_THT:LED_D3.0mmD8
1ESD9B3.3ST5GDiode_SMD:D_0603_1608MetricD1
1ESP32-WROOM-32RF_Module:ESP32-WROOM-32U1
1G6K-2Relay_SMD:Relay_DPDT_Omron_G6K-2F-YK2
1HEART_BEATLED_THT:LED_D3.0mmD12
1LM2596S-5Package_TO_SOT_SMD:TO-263-5_TabPin3U2
1PROGConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ1
1PWRConnector_Phoenix_MC:PhoenixContact_MCV_1,5_4-G-3.81_1x04_P3.81mm_VerticalJ2
1SS35Diode_SMD:D_SMCD3
1TX1LED_THT:LED_D3.0mmD6
1TX2LED_THT:LED_D3.0mmD7

Questions

How big is the Encoder PCB?

It measures 33 × 128.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Encoder use?

84 parts, built around the ESP32-WROOM-32, LM2596S-5.0, SP3485EN-Y and BC807. 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 Encoder KiCad files?

From the cukier/LoraProgrammer repository on GitHub, at the commit this page was made from: the board is sch/Encoder.kicad_pcb and its schematic sch/Encoder.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Encoder design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers91.4 × 75.6 mmBuck converter V6, the printed circuit board in 3D

    Buck converter V6

    HakanD1/24v-to-5v-50w-buck-converter-stm32

    24V to 5V 50W Digital Controlled Buck Converter Hardware, Software, and Control Design. Features an STM32-based closed-loop PI regulation, 120kHz PWM, custom PCB, and a Nextion HMI display interface.

    88 partsMIT
  • 2 layers99 × 80 mmMmM, the printed circuit board in 3D

    MmM

    wyolum/mmM

    mmMercury is an Open Hardware, blood pressure measurement device (not FDA approved).

    167 parts2
  • 2 layers74.7 × 53.6 mmLED Dimmer, the printed circuit board in 3D

    LED Dimmer

    infinus-electronics/Constant-On-Time-LED-Dimmer

    39 parts
  • 2 layers51.5 × 92 mmEcoport bridge v1, the printed circuit board in 3D

    Ecoport bridge v1

    jrowe88/ecoport-bridge

    CTA-2045 (EcoPort) bridge for a Rinnai REHP65 heat pump water heater

    74 parts1AGPL-3.0
  • 2 layers89 × 44 mmCDRC, the printed circuit board in 3D

    CDRC

    lilindian16/customDRC

    Development of custom Audison DRC interface

    85 parts4
  • 2 layers49 × 52 mmFDU-3, the printed circuit board in 3D

    FDU-3

    EricSFR/Simple-Projects

    In this repository i'll show some of my projects, manly for the ubniversity

    11 parts
  • 6 layers147.3 × 95.9 mmZoutwachter measurement, the printed circuit board in 3D

    Zoutwachter measurement

    Multiflexmeter/PZLD-Zoutwachter

    Automated groundwater conductivity readout based CN0359

    335 parts
  • 2 layers46.7 × 30.9 mmUw rs485 hat V5, the printed circuit board in 3D

    Uw rs485 hat V5

    tomrodinger/Raspberry_Pi_HAT_RS485

    This is a Raspberry Pi HAT for RS485 communication with external devices and it should fit into any Raspberry Pi like Zero/Zero2W/3/4

    54 partsApache-2.0