首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在电路游乐场快车上使用电路Python从主机接收数据

在电路游乐场快车上使用电路Python从主机接收数据
EN

Stack Overflow用户
提问于 2018-02-22 07:54:38
回答 3查看 8.1K关注 0票数 4

我正在使用Adafruit公司的电路游乐场快车,我正在用电路Python编程。

我想读取通过USB连接电路游乐场快车的计算机传输的数据。使用input()可以很好地工作,但是我宁愿得到串行的缓冲区,这样循环就可以在没有输入的情况下继续进行。有点像serial.read()

import serial不适用于电路Python,或者我必须安装一些东西。在使用电路Python读取串行缓冲区时,还有什么可以做的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-17 02:04:55

这现在有点可能了!在一月份的CircuitPython 3.1.2的稳定发布中,函数serial_bytes_available被添加到supervisor模块中。

这允许您轮询串行字节的可用性。

例如,在CircuitPython固件(即boot.py)中,串行回波示例如下:

代码语言:javascript
复制
import supervisor

def serial_read():
   if supervisor.runtime.serial_bytes_available():
       value = input()
       print(value)

并确保在主机端创建串行设备对象时,将超时等待设置为非常小(即0.01)。

在python中:

代码语言:javascript
复制
import serial

ser = serial.Serial(
             '/dev/ttyACM0',
             baudrate=115200,
             timeout=0.01)

ser.write(b'HELLO from CircuitPython\n')
x = ser.readlines()
print("received: {}".format(x))
票数 4
EN

Stack Overflow用户

发布于 2019-10-10 06:57:31

艾登的回答引导我朝着正确的方向前进,我在这里找到了一个很好(而且略有不同)的例子,说明如何使用Adafruit中的supervisor.runtime.serial_bytes_available (特别是第89-95行):https://learn.adafruit.com/AT-Hand-Raiser/circuitpython-code

code.py的一个最小工作示例是:接受输入并以"RX: string“形式格式化新字符串

代码语言:javascript
复制
import supervisor

print("listening...")

while True:
    if supervisor.runtime.serial_bytes_available:
        value = input().strip()
        # Sometimes Windows sends an extra (or missing) newline - ignore them
        if value == "":
            continue
        print("RX: {}".format(value))

测试: Adafruit CircuitPython 4.1.0,2019-08-02;Adafruit ItsyBitsy M0 Express和samd21g18.在macOS上使用mu-编辑器中的串行连接发送的消息。

样本输出

代码语言:javascript
复制
main.py output:
listening...
hello!
RX: hello!
票数 4
EN

Stack Overflow用户

发布于 2020-05-11 21:07:39

我有一个简单的例子可以根据上面的帖子工作,不确定它有多稳定或有用,但仍然在这里发布:

CircuitPython代码:

代码语言:javascript
复制
import supervisor

while True:
    if supervisor.runtime.serial_bytes_available:
        value = input().strip()
        print(f"Received: {value}\r") 

PC码

代码语言:javascript
复制
import time
import serial
ser = serial.Serial('COM6', 115200)  # open serial port

command = b'hello\n\r'
print(f"Sending Command: [{command}]")
ser.write(command)     # write a string

ended = False
reply = b''

for _ in range(len(command)):
    a = ser.read() # Read the loopback chars and ignore

while True:
    a = ser.read()

    if a== b'\r':
        break

    else:
        reply += a

    time.sleep(0.01)

print(f"Reply was: [{reply}]")

ser.close()
代码语言:javascript
复制
c:\circuitpythontest>python TEST1.PY
Sending Command: [b'hello\n\r']
Reply was: [b'Received: hello']
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48922189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档