Skip to content

Sistema de sensoriamento genérico baseado na internet das coisas (IOT) usando uma OrangePi, uma ESP8266 e comunicação através do protocolo MQTT

Notifications You must be signed in to change notification settings

DanielSRS/mcute

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tabela de Conteúdo

Sobre o projeto

Projeto de sensor analógico/digital em microcontrolador utilizando comunicação mqtt.

Implementando de um protótipo de sistema de sensoriamento genérico de uma plataforma baseada na NodeMCU para confecção das unidades de sensoriamento modular comandado por um Single Board Computer (SBC), capaz de controlar o acionamento de um conjunto variável de sensores, assim como monitorar o seu funcionamento, de forma automatizada por meio de uma comunicação MQTT

Arquitetura

A solução desenvolvida foi arquitetada da seguinte maneira:


Diagrama geral da solucao

Diagrama de estados da SBC

stateDiagram-v2
  [*] --> RealTimeUpdate
  [*] --> Publishing
  State RealTimeUpdate {
  TempoReal:  Leituras em tempo real
        note left of TempoReal
            Exibição em tempo real das 
            leituras dos sensores
        end note

  [*] --> TempoReal
TempoReal --> Histórico: Botão 1

  Histórico:  Histórico
        note right of Histórico
            Histórico das ultimas leituras do sensor
            exibido no display no momento do
            pressionar do botão 1
        end note
    Histórico --> TempoReal: Botão 2
}

  State Publishing {
[*] --> Publicações
  Publicações:  Publicações
        note right of Publicações
            - Requisições dos valores dos sensores
            - Publicação dos históricos de leituras
            e velocidade de atualização
        end note
}
Loading

Diagrama de sequencia

Fluxo drawio



Interface dos dados enviados nos topicos de historico

As mensagens enviadas pela SBC aos topicos de historico:

  • analogic/history
  • 5/history
  • 16/history

são formatadas como strings em formato JSON((JavaScript Object Notation)). Como por exemplo:

{"number_of_items": 10,"max_lenght": 10,"values": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]}

Segue, em typescript, a descrição de cada atributo da resposta

/**
 * Interface (em typescript) dos dados enviados nos
 * topicos dos historicos de leituras dos sensores digitais
 * e analogico
 */
export interface history {
   /**
    * Quntidade de leituras atualmente no historico.
    */
  number_of_items: number
  /** 
   * Quantidade maxima de leituras no historico
   */
  max_lenght: number // 10 leituras atualmente
  /**
   * Lista dos ultimos valores lidos do sensor.
   * O primeiro valor da lista representa a leitura mais recente
   */
  values: number[]
}

Por padrão, number_of_items sempre tem no minimo tamanho 1, pois na SBC cada lista é inicializada com 1 leitura de valor zero. ou seja:

values: number[] = [ 0 ];

Feito Com

Abaixo segue o que foi utilizado na criação deste projeto:

  • GCC (GNU Compiler Collection) - O GNU Compiler Collection é um conjunto de compiladores de linguagens de programação produzido pelo projecto GNU.
  • ESP8266 SDK para Arduino - Este projeto traz suporte ao chip ESP8266 para o ambiente Arduino.
  • Arduino IDE v1.8 - O Arduino Software (IDE) de código aberto facilita a escrita de código e o upload para a placa. Este software pode ser usado com qualquer placa Arduino.

Começando

Para conseguir rodar o projeto, siga os passos abaixo.

Pré-requisitos

Antes de seguirmos, é preciso que você tenha o ambiente configurado para criar e testar aplicações em C, bem como o ambiente para desenvolvimento React Native configurado (para compilar o IHM_Remoto).

No ambiente da SBC (considerando a Raspberry Pi rodando um sistema baseado no Debian) caso não tenha o tooling to GCC, execute:

$ sudo apt install build-essential

Instale também na SBC o Paho MQTT e WiringPI


  1. Instale a IDE do Arduino na versão 1.8 de acordo com a documentação oficial
  2. Abra as preferências da IDE e adicione o código abaixo, assim como na imagem e pressione o botão de OK
https://arduino.esp8266.com/stable/package_esp8266com_index.json

Captura de tela_20221118_144353

  1. Em seguida, abra o gerenciador de placas da IDE e instale o Generic ESP8266 Module na versão 3.0.2, como na imagem:

Captura de tela_20221118_144840

  1. Em seguida, abra o gerenciador de bibliotecas e instale a biblioteca PubSubClient by Nick O'Leary, como na imagem:

instalarpubsub

Estrutura de Arquivos

A estrutura de arquivos está da seguinte maneira:

ESP8266_ES
├── NodeMCU/
│   ├── NodeMCU.cpp
├── Raspberry/
│   ├── display.h
│   ├── makefile
│   ├── display.o
│   └── main.c
├── .gitignore
└── README.md

Serão explicados os arquivos e diretórios na seção de Edição.

Instalacao na NodeMCU

  1. Abra a ide do Arduino
  2. Abra o menu: Ferramentas > Placa e selecione a placa NodeMCU 1.0
  3. Conecte a NodeMCU ao computador via usb
  4. Copie o diretorio NodeMCU para dentro do diretorio de projetos do arduino, abra a IDE e abra o arquivo NodeMCU.ino. Copile e carrege o codigo na ESP8266
  5. Selecione a porta no menu: Ferramentas > Porta
  6. Carregue o codigo na placa (Ctrl + u)

Instalação na SBC

  1. Na SBC, faça clone do projeto utilizando o comando e navegue para o diretório raiz do projeto:
$ git clone https://github.com/DanielSRS/mcute
$ cd mcute
  1. Navegue até o diretório que contém o código a ser executado na SBC e faça build:
cd IHM_Local
make mock
make all
  1. Execute a aplicação
make run

Instalação do IHM_Remoto

  1. Na maquina onde há a configuração do ambiente de desenvolvimento React Native:
git clone https://github.com/DanielSRS/mcute
cd mcute
  1. Navegue até o diretório que contém o código a das aplicações Android, IOS, Web e Windows e faça build:
cd IHM_Remote
yarn
  1. Execute a aplicação web
yarn web
  1. Ou a aplicação android
yarn android
  1. Ou a aplicação IOS
yarn ios
  1. Ou a aplicação windows
yarn windows

Edição

Nesta seção haverão instruções caso você queira editar o projeto, explicando para que os diretórios são utilizados e também os arquivos de configuração.

  • NodeMCU - Após execução do projeto, o analizador léxico irá gerar arquivos de saída neste diretório contendo as informações processadas em cada arquivo de entrada.

    • NodeMCU.cpp - Codigo da aplicação executada na NodeMCU responsável por interpretar os comandos enviados pela SBC, realizar a leitura dos sensores e enviar atraves da UART as informações solicitadas
  • IHM_Local - Diretório contendo todos os arquivos da aplicação executada na SBC (Raspberry Pi),

    • main.c - Codigo da aplicação executada na SBC e responsável pelo controle da NodeMCU enviando comandos, lendo e exibindo as informações coletadas.

    • makefile - Arquivo de configuração makefile com as instruções de build do projeto.

    • display.h - Arquivo de cabeçalho da biblioteca de comunicação com o display 16x2.

    • display.o - Biblioteca para comunicação com o display 16x2.

  • .gitignore - Arquivo de configurção do git contendo informções de arquivos que não devem ser versionados junto com o codigo fonte;

  • README.md - Este arquivo. Aqui é feito a documentação basica do projeto com instruções de instalação, configuração e execução.

Executar projeto na SBC

  • Ainda no diretório raiz, navegue para o diretorio Raspberry:

    cd IHM_Local
  • Faça o build da aplicação

    make mock
    make all
  • Faça o build e rode a aplicação

    make run
  • Execute manualmente a aplicação informando o sensor analógico e dois digitais conectados

    $ sudo ./Rasp -analogic -d."D0".16 -d."D1".5

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

Autores


Alexandre Silva Caribé

Alisson Bonfim Silva

Daniel Santa Rosa Santos

Joanderson Santos

Contribuição

  • Quaisquer dúvidas, sugestões ou problemas que encontrar, fique livre para abrir uma issue.
  • Se quiser contribuir ajustando o codigo, implementando novas funcionalidas ou corrigindo bugs, faça um fork do projeto, faça as alterações nescessárias como descrito na seção de Edição e abra um pull request