Projeto de comunicação de dados.
O sistema é composto de um master e dois slaves. O master é a interface com o pc. O slave 1 é um controle de luz. O slave 2 controla um ventilador.
Eles se comunicam via protocolo RS485.
O master consulta valores, realiza ações de controle e pode selecionar setpoints para ação de controle local.
Contém um linkit 7688 duo.
O Slave 1 é um controle de iluminação com sensor de luminosidade. Permite controle local e responde requests de leitura e sets/unsets.
Contém um nodemcu, um fotoresistor e um relé.
O Slave 2 é um controle de iluminação com sensor de luminosidade. Permite controle local e responde requests de leitura e sets/unsets.
Contém um nodemcu, um lm35 e um relé.
A partir de um terminal ssl via conexão wifi direta à placa linkit smart duo (no modo AP), você pode executar o programa minicom para comunicação serial:
ssh root@192.168.100.1
minicom
e digite os comandos ou o protocolo diretamente. Você deve digitar normalmente o comando e apertar enter ao finalizar. Para protocol, você não precisa apertar enter.
O protocolo obedece à seguinte regra:
São possíveis, assim, 256 endereços menos o usado para controle (a). Portanto são possíveis:
ping
retorna o ping da placa linkit master.
ping_slave
retorna o ping de todos os slaves escutando (use somente com um slave para debugar).
autoping
ativa/desativa o modo autoping que ping de um em um segundo pela slave (use somente com um slave para debugar).
O protocolo obedece agora à seguinte regra:
O quarto caractere é usado para identificar o valor ('0' ou '1') à ser setado. Ele é ignorado no caso de leitura ('r'
'a0r0l' para ler o sensor da placa slave_zero. Onde 'l' na verdade deve ser substituído pelo byte de checksum ('a'+'0'+'r'+'0')
'a1s1l' para ligar o relê da placa slave_one. Onde 'l' na verdade deve ser substituído pelo byte de checksum ('a'+'0'+'r'+'0')
O primeiro caractere da resposta é sempre 's' seguido do byte de endereço da placa que está respondendo.
's0r?l' indica a leitura ? do sensor da placa slave_zero. Onde 'l' na verdade deve ser substituído pelo byte de checksum ('s'+'0'+'r'+'?')
Os arquivos da parte dois estão em uma pasta separada. Destaque para o código do checksum:
char protocol_errorCharacterFor(String msg) {
byte cks = 0;
for(int i=0; i < 4; i++) {
cks += byte(msg[i]);
}
return char(cks);
//return 'l';
}
Testes para comunicação sem fio:
A partir de um terminal ssl via conexão wifi direta à placa linkit smart duo (no modo AP), você pode executar o programa telnet para comunicação wifi usando o endereço ip de qualquer node:
telnet 192.168.100.220
(A máscara é a da rede da nodemcu 255.255.255.0 e o final 220 varia)
Você pode encontrar o endereço das nodes usando a interface do arduino que mapeia o ip ao nome da placa pela biblioteca OTA de upload via wifi.
e digite o protocolo diretamente. Você deve digitar normalmente a palavra do protocolo e apertar enter ao finalizar. Recomenda-se comentar a parte do cálculo de detecção do erro e retornar qualquer outro fixo ao invés do calculado (letra 'l' por exemplo). Isso para que você não tenha que calcular o checksum de cabeça.
Implementar o código nodejs para operar as placas e entregar uma interface amigável via express que pode ser acessada pelo navegador e abstrai os códigos para controles simples de chaves e displays com a leitura do sensor.