Firmware (Arduino Nano ESP32 / PlatformIO): - Native ASCOM Alpaca CoverCalibrator REST API on port 11111 - Alnitak serial protocol on USB at 9600 baud (simultaneous with WiFi) - MG995 servo cover mechanism with non-blocking state machine (D9) - LED brightness PWM via IRLZ44N MOSFET, LEDC channel 0 (D3) - 12V dew heater PWM via IRLZ44N MOSFET, LEDC channel 1 (D5) - mDNS + UDP Alpaca discovery, WiFi watchdog reconnect - SERIAL_DEBUG flag to silence debug output in USB-only mode INDI driver (C++ / libcurl / nlohmann-json): - WiFi mode: HTTP Alpaca via libcurl - USB mode: Alnitak serial via POSIX termios - LightBoxInterface + DustCapInterface + dew heater number property Python controller (PyQt6): - Dark-themed desktop app for direct manual control - AlpacaBackend (requests) + AlnitakBackend (pyserial) - PollWorker QThread; cover, brightness, dew heater panels - QSettings persistence; auto serial port discovery Docs: - system-diagram.svg, wiring-diagram.svg (browser-renderable SVG) - BUILD_NOTES.md with BOM, LM2596 calibration, power-on checklist - WIRING.md quick-reference, README.md, CHANGELOG.md
6.3 KiB
6.3 KiB
Changelog
All notable changes to this project are documented here.
Format follows Keep a Changelog.
1.1.0 — 2026-05-17
Added
Dew heater
- 12V PWM-controlled dew heater output on D5 via a second IRLZ44N MOSFET
applyDewHeater(int pct)firmware function maps 0–100% to 8-bit LEDC PWM- Non-standard Alpaca GET/PUT endpoint
dewheaterfor direct polling and control by the Python app and INDI driver - Dew heater exposed as
SupportedActionsentriesSetDewHeater/GetDewHeaterfor full Alpaca Action compatibility - Custom Alnitak extension commands:
>T(set percent) />U(get percent) - Dew heater number property in the INDI driver (
MAIN_CONTROL_TAB) - Dew heater slider + On/Off buttons in the Python controller
USB / Alnitak serial mode
- Full implementation of the Alnitak Flip-Flat serial protocol on the ESP32 USB CDC port (9600 baud)
- Supports all standard Alnitak commands:
Pping,Sstate,B/Jbrightness set/get,L/Dlight on/off,O/C/Hcover open/close/halt - Compatible with N.I.N.A., Sequence Generator Pro, Astro Photography Tool, and INDI
indi_flipflatout of the box — no additional driver required SERIAL_DEBUGcompile flag inconfig.h: setfalseto silence all debug output and use the serial line exclusively for the Alnitak protocol- Serial baud rate set to 9600 to match all consumer Alnitak software defaults
Python desktop controller (controller/flatpanel_controller.py)
- Dark-themed PyQt6 application suitable for night-time observatory use
- Supports both WiFi/Alpaca and USB/Alnitak connection modes selectable at runtime
AlpacaBackend— HTTP viarequests.Session, full Alpaca property access including customdewheaterendpointAlnitakBackend—pyserialserial communication with timeout handling and response validationPollWorker—QThreadsubclass polling device state every 1 second without blocking the GUI- Cover panel: status dot (colour-coded by state), Open / Close / Halt buttons
- Flat panel: brightness slider linked bidirectionally to a spinbox, Light On/Off
- Dew heater panel: power slider (0–100%), Heater On/Off, live % status indicator
- Scrolling, timestamped log panel (500-line cap)
QSettingspersistence for connection mode, host, port, serial port, last brightness, last dew %- Auto-discovery of available serial ports with refresh button
requirements.txtadded:PyQt6,requests,pyserial
INDI driver enhancements
- USB serial mode added alongside existing WiFi/Alpaca mode; switchable via a
Connection Modeswitch property in the driver UI - Serial port text property (
/dev/ttyUSB0default) shown when USB mode is selected - POSIX serial port implementation using
termios/selectwith 2-second read timeout - Alnitak helper methods:
openSerial,closeSerial,sendAlnitak,alnitakGetBrightness,alnitakSetBrightness,alnitakGetCoverState,alnitakGetDewPercent,alnitakSetDewPercent DewHeaterNPnumber property (0–100%, step 5) exposed inMAIN_CONTROL_TAB- Dew heater control routes through Alpaca
dewheaterPUT (WiFi) or custom Alnitak>T(USB)
Documentation
docs/system-diagram.svg— architecture block diagram (800×520, browser-renderable SVG)docs/wiring-diagram.svg— colour-coded component wiring diagram (960×640, browser-renderable SVG), includes build-order warning panel and legenddocs/BUILD_NOTES.md— full step-by-step assembly guide with BOM, dew heater sizing table, LM2596 calibration procedure, MOSFET wiring, 7-step first power-on checklist, software setup for all platforms, and troubleshooting table
Changed
Serial.begin()baud rate changed from115200to 9600 to match Alnitak software defaults (USB CDC baud rate is virtual and has no real-world effect, but driver compatibility requires this)supportedactionsendpoint now returns["SetDewHeater", "GetDewHeater"]instead of an empty arraydescriptionendpoint updated to mention dew heaterdriverversionbumped to1.1.0- WIRING.md updated: second MOSFET added to wiring diagram, dew heater element sizing table, USB/WiFi mode comparison table, pin summary table, PSU rating increased from ≥3A to ≥4A
Fixed
- Cover
haltcoverAlpaca route now correctly reads current servo position viacoverServo.read()before holding, preventing a potential servo jitter on halt
1.0.0 — 2026-05-17
Initial release.
Added
Firmware
- ASCOM Alpaca
CoverCalibratordevice type implemented natively on the ESP32 (no PC-side COM driver needed) - All standard
CoverCalibratorproperties and methods:- GET:
coverstate,calibratorstate,brightness,maxbrightness,connected,name,description,driverinfo,driverversion,interfaceversion,supportedactions - PUT:
connected,calibratoron(withBrightnessparameter),calibratoroff,opencover,closecover,haltcover
- GET:
- MG995 servo cover mechanism on D9; non-blocking state machine with configurable movement timeout (
COVER_MOVE_TIMEOUT_MS) - 8-bit LED brightness PWM on D3 via LEDC channel 0 (5kHz, above visible flicker)
- WiFi connection with 30-second boot timeout and 10-second watchdog reconnect loop
- mDNS advertising as
esp32-flatpanel.localwith_alpaca._tcpservice record - Alpaca UDP discovery on port 32227 — responds to
alpacadiscovery1broadcasts with{"AlpacaPort":11111} config.hwith all user-configurable settings in one place
INDI driver (WiFi / Alpaca mode)
INDI::DefaultDevice+INDI::LightBoxInterface+INDI::DustCapInterfaceAlpacaBackendusinglibcurlfor HTTP,nlohmann/jsonfor response parsing- 1-second state polling via
TimerHit() LightBoxInterface:SetLightBoxBrightness(),EnableLightBox()wired to Alpacacalibratoron/calibratoroffDustCapInterface:ParkCap()→closecover,UnParkCap()→opencover- Host / port text properties in
CONNECTION_TAB - INDI device XML descriptor for indiserver auto-registration
CMakeLists.txtwithFetchContentfallback fornlohmann_json
Documentation
WIRING.md— wiring diagram, BOM, component roles, MOSFET pinout, servo colour codes, ASCOM and INDI setup instructions