Commit c88cf1b1 authored by edne's avatar edne

Slides firmata

parent 71528c88
# Firmata
---
## Cosa
- Utilizzare Arduino come una periferica
- Scrivendo meno C possibile
- Tenere tutta la logica sul pc host
---
## Come
- Usando il protocollo Firmata
https://github.com/firmata/protocol
---
## Firmata: generalità
- Protocollo di comunicazione su seriale
- Permette di controllare l'hardware da un computer
- Può essere implementato su qualsiasi controllore
- Attualmente è supportato da Arduino e Spark.io
- Mentre lato computer esistono librerie per innumerevoli linguaggi
---
## Firmata: origine
- Basato sul protocollo MIDI
- Viene riconoscito da un interprede MIDI
- Ma i messaggi non sono necessariamente gli stessi
- Supporta seriali più veloci
---
## Firmata: messaggi
- I/O analogico o digitale
- Stato di un pin
- I2C
- Impostazione dell'intervallo di sampling
---
## Utilizzo
- Firmware per interepretare ed eseguire i comandi
- Inviati dal pc usando un qualsiasi linguaggio
---
## Firmware
Ci sono due primcipali modi per utilizzare Firmata:
- Includere `Firmata.h` e chiamare "manualmente" le varie funzioni, per esempio:
```
Firmata.sendAnalog(pin, analogRead(pin))
```
- Caricare lo sketch già pronto `StandardFirmata` e scrivere codice solo lato pc
---
# Preparazione
---
## Arduino
- Dall'Arduino IDE:
```
File -> Examples -> Standardfirmata
```
- `Verify` e `Upload` come un qualsiasi firmware
---
## Python
- Useremo `pyFirmata`:
```
https://github.com/tino/pyFirmata
```
- Per installarlo: `pip install pyfirmata`
---
# Codice
---
## Hello World
Accendere il LED:
```python
from pyfirmata import Arduino
board = Arduino('/dev/ttyUSB0')
board.digital[13].write(1)
```
---
## Make it blink
```python
from pyfirmata import Arduino
from time import sleep
board = Arduino('/dev/ttyACM3')
while True:
board.digital[13].write(1)
sleep(1)
board.digital[13].write(0)
sleep(0)
```
---
## Singoli pin
```python
pin13 = board.get_pin("d:13:o")
pin13.write(1)
```
`get_pin` prende una stringa contenente:
- `"d"` o `"a"` per il tipo di pin
- il numero del pin
- `"i"`, `"o"`, o `"p"` per Input, Output o PWM
- separati da `":"`
---
## Input analogico
```python
it = util.Iterator(board)
it.start()
board.analog[0].enable_reporting()
board.analog[0].read()
```
---
## Controller OSC
```python
from pyfirmata import Arduino, util
import liblo
board = Arduino('/dev/ttyUSB0')
address = liblo.Address("osc.udp://127.0.0.1:1234/")
board.digital[13].write(0)
it = util.Iterator(board)
it.start()
board.analog[0].enable_reporting()
while True:
value = board.analog[0].read()
print(value)
liblo.send(address, "/knob", value)
```
---
## Tank you!
Creative Commons Attribution-ShareAlike 3.0 Unported
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment