将串行接口数据转换为整数

时间:2016-07-11 05:15:08

标签: python python-2.7 integer pyserial

我正在写一些代码来从串行接口读取并返回接收数据的整数值。

我似乎需要从中移除"\r\n"。我试过分裂,但它没有用。

这是我的代码:

import time
import serial
import string         

ser = serial.Serial(
    port='/dev/ttyACM1',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)
counter = 0

while 1:
    x = ser.readline()

    if "t" in x:
        print x
        x = int(x)
        print x
        print "temp"
    elif "h" in x:
        print  "hum "
    elif "g" in x:
        print  "gas "
    else:
        pass

    time.sleep(1)

然后我有这个错误:

 Traceback (most recent call last):
  File "/home/pi/read.py", line 26, in <module>
    x=int(x)
ValueError: invalid literal for int() with base 10: 't0\r\n'

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

试试这样:

import time
import serial
import string         

ser = serial.Serial(
    port='/dev/ttyACM1',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)
counter = 0

while True:
    line = ser.readline().rstrip()
    if not line:
        continue

    resultType = line[0]
    data = int(line[1:])

    if resultType == 't':
        print "Temp: {}".format(data)
    elif resultType == 'h':
        print "Hum: {}".format(data)
    elif resultType == 'g':
        print "Gas: {}".format(data)
    else:
        pass

    time.sleep(1)

第一个更改是str.rstrip()我们从串行接口读取的行。这将从字符串末尾删除任何"\r\n"个字符或空格。第二个变化是将线分成&#34;类型&#34;字母(line[0])和数据(行的其余部分)。