Arduino + Python: produtividade ao extremo

Post on 24-Jun-2015

22.442 views 2 download

description

Slides da palestra que ministrei online no dia 06/09/2011 às 20h no LabDeGaragem.com, onde abordei introdução à linguagem Python, integração de Python com Arduino com e sem fio (através de USB, Ethernet, Bluetooth, Wi-Fi e ZigBee) e exemplifiquei essa integração com a apresentação de alguns projetos.

Transcript of Arduino + Python: produtividade ao extremo

Python + Arduino:produtividade ao extremo

Álvaro Justen aka Turicashttp://twitter.com/turicashttp://github.com/turicas

http://CursoDeArduino.com.br/

+

Álvaro Justen aka Turicas, prazer!

@turicasalvaro@CursoDeArduino.com.br

www.CursoDeArduino.com.br

http://www.PythOnRio.org/

http://ArduInRio.cc/

Roteiro

● Python, a linguagem – revisão● Python com Arduino:

● Python no Arduino● Por que não?

● Python no PC + Arduino● Com fio● Sem fio

● Projetos! \o/

Parte 1 – Resumão

http://tinyurl.com/palestra-online-python

História

Guido van Rossum

Aplicações● Shell scripts● Administração de sistemas/redes● Aplicações científicas● Computação gráfica● Jogos● Interfaces com o usuário/GUI● Aplicações Web● Robótica● “glue-language”● ...

Principais características

● Uso geral● Interpretada, VHLL● Criada por Guido van Rossum em 1989● Multiplataforma● OO, Procedural e funcional● Software livre● Baterias incluídas!● Sintaxe elegante, simples e clara● Tipagem dinâmica e forte

Por que Python?

● Fácil de aprender● Poderosa● Alta produtividade● Estruturas de dados de alto nível● Blocos de código são delimitados por indentação! (?)

Onde é usada? Quem usa?

● YouTube● Google/Google App Engine● NASA● Industrial Light & Magic● Globo.com● ...

● GIMP● Blender● Ubuntu● ...

Onde roda?

● GNU/Linux● Mac OS● *nix● Windows● Android● Nokia S60● Microcontroladores● ...

Como instalar?

GNU/Linux e Mac OS: já tem!

Windows: www.python.org

Android: SL4A(Scripting Layer For Android)

iPython

● Debian/Ubuntu/derivados:

sudo aptitude install ipython

● Dica: no Ubuntu:

sudo apt-get install aptitude

Tipos básicos● Inteiro: 42● Ponto flutuante: 3.14● Complexo (!): 1.5 + 5.3j● String: “””minha string”””● Tuplas: (1, “aaa”)● Listas:

[1, 2.3, “abc”, [1, “b”]]● Dicionários:

{'a': 1, 2: 'b', [1, 2]: [3, 4]}

Nada de parênteses,nada de chaves!

if expressao1:

comando1

if expressao2:

comando2

elif expressao3:

comando3

elif expressao4:

comando4

else:

comando5

Listas, strings e slices

In [1]: l = [1, 3, 4, 'LdG', 'Arduino']

In [2]: print l[1]3

In [3]: print l[1:4][3, 4, 'LdG']

In [4]: for elemento in l: ....: print elemento ....: ....:134LdGArduino

Listas, strings e slices (2)

In [5]: virus = 'nome-do-virus.exe' In [6]: print virus[-3:]exe In [7]: print virus[5:]do-virus.exe In [8]: print virus.split('.')['nome-do-virus', 'exe'] In [9]: novo_virus = 'nome.do.virus.exe' In [10]: print novo_virus.split('.')['nome', 'do', 'virus', 'exe'] In [11]: print novo_virus.split('.')[-1]exe In [12]: print 'nome.do.virus.pl'.split('.')[-1]pl

Trabalhando com arquivos

arquivo = open('nome.txt')for linha in arquivo: print linha

arquivo_2 = open('nome-2.txt', 'w')arquivo_2.write('Python rules!')arquivo_2.close()

Baterias incluídas! sys, os, re, string, zlib

socket, urrlib, httplib, imaplib

time, datetime, math, random

doctest, unittest, xml, xmlrpclib

struct, pickle, cPickle, threading

logging, decimal

...

Navegando com Python

import urlliburl = 'http://www.CursoDeArduino.com.br/'pagina = urllib.urlopen(url)print pagina.read()

Eventos

http://www.pythonbrasil.org.br/

São Paulo29/setembro a 1º/outubro

23 y 24 de Septiembre de 2011Junín, Buenos Aires

Argentina

http://ar.pycon.org/

http://www.HackNRio.org/Dezembro/2011

naCidade maravilhosa! \o/

Onde aprender?

● Tutoriais:http://www.python.org.br/

http://docs.python.org/tutorial“Google Python Class”

● Lista Python-Brasil e locais

● #python-br @ irc.freenode.net

● Eventos:http://www.PythOnCampus.org/

http://www.PythonBrasil.org.br/

● Cursos:http://www.WelcomeToTheDjango.com.br/

http://www.CursoDePython.com.br/

Rio de Janeiro

● Python básico: outubro/2011● Python para sysadmins: em breve

Python@CursoDeArduino.com.br

Python com Arduino?

+

Python no ArduinoDá?

Python no microcontrolador

● PyMite:● http://wiki.python.org/moin/PyMite● http://code.google.com/p/python-on-a-chip/

● Por que não?● Só roda no Mega● Só tem a sintaxe: nada de baterias!

Python no PC + Arduino

● Com fio● USB● Ethernet

● Sem fio● Bluetooth● Wi-Fi● ZigBee

Com fio – USB

pySerial - Instalação

● Debian/Ubuntu/derivados:

sudo aptitude install python-serial

● Dica – no Ubuntu:

sudo apt-get install aptitude

Comandando o Arduinocom Python

import serialporta = '/dev/ttyUSB0'baud_rate = 9600arduino = serial.Serial(porta, baud_rate)arduino.write('H')print arduino.read()arduino.close()

Com fio – Ethernet

urllib + Ethernet shield

Sem fio - Bluetooth

py-bluez + shield Bluetooth

No Debian/Ubuntu:sudo aptitude install python-bluetooth

Solução mais barata!

Sem fio – Wi-Fi

● Opções:● Shield Wi-Fi + roteador Wi-Fi● Shield Ethernet + roteador Wi-Fi

● Clientes:● Smartphones● Notebooks● Outros Arduinos!

● Roteador Wi-Fi:● Internet + Dynamic DNS + port foward

#FTW

Sem fio - ZigBee

● Conversor serial/zigbee no PC (via USB)● Arduino + XBee

Projetos! \o/

Semáforo Coding DojoRio

http://justen.eng.br/semaforo/

Tomada Bluetoothhttp://www.amarino-toolkit.net/

Guitarrino

Python + Arduino + Frets on Fire

Turiquinhas v2.0http://justen.eng.br/Turiquinhas

tweetlampControlando eletrodomésticos pelo Twitter com Python e Arduino!

Twitter → [HTTP] → PythonPython → [USB] → Arduino

Arduino → [relé] → Eletrodoméstico

http://github.com/turicas/tweetlamp

Ficou interessado?

http://CursoDeArduino.com.br/pesquisaPython@CursoDeArduino.com.br

● Ourinhos/SP – outubro/2011● Belo Horizonte/MG – novembro/2011● João Monlevade/MG – novembro/2011● São Paulo/SP – dezembro/2011● Rio de Janeiro/RJ – dezembro/2011● Online – em breve!

http://twitter.com/turicashttp://github.com/turicas

http://CursoDeArduino.com.br/http://blog.justen.eng.br/alvaro@CursoDeArduino.com.br

import this