Usando Python para comunicar com a Porta Serial. - Projeto TI
Headlines News :

.

Home » » Usando Python para comunicar com a Porta Serial.

Usando Python para comunicar com a Porta Serial.

Written By x86_g on 2013-05-10 | 8:58 AM


E aí galera. Tava meio pobre a categoria sobre python então resolvi trazer uma dica que vale por três (ou não, rsrsr). Hoje vou demonstrar como utilizar a linguagem Python para comunicar com a porta serial. Já é sabido de todos que python é uma das linguagens de mais fácil utilização e que prove alto nível, logo o que será mostrado abaixo poderá ser entendido por todos aqueles que conheçam alguma linguagem de programação e sua lógica.
Existe um modulo rico em documentação, chamado PySerial escrito para ser usada na comunicação de programas python com dispositivos que usam portas seriais. Haaaa mas então posso utilizar isso para comunicar com o Arduino??? Sim, você pode. E tem mais, vou fazer um tutorial especialmente para demonstrar isso.
Para ver a documentação sobre o modulo CLIQUE AQUI.
Bem, vamos ao que interessa. Primeiramente precisamos instala-lo, acesse um terminal e digite:  apt-get install python-serialSe tudo ocorrer bem deverá ser instalado. Vamos ver os métodos básicos para manipulação das portas:
Antes de mais nada devemos dar um import serial para podermos usar os métodos básicos como open(), write(), read() e close(). Logo após devemos criar um objeto para manipularmos os métodos. No exemplo acima o objeto é chamado de ser. O objeto ser é criado e recebe o retorno de serial.Serial()nesse método devemos passar os argumento como: nome da porta e baudrate etc… Podemos usar ainda o método portstr para listar as portas existentes na maquina e as que realmente estão sendo usadas. Para escrevermos algo na porta usamos o método write(), mas lembre-se de que ele deve ser acessado pelo objeto ser. Nesse caso foi escrita a string “hello”. E finalmente precisamos fechar a porta com o método close().
Essa figura demonstra melhor a passagem de parâmetros para o método serial.Serial(). Repare que o método read() foi usado e o retorno deste foi armazenado em uma variável de nome x. Esse método le apenas 1 byte da porta. Para podermos ler linhas usamos o metodo readline(). Na figura acima o método foi usado e o retorno foi armazenado em uma variável chamada line. E então novamente a porta foi fechada.
Agora que já sabemos um pouco sobre os métodos básicos, vejamos um exemplo em código: Obs (O código foi testado no Linux).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Autor: Fernando Krein Pinheiro
# Data: 07/09/2011
# Linguagem: Python
 
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
 
#! /usr/bin/env python
 
import serial
porta = '/dev/ttyUSB0'
baud_rate = 9600
 
###################### FUNCAO PARA VERIFICAR PORTAS ATIVAS ###############
def verifica_portas():
 
    portas_ativas = []
    for numero in range(10):
 
        try:
            objeto_verifica = serial.Serial(numero)
            portas_ativas.append((numero, objeto_verifica.portstr))
            objeto_verifica.close()
 
        except serial.SerialException:
            pass
    return portas_ativas
 
################    FUNCAO PARA ESCREVER NA PORTA ####################
def escrever_porta():
 
   try:
 
       valor = (raw_input("Digite o valor a ser enviado: "))
       Obj_porta = serial.Serial(porta, baud_rate)
       Obj_porta.write(valor)
       Obj_porta.close()
 
   except serial.SerialException:
       print"ERRO: Verifique se ha algum dispositivo conectado na porta!"
 
   return valor
 
########################## FUNCAO PARA LER A PORTA #######################
def ler_porta():
 
   try:
 
       Obj_porta = serial.Serial(porta, baud_rate)
       valor = Obj_porta.read()
       print"Valor lido da Serial: ",valor
       Obj_porta.close()
 
   except serial.SerialException:
       print"ERRO: Verifique se ha algum dispositivo conectado na porta!"
 
################################ MAIN ####################################
if __name__=='__main__':
 
    print"==========================================="
    print"===== 1 - Verificar Portas Existentes ====="
    print"===== 2 - Ler Valor da Porta Serial   ====="
    print"===== 3 - Escrever Valor na Porta Serial =="
    print"==========================================="
    opcao = int (raw_input("Digite a Opcao: "))
 
    if opcao == 1:
        print"Numero da porta | Nome da Porta"
        for numero,portas_ativas in verifica_portas():
            print"      %d         |    %s" % (numero,portas_ativas)
 
    elif opcao == 2:
        ler_porta()
 
    elif opcao == 3:
        escrever_porta()
 
    else:
       print"Entrada Invalida!!"
O código funciona da seguinte maneira:
Possui uma função chamada de verifica_portas() a qual usa o método portstr() para listar as portas da maquina. Uma outra função chamada ler_porta() que usa o método read() para ler os dados, lembre-se esse método le apenas 1 byte. E outra função chamada escrever_porta que faz o uso do método write() para enviarmos um valor inteiro digitado pelo usuário.
Então temos uma main() onde são chamadas essas funções. Simples não?!!
Bem é isso aí, qualquer coisa é só perguntar ou seguir a documentação da PySerial!!!
Share this article :

0 comentários:

Postar um comentário