2017-05-26 75 views
2

我有两个英国广播公司微型位,并使用无线电功能从一个从属数据传输到主微位。当数据传输时,我得到随机回车,我不知道是什么问题,我试图剥离任何随机CR等,但仍然得到同样的问题。英国广播公司微型:位 - 无线电串转移随机回车

a = 1时,开,

= 2,

关,77

= 3,

在88

=== ================================================

网关的代码

from microbit import * 
import radio 

radio.config(group=0) 
radio.on() 

while True: 
    incoming = radio.receive() 
    if incoming: 
     uart.write(incoming) 

====================================== ========

从代码

from microbit import * 
import radio 

radio.config(group=0) 
radio.on() 

while True: 
    if button_a.was_pressed(): 
     radio.send('Matt,A=On,Off' + '\n') # a-ha 
     display.scroll("A") 

    if button_b.was_pressed(): 
     radio.send('Matt,B=On,Off' + '\n') # a-ha 
     display.scroll("B") 

============================= ============================

PySerial代码

import sys 
import glob 
import serial 


def serial_ports(): 
    ports = ['COM%s' % (i + 1) for i in range(256)] 

result = [] 
for port in ports: 
    try: 
     s = serial.Serial(port) 
     s.close() 
     result.append(port) 
    except (OSError, serial.SerialException): 
     pass 
return result 


if __name__ == '__main__': 
    print(serial_ports()) 
try: 
ser = serial.Serial('COM5', 115200, timeout = 0) 
print("connected to: " + (ser.portstr)) 
except serial.SerialException: 
pass 

while True: 
line = ser.readline().decode('utf-8') 
# Read a line and convert it from b'xxx\r\n' to xxx 

if line: # If it isn't a blank line 
    f = open('output.csv', 'a+') 
    f.write(line + '\n') 
    print(line) 
    f.close() 

ser.close() 

回答

1

我发现你的脚本没有发送额外的回车。我使用两个微比特进行测试。我使用了muL中的REPL和CoolTerm,设置为115200波特。我使用Linux Mint作为我的操作系统。 CoolTerm输出: 马特,B =开,关 马特,A =开,关

添加了pyserial代码公布后: 下面的代码对我的作品产生预期的输出,无需额外的空行。通过在print语句中使用end =''来删除换行符。使用pid和vid查找microbit使您可以连接其他串行设备。感谢microbit-playground发布示例代码,了解如何使用pid和vid来查找微位。

我在Linux上使用jupyter笔记本测试过这个。它应该在Windows上工作而不需要修改。

import serial 
import serial.tools.list_ports as list_ports 

def find_microbit_comport(): 
    ports = list(list_ports.comports()) 
    for p in ports: 
     if (p.pid == 516) and (p.vid == 3368): 
      return str(p.device) 

if __name__ == '__main__': 
    ser = serial.Serial() 
    ser.baudrate = 115200 
    ser.port = find_microbit_comport() 
    ser.open() 

while True: 
    line = ser.readline().decode('utf-8') 
    if line: # If it isn't a blank line 
     f = open('output.csv', 'a+') 
     f.write(line) 
     print(line, end='') 
     f.close() 

ser.close() 
+0

好点测试与另一个串行终端,我一直在使用pyserial所以必须是我的pyserial代码的问题。感谢您的测试 – Brendon

+0

如果您想发布您的pyserial代码,也许我们可以看到什么是添加回车。 – oppy

+0

这是我的PySerial代码 – Brendon