Skip to content

Sistema de sensoriamento genérico usando uma Raspberry Pi, uma ESP8266 e comunicação através do protocolo UART

Notifications You must be signed in to change notification settings

DanielSRS/ESP8266_ES

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Sensoriamento Genérico

GitHub Org's stars

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).

Seções

Diagrama do projeto

diagram

Comunicação UART

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.

Comunicação entre os dispositivos

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.

Tabelas de comandos

Os dados de resposta enviados pela NodeMCU foram exibidos em um display LCD 16x2.

Microcontroladores Utilizados

Raspberry Pi Zero W

Raspberry Pi Zero W

💻 Detalhes da arquitetura

  • 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

Raspberry Pi Zero W

💻 Detalhes da arquitetura

  • 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

Desenvolvimento do projeto

Raspberry

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)

ESP8266

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.

Ferramentas Utilizadas

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.

Rodando o Projeto

Compilar código C

  gcc arquivo.c

Executar código

  ./arquivo

Processo de build do Makefile

  cd src/
  make all

Executar Makefile

  cd src/
  make run

Testes Realizados

Para realização dos testes foi utilizado o kit de desenvolvimento na imagem abaixo: Kit de desenvolvimento utilizado

Leitura dos sensores digitais

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.

Leitura do sensor analógico

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.

Ligar e desligar o LED built-in da NodeMCU

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.

Obtenção do status da NodeMCU

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.

Vídeo dos testes realizados da leitura dos sensores

VID-20221117-WA0000_001.mp4

Autores


Alexandre Silva Caribé

Daniel Santa Rosa Santos

Joanderson Santos

Materiais de referência

Raspberry Pi Documentation

Display LCD HD44780U

BCM2835 ARM Peripherals

ESP8266 Arduino Core Documentation

Documentação de Referência da Linguagem Arduino

ESP8266WiFi library

ESP8266mDNS library

WifiUdp library

ArduinoOTA

SoftwareSerial Library

HardwareSerial Library

Termios Library

About

Sistema de sensoriamento genérico usando uma Raspberry Pi, uma ESP8266 e comunicação através do protocolo UART

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published