weeSpindel: a 25 mm ESP-NOW hydrometer with a W5500 Ethernet gateway
A sub-25 mm iSpindel alternative that broadcasts tilt over ESP-NOW to an ESP32 + WIZnet W5500 gateway, which relays readings to MQTT and Home Assistant.
https://github.com/c-/weeSpindel
Overview
weeSpindel is a compact brewing hydrometer built by GitHub user c- as a smaller alternative to the iSpindel. One dimensional constraint drives every other decision in the project: the electronics and the battery have to fit inside a tube of roughly 25 mm outside diameter, small enough to drop through the neck of a glass carboy. To stay inside that envelope the design gives up Wi-Fi in favour of ESP-NOW broadcasts and gives up a Li-ion pack in favour of a single AAA-size cell. Because an ESP-NOW frame is a raw 802.11 broadcast rather than an IP packet, the float alone cannot reach a home automation system. The missing half of the path is a separate receiver: an ESP32 paired with a WIZnet W5500 Ethernet module, acting as an ESP-NOW-to-MQTT gateway so that the readings show up in Home Assistant and similar tools. The repository holds the float's firmware and hardware notes, carries 17 stars, and was last pushed on 2024-04-20.
Hardware & Software Configuration
The bill of materials is what remains after stripping the iSpindel down to the parts that fit. The author is left with an ESP-12 module, an MPU-6050 module, the power circuitry, assorted passives, and a single battery cell. Even the DS18B20 temperature sensor is dropped, because the MPU-6050 already reports a temperature good enough for the job, and every part removed buys volume inside the 25 mm tube.
Power is where the size limit bites hardest. Moving away from Li-ion toward simple NiMH rechargeables was a deliberate goal, and ESP-NOW makes a single NiMH cell with a boost converter a realistic option. The first attempt failed for reasons that have nothing to do with electronics: a 25 mm tube containing a AA NiMH cell does not have the buoyancy to float, let alone tilt, so the design was forced down to a AAA cell. As a practical hedge the board also accepts a 10440 Li-ion cell — the AAA-size lithium format — driven through a conventional LDO regulator instead of a boost converter, an arrangement the author describes as far more stable at this point.
Sleep behaviour is handled by omission rather than by extra circuitry. There is no MOSFET cutting power to the MPU module; between the sensor module and the Torex XC6204 LDO on the author's board, the whole assembly draws maybe 5 uA while sleeping, which is low enough that the added part would not pay for its own board area. The status LED is removed in the usual fashion.
There is no USB controller on the prototype, so programming the ESP is handled either by removing the module, which the author mounts on pin headers for exactly this reason, or by some sort of pogo pin jig that is still marked TBD. The prototype board itself was cut on a PCB mill, and that process sets a floor on how fine the component footprints can be.
The firmware is deliberately thin. It wakes, reads the MPU, transmits an ESP-NOW broadcast, and sleeps again, with only five samples taken from the sensor per cycle — a number the author suspects might even be excessive. Configurability, in the author's own words, is minimal.
Additional photos are available in the original repository: https://github.com/c-/weeSpindel
System Architecture
The system splits cleanly into a battery half and a mains-powered half, and the split is the point of the design. Inside the tube, the MPU-6050 supplies tilt and temperature, the single cell supplies power through either the boost converter or the LDO path, and the ESP-12 turns those inputs into one short broadcast. The whole wake-read-send-sleep cycle takes approximately 100 to 120 ms, which is what makes a single small cell viable: the radio is on for a fraction of a second and the rest of the time the board is at microamps.
Outside the fermenter, the ESP-32 gateway listens for those broadcasts and does the part the float cannot afford to do — joining a network, holding a TCP connection open, and speaking MQTT. The W5500 gives that gateway its wired uplink. From the broker onward, the data is ordinary home automation traffic that Home Assistant and other MQTT clients can subscribe to.
flowchart TB
MPU["MPU-6050<br/>tilt and temperature"] --> ESP
PWR["Single AAA-size cell<br/>NiMH boost or 10440 LDO"] --> ESP
ESP["ESP-12 in the 25 mm tube<br/>five samples, 100-120 ms"] -->|"ESP-NOW broadcast"| GW
GW["ESP32 gateway<br/>ESP-NOW listener"] -->|"SPI"| W5500
W5500["WIZnet W5500<br/>Ethernet MAC, PHY, TCP/IP"] -->|"MQTT over TCP"| HUB["MQTT broker<br/>Home Assistant"]
Role of the WIZnet W5500
It is worth being precise about where the W5500 sits: it is not inside the float. Nothing in the 25 mm tube speaks IP, and nothing in it is wired. The W5500 belongs to the gateway on the other side of the ESP-NOW hop, and in the repository it appears exactly once, in the README line that describes the ESP-NOW-to-MQTT gateway as an ESP32 with a W5500 Ethernet module.
That placement is what makes the rest of the design affordable. The W5500 is WIZnet's hardwired TCP/IP Ethernet controller: an SPI peripheral that carries the Ethernet MAC and PHY and can terminate TCP and UDP connections in silicon rather than in the host's software stack. A host microcontroller talks to it over a handful of SPI pins and gets a working socket interface back, without linking a full network stack or budgeting RAM for packet buffers. For a small always-on gateway that job is a good fit, because the gateway is a fixed installation next to the network rather than a battery device that has to float.
The README does not spell out why Ethernet was chosen over Wi-Fi for the gateway, so the reasoning below is engineering context rather than the author's stated intent. An ESP32 that receives ESP-NOW frames and also joins a Wi-Fi access point has to share one radio and one channel between those two roles, and a wired uplink removes that conflict entirely: the radio stays dedicated to listening for the float, while the MQTT session runs out over copper. A wired link also gives the gateway a stable path for a service that is expected to keep logging for days on end while a fermentation runs.
FAQ
Why not simply use an iSpindel? The author likes the idea of the iSpindel but wanted something smaller, specifically something usable in glass carboys. That means fitting a tube of approximately 25 mm outside diameter, which the original design does not do.
Why a AAA cell instead of a AA? Buoyancy, not electronics. A 25 mm tube containing a AA NiMH cell does not have the necessary buoyancy to actually float, much less tilt, so the cell had to shrink.
Why ESP-NOW instead of Wi-Fi? ESP-NOW allows low-overhead transmission, which is what compresses the wake-read-send-sleep cycle to roughly 100 to 120 ms. That short duty cycle is what makes a single NiMH cell with a boost converter a realistic power source in the first place.
What measures temperature if the DS18B20 is gone? The MPU-6050 does. Dropping the dedicated temperature sensor is one of the volume savings that let the design reach 25 mm.
How is the firmware flashed without a USB port? Either the ESP module is removed — the author mounts it on pin headers — or through a pogo pin jig, which is still an open item. A CH340E USB controller on the board is on the wish list for a future revision.
Is Ethernet required to use it? The float itself only broadcasts ESP-NOW, so any receiver that understands those frames can pick it up. The setup described in the repository is the one the author runs: an ESP32 with a W5500 Ethernet module bridging to MQTT, which is what puts the readings into Home Assistant.
Is there a known hazard to watch for? Yes, and the author documents it. When the supply drops too low — under about 1.2 V with a AAA NiMH cell — the HT7733SA boost regulator enters a roughly 200 mA battery-draining loop, and in extreme cases it will reverse-charge the cell. The planned fix is a boost regulator with under-voltage lockout, such as the TPS61097.
What else is planned? A manufactured PCB instead of a milled prototype, which would allow finer footprints, mounting the MPU-6050 chip directly on the board instead of using a module, the UVLO regulator swap, and the on-board USB controller.
About the Author
weeSpindel is published on GitHub by the user c-, and the repository is the project's only public home. The account metadata collected for this write-up carries no display name, blog, or public contact address, so the work speaks for itself: a milled prototype, a mechanical constraint stated up front, a failure that was measured rather than hidden, and a named replacement part for it. The repository has 17 stars, uses master as its default branch, and was last pushed on 2024-04-20. No license file is declared, which is why the photographs from the README are linked rather than reproduced here.
개요
weeSpindel은 GitHub 사용자 c-가 iSpindel의 더 작은 대안으로 만든 소형 발효 비중계다. 이 프로젝트의 모든 결정은 하나의 치수 제약에서 출발한다. 전자 회로와 전지가 외경 약 25mm 관 안에 들어가야 하고, 그래야 유리 카보이의 좁은 입구로 넣을 수 있다는 조건이다. 이 한계 안에 머물기 위해 설계는 Wi-Fi 대신 ESP-NOW 브로드캐스트를 쓰고, 리튬이온 팩 대신 AAA 크기 전지 한 알을 쓴다. ESP-NOW 프레임은 IP 패킷이 아니라 무선 브로드캐스트이므로, 부유체 혼자서는 홈 오토메이션 시스템까지 닿을 수 없다. 경로의 나머지 절반을 담당하는 것이 별도의 수신기다. ESP32와 WIZnet W5500 이더넷 모듈을 묶은 ESP-NOW-to-MQTT 게이트웨이가 측정값을 MQTT로 다시 실어 보내면, Home Assistant 같은 도구에서 값을 보고 기록할 수 있다. 저장소에는 부유체의 펌웨어와 하드웨어 설명이 들어 있고, 별 17개가 달려 있으며, 마지막 푸시는 2024-04-20이다.
하드웨어·소프트웨어 구성
부품 목록은 iSpindel에서 25mm 관에 들어가는 것만 남기고 덜어낸 결과다. 남은 것은 ESP-12 모듈, MPU-6050 모듈, 전원 회로, 약간의 수동 소자, 그리고 전지 한 알이다. 온도 센서인 DS18B20까지 빠졌는데, MPU-6050이 이미 이 용도에 충분한 온도 값을 내주기 때문이고, 부품 하나를 덜어낼 때마다 관 안의 부피가 그만큼 확보되기 때문이다.
크기 제약이 가장 아프게 작용한 곳은 전원이다. 리튬이온에서 벗어나 단순한 NiMH 충전지로 가겠다는 것이 처음부터의 목표였고, ESP-NOW를 쓰면 부스트 컨버터를 붙인 NiMH 한 알이 현실적인 선택지가 된다. 그런데 첫 시도는 전자적인 이유가 아니라 물리적인 이유로 실패했다. AA 크기 NiMH를 넣은 25mm 관은 기울어지기는커녕 뜨는 데 필요한 부력조차 나오지 않았고, 그래서 전지를 AAA로 줄일 수밖에 없었다. 실용적인 보험으로 보드는 AAA 크기 리튬이온인 10440 셀도 받아들인다. 이때는 부스트 컨버터 대신 일반적인 LDO 레귤레이터를 쓰며, 저자는 현재 시점에서 이쪽이 훨씬 안정적이라고 적고 있다.
절전 동작은 회로를 더하는 대신 빼는 방식으로 해결한다. MPU 모듈의 전원을 끊는 MOSFET 같은 것은 아예 두지 않는다. 저자의 보드 기준으로 센서 모듈과 Torex XC6204 LDO를 합쳐 슬립 중 소비가 대략 5uA 정도이므로, 부품을 하나 더 넣어 차지하는 면적이 아깝다는 판단이다. 상태 표시 LED는 흔히 하는 방식대로 제거한다.
시제품에는 USB 컨트롤러가 없다. 그래서 ESP에 펌웨어를 올릴 때는 모듈을 뽑아서 굽거나 — 저자가 핀 헤더에 얹어 장착하는 이유가 바로 이것이다 — 아직 미정 상태인 포고 핀 지그를 쓴다. 시제품 기판 자체는 PCB 밀로 깎은 것이라, 이 공정이 감당할 수 있는 부품 풋프린트의 하한이 설계를 제약한다.
펌웨어는 의도적으로 얇다. 깨어나서 MPU를 읽고 ESP-NOW 브로드캐스트를 보낸 뒤 다시 잠들며, 한 주기당 센서 샘플은 다섯 개만 가져온다. 저자 스스로도 다섯 개조차 과할지 모른다고 덧붙인다. 설정 가능성에 대해서는 최소한이라고 짧게 인정한다.
추가 사진은 원본 저장소에서 볼 수 있다: https://github.com/c-/weeSpindel
시스템 구조
시스템은 전지로 도는 절반과 상시 전원으로 도는 절반으로 깔끔하게 나뉘고, 이 분리 자체가 설계의 핵심이다. 관 안쪽에서는 MPU-6050이 기울기와 온도를 내고, 전지 한 알이 부스트 컨버터 또는 LDO 경로를 거쳐 전력을 공급하며, ESP-12가 그 입력을 짧은 브로드캐스트 하나로 바꾼다. 깨어나 읽고 보내고 다시 자는 전체 주기는 대략 100~120ms다. 작은 전지 하나로 버틸 수 있는 이유가 바로 이 숫자에 있다. 무선이 켜져 있는 시간은 1초의 일부에 불과하고, 나머지 시간 동안 보드는 마이크로암페어 수준에 머문다.
발효조 바깥에서는 ESP32 게이트웨이가 그 브로드캐스트를 받아, 부유체가 감당할 수 없는 일을 대신한다. 네트워크에 참여하고, TCP 연결을 유지하고, MQTT로 말하는 일이다. W5500은 이 게이트웨이에 유선 상향 경로를 준다. 브로커부터 뒤쪽은 Home Assistant를 비롯한 MQTT 클라이언트가 구독하면 되는 평범한 홈 오토메이션 트래픽이다.
WIZnet W5500의 역할
W5500이 어디에 있는지는 분명히 해둘 필요가 있다. 부유체 안에는 없다. 25mm 관 안의 어떤 부품도 IP를 말하지 않고, 유선으로 연결되지도 않는다. W5500은 ESP-NOW 홉 건너편의 게이트웨이 쪽 부품이며, 저장소 안에서는 정확히 한 번, ESP-NOW-to-MQTT 게이트웨이를 "W5500 이더넷 모듈을 붙인 ESP32"로 설명하는 README 한 줄에만 등장한다.
그 위치 덕분에 나머지 설계가 감당 가능해진다. W5500은 WIZnet의 하드와이어드 TCP/IP 이더넷 컨트롤러다. 이더넷 MAC과 PHY를 품고 있으면서 TCP·UDP 연결의 종단 처리를 호스트 소프트웨어가 아니라 실리콘 안에서 끝낼 수 있는 SPI 주변장치다. 호스트 마이크로컨트롤러는 몇 개의 SPI 핀으로 통신해 동작하는 소켓 인터페이스를 돌려받으며, 완전한 네트워크 스택을 링크하거나 패킷 버퍼용 RAM을 따로 떼어둘 필요가 없다. 상시 켜져 있는 작은 게이트웨이에는 잘 맞는 역할이다. 이 게이트웨이는 물에 떠야 하는 전지 장치가 아니라 네트워크 옆에 고정 설치되는 장비이기 때문이다.
게이트웨이에 Wi-Fi 대신 이더넷을 고른 이유를 README가 직접 밝히지는 않는다. 따라서 아래 설명은 저자의 진술이 아니라 기술적 배경이다. ESP-NOW 프레임을 받으면서 동시에 Wi-Fi 액세스 포인트에 접속하는 ESP32는 하나의 무선과 하나의 채널을 두 역할이 나눠 써야 한다. 유선 상향 경로는 이 충돌을 통째로 없앤다. 무선은 부유체의 신호를 듣는 데만 쓰이고, MQTT 세션은 구리선으로 나간다. 발효가 진행되는 며칠 동안 계속 기록해야 하는 서비스에 안정적인 경로를 준다는 점도 유선 쪽의 장점이다.
자주 묻는 질문
iSpindel을 그대로 쓰면 안 되나? 저자는 iSpindel의 발상 자체는 마음에 들어 하지만 더 작은 것을 원했고, 구체적으로는 유리 카보이에 쓸 수 있는 물건을 원했다. 그러려면 외경 약 25mm 관에 들어가야 하는데, 원래 설계는 그 조건을 만족하지 못한다.
왜 AA가 아니라 AAA인가? 전자적인 이유가 아니라 부력 때문이다. AA 크기 NiMH를 담은 25mm 관은 기울어지는 것은 물론이고 뜨는 데 필요한 부력조차 나오지 않았다.
왜 Wi-Fi가 아니라 ESP-NOW인가? ESP-NOW는 오버헤드가 낮은 전송을 허용하고, 그 덕분에 깨어나 읽고 보내고 자는 주기가 대략 100~120ms까지 줄어든다. 이 짧은 듀티 사이클이 있어야 부스트 컨버터를 붙인 NiMH 한 알이 애초에 현실적인 전원이 된다.
DS18B20을 뺐는데 온도는 무엇이 재나? MPU-6050이 잰다. 전용 온도 센서를 덜어낸 것도 25mm에 도달하기 위해 확보한 부피 절약 가운데 하나다.
USB 포트가 없는데 펌웨어는 어떻게 올리나? ESP 모듈을 뽑거나 — 저자는 이 때문에 모듈을 핀 헤더에 얹어 장착한다 — 포고 핀 지그를 쓰는데, 지그는 아직 정해지지 않은 항목이다. 다음 개정판의 희망 사항에는 보드에 CH340E USB 컨트롤러를 얹는 것이 들어 있다.
쓰려면 이더넷이 반드시 필요한가? 부유체 자체는 ESP-NOW 브로드캐스트만 내보내므로, 그 프레임을 이해하는 수신기라면 무엇이든 받을 수 있다. 다만 저장소가 설명하는 구성은 저자가 실제로 운용하는 구성이며, W5500 이더넷 모듈을 붙인 ESP32가 MQTT로 다리를 놓아 측정값을 Home Assistant까지 올린다.
주의해야 할 알려진 위험이 있나? 있고, 저자가 직접 기록해 두었다. 공급 전압이 너무 낮아지면 — AAA NiMH 기준 약 1.2V 아래 — HT7733SA 부스트 레귤레이터가 대략 200mA로 전지를 갉아먹는 루프에 빠지고, 심한 경우 전지를 역충전한다. 계획된 해법은 저전압 잠금(UVLO)이 있는 부스트 레귤레이터로 교체하는 것이며, TPS61097 정도면 된다고 본다.
앞으로의 계획은? 밀링 시제품 대신 양산 PCB로 넘어가 더 미세한 풋프린트를 쓰는 것, MPU-6050을 모듈이 아니라 칩째 보드에 올리는 것, UVLO 레귤레이터로 교체하는 것, 그리고 보드에 USB 컨트롤러를 얹는 것이다.
저자 소개
weeSpindel은 GitHub 사용자 c-가 공개한 프로젝트이며, 저장소가 이 프로젝트의 유일한 공개 거처다. 이 글을 위해 수집한 계정 정보에는 표시 이름, 블로그, 공개 연락처가 남아 있지 않다. 그래서 작업 자체가 저자를 대신해 말한다. 직접 깎은 시제품 기판, 앞머리에 못박아 둔 기구적 제약, 숨기지 않고 측정해 적어 둔 실패 모드, 그리고 그 실패를 대체할 부품명까지 적힌 계획이 그것이다. 저장소는 별 17개를 받았고 기본 브랜치는 master이며 마지막 푸시는 2024-04-20이다.

