python BBC micro:bit -无线电字符串传输随机回车

9gm1akwq  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(84)

我有两个BBC Micro Bit和使用无线电功能从一个从机传输数据到主Micro Bit。当数据传输时,我得到随机回车,我不知道是什么问题,我已经试图剥离任何随机CR等,但仍然得到同样的问题。
a=1,开,
12
=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()

zz2j4svz

zz2j4svz1#

我发现你的脚本在没有发送额外的回车的情况下工作。我使用两个微位进行测试。我使用mu中的REPL和CoolTerm,设置为115200波特。我使用Linux Mint作为我的操作系统。CoolTerm输出:Matt,B=On,Off Matt,A=On,Off
在pysarial代码发布后添加:下面的代码可以让我产生预期的输出,而不需要额外的空白行。在print语句中使用end =''删除换行符。使用pid和vid查找microbit可以让您连接其他串行设备。感谢microbit-playground发布了关于如何使用pid和vid查找microbit的示例代码。
我用Jupyter笔记本在Linux上测试了这个,它应该可以在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()

字符串

相关问题