在Arduino中读取多个字节,使用仅用于pyserial发送
我经常通过pyserial发送INT64的结构: with serial.Serial(port='COM4', baudrate=115200, timeout=.1) as arduino: value = write_read(struct.pack(">q", int_array[1][i])) #this sends signed int.64 in bytes print(value) struct.pack具有此形状,例如: b'\xff\xff\xff\xff\xff\xff\xff\xef' 和函数Write_read包含: def write_read(x): arduino.write((x)) data = arduino.readline() #the idea is to receive an ACK from the Arduino after 8 bytes (th
18 2024-04-05
编程技术问答社区
Python将字符串转换为字节
我正在尝试执行一些串行输入和输出操作,其中之一是将8x8数组发送到外部设备(Arduino). pyserial 库要求我发送的信息是字节.但是,在我的Python代码中,8x8矩阵由类型组成.这是我的发送功能: import serial import Matrix width = 8 height = 8 portName = 'COM3' def sendMatrix(matrix): try: port = serial.Serial(portName, 9600, timeout = 1000000) port.setDTR(0) print("Opened port: \"%s\"." % (portName)) receivedByte = port.read() print(int(receivedByte)) if (receive
10 2024-04-05
编程技术问答社区
如何扩大pyserial的输入缓冲区大小
我想通过串行端口与手机通信.在写了一些命令后,我使用ser.read(ser.inWaiting())获得了其返回值,但是我总是得到了字符的总1020 bytes,实际上,所需的返回应该超过50KB. 我尝试设置ser.read(50000),但是解释器将挂在. 我将如何扩展输入缓冲区以立即获得所有回报? 解决方案 如果您在Windows平台上运行代码,则只需要在代码中添加一行. from serial import Serial ser = Serial(port='COM1', baudrate=115200, timeout=1, writeTimeout=1) ser.set_buffer_size(rx_size = 12800, tx_size = 12800) 其中12800是我选择的任意号码.您可以使接收(RX)和传输(TX)缓冲区大至2147483647(等于2^31-1) 这将使您能够一次扩展输入缓冲区以立即获得所有返回. 请
110 2024-04-04
编程技术问答社区
在蓝牙套接字上使用pySerialTransfer
我有工作代码,该代码在设备通过USB电缆连接时,使用PyserialTransfer将raspberry Pi的结构从Raspberry Pi发送到Arduino.我想通过蓝牙而不是用USB电缆来做到这一点. 独立地,使用单独的Python代码和单独的Arduino草图,我能够通过连续的文本或二进制数据来使Raspberry pi&arduino通过蓝牙通过蓝牙进行通信. 我的问题是我看不到如何将两种方法结合在一起 - 即它在接收端.我看到如何"手动"进行解析,寻找特殊的终止角色等,但是我希望避免使用PyserialTransfer. 感谢您的任何指示/建议/示例.到目前为止,我能够构建的所有工作代码都在这里. PyserialTransfer 工作arduino c序列号 #include "SerialTransfer.h" SerialTransfer myTransfer; int const ONBOARD_LED_PIN = 13;
8 2024-04-01
编程技术问答社区
用Python读取串行接口返回失真的数据
我正在尝试使用Python读取二进制串行端口.每个源消息由3个浮点值组成,总计12个字节.使用下面显示的python代码,我期望获得12字节bytearray消息.但是,运行我发现的代码并不总是12个字节,有时是Gibberish.我在这里做错了什么或为什么这样? Pyhon代码: #!/usr/bin/env python import serial import time serialPort = 'COM3' serialBaud = 921600 dataNumBytes = 4 numData = 3 rawData = bytearray(numData * dataNumBytes) # Connect to serial port print('Trying to connect to ' + str(serialPort) + ' at ' + str(serialBaud) + ' BAUD.') try: s = serial.S
4 2024-03-30
编程技术问答社区
用pyserial(Python串口)处理二进制数据
serial.write(Write()方法似乎仅发送字符串数据.我有[0xc0,0x04,0x00]之类的数组,并希望能够通过串行端口发送/接收它们吗? RAW I/O? 是否有单独的方法 我认为我可能需要将数组更改为['\ xc0','\ x04','\ x00'],但null字符可能会带来问题. 解决方案 您需要将数据转换为字符串 "\xc0\x04\x00" null字符在python中不是问题 - 字符串并非终止零字节的行为,就像另一个字节"\x00". . 这样做的一种方法: >>> import array >>> array.array('B', [0xc0, 0x04, 0x00]).tostring() '\xc0\x04\x00' 其他解决方案 一种替代方法,不使用array模块: def a2s(arr): """ Array of integer byte values --> binary string
18 2024-03-30
编程技术问答社区
Python Pyserial Windows没有找到端口
我刚刚尝试使用AT命令连接到USB Mobile通过它发送SMS.但是,当我使用Pyserial在Windows OS中连接到它时,我会发现错误无法打开端口,无法找到指定的文件. >>> import serial >>> ser = serial.Serial(0) # open first serial port >>> print ser.name # check which port was really used >>> ser.write("hello") # write a string >>> ser.close() 即使我将0替换为其他值,例如0 -10或'com0','com1'等,我仍然可以找到未找到的错误文件,也无法打开端口. pyserial文档中列出了一个命令,该命令列出端口或允许您打开端口 python -m serial.tools.miniterm 此命令应该列出所有串行端口.但没有显示.
16 2024-03-18
编程技术问答社区
将一个int值转换成unicode
我正在使用pyserial,需要发送一些小于255的值.如果我发送int本身,则发送int的ASCII值.因此,现在我将INT转换为Unicode值并通过串行端口发送. unichr(num_less_than_255); 但是,它提出了以下例外: 'ascii' codec can't encode character u'\x9a' in position 24: ordinal not in range(128) 什么是将int转换为unicode的最佳方法? 解决方案 只要使用chr(somenumber)即可获得1个字节值,只要它小于256. 如果您正在考虑通过催化词发送内容,那么查看标准库中的结构模块是一个好主意,它处理endian会发出包装问题,并且几乎每一个编码您可能需要的数据类型是1个字节或超过. 其他解决方案 在Python 2中 - 首先将其变成字符串,然后变成Unicode. str(integer).decode("u
54 2024-03-07
编程技术问答社区
在Arduino方面完成循环后存储串行值
我在下面的链接上也有类似的问题. 如何存储列表中的值(Python)来自Arduino串行? 因为他的输出看起来像 [2.00] [2.00,2.64] [2.00,2.64,3.28] etc 所以我想知道如何在完成真实循环后如何使用[2.00,2.64,3.28].我想使用最后一件,因为我想从该列表中提取特定索引并使用它. 我希望有人知道答案可以提供帮助. 格雷格 解决方案 在与您的问题有关的答案中指定:如何将来自Arduino串行的列表中的价值存储在列表(Python)中?,代码看起来如下. import serial arduino = serial.Serial('COM12', 9600, timeout = .1) arduino_data = [] # declare a list while True: data = arduino.readline() if data: ardui
12 2024-03-03
编程技术问答社区
如何在jUART中复制pyserial发送RGB值给Arduino?
我一直在使用 pyserial 在本地运行的Python应用程序中,将RGB值发送给Arduino,with: import serial import struct ser = serial.Serial('/dev/ttyACM0', 9600) ser.write(struct.pack('>3B', red_value, green_value, blue_value)) # where the rgb values are ints like 77,75, 0 我现在想从非本地网站实现此功能. Juart 似乎是为此目的而设计的,即A: 跨平台浏览器插件,用于串行端口通信 JavaScript 它要求用户为所使用的系统和浏览器创建插件. 我遵循了他们的 Main Github页面尽我所能't真的足够理解参数以定义其值,并且我以前还没有制作浏览器插件,因此不确定我是否缺少某些内容. 我正在使用Ubuntu 16.04和Firefox
12 2024-03-03
编程技术问答社区
最大限度地提高Arduino的串行输出
在这篇文章中,有多个问题相关.请仔细阅读,并回答您可以进行的投票. 用例 创建一个时间序列的压力读取文件.这些读取需要最大频率,但我只需要持续少于10秒钟左右. 材料 arduino uno克隆(不可改变) 在USB 2.0(可更改) 上串行 Pyserial(Python 3) SSD 问题 识别并修复瓶颈,以防止最大读取频率/s. 代码 arduino void setup() { //speed over the usb serial interface Serial.begin(450000); } void loop() { //get sensor data: read the input on analog pin 0: int sensorValue = analogRead(A0); //returns value 0-1023 //send over serial S
32 2024-03-03
编程技术问答社区
Python SerialException。设备报告已准备好读取,但没有返回数据
我正在使用以前是UNO的Arduino Nano从传感器收集数据,然后通过电动枢纽通过USB连接将数据发送到Raspberry Pi M型B,运行Jessie Jessie Jessie 4.1.19+ 3月15日,2016年3月15日和Python 2.7. Python代码使用正元读取线来获取数据. 通常,它可以正常工作,但偶尔(通常每天几次),上述消息会失败.修复它的唯一方法是拔下USB连接,重新连接并重新启动程序.我更改了代码以捕获异常,但不会重新打开连接,给出了错误: serial.serialutil.serialexception:无法打开端口/dev/ttyusb0:[errno 2]没有这样的文件或目录:'/dev/dev/ttyusb0' uno(on/dev/ttyama0)和nano(on/dev/ttyusb0)都会发生此问题. 最近,我发现纳米已移动到/dev/ttyusb1之后.然后,Python代码将成功地针对/dev/ttyusb
80 2024-03-03
编程技术问答社区
OSError: [Errno 13] 权限被拒绝: '/dev/ttyACM0'-using pyserial from Python to Arduino
环境 Linux Mint 17.1 Python 2.7 催眠2.7 arduino uno rv3 所需的行为 我试图将三个值从Python应用程序发送到Arduino. 从终端进行以下操作时,它可以工作: $ python $ import serial $ import struct $ ser = serial.Serial('/dev/ttyACM0', 9600) $ ser.write(struct.pack('>3B', 255, 0, 0)) 当前行为 在python文件中使用相同代码时,它不起作用: import serial import struct ser = serial.Serial('/dev/ttyACM0', 9600) ser.write(struct.pack('>3B', red_value, green_value, blue_value)) 错误消息 $ sudo tail -1
18 2024-03-03
编程技术问答社区
使用MatplotlibAnimation的Arduino实时串行绘图变得很慢
我正在制作一个现场绘图仪,以显示Arduino传感器的模拟变化. Arduino用9600的波特rate打印为串行的值.Python代码看起来如下: import matplotlib.pyplot as plt import matplotlib.animation as animation import serial import time ser = serial.Serial("com3", 9600) ser.readline() optimal_frequency = 100 fig = plt.figure(figsize=(6, 6)) ax1 = fig.add_subplot(1, 1, 1) # the following arrays must be initialized outside the loop xar = [] yar = [] print(time.ctime()) def animate(i): global b, x
8 2024-03-03
编程技术问答社区
与Arduino的串行通信(用于电机控制)。
我想从python do arduino发送数据,以通过继电器控制电动机.想法是发送一个数字,以识别电动机和值,以最终移动它.不幸的是,我正在努力解决一些问题.数据丢失了. 因此,在这个最小的示例中,有一个标识符" n",以表明接收到的数据是变量"数字"和标识符" C",以识别接收到的数据是计数器.要找出问题,我将数据发送回Python并尝试阅读.这是设置仅适用于第一个字符.所有其他数据都会丢失. 有人可以给我一个提示吗?这些标识符需要吗?我必须放一些延迟(),还是另一个Baut-rate? 我想这是关于第二个标识符的.如果我只与"计数器"一起工作,则设置工作正常. 非常感谢您! pyhton: import serial import time Port = "/dev/cu.usbserial-A601FZBL" ser = serial.Serial(Port,9600,timeout=1) time.sleep(1) counter =
32 2024-03-03
编程技术问答社区
pyserial当它是行的末端时,停止while循环。
import serial arduino = serial.Serial('COM12', 9600, timeout = .1) arduino_data = [] # declare a list while True: data = arduino.readline() if data: arduino_data.append(data) # Append a data to your declared list print arduino_data 我想知道何时没有来自Arduino side的新线路,我该如何跳出时循环? while True: data = arduino.readline() if data: arduino_data.append(data) # Append a data to your declared list print arduino_
18 2024-03-03
编程技术问答社区
如何在macOS中为pySerial确定Arduino的端口号?
我想知道如何确定与MacBook连接到MacBook的Arduino Nano的端口号,如果我在Python中使用它. 工具> Arduino IDE中的端口 /dev/cu.usbserial-A900afrI 我在.py文件中有此代码 import serial a = serial.Serial('A900afrI', baudrate=9600, timeout=1) 我想知道我应该用哪个端口替换'a9000afri',因为我遇到了一个错误: Traceback (most recent call last): File "/Users/cievlh/Desktop/Python/python_env/lib/python3.7/site-packages/serial/serialposix.py", line 265, in open self.fd = os.open(self.portstr, os.O_RDWR | os.O
16 2024-03-03
编程技术问答社区
Python serial.write()无法向Arduino发送串行数据
我正在编写一个Python脚本,该脚本将角色发送到Arduino,而Arduino将接收到的角色打印回了.但是在这种情况下,Arduino总是给出垃圾价值.另外,执行Python脚本时没有错误. 我已经检查了多个博客,文章和教程,并遵循了确切的步骤,但是我没有解决方案. 这是我的python脚本: import serial ser = serial.Serial("/dev/ttyACM0",9600) ser.write('8') read=ser.readline() print(read) 这是Arduino代码: int temp; void setup() { Serial.begin(9600); temp=5; } void loop() { temp=Serial.read(); Serial.println(temp); delay(1000); } arduino总是在响应中打印-1. 解决方案 Seri
22 2024-03-03
编程技术问答社区
用Python计算来自Arduino的每分钟转数
我正在尝试通过Arduino的芦苇开关在Python中计算RPM. 我似乎无法做对.有人可以帮助我正确获取代码吗? 我的结果不一致. 我的问题是我正在尝试计算每分钟的革命,但是我对分钟部分有问题.每次通过芦苇开关时,革命计数器都可以正常工作,计数会增加1,2,3,4,5,6(等).但是,RPM部分女巫是Rev/((Time.Time()() - t)/60)给了我一个结果,可以根据革命的速度保持价值增加或不够快地增加.因此,当芦苇开关以每分钟30转的方式通过时,应将30 rpm放出;当芦苇开关以每分钟90转的方式传递时,应将90 rpm放出.我知道我需要每分钟获得一项革命的统计,我想这是我很难编程的一小部分. 感谢您帮助我几个月来困扰我. import serial import time ser = serial.Serial('/dev/ttyACM0', 9600) t = time.time() a = ser.read() rev = 0 while
14 2024-03-03
编程技术问答社区