feat: MQTT-окружения для Waveshare S3 LR1121 и переход AGENTS.md на работу в main

- добавлены Waveshare_S3_LR1121_repeater_mqtt/_espnow/_bridge: из новых плат
  upstream 1.18.0 только эта на ESP32; ThinkNode M8 и M4, Wio Tracker L1 1W и
  Muzi Base — на nRF52, WiFi нет, MQTT-сборки для них невозможны (им место в
  форке MeshCore, не здесь)
- EnvironmentSensorManager: возвращён scanI2CBus из upstream (слияние его
  потеряло, потому что мы когда-то заменили полное сканирование шины поштучной
  проверкой адресов); при этом сохранён наш таймаут 20 мс на ESP32 и наша
  поддержка адреса, определённого платой
- AGENTS.md: работаем в main, ветка develop устарела (эпоха EastMesh); upstream
  тянем релизным тегом, а не веткой dev; версия upstream — v1.18.0

Проверено сборкой после слияния:
  heltec_v4_repeater_mqtt, LilyGo_TBeam_1W_repeater_mqtt,
  Meshadventurer_sx1262_repeater_mqtt, RAK_3112_repeater_mqtt,
  heltec_v4_repeater_mqtt_espnow, heltec_v4_repeater_mqtt_bridge,
  LilyGo_Tlora_C6_repeater_mqtt_espnow (наш фикс ESP-IDF 5),
  LilyGo_TBeam_1W_repeater_mqtt_espnow,
  Waveshare_S3_LR1121_repeater_mqtt, Waveshare_S3_LR1121_repeater_mqtt_bridge
MQTT-целей стало 112: 42 uplink, 34 espnow, 36 bridge
This commit is contained in:
shade committed 2026-10-16 10:20:54 +03:00
1 parent 80d36d20bc
commit 8fa0bfe1d3
3 files changed
+70 -22

No files matched your search

@@ -213,21 +213,22 @@ static RAK12500LocationProvider RAK12500_provider;
#endif
// ============================================================
// I2C sensor probe
// Probes only the compiled-in sensor addresses.
// This runs before any sensor library is touched, so a missing
// or misbehaving device cannot stall or crash the boot sequence.
// I2C bus scan
// Сканирует шину до обращения к библиотекам датчиков, чтобы
// отсутствующее или зависшее устройство не тормозило загрузку.
// ============================================================
static bool probeI2CAddress(TwoWire* wire, uint8_t addr) {
static void scanI2CBus(TwoWire* wire, bool found[128]) {
if (wire == nullptr) {
return false;
return;
}
#if defined(ESP32)
wire->setTimeOut(20);
wire->setTimeOut(20); // PosadMesh: ограничиваем ожидание, иначе зависший датчик тянет boot
#endif
wire->beginTransmission(addr);
return wire->endTransmission() == 0;
for (uint8_t addr = 0x08; addr < 0x78; addr++) {
wire->beginTransmission(addr);
found[addr] = (wire->endTransmission() == 0);
}
}
static bool readI2CRegister8(TwoWire* wire, uint8_t addr, uint8_t reg, uint8_t* value) {
@@ -953,6 +954,10 @@ bool EnvironmentSensorManager::begin() {
MESH_DEBUG_PRINTLN("I2C using board pins SDA: %d SCL: %d", PIN_BOARD_SDA, PIN_BOARD_SCL);
#endif
// Scan the I2C bus before touching any sensor library.
bool detected[128] = {};
scanI2CBus(TELEM_WIRE, detected);
// Walk the sensor table and initialize only detected devices.
_active_sensor_count = 0;
for (size_t i = 0; i < SENSOR_TABLE_SIZE && _active_sensor_count < MAX_ACTIVE_SENSORS; i++) {