Python - 无法解密串口位

时间:2015-12-03 09:58:07

标签: python serial-port string-formatting type-conversion

我有一台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

不幸的是,我所看到的只是gobbledy-gook,如:

�����������������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

你可以看到我一直试图操纵字节,但什么也没发生。我一直在变得gobbldy-gook。

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

9fa78d919fa75dfb00ebe59599f9a79f9f9f9fa78fa3979fa9a795a38d998b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da78d9b9fa79d9fa39f9f9fa7998f9fa75dfb00ebe57d99f9a79f9f9f9fa78fa3979fa9a795a38f998b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da79b999fa79f9fa39f9f9fa7938f9fa75dfb

Followed one second later by:

9f9fa79d9fa39f9f9fa78d959fa75dfb00ebe57999f9a79f9f9f9fa78fa3979fa9a795a39d978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da79d9599a79d9fa39f9f9fa795979fa75dfb00ebe59b99f9a79f9f9f9fa78fa3979fa9a795a39f978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da7959b9fa79d9fa39f9f

Followed one second later by:

99a39d9d9f9da79b9d9fa79d9fa39f9f9fa793939fa75dfb00ebe57b99f9a79f9f9f9fa78fa3979fa9a795a399978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da79f9d9fa79d9fa39f9f9fa797939fa75dfb00ebe59f99f9a79f9f9f9fa78fa3979fa9a795a39b978b9f958b9f9d57999fa59b9da5959d9f9ba79fa39f9f9fa79fa39f9f9f9f9fa79ba38d9f9fa9a79da39f9b9fa9a78d979fa799a39d9d9f9da795

ASCII只能达到0x7F,所以我猜所有这些0x9_数字都会产生有趣的字符?

我担心我真的被困住了。我无法解读它 - 我的Python技能不够好,我已经在这里工作了几个小时......有没有人有关于如何修复此输出的Python建议?

0 个答案:

没有答案