EXAMPLE_USAGE.md # ESPHome Nixie Tube Display Component This is a custom ESPHome component for controlling a 6-digit nixie tube display with SPI interface. ## Installation 1. Copy the `esphome_component` folder to your ESPHome custom components directory: ``` ~/.esphome/custom_components/nixie_display/ ``` 2. The component should have: - `__init__.py` - Component configuration - `nixie_display.h` - Header file - `nixie_display.cpp` - Implementation ## Configuration Add to your ESPHome YAML: ```yaml spi: id: nixie_spi clk_pin: GPIO18 mosi_pin: GPIO23 miso_pin: GPIO19 display: - platform: nixie_display id: nixie spi_id: nixie_spi anode0_pin: GPIO5 anode1_pin: GPIO13 anode2_pin: GPIO17 le_pin: GPIO22 # Lambda to update display with time lambda: |- it.display_text("000000"); // Display as string of 6 digits text_sensor: - platform: homeassistant id: time_display entity_id: sensor.time ``` ## Features - **6 Nixie Tubes**: Organized as 3 anode sets of 2 tubes each - **SPI Control**: Fast serial interface for cathode control - **Anti-poisoning**: Implements digit cycling to prevent cathode poisoning - **Text Display**: Can display any 6-character string of digits - **60 Hz Refresh Rate**: Smooth flicker-free display ## Pin Configuration - `anode0_pin`: Controls first tube pair (digits 0-1) - `anode1_pin`: Controls second tube pair (digits 2-3) - `anode2_pin`: Controls third tube pair (digits 4-5) - `le_pin`: Latch Enable pin for SPI data locking - SPI pins: CLK, MOSI, MISO (configured via SPI component) ## Display Format The display expects a 6-character string of digits (0-9): - Position 0-1: First anode set - Position 2-3: Second anode set - Position 4-5: Third anode set ## Usage Example ```yaml lambda: |- // Display current time auto time_obj = id(homeassistant_time).now(); if (time_obj.is_valid()) { char buf[7]; snprintf(buf, sizeof(buf), "%02d%02d%02d", time_obj.hour, time_obj.minute, time_obj.second); it.display_text(buf); } ``` ## Anti-Poisoning Feature Automatically enabled during transitions to cycle through digit values and prevent cathode poisoning that occurs with static displays. The algorithm: 1. Cycles all digits for 10 iterations 2. Then incrementally changes digits to target values 3. Total cycle takes ~20 iterations at the refresh rate