2017-07-10 14 views
0

私はPythonにはとても新しく、LibMPSSEライブラリを使用してHoneywell差圧センサーから圧力データを読み込もうとしています。私はAdafruit FT232Hチップからそれを読んでいて、私はubuntu LinuxでPython 2.7.6を使用しています。印刷時に奇妙なPythonの出力

#!/usr/bin/env python 


from mpsse import * 

SIZE = 2 # 2 bytes MSB first 
WCMD = "\x50" # Write start address command 
RCMD = "\x51"  # Read command 
FOUT = "eeprom.txt" # Output file 

try: 
    eeprom = MPSSE(I2C) 

    # print "%s initialized at %dHz (I2C)" % (eeprom.GetDescription(), eeprom.GetClock()) 

    eeprom.Start() 
    eeprom.Write(WCMD) 
    # Send Start condition to i2c-slave (Pressure Sensor) 
    if eeprom.GetAck() == ACK: 
     # ACK received,resend START condition and set R/W bit to 1 for read 
     eeprom.Start() 
     eeprom.Write(RCMD) 

     if eeprom.GetAck() == ACK: 
      # ACK recieved, continue supply the clock to slave 
      data = eeprom.Read(SIZE) 
      eeprom.SendNacks() 
      eeprom.Read(1) 
     else: 
      raise Exception("Received read command NACK2!") 
    else: 
     raise Exception("Received write command NACK1!") 

    eeprom.Stop() 
    print(data) 
    eeprom.Close() 

except Exception, e: 
    print "MPSSE failure:", e 

がライブラリによると、読み取りがsizeバイトの文字列を返し、私はデータを印刷したいときはいつでも、私は見るだけ出力され2T_`ʋQ} */eE 。私はutf-8でエンコードしようとしましたが、まだ運がありません。

+0

このライブラリの経験はありません。あなたの最後の 'の後に' print(type(data)) 'と' print( '、join([' {{d}どのデータがどのデータであり、何が含まれているのかを確認するだけです。 –

+0

@AGNGazerこれは、 6,94を出力します。 map(ord、data)])))))のxのprint( '、{:d}'。 – Rking14

+0

この長い文は、基本的に、 'data'文字列の各文字列に対応するカンマ区切りのASCII値を出力するためのものです。だから、あなたのデータ文字列は2文字しか含まれていないようです...これはあなたが期待するものですか? –

答えて

0

文字列(あなたの場合はdata)のバイト/文字に印刷できない文字が含まれていると、Pythonが「奇妙な」出力を出力することがあります。 「ビュー」(整数または六角など)個々のバイトの内容をするには、次の手順を実行します。

print(','.join(['{:d}'.format(x) for x in map(ord, data)])) # decimal 

または

print(','.join(['{:02X}'.format(x) for x in map(ord, data)])) 

あなたdataバッファの長さはSIZE=2で設定されているので、抽出するために、 -を参照してください

hi, lo = map(ord, data) 
# or: 
hi = ord(data[0]) 
lo = ord(data[1]) 

ordの詳細とそれがないを読むには:あなたは次の操作を行うことができ、整数として、このバッファから各バイト