felipe_marin Postado Janeiro 18, 2023 Denunciar Share Postado Janeiro 18, 2023 Prezados, boa tarde ! Preciso ler uma porta serial de uma balança digitron com Python, para pegar o valor da pesagem e jogar numa lista. Alguém tem alguma ideia de como realizar ?? Obs: usei a biblioteca pyserial, consigo abrir conexão com a porta e ler o dado porem ele vem da seguinte forma: O valor que preciso é somente os 3 últimos, no exemplo 349. Agradeço de imediato quem puder me ajudar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Janeiro 18, 2023 Denunciar Share Postado Janeiro 18, 2023 então você tem uma sequencia de bytes, você pode começar concatenando ela, tipo: a = b''.join(sequencia) apos isso você vai ter que identificar as posições das informações uteis, igual que se faz numa lista. e então fatiar essa sequencia, e converter em inteiro, ou flutuante b = a[2:] c = int(b) são dicas aproximadas, você vai ter que fazer testes ai Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 felipe_marin Postado Janeiro 18, 2023 Autor Denunciar Share Postado Janeiro 18, 2023 Obrigado ArtEN, não tinha pensando nessa solução! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Janeiro 19, 2023 Denunciar Share Postado Janeiro 19, 2023 beleza, vou deixar aqui uma classe que uso em uma aplicação aqui, você pode tirar como base class Sensor: def __init__(self): self.serial = Serial(port='/dev/serial0', baudrate=9600, timeout=0.05) def getLeitura(self): try: self.serial.write(b'1') self.leitura = [int(x) for x in self.serial.readline().split()] except: self.leitura = (0, 0) tem o try para contornar um problema de alimentação eletrica no sistema Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 felipe_marin Postado Janeiro 19, 2023 Autor Denunciar Share Postado Janeiro 19, 2023 (editado) O código que usei para chegar nesse informação foi esse: import serial from time import sleep ser = serial.Serial( 'COM3', 9600, 8 ) while True: data = ser.read() sleep(2) print(data, end='') O resultado ao rodar este código acima é esse: b'D'b'0'b'0'b'0'b'0'b'0'b'4'b'.'b'\r' Gostaria de printar somente os 3 últimos dígitos: 004 Editado Janeiro 19, 2023 por felipe_marin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Janeiro 19, 2023 Denunciar Share Postado Janeiro 19, 2023 >>> leitura = b'D'b'0'b'0'b'0'b'0'b'0'b'4'b'.'b'\r' >>> print(leitura) b'D000004.\r' >>> leitura[1:] b'000004.\r' >>> leitura[1:-2] b'000004' >>> int(leitura[1:-2]) 4 peguei sua leitura e fui fatiando no terminal, no seu caso é só pegar a ultima linha, claro que só vai funcionar se o padrão da mensagem não mudar. a questão é: pode acontecer de ter alguma informação depois do ponto? uma informação que ainda não apareceu? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 felipe_marin Postado Janeiro 19, 2023 Autor Denunciar Share Postado Janeiro 19, 2023 Obrigado anten, consegui chegar somente os números. Após o ponto repete o dado novamente. Mas já consegui o que precisava. Obrigado novamente pela ajuda. 54 minutos atrás, ArteEN disse: >>> leitura = b'D'b'0'b'0'b'0'b'0'b'0'b'4'b'.'b'\r' >>> print(leitura) b'D000004.\r' >>> leitura[1:] b'000004.\r' >>> leitura[1:-2] b'000004' >>> int(leitura[1:-2]) 4 peguei sua leitura e fui fatiando no terminal, no seu caso é só pegar a ultima linha, claro que só vai funcionar se o padrão da mensagem não mudar. a questão é: pode acontecer de ter alguma informação depois do ponto? uma informação que ainda não apareceu? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Elias Henrique Postado Agosto 14, 2023 Denunciar Share Postado Agosto 14, 2023 (editado) Assim fica muito doideira por que da para pegar casas acima de 10 🤪 import re bytes_information = b'D'b'0'b'0'b'0'b'0'b'4'b'4'b'.'b'\r' string_information = bytes_information.decode("utf-8") list_int = re.findall("\d", string_information) value_int = int(''.join([str(valor) for valor in list_int])) print(value_int) Editado Agosto 14, 2023 por Elias Henrique Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
felipe_marin
Prezados, boa tarde !
Preciso ler uma porta serial de uma balança digitron com Python, para pegar o valor da pesagem e jogar numa lista.
Alguém tem alguma ideia de como realizar ??
Obs: usei a biblioteca pyserial, consigo abrir conexão com a porta e ler o dado porem ele vem da seguinte forma:
O valor que preciso é somente os 3 últimos, no exemplo 349.
Agradeço de imediato quem puder me ajudar.
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.