Foi proposto o desenvolvimento de um Sistema de Sensoriamento Genérico para um processador da arquitetura ARMV6L. O sistema deveria ser capaz de controlar o acionamento de um conjunto variável de sensores e monitorar seu funcionamento de forma automatizada. Para isso, o sistema contou com dois microcontroladores, uma Raspberry Pi Zero W, que desempenhou o papel de SBC (Single Board Computer) e uma NodeMCU ESP8266, estes deveriam comunicar-se através do protocolo UART(Universal Asynchronous Receiver Transmitter). Donde, a NodeMCU deveria ser responsável por obter e retornar os valores dos sensores, quando estes fossem requisitados via comunicação serial pela Raspberry. Além disso, o sistema deveria servir para a criação de um ecossistema de internet das coisas (IOT).
O protocolo de comunicação serial adotado foi o UART (Universal Asynchronous Receiver/Transmitter ou Receptor/Transmissor Assíncrono Universal), que define um conjunto de regras para a troca de dados seriais entre dois dispositivos. A comunicação utiliza dois fios conectados entre o transmissor e o receptor para transmitir e receber informações entre ambas as direções. Uma vantagem do UART é que ele é assíncrono, de forma que o transmissor e o receptor não precisam compartilhar um sinal de clock comum, com isso, ambas as extremidades devem transmitir ao mesmo tempo e em velocidade predefinida para poder ter a mesma temporização de bits, essa taxa é denominada taxa de baud, ou seja, taxa de transmissão de dados. A taxa de baud utilizada no projeto foi 115200. Além de ter a mesma taxa de bauds, ambos os lados de uma conexão UART também têm que usar a mesma estrutura de frames e parâmetros. A estrutura de frames da UART consiste em um bit inicial, um bit final, um bit de paridade e bits de dados. O bit inicial define o início da comunicação através da mudança de estado do sinal lógico, ele é seguido dos bits de dados, que nesta solução são 8 bits (1 byte), seguido do bit final, que determina a finalização da comunicação. O bit de paridade é enviado antes do bit final, servindo para determinar se existem erros nos dados transmitidos.
A Raspberry foi responsável por iniciar a comunicação serial, enviando comandos para a NodeMCU, esta deveria enviar os dados de resposta de acordo com o comando de requisição. Os comandos de requisição e resposta estão na imagem abaixo.
Os dados de resposta enviados pela NodeMCU foram exibidos em um display LCD 16x2.
-
Sistema Operacional: Raspbian
-
Arquitetura: ARMV6L
-
Ordem de armazenamento de byte: Little Endian (menor para o MSB)
-
Processador single-core de 1 GHz
-
GPIO 40-Pinos
-
Memórioa: 512MB de memória LPDDR2 SDRAM;
-
VID: ARM
-
Modelo: 7
-
Nome do Modelo: ARM1176
-
NodeMCU ESP8266 V3 CH340
-
Programação via Lua
-
13 pinos GPIO, 10 canais PWM, I2C, SPI, ADC, UART e 1-Wire.
-
5 conexões TCP/IP
O script de desenvolvimento da Raspberry está localizado no arquivo main.c. Como dito nas seções anteriores a Raspberry foi responsável por iniciar a comunicação serial, além de exibir as informações recebidas pela NodeMCU em um display lcd. Para a utilização do protocolo UART na Raspberry foi utilizada a biblioteca Termios (termios.h), esta define a interface de E/S da placa, trabalhando com arquivos do sistema operacional para efetuar a comunicação UART pelos pinos Tx e Rx. Portanto, essa biblioteca foi utilizada para configurar, enviar e receber mensagens através do protocolo UART.
Também se utilizou de bibliotecas para manipulação de cadeia de caracteres como a String (string.h), de funções de entrada e saída como a Stdio (stdio.h) e a Fcntl (fcntl.h), de conversões de funções e constantes básicas como a Stdlib (stdlib.h) e de definições de constantes e titulos simbólicos como a Unistd (unistd.h)
Para fazer a conexão da ESP8266 foi necessário se utilizar da conexão OTA (Over The Air) que se refere a uma forma de atualização de software sem fio e de forma remota, essa conexão exigiu o uso de bibliotecas de conexão Wi-Fi como a ESP8266WiFi (ESP8266WiFi.h) e a ArduinoOTA (ArduinoOTA.h) que é a biblioteca construida para o Arduino e dispositivos similires IOT para fazer essa conexão OTA, também se utilzou da ESP8266mDNS (ESP8266mDNS.h) que facilita o trabalho com endereços IP e dá suporte a DNS Multicast/mDNS, a WiFiUdp (WiFiUdp.h) que nos permite de forma rápida e descomplicada, o envio de informações através da rede pelo protocolo UDP.
Para o processo de desenvolvimento do sistema foram utilizadas as seguintes ferramentas:
O Visual Studio Code é um editor de texto conhecido por ser um editor de código aberto muito intuitivo. Além disso, ele também é muito popular por ser multiplataforma e estar disponível para os principais sistemas operacionais, que são Linux, Mac e Windows.
É uma plataforma eletrônica de código aberto baseada em hardware e software fáceis de usar. Nesta plataforma é possível realizar o envio do código desenvolvido na linguagem C, para a NodeMCU esp8266 através da comunicação sem fio usando a biblioteca Arduino OTA.
O programa GNU make determina quais partes de um grande programa devem ser compiladas ou recompiladas. Além disso, ele executa os programas necessários para fazer essas tarefas. Para orientar o programa make é necessário um arquivo Makefile que dita todas as regras de compilação GNU.
É o depurador de nível de fonte GNU que é padrão em sistemas linux (e muitos outros unix). O propósito de um depurador como o GDB é permitir ver o que está acontecendo “dentro” de outro programa enquanto ele é executado, ou o que outro programa estava fazendo no momento em que travou. Ele pode ser usado tanto para programas escritos em linguagens de alto nível como C e C++ quanto para programas de código assembly.
gcc arquivo.c
./arquivo
cd src/
make all
cd src/
make run
Para realização dos testes foi utilizado o kit de desenvolvimento na imagem abaixo:
Para realização do teste dos sensores digitais foram utilizados dois botões, estes quando pressionados representaram a alteração dos valores digitais dos sensores.
Para realização do teste do sensor analógico foi utilizado um potenciômetro, este representou a alteração do valor analógico, quando utilizado. Podendo ter um valor de 0 a 1024.
Foi realizado o teste para ligar e desligar o LED built-in da NodeMCU. Teste esse que funcionou como esperado, isto é, o led built-in da NodeMCU foi aceso e apagado quando requisitado por comando através da Raspberry.
Foi realizado para obter o status da NodeMCU. Status este podendo ser OK, ou seja tudo ok com a NodeMCU, ou status de ERRO, ou seja a NodeMCU apresentou algum erro no seu funcionamento.
VID-20221117-WA0000_001.mp4
Alexandre Silva Caribé |
Daniel Santa Rosa Santos |
Joanderson Santos |
---|
ESP8266 Arduino Core Documentation