- Sobre
- Instruções
- Fluxo da aplicação
- Executando a aplicação
- Capturas de tela | GIFs
- Referências Consultadas
- Contributor
- License
Este repositório contém uma aplicação simples com o objetivo de demonstrar uma maneira de monitorar o estado do BIT 5 do regitro PORTB (PB5) do ATmega328P, LED 13 do Arduino UNO R3, via Página Web. O conceito pode ser extendido para outras aplicações similares.
O parte embarcada da aplicação foi escrita em ANSI C usando a PlatformIO IDE .
Ela foi focada no Atmega328P presente no Arduino Uno R3, trabalhando diretamente com registradores do microcontrolador.
Apesar de ultilizada o PlatformIO IDE, o codigo é portavel para o Atmel Studio 7.
O Back-end da aplicação foi escrito em Python (v3.7.3), e foram ultilizados os modulos pySerial e websockets para leitura de dados na porta serial e comunicação websocket respectivamente.
O Frot-end da aplicação foi escrito em HTML e Javascript e a biblioteca jQuery .
O processo se inicia no ATmega328P, o firmware foi programado para alterar o estado do BIT 5 do regitro
PORTB (PB5) a cada 1 segundo e logo em seguida imprimir na serial 1 byte contendo o estado do PB5.
Este byte é transmitido em base 16 ( hexadecimal). O PB5 está conectado ao Pino 13 do arduino UNO R3
como é descrito no site oficial do Arduino
PIN MAPPING ATmega328P - Arduino .
Após o ATmega328P imprimir na serial o byte, o conversor serial do Arduino UNO transmite esse dado pelo USB.
No computador, o algoritmo escrito em python fica lendo constatemente a porta serial USB onde
o Arduino está conectado, quando há uma informação ou seja o byte, ele lê este byte que está em hexadecimal e converte
para base 10 (decimal). Em seguida coloca esse numero que indica o estado do PB5 no formato JSON que utiliza
texto legível a humanos, no formato "atributo": valor e transmite o JSON via websocket.
A página web ao ser carregada pela primeira vez, estabelece a conexão via websocket com o servidor, e quando chega
uma mensagem (informação/JSON) ela a lê e altera os elementos da página dinâmicamente seguindo os algoritmos
escrito em javascript.
- Plugue o Arduino ao USB do carregador e carregue o código
src/main.c
para ATmega328P ultilizando o Platform IO IDE ou o Atmel Studio - Abra o terminal na pasta raiza da aplicação
- Acesse a pasta do servidor em python
websocket/python
cd websocket/python
- Instale os modulos necessários para execução do servidor. (Se ultilizar for ultilizar Virtual Environment Virtual Environments and Packages - Python Documentation , execute o procedimento '5.', caso contrário, ou seja ultilizar o python padrão do computador pule para o procedimento '7.')
- Crie o ambiente virutal
myvenv
python3 -m virtualenv myvenv
- Ative o ambiente virtual
myvenv
source ./myvenv/bin/activate
- Instalação dos modulos necessários para execução do servidor usando o
pip
Python PIP
pip3 install -r requirements.txt
- Inicie a execução do servidor (Não feche o terminal após iniciar o servidor)
python3 main.py
- Abra a página web
websocket/html/index.html
em um navegador. Clique e Arraste o aquivoindex.html
para dentro do navegador que ele carregará a página. (O link será parecido comfile:///.../websocket/html/index.html
) - Após executar todos os procedimentos a aplicação estará em execução.
- Para encerrar o servidor, abra o terminal que ele está em execução e pressione as teclase
Ctrl + C
, se a combinação de teclas não for bem sucedida, tenteCtrl + Break
(Em alguns teclados a teclaBreak
é chamada dePause
)
The New C Standard An Economic and Cultural Commentary
ATmega328P DATASHEET
pySerial
websockets
Python library Docs
HTML | MDN
CSS | MDN
JavaScript | MDN
W3Schools Online Web Tutorials
JSON - JavaScript | MDN
jQuery
This project is licensed under the terms of the MIT license.