Metadata-Version: 2.4
Name: qrrobo
Version: 0.1.0
Summary: Lê um QR Code pela câmera e envia a palavra a um bloco SPIKE com Pybricks.
Author: Gerfy
License: MIT
Project-URL: Homepage, https://pypi.org/project/qrrobo/
Keywords: qrcode,robotica,pybricks,spike,educacao
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Intended Audience :: Education
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: opencv-python>=4.8
Requires-Dist: pybricksdev
Dynamic: license-file

# qrrobo

A câmera é o olho. O QR Code é um bilhete. Esta biblioteca lê o bilhete e, se vocês quiserem, manda a palavra até o bloco LEGO.

O movimento não vem pronto. A função de andar, girar ou balançar a placa é de vocês.

Funciona no notebook (Windows) e no Raspberry Pi. A câmera pode ser a do notebook, uma webcam ou a câmera do Pi. O bloco SPIKE Prime ou Robot Inventor, com firmware Pybricks, recebe a palavra pelo cabo ou pelo Bluetooth.

## Instalar

Na pasta do projeto, uma vez:

```powershell
python -m pip install .
```

Quando a biblioteca estiver publicada, em qualquer computador:

```powershell
python -m pip install qrrobo
```

## 1. Só o olho

O QR é um bilhete. `quando` é a regra: se o bilhete disser esta palavra, faça isto.

Crie um arquivo `aula.py`:

```python
from qrrobo import Robo

robo = Robo(conexao="nenhuma")

@robo.quando("FRENTE")
def frente():
    print("O bilhete diz FRENTE.")

@robo.quando("DANCAR")
def dancar():
    print("O bilhete diz DANCAR.")

robo.esperar()
```

Gere o QR num site, com o texto `FRENTE` ou `DANCAR`. Abra a imagem no celular, em tela cheia, e aponte a câmera. **Q** na janela encerra.

A câmera vê o mesmo bilhete muitas vezes por segundo. A biblioteca obedece uma vez. Para obedecer de novo, tire o cartão da frente e mostre outra vez.

Para ler uma palavra só, sem ficar no laço:

```python
from qrrobo import Robo

robo = Robo(conexao="nenhuma")
print(robo.ler())
```

Outra câmera, no notebook ou no Pi: `Robo(camera=1)`.

## 2. A função é de vocês

Troquem o `print` pelo movimento que a turma inventar. No Raspberry, se o motor estiver ligado no próprio Pi, a função mexe nele direto. Não precisa de bloco.

```python
@robo.quando("FRENTE")
def frente():
    # o movimento de vocês entra aqui
    print("indo para a frente")
```

## 3. O correio até o bloco

O cabo ou o Bluetooth é o correio: leva a palavra até o SPIKE. Quem se mexe é o programa que está rodando no bloco, não esta biblioteca.

No computador:

```python
from qrrobo import Robo

robo = Robo()

@robo.quando("FRENTE")
def frente():
    robo.enviar("FRENTE")

@robo.quando("DANCAR")
def dancar():
    robo.enviar("DANCAR")

robo.esperar()
```

`Robo()` tenta o cabo e, se não achar o bloco, tenta o Bluetooth. Dá para escolher: `Robo(conexao="usb")` ou `Robo(conexao="bluetooth")`.

Antes de rodar, gravem no bloco o modelo `examples/modelo_bloco.py`. Completem as funções `frente` e `dancar` com o movimento de vocês. Fechem o app do SPIKE e a aba do Pybricks. Apertem o botão do bloco para ele ficar esperando. Aí sim rode o programa do computador.

O mesmo `aula.py` vale no Raspberry Pi falando com o SPIKE. A câmera pode ser a do Pi.

## 4. Modelo do bloco

O arquivo [examples/modelo_bloco.py](examples/modelo_bloco.py) espera a palavra e chama a função de vocês. Não tem motor pronto. Copiem para o Pybricks e escrevam o movimento dentro de `frente` e `dancar`. Para uma palavra nova, criem a função e uma linha no dicionário `ACOES`.

## Onde isto roda

- Notebook Windows e Raspberry Pi, com Python 3.
- Câmera do notebook, webcam USB ou câmera do Pi.
- SPIKE Prime ou Robot Inventor com firmware Pybricks, no cabo de dados ou no Bluetooth.

Não roda dentro do bloco. Não conversa com o app oficial do SPIKE. O firmware Pybricks se instala uma vez em [code.pybricks.com](https://code.pybricks.com), com um cabo que transmita dados.

## Problemas comuns

- **Não achei o bloco.** Feche o app do SPIKE e o site do Pybricks. O bloco só atende um correio por vez. Ele precisa estar ligado e perto.
- **O nome que aparece é SPIKE, não Pybricks.** O firmware ainda é o da LEGO. Instale o Pybricks.
- **Cabo não funciona.** Cabo que só carrega não leva mensagem. Use um cabo de dados, ou `conexao="bluetooth"`.
- **A palavra chegou e o robô não mexeu.** O movimento está na função de vocês, no bloco ou no `quando`. A biblioteca só entrega o texto.
- **O mesmo QR dispara várias vezes.** Vocês estão numa cópia antiga do programa. Nesta biblioteca, o bilhete parado conta uma vez.

## Publicar no PyPI

Isto é para quem mantém a biblioteca, não para a aula.

Crie uma conta em [pypi.org](https://pypi.org). Na pasta do projeto:

```powershell
python -m pip install build twine
python -m build
python -m twine upload dist/*
```

O `twine` pede o usuário e a senha da conta (ou um token de API). Depois, qualquer máquina instala com:

```powershell
python -m pip install qrrobo
```

O nome `qrrobo` estava livre quando este pacote foi criado. Se um dia ele estiver ocupado, troque `name` no `pyproject.toml` para `qrrobo-aula` e publique de novo.
