🚀 Meshtastic no LSM110A (STM32WL55JCIx) — Guia Completo de Port
📅 Data: Maio/Julho 2026
👤 Autor: Miguel Alexandre Wisintainer
🔧 Hardware: WISOL LSM110A (STM32WL55JCIx)
📦 Firmware base: Meshtastic 2.8.0 — variant wio-e5
📖 Blog: lom204-cli-wisol.blogspot.com
👤 Autor: Miguel Alexandre Wisintainer
🔧 Hardware: WISOL LSM110A (STM32WL55JCIx)
📦 Firmware base: Meshtastic 2.8.0 — variant wio-e5
📖 Blog: lom204-cli-wisol.blogspot.com
Este guia documenta como portar o firmware Meshtastic para o módulo LSM110A da WISOL, baseado no chip STM32WL55JCIx da STMicroelectronics. O LSM110A é um módulo LoRaWAN industrial de alta qualidade, com TCXO integrado e excelente estabilidade de frequência — ideal para nós Meshtastic de longa autonomia.
📋 Índice
- O módulo LSM110A
- Pré-requisitos
- Clonar o repositório Meshtastic
- Modificações necessárias no firmware
- Compilar o firmware
- Gravar o firmware no LSM110A
- Configurar o nó via CLI
- Testar a comunicação mesh
- Resumo das mudanças
- Conclusão
1. O módulo LSM110A
O LSM110A é um módulo LoRaWAN da WISOL baseado no STM32WL55JCIx da STMicroelectronics. As suas principais características são:
| Característica | Valor |
|---|---|
| Chip | STM32WL55JCIx |
| Núcleos | Cortex-M4 (aplicação) + Cortex-M0+ (rádio) |
| Flash | 256 KB |
| RAM | 64 KB |
| Rádio | Sub-GHz LoRa integrado (SX1262 interno) |
| TCXO | Sim — 1.7V |
| Frequência | 868 MHz / 915 MHz |
| Potência TX | até 22 dBm |
| RF Switch CTRL1 | PB12 |
| RF Switch CTRL2 | PC13 |
| Serial (UART) | PA2 (TX), PA3 (RX) |
2. Pré-requisitos
- VSCode com extensão PlatformIO IDE
- Git instalado no sistema
- Python 3.x instalado (com pip)
- STM32CubeProgrammer — para gravar o firmware via UART ou ST-Link
- Adaptador USB-UART (CP2102 ou CH340) — para comunicação serial com o LSM110A
- Meshtastic CLI — instalar com:
pip install meshtastic
pip install meshtasticVerifica a instalação do CLI:
python -m meshtastic --version3. Clonar o repositório Meshtastic
git clone https://github.com/meshtastic/firmware.git
cd firmware
git submodule update --init
git clone https://github.com/meshtastic/firmware.git
cd firmware
git submodule update --initAbre a pasta firmware no VSCode. O PlatformIO irá instalar as dependências automaticamente na primeira compilação.
4. Modificações necessárias no firmware
São necessárias modificações em 5 ficheiros. Todas as alterações são cirúrgicas e bem documentadas.
4.1 — RF Switch: variants/stm32/wio-e5/rfswitch.h
Define os pinos do RF switch do LSM110A. O módulo usa apenas dois pinos de controlo:
// LSM110A (STM32WL55JCIx)
// RF Switch: PB12 = CTRL1, PC13 = CTRL2
// O LSM110A transmite APENAS via RFO_HP (High Power)
static const RADIOLIB_PIN_TYPE rfswitch_pins[5] = {
PB12, PC13, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC
};
static const Module::RfSwitchMode_t rfswitch_table[4] = {
{STM32WLx::MODE_IDLE, {LOW, LOW}},
{STM32WLx::MODE_RX, {HIGH, LOW}},
{STM32WLx::MODE_TX_HP, {HIGH, HIGH}},
END_OF_MODE_TABLE
};PC5 como terceiro pino — não é usado pelo RF switch do LSM110A e pode interferir com a transmissão RF.4.2 — Interface do rádio: src/mesh/STM32WLE5JCInterface.cpp
O lora.begin() pode retornar erro no STM32WL55 mesmo quando o rádio está operacional. A solução é forçar a inicialização completa independentemente do resultado:
#include "configuration.h"
#ifdef ARCH_STM32WL
#include "STM32WLE5JCInterface.h"
#include "error.h"
#ifndef STM32WLx_MAX_POWER
#define STM32WLx_MAX_POWER 22
#endif
STM32WLE5JCInterface::STM32WLE5JCInterface(LockingArduinoHal *hal,
RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq,
RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy)
: SX126xInterface(hal, cs, irq, rst, busy)
{
}
bool STM32WLE5JCInterface::init()
{
RadioLibInterface::init();
// Configura o RF switch para o LSM110A
lora.setRfSwitchTable(rfswitch_pins, rfswitch_table);
limitPower(STM32WLx_MAX_POWER);
// TCXO a 1.7V - obrigatorio para o LSM110A
// Deve ser chamado ANTES do lora.begin()
lora.setTCXO(1.7);
// tcxoVoltage=0 porque ja foi configurado acima
int res = lora.begin(getFreq(), bw, sf, cr, syncWord, power, preambleLength, 0);
LOG_INFO("STM32WLx init result %d", res);
LOG_INFO("Frequency set to %f", getFreq());
LOG_INFO("Bandwidth set to %f", bw);
LOG_INFO("Power output set to %d", power);
// Forcar startReceive() independentemente do resultado do begin()
// O radio funciona no LSM110A mesmo que begin() reporte erro
startReceive();
return true;
}
#endif // ARCH_STM32WL4.3 — MAC address único: src/platform/stm32wl/main-stm32wl.cpp
Para garantir Node IDs únicos em cada módulo, usa-se o BUILD_EPOCH (timestamp da compilação) como factor adicional:
void getMacAddr(uint8_t *dmac)
{
const uint32_t uid0 = HAL_GetUIDw0();
const uint32_t uid1 = HAL_GetUIDw1();
const uint32_t uid2 = HAL_GetUIDw2();
// XOR com BUILD_EPOCH garante ID unico por compilacao
dmac[5] = (uint8_t)(uid0 ^ (BUILD_EPOCH & 0xFF));
dmac[4] = (uint8_t)(uid0 >> 16) ^ ((BUILD_EPOCH >> 8) & 0xFF);
dmac[3] = (uint8_t)uid1;
dmac[2] = (uint8_t)(uid1 >> 8);
dmac[1] = (uint8_t)uid2;
dmac[0] = (uint8_t)(uid2 >> 8);
}BUILD_EPOCH como o timestamp Unix da compilação. Cada compilação gera um MAC e portanto um Node ID diferente — sem configuração manual.4.4 — Device Role e Região: variants/stm32/wio-e5/variant.h
O STM32WL55 tem um bug conhecido no LittleFS que impede a gravação de algumas configurações via CLI, incluindo o device.role. Adicionalmente, o Meshtastic restringe por segurança a gravação de roles ROUTER via CLI — voltando sempre a CLIENT após reboot.
A solução é definir estas configurações directamente no variant.h — ficheiro incluído automaticamente em todo o código via configuration.h, garantindo que os valores são aplicados em cada boot.
Adiciona no final do ficheiro variants/stm32/wio-e5/variant.h:
// LSM110A - configuracoes permanentes
// device.role nao pode ser gravado via CLI por restricao de seguranca do Meshtastic
// Deve ser definido aqui para ser aplicado em cada boot
#define USERPREFS_CONFIG_DEVICE_ROLE meshtastic_Config_DeviceConfig_Role_ROUTER_CLIENT
#define USERPREFS_CONFIG_LORA_REGION meshtastic_Config_LoRaConfig_RegionCode_ANZRegionCode_ANZ para a banda 915 MHz no Brasil. Substitui por RegionCode_US se necessário para a tua região específica.ℹ️ Como confirmar que o compilador lê o variant.h: Coloca temporariamente um valor inválido como
RegionCode_XXXXXXXXXX e tenta compilar — se der erro de compilação, confirma que o ficheiro está a ser lido correctamente.4.5 — Always-apply device.role: src/mesh/NodeDB.cpp
O device.role precisa de ser aplicado em cada boot, não só no primeiro. Localiza a secção "Always-apply" (procura pelo comentário // Always-apply LoRa overrides, cerca da linha 1770) e adiciona após o último #endif dos overrides LoRa:
// Ja existente - Always-apply LoRa overrides
#ifdef USERPREFS_CONFIG_LORA_REGION
config.lora.region = USERPREFS_CONFIG_LORA_REGION;
#endif
// ... outros overrides LoRa existentes ...
#ifdef USERPREFS_LORACONFIG_OVERRIDE_FREQUENCY
config.lora.override_frequency = USERPREFS_LORACONFIG_OVERRIDE_FREQUENCY;
#endif
// ADICIONAR AQUI - Always-apply device role override
#ifdef USERPREFS_CONFIG_DEVICE_ROLE
config.device.role = USERPREFS_CONFIG_DEVICE_ROLE;
owner.role = config.device.role;
#endifpython -m meshtastic --port COM6 --get device.roleDeve retornar
device.role: 3 — que corresponde a ROUTER_CLIENT. Este valor persiste após reboot!5. Compilar o firmware
Usa o ambiente wio-e5 — o variant mais compatível com o STM32WL55 do LSM110A:
pio run -e wio-e5O binário gerado fica em: .pio/build/wio-e5/firmware.bin
BUILD_EPOCH muda a cada compilação, garantindo Node IDs únicos. Faz Full Chip Erase antes de gravar cada módulo!6. Gravar o firmware no LSM110A
1 Liga o pino BOOT0 a VCC e faz reset — entra em modo bootloader2 Liga o CP2102: PA2 (TX) → RX do adaptador; PA3 (RX) → TX do adaptador3 Abre o STM32CubeProgrammer → selecciona UART → conecta4 Full Chip Erase — obrigatório para limpar dados anteriores5 Grava o firmware.bin no endereço 0x080000006 Verifica: deve aparecer "Verify OK"7 Coloca BOOT0 em LOW e faz reset — o Meshtastic inicia
firmware.bin no endereço 0x080000007. Configurar o nó via CLI
# Verifica se esta a responder
python -m meshtastic --port COM6 --info
# Configura o nome do no
python -m meshtastic --port COM6 --set device.longName "LSM110 Node1"
python -m meshtastic --port COM6 --set device.shortName "LS-1"
# Activa telemetria
python -m meshtastic --port COM6 --set telemetry.deviceTelemetryEnabled true
# Verifica o role (deve mostrar ROUTER_CLIENT = 3)
python -m meshtastic --port COM6 --get device.role
# Reinicia
python -m meshtastic --port COM6 --reboot
# Verifica se esta a responder
python -m meshtastic --port COM6 --info
# Configura o nome do no
python -m meshtastic --port COM6 --set device.longName "LSM110 Node1"
python -m meshtastic --port COM6 --set device.shortName "LS-1"
# Activa telemetria
python -m meshtastic --port COM6 --set telemetry.deviceTelemetryEnabled true
# Verifica o role (deve mostrar ROUTER_CLIENT = 3)
python -m meshtastic --port COM6 --get device.role
# Reinicia
python -m meshtastic --port COM6 --rebootResposta esperada do --info:
Connected to radio
Owner: Meshtastic XXXX
firmwareVersion: "2.8.0.ef734b7"
hwModel: WIO_E5
pioEnv: "wio-e5"8. Testar a comunicação mesh
Terminal 1 — Node1 a escutar:
python -m meshtastic --port COM6 --listenTerminal 2 — Node2 a enviar:
python -m meshtastic --port COM3 --sendtext "Hello from Node2!"Resultado esperado no Terminal 1:
decoded {
portnum: TEXT_MESSAGE_APP
payload: "Hello from Node2!"
}
rx_snr: 6.25
rx_rssi: -69
hop_limit: 3
fromId: '!5008332a'
transport_mechanism: TRANSPORT_LORATRANSPORT_LORA confirma que a mensagem viajou via rádio LoRa.8.1 — Web Client (interface gráfica)
- Abre o Chrome ou Edge em client.meshtastic.org
- Clica em Add Connection → Serial
- Selecciona a porta COM do LSM110A
- Vês os nós detectados, mensagens e configurações em tempo real
ℹ️ Dois nós em simultâneo: Usa o Chrome para um nó e o Edge para o outro — cada browser tem o seu contexto Serial independente.
9. Resumo das mudanças
| Ficheiro | Mudança | Motivo |
|---|---|---|
variants/stm32/wio-e5/rfswitch.h | PB12 e PC13 apenas; tabela com MODE_TX_HP | Pinos correctos do RF switch do LSM110A |
src/mesh/STM32WLE5JCInterface.cpp | setTCXO(1.7) antes do begin(); return true | TCXO obrigatório; begin() pode retornar erro mas rádio funciona |
src/platform/stm32wl/main-stm32wl.cpp | getMacAddr() com XOR do BUILD_EPOCH | Garante Node IDs únicos por compilação |
variants/stm32/wio-e5/variant.h | USERPREFS_CONFIG_DEVICE_ROLE e USERPREFS_CONFIG_LORA_REGION | Bug LittleFS + restrição segurança impede gravar role via CLI |
src/mesh/NodeDB.cpp | Always-apply para device.role na secção de overrides | Garante que o role é aplicado em cada boot |
| Ambiente PlatformIO | Usar wio-e5 | Variant mais compatível com o STM32WL55 |
📡 Configurações LoRa em uso
| Parâmetro | Valor |
|---|---|
| Região (Brasil) | ANZ (915-928 MHz) |
| Modem Preset | LONG_FAST |
| Spreading Factor | SF11 |
| Bandwidth | 250 kHz |
| Coding Rate | 4/5 |
| Potência TX | 22 dBm |
| Hop Limit | 3 saltos |
| TCXO | 1.7V |
| Device Role | ROUTER_CLIENT (retransmite + envia/recebe) |
| Canal padrão | LongFast (compatível com toda a rede Meshtastic) |
🔄 Procedimento para cada novo LSM110A
- Aplica as 5 modificações nos ficheiros acima (só uma vez)
- Compila:
pio run -e wio-e5 - Full Chip Erase no STM32CubeProgrammer
- Grava o
firmware.bin em 0x08000000 - Configura via CLI: nome, telemetria, etc.
- Repete para cada módulo adicional (nova compilação = novo BUILD_EPOCH = novo ID)
pio run -e wio-e5firmware.bin em 0x0800000010. Conclusão
O LSM110A (STM32WL55JCIx) funciona perfeitamente como nó Meshtastic com role ROUTER_CLIENT, incluindo:
- ✅ Comunicação LoRa bidirecional (TX e RX)
- ✅ Retransmissão automática de pacotes (mesh relay)
- ✅ Telemetria automática (bateria, uptime, utilização do canal)
- ✅ Detecção automática de nós vizinhos
- ✅ Envio e recepção de mensagens de texto
- ✅ Compatibilidade total com qualquer nó Meshtastic na região ANZ
- ✅ Interface Web Client via Serial
- ✅ Node IDs únicos automáticos via BUILD_EPOCH
- ✅ Role ROUTER_CLIENT permanente via variant.h
O LSM110A, sem GPS, ecrã ou Bluetooth, é ideal como nó repetidor autónomo — pode funcionar anos com bateria + painel solar, retransmitindo automaticamente as mensagens de toda a rede mesh, expandindo o alcance para dezenas de quilómetros em linha de vista.
🔗 Firmware Meshtastic: github.com/meshtastic/firmware
📖 Outros projectos com LSM110A: lom204-cli-wisol.blogspot.com
Documento atualizado em Julho 2026 — Miguel Alexandre Wisintainer
🚀 Meshtastic no LSM110A (STM32WL55JCIx) — Guia Completo de Port
👤 Autor: Miguel Alexandre Wisnieski
🔧 Hardware: WISOL LSM110A (STM32WL55JCIx)
📦 Firmware base: Meshtastic 2.8.0 — variant wio-e5
📖 Blog: lom204-cli-wisol.blogspot.com
Este guia documenta como portar o firmware Meshtastic para o módulo LSM110A da WISOL, baseado no chip STM32WL55JCIx da STMicroelectronics. O LSM110A é um módulo LoRaWAN industrial de alta qualidade, com TCXO integrado e excelente estabilidade de frequência — características que o tornam ideal para nós Meshtastic de longa autonomia.
📋 Índice
- O módulo LSM110A
- Pré-requisitos
- Clonar o repositório Meshtastic
- Modificações necessárias no firmware
- Compilar o firmware
- Gravar o firmware no LSM110A
- Configurar o nó via CLI
- Testar a comunicação mesh
- Resumo das mudanças
- Conclusão
1. O módulo LSM110A
O LSM110A é um módulo LoRaWAN da WISOL baseado no STM32WL55JCIx da STMicroelectronics. As suas principais características são:
| Característica | Valor |
|---|---|
| Chip | STM32WL55JCIx |
| Núcleos | Cortex-M4 (aplicação) + Cortex-M0+ (rádio) |
| Flash | 256 KB |
| RAM | 64 KB |
| Rádio | Sub-GHz LoRa integrado (SX1262 interno) |
| TCXO | Sim — 1.7V |
| Frequência | 868 MHz / 915 MHz |
| Potência TX | até 22 dBm |
| RF Switch CTRL1 | PB12 |
| RF Switch CTRL2 | PC13 |
| Serial (UART) | PA2 (TX), PA3 (RX) |
2. Pré-requisitos
- VSCode com extensão PlatformIO IDE
- Git instalado no sistema
- Python 3.x instalado (com pip)
- STM32CubeProgrammer — para gravar o firmware via UART ou ST-Link
- Adaptador USB-UART (CP2102 ou CH340) — para comunicação serial com o LSM110A
- Meshtastic CLI — instalar com:
pip install meshtastic
Verifica a instalação do CLI:
python -m meshtastic --version
3. Clonar o repositório Meshtastic
git clone https://github.com/meshtastic/firmware.git
cd firmware
git submodule update --init
Abre a pasta firmware no VSCode. O PlatformIO irá instalar as dependências automaticamente na primeira compilação.
4. Modificações necessárias no firmware
São necessárias modificações em 3 ficheiros. Todas as alterações são cirúrgicas e bem documentadas.
4.1 — RF Switch: variants/stm32/wio-e5/rfswitch.h
Define os pinos do RF switch do LSM110A. O módulo usa apenas dois pinos de controlo:
// LSM110A (STM32WL55JCIx)
// RF Switch: PB12 = CTRL1, PC13 = CTRL2
// O LSM110A transmite APENAS via RFO_HP (High Power)
static const RADIOLIB_PIN_TYPE rfswitch_pins[5] = {
PB12, PC13, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC
};
static const Module::RfSwitchMode_t rfswitch_table[4] = {
{STM32WLx::MODE_IDLE, {LOW, LOW}},
{STM32WLx::MODE_RX, {HIGH, LOW}},
{STM32WLx::MODE_TX_HP, {HIGH, HIGH}},
END_OF_MODE_TABLE
};
PC5 como terceiro pino de controlo — este pino não é usado pelo RF switch do LSM110A e pode interferir com a transmissão RF.
4.2 — Interface do rádio: src/mesh/STM32WLE5JCInterface.cpp
Este é o ficheiro mais crítico. O lora.begin() pode retornar erro no STM32WL55 mesmo quando o rádio está operacional. A solução é forçar a inicialização completa independentemente do resultado:
#include "configuration.h"
#ifdef ARCH_STM32WL
#include "STM32WLE5JCInterface.h"
#include "error.h"
#ifndef STM32WLx_MAX_POWER
#define STM32WLx_MAX_POWER 22
#endif
STM32WLE5JCInterface::STM32WLE5JCInterface(LockingArduinoHal *hal,
RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq,
RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy)
: SX126xInterface(hal, cs, irq, rst, busy)
{
}
bool STM32WLE5JCInterface::init()
{
RadioLibInterface::init();
// Configura o RF switch para o LSM110A
lora.setRfSwitchTable(rfswitch_pins, rfswitch_table);
limitPower(STM32WLx_MAX_POWER);
// TCXO a 1.7V — obrigatório para o LSM110A
// Deve ser chamado ANTES do lora.begin()
lora.setTCXO(1.7);
// Inicializa o rádio (tcxoVoltage=0 porque já foi configurado acima)
int res = lora.begin(getFreq(), bw, sf, cr, syncWord, power, preambleLength, 0);
LOG_INFO("STM32WLx init result %d", res);
LOG_INFO("Frequency set to %f", getFreq());
LOG_INFO("Bandwidth set to %f", bw);
LOG_INFO("Power output set to %d", power);
// Forçar startReceive() independentemente do resultado do begin()
// O rádio funciona no LSM110A mesmo que begin() reporte erro
startReceive();
return true;
}
#endif // ARCH_STM32WL
4.3 — MAC address único: src/platform/stm32wl/main-stm32wl.cpp
O STM32WL55 gera o Node ID a partir do UID do chip. Em alguns lotes de produção, dois chips podem ter o mesmo UID. Para garantir IDs únicos em cada módulo, usa-se o BUILD_EPOCH (timestamp Unix da compilação) como factor adicional de aleatoriedade:
void getMacAddr(uint8_t *dmac)
{
const uint32_t uid0 = HAL_GetUIDw0();
const uint32_t uid1 = HAL_GetUIDw1();
const uint32_t uid2 = HAL_GetUIDw2();
// XOR com BUILD_EPOCH garante ID único por compilação
// Cada compilação tem um timestamp diferente
dmac[5] = (uint8_t)(uid0 ^ (BUILD_EPOCH & 0xFF));
dmac[4] = (uint8_t)(uid0 >> 16) ^ ((BUILD_EPOCH >> 8) & 0xFF);
dmac[3] = (uint8_t)uid1;
dmac[2] = (uint8_t)(uid1 >> 8);
dmac[1] = (uint8_t)uid2;
dmac[0] = (uint8_t)(uid2 >> 8);
}
BUILD_EPOCH como o timestamp Unix do momento da compilação. Como cada compilação acontece em momentos diferentes, o MAC gerado será sempre único — sem necessidade de configuração manual.
5. Compilar o firmware
Usa o ambiente wio-e5 — é o variant mais compatível com o STM32WL55 do LSM110A:
pio run -e wio-e5
O binário gerado fica em:
.pio/build/wio-e5/firmware.bin
BUILD_EPOCH muda a cada compilação, garantindo Node IDs únicos.
6. Gravar o firmware no LSM110A
BOOT0 a VCC e faz reset. O LSM110A entra em modo de programação UART.
PA2 (TX) ao RX do adaptador e PA3 (RX) ao TX do adaptador.
firmware.bin e grava no endereço 0x08000000.
BOOT0 em LOW e faz reset. O Meshtastic inicia automaticamente.
7. Configurar o nó via CLI
Liga o LSM110A ao PC via CP2102 e verifica se o Meshtastic está a responder:
python -m meshtastic --port COM6 --info
Resposta esperada:
Connected to radio
Owner: Meshtastic XXXX
firmwareVersion: "2.8.0.ef734b7"
hwModel: WIO_E5
pioEnv: "wio-e5"
Configura a região (Brasil usa ANZ — banda 915-928 MHz):
python -m meshtastic --port COM6 --set lora.region ANZ
Configura o nome do nó:
python -m meshtastic --port COM6 --set device.longName "LSM110 Node1"
python -m meshtastic --port COM6 --set device.shortName "LS-1"
Activa a telemetria:
python -m meshtastic --port COM6 --set telemetry.deviceTelemetryEnabled true
Reinicia o nó para aplicar as configurações:
python -m meshtastic --port COM6 --reboot
8. Testar a comunicação mesh
Com dois módulos LSM110A gravados e configurados com região ANZ, abre dois terminais:
Terminal 1 — Node1 a escutar:
python -m meshtastic --port COM6 --listen
Terminal 2 — Node2 a enviar:
python -m meshtastic --port COM3 --sendtext "Hello from Node2!"
Resultado esperado no Terminal 1:
decoded {
portnum: TEXT_MESSAGE_APP
payload: "Hello from Node2!"
}
rx_snr: 6.25
rx_rssi: -69
hop_limit: 3
fromId: '!5008332a'
transport_mechanism: TRANSPORT_LORA
TRANSPORT_LORA confirma que a mensagem viajou via rádio LoRa.
8.1 — Web Client (interface gráfica)
Para uma interface mais amigável, usa o Web Client oficial:
- Abre o Chrome ou Edge em client.meshtastic.org
- Clica em Add Connection → Serial
- Selecciona a porta COM do LSM110A
- Vês os nós detectados, mensagens e configurações em tempo real
9. Resumo das mudanças
| Ficheiro | Mudança | Motivo |
|---|---|---|
variants/stm32/wio-e5/rfswitch.h |
PB12 e PC13 apenas; tabela com MODE_TX_HP | Pinos correctos do RF switch do LSM110A |
src/mesh/STM32WLE5JCInterface.cpp |
setTCXO(1.7) antes do begin(); return true |
TCXO obrigatório; begin() pode retornar erro mas rádio funciona |
src/platform/stm32wl/main-stm32wl.cpp |
getMacAddr() com XOR do BUILD_EPOCH | Garante Node IDs únicos por compilação |
| Ambiente PlatformIO | Usar wio-e5 |
Variant mais compatível com o STM32WL55 |
📡 Configurações LoRa em uso
| Parâmetro | Valor |
|---|---|
| Região (Brasil) | ANZ (915-928 MHz) |
| Modem Preset | LONG_FAST |
| Spreading Factor | SF11 |
| Bandwidth | 250 kHz |
| Coding Rate | 4/5 |
| Potência TX | 22 dBm |
| Hop Limit | 3 saltos |
| TCXO | 1.7V |
| Canal padrão | LongFast (compatível com toda a rede Meshtastic) |
🔄 Procedimento para cada novo LSM110A
- Aplica as 3 modificações nos ficheiros acima
- Compila:
pio run -e wio-e5 - Full Chip Erase no STM32CubeProgrammer
- Grava o
firmware.binem0x08000000 - Configura via CLI: região ANZ + nome
- Repete o processo para cada módulo adicional (nova compilação = novo BUILD_EPOCH = novo ID)
10. Conclusão
O LSM110A (STM32WL55JCIx) é um excelente módulo para integrar na rede Meshtastic, especialmente como nó relay/repetidor de longa autonomia. Com as modificações documentadas neste guia, é possível ter o Meshtastic completamente funcional, incluindo:
- ✅ Comunicação LoRa bidirecional (TX e RX)
- ✅ Telemetria automática (bateria, uptime, utilização do canal)
- ✅ Detecção automática de nós vizinhos
- ✅ Envio e recepção de mensagens de texto
- ✅ Compatibilidade total com qualquer nó Meshtastic na região ANZ
- ✅ Interface Web Client via Serial
- ✅ Node IDs únicos automáticos via BUILD_EPOCH
O LSM110A, sem GPS, ecrã ou Bluetooth, é ideal como nó repetidor autónomo — pode funcionar anos com bateria + painel solar, retransmitindo automaticamente as mensagens de toda a rede mesh, expandindo o alcance para dezenas de quilómetros em linha de vista.
📖 Outros projectos com LSM110A: lom204-cli-wisol.blogspot.com
🔗 Firmware Meshtastic: github.com/meshtastic/firmware
Documento gerado em Maio 2026 — Miguel Alexandre Wisnieski





















