diff --git a/MQTT_IMPLEMENTATION.md b/MQTT_IMPLEMENTATION.md index ac74485d..96b7340e 100644 --- a/MQTT_IMPLEMENTATION.md +++ b/MQTT_IMPLEMENTATION.md @@ -211,6 +211,8 @@ pio run -e Station_G2_repeater_observer_mqtt # Station G3 (ESP32) pio run -e Station_G3_ESP32_repeater_observer_mqtt pio run -e Station_G3_ESP32_room_server_observer_mqtt +pio run -e Station_G3_ESP32_r2_repeater_observer_mqtt # second RF slot +pio run -e Station_G3_ESP32_r2_room_server_observer_mqtt # second RF slot # LilyGo T-LoRa V2.1-1.6 (TTGO LoRa32 V1.0) pio run -e LilyGo_TLora_V2_1_1_6_repeater_observer_mqtt @@ -245,6 +247,8 @@ Some MQTT observer builds use a non-default partition table to accommodate the l | `Station_G2_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | 16 MB flash board | | `Station_G3_ESP32_repeater_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | 16 MB flash board | | `Station_G3_ESP32_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | 16 MB flash board | +| `Station_G3_ESP32_r2_repeater_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | Second RF slot; same board and layout as the slot-1 env | +| `Station_G3_ESP32_r2_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | same | | `LilyGo_TBeam_1W_repeater_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | Set in `boards/t_beam_1w.json`; required vs implicit `default.csv` | | `LilyGo_TBeam_1W_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | same | diff --git a/variants/station_g3_esp32/platformio.ini b/variants/station_g3_esp32/platformio.ini index bca80963..d6f179c1 100644 --- a/variants/station_g3_esp32/platformio.ini +++ b/variants/station_g3_esp32/platformio.ini @@ -1,4 +1,7 @@ -[Station_G3_ESP32] +; The motherboard has two RF daughterboard slots on separate GPIOs, mirrored by its +; "LNA P" / "LNA S" jumpers. Slot 1 is [Station_G3_ESP32], slot 2 is [Station_G3_ESP32_r2]; +; the slot pins sit in their own sections so neither set of -D flags shadows the other. +[Station_G3_ESP32_common] extends = esp32_base board = station-g3-esp32 build_flags = @@ -10,17 +13,8 @@ build_flags = -D USE_SX1262 -D RADIO_CLASS=CustomSX1262 -D WRAPPER_CLASS=CustomSX1262Wrapper - -D P_LORA_DIO_1=48 - -D P_LORA_NSS=11 - -D P_LORA_RESET=21 - -D P_LORA_BUSY=47 - -D P_LORA_SCLK=12 - -D P_LORA_MISO=14 - -D P_LORA_MOSI=13 -D P_PA1_EN=9 ; PA PL1 Mode: LOW/open selects low level, HIGH/short selects high level. -D P_PA1_EN_ACTIVE=HIGH - -D P_PRIMARY_LNA_EN=10 ; Primary Slot LNA Mode: LOW/open is LNA on, HIGH/short is LNA off. - -D P_PRIMARY_LNA_EN_ACTIVE=LOW -D LORA_TX_POWER=7 ; SX1262 input power to the Station G3 PA; final output depends on PA PL1/PL2 level. -D MAX_LORA_TX_POWER=22 ; -D P_LORA_TX_LED=35 @@ -45,6 +39,48 @@ lib_deps = adafruit/Adafruit SH110X @ ~2.1.13 adafruit/Adafruit GFX Library @ ^1.12.1 +; PA PL1 is one board-level jumper shared by both slots, so P_PA1_EN stays in the base above. +[station_g3_esp32_r1_pins] +build_flags = + -D P_LORA_DIO_1=48 + -D P_LORA_NSS=11 + -D P_LORA_RESET=21 + -D P_LORA_BUSY=47 + -D P_LORA_SCLK=12 + -D P_LORA_MISO=14 + -D P_LORA_MOSI=13 + -D P_PRIMARY_LNA_EN=10 ; Primary Slot LNA Mode: LOW/open is LNA on, HIGH/short is LNA off. + -D P_PRIMARY_LNA_EN_ACTIVE=LOW + +; Slot 2 ("LNA S"). P_PRIMARY_LNA_EN keeps its name because LoRaFEMControl knows only one LNA pin. +[station_g3_esp32_r2_pins] +build_flags = + -D P_LORA_DIO_1=2 + -D P_LORA_NSS=43 + -D P_LORA_RESET=44 + -D P_LORA_BUSY=1 + -D P_LORA_SCLK=39 + -D P_LORA_MISO=41 + -D P_LORA_MOSI=40 + -D P_PRIMARY_LNA_EN=42 ; Secondary Slot LNA Mode, same polarity as the primary slot. + -D P_PRIMARY_LNA_EN_ACTIVE=LOW + +[Station_G3_ESP32] +extends = Station_G3_ESP32_common +build_flags = + ${Station_G3_ESP32_common.build_flags} + ${station_g3_esp32_r1_pins.build_flags} +build_src_filter = ${Station_G3_ESP32_common.build_src_filter} +lib_deps = ${Station_G3_ESP32_common.lib_deps} + +[Station_G3_ESP32_r2] +extends = Station_G3_ESP32_common +build_flags = + ${Station_G3_ESP32_common.build_flags} + ${station_g3_esp32_r2_pins.build_flags} +build_src_filter = ${Station_G3_ESP32_common.build_src_filter} +lib_deps = ${Station_G3_ESP32_common.lib_deps} + [env:Station_G3_ESP32_repeater] extends = Station_G3_ESP32 build_flags = @@ -246,3 +282,124 @@ lib_deps = JChristensen/Timezone paulstoffregen/Time@1.6.1 0neblock/SNMP_Agent + +[env:Station_G3_ESP32_r2_repeater] +extends = Station_G3_ESP32_r2 +build_flags = + ${Station_G3_ESP32_r2.build_flags} + -D ADVERT_NAME='"Station G3 ESP32 Repeater"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${Station_G3_ESP32_r2.build_src_filter} + +<../examples/simple_repeater> +lib_deps = + ${Station_G3_ESP32_r2.lib_deps} + ${esp32_ota.lib_deps} + +[env:Station_G3_ESP32_r2_room_server] +extends = Station_G3_ESP32_r2 +build_src_filter = ${Station_G3_ESP32_r2.build_src_filter} + +<../examples/simple_room_server> +build_flags = + ${Station_G3_ESP32_r2.build_flags} + -D ADVERT_NAME='"Station G3 ESP32 Room"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D ROOM_PASSWORD='"hello"' +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = + ${Station_G3_ESP32_r2.lib_deps} + ${esp32_ota.lib_deps} + +[env:Station_G3_ESP32_r2_repeater_observer_mqtt] +extends = Station_G3_ESP32_r2 +board_build.partitions = default_16MB.csv ; standard 16MB partition table +extra_scripts = + ${esp32_base.extra_scripts} + pre:scripts/generate_cert_bundle.py +board_ssl_cert_source = adafruit-full +board_build.embed_files = src/certs/x509_crt_bundle.bin +build_flags = + ${Station_G3_ESP32_r2.build_flags} + -D ADVERT_NAME='"MQTT Observer"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 + -D WITH_MQTT_BRIDGE=1 + -D MQTT_MAX_PACKET_SIZE=1024 + -D MQTT_DEBUG=1 +# -D MESH_PACKET_LOGGING=1 +# -D MESH_DEBUG=1 + -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y + -D ESP32_CPU_FREQ=160 + -D WITH_SNMP=1 +# -D WIFI_SSID='"ssid"' +# -D WIFI_PWD='"password"' +# -D MQTT_SERVER='"your-mqtt-broker.com"' +# -D MQTT_PORT=1883 +# -D MQTT_USERNAME='"your-username"' +# -D MQTT_PASSWORD='"your-password"' +build_src_filter = ${Station_G3_ESP32_r2.build_src_filter} + + + + + + + + + + + +<../examples/simple_repeater> +lib_deps = + ${Station_G3_ESP32_r2.lib_deps} + ${esp32_ota.lib_deps} + elims/PsychicMqttClient@^0.2.4 + bblanchon/ArduinoJson @ 7.4.3 + arduino-libraries/NTPClient + JChristensen/Timezone + paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent + +[env:Station_G3_ESP32_r2_room_server_observer_mqtt] +extends = Station_G3_ESP32_r2 +board_build.partitions = default_16MB.csv ; standard 16MB partition table +extra_scripts = + ${esp32_base.extra_scripts} + pre:scripts/generate_cert_bundle.py +board_ssl_cert_source = adafruit-full +board_build.embed_files = src/certs/x509_crt_bundle.bin +build_flags = + ${Station_G3_ESP32_r2.build_flags} + -D ADVERT_NAME='"Station G3 ESP32 Room Observer"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D ROOM_PASSWORD='"hello"' + -D WITH_MQTT_BRIDGE=1 + -D MAX_NEIGHBOURS=50 + -D MQTT_MAX_PACKET_SIZE=1024 + -D MQTT_DEBUG=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 + -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y + -D ESP32_CPU_FREQ=160 + -D WITH_SNMP=1 +build_src_filter = ${Station_G3_ESP32_r2.build_src_filter} + + + + + + + + + + + +<../examples/simple_room_server> +lib_deps = + ${Station_G3_ESP32_r2.lib_deps} + ${esp32_ota.lib_deps} + elims/PsychicMqttClient@^0.2.4 + bblanchon/ArduinoJson @ 7.4.3 + arduino-libraries/NTPClient + JChristensen/Timezone + paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent