
Sensor
Anderman/Renovent
Display is een liteon De 8 segementen worden in volgorde aan gestuurd met een freq van 500uS Welke segmenten verlicht worden gaat met digit 1 - 4

Display is een liteon De 8 segementen worden in volgorde aan gestuurd met een freq van 500uS Welke segmenten verlicht worden gaat met digit 1 - 4
Controller is an open-source printed circuit board by Anderman, from the Anderman/Renovent repository on GitHub. It is a 2-layer board of 79.3 × 59.8 mm with 74 parts on 169 nets, routed with 323 tracks and 54 vias.
It is built around the ESP32-S3-MINI-1-N8, SN74LVC245APW and AP63203WU, with the SCD41-D-R2, WS2812B-2020 and BSS138 among its other parts. Its parts include 21 capacitors, 14 connectors, 13 resistors, 9 ICs and 5 diodes. It belongs with the ESP32 boards of this library.



De originele controller is een display met toetsen en 1 IC De IC zet een 3 bit counter om in 8 select lijnen van het display.
Display is een liteon De 8 segementen worden in volgorde aan gestuurd met een freq van 500uS Welke segmenten verlicht worden gaat met digit 1 - 4
Het programma zal dus het continue het display moeten uitlezen en wat er op staat omzetten in een 4 char array. Hiervan met gebruik gemaakt worden van mapping om een 8 bit array om te zetten in een Char. Waarschijnlijk kan de DP los en hebben we een 7 bitarray naar char mapping nodig.
De switches werken als volgt
Er is 1 output Key_node. sw1 (OK) = key_node=1 als C=1 (counter=1) Sw2 (+ ) = key_node=1 als D=1 (counter=5) Sw3 (F ) = key_node=1 als E=1 (counter=6) Sw4 (- ) = key_node=1 als DP=1 (counter=3)
In het ESP32-schema worden de relevante signalen van de originele controller eerst via een SN74LVC245 naar 3V3 gebracht. De ESP32 ziet dus alleen de 3V3-varianten van deze signalen.
Deze acht ingangen zijn voldoende om het gemultiplexte display en de toetsstatus te reconstrueren.
KEY_DOWN gaat via een BSS138-transistor naar de originele schakeling. Daarmee kan de ESP32 een toetsdruk simuleren zonder direct 5V op een GPIO te zetten.
De displaycontroller loopt elke 500 us door de 8 segment-selects. De software leest dus niet "digit 1", daarna "digit 2", enzovoort, maar leest per segment-select in een keer de toestand van alle 4 digitlijnen.
Concreet:
BIT0, BIT1 en BIT2 vormen samen een tellerwaarde van 0..7.Digit1..Digit4 hoog zijn.De mapping van de tellerwaarde naar segment is:
| BIT2 BIT1 BIT0 | index | segment |
|---|---|---|
| 0 0 0 | 0 | A |
| 0 0 1 | 1 | C |
| 0 1 0 | 2 | B |
| 0 1 1 | 3 | DP |
| 1 0 0 | 4 | F |
| 1 0 1 | 5 | D |
| 1 1 0 | 6 | E |
| 1 1 1 | 7 | G |
Schematisch ziet een volledige scan er zo uit:
flowchart LR
A[GPIO snapshot] --> B[Lees BIT0..2]
B --> C[Select-index 0..7]
C --> D[Segment voor deze stap kiezen]
D --> E{Lees Digit1..4 in dezelfde snapshot}
E --> F[Zet dit ene segment in digit 1..4 als die hoog zijn]
F --> G[Werk lopend frame bij]
G --> H{Zijn alle 8 select-stappen gezien?}
H -- nee --> A
H -- ja --> I[4 complete digitmasks klaar]
I --> J[Zet digitmasks om naar displaytekst]Eén interrupt-snapshot doet dus niet alles. Per snapshot gebeurt maar dit:
BIT0..2Pas nadat dit 8 keer gebeurd is, hebben we voor alle 4 digits een volledig segmentmasker.
Je kunt het ook zo lezen: we lezen niet "4 displays na elkaar", maar per segment in een keer alle 4 displays.
Voorbeeld:
BIT2..0 = 000 betekent segment ADigit1 en Digit3 hoog zijn, dan krijgt digit 1 en digit 3 het segment AC op dezelfde manier verdeeld over de 4 digitsKEY_NODE wordt in diezelfde scan meegelezen. Een actieve key tijdens een specifieke select-index betekent een specifieke toets.
De huidige implementatie gebruikt juist een interrupt op BIT0.
Waarom:
KEY_NODEDe implementatie in src/display_reader.cpp werkt zo:
BIT0 triggert onBit0ChangeInterrupt() op elke flank.GPIO.in1.val, zodat alle ingangssignalen uit hetzelfde tijdsmoment komen.BIT0..2 wordt de verwachte select-index bepaald.7 is een volledig frame klaar.Daardoor is de reader robuuster tegen timingglitches en worden half-opgebouwde displaybeelden niet gepubliceerd.
Er is nu een eerste ESP32 software-opzet toegevoegd in de map src.
src/main.cpp start WiFi, de webserver en de display reader.src/wifiSetup.* gebruikt WiFiManager, net als in het andere project.src/display_reader.* leest BIT0..2, Digit1..4 en KEY_NODE in en bouwt daar een stabiel displayframe van op.src/webui/webui.* publiceert een simpele HTTP API en serveert statische bestanden uit SPIFFS.data/index.html is een eenvoudige debugpagina.Na boot:
Beschikbare endpoints:
GET /api/statusPOST /api/keydown/api/status geeft onder andere terug:
KEY_NODEEr is ook een partitions/default.csv toegevoegd zodat de SPIFFS data-partitie beschikbaar is voor de webpagina.
Voor lokaal gebruik zijn deze commando's relevant:
platformio runplatformio run --target buildfsplatformio run --target uploadfsplatformio run --target uploadDe automatische firmware-update leest OTA-bestanden uit release/firmware, release/spiffs en release/latest.json.
Deze artifacts worden lokaal gegenereerd door scripts/generate_build_info.py, dat als PlatformIO build hook meeloopt. De hook:
src en data*.hash in src en ui-hashes.bin naar release/firmware of release/spiffsrelease/latest.json bijVoor een volledige lokale OTA release bouw je beide artifacts:
platformio run -e esp32s3mini_otaplatformio run -e esp32s3mini_ota -t buildfsDaarna kun je de bijgewerkte bestanden in release/ zelf committen of op een andere manier publiceren, zolang release/latest.json en de bijbehorende .bin bestanden bereikbaar blijven voor de ESP32.
Een ESP32-S3 backtrace uit de WebUI of seriele output kun je direct tegen de actuele firmware-ELF symboliseren met:
.\scripts\decode_backtrace.ps1 "0x4037EF71 -> 0x40377C96 -> 0x40376AEF"Het script gebruikt standaard:
.pio/build/esp32s3mini_ota/firmware.elfxtensa-esp32s3-elf-addr2line.exeBelangrijk: decode altijd tegen de ELF van dezelfde firmware-build als waarmee de crash is ontstaan, anders kloppen functies en regelnummers mogelijk niet.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100nF | Capacitor_SMD:C_0201_0603Metric | C6, C25, C31, C32, C33, C34 |
| 6 | 47 | Resistor_SMD:R_0603_1608Metric | R24, R25, R26, R27, R28, R29 |
| 5 | 10K | Resistor_SMD:R_0402_1005Metric | R1, R2, R3, R6, R21 |
| 4 | 100uF | Capacitor_SMD:C_1206_3216Metric | C4, C5, C29, C30 |
| 4 | Conn_01x06 | 123:PinSocket_1x06_P2.00mm_Vertical_female_C7499363 | J4, J5, J6, J7 |
| 4 | Conn_01x06 | 123:PinHeader_1x06_P2.00mm_Vertical_male_C706993 | J8, J9, J10, J11 |
| 4 | MountingHole | 123:MountingHole_2.5mm | H1, H2, H3, H5 |
| 3 | 22nF | Capacitor_SMD:C_0603_1608Metric | C26, C27, C28 |
| 3 | INA238 | Package_SO:VSSOP-10_3x3mm_P0.5mm | U23, U24, U25 |
| 2 | 100nF | Capacitor_SMD:C_0603_1608Metric | C2, C3 |
| 2 | 10K | Resistor_SMD:R_0603_1608Metric | R22, R23 |
| 2 | 10uF | Capacitor_SMD:C_1210_3225Metric | C21, C22 |
| 2 | Conn_01x04 | Connector_JST:JST_PH_S4B-PH-SM4-TB_1x04-1MP_P2.00mm_Horizontal | J2, J3 |
| 2 | ESP32-S3-MINI-1 | PCM_Espressif:ESP32-S3-MINI-1 | U1, U21 |
| 2 | TC2030 | Connector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical | J1, J22 |
| 2 | WS2812B-2020 | 123:LED_WS2812B-2020_2x2.2mm | D1, D21 |
| 1 | 100nF | Capacitor_SMD:C_0402_1005Metric | C23 |
| 1 | 1uF | Capacitor_SMD:C_0603_1608Metric | C24 |
| 1 | 22uF | Capacitor_SMD:C_0805_2012Metric | C1 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric | C7 |
| 1 | 4.7uH | Inductor_SMD:L_Bourns-SRN4018 | L1 |
| 1 | 47uH | Inductor_SMD:L_APV_ANR5040 | L21 |
| 1 | AP63203WU | Package_TO_SOT_SMD:TSOT-23-6 | U2 |
| 1 | BSS138 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | Conn_01x06 | Connector_JST:JST_PH_S6B-PH-SM4-TB_1x06-1MP_P2.00mm_Horizontal | J23 |
| 1 | Conn_02x07_Odd_Even | 123:IDC-Header_2x07_P2.54mm_Vertical | X1 |
| 1 | L7983 | 123:TDFN-10-1EP_3x3mm_P0.5mm | U22 |
| 1 | MountingHole | 123:MountingHole_7mm | H4 |
| 1 | SCD41-D-R2 | Sensor:Sensirion_SCD4x-1EP_10.1x10.1mm_P1.25mm_EP4.8x4.8mm | U3 |
| 1 | SMBJ64A | Diode_SMD:D_SMB | D22 |
| 1 | SN74LVC245APW | Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm | U5 |
| 1 | SS14 | Diode_SMD:D_SMA | D23 |
| 1 | SS510 | Diode_SMD:D_SMA | D24 |
| 1 | Terminal_block_2p | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1-2-3.81_1x02_P3.81mm_Horizontal | J21 |
| 1 | fuse | Fuse:Fuse_1812_4532Metric | F21 |
The 72 most common of 74 parts.
It measures 79.3 × 59.8 mm and has 2 copper layers, 1.6 mm thick.
74 parts, built around the ESP32-S3-MINI-1-N8, SN74LVC245APW, AP63203WU and SCD41-D-R2. 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.
From the Anderman/Renovent repository on GitHub, at the commit this page was made from: the board is Hardware/Esp32/Controller/Controller.kicad_pcb and its schematic Hardware/Display/Display.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Anderman before reusing the design.

Anderman/Renovent
Display is een liteon De 8 segementen worden in volgorde aan gestuurd met een freq van 500uS Welke segmenten verlicht worden gaat met digit 1 - 4

Anderman/tombask
All message send Slave can send after a poll frame. Slave is ready sending when the last padding byte is 0x55 To write byte 0x08 must be 0x02

NEOgHacking/SCORPION-MAX-V1
4x Power Mosfets for controlling heated beds, heaters, ext.

86kkd/millionBoard
Amazing 500million sensor enetric skateboard use body center of gravity to control !!!

Franzelfx/vertical-wind-turbine
Design study: a 3D-printed vertical-axis wind turbine on a timber post, charging a 3S Li-ion pack. Parts, circuit and figures generated by scripts with FreeCAD, KiCad and Blender. Nothing built yet.

torbers/bentoboard
as many ready-to-use electronics as i could fit on a 4"x4" PCB.

William-Yen/Bionx-3rdParty-BMS
A supplemental PCB to retrofit a Bionx e-bike battery pack with a 3rd-party BMS

