-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
349 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,117 +1,119 @@ | ||
# Projeto Loopback | ||
# PROJETO 1 - LOOP BACK | ||
|
||
## Introdução | ||
#### Neste projeto você deverá construir um código em Python para transmissão e recepção serial simultâneas! | ||
|
||
Neste projeto, você irá construir um código em Python para realizar transmissões e recepções seriais simultâneas utilizando um Arduino. O objetivo é enviar uma imagem através da porta serial e receber simultaneamente uma cópia dessa imagem. | ||
O software será uma camada entre o usuário e o chip UART, que irá sequenciar os bits de cada byte seguindo o | ||
devido protocolo. Para isso voce usará os 5 arquivos fornecidos. Por ora, você deverá apenas editar o arquivo | ||
“aplicação.py”. Os demais arquivos farão o trabalho de fornecer ao chip UART do seu computador os bytes que você deseja enviar através da função de envio e também disponibilizar os dados recebidos. | ||
|
||
## Objetivos | ||
Os arquivos fornecidos já estão prontos para o envio e recebimento de uma pequena mensagem de 4 bytes, ou seja, | ||
se voce rodar o main, 4 bytes serão enviados, rebatidos pelos arduínos (conforme explicado em aula) e recebido pela aplicação, sendo printados. | ||
|
||
1. Enviar uma imagem (a menor possível) através da porta de comunicação serial. | ||
2. Receber a imagem simultaneamente ao envio e salvá-la como uma cópia. | ||
3. Adquirir compreensão do código base de transmissão UART. | ||
Leia com atenção os comentários no código. | ||
|
||
## Materiais Necessários | ||
### Objetivo: | ||
|
||
- **Hardware:** | ||
- Arduino (verificar modelo compatível) | ||
- Cabo USB para conexão com o computador | ||
- Jumpers para curto-circuitar os pinos RX e TX | ||
Ao rodar seu arquivo aplicação, o seu software deve: | ||
|
||
- **Software:** | ||
- Python instalado no computador | ||
- Biblioteca `pyserial` (instalar com `pip install pyserial`) | ||
- Arquivos de código fornecidos (5 no total) | ||
|
||
## Montagem | ||
|
||
### Configuração do Hardware | ||
|
||
!!! exercise | ||
Conecte o Arduino ao computador via USB. Em seguida, curto-circuite os pinos RX e TX do Arduino: | ||
``` | ||
1) Enviar uma imagem (a menor possível) através da porta de comunicação serial. | ||
2) Receber a imagem simultaneamente ao envio e salvá-la como uma cópia. Para isso a recepção do Arduino ( pino rx ) deve estar curto-circuitada com o pino de transmissão ( pino tx ). | ||
3) Adquirir compreensão do código base de transmissão UART. | ||
``` | ||
### Material: | ||
|
||
- **Passo 1:** Identifique os pinos RX e TX no seu modelo de Arduino. | ||
- **Passo 2:** Utilize um jumper para conectar o pino RX ao pino TX. | ||
- Você irá utilizar um Arduino, um computador e 5 arquivos código fornecidos. | ||
- No console python, 'pip install pyserial' | ||
- Verificar em gerenciador de dispositivos qual porta COM está o Aduino. Ajustar o arquivo aplicação para | ||
essa porta! | ||
|
||
!!! warning "Atenção!" | ||
Em alguns modelos de Arduino (como o UNO), é necessário manter o botão de reset pressionado ou aterrar o pino reset. | ||
### Montagem: | ||
|
||
### Configuração do Software | ||
Seu sistema operacional irá abrir uma porta de comunicação serial com o Arduino. Através dessa comunicação você | ||
terá acesso a tudo que o Arduino enviar ao seu computador (saindo do pino TX do Arduino e RX da sua porta USB). | ||
Tudo que seu computador enviar ao Arduino (saindo do pino TX da sua USB em seu computador). Desta maneira, ao | ||
conectar o Arduino ao seu computador, o pino de envio do seu computador (TX) estará conectado ao pino de | ||
recepção do Arduino (RX). Da mesma forma, o pino de envio do Arduino (TX) estará conectado ao pino de recepção | ||
do seu computador (RX). | ||
|
||
1. **Instalação da Biblioteca PySerial:** | ||
O queremos é que ao enviarmos uma mensagem (lista de bytes ou bytearray) ao Arduino, este responda com os | ||
mesmos bytes. Queremos que o Arduino seja um espelho para os bytes enviados. Para isso basta que conectemos o | ||
pino TX do Arduino ao seu pino RX! Assim, ao enviarmos uma sequência de bytes para o RX do Arduino, a mesma | ||
sequência de zeros e uns são produzidas no pino de envio do Arduino e recebidos de volta em seu computador. | ||
Observe a figura: | ||
|
||
```bash | ||
pip install pyserial | ||
``` | ||
Você precisará verificar qual os pinos TX e RX de seu Arduino. | ||
|
||
1. **Configuração da Porta Serial:*** | ||
**ATENÇÃO! ALGUNS ARDUINOS (UNO) PRECISAM FICAR COM O BOTAO DE RESET PRESSIONADO. OU O PINO RESET | ||
ATERRADO!** | ||
|
||
### A estrutura da camada enlace: | ||
|
||
!!! exercise | ||
- Verifique em seu gerenciador de dispositivos qual porta COM o Arduino está utilizando. | ||
- Ajuste o arquivo de aplicação Python para utilizar essa porta. | ||
O maior desafio e objetivo do projeto 1 é que você entenda como as funções das classes fazem o trabalho de envio e | ||
recebimento full-duplex representado nesse esquema. Você deve seguir as funções envolvidas no envio e | ||
recebimento de um bytearray. Se familiarizar com elas. Ser capaz de utiliza-las, modifica-las e responder a algumas | ||
perguntas sobre elas. Para isso, não tem outro modo a não ser se debruçar sobre as funções, seguindo todas as | ||
chamadas de métodos envolvidos no recebimento “enlace.get()” e recebimento emlace.send()”. | ||
|
||
## Implementação | ||
### Imagens em python. | ||
|
||
### Manipulação de Imagens em Python | ||
Você terá que transformar uma imagem em uma lista de bytes. No mesmo modo, salvar a lista de bytes recebida, | ||
como imagem. Para isso pode se basear nos seguintes trechos de código: | ||
|
||
Para transformar uma imagem em uma lista de bytes e vice-versa, você pode usar os seguintes trechos de código: | ||
#### Caminhos das imagens | ||
|
||
```python | ||
# Caminho da imagem original | ||
img_origin = "original_image.jpg" | ||
#### Lista de bytes com a imagem a ser transmitida | ||
|
||
# Leitura da imagem e conversão para bytes | ||
with open(img_origin, 'rb') as f: | ||
img_bytes = f.read() | ||
|
||
# Salvando a imagem recebida como uma cópia | ||
img_copy = "copy_image.jpg" | ||
with open(img_copy, 'wb') as f: | ||
f.write(img_bytes) | ||
``` | ||
#### ENGENHARIA DA COMPUTAÇÃO - Rodrigo Carareto | ||
|
||
## Transmissão e Recepção Serial | ||
#### Escreve arquivo cópia | ||
|
||
!!! exercise | ||
Utilize as funções fornecidas nos arquivos de código para enviar e receber os bytes da imagem através da comunicação serial. | ||
### Pronto! Consegui! | ||
|
||
Se você conseguiu fazer o arquivo cópia através da comunicação serial e este arquivo abre normalmente, parabéns! | ||
Vamos aproveitar então para explorar um pouco mais nossas classes. Iremos fazer um estudo mais profundo das | ||
classes na aula 2, mas já é necessário que entendam as funções e estrutura dos arquivos. | ||
|
||
## Entrega e Avaliação | ||
### Entrega | ||
|
||
### Conceito C | ||
Os projetos dessa disciplina serão sempre avaliados presencialmente. Um dos seus professores observar uma breve | ||
apresentação feita por você e sua dupla e lhes fazer algumas perguntas. Isso ocorrerá em um momento solicitado | ||
por você, dentro de uma data limite. Caso você solicite a apresentação após a data limite, você será penalizado. | ||
|
||
- Demonstrar a transmissão e recepção da imagem ocorrendo corretamente. | ||
### Conceito C: Mostrar a transmissão e recepção da imagem ocorrendo corretamente. | ||
|
||
### Conceito B | ||
### Conceito B: responder as questões feitas pelo seu professor (no momento da apresentação) a respeito das | ||
|
||
- Responder às perguntas feitas pelo professor sobre as seguintes funções: | ||
seguintes funções: | ||
|
||
- `getBufferLen` | ||
- `getAllBuffer` | ||
- `getBuffer` | ||
- `getNData` | ||
- `sendBuffer` | ||
- getBufferLen | ||
- getAllBuffer | ||
- getBuffer | ||
- getNData | ||
- sendBuffer | ||
|
||
### Conceito B+ | ||
### Conceito B+: Além dos conceitos C e B, tente entender o que significa cada um dos 10 termos presentes na | ||
|
||
- Entender e explicar os seguintes termos da comunicação UART: | ||
``` | ||
comunicação UART: | ||
``` | ||
1. Transmissão assíncrona | ||
2. UART – Start bit | ||
3. UART – Stop bit | ||
4. UART – TX, RX, GND | ||
5. UART – Baud rate | ||
6. UART – Bit rate | ||
7. UART – Buffer | ||
8. UART – Frame | ||
9. UART – Bit de Paridade | ||
10. UART – CRC | ||
|
||
1. **Transmissão assíncrona** | ||
2. **UART – Start bit** | ||
3. **UART – Stop bit** | ||
4. **UART – TX, RX, GND** | ||
5. **UART – Baud rate** | ||
6. **UART – Bit rate** | ||
7. **UART – Buffer** | ||
8. **UART – Frame** | ||
9. **UART – Bit de Paridade** | ||
10. **UART – CRC** | ||
### Conceito A+: A função getStatus não está funcionando corretamente. Verifique o que essa função deveria | ||
|
||
### Conceito A+ | ||
retornar e encontre uma solução para corrigi-la. | ||
|
||
- Corrigir a função `getStatus`, que não está funcionando corretamente, e apresentar uma solução. | ||
### Data limite: 13 /0 2 - Após esse período sua nota terá uma redução de 25% a cada semana. | ||
|
||
## Data Limite | ||
|
||
- **15/08** - Após essa data, a nota terá uma redução de 25% a cada semana de atraso. | ||
|
Oops, something went wrong.