2017-05-26 50 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