From dcf2e630ae9fd4648004feb092b0e00d0953c6b5 Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 12:45:26 -0300 Subject: [PATCH 01/11] =?UTF-8?q?=E2=9C=A8=20Add=20led=20turn=20on=20and?= =?UTF-8?q?=20off?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IHM_Remote/src/App.tsx | 123 +++++++++++++++++++++++++++-------------- 1 file changed, 82 insertions(+), 41 deletions(-) diff --git a/IHM_Remote/src/App.tsx b/IHM_Remote/src/App.tsx index 7175263..a934fd8 100644 --- a/IHM_Remote/src/App.tsx +++ b/IHM_Remote/src/App.tsx @@ -24,7 +24,7 @@ interface history { values: number[]; } -const client = new Paho.Client('192.168.1.2', 9001, '', Date.now().toString()); +const client = new Paho.Client('10.0.0.101', 9001, '', Date.now().toString()); const App = () => { const [latestData, setLatestData] = useState([{ value: 0 }]); @@ -139,6 +139,26 @@ const App = () => { const unusableArea = 35 + 40 + 36; + const turnOnLed = () => { + const buffer = new ArrayBuffer(3); + const charArray = new Uint8Array(buffer); + //charArray.set(0, 0x2); + charArray[0] = 0x06; + charArray[1] = 0x06; + charArray[2] = 0x06; + client.publish('comand', charArray, 2, false); + }; + + const turnOfLed = () => { + const buffer = new ArrayBuffer(3); + const charArray = new Uint8Array(buffer); + //charArray.set(0, 0x2); + charArray[0] = 0x09; + charArray[1] = 0x09; + charArray[2] = 0x09; + client.publish('comand', charArray, 2, false); + }; + return ( @@ -475,46 +495,54 @@ const App = () => { adjustToWidth={true} /> - { - if (client.isConnected()) { - Alert.alert('Ja tá conectado'); - return; - } - client.connect({ - userName: 'aluno', - password: '@luno*123', - onFailure: f => console.log('Failure', f), - onSuccess: () => { - console.log('Sucesso'); - client.subscribe('analogic/history', { - onSuccess: d => { - console.log('incrito em analogic/history'); - }, - }); - client.subscribe('5/history', { - onSuccess: d => { - console.log('incrito em 5/history'); - }, - }); - client.subscribe('16/history', { - onSuccess: d => { - console.log('incrito em 16/history'); - }, - }); - client.subscribe('update_interval', { - onSuccess: d => { - console.log('incrito em update_interval'); - }, - }); - }, - reconnect: true, - }); - }}> - {client.isConnected() ? 'Conectado ✅' : 'Conectar 📡'} - + + { + if (client.isConnected()) { + Alert.alert('Ja tá conectado'); + return; + } + client.connect({ + userName: 'aluno', + password: '@luno*123', + onFailure: f => console.log('Failure', f), + onSuccess: () => { + console.log('Sucesso'); + client.subscribe('analogic/history', { + onSuccess: () => { + console.log('incrito em analogic/history'); + }, + }); + client.subscribe('5/history', { + onSuccess: () => { + console.log('incrito em 5/history'); + }, + }); + client.subscribe('16/history', { + onSuccess: () => { + console.log('incrito em 16/history'); + }, + }); + client.subscribe('update_interval', { + onSuccess: () => { + console.log('incrito em update_interval'); + }, + }); + }, + reconnect: true, + }); + }}> + {client.isConnected() ? 'Conectado ✅' : 'Conectar 📡'} + + + Ligar o led + + + Desligar o led + + {/*} Date: Sun, 18 Dec 2022 15:22:24 -0300 Subject: [PATCH 02/11] =?UTF-8?q?=F0=9F=93=9D=20Update=20docs=20with=20bas?= =?UTF-8?q?e=20project=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 230 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 187 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 98affb9..072b082 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,203 @@ -# Problema #3 – IoT: A Internet das Coisas - -## Descrição do Projeto -

Este documento descreve a utilização de um sistema baseado na internet das coisas (IOT).

- -Table of contents -================= - - - * [Instalação](#instalação) - * [Usage](#usage) - * [STDIN](#stdin) - * [Local files](#local-files) - * [Remote files](#remote-files) - * [Multiple files](#multiple-files) - * [Combo](#combo) - * [Auto insert and update TOC](#auto-insert-and-update-toc) - * [GitHub token](#github-token) - * [TOC generation with Github Actions](#toc-generation-with-github-actions) - * [Tests](#tests) - * [Dependency](#dependency) - * [Docker](#docker) - * [Local](#local) - * [Public](#public) - - - -Instalação -============ + +## Sobre o projeto +Projeto de sensor analógico/digital em microcontrolador utilizando comunicação serial. + +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 UART +
+ +
+ + + +## Tabela de Conteúdo + +- [Sobre o Projeto](#sobre-o-projeto) +- [Tabela de Conteúdo](#tabela-de-conte%C3%BAdo) +- [Feito Com](#feito-com) +- [Começando](#come%C3%A7ando) + - [Pré-requisitos](#pr%C3%A9-requisitos) + - [Estrutura de Arquivos](#estrutura-de-arquivos) + - [Instalação](#instala%C3%A7%C3%A3o) + - [Linting](#edi%C3%A7%C3%A3o) + - [Edição](#edi%C3%A7%C3%A3o) + - [Executar projeto](#executar-projeto) +- [Autores](#autores) +- [Materiais de referência](#materiais-de-referência) +- [Contribuição](#contribui%C3%A7%C3%A3o) + + + +
+ +## Feito Com + +Abaixo segue o que foi utilizado na criação deste projeto: + +- [GCC (GNU Compiler Collection)](https://gcc.gnu.org/) - O GNU Compiler Collection é um conjunto de compiladores de linguagens de programação produzido pelo projecto GNU. +- [ESP8266 SDK para Arduino](https://github.com/esp8266/Arduino) - Este projeto traz suporte ao chip ESP8266 para o ambiente Arduino. +- [Arduino IDE v1.8](https://www.arduino.cc/en/software) - 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 começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: -[Git](https://git-scm.com), [Paho MQTT](https://github.com/eclipse/paho.mqtt.c). +Antes de seguirmos, é preciso que você tenha o ambiente configurado para criar e testar aplicações em C. +No ambiente da SBC (considerando a Raspberry Pi rodando um sistema baseado no Debian) caso não tenha o tooling to GCC, execute: -### 🎲 Rodando o projeto +``` +$ sudo apt install build-essential +``` +1. Instale a IDE do Arduino na versão 1.8 de acordo com a [documentação oficial](https://www.arduino.cc/en/software) +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](https://user-images.githubusercontent.com/39845798/202769027-3c90d7e9-46e7-466c-a4ce-e1c3c5729711.png) + +3. 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](https://user-images.githubusercontent.com/39845798/202769949-31b1df48-23b3-4089-b06a-dae98be37bbe.png) + +### Estrutura de Arquivos + +A estrutura de arquivos está da seguinte maneira: ```bash -# Clone este repositório -$ git clone +ESP8266_ES +├── NodeMCU/ +│ ├── NodeMCU.cpp +├── Raspberry/ +│ ├── display.h +│ ├── makefile +│ ├── display.o +│ └── main.c +├── .gitignore +└── README.md +``` -# Acesse a pasta do projeto no terminal/cmd -$ cd mcute +Serão explicados os arquivos e diretórios na seção de [Edição](#edição). -# Vá para a pasta IHM -$ cd IHM_Local +### Instalação na NodeMCU -# Execute a aplicação em modo de testes com makefile -$ +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. Selecione a porta no menu: Ferramentas > Porta +5. Copie o codigo do arquivo NodeMCU.cpp para o editor da IDE +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: + +```sh +$ git clone https://github.com/DanielSRS/ESP8266_ES +$ cd ESP8266_ES +``` + +7. Navegue até o diretório que contém o código a ser executado na SBC e faça build: + +```sh +$ cd Raspberry +$ make all ``` -### 🛠 Tecnologias -As seguintes ferramentas foram usadas na construção do projeto: +8. Execute a aplicação + +```sh +$ make run +``` + +### 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 + +- **Raspberry** - 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: + + ```sh + $ cd Raspberry + ``` +- Faça o build da aplicação + + ```sh + $ make all + ``` + +- Faça o build e rode a aplicação + + ```sh + $ make run + ``` + +- Execute manualmente a aplicação informando o sensor analógico e dois digitais conectados + + ```sh + $ sudo ./Rasp -analogic -d."D0".16 -d."D1".5 + ``` +- Ou liste as portas digitais disponíveis + + ```sh + $ sudo ./Rasp -l + ``` + + +
+ +## Materiais de referência +[Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-zero-w) + +[Display LCD HD44780U](https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.sparkfun.com/datasheets/LCD/HD44780.pdf&ved=2ahUKEwjso46tlqn6AhVGL7kGHSe6BMEQFnoECGIQAQ&usg=AOvVaw076YT-P88DM3oFFvTDUv43) + +[BCM2835 ARM Peripherals](https://www.raspberrypi.org/app/uploads/2012/02/BCM2835-ARM-Peripherals.pdf) + +[ESP8266 Arduino Core Documentation](https://readthedocs.org/projects/arduino-esp8266/downloads/pdf/latest/) + +[Documentação de Referência da Linguagem Arduino](https://www.arduino.cc/reference/pt/) + +[ESP8266WiFi library](https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html) + +[ESP8266mDNS library](https://www.arduino.cc/reference/en/libraries/esp8266_mdns/) + +[WifiUdp library](https://www.arduino.cc/reference/en/libraries/wifi/wifiudp/) + +[ArduinoOTA](https://www.arduino.cc/reference/en/libraries/arduinoota/) + +[SoftwareSerial Library](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjSluW4ypz7AhU_kZUCHbP9C5kQFnoECAoQAQ&url=https%3A%2F%2Fwww.arduino.cc%2Fen%2FReference%2FsoftwareSerial&usg=AOvVaw2kUbQNvvMDReS_1LIPB82g) + +[HardwareSerial Library](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/HardwareSerial.h) + +[Termios Library](https://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html) -- [MQTT](https://mqtt.org/) +## 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](#edição) e abra um pull request From 9a48ef2045ca9d5280b52018469e5499ac60fb77 Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 16:39:45 -0300 Subject: [PATCH 03/11] =?UTF-8?q?=F0=9F=93=9D=20Add=20new=20topics=20to=20?= =?UTF-8?q?the=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 072b082..ab966d7 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,24 @@ Implementando de um protótipo de sistema de sensoriamento genérico de uma plat ## Tabela de Conteúdo -- [Sobre o Projeto](#sobre-o-projeto) - [Tabela de Conteúdo](#tabela-de-conte%C3%BAdo) +- [Sobre o Projeto](#sobre-o-projeto) + - [O problema](#) + - [Requisitos](#) + - [Arquitetura da soluçao](#) + - [Diagrama geral da solução](#) + - [Diagrama da SBC](#) + - [Diagrama da NODE_MCU](#) + - [Diagrama de sequencia](#) - [Feito Com](#feito-com) - [Começando](#come%C3%A7ando) - [Pré-requisitos](#pr%C3%A9-requisitos) - [Estrutura de Arquivos](#estrutura-de-arquivos) - [Instalação](#instala%C3%A7%C3%A3o) - - [Linting](#edi%C3%A7%C3%A3o) - [Edição](#edi%C3%A7%C3%A3o) - [Executar projeto](#executar-projeto) +- [Testes](#autores) +- [Possiveis melhorias](#autores) - [Autores](#autores) - [Materiais de referência](#materiais-de-referência) - [Contribuição](#contribui%C3%A7%C3%A3o) From 6cf8b880f9ac2a167183c8e9fbba8dbfdaf3a9f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Carib=C3=A9?= <38389307+AlexandreCaribe@users.noreply.github.com> Date: Sun, 18 Dec 2022 17:27:29 -0300 Subject: [PATCH 04/11] Add autors of project --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index ab966d7..bd22c59 100644 --- a/README.md +++ b/README.md @@ -205,6 +205,11 @@ Nesta seção haverão instruções caso você queira editar o projeto, explican [Termios Library](https://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html) +Autores +======= +| [
Alexandre Silva Caribé](https://github.com/AlexandreCaribe) | [
Alisson Bonfim Silva](https://github.com/absilva21) | [
Daniel Santa Rosa Santos](https://github.com/DanielSRS) | [
Joanderson Santos](https://github.com/Joanderson90) | +| :---: | :---: | :---: | :---: | + ## Contribuição - Quaisquer dúvidas, sugestões ou problemas que encontrar, fique livre para abrir uma issue. From e9bcf1e431ad24b5363d040de9432eb4ef89afe3 Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 17:33:09 -0300 Subject: [PATCH 05/11] =?UTF-8?q?=F0=9F=93=9D=20Add=20history=20interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/README.md b/README.md index bd22c59..be42bb2 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Implementando de um protótipo de sistema de sensoriamento genérico de uma plat - [Diagrama da SBC](#) - [Diagrama da NODE_MCU](#) - [Diagrama de sequencia](#) + - [Formato das mensagens do historico](#interface-dos-dados-enviados-nos-topicos-de-historico) - [Feito Com](#feito-com) - [Começando](#come%C3%A7ando) - [Pré-requisitos](#pr%C3%A9-requisitos) @@ -37,6 +38,49 @@ Implementando de um protótipo de sistema de sensoriamento genérico de uma plat
+## 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))](https://www.json.org/json-en.html). Como por exemplo: + +```JSON +{"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 + +```typescript +/** + * 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: + +```typescript +values: number[] = [ 0 ]; +``` + ## Feito Com Abaixo segue o que foi utilizado na criação deste projeto: From 923f0e9e14816af64fb93b17bd6f592fddf90d1d Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 18:32:57 -0300 Subject: [PATCH 06/11] =?UTF-8?q?=F0=9F=93=9D=20Add=20SBC=20state=20diagra?= =?UTF-8?q?m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 60 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index be42bb2..4cf7d77 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,3 @@ - -## Sobre o projeto -Projeto de sensor analógico/digital em microcontrolador utilizando comunicação serial. - -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 UART -
- -
- ## Tabela de Conteúdo @@ -15,9 +6,9 @@ Implementando de um protótipo de sistema de sensoriamento genérico de uma plat - [Sobre o Projeto](#sobre-o-projeto) - [O problema](#) - [Requisitos](#) - - [Arquitetura da soluçao](#) + - [Arquitetura da soluçao](#arquitetura) - [Diagrama geral da solução](#) - - [Diagrama da SBC](#) + - [Diagrama da SBC](#diagrama-de-estados-da-sbc) - [Diagrama da NODE_MCU](#) - [Diagrama de sequencia](#) - [Formato das mensagens do historico](#interface-dos-dados-enviados-nos-topicos-de-historico) @@ -34,6 +25,53 @@ Implementando de um protótipo de sistema de sensoriamento genérico de uma plat - [Materiais de referência](#materiais-de-referência) - [Contribuição](#contribui%C3%A7%C3%A3o) + +## Sobre o projeto +Projeto de sensor analógico/digital em microcontrolador utilizando comunicação serial. + +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 UART +
+ +### Arquitetura + +### Diagrama de estados da SBC + +```mermaid +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 +} +``` + +
+
From d7da906cc23c4c47d3067c34d736c0152ed5ac83 Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 20:55:37 -0300 Subject: [PATCH 07/11] =?UTF-8?q?=F0=9F=93=9D=20Update=20instalation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 4cf7d77..8da3f21 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,10 @@ https://arduino.esp8266.com/stable/package_esp8266com_index.json ![Captura de tela_20221118_144840](https://user-images.githubusercontent.com/39845798/202769949-31b1df48-23b3-4089-b06a-dae98be37bbe.png) +4. Em seguida, abra o gerenciador de bibliotecas e instale a biblioteca PubSubClient by Nick O'Leary, como na imagem: + +![instalarpubsub](https://user-images.githubusercontent.com/39845798/208325870-813796ce-8b16-49b9-b02b-99dd00e62385.png) + ### Estrutura de Arquivos A estrutura de arquivos está da seguinte maneira: @@ -178,11 +182,11 @@ Serão explicados os arquivos e diretórios na seção de [Edição](#edição). ### Instalação na NodeMCU -1. Abra a ide do Arduino +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. Selecione a porta no menu: Ferramentas > Porta -5. Copie o codigo do arquivo NodeMCU.cpp para o editor da IDE +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 @@ -190,21 +194,22 @@ Serão explicados os arquivos e diretórios na seção de [Edição](#edição). 1. Na SBC, faça clone do projeto utilizando o comando e navegue para o diretório raiz do projeto: ```sh -$ git clone https://github.com/DanielSRS/ESP8266_ES -$ cd ESP8266_ES +$ git clone https://github.com/DanielSRS/mcute +$ cd mcute ``` 7. Navegue até o diretório que contém o código a ser executado na SBC e faça build: ```sh -$ cd Raspberry -$ make all +cd IHM_Local +make mock +make all ``` 8. Execute a aplicação ```sh -$ make run +make run ``` ### Edição @@ -215,7 +220,7 @@ Nesta seção haverão instruções caso você queira editar o projeto, explican - **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 -- **Raspberry** - Diretório contendo todos os arquivos da aplicação executada na SBC (Raspberry Pi), +- **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. @@ -234,18 +239,19 @@ Nesta seção haverão instruções caso você queira editar o projeto, explican - Ainda no diretório raiz, navegue para o diretorio Raspberry: ```sh - $ cd Raspberry + cd IHM_Local ``` - Faça o build da aplicação ```sh - $ make all + make mock + make all ``` - Faça o build e rode a aplicação ```sh - $ make run + make run ``` - Execute manualmente a aplicação informando o sensor analógico e dois digitais conectados @@ -253,12 +259,6 @@ Nesta seção haverão instruções caso você queira editar o projeto, explican ```sh $ sudo ./Rasp -analogic -d."D0".16 -d."D1".5 ``` -- Ou liste as portas digitais disponíveis - - ```sh - $ sudo ./Rasp -l - ``` -
From e137e37b2e57c9a234bb68188a934de9bcd6f82a Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 21:09:26 -0300 Subject: [PATCH 08/11] =?UTF-8?q?=F0=9F=93=9D=20Add=20diagrams?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8da3f21..9b8d53e 100644 --- a/README.md +++ b/README.md @@ -7,20 +7,17 @@ - [O problema](#) - [Requisitos](#) - [Arquitetura da soluçao](#arquitetura) - - [Diagrama geral da solução](#) + - [Diagrama geral da solução](#diagrama-geral-da-solucao) - [Diagrama da SBC](#diagrama-de-estados-da-sbc) - - [Diagrama da NODE_MCU](#) - - [Diagrama de sequencia](#) + - [Diagrama de sequencia](#diagrama-de-sequencia) - [Formato das mensagens do historico](#interface-dos-dados-enviados-nos-topicos-de-historico) - [Feito Com](#feito-com) - [Começando](#come%C3%A7ando) - [Pré-requisitos](#pr%C3%A9-requisitos) - [Estrutura de Arquivos](#estrutura-de-arquivos) - - [Instalação](#instala%C3%A7%C3%A3o) + - [Instalação](#instalacao-na-nodemcu) - [Edição](#edi%C3%A7%C3%A3o) - - [Executar projeto](#executar-projeto) -- [Testes](#autores) -- [Possiveis melhorias](#autores) + - [Executar projeto](#executar-projeto-na-sbc) - [Autores](#autores) - [Materiais de referência](#materiais-de-referência) - [Contribuição](#contribui%C3%A7%C3%A3o) @@ -32,7 +29,15 @@ Projeto de sensor analógico/digital em microcontrolador utilizando comunicaçã 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 UART
-### Arquitetura +## Arquitetura + +A solução desenvolvida foi arquitetada da seguinte maneira: + +
+ +### Diagrama geral da solucao + +![](https://cdn.discordapp.com/attachments/1054100882976940186/1054144203162140672/Untitled_5_3.vpd_3.jpg) ### Diagrama de estados da SBC @@ -70,6 +75,10 @@ TempoReal --> Histórico: Botão 1 } ``` +### Diagrama de sequencia + +![Fluxo drawio](https://user-images.githubusercontent.com/39845798/208326509-c8b0ccbe-eb32-437c-a002-f32800f1a620.png) +
@@ -180,7 +189,7 @@ ESP8266_ES Serão explicados os arquivos e diretórios na seção de [Edição](#edição). -### Instalação na NodeMCU +### Instalacao na NodeMCU 1. Abra a ide do Arduino 2. Abra o menu: Ferramentas > Placa e selecione a placa NodeMCU 1.0 @@ -234,7 +243,7 @@ Nesta seção haverão instruções caso você queira editar o projeto, explican - **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) +## Executar projeto na SBC - Ainda no diretório raiz, navegue para o diretorio Raspberry: From 1eca5e603896d9f901588ea218366ea40f7576fa Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 21:31:45 -0300 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=93=9D=20Update=20instalation=20ins?= =?UTF-8?q?tructions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9b8d53e..c7d2962 100644 --- a/README.md +++ b/README.md @@ -146,13 +146,21 @@ 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. +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). + + - Configure o ambiente react native seguindo a [documentação oficial](https://reactnative.dev/docs/environment-setup) + - Configure o ambiente react native for windows (para fazer build da aplicação desktop para windows) seguindo a [documentação oficial](https://microsoft.github.io/react-native-windows/docs/rnw-dependencies) + - Certifique-se de ter o gerenciador de dependencias Yarn instalado na versão 1. [instruções de instalação](https://classic.yarnpkg.com/en/docs/install#mac-stable) 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](https://github.com/eclipse/paho.mqtt.c) e WiringPI + +
+ 1. Instale a IDE do Arduino na versão 1.8 de acordo com a [documentação oficial](https://www.arduino.cc/en/software) 2. Abra as preferências da IDE e adicione o código abaixo, assim como na imagem e pressione o botão de OK @@ -207,7 +215,7 @@ $ git clone https://github.com/DanielSRS/mcute $ cd mcute ``` -7. Navegue até o diretório que contém o código a ser executado na SBC e faça build: +2. Navegue até o diretório que contém o código a ser executado na SBC e faça build: ```sh cd IHM_Local @@ -215,12 +223,52 @@ make mock make all ``` -8. Execute a aplicação +3. Execute a aplicação ```sh make run ``` +### Instalação do IHM_Remoto + +1. Na maquina onde há a configuração do ambiente de desenvolvimento React Native: + +```sh +git clone https://github.com/DanielSRS/mcute +cd mcute +``` + +2. Navegue até o diretório que contém o código a das aplicações Android, IOS, Web e Windows e faça build: + +```sh +cd IHM_Remote +yarn +``` + +3. Execute a aplicação web + +```sh +yarn web +``` + +5. Ou a aplicação android + +```sh +yarn android +``` + +6. Ou a aplicação IOS + +```sh +yarn ios +``` + +6. Ou a aplicação windows + +```sh +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. From f203c9417fa2d42d7eb2ee28ea2b5c81ca18d712 Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 21:33:55 -0300 Subject: [PATCH 10/11] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NodeMCU.ino | 172 ---------------------------------------------------- main.c | 77 ----------------------- 2 files changed, 249 deletions(-) delete mode 100644 NodeMCU.ino delete mode 100644 main.c diff --git a/NodeMCU.ino b/NodeMCU.ino deleted file mode 100644 index a7492f4..0000000 --- a/NodeMCU.ino +++ /dev/null @@ -1,172 +0,0 @@ -#include -#include "ota_setup.h" -#include "comunication.h" -#include "io.h" -#include - -const char* mqtt_server = "10.0.0.101"; -WiFiClient espClient; - -void callback(char* topic, byte* payload, unsigned int length); - -PubSubClient client(mqtt_server,1883,callback,espClient); - -void callback(char* topic, byte* payload, unsigned int length) { - // In order to republish this payload, a copy must be made - // as the orignal payload buffer will be overwritten whilst - // constructing the PUBLISH packet. - // - // Allocate the correct amount of memory for the payload copy - String topico = String(topic); - - if(topico.equals("comand")){ - char* p = (char*)malloc(length); - // Copy the payload to the new buffer - memcpy(p,payload,length); - String leitura = p; - int comando = leitura.charAt(0); - int endereco = leitura.charAt(1); - comand(comando,endereco); - // Free the memory - free(p); - } - - - -} - -void comand(int comando,int endereco){ - char* output; - switch (comando) { - case GET_DIGITAL_INPUT_VALUE: // Le o valor de um sensor digital - { - int res = read_digital_input(endereco); - if(res != -1){ - output[0] = char(DIGITAL_LEVEL); - output[1] = char(res); - }else{ - output[0] = char(DIGITAL_LEVEL); - output[1] = char(NODE_MCU_STATUS_ERROR); - } - client.publish("output",output); - /*res != -1 - ? send_response(DIGITAL_LEVEL, res + '0') // retorna valor com sucesso - : send_error(DIGITAL_LEVEL); // retorna erro de port inexistente - */ - } - break; - - case GET_NUMBER_OF_SENSORS: // obtem Numero de sensores - { - //send_response(NUMBER_OF_DIGITAL_PORTS, NELEMS(digital) + '0'); - output[0] = char(NUMBER_OF_DIGITAL_PORTS); - output[1] = char(NELEMS(digital)); - client.publish("output",output); - } - break; - - case NODE_MCU_ON_LED_BUILTIN: // Ligar o led - { - pinMode(LED_BUILTIN, OUTPUT); - digitalWrite(LED_BUILTIN, LOW); - //send_response(LED_CHANGED_VALUE, '1'); // led ligado com sucesso - output[0] = char(LED_CHANGED_VALUE); - output[1] = char(0x01); - client.publish("output",output); - } - break; - - case NODE_MCU_OFF_LED_BUILTIN: // desligar o led - { - pinMode(LED_BUILTIN, OUTPUT); - digitalWrite(LED_BUILTIN, HIGH); - output[0] = char(LED_CHANGED_VALUE); - output[1] = char(0x00); - client.publish("output",output); - //send_response(LED_CHANGED_VALUE, '0'); - } - break; - - case GET_ANALOG_INPUT_VALUE: // Fazer a leitura do sensor analogico - { - String res = read_analog_input(); - //send_response(ANALOG_LEVEL, res.charAt(0), res.charAt(1)); - output[0] = char(ANALOG_LEVEL); - output[1] = res.charAt(0); - output[2] = res.charAt(1); - client.publish("output",output); - } - break; - - // Obtem o endereço do sensor - // onde o valor do endereço deve estar entre 1 e o valor retornado - // pela função GET_NUMBER_OF_SENSORS - case GET_SENSOR_ADDRESS: - { - int res = get_digital_io_address(endereco); - if(res != -1){ - output[0] = char(SENSOR_ADDRESS_VALUE); - output[1] = char(res); - }else{ - output[0] = char(SENSOR_ADDRESS_VALUE); - output[1] = char(NODE_MCU_STATUS_ERROR); - } - client.publish("output",output); - /*res != -1 - ? send_response(SENSOR_ADDRESS_VALUE, res) // resposta - : send_error(SENSOR_ADDRESS_VALUE); // erro*/ - } - break; - - case GET_SENSOR_NAME: // Obter o nome do sensor - { - char *name = get_digital_io_name(endereco); - if(name != NULL){ - output[0] = char(DIGITAL_PORT_NAME); - output[1] = name[0]; - output[2] = name[1]; - }else{ - output[0] = char(DIGITAL_PORT_NAME); - output[1] = char(NODE_MCU_STATUS_ERROR); - } - client.publish("output",output); - /*name != NULL - ? send_response(DIGITAL_PORT_NAME, name[0], name[1]) - : send_error(DIGITAL_PORT_NAME);*/ - } - break; - - case GET_NODE_MCU_STATUS: // Obter o status da placa - { - output[0] = char(NODE_MCU_STATUS_OK); - output[1] = char(NODE_MCU_STATUS_ERROR); - client.publish("output",output); - } - //send_response(NODE_MCU_STATUS_OK, NODE_MCU_STATUS_ERROR); - break; - - // Comando não reconhecido - default: - { - output[0] = char(NODE_MCU_STATUS_ERROR); - client.publish("output",output); - } - //send_error(NODE_MCU_STATUS_ERROR); - break; - } - -} - -void setup() { - ota_setup(); // Configuração de atualização via OTA - setup_io_pins(); // Define pinos da GPIO como entrada e acende o led - client.connect("esp","admin","123"); - client.subscribe("comand"); -} - -void loop() { - - client.loop(); - - handle_ota(); -} diff --git a/main.c b/main.c deleted file mode 100644 index 74303f3..0000000 --- a/main.c +++ /dev/null @@ -1,77 +0,0 @@ -#include -#include -#include -#include - -#define TRUE 1 -#define MQTT_ADDRESS "tcp://10.0.0.101" -#define CLIENTID "98631145" - -#define USERNAME "aluno" -#define PASSWORD "@luno*123" - -#define MQTT_PUBLISH_TOPIC "B9863" -#define MQTT_SUBSCRIBE_TOPIC "B986311" - -MQTTClient client; - -void publish(MQTTClient client, char *topic, char *payload); -int on_message(void *context, char *topicName, int topicLen, MQTTClient_message *message); - -void publish(MQTTClient client, char *topic, char *payload) -{ - MQTTClient_message pubmsg = MQTTClient_message_initializer; - - pubmsg.payload = payload; - pubmsg.payloadlen = strlen(pubmsg.payload); - pubmsg.qos = 2; - pubmsg.retained = 0; - MQTTClient_deliveryToken token; - MQTTClient_publishMessage(client, topic, &pubmsg, &token); - MQTTClient_waitForCompletion(client, token, 1000L); -} - -int on_message(void *context, char *topicName, int topicLen, MQTTClient_message *message) -{ - char *payload = message->payload; - - /* Mostra a mensagem recebida */ - printf("Mensagem recebida! \n\rTopico: %s Mensagem: %s\n", topicName, payload); - - /* Faz echo da mensagem recebida */ - publish(client, MQTT_PUBLISH_TOPIC, payload); - - MQTTClient_freeMessage(&message); - MQTTClient_free(topicName); - return 1; -} - -int main(int argc, char *argv[]) -{ - int rc; - - /*Configuração do Cliente*/ - MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; - conn_opts.keepAliveInterval = 20; - conn_opts.cleansession = 1; - conn_opts.username = USERNAME; - conn_opts.password = PASSWORD; - - /* Inicializacao do MQTT (conexao & subscribe) */ - MQTTClient_create(&client, MQTT_ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); - MQTTClient_setCallbacks(client, NULL, NULL, on_message, NULL); - - rc = MQTTClient_connect(client, &conn_opts); - - if (rc != MQTTCLIENT_SUCCESS) - { - printf("\n\rFalha na conexao ao broker MQTT. Erro: %d\n", rc); - exit(-1); - } - - MQTTClient_subscribe(client, MQTT_SUBSCRIBE_TOPIC, 0); - - while (TRUE) - { - } -} From 7f0581d8ed2787652e80fb4673d5cfe6f5106e01 Mon Sep 17 00:00:00 2001 From: Daniel Santa Rosa Date: Sun, 18 Dec 2022 21:44:09 -0300 Subject: [PATCH 11/11] =?UTF-8?q?=F0=9F=93=9D=20Fix=20wrong=20UART=20refer?= =?UTF-8?q?ences?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c7d2962..008cc15 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ ## Sobre o projeto -Projeto de sensor analógico/digital em microcontrolador utilizando comunicação serial. +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 UART +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