- Código fonte genérico (para todos os endDevices da rede).
- Código do servidor implementado no Raspberry Pi.
- Para desenvolver e carregar o código fonte no nodeMCU ESP8266 foi usado o Visual Studio Code com a extensão PlatformIO.
- Para usar o código na IDE do Arduino, utilize o arquivo main.cpp mudando a extensão para .ino e retirando a biblioteca Arduino.h.
- Você pode precisar instalar o driver ch340: download aqui (linux - testado em debian) ou aqui (windows).
- Tutorial para usar o ESP8266 na PlatformIO Vs Code aqui
- Tutorial para usar o ESP8266 na IDE Arduino aqui
Inicialmente é definido um nodeMCU para funcionar como node master, sendo responsável por obter todas as mensagens provenientes dos outros Nodes e enviar, via comunicação serial, para o Raspberry Pi. Assim que o NodeMCU master se conecta via porta serial com o raspberry, ele começa a enviar pacote de dados contendo se id e a lista de nodes. Assim que o Raspberry recebe ele retorna uma mensagem que deve ser repassada para os outros nós. Essa mensagem contém:
- timestamp: Para que os nodes sincronizem seu timestamp com o do Rasberry
- id do nó master: Para que os outros nós saibam para quem enviar as informações obtidas pelos sensores
- tempo de envio das mensagens
- lista de ativação de pinos: Uma lista com 18 campos (um pra cada pino do NodeMCU) onde somente os que representam pinos com sensroes conectados a eles receberão valor 1. Essa definição faz que o nodeMCU pegue as informações apenas dos pinos com sensores, além de permitir uma possívelalteração na disposição dos mesmos.
Feito isso todos os nós ajustam seus parâmetros e começam imediatamente a enviar seus pacotes de dados para o nodeMaster, que por sua vez irá enviar, via porta serial, para o Raspberry PI. O Raspberry PI ao receber as mensagens de dados armazena os valores captados em uma estrutura de dados, de modo que seja possível processa-los se desejado. Além desse armazenamento, também é realizado uma verificação de valores anormais, a detecção ou não desses valores também é armazenada na estrutura de dados citada anteriormente.
Além disso, a cada 15 mensagens recebidas o Raspberry realiza um processo de backup, salvando a estrutura de dados em um arquivo binário.