; Flipdot display - one PlatformIO project, two firmware targets. ; ; nano Arduino Nano that drives the Brose flipdot panels directly (USB upload) ; nano_ota Same Nano firmware, flashed over WiFi through the ESP32 ; esp32 ESP32 "brain" (WiFi, NTP clock, Home Assistant) - OTA upload ; esp32_usb Same ESP32 firmware, flashed over USB into ota_0 ; recovery ESP32 recovery app (WiFi setup + OTA), USB only, see README.md ; test_nano Unit tests for the Nano firmware, run on the PC (needs gcc on PATH) ; test_esp32 Unit tests for the ESP32 logic, run on the PC ; ; Build all: pio run ; Build one: pio run -e nano ; Upload one: pio run -e nano -t upload ; Serial monitor: pio device monitor -e nano ; Run tests: pio test -e test_nano -e test_esp32 ; ; https://docs.platformio.org/page/projectconf.html [platformio] default_envs = nano, esp32 [env] framework = arduino monitor_speed = 115200 lib_deps = adafruit/Adafruit GFX Library@^1.10.12 ; Tests only run in the test_* environments on the PC, never on the boards test_ignore = * ; --------------------------------------------------------------------------- ; Arduino Nano - display driver ; --------------------------------------------------------------------------- [env:nano] platform = atmelavr board = nanoatmega328 board_build.mcu = atmega328p board_build.f_cpu = 16000000L build_src_filter = + ; Uncomment when using the PLCC adapter board (different pinout, see lib/BROSE9323/BROSE9323.h) ; build_flags = -D FLIPDOT_PLCC_ADAPTER upload_port = COM10 monitor_port = COM10 ; Same Nano firmware, flashed over WiFi through the ESP32 (see README.md). ; Needs the Nano TX -> ESP32 GPIO 16 wire. upload_port = ESP32 IP[:port], default port 2323. ; --baud: bootloader baud rate. auto tries 57600 (old bootloader), then 115200 (Optiboot). [env:nano_ota] extends = env:nano upload_protocol = custom upload_port = 10.1.1.198 upload_flags = --baud=auto upload_command = "$PYTHONEXE" "$PROJECT_DIR/tools/nano_net_upload.py" "$SOURCE" $UPLOAD_PORT $UPLOAD_FLAGS ; --------------------------------------------------------------------------- ; ESP32 - controller, talks to the Nano over serial ; --------------------------------------------------------------------------- [esp32_common] platform = espressif32 board = esp32doit-devkit-v1 ; factory = recovery app, ota_0 / ota_1 = clock firmware (see partitions.csv) board_build.partitions = partitions.csv monitor_port = COM18 [env:esp32] extends = esp32_common build_src_filter = + ; Size check against the ota slots, not the (smaller) factory partition board_build.app_partition_name = ota_0 ; ESPSERIAL turns the BROSE9323 driver into a serial client: every draw call is ; sent to the Nano as a text command instead of toggling GPIO pins. build_flags = -D ESPSERIAL -I src/esp32 lib_deps = ${env.lib_deps} dawidchyrzynski/home-assistant-integration@^2.1.0 bblanchon/ArduinoJson@^7.0.0 knolleary/PubSubClient@^2.8.0 upload_protocol = espota upload_port = 10.1.1.198 ; USB upload of the clock firmware: written to ota_0, never over the recovery app [env:esp32_usb] extends = env:esp32 upload_protocol = esptool upload_port = COM18 board_upload.offset_address = 0x110000 ; --------------------------------------------------------------------------- ; ESP32 recovery app (src/recovery) in the factory partition: WiFi setup page + OTA. ; One-time install over USB, see README.md "Recovery app". ; --------------------------------------------------------------------------- [env:recovery] extends = esp32_common build_src_filter = + + + + + + + ; ESPSERIAL: status messages are sent to the Nano like in the clock firmware build_flags = -D ESPSERIAL -I src/esp32 upload_protocol = esptool upload_port = COM18 ; --------------------------------------------------------------------------- ; Unit tests on the PC (pio test -e test_nano -e test_esp32) ; --------------------------------------------------------------------------- [native] platform = native framework = lib_deps = lib_ignore = BROSE9323 test_ignore = test_build_src = yes ; Nano firmware (test/test_nano). The Arduino core, EEPROM and the display driver are ; replaced by test/mocks. [env:test_nano] extends = native test_filter = test_nano build_src_filter = + ; test/mocks first: its BROSE9323.h replaces the driver, dot_sequence.h is the real one build_flags = -std=gnu++17 -I test/mocks -I lib/BROSE9323 ; ESP32 logic (test/test_esp32): only the modules without Arduino dependencies [env:test_esp32] extends = native test_filter = test_esp32 build_src_filter = + build_flags = -std=gnu++17 -I src/esp32