Jump to content
Fórum Script Brasil
  • 0

Serial Port Python


felipe_marin

Question

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: 

image.png.497eed6b3cff95ed837d368752ba5eed.png

O valor que preciso é somente os 3 últimos, no exemplo 349. 

 

Agradeço de imediato quem puder me ajudar. 

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

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

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

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 

Edited by felipe_marin
Link to comment
Share on other sites

  • 0
>>> 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?

Link to comment
Share on other sites

  • 0

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?

 

Link to comment
Share on other sites

  • 0

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)
 
Edited by Elias Henrique
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.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...