Este repositório fornece tudo o que você precisa para construir facilmente (é um projeto de bricolage!) Um gateway Lora-to-MQTT de ótima qualidade, com base nos módulos Ebyte Lora e em um ESP32 e funciona com Wi-Fi ou Ethernet, saindo de 5V. Existem duas versões diferentes do gateway, detalhes sobre essas versões e que você deve escolher abaixo:
Para dar capacidade para o Conselho Ethernet, estou usando o chapéu Ethernet do Esp32 Quinled. Obviamente, é natural que eu também tivesse usado um ESP32 Quinled, mas eu tinha alguns devboards esp32 padrão sobressalentes sem uso, então projetei a placa em torno deles. Mas isso dito, eu poderia um dia projetar uma versão completamente baseada no Quinled-Esp32.
Para alternar facilmente entre Wi-Fi e Ethernet, há um jumper no quadro para fazer exatamente isso. Isso até funciona com a placa alimentada; Não há necessidade de cortar energia.
Novamente, este é um projeto de bricolage! Então, primeiro, você precisa de algumas habilidades de solda e eu recomendo uma placa quente SMD ou uma arma de ar quente para soldar o módulo Ebyte E32. É muito, muito difícil de soldar com apenas um ferro!
Então, você deseja imprimir os PCBs em uma fábrica de protótipo de PCB de sua escolha, como JLCPCB ou PCBway. Incluí os arquivos Gerber para ambos na pasta respectiv. Se você deseja usar um provedor de serviços diferente, precisa verificar se eles podem aceitar esses gerbers ou gerá -los você mesmo.
Eu também recomendo que você peça este PCB com um estêncil, caso contrário, você terá dificuldade em colocar a pasta nas almofadas do módulo Ebyte!
Cada pasta PCB possui um arquivo IBOM HTML que fornece boas instruções de solda / visão geral, encontre -o na pasta ibom na pasta de cada versões. Quando você soldou a prancha, basta conectá -la com uma fonte de energia de 5V e lá está! Ele consome menos de 200mA, para que você possa usar facilmente um carregador de telefone antigo de 500mA, 1A (ou superior).
A fonte está disponível na pasta src . Faça o download do Arduino IDE, verifique o arquivo config.h e substitua os espaços reservados por suas configurações, compile e usem no ESP32. Deve ser isso e o gateway deve aparecer no seu servidor MQTT e enviar mensagens de verificação de saúde a cada 5 segundos.
Como você pode agora ter seus sensores e placas, as mensagens Lora enviadas para ele podem ser encontradas na seção "Código / software fonte" abaixo.
Qual você deve escolher? Isso é bem fácil e definido por um fator:
Você precisa escolher entre eles, pois os módulos EBYTE que usam comunicação serial não podem se comunicar com os módulos RFM95, embora eles usem o mesmo chip Lora Semtech SX1276 Lora. Isso ocorre porque os módulos operados em série da Ebyte também têm um Litte MCU a bordo que já faz seu próprio "material" / protocolo ao enviar mensagens via Lora. Então você não fala diretamente com o chip Semtech, mas esse pequeno MCU. É necessário entender como exatamente isso funciona para ler essas mensagens com um módulo LORA que usa a comunicação SPI direta ao chip Semtech (como o módulo E32 específico que eu uso ou o RFM95) para fazê -los trabalhar um com o outro.
Esta versão é baseada no EBYTE E32-400M20S ou E32-900M20S, que oferece comunicação serial direta ao SEMTECH SX1276. Na época da última pesquisa (começo de 2022), este é o único módulo E-byte que funciona nesse PCB, para que você não possa usar nenhum outro que use comunicação serial: eles não se encaixam no quadro / têm uma pinagem diferente! Escolha o certo para sua região (TL; DR: 400 para nós/Ásia, 900 para a Europa).
O módulo não está no arquivo BOM CSV, você precisa tirá -lo do Aliexpress:
Se você geralmente trabalha no ecossistema Ebyte com seus módulos em série, esta placa é para você. No entanto, eu não fiz uma porta do meu software baseado em E32 para esta placa. E na verdade não estou planejando fazê -lo, pois eu pessoalmente uso a versão E32. Mas você pode portá -lo usando a Biblioteca Renzo Mischiantis Arduino.
O módulo não está no arquivo BOM CSV, você precisa tirá -lo do Aliexpress:
O software que desenvolvi para isso deve ser facilmente extensível sem tocar na lógica real do próprio gateway, mas adicionando um pequeno pedaço de código a um arquivo separado.
Dê uma olhada no lora-ids.h . Este arquivo deve ser compartilhado entre este gateway e todos os sensores que você desenvolve. Ele possui uma lista de tipos de mensagens diferentes e você pode adicionar facilmente o seu. Por exemplo, ele possui um tipo de "caixa de correio" que define algumas propriedades que uma caixa de correio enviaria. Isso facilita a leitura e o processamento dessas mensagens e a criação de tópicos no seu servidor MQTT, que você pode ouvir. Há também um tipo "personalizado" que basicamente tem texto gratuito e talvez seja bom para depuração.
Sinta -se à vontade para adicionar seus próprios tipos neste arquivo. Você precisará adicionar duas coisas:
#define LORA_MESSAGE_ID_CUSTOM 0x0struct LoRaMessageCustom : LoRaBaseO assunto em que uma mensagem se enquadra é construída a partir do ID do gateway, ID do dispositivo e ID da mensagem. Então, para o exemplo a seguir, assumimos que:
0xA e Nome mailbox-sensor enviouLORA_MESSAGE_ID_MAILBOX e0x1 e Name lora-gateway-e32 o recebe. Então, vamos primeiro pegar o tipo de mensagem mailbox como exemplo. Define estas propriedades:
Além disso, ele define seu próprio nome (e com isso: o pai para essas propriedades):
String getMqttTopicName() { return "mailbox"; }Portanto, sempre que o gateway receber uma mensagem desse tipo, ele lerá as propriedades dele e as soltará nesses tópicos:
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperature Mas onde vem o /messages/ parte se formar e o que é ???/ . Isso é fácil: o dispositivo / sensor fácil que você desenvolve também deve ser registrado em lora-ids.h . No topo, há uma lista de dispositivos, cada um com:
O gateway classificará todas as mensagens que recebe pelo dispositivo e o prefixa com esse nome de dispositivo, além de classificar todas as mensagens no tópico de uma messages para permitir que o dispositivo tenha outros tópicos próximos às mensagens reais. Isso permite que você ouça campos/valores específicos de tipos de mensagens específicos de um dispositivo específico!
Então agora sabemos disso:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperatureA última peça que falta é o gateway que recebe as mensagens. Também é definido como um dispositivo, por isso também tem um nome, para que possamos construir facilmente o nome de tópico completo para o nosso exemplo:
lora-gateway-e32/devices/mailbox-sensor/messages/mailbox/durationlora-gateway-e32/devices/mailbox-sensor/messages/mailbox/distancelora-gateway-e32/devices/mailbox-sensor/messages/mailbox/humiditylora-gateway-e32/devices/mailbox-sensor/messages/mailbox/temperatureAgora você pode facilmente:
LORA_DEVICE_IDS com um ID e nome Dê uma olhada na função sendLoRaMessage : bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0) espera que dêmos: damos:
Também podemos especificar opcionalmente:
LORA_GATEWAY_IDLORA_DEVICE_ID , se não for especificado Portanto, no seu código, basta criar uma instância do ID da mensagem que você deseja enviar e passá -lo para sendLoRaMessage :
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
E é isso :)
Para isso, damos uma olhada em como a mensagem real é construída que é enviada via Lora. A idéia básica é roubada da biblioteca Arduino-Lora, que usa bytes individuais para identificar remetentes, receptores etc.
Olhando para uma única mensagem:
| . Portanto, pegando o exemplo da mensagem mailbox acima, o valor da mensagem pode ser assim: 12345|3.56|44.55|27.4