Python无法破译串行端口位

2024-04-19 14:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个MaxiMet GMX600气象站。你知道吗

这是手册: http://gillinstruments.com/data/manuals/maximet-manual-iss1.pdf

我让它连接到我的串行端口,它每1秒吐一次数据。太好了!你知道吗

不幸的是,我无法破译数据。。。你知道吗

我应该看到这样的字符串:

$WIMWV ,069,R,004.06,N,A*00
$WIMWV,122,T,,N,A*14
$WIXDR,C,+023.2,C,TEMP,P,1.0281,B,PRESS,H,037,P,RH,Y,000.0,M,PRECIP*0A

Followed 1 second later by:

$WIMWV ,238,R,000.46,N,A*06
$WIMWV,303,T,,N,A*15
$WIXDR,C,+023.2,C,TEMP,P,1.0281,B,PRESS,H,037,P,RH,Y,000.0,M,PRECIP*0A

Followed 1 second later by:

$WIMWV ,130,R,000.21,N,A*0C
$WIMWV,205,T,,N,A*12
$WIXDR,C,+023.2,C,TEMP,P,1.0281,B,PRESS,H,038,P,RH,Y,000.0,M,PRECIP*05

不幸的是,我看到的都是胡说八道,比如:

�����������������W���������������������������������������������������������������]���}���������������������u���+��+����; ���; �����; k��K; ���K;k��;� ����;���;� ���;���u������������

Followed one second later by:

�叙���������������������W�����������������������������������������������������������������]��哙���������������������W���������������������������������������������������������������]��坙

Followed one second later by:

�����]���y����������������������W�����������������������������������������������������������������]��叙���������������������W�����������������������������������������������������������������]�

下面是我的Python代码:

import time
import serial
import binascii
import struct

ser=serial.Serial(
        port='/dev/ttyAMA0',
        baudrate=19200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=5
)
while 1:
        y=0
        str=""
        while y<200:
                #x=binascii.b2a_qp(ser.read()).strip().strip("=")
                #x=binascii.hexlify(ser.read()).strip()
                x=ser.read().strip()
                #x=struct.pack('<h',int(ser.read()))

                str=x+str
                y=y+1
                #ser.flush()

        print str

你可以看到我一直在试图操纵字节,但什么都没有发生。我一直都在胡思乱想。你知道吗

如果我取消对行bin2ascii.hexlify(ser.read()).strip()的注释,则得到如下输出:

9fa78d919fa75dfb00ebe59599f9a79f9f9f9fa78fa3979fa9a795a38d998b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da78d9b9fa79d9fa39f9f9fa7998f9fa75dfb00ebe57d99f9a79f9f9f9fa78fa3979fa9a795a38f998b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da79b999fa79f9fa39f9f9fa7938f9fa75dfb

Followed one second later by:

9f9fa79d9fa39f9f9fa78d959fa75dfb00ebe57999f9a79f9f9f9fa78fa3979fa9a795a39d978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da79d9599a79d9fa39f9f9fa795979fa75dfb00ebe59b99f9a79f9f9f9fa78fa3979fa9a795a39f978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da7959b9fa79d9fa39f9f

Followed one second later by:

99a39d9d9f9da79b9d9fa79d9fa39f9f9fa793939fa75dfb00ebe57b99f9a79f9f9f9fa78fa3979fa9a795a399978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da79f9d9fa79d9fa39f9f9fa797939fa75dfb00ebe59f99f9a79f9f9f9fa78fa3979fa9a795a39b978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da795

ASCII只能上到0x7F,所以我猜所有这些0x9_数字都产生了有趣的字符?你知道吗

恐怕我真的卡住了。我无法破译它-我的Python技能还不够好,我已经做了好几个小时了。。。有人对如何修复这个输出有什么Python建议吗?你知道吗


Tags: importreadbyserialonetempserpress