Skip to content

Commit

Permalink
up
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaldojr committed Feb 13, 2025
1 parent 241ec73 commit 6bae6c4
Show file tree
Hide file tree
Showing 3 changed files with 349 additions and 131 deletions.
160 changes: 81 additions & 79 deletions content/classes/projeto1/enunciado.md
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.

Loading

0 comments on commit 6bae6c4

Please sign in to comment.