Jump to content
Fórum Script Brasil
  • 0

PYTHON TCP/UDP


matheusmdutra
 Share

Question

Sou novato na linguagem Python, e este é um codigo de um servidor em TCP. Gostaria de saber como modifica-lo para UDP. Alguma dica?
O objetivo controlar o arduino através de uma rede local. Eu controlo, através de um desktop (clente), o Arduino que está conectado a um notebook (servidor). Este cliente, envia os comandos para o programa servidor, o servidor recebe esse comandos e os envia para o Arduino pela porta serial. Assim, é possível controlar o Arduino de qualquer lugar, só é necessário que os dois computadores fassam parte da mesma rede. No meu caso, eu tenho uma rede wirelles
Obrigado




import socket
import thread
import os
import serial
HOST = ''
PORTA = 7000
PORTA_SERIAL = '/dev/ttyUSB1'
BAUD_RATE = 9600
conSerial = serial.Serial(PORTA_SERIAL, BAUD_RATE)
os.system("clear")
def conecta(conexao, cliente):
print "IP conectado | Porta", cliente
while True:
dados = conexao.recv(1024)
if not dados: break
print "Cliente para Arduino: ", dados
conSerial.write(dados)
mensagem = conSerial.readline()
print "Arduino Diz: ", mensagem
print 'Cliente encerrou conexao', cliente
print "Terminando..."
conSerial.close()
conexao.close()
thread.exit()
sys.exit()
tcpSOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conexaoORIGEM = (HOST, PORTA)
tcpSOCKET.bind(conexaoORIGEM)
tcpSOCKET.listen(1)
while True:
conexao, cliente = tcpSOCKET.accept()
thread.start_new_thread(conecta, tuple([conexao, cliente]))
tcpSOCKET.close()

Edited by matheusmdutra
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
Fiz o código abaixo sem testar (não estou com Python aqui no momento), então pode ter alguma coisa errada:
import socket
import thread
import os
import serial


HOST = ''
PORTA = 7000
PORTA_SERIAL = '/dev/ttyUSB1'
BAUD_RATE = 9600


conSerial = serial.Serial(PORTA_SERIAL, BAUD_RATE)
os.system("clear")


def conecta(conexao, cliente):
    print "IP conectado | Porta",   cliente


    while True:
        dados, endereco = conexao.recvfrom(1024)
        if dados:
            print "Cliente para Arduino: ", dados
            conSerial.write(dados)
            mensagem = conSerial.readline()
            print "Arduino Diz: ", mensagem


udpSOCKET = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
conexaoORIGEM = (HOST, PORTA)
udpSOCKET.bind(conexaoORIGEM)


while True:
    thread.start_new_thread(conecta, tuple([udpSOCKET, conexaoORIGEM]))


udpSOCKET.close()
Repare que, no caso do UDP, não existe o lance de "esperar" a conexão e depois ficar "conectado", então tirei toda a parte que encerra a conexão e sai do programa, uma vez que é necessário ficar lendo (esperando) os dados chegarem e não dá pra ter uma noção de quando isso vai acabar (como ocorre com o TCP). Se a possibilidade de perder dados for crítica, recomendo continuar com o TCP, mas se não tiver nenhum problema em perder um pacote ou outro (ou os dados chegarem incompletos) veja se o UDP vai realmente te servir.
Bem legal essa idéia de se comunicar com o Arduino, no caso de você não possuir um ethernet/wifi/bluetooth shield/módulo.
Abraços!
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...