我将Arduino连接到OLIMEX-SHIELD-EKG-EMG,并且有一个Arduino示例用于EKG捕获和与OLIMEXINO-328 / Arduino板的Electric Guru接口。
我运行了Arduino软件,然后我确保它正在使用Guru工作,一切都很好。
我尝试使用Python从串口读取数据并将其保存到文本文件中,因此我可以将其用于其他内容(在我的情况下是Windows命令)。当我打开文件时,数据都是垃圾。
那么我做错了什么以及如何解决?
提前谢谢大家。
这是我的代码:
import serial
from time import sleep
f = open("data2.txt", "w")
port = "\\.\COM4"
ser = serial.Serial(port, 38400, timeout=0)
while True:
data = ser.read(9999)
if len(data) > 0:
print ('Got:',data)
sleep(0.5)
print ('not blocked')
f.write( str(data) + "\n\n" )
f.close()
ser.close()
这就是我得到的数据:
b'\ x05 \ r \ x1c \ x1e \ x10K \ x12 \ x8a \ x01 \ x0e \ x14& \ x1b \ x1bW \ x12 \ x80 \ x00 \ x7f \ x11 \ rZC:\ x82 \ x12 _。\ x1a ?\ X10 ^ \ X12 \ x8a \ X1A __ \\ X01:Q \ X12 \ x8a \ X15 \ X01 \ X1A \ X1F \ x1c6L \ X1A \ X82 \ x00t \ X1E \ X0C \ X18 \ x19s:\ x8a \ X05] - \ X01 \ x0e [G \ X12 \ x8a \ x15_ \ x0b9 \ X17> R \ X12 \ x8a \ X08 __ \ 0x7F部分\ X08:S \ X1A \ X82 \ X01 \ r \ X18 \ x1d4 \ x10j:\ x8a \ N_0 \ X06 \ X10 \ x12Y \ X10 \ x8a \ NRH \ X1C \ x0bw @ \ X12 \ X80 \ X08 \ 0x7F部分\ x0f7 \ X1F \ x1bT:\ x8a + \ x7fU%\ x18P:\ x8a \ X00 \ X0B} \ X006 \ x11K \ X12 \ x8a \ x00Z \ X19&安培; \ X16> \ X1A \ X82 \ X01 \ x02D \ X1D \ NYB:\ x8a * $ \ X15 \ X12 \ x1cX:\ x8a \ X1B \ 0x7F部分[\ X06 \ x1bP \ X12 \ x8a + \ X0C \ X1F \ X1B-F \ X1A \ X82 \ x05Z \ X13 \ x0f7 \ X14}?:\ x8a \ NUB \ X19 \ N7 ^ \ X10 \ x8a \ x15_ \ n \ X14 \ x132_ \ X12 \ X80 \ X1D \ x7f_x \ X05 \ x15N:\ x8a \ X05<'\ x025 \ x11I:\ x8a \ x0bZ1 \ x0f4 \ x18S \ X12 \ x8a \ x0bQK8 \ x0bvB \ X1A \ X82 \ X11 \ 0x7F部分\ x0e \ X1A \ X18 \ x14q \ X1A \ X82 \ X07 \ XC1 \ XE1 \ X05 \ X14 \ x13q:\ x8a + SB \ X02 \ X1B \ x0cM \ X12 \ x8a \ X01 \ X1F \ X1B%\ X15 \ X15] \ X1A \ X82 \ X01B \ X01。(\ X1D \ 0x7F部分\ X1A \ X82 \ XC2 \ XC1 \ x05,9 \ x1at \ X10 \ x8a,__ X \ x024N \ X1A \ X80(XD !\ X15 \ X10i的\ X1A \ X82 \ X08 |
答案 0 :(得分:0)
这对我来说就像二进制数据。所以我猜每个16位或每个32位都是一个数字。您必须转换所有数据,然后将其格式化为文本文件。
答案 1 :(得分:0)
看起来ser.read()
返回bytes
而不是字符串。如果你想要字符串,你需要解码。使用data.decode(your_encoding)
。你需要知道编码。
有关详情,请参阅docs。
答案 2 :(得分:0)
UTF-16解码可能很有希望......
data=b'\x05\r\x1c\x1e\x10K\x12\x8a\x01\x0e\x14&\x1b\x1bW\x12\x80\x00\x7f\x11 \rZC:\x82\x12_.\x1a?\x10^\x12\x8a\x1a__\\x01:Q\x12\x8a\x15\x01\x1a\x1f\x1c6L\x1a\x82\x00t\x1e\x0c\x18\x19s:\x8a\x05]-\x01\x0e[G\x12\x8a\x15_\x0b9\x17>R\x12\x8a\x08__\x7f\x08:S\x1a\x82\x01\r\x18\x1d4\x10j:\x8a\n_0\x06\x10\x12Y\x10\x8a\nRH\x1c\x0bw@\x12\x80\x08\x7f\x0f7\x1f\x1bT:\x8a+\x7fU%\x18P:\x8a\x00\x0b}\x006\x11K\x12\x8a\x00Z\x19&\x16>\x1a\x82\x01\x02D\x1d\nYb:\x8a*$\x15\x12\x1cX:\x8a\x1b\x7f[\x06\x1bP\x12\x8a+\x0c\x1f?\x1b-F\x1a\x82\x05Z\x13\x0f7\x14}:\x8a\nUb\x19\n7^\x10\x8a\x15_\n\x14\x132_\x12\x80\x1d\x7f_x\x05\x15N:\x8a\x05<`\x025\x11I:\x8a\x0bZ1\x0f4\x18S\x12\x8a\x0bQK8\x0bvB\x1a\x82\x11\x7f\x0e\x1a\x18\x14q\x1a\x82\x07\xc1\xe1\x05\x14\x13q:\x8a+Sb\x02\x1b\x0cM\x12\x8a\x01\x1f\x1b%\x15\x15]\x1a\x82\x01B\x01.(\x1d\x7f\x1a\x82\xc2\xc1\x05,9\x1at\x10\x8a,__X\x024N\x1a\x80(xD!\x15\x10I\x1a\x82\x08|.'
data.decode('UTF-16')
u'\u0d05\u1e1c\u4b10\u8a12\u0e01\u2614\u1b1b\u1257\x80\u117f\u0d20\u435a\u823a\u5f12\u1a2e\u103f\u125e\u1a8a\u5f5f\u785c\u3130\u513a\u8a12\u0115\u1f1a\u361c\u1a4c\x82\u1e74\u180c\u7319\u8a3a\u5d05\u012d\u5b0e\u1247\u158a\u0b5f\u1739\u523e\u8a12\u5f08\u7f5f\u3a08\u1a53\u0182\u180d\u341d\u6a10\u8a3a\u5f0a\u0630\u1210\u1059\u0a8a\u4852\u0b1c\u4077\u8012\u7f08\u370f\u1b1f\u3a54\u2b8a\u557f\u1825\u3a50\x8a\u7d0b\u3600\u4b11\u8a12\u5a00\u2619\u3e16\u821a\u0201\u1d44\u590a\u3a62\u2a8a\u1524\u1c12\u3a58\u1b8a\u5b7f\u1b06\u1250\u2b8a\u1f0c\u1b3f\u462d\u821a\u5a05\u0f13\u1437\u3a7d\u0a8a\u6255\u0a19\u5e37\u8a10\u5f15\u140a\u3213\u125f\u1d80\u5f7f\u0578\u4e15\u8a3a\u3c05\u0260\u1135\u3a49\u0b8a\u315a\u340f\u5318\u8a12\u510b\u384b\u760b\u1a42\u1182\u0e7f\u181a\u7114\u821a\uc107\u05e1\u1314\u3a71\u2b8a\u6253\u1b02\u4d0c\u8a12\u1f01\u251b\u1515\u1a5d\u0182\u0142\u282e\u7f1d\u821a\uc1c2\u2c05\u1a39\u1074\u2c8a\u5f5f\u0258\u4e34\u801a\u7828\u2144\u1015\u1a49\u0882\u2e7c'