Shield Ethernet Arduino.
Esta placa contém um leitor de cartões de formato microSD que pode ser utilizado para a partilha de informação para a rede. Contudo, este leitor não será utilizado nesta fase do projeto.
A comunicação é feita por meio de protocolo de comunicação SPI através da porta ICSP do Arduino Mega. Este protocolo de comunicação série é usado em microcontroladores para comunicarem com periféricos a pequenas distâncias. Utiliza uma gestão mestre/escravo, geralmente o mestre é o microcontrolador e os escravos são os restantes elementos periféricos. A transmissão de informação é feita através de três linhas com sentidos únicos. A MISO (Master in Slave out) de envio de dados para o mestre, a MOSI (Master out Slave in) de envio de dados para o escravo e SCK que transmite um impulso de relógio que serve de meio de sincronização dos dados. A linha SS (Slave Select) ativa o escravo com o qual o mestre quer comunicar.
A comunicação é partilhada entre o circuito integrado W51000 e o leitor de cartões, sendo a escolha feita através da ativação das portas 10 e 4 respetivamente. Como partilham a mesma porta SPI, a comunicação apenas pode ser feita à vez.
A placa dispõe de uma série de LED que indicam vários estados, como descrito na Tabela 4.
Resumo dos indicadores luminosos do Shield Ethernet.
Nome
|
Funcionamento
|
PWR
|
Indica que a placa está ligada
|
LINK
|
Indica a existência de ligação à rede, pisca quando existe transmissão de informação
|
FULLD
|
Indica se a ligação Ethernet está a ser feita com suporte full Duplex (comunicação bidirecional simultânea)
|
100M
|
Indica que a ligação Ethernet está a ser feita a 100 Mbits/s ao invés de 10 Mbits/s
|
RX
|
Pisca quando informação é recebida
|
TX
|
Pisca quando informação é enviada
|
COLL
|
Pisca quando são detetadas colisões na rede
|
Todas as portas da placa de desenvolvimento Arduino Mega estão acessíveis no Shield, com exceção das portas 4, 8 e SICSP. A atribuição de um endereço de IP ao Shiled Ethernet é configurada através da programação do microcontrolador. Para configurar o Shield Ethernet no Arduino foi utilizada a biblioteca Ethernet.h, disponível no IDE Arduino e de livre utilização. Esta biblioteca é responsável pelo controlo do circuito integrado W51000, em que foram utilizadas as seguintes funções:
Em que, “mac” representa o endereço físico que se deseja atribuir ao dispositivo a registar na rede Ethernet. A função “IPAddress” define o endereço de IP que mais tarde será atribuído ao dispositivo. Um novo cliente de Ethernet é criado através da função “EthernetClient”. Este cliente será chamado sempre que se queira enviar ou receber informação para a rede. O registo do dispositivo na rede é feito pela função “Ethernet”, que regista o endereço “mac” e o seu respetivo endereço de IP na rede.
A ligação de Wi-Fi integrada no microcontrolador ESP8266 permite a ligação direta do microcontrolador ao Router.
A biblioteca ESP8266WiFi.h foi utilizada para registar a placa NodeMCU na rede Wi-Fi. Foi utilizado o seguinte conjunto de funções presentes nesta biblioteca:
A função “WiFiClient” cria um novo cliente de Wi-Fi que será chamado sempre que se queira enviar ou receber informação para a rede. É utilizada a função “WiFi.begin()” para registar o dispositivo na rede identificada pelo seu SSID. Para verificar o estado da ligação é utilizada a função “WiFi.status()”.
A unidade central de controlo do sistema, o computador Raspberry Pi 2, liga-se à rede Ethernet através da porta RJ45 disponível no mesmo. A atribuição de um endereço de IP é automática e gerida pelo Router.
MQTT
O protocolo de mensagens escolhido para as comunicações entre as unidades periféricas e a unidade central foi o Message Queue Telemetry Transport (MQTT).
O broker escolhido para instalação na unidade central de controlo foi o Mosquitto. Este é um broker de livre utilização que implementa o protocolo MQTT.
Para instalar o servidor de MQTT Mosquitto no Raspberry Pi 2 foram executados através de uma ligação SSH os seguintes comandos:
Este conjunto de comandos adicionam a chave de verificação de veracidade e o reportório Mosquitto à lista de fontes de pacotes de instalação. De seguida é instalado o broker Mosquitto. Por padrão a porta do servidor é a 1883, esta manteve-se inalterada.
Para testar o correto funcionamento do broker foi efetuado um teste de subscrição e publicação para um tópico através da linha de comandos. Numa linha de comandos foi subscrito o tópico “sensors/temperature” com nível QoS igual a 1 ao utilizar o comando mosquitto_sub:
Numa segunda linha de comando foi enviada uma mensagem através do comando mosquitto_pub, com o valor “32” para o canal “sensors/temperature” e com nível QoS igual a 1:
Resultando na receção por parte do subscritor de uma mensagem com o valor “32”.
Devido ao Router Ethernet restringir o acesso à rede a partir de fontes externas, optou-se por não configurar nenhum método de segurança adicional no broker. No entanto, este dispõe do comando mosquitto_passwd que permite a gestão de utilizadores e palavras-passe para autentificação dos clientes do servidor. Mais informação sobre o broker Mosquitto encontra-se no DVD em anexo.
A biblioteca PubSubClient.h foi utilizada para registar as placas Arduino e NodeMCU no servidor Mosquitto. As funções de publicação/subscrição de tópicos funcionam em conjunto com as funções das bibliotecas de ligação às redes Ethernet e Wi-Fi, é através dos seus clientes que as mensagens MQTT são enviadas. As seguintes funções da biblioteca PubSubClient.h foram utilizadas:
Em que, a função “PubSubClient” cria um cliente MQTT através de uma ligação Ethernet ou Wi-Fi. A função “connect()” regista o cliente no broker. A informação sobre o endereço do broker é feita através da função “setServer()”. A verificação do estado da ligação ao broker é feita pela função connected(). A subscrição de tópicos é feita recorrendo à função “subscribe()”, enquanto a publicação de mensagens para tópicos é feita recorrendo à função “publish()”. Quando uma mensagem é enviada para um tópico subscrito por um destes clientes o método “callback” é chamado para que a mensagem possa ser recebida. Este método é definido no cliente local pela função “setCallback”.
Compartilhe com seus amigos: |