Arduino e Python Do It Yourself! Luís Bruno – Jefferson Jarden – Francisco Marcelino Arduino e Python Faça Você Mesmo! Quem Somos ● Jefferson Jardem ● ● Luís Bruno ● ● [email protected] [email protected] Francisco Marcelino ● [email protected] Software Livre As 4 liberdades básicas associadas ao software livre são: – – – – A liberdade de executar o programa, para qualquer propósito (liberdade nº 0) A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades (liberdade nº 1). Acesso ao códigofonte é um pré-requisito para esta liberdade. A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade nº 2). A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie (liberdade nº 3). Acesso ao código-fonte é um pré-requisito para esta liberdade. Software Livre Hardware Livre ● O hardware é de Graça? – ● Não! Direcionado a Liberdade de Conhecimento – – – – – Diagramas Esquemas Documentos Core/Firmware Software/API Hardware Livre Hardware Livre ● Algumas Empresas – – – – ● Sparkfun Seeeduino Studio Adafruit Makerbot Brasil – – – Multilogica LabdeGaragem Agamenon Arduino Arduino ● O que é? – ● Plataforma de Hardware Livre Características – Arduino UNO – – – – – – – – – – – – Microcontroller ATmega328 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader SRAM2 KB (ATmega328) EEPROM1 KB (ATmega328) Clock Speed 16 MHz Arduino – – – – – – – schematics (Layout Drawings) prototipagem rápida projetos de computação física computação pervasiva computação ubiqua ambientes inteligentes instalações interativas Arduino ● Onde usar Arduino? ● Automação de ambiente: – – – Desligamento do Luzes de um ambiente Ligação do irrigador de um jardim Climatização de um ambiente Arduino ● A Imaginação é o Limite Arduino ● Diferentes Hardware Arduino Shields Sensores Atuadores O Software Arduino ● Escrito em Java; ● Multiplataforma! ● Baseado no Processing e C; ● Distribuição livre; ● Windows, Linux e Mac: – http://www.arduino.cc/en/Main/Software Programando... 1° Compilar Sketch 2° Atualizar Estrutura do Código ● Função setup void setup (){ Instruções... } ● Função loop void loop (){ Instruções... } Exemplo de Código Estruturas de Controle ● If … else ● for ● switch ● while ● do while ● go to Principais funções ● pinMode() ● Entrada/saída ● digitalWrite/ analogWrite() ● digitalRead/ analogRead() ● delay() ● milissegundos Python Introdução à Linguagem Python ● ● História Criada por Guido van Rossum em 1989; ● Uma linguagem simples, criada inicialmente para ensinar programação; Quem Usa Python? ● 7° Linguagem mais usada (TIOBE Agosto); Google 1997 Introdução à Linguagem Python ● Linguagem de Altíssimo Nível (VHLL); ● Tipagem Dinâmica e Forte; ● Case Sensitive; ● Interpretada/Compilada; ● OO, Procedural e Funcional; ● Linguagem de Scripts; ● Open-Source; ● Bliblioteca padrão gigante! Introdução à Linguagem Python ● Completamente Orientada a Objetos; ● ● Toda variável em Python é objeto! Orientação a Objetos? ● Objeto – Entidade do mundo real que tem uma identidade; – – ● Atributos (Características); Métodos (Comportamento); Classe – Abstração que descreve propriedades importantes para uma aplicação. Instalação ● ● No Windows ● Download do Windows installer no site: ● http://www.python.org/download/ No Linux e Mac: ● Maioria das distros, Python é nativo!!! Executando o Python ● Não necessita de IDEs; ● Iniciando o interpretador Python: ● ● ~$ python Executar scripts em arquivos: ● ~$ python file.py Interpretador Interativo Usando o Interpretador interativo ● Determinar o tipo de um objeto ● ● Ver docs de uma classe ou comando ● ● type(obj) help(obj) Obter uma lista de quase todos os atributos de um objeto ● dir(obj) Obtendo valores ● input() x = input('Informe um valor: ') print x # imprime o valor de x ● raw_input() x = raw_input('Informe seu nome') print x #imprime o valor da string x Características do Python ● Blocos por indentação! print “O valor de a é “ if a == 0: print “zero” a = “zero” else: print a # fim do script ● No more chaves! {} ● No more ponto e vírgula! (;) ● Comentários com # Normalmente... print (“O valor de a é “); if (a == 0) { print (“zero”); a = “zero”; } else { print (a); } // fim do script Em Python print “O valor de a é “ if a == 0: print “zero” a = “zero” else: print a # fim do script Operadores Aritméticos: + , -, *, /, // , %, ** ● Condicionais: >, <, >=, ==, != , in, is ● Atribuição: =, +=, +=, /= , *= ● Lógicos: & | ^ ~ (and, or, xor, not) ● Strings ● String – Um conjunto de caracteres; 'String de aspas simples' "Olá, sou uma 'String'!" X=2 '1 + 1 = ', x ● Podem ocupar uma ou várias linhas: '''String com multiplas linhas''' Strings ● String como Arrays s = 'Bem vindos ao Enucomp' s.__getitem__(1) s[1] s[4:9] s +' 2011' # # e # e # vindos … Enucomp 2011 Strings ● Brincando com os operadores s = 'Arduino' s + ' + python' s = 'a' s > 'b' #False 'Maior' > 'Menor' s = 'k' s * 3 ● #Arduino + Python #False # kkk Obs.: Os operadores são métodos não-destrutivos. Alguns métodos de Strings • __len__(): Retorna o tamanho da string; ● __getslice__(x, y): Retorna uma substring de x até y. ● ● ● capitalize(): Retorna a mesma string com a primeira letra em maiúsculo. upper(): Retorna a mesma string com todas as letras em maiúsculo. lower(): Retorna a mesma string com todas as letras em minúsculo. List ● Coleção de objetos numeros = [1, 2, 3.5] string = ["1", '2', "3"] tudo = [10, "50", """Hello"""] lista = [numeros, string, tudo] Alguns métodos de List ● append(obj) ● ● insert(pos, obj) ● ● Insere na posição especificada remove(obj) ● ● Insere no fim da lista Remove o objeto da lista pop(posicao) ● Remove e retorna o objeto da posição especificada. ● O pop() sem parâmetros retira o último elemento Alguns métodos de List count( obj ) ● ● index( obj ) ● ● Retorna a posição do “obj” na lista reverse() ● ● Retorna a quantidade de elementos “obj” da lista Inverte a lista colocando os elementos ao contrário sort() ● Ordena a lista Tuplas ● Estrutura como as listas, mas não aceitam que seus valores sejam alterados depois da criação. tupla = (1, 2, 3, 4) ou tupla = 1, 2, 3, 4 Ranges ● Função que gera uma lista range(7) # [ 0, 1, 2, 3, 4, 5, 6 ] range(1,7) # [ 1, 2, 3, 4, 5, 6 ] range(1, 9, 3) # [ 1, 4, 8] Dicionários ● ● ● Map O mesmo que array associativo, map ou hashes; Cada entrada é composta por uma chave e um valor; frameworks = {'python': "Django", 'ruby': "Rails"} dic = {1 : 'UM', 'DOIS': 2} print frameworks['python'] # ===> Django print dic[1] # ===> UM Estruturas de Condição ● If/ elif/ else if condicao: comandos elif condicao: comandos else: comandos Loops ● While/ else while condição: comandos else: comandos Loops ● For/ else for variavel in sequencia: comandos else: comandos Funções ● Para criar uma função: ● def nome_da_funcao( parametros ): def soma(a,b = 2): print a + b, soma(2) #4 soma(2,3) #5 Python com Arduino PySerial - Instalação ● Windows ● ● http://pypi.python.org/pypi/pyserial Debian/ Ubuntu/ derivados: sudo aptitude install python-serial Enviando dados para a serial import serial porta = '/dev/ttyUSB0' baud_rate = 9600 arduino = serial.Serial(porta, baud_rate) arduino.write('H') print arduino.read() arduino.close() Recebendo através do Arduino int ledPin = 13; int incomingByte = 0; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); if (incomingByte == 72){ digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } }