mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-09-26 20:18:04 +00:00
cvhviz. The M9's magnetometer was documented on the board and nothing had ever
talked to it. The driver is written from the datasheet's register map rather
than SensorLib, whose setOutputDataRate() writes the ODR into the OSR bits, and
the axis orientation is measured on hardware at four headings rather than
inherited from a declaration Meshtastic marks unverified and never uses. The
+-32 G range looks absurd for a 0.5 G planet until you measure the board's own
hard-iron bias at about 7x Earth's field.
Also carries several fixes found while testing on hardware: every Lua app opened
on a white page on keypad-nav boards (the focus highlight harvested the app body
as a target and reverse-video filled the page), a use-after-free in the Lua net
worker when an app closed mid-request, an unfreed http_get buffer, canvas pixel
buffers GC'd while LVGL still drew from them, one RTC I2C read per contact, and
map re-open costing 2.5 s on every visit.
Three changes on merge:
- The map tile-keep gate read `total && total < 4 MB`, so a board reporting
zero PSRAM -- the most constrained case there is -- landed on the roomy side
of the test and kept its tiles. Dropped the non-zero guard.
- gpscompass is 55 KB of Lua, more than every other app combined, and it wants
a magnetometer the seeded boards do not have. The author deliberately left
it out of lua_builtin.h; that intent now lives in the catalog as
"seed": false rather than in whether someone remembers to regenerate, since
the generator runs from a pre-build hook as of this branch.
- consoleModeToggleCb was defined inside a !HAS_TANMATSU region while the
Settings row that binds it compiles on every board, so the Tanmatsu link
broke. Moved it out. The console boot path is gated on CAP_CONSOLE alone, so
the switch now does what it says there too.
Built on all seven S3 envs plus both ESP32-P4 targets.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1587 lines
58 KiB
INI
1587 lines
58 KiB
INI
; wadamesh — Heltec V4 TFT touch firmware.
|
|
; Standalone PlatformIO project: the MeshCore core is consumed as a library
|
|
; (lib/MeshCore here; a git-tagged fork once published). This env is the flattened
|
|
; equivalent of meshcomod's heltec_v4_tft_companion_radio_usb_tcp_touch.
|
|
|
|
[platformio]
|
|
default_envs =
|
|
heltec_v4_tft_companion_radio_usb_tcp_touch
|
|
LilyGo_TDeck_companion_radio_touch
|
|
ThinkNode_M9_companion_radio_touch
|
|
|
|
[env:heltec_v4_tft_companion_radio_usb_tcp_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = heltec_v4
|
|
monitor_speed = 115200
|
|
board_build.partitions = partitions_tft_touch.csv
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, merge-bin.py
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
; NOTE: tried -D ARDUINO_USB_MODE=1 (HW-CDC, drops unused TinyUSB MSC/DFU ≈ 12 KB internal
|
|
; DRAM) — but on the real V4 the binary companion link regressed: small per-message frames
|
|
; arrived yet the larger device-profile frame (node name + keys) dropped bytes over HW-CDC's
|
|
; smaller TX FIFO. Reverted to the board JSON's TinyUSB CDC. Revisit only with an HW-CDC TX
|
|
; buffer/DTR-wait fix verified on hardware. (T-Deck ships MODE=1 and is fine — board-specific.)
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
-D ESP32_PLATFORM
|
|
; --- sensors ---
|
|
-D ENV_INCLUDE_GPS=1
|
|
-D ENV_INCLUDE_AHTX0=1
|
|
-D ENV_INCLUDE_BME280=1
|
|
-D ENV_INCLUDE_BMP280=1
|
|
-D ENV_INCLUDE_SHTC3=1
|
|
-D ENV_INCLUDE_SHT4X=1
|
|
-D ENV_INCLUDE_LPS22HB=1
|
|
-D ENV_INCLUDE_INA3221=1
|
|
-D ENV_INCLUDE_INA219=1
|
|
-D ENV_INCLUDE_INA226=1
|
|
-D ENV_INCLUDE_INA260=1
|
|
-D ENV_INCLUDE_MLX90614=1
|
|
-D ENV_INCLUDE_VL53L0X=1
|
|
-D ENV_INCLUDE_BME680=1
|
|
-D ENV_INCLUDE_BMP085=1
|
|
; --- Heltec LoRa32 V4 board ---
|
|
-I variants/heltec_v4
|
|
-D HELTEC_LORA_V4
|
|
-D USE_SX1262
|
|
-D ESP32_CPU_FREQ=80
|
|
-D RADIO_CLASS=CustomSX1262
|
|
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
|
-D P_LORA_TX_LED=35
|
|
-D P_LORA_DIO_1=14
|
|
-D P_LORA_NSS=8
|
|
-D P_LORA_RESET=12
|
|
-D P_LORA_BUSY=13
|
|
-D P_LORA_SCLK=9
|
|
-D P_LORA_MISO=11
|
|
-D P_LORA_MOSI=10
|
|
-D P_LORA_PA_POWER=7
|
|
-D P_LORA_PA_EN=2
|
|
-D P_LORA_PA_TX_EN=46
|
|
-D P_LORA_GC1109_PA_EN=2
|
|
-D P_LORA_GC1109_PA_TX_EN=46
|
|
-D P_LORA_KCT8103L_PA_CSD=2
|
|
-D P_LORA_KCT8103L_PA_CTX=5
|
|
-D PIN_USER_BTN=0
|
|
-D PIN_VEXT_EN=36
|
|
-D PIN_VEXT_EN_ACTIVE=HIGH
|
|
-D LORA_TX_POWER=10
|
|
-D MAX_LORA_TX_POWER=22
|
|
-D SX126X_REGISTER_PATCH=1
|
|
-D SX126X_DIO2_AS_RF_SWITCH=true
|
|
-D SX126X_DIO3_TCXO_VOLTAGE=1.8
|
|
-D SX126X_CURRENT_LIMIT=140
|
|
-D SX126X_RX_BOOSTED_GAIN=1
|
|
-D PIN_GPS_RX=38
|
|
-D PIN_GPS_TX=39
|
|
-D PIN_GPS_RESET=42
|
|
-D PIN_GPS_RESET_ACTIVE=LOW
|
|
-D PIN_GPS_EN=34
|
|
-D PIN_GPS_EN_ACTIVE=LOW
|
|
-D PIN_ADC_CTRL=37
|
|
-D PIN_VBAT_READ=1
|
|
; --- TFT ---
|
|
-D HELTEC_LORA_V4_TFT
|
|
-D PIN_BOARD_SDA=4
|
|
-D PIN_BOARD_SCL=3
|
|
-D DISPLAY_ROTATION=2
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
-D PIN_TFT_RST=18
|
|
-D PIN_TFT_VDD_CTL=-1
|
|
-D PIN_TFT_LEDA_CTL=21
|
|
-D PIN_TFT_LEDA_CTL_ACTIVE=HIGH
|
|
-D PIN_TFT_CS=15
|
|
-D PIN_TFT_DC=16
|
|
-D PIN_TFT_SCL=17
|
|
-D PIN_TFT_SDA=33
|
|
; --- CHSC6x cap touch ---
|
|
-D HAS_HELTEC_V4_CAP_TOUCH=1
|
|
-D PIN_TOUCH_SDA=47
|
|
-D PIN_TOUCH_SCL=48
|
|
-D PIN_TOUCH_RST=44
|
|
-D HELTEC_V4_BUZZER_PIN=6
|
|
; --- touch UI / companion stack ---
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
; Heltec V4 Expansion Kit: local environment sensors UI (Sensors tab, Home env
|
|
; widget, Local-Sensors page). Board-gated — only this env compiles it.
|
|
-D HAS_EXPANSION_KIT=1
|
|
-D FIRMWARE_OTA_ENV='"heltec_v4_tft_companion_radio_usb_tcp_touch"'
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
; Smoother scroll: lower deceleration than LVGL's default (10) so flicks glide
|
|
; longer instead of stopping abruptly. lv_conf leaves this unset, so this -D wins.
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D USER_SETUP_LOADED=1
|
|
-D ST7789_DRIVER=1
|
|
-D TFT_WIDTH=240
|
|
-D TFT_HEIGHT=320
|
|
-D TFT_MOSI=33
|
|
-D TFT_SCLK=17
|
|
-D TFT_CS=15
|
|
-D TFT_DC=16
|
|
-D TFT_RST=18
|
|
-D TFT_MISO=-1
|
|
-D SPI_FREQUENCY=80000000
|
|
-D TFT_RGB_ORDER=TFT_RGB
|
|
-D TFT_INVERSION_ON=1
|
|
-D TFT_BL=21
|
|
-D TFT_BACKLIGHT_ON=1
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D DISPLAY_CLASS=ST7789LCDDisplay
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/heltec_v4/*.cpp>
|
|
|
|
lib_deps =
|
|
; MeshCore core = the meshcomod monorepo built as a lib, pinned by tag.
|
|
; Touch-app files (TouchPrefsStore, WifiRuntimeStore, transports, ...) are
|
|
; vendored in this app's src/ and dropped from the lib via -DMC_VENDORED_TOUCH_APP.
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
|
https://github.com/Quency-D/chsc6x/archive/5cbead829d6b432a8d621ed1aafd4eb474fd4f27.zip
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
bodmer/TFT_eSPI @ ^2.5.43
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|
|
|
|
; ======================================================================
|
|
; Heltec WiFi LoRa 32 V4-R8 (ESP32-S3R8, 8 MB OCTAL PSRAM) + Expansion Kit V2.
|
|
; Inherits the V4 TFT env and overrides ONLY the R8 deltas. The 8 MB octal PSRAM
|
|
; claims GPIO33-37, so Heltec moved every control signal off them and the V2
|
|
; expansion put the TFT on a hardware-SPI bus SHARED with a new micro-SD slot:
|
|
; Vext 36->40 (now active-LOW) · GPS_EN 34->42 · LED 35->46 · ADC_Ctrl removed
|
|
; TFT (LovyanGFX HW-SPI): MOSI=15 SCK=16 MISO=45 CS=47 DC=48 RST=21 BL=44
|
|
; touch (CHSC6x, shares board I2C on 17/18) · micro-SD (shared TFT SPI, CS=3)
|
|
; The build defines HELTEC_LORA_V4_TFT too, so it reuses ALL the V4 touch-UI code;
|
|
; HELTEC_LORA_V4_R8 gates only the deltas. USB stays TinyUSB-CDC (USB_MODE=0) like
|
|
; the V4 — HW-CDC regresses the companion link on this family (see the V4 note).
|
|
; UNTESTED (no hardware yet) — pin sources: Meshtastic heltec_v4_r8 variant +
|
|
; Heltec V4-R8 pinmap + Expansion_board_V2.03 schematic. On-device TODO: confirm
|
|
; the CHSC6x shares Wire on 17/18, the SD_CS=3 read, and the V2 PAM8904 buzzer.
|
|
; ======================================================================
|
|
[env:heltec_v4_r8_tft_companion_radio_usb_tcp_touch]
|
|
extends = env:heltec_v4_tft_companion_radio_usb_tcp_touch
|
|
board = heltec_v4_r8
|
|
; Own filter (not inherited): the R8's DISPLAY_CLASS is OUR LGFXDisplay, so the UIColor
|
|
; palette must be a project object (UIColorPalette.cpp) -- otherwise the linker pulls the
|
|
; core's same-named LGFXDisplay.o from the archive for UIColor and every method collides.
|
|
; (The base V4 env must NOT compile the palette: its core ST7789LCDDisplay.o carries one.)
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
+<helpers/ui/UIColorPalette.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/heltec_v4/*.cpp>
|
|
build_flags =
|
|
${env:heltec_v4_tft_companion_radio_usb_tcp_touch.build_flags}
|
|
; --- V4-R8 deltas (later -D wins on the GCC command line) ---
|
|
-D HELTEC_LORA_V4_R8
|
|
; Boot at the S3's full clock. The base env's ESP32_CPU_FREQ=80 is applied in
|
|
; ESP32Board::begin(), so ALL of setup() — radio init, the SD mount ladder, the
|
|
; store load, mesh begin, Wi-Fi bring-up — ran at a third speed until UITask::begin
|
|
; bumped it to 240. The screen-off DFS drop to 80 MHz (setCpuForScreen) is unaffected.
|
|
-D ESP32_CPU_FREQ=240
|
|
; micro-SD operating clock (perf pass 2026-08-20): after the conservative 4 MHz mount
|
|
; succeeds, re-begin at this clock with a directory + file READ verify and fall back
|
|
; to 4 MHz if it fails (include/SdFastClock.h). The same traces already carry the
|
|
; display at 80 MHz, and the card is the primary store on this board (contacts, chat
|
|
; history, sync log) — 4 MHz was the M9 ladder's value, never re-tuned here.
|
|
-D SD_SPI_FAST_HZ=20000000
|
|
-D P_LORA_TX_LED=46
|
|
-D PIN_VEXT_EN=40
|
|
-D PIN_VEXT_EN_ACTIVE=LOW
|
|
-D PIN_GPS_EN=42
|
|
-D PIN_GPS_RESET=-1
|
|
; GPS pins probed on real hardware 2026-08-19: with EN active-LOW asserted
|
|
; the module streams NMEA on GPIO39 (~6.9k edges/3 s); GPIO38 is silent.
|
|
; NAMING TRAP: EnvironmentSensorManager does Serial1.setPins(PIN_GPS_TX,
|
|
; PIN_GPS_RX) and Arduino's first setPins arg is OUR RX — i.e. the
|
|
; PIN_GPS_TX macro is the pin we RECEIVE on (module's TX). So the module's
|
|
; TX=GPIO39 belongs in PIN_GPS_TX, matching the inherited plain-V4 values.
|
|
; Restated explicitly here (with this note) so nobody "fixes" the apparent
|
|
; swap again. EN polarity active-LOW also hardware-confirmed.
|
|
-D PIN_GPS_RX=38
|
|
-D PIN_GPS_TX=39
|
|
-D PIN_ADC_CTRL=-1
|
|
-D ADC_MULTIPLIER=5.07
|
|
; TFT on hardware SPI (LovyanGFX), shared with the micro-SD
|
|
-D DISPLAY_CLASS=LGFXDisplay
|
|
-D PIN_TFT_RST=21
|
|
-D PIN_TFT_LEDA_CTL=44
|
|
-D PIN_TFT_CS=47
|
|
-D PIN_TFT_DC=48
|
|
-D PIN_TFT_SCL=16
|
|
-D PIN_TFT_SDA=15
|
|
-D PIN_TFT_MISO=45
|
|
; TFT_eSPI mirror (kept in sync though LovyanGFX drives the panel)
|
|
-D TFT_MOSI=15
|
|
-D TFT_SCLK=16
|
|
-D TFT_MISO=45
|
|
-D TFT_CS=47
|
|
-D TFT_DC=48
|
|
-D TFT_RST=21
|
|
-D TFT_BL=44
|
|
; touch (CHSC6x) + board I2C unified on GPIO17/18; micro-SD chip-select
|
|
-D PIN_TOUCH_SDA=17
|
|
-D PIN_TOUCH_SCL=18
|
|
; RST=-1 ON PURPOSE (tester repro fix): the Expansion V2 wires the CHSC6x reset to GPIO21 — the
|
|
; SAME line as the ST7789 reset. The chsc6x driver hard-pulses its RST at init (+3 retry sites),
|
|
; which RESET the LCD mid-boot and wiped its init: logo OK -> screen black -> white/garbled rows
|
|
; on any redraw. The LGFX display init already resets both chips via pin 21; the touch driver must
|
|
; never drive it (-1 = every pulse in chsc6x_platform no-ops).
|
|
-D PIN_TOUCH_RST=-1
|
|
-D PIN_TOUCH_INT=43
|
|
-D PIN_BOARD_SDA=17
|
|
-D PIN_BOARD_SCL=18
|
|
-D PIN_SD_CS=3
|
|
; Buzzer: the Expansion Kit V2 integrates a piezo behind a PAM8904 driver (U9). Per Heltec's
|
|
; Expansion_board_V2.03.pdf schematic: DIN = net "4" = GPIO4 (P2 header pin 15); EN1/EN2 are
|
|
; NOT GPIOs -- strapped high via 10K pull-ups (3x boost, always enabled) with DIP switch SW1
|
|
; on the expansion board as a HARDWARE MUTE (closed = EN grounded = silent). So the stock V4
|
|
; tone() chime works as-is on DIN. If a tester still hears nothing: check SW1 on their kit.
|
|
-D HELTEC_V4_BUZZER_PIN=4
|
|
-D FIRMWARE_OTA_ENV='"heltec_v4_r8_tft_companion_radio_usb_tcp_touch"'
|
|
lib_deps =
|
|
${env:heltec_v4_tft_companion_radio_usb_tcp_touch.lib_deps}
|
|
lovyan03/LovyanGFX@1.2.21
|
|
|
|
; ======================================================================
|
|
; Attaky Mesh Series: `pio run -e attaky_mesh_series_companion_radio_touch`.
|
|
; ======================================================================
|
|
[env:attaky_mesh_series_companion_radio_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = attaky_mesh_series
|
|
monitor_speed = 115200
|
|
board_build.partitions = partitions_tft_touch.csv
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, merge-bin.py
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
-D LORA_FREQ=910.525
|
|
-D LORA_BW=250
|
|
-D LORA_SF=7
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
-D ESP32_PLATFORM
|
|
-D ENV_INCLUDE_GPS=1
|
|
; 0x38 is the FT6636 touch controller, not an AHT10/20. The Adafruit probe
|
|
; mis-detects it as a sensor and can hang boot on its register 0xBA, so keep off.
|
|
-D ENV_INCLUDE_AHTX0=0
|
|
-D ENV_INCLUDE_BME280=1
|
|
-D ENV_INCLUDE_BMP280=1
|
|
-D ENV_INCLUDE_SHTC3=1
|
|
-D ENV_INCLUDE_SHT4X=1
|
|
-D ENV_INCLUDE_LPS22HB=1
|
|
-D ENV_INCLUDE_INA3221=1
|
|
-D ENV_INCLUDE_INA219=1
|
|
-D ENV_INCLUDE_INA226=1
|
|
-D ENV_INCLUDE_INA260=1
|
|
; 0x5A is the keyboard module's AW9523 (left half), not an MLX90614.
|
|
-D ENV_INCLUDE_MLX90614=0
|
|
-D ENV_INCLUDE_VL53L0X=1
|
|
-D ENV_INCLUDE_BME680=1
|
|
-D ENV_INCLUDE_BMP085=1
|
|
-I variants/attaky_mesh_series
|
|
-D ATTAKY_MESH_SERIES
|
|
-D HAS_ATTAKY_MESH_KEYBOARD=1
|
|
-D USE_SX1262
|
|
-D ESP32_CPU_FREQ=80
|
|
-D RADIO_CLASS=CustomSX1262
|
|
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
|
-D P_LORA_DIO_1=21
|
|
-D P_LORA_NSS=8
|
|
-D P_LORA_RESET=9
|
|
-D P_LORA_BUSY=16
|
|
-D P_LORA_SCLK=5
|
|
-D P_LORA_MISO=7
|
|
-D P_LORA_MOSI=6
|
|
-D PIN_USER_BTN=0
|
|
-D LORA_TX_POWER=10
|
|
-D MAX_LORA_TX_POWER=22
|
|
-D SX126X_REGISTER_PATCH=1
|
|
-D SX126X_DIO2_AS_RF_SWITCH=true
|
|
; Ra-01SH clocks the SX1262 from a 32 MHz crystal, not a TCXO, so DIO3 is not a
|
|
; TCXO supply. Must be 0 explicitly: std_init() defaults to 1.6 V otherwise.
|
|
-D SX126X_DIO3_TCXO_VOLTAGE=0
|
|
-D SX126X_CURRENT_LIMIT=140
|
|
-D SX126X_RX_BOOSTED_GAIN=1
|
|
-D PIN_GPS_RX=18
|
|
-D PIN_GPS_TX=17
|
|
; EnvironmentSensorManager reads GPS_BAUD_RATE, not GPS_BAUD.
|
|
-D GPS_BAUD_RATE=9600
|
|
; ATGM336H cold-start can exceed the 1 s probe window. Without this the probe
|
|
; gives up and start_gps() never runs, so GPS reads on but nothing is parsed.
|
|
-D ENV_SKIP_GPS_DETECT=1
|
|
; Keep the base rotation portrait; UITask applies the landscape transform.
|
|
-D PIN_BOARD_SDA=2
|
|
-D PIN_BOARD_SCL=1
|
|
-D DISPLAY_ROTATION=2
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
-D PIN_TFT_RST=10
|
|
-D PIN_TFT_VDD_CTL=-1
|
|
-D PIN_TFT_LEDA_CTL=14
|
|
-D PIN_TFT_LEDA_CTL_ACTIVE=HIGH
|
|
-D PIN_TFT_CS=45
|
|
-D PIN_TFT_DC=12
|
|
-D PIN_TFT_SCL=11
|
|
-D PIN_TFT_SDA=13
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
-D FIRMWARE_OTA_ENV='"attaky_mesh_series_companion_radio_touch"'
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D USER_SETUP_LOADED=1
|
|
-D ST7789_DRIVER=1
|
|
-D TFT_WIDTH=240
|
|
-D TFT_HEIGHT=320
|
|
-D TFT_MOSI=13
|
|
-D TFT_SCLK=11
|
|
-D TFT_CS=45
|
|
-D TFT_DC=12
|
|
-D TFT_RST=10
|
|
-D TFT_MISO=-1
|
|
-D SPI_FREQUENCY=80000000
|
|
-D TFT_RGB_ORDER=TFT_RGB
|
|
-D TFT_INVERSION_ON=1
|
|
-D TFT_BL=14
|
|
-D TFT_BACKLIGHT_ON=1
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D DISPLAY_CLASS=ST7789LCDDisplay
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
; The Attaky driver provides the shared touch API.
|
|
-<helpers/input/TDeckTouch.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/attaky_mesh_series/*.cpp>
|
|
|
|
lib_deps =
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
|
https://github.com/Quency-D/chsc6x/archive/5cbead829d6b432a8d621ed1aafd4eb474fd4f27.zip
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
bodmer/TFT_eSPI @ ^2.5.43
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|
|
|
|
; ======================================================================
|
|
; LilyGo T-Deck / T-Deck Plus — flattened equivalent of meshcomod's
|
|
; LilyGo_TDeck_companion_radio_touch. ST7789 via Adafruit (not TFT_eSPI);
|
|
; GT911 touch + matrix keyboard + trackball; sensors off except GPS.
|
|
; ======================================================================
|
|
[env:LilyGo_TDeck_companion_radio_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = t-deck
|
|
monitor_speed = 115200
|
|
board_build.partitions = variants/lilygo_tdeck/partitions_tdeck_touch.csv
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, merge-bin.py
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
-D ESP32_PLATFORM
|
|
; --- T-Deck board ---
|
|
-I variants/lilygo_tdeck
|
|
-D LILYGO_TDECK
|
|
-D BOARD_HAS_PSRAM=1
|
|
; 0 = silence ARDUHAL [E] spam (benign vfs_api cache-miss "no permits for
|
|
; creation" + Preferences nvs_open NOT_FOUND on first-namespace-access) that
|
|
; also pollutes the USB-CDC companion stream. Our own Serial.printf logs stay.
|
|
-D CORE_DEBUG_LEVEL=0
|
|
-D ARDUINO_USB_CDC_ON_BOOT=1
|
|
-D PIN_USER_BTN=0
|
|
-D PIN_PERF_POWERON=10
|
|
-D USE_SX1262
|
|
-D RADIO_CLASS=CustomSX1262
|
|
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
|
-D LORA_TX_POWER=22
|
|
; The T-Deck's SX1262 antenna (TX/RX) switch is driven by DIO2 — this MUST be
|
|
; true. With it false, setDio2AsRfSwitch(false) leaves the switch uncontrolled,
|
|
; so on TX the +22 dBm PA is never routed to the antenna (~16 dB loss -> ~4 mW).
|
|
; That was issue #6. (Meshtastic's T-Deck + the Heltec V4 here + every other
|
|
; MeshCore SX1262 variant use true; the T-Deck was the lone outlier.)
|
|
-D SX126X_DIO2_AS_RF_SWITCH=true
|
|
-D SX126X_CURRENT_LIMIT=140
|
|
-D SX126X_RX_BOOSTED_GAIN=1
|
|
-D SX126X_DIO3_TCXO_VOLTAGE=1.8f
|
|
-D P_LORA_DIO_1=45
|
|
-D P_LORA_NSS=9
|
|
-D P_LORA_RESET=17
|
|
-D P_LORA_BUSY=13
|
|
-D P_LORA_SCLK=40
|
|
-D P_LORA_MISO=38
|
|
-D P_LORA_MOSI=41
|
|
-D ENV_INCLUDE_GPS=1
|
|
-D ENV_SKIP_GPS_DETECT=1
|
|
-D ENV_INCLUDE_AHTX0=0
|
|
-D ENV_INCLUDE_BME280=0
|
|
-D ENV_INCLUDE_BMP280=0
|
|
-D ENV_INCLUDE_SHTC3=0
|
|
-D ENV_INCLUDE_SHT4X=0
|
|
-D ENV_INCLUDE_LPS22HB=0
|
|
-D ENV_INCLUDE_INA3221=0
|
|
-D ENV_INCLUDE_INA219=0
|
|
-D ENV_INCLUDE_INA226=0
|
|
-D ENV_INCLUDE_INA260=0
|
|
-D ENV_INCLUDE_MLX90614=0
|
|
-D ENV_INCLUDE_VL53L0X=0
|
|
-D ENV_INCLUDE_BME680=0
|
|
-D ENV_INCLUDE_BMP085=0
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
-D PIN_TFT_RST=-1
|
|
-D PIN_TFT_VDD_CTL=-1
|
|
-D PIN_TFT_LEDA_CTL=42
|
|
-D PIN_TFT_CS=12
|
|
-D PIN_TFT_DC=11
|
|
-D PIN_TFT_SCL=40
|
|
-D PIN_TFT_SDA=41
|
|
-D PIN_GPS_RX=43
|
|
-D PIN_GPS_TX=44
|
|
-D GPS_BAUD_RATE=38400
|
|
; --- touch UI / companion stack ---
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
-D FIRMWARE_OTA_ENV='"LilyGo_TDeck_companion_radio_touch"'
|
|
-D HAS_TDECK_GT911=1
|
|
-D HAS_TDECK_TRACKBALL=1
|
|
-D HAS_TDECK_KEYBOARD=1
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D PIN_TB_UP=15
|
|
-D PIN_TB_DOWN=3
|
|
-D PIN_TB_LEFT=2
|
|
-D PIN_TB_RIGHT=1
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
; Smoother scroll: lower deceleration than LVGL's default (10) so flicks glide
|
|
; longer instead of stopping abruptly. lv_conf leaves this unset, so this -D wins.
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D DISPLAY_CLASS=ST7789LCDDisplay
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/lilygo_tdeck/*.cpp>
|
|
|
|
lib_deps =
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|
|
|
|
[env:tlora_pager_lr1121_companion_radio_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = lilygo-t-lora-pager
|
|
monitor_speed = 115200
|
|
board_build.partitions = variants/lilygo_tlora_pager/partitions_tlora_pager_touch.csv
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, pre:scripts/build/patch_nimble_freertos_timer.py, merge-bin.py
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/SensorLib/src" ; same: TLoraPagerBoard.h needs XL9555/BQ27220
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/TFT_eSPI" ; same: pager target.h -> ST7796LCDDisplay.h -> TFT_eSPI.h
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
; LR11X0 stays IN (that's our radio family); SX126X isn't used by this env at all.
|
|
-D RADIOLIB_EXCLUDE_SX126X=1
|
|
-D ESP32_PLATFORM
|
|
; --- T-LoRa Pager board ---
|
|
-I variants/lilygo_tlora_pager
|
|
-D TLORA_PAGER=1
|
|
-D LV_FONT_MONTSERRAT_18=1
|
|
-D LV_FONT_MONTSERRAT_20=1
|
|
-D LV_FONT_MONTSERRAT_24=1
|
|
-D BOARD_HAS_PSRAM=1
|
|
; 0 = silence ARDUHAL [E] spam, same rationale as the other two envs.
|
|
-D CORE_DEBUG_LEVEL=0
|
|
-D ARDUINO_USB_CDC_ON_BOOT=1
|
|
-D PIN_USER_BTN=0
|
|
-D USE_LR1121=1
|
|
-D RADIO_CLASS=CustomLR1121
|
|
-D WRAPPER_CLASS=CustomLR1121Wrapper
|
|
; Full sub-GHz HP-PA power on boot, matching the T-Deck's own LORA_TX_POWER=22
|
|
; (not Heltec V4's conservative-10-then-raise-in-Settings pattern). +22dBm is
|
|
; this chip's real ceiling for freq < 1GHz -- confirmed against RadioLib's
|
|
; pinned LR1120::checkOutputPower() (LR1121 inherits it: HP PA auto-selects
|
|
; above 14dBm, valid range -9..22) and trail-mate's own
|
|
; TRAIL_MATE_LORA_TX_POWER_MAX_DBM=22 for this exact board -- not a guess
|
|
; carried over from the sibling boards. A weak default here (10dBm, ~16x less
|
|
; power) was silently degrading outbound range on real hardware: adverts/DMs
|
|
; sent FROM the pager were unreliable while inbound reception was fine, since
|
|
; the far node's own TX was unaffected.
|
|
-D LORA_TX_POWER=22
|
|
-D P_LORA_DIO_1=14
|
|
-D P_LORA_NSS=36
|
|
-D P_LORA_RESET=47
|
|
-D P_LORA_BUSY=48
|
|
-D P_LORA_SCLK=35
|
|
-D P_LORA_MISO=33
|
|
-D P_LORA_MOSI=34
|
|
-D ENV_INCLUDE_GPS=1
|
|
-D ENV_SKIP_GPS_DETECT=1
|
|
-D ENV_INCLUDE_AHTX0=0
|
|
-D ENV_INCLUDE_BME280=0
|
|
-D ENV_INCLUDE_BMP280=0
|
|
-D ENV_INCLUDE_SHTC3=0
|
|
-D ENV_INCLUDE_SHT4X=0
|
|
-D ENV_INCLUDE_LPS22HB=0
|
|
-D ENV_INCLUDE_INA3221=0
|
|
-D ENV_INCLUDE_INA219=0
|
|
-D ENV_INCLUDE_INA226=0
|
|
-D ENV_INCLUDE_INA260=0
|
|
-D ENV_INCLUDE_MLX90614=0
|
|
-D ENV_INCLUDE_VL53L0X=0
|
|
-D ENV_INCLUDE_BME680=0
|
|
-D ENV_INCLUDE_BMP085=0
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
; AW9364 backlight enable/pulse pin (ST7796LCDDisplay owns brightness -- see
|
|
; the CGRAM_OFFSET comment below for why this isn't a plain PWM pin).
|
|
-D PIN_TFT_LEDA_CTL=42
|
|
; Swapped vs. trail-mate's raw GPS_RX=4/GPS_TX=12: wadamesh's core calls
|
|
; Serial1.setPins(PIN_GPS_TX, PIN_GPS_RX), and HardwareSerial::setPins()
|
|
; takes (rxPin, txPin) -- so PIN_GPS_TX must be the ESP's own RX pin (4) and
|
|
; PIN_GPS_RX the ESP's own TX pin (12). See TLORA_PAGER_PORT.md Risk 1c.
|
|
-D PIN_GPS_RX=12
|
|
-D PIN_GPS_TX=4
|
|
-D GPS_BAUD_RATE=38400
|
|
; --- touch UI / companion stack ---
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
-D FIRMWARE_OTA_ENV='"tlora_pager_lr1121_companion_radio_touch"'
|
|
-D HAS_PAGER_KEYBOARD=1
|
|
-D HAS_PAGER_ENCODER=1
|
|
-D KB_INT=6
|
|
-D KB_BACKLIGHT=46
|
|
-D ROTARY_A=40
|
|
-D ROTARY_B=41
|
|
-D ROTARY_C=7
|
|
; ES8311 codec I2S pins (NS4150B amp downstream, enabled via XL9555
|
|
; AMP_EN -- see TLoraPagerBoard::setAmpEnabled()). Confirmed against the
|
|
; canonical arduino-esp32 pins_arduino.h for this board -- see
|
|
; TLORA_PAGER_PORT.md's Audio row.
|
|
-D PIN_I2S_MCLK=10
|
|
-D PIN_I2S_BCK=11
|
|
-D PIN_I2S_WS=18
|
|
-D PIN_I2S_DOUT=45
|
|
-D PIN_I2S_SDIN=17
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
; Smoother scroll: lower deceleration than LVGL's default (10) so flicks glide
|
|
; longer instead of stopping abruptly. lv_conf leaves this unset, so this -D wins.
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D DISPLAY_CLASS=ST7796LCDDisplay
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
; --- ST7796 display (TFT_eSPI) ---
|
|
-D USER_SETUP_LOADED=1
|
|
; USER_SETUP_LOADED bypasses TFT_eSPI's User_Setup.h, so opt the built-in
|
|
; 6x8 font back in explicitly. ST7796LCDDisplay's pre-LVGL text API uses
|
|
; font 1 for Remote UI URLs/buttons and fatal notices; without this define
|
|
; textWidth() returns 0 and print() draws nothing (bitmap/rects still work).
|
|
-D LOAD_GLCD=1
|
|
-D ST7796_DRIVER=1
|
|
; REQUIRED: this panel's 222px glass is narrower than the ST7796 controller's
|
|
; 320px GRAM. TFT_eSPI's ST7796_Rotation.h only applies the needed 49px
|
|
; column/row offset when this is defined (unlike ST7789, it isn't automatic
|
|
; for ST7796) -- ST7796LCDDisplay.cpp #errors at compile time without it.
|
|
-D CGRAM_OFFSET=1
|
|
; REQUIRED on ESP32-S3: TFT_eSPI_ESP32_S3.h's raw register macros (_spi_user,
|
|
; _spi_cmd, _spi_mosi_dlen -- used by begin_tft_write()/TFT_WRITE_BITS) take
|
|
; SPI_PORT and feed it straight into IDF's SPI_USER_REG(i)/REG_SPI_BASE(i),
|
|
; which only resolves to a real peripheral for i>=2 (SPI2/SPI3); i<2 returns
|
|
; base address 0. Leaving both USE_HSPI_PORT/USE_FSPI_PORT undefined makes
|
|
; that file fall back to SPI_PORT=FSPI, but FSPI is the *Arduino* enum value
|
|
; (0 on S3) rather than the raw IDF host index TFT_eSPI's own macros need --
|
|
; so _spi_user resolves to address 0x10, and the very first writecommand()
|
|
; in ST7796LCDDisplay::begin()/TFT_eSPI::init() hard-crashes with a
|
|
; StoreProhibited panic (confirmed on hardware: black screen, boot-looping
|
|
; "Guru Meditation Error" at TFT_eSPI::begin_tft_write()). USE_FSPI_PORT
|
|
; forces SPI_PORT=2 (real SPI2/"GPSPI2") consistently across both the raw
|
|
; macros and the SPIClass(FSPI) object TFT_eSPI constructs internally.
|
|
; USE_HSPI_PORT (real SPI3) is deliberately NOT used here instead: the
|
|
; radio's own `SPIClass spi` (variants/lilygo_tlora_pager/target.cpp) takes
|
|
; its default ctor arg (HSPI), which the Arduino core also maps to real
|
|
; SPI3 -- so picking HSPI for the display would put both peripherals on the
|
|
; same physical SPI host and conflict.
|
|
-D USE_FSPI_PORT=1
|
|
-D TFT_WIDTH=222
|
|
-D TFT_HEIGHT=480
|
|
-D TFT_MOSI=34
|
|
-D TFT_SCLK=35
|
|
-D TFT_CS=38
|
|
-D TFT_DC=37
|
|
-D TFT_RST=-1
|
|
-D TFT_MISO=33
|
|
-D TFT_BL=-1
|
|
; trail-mate's kPagerDisplaySpiClockMhz = 80.
|
|
-D SPI_FREQUENCY=80000000
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
+<helpers/ui/*.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/lilygo_tlora_pager/*.cpp>
|
|
|
|
lib_deps =
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|
|
bodmer/TFT_eSPI @ ^2.5.43
|
|
adafruit/Adafruit TCA8418 @ ^1.0.2
|
|
lewisxhe/SensorLib @ 0.3.3
|
|
|
|
; Milestone 10: SX1262-variant env for pager units sold with that radio instead
|
|
; of LR1121 -- same board JSON, same variant dir, same physical NSS/RESET/BUSY/
|
|
; DIO1/SCLK/MISO/MOSI pins (same PCB slot, just a different chip populated —
|
|
; see TLORA_PAGER_PORT.md's hardware-facts table). RADIO_CLASS/WRAPPER_CLASS
|
|
; swap to the core fork's CustomSX1262/CustomSX1262Wrapper, the exact same
|
|
; generic classes the T-Deck already uses -- see target.cpp's radio_init()
|
|
; for why no new radio C++ code was needed, just these build flags.
|
|
[env:tlora_pager_sx1262_companion_radio_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = lilygo-t-lora-pager
|
|
monitor_speed = 115200
|
|
board_build.partitions = variants/lilygo_tlora_pager/partitions_tlora_pager_touch.csv
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, pre:scripts/build/patch_nimble_freertos_timer.py, merge-bin.py
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/SensorLib/src" ; same: TLoraPagerBoard.h needs XL9555/BQ27220
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/TFT_eSPI" ; same: pager target.h -> ST7796LCDDisplay.h -> TFT_eSPI.h
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
; SX126X stays IN (that's this env's radio family); LR11X0 isn't used at all.
|
|
-D RADIOLIB_EXCLUDE_LR11X0=1
|
|
-D ESP32_PLATFORM
|
|
; --- T-LoRa Pager board (SX1262 variant) ---
|
|
-I variants/lilygo_tlora_pager
|
|
-D TLORA_PAGER=1
|
|
-D LV_FONT_MONTSERRAT_18=1
|
|
-D LV_FONT_MONTSERRAT_20=1
|
|
-D LV_FONT_MONTSERRAT_24=1
|
|
-D BOARD_HAS_PSRAM=1
|
|
; 0 = silence ARDUHAL [E] spam, same rationale as the other envs.
|
|
-D CORE_DEBUG_LEVEL=0
|
|
-D ARDUINO_USB_CDC_ON_BOOT=1
|
|
-D PIN_USER_BTN=0
|
|
-D USE_SX1262=1
|
|
-D RADIO_CLASS=CustomSX1262
|
|
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
|
; Same 22dBm ceiling as the LR1121 env -- trail-mate's own reference for this
|
|
; exact board (~/dev/trail-mate/boards/tlora_pager) uses the identical
|
|
; TRAIL_MATE_LORA_TX_POWER_MAX_DBM=22 for BOTH its LR1121 and SX1262 envs, and
|
|
; it's this chip's well-known real ceiling too.
|
|
-D LORA_TX_POWER=22
|
|
; SX126X_DIO2_AS_RF_SWITCH=true and SX126X_CURRENT_LIMIT=140 are carried over
|
|
; from the T-Deck's own SX1262 config -- NOT because this is the T-Deck, but
|
|
; because both are tied to the 22dBm target above, not to board-specific analog
|
|
; circuitry: RadioLib's own SX126x.cpp already defaults DIO2-as-switch to true
|
|
; internally (same value, just made explicit here), and its default current
|
|
; limit (60mA) is what silently capped the T-Deck's real TX power below its
|
|
; target before that env raised it to 140mA -- the same physics apply to any
|
|
; SX1262 module asked to reach 22dBm, not something unique to the T-Deck's PCB.
|
|
-D SX126X_DIO2_AS_RF_SWITCH=true
|
|
-D SX126X_CURRENT_LIMIT=140
|
|
-D SX126X_RX_BOOSTED_GAIN=1
|
|
; LilyGoLib's SX1262 transmit/receive examples for this exact Pager explicitly
|
|
; drive the module's DIO3 TCXO supply at 3.0 V. The generic CustomSX1262
|
|
; fallback is only 1.6 V; that can leave this board's oscillator outside its
|
|
; specified supply range while still working at very short range. Pass the
|
|
; board value into begin() so calibration and all later RX/TX use the correct
|
|
; reference from the start.
|
|
-D SX126X_DIO3_TCXO_VOLTAGE=3.0f
|
|
-D P_LORA_DIO_1=14
|
|
-D P_LORA_NSS=36
|
|
-D P_LORA_RESET=47
|
|
-D P_LORA_BUSY=48
|
|
-D P_LORA_SCLK=35
|
|
-D P_LORA_MISO=33
|
|
-D P_LORA_MOSI=34
|
|
-D ENV_INCLUDE_GPS=1
|
|
-D ENV_SKIP_GPS_DETECT=1
|
|
-D ENV_INCLUDE_AHTX0=0
|
|
-D ENV_INCLUDE_BME280=0
|
|
-D ENV_INCLUDE_BMP280=0
|
|
-D ENV_INCLUDE_SHTC3=0
|
|
-D ENV_INCLUDE_SHT4X=0
|
|
-D ENV_INCLUDE_LPS22HB=0
|
|
-D ENV_INCLUDE_INA3221=0
|
|
-D ENV_INCLUDE_INA219=0
|
|
-D ENV_INCLUDE_INA226=0
|
|
-D ENV_INCLUDE_INA260=0
|
|
-D ENV_INCLUDE_MLX90614=0
|
|
-D ENV_INCLUDE_VL53L0X=0
|
|
-D ENV_INCLUDE_BME680=0
|
|
-D ENV_INCLUDE_BMP085=0
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
; AW9364 backlight enable/pulse pin (ST7796LCDDisplay owns brightness -- see
|
|
; the CGRAM_OFFSET comment below for why this isn't a plain PWM pin).
|
|
-D PIN_TFT_LEDA_CTL=42
|
|
; Swapped vs. trail-mate's raw GPS_RX=4/GPS_TX=12: wadamesh's core calls
|
|
; Serial1.setPins(PIN_GPS_TX, PIN_GPS_RX), and HardwareSerial::setPins()
|
|
; takes (rxPin, txPin) -- so PIN_GPS_TX must be the ESP's own RX pin (4) and
|
|
; PIN_GPS_RX the ESP's own TX pin (12). See TLORA_PAGER_PORT.md Risk 1c.
|
|
-D PIN_GPS_RX=12
|
|
-D PIN_GPS_TX=4
|
|
-D GPS_BAUD_RATE=38400
|
|
; --- touch UI / companion stack ---
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
-D FIRMWARE_OTA_ENV='"tlora_pager_sx1262_companion_radio_touch"'
|
|
-D HAS_PAGER_KEYBOARD=1
|
|
-D HAS_PAGER_ENCODER=1
|
|
-D KB_INT=6
|
|
-D KB_BACKLIGHT=46
|
|
-D ROTARY_A=40
|
|
-D ROTARY_B=41
|
|
-D ROTARY_C=7
|
|
; ES8311 codec I2S pins (NS4150B amp downstream, enabled via XL9555
|
|
; AMP_EN -- see TLoraPagerBoard::setAmpEnabled()). Confirmed against the
|
|
; canonical arduino-esp32 pins_arduino.h for this board -- see
|
|
; TLORA_PAGER_PORT.md's Audio row.
|
|
-D PIN_I2S_MCLK=10
|
|
-D PIN_I2S_BCK=11
|
|
-D PIN_I2S_WS=18
|
|
-D PIN_I2S_DOUT=45
|
|
-D PIN_I2S_SDIN=17
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
; Smoother scroll: lower deceleration than LVGL's default (10) so flicks glide
|
|
; longer instead of stopping abruptly. lv_conf leaves this unset, so this -D wins.
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D DISPLAY_CLASS=ST7796LCDDisplay
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
; --- ST7796 display (TFT_eSPI) ---
|
|
-D USER_SETUP_LOADED=1
|
|
; Same physical display/text path as the LR1121 Pager environment above.
|
|
-D LOAD_GLCD=1
|
|
-D ST7796_DRIVER=1
|
|
; REQUIRED: this panel's 222px glass is narrower than the ST7796 controller's
|
|
; 320px GRAM. TFT_eSPI's ST7796_Rotation.h only applies the needed 49px
|
|
; column/row offset when this is defined (unlike ST7789, it isn't automatic
|
|
; for ST7796) -- ST7796LCDDisplay.cpp #errors at compile time without it.
|
|
-D CGRAM_OFFSET=1
|
|
; REQUIRED on ESP32-S3: see the LR1121 env's identical comment above --
|
|
; same display, same panel, same constraint, unrelated to the radio chip.
|
|
-D USE_FSPI_PORT=1
|
|
-D TFT_WIDTH=222
|
|
-D TFT_HEIGHT=480
|
|
-D TFT_MOSI=34
|
|
-D TFT_SCLK=35
|
|
-D TFT_CS=38
|
|
-D TFT_DC=37
|
|
-D TFT_RST=-1
|
|
-D TFT_MISO=33
|
|
-D TFT_BL=-1
|
|
; trail-mate's kPagerDisplaySpiClockMhz = 80.
|
|
-D SPI_FREQUENCY=80000000
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
+<helpers/ui/*.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/lilygo_tlora_pager/*.cpp>
|
|
|
|
lib_deps =
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|
|
bodmer/TFT_eSPI @ ^2.5.43
|
|
adafruit/Adafruit TCA8418 @ ^1.0.2
|
|
lewisxhe/SensorLib @ 0.3.3
|
|
[env:ThinkNode_M9_companion_radio_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = thinknode_m9
|
|
monitor_speed = 115200
|
|
board_build.partitions = variants/thinknode_m9/partitions_m9_touch.csv
|
|
; patch_radiolib_lr11x0: preprod M9 LR1110s run old transceiver FW that rejects
|
|
; DriveDiosInSleepMode (0x012A, FW 0x0308+) with CMD_PERR -> begin() = -706.
|
|
; The pre-script makes RadioLib's config() skip it on old FW (idempotent,
|
|
; per-env libdeps copy). See scripts/build/patch_radiolib_lr11x0.py.
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, pre:scripts/build/patch_radiolib_lr11x0.py, merge-bin.py
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
-D ESP32_PLATFORM
|
|
; --- ThinkNode M9 board ---
|
|
-I variants/thinknode_m9
|
|
-D HAS_THINKNODE_M9
|
|
-D BOARD_HAS_PSRAM=1
|
|
; 0 = silence ARDUHAL [E] spam, same rationale as the other envs — worse here:
|
|
; with the UART bridge (below), Serial is UART0, which doubles as the
|
|
; MULTI_TRANSPORT_COMPANION frame stream, so the spam lands mid-frame.
|
|
-D CORE_DEBUG_LEVEL=0
|
|
; M9 uses the UART bridge (ttyUSB0), not native USB-CDC — confirmed during
|
|
; Specter bring-up. With ARDUINO_USB_CDC_ON_BOOT=1 (the T-Deck's setting)
|
|
; app Serial logs go to a ttyACM* port this board doesn't expose and
|
|
; appear completely silent.
|
|
-D ARDUINO_USB_CDC_ON_BOOT=0
|
|
; PIN_USER_BTN deliberately NOT defined: the M9 has no user/BOOT button at
|
|
; all (schematic-confirmed — only a power-cut slider and a reset button,
|
|
; neither a GPIO). Defining it as 0 put UITask's screen-lock poll on a
|
|
; floating strapping pin (phantom-lock risk) and armed the Power-off menu's
|
|
; deep-sleep wake on a button that can never be pressed.
|
|
-D RADIO_CLASS=CustomLR1110
|
|
-D WRAPPER_CLASS=CustomLR1110Wrapper
|
|
-D LORA_TX_POWER=22
|
|
; LR1110 clock: TCXO mode at 3.3 V — EMPIRICALLY CONFIRMED on the tester's
|
|
; preproduction unit: Meshtastic's thinknode_m9 variant logs "using DIO3 as
|
|
; TCXO reference voltage at 3.300000 V" followed by "LR1110 init result 0".
|
|
; The earlier theory here (Y1 = self-powered active oscillator -> tcxo must
|
|
; be 0) was disproven on hardware: with 0 the chip boots on its internal RC
|
|
; (SPI alive, no -2) but the first command needing the real 32 MHz clock is
|
|
; rejected -> radio init failed -707 (bring-up build #1, 2026-07-06). The
|
|
; schematic's "VTCXO rail" feeding Y1 is evidently the LR1110's own
|
|
; TCXO-supply output, so the chip must drive it.
|
|
-D LR11X0_DIO3_TCXO_VOLTAGE=3.3
|
|
; (RADIOLIB_DEBUG_BASIC was a bring-up flag, dropped now that the radio is
|
|
; proven on hardware — target.cpp's own LR1110 version print stays.)
|
|
-D RX_BOOSTED_GAIN=true
|
|
; DIO5/DIO6 -> RFSW0_V1/RFSW1_V2 confirmed against the V1.0 schematic (LR1110
|
|
; block, U7 pins 19/20 -> R19/R20 -> U8 V1/V2) — see target.cpp for the table
|
|
; and M9_PORT.md for the crop. The per-mode polarity is the conventional
|
|
; 2-pin table every other MeshCore LR1110 board uses, not independently
|
|
; re-derived from U8's datasheet (part number isn't printed on the schematic).
|
|
-D RF_SWITCH_TABLE
|
|
; --- LR1110 SPI / control pins (verified: V1.0 schematic + boot log) ---
|
|
-D P_LORA_NSS=39
|
|
-D P_LORA_DIO_1=42
|
|
-D P_LORA_RESET=45
|
|
-D P_LORA_BUSY=41
|
|
-D P_LORA_SCLK=40
|
|
-D P_LORA_MISO=38
|
|
-D P_LORA_MOSI=47
|
|
; --- Peripheral I2C bus 0 (Wire): RTC PCF8563 0x51 / IMU QMI8658 0x6b /
|
|
; compass QMC6309 0x7c. Brought up by ESP32Board::begin(). ---
|
|
-D PIN_BOARD_SDA=7
|
|
-D PIN_BOARD_SCL=6
|
|
-D PIN_VBAT_READ=13
|
|
; --- GPS (CC1167Q, UART1) ---
|
|
-D ENV_INCLUDE_GPS=1
|
|
; The GPS is soldered on, so skip the boot-time detect probe: a cold-booting
|
|
; CC1167Q can miss the 1 s NMEA window, leaving gps_detected false — which
|
|
; kills the GPS setting (and the GPS_LONG key) until reboot.
|
|
-D ENV_SKIP_GPS_DETECT=1
|
|
-D PIN_GPS_RX=3
|
|
-D PIN_GPS_TX=2
|
|
-D PIN_GPS_EN=11
|
|
-D PIN_GPS_RESET=5
|
|
-D PIN_GPS_RESET_ACTIVE=HIGH
|
|
; GPS_RST1 -> R46 -> NPN Q16 base: GPIO HIGH turns Q16 on, pulling the module's
|
|
; reset pin to GND — so HIGH asserts reset, LOW releases it (inverted vs. library default)
|
|
-D PIN_GPS_EN_ACTIVE=LOW
|
|
; GPIO10 (GPS ON_OFF) and GPIO4 (1PPS) exist on the schematic but have no
|
|
; consumer in this driver yet — reserved, not wired.
|
|
-D GPS_BAUD_RATE=115200
|
|
-D THINKNODE_M9_BUZZER_PIN=9
|
|
-D ENV_INCLUDE_AHTX0=0
|
|
-D ENV_INCLUDE_BME280=0
|
|
-D ENV_INCLUDE_BMP280=0
|
|
-D ENV_INCLUDE_SHTC3=0
|
|
-D ENV_INCLUDE_SHT4X=0
|
|
-D ENV_INCLUDE_LPS22HB=0
|
|
-D ENV_INCLUDE_INA3221=0
|
|
-D ENV_INCLUDE_INA219=0
|
|
-D ENV_INCLUDE_INA226=0
|
|
-D ENV_INCLUDE_INA260=0
|
|
-D ENV_INCLUDE_MLX90614=0
|
|
-D ENV_INCLUDE_VL53L0X=0
|
|
-D ENV_INCLUDE_BME680=0
|
|
-D ENV_INCLUDE_BMP085=0
|
|
; --- ST7789 panel (manufacturer-confirmed; NOT ILI9341) ---
|
|
; No LILYGO_TDECK / HELTEC_LORA_V4_TFT macro is defined, so ST7789LCDDisplay
|
|
; uses its default branch (Adafruit_ST7789 over the global `SPI`, the same
|
|
; instance the radio uses) — matches the LR1110 reference variants, which
|
|
; also share one SPI peripheral across radio + display + (on the M9) SD.
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
; HARDWARE-VERIFIED (bring-up #6, 2026-07-06): rotation 3 rendered the UI
|
|
; 180 degrees off on the tester's unit; 1 is the correct landscape
|
|
; orientation (keyboard below screen). Adafruit rotations 1/3 are the two
|
|
; landscape options, 180 degrees apart.
|
|
-D DISPLAY_ROTATION=1
|
|
; PIN_TFT_LEDA_CTL is set to -1, NOT left undefined: the installed ST7789LCDDisplay
|
|
; references it unconditionally (`if (PIN_TFT_LEDA_CTL != -1)`, no #ifdef guard around
|
|
; the macro itself — leaving it undefined is a compile error, not a no-op). -1 makes
|
|
; that check skip the pin entirely, since the vendored class always drives it
|
|
; active-HIGH, but the M9's backlight is a PNP transistor (active-LOW) — so
|
|
; ThinkNodeM9Board owns BL_EN (GPIO17) directly instead (see M9Board.h/.cpp).
|
|
; PIN_PERIPH_POWER is the OTHER (also active-low) rail, gating the LCD/GPS/sensors,
|
|
; and IS passed through ST7789LCDDisplay's RefCountedDigitalPin constructor arg in
|
|
; target.cpp.
|
|
-D PIN_TFT_LEDA_CTL=-1
|
|
-D PIN_PERIPH_POWER=18
|
|
-D PIN_TFT_BL_EN=17
|
|
-D PIN_TFT_RST=14
|
|
-D PIN_TFT_DC=15
|
|
-D PIN_TFT_CS=16
|
|
; PIN_TFT_SCL / PIN_TFT_SDA intentionally NOT defined: only the
|
|
; USE_PIN_TFT / LILYGO_TDECK / HELTEC_LORA_V4_TFT branches of
|
|
; ST7789LCDDisplay's constructor consume them, and M9 uses none of those —
|
|
; it takes the default `display(&SPI, PIN_TFT_CS, PIN_TFT_DC, PIN_TFT_RST)`
|
|
; branch (global SPI, same instance the radio uses).
|
|
;
|
|
; NOTE: a software-SPI (USE_PIN_TFT) diagnostic build was tried here to test
|
|
; whether the class's hardcoded 80MHz hardware SPI clock was corrupting the
|
|
; boot-splash write. It wasn't — software SPI reproduced the EXACT same
|
|
; freeze-then-TG1WDT_SYS_RST at the exact same point, just slower, which
|
|
; rules out the SPI clock/signal-integrity theory entirely. See
|
|
; M9_PORT.md / git history if revisiting that path.
|
|
; microSD: on the shared LoRa SPI bus, same as T-Deck. CS is GPIO48 — the
|
|
; schematic net SPICLK_N, which is NOT one of the GPIO33-37 octal-PSRAM
|
|
; lines: SPICLK_N/GPIO48 (and SPICLK_P/GPIO47) are only reserved on the
|
|
; R8V/R16V 1.8V-differential-clock variants. This board is a plain R8 (see
|
|
; the env comment above), which uses the ordinary single-ended SPICLK
|
|
; instead, so GPIO48 is genuinely free. Confirmed via schematic: GPS_RST1
|
|
; and this net were the ones directly identified, not inferred.
|
|
-D PIN_SD_CS=48
|
|
-D HAS_M9_KEYBOARD=1
|
|
; QMC6309 magnetometer on the peripheral bus (Wire, 7/6) at 0x7C — exposed to
|
|
; Lua apps as wada.sys.compass() (CAP_COMPASS); driver in M9Compass.cpp.
|
|
-D HAS_M9_COMPASS=1
|
|
; QMI8658 IMU on the same bus at 0x6B. Accelerometer only, so the compass can
|
|
; correct for tilt — wada.sys.accel() (CAP_IMU); driver in M9Imu.cpp.
|
|
-D HAS_M9_IMU=1
|
|
; target.cpp builds the GPS on WadaNmeaLocationProvider and provides
|
|
; wadaGpsMotion(), so wada.sys.gps() carries speed_kmh/course on this board.
|
|
-D HAS_GPS_MOTION=1
|
|
; Keyboard bus SCHEMATIC-VERIFIED (V1.0 sheet, bring-up #9): S3 GPIO20 =
|
|
; net ESP32-2_SDA, GPIO21 = ESP32-2_SCL, to the keyboard ESP32-S2 (its
|
|
; GPIO7/6) through R2/R1 series resistors, pullups R73/R72, S2 powered from
|
|
; always-on 3V3 via R3. GPIO19/20 are also the S3's native USB D-/D+ pads —
|
|
; M9Board::begin() must release the USB-Serial-JTAG pad claim first.
|
|
-D PIN_KB_SDA=20
|
|
-D PIN_KB_SCL=21
|
|
-D PIN_KB_ADDR=0x6c
|
|
; --- touch UI / companion stack (M9 has no touch — keyboard + d-pad only;
|
|
; both text entry and keypad-nav focus traversal are wired, see
|
|
; M9_PORT.md) ---
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
-D FIRMWARE_OTA_ENV='"ThinkNode_M9_companion_radio_touch"'
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D DISPLAY_CLASS=ST7789LCDDisplay
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<*.c>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/thinknode_m9/*.cpp>
|
|
|
|
lib_deps =
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|
|
|
|
; ======================================================================
|
|
; RAK WisMesh Tap V2 — ST7789 TFT + FT5x06 capacitive touch + SX1262.
|
|
; RAK3312 module (ESP32-S3, 16 MB Flash DIO, 8 MB Octal PSRAM).
|
|
; ======================================================================
|
|
[env:rak_tap_v2_companion_radio_touch]
|
|
platform = platformio/espressif32@6.11.0
|
|
framework = arduino
|
|
board = rak_tap_v2
|
|
monitor_speed = 115200
|
|
board_build.flash_mode = dio ; RAK3312 requires DIO (board JSON defaults to qio)
|
|
board_build.partitions = variants/rak_tap_v2/partitions_rak_tap_v2_touch.csv
|
|
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, merge-bin.py
|
|
|
|
; Round-1b USB: MODE=1 HW CDC (single COM7). No 1200bps touch — use DTR/RTS reset.
|
|
build_unflags =
|
|
-D ARDUINO_USB_MODE=0
|
|
|
|
upload_speed = 460800
|
|
upload_flags =
|
|
--before=default_reset
|
|
--after=hard_reset
|
|
|
|
build_flags =
|
|
; 1.17 core: ESP32Board.cpp includes <target.h> -> MicroNMEALocationProvider.h (header-only
|
|
; provider), so MicroNMEA never chains into the core lib's LDF scope -- hand it the path.
|
|
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
|
-Wno-deprecated-declarations -Wno-unused-parameter -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D MC_VENDORED_TOUCH_APP
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
-D ESP32_PLATFORM
|
|
; --- sensors (GPS + AHTx0 + BME680 enabled) ---
|
|
-D ENV_INCLUDE_GPS=1
|
|
-D ENV_INCLUDE_AHTX0=1
|
|
-D ENV_INCLUDE_BME280=0
|
|
-D ENV_INCLUDE_BMP280=0
|
|
-D ENV_INCLUDE_SHTC3=0
|
|
-D ENV_INCLUDE_SHT4X=0
|
|
-D ENV_INCLUDE_LPS22HB=0
|
|
-D ENV_INCLUDE_INA3221=0
|
|
-D ENV_INCLUDE_INA219=0
|
|
-D ENV_INCLUDE_INA226=0
|
|
-D ENV_INCLUDE_INA260=0
|
|
-D ENV_INCLUDE_MLX90614=0
|
|
-D ENV_INCLUDE_VL53L0X=0
|
|
-D ENV_INCLUDE_BME680=1
|
|
-D ENV_INCLUDE_BMP085=0
|
|
; --- LoRa SX1262 (RAK3312 module, same pins as RAK3112) ---
|
|
-I variants/rak_tap_v2
|
|
-D RAK_WISMESH_TAP_V2=1
|
|
-D USE_SX1262
|
|
-D ESP32_CPU_FREQ=240
|
|
-D RADIO_CLASS=CustomSX1262
|
|
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
|
-D LORA_TX_POWER=22
|
|
-D P_LORA_TX_LED=46
|
|
-D P_LORA_DIO_1=47
|
|
-D P_LORA_NSS=7
|
|
-D P_LORA_RESET=8
|
|
-D P_LORA_BUSY=48
|
|
-D P_LORA_SCLK=5
|
|
-D P_LORA_MISO=3
|
|
-D P_LORA_MOSI=6
|
|
-D SX126X_DIO2_AS_RF_SWITCH=true
|
|
-D SX126X_DIO3_TCXO_VOLTAGE=1.8
|
|
-D SX126X_CURRENT_LIMIT=140
|
|
-D SX126X_RX_BOOSTED_GAIN=1
|
|
-D PIN_GPS_RX=43
|
|
-D PIN_GPS_TX=44
|
|
-D PIN_USER_BTN=0
|
|
-D PIN_VEXT_EN=14
|
|
-D PIN_BOARD_SDA=9
|
|
-D PIN_BOARD_SCL=40
|
|
; --- TFT (ST7789 240x320, LovyanGFX hardware SPI on FSPI/SPI2_HOST SCL=13/SDA=11) ---
|
|
; USB: ARDUINO_USB_* from boards/rak_tap_v2.json (MODE=1 HW CDC, Meshtastic-aligned)
|
|
-D DISPLAY_CLASS=LGFXDisplay
|
|
-D LGFX_INVERT_COLOR=true ; false=white bg, true=black bg (ST7789 INVON)
|
|
-D DISPLAY_ROTATION=3
|
|
-D DISPLAY_SCALE_X=1.0
|
|
-D DISPLAY_SCALE_Y=1.0
|
|
-D PIN_TFT_RST=-1
|
|
-D PIN_TFT_LEDA_CTL=41
|
|
-D PIN_TFT_LEDA_CTL_ACTIVE=HIGH
|
|
-D PIN_TFT_CS=12
|
|
-D PIN_TFT_DC=42
|
|
-D PIN_TFT_SCL=13
|
|
-D PIN_TFT_SDA=11
|
|
; --- FT5x06 capacitive touch (I2C0 addr 0x38, SDA=9/SCL=40) ---
|
|
-D HAS_RAK_TAP_V2=1
|
|
-D RAK_TS_FLIP_X=1
|
|
-D RAK_TS_FLIP_Y=1
|
|
-D PIN_TOUCH_SDA=9
|
|
-D PIN_TOUCH_SCL=40
|
|
-D PIN_TOUCH_INT=39
|
|
; --- touch UI / companion stack ---
|
|
-I include
|
|
-I src
|
|
-I src/ui-touch
|
|
-D UI_LVGL=1
|
|
-D HAS_TOUCH_UI=1
|
|
-D FIRMWARE_OTA_ENV='"rak_tap_v2_companion_radio_touch"'
|
|
-D ENABLE_ADVERT_ON_BOOT=0
|
|
-D LV_CONF_PATH=lv_conf.h
|
|
-D LV_CONF_INCLUDE_SIMPLE=1
|
|
-D LV_INDEV_DEF_SCROLL_THROW=7
|
|
-D USER_SETUP_LOADED=1
|
|
-D ST7789_DRIVER=1
|
|
-D TFT_WIDTH=320
|
|
-D TFT_HEIGHT=240
|
|
-D TFT_MOSI=11
|
|
-D TFT_SCLK=13
|
|
-D TFT_CS=12
|
|
-D TFT_DC=42
|
|
-D TFT_RST=-1
|
|
-D TFT_MISO=-1
|
|
-D SPI_FREQUENCY=40000000
|
|
-D TFT_RGB_ORDER=TFT_RGB
|
|
-D TFT_INVERSION_ON=1
|
|
-D TFT_BL=41
|
|
-D TFT_BACKLIGHT_ON=1
|
|
-D MAX_CONTACTS=2000
|
|
-D MAX_GROUP_CHANNELS=40
|
|
-D ADMIN_PASSWORD='"password"'
|
|
-D MULTI_TRANSPORT_COMPANION=1
|
|
-D WADAMESH_FORK_BUILD=1
|
|
-D TCP_PORT=5000
|
|
-D WS_PORT=8765
|
|
-D BLE_PIN_CODE=123456
|
|
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
|
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
|
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
|
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<helpers/*.cpp>
|
|
+<helpers/esp32/*.cpp>
|
|
+<helpers/input/*.cpp>
|
|
; RAK's DISPLAY_CLASS is OUR LGFXDisplay (variants/rak_tap_v2) -- the UIColor palette
|
|
; must come from a project object, or the linker pulls the core's same-named
|
|
; LGFXDisplay.o from the archive for it and every method collides.
|
|
+<helpers/ui/UIColorPalette.cpp>
|
|
+<ui-touch/*.cpp>
|
|
+<ui-touch/*.c>
|
|
+<../variants/rak_tap_v2/*.cpp>
|
|
|
|
lib_deps =
|
|
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.17.4
|
|
SPI
|
|
Wire
|
|
jgromes/RadioLib @ ^7.6.0
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
h2zero/NimBLE-Arduino @ 1.4.3
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
lvgl/lvgl @ ^8.3.11
|
|
lovyan03/LovyanGFX@1.2.21
|
|
bodmer/TFT_eSPI @ ^2.5.43
|
|
densaugeo/base64 @ ~1.4.0
|
|
knolleary/PubSubClient @ ^2.8.0
|