我正在尝试通过 OS X 上的 Pyserial 与我的 Arduino 连接。我正在控制 LED 发送从 0 到 9 的数字。代码如下
import serial
arduino = serial.Serial('/dev/tty.usbserial', 9600)
arduino.write('5')
Run Code Online (Sandbox Code Playgroud)
工作得很好,但我试图将本例中的 5 作为可变变量,但类似于
arduino.write('%d') % 5
Run Code Online (Sandbox Code Playgroud)
不会工作。我不知道如何格式化输出等于工作示例的变量?
我试图运行一个同学写的脚本并向我演示.所以我知道代码是正确的,它只与我们的机器配置方式有所不同.这是代码:
#!/usr/bin/python
#import statements
import serial
import os
import time
#global constants
control_byte = '\n'
ACL_1_X_addr = ord('X')
ACL_1_Y_addr = ord('Y')
ACL_1_Z_addr = ord('Z')
GYRO_1_X_addr = ord('I')
GYRO_1_Y_addr = ord('J')
GYRO_1_Z_addr = ord('K')
#clear the screen
os.system('clear')
#initialize the serial port
s = serial.Serial()
s.port = 10
s.baudrate = 56818
s.open()
Run Code Online (Sandbox Code Playgroud)
一切都运行到最后一行s.open,它给我错误:
Traceback (most recent call last):
File "serial_reader.py", line 25, in <module>
s.open()
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 282, in open
self._reconfigurePort()
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 311, in _reconfigurePort
raise …Run Code Online (Sandbox Code Playgroud) 打开我的串行端口/dev/tty/USB0后pyserial:
>>> ser = serial.Serial("/dev/ttyUSB0", 57600)
>>> ser.isOpen()
True
>>> ser.close()
>>> ser.isOpen()
False
Run Code Online (Sandbox Code Playgroud)
我无法再/dev/ttyUSB0使用命令读取,cat /dev/ttyUSB0
通常cat /dev/ttyUSB0是像这样的阻塞命令read,但是在使用 pyserial 打开/关闭串行端口后,该cat命令变得非阻塞,看起来很忙......
有谁知道是什么原因造成的?
我使用了我的工作 tkinter 代码(仅绘制了窗口/按钮等),并尝试从此处已批准的答案中添加一些代码:用于在窗口上打印串行数据的 python 代码。
批准的答案本身只需很小的修改即可工作,但添加到我的代码中时,我收到错误“'Gui'对象没有属性'after'”
我不明白的是为什么在 Gui 类中而不是在 process_serial 方法中查找属性“after”。
from tkinter import *
from tkinter import ttk
import serial
import threading
import queue
class SerialThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
s = serial.Serial('COM11',115200)
while True:
if s.inWaiting():
text = s.readline(s.inWaiting())
self.queue.put(text)
class Gui():
def __init__(self, master):
###MAIN FRAME###
mainFrame = Frame(master, width=50000, height=40000)
mainFrame.pack(fill = BOTH, expand = 1)
###LIST FRAME###
listFrame = Frame(mainFrame)
listFrame.pack(side = TOP, fill = BOTH, expand = 1) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Python 通过串行方式与我的 Arduino 通信。我已经安装了pyserial,这是我的代码。
#!/usr/bin/env python
from serial import serial
print("helloworld")
ser=serial.Serial('/dev/ttyACM0',9600)
a=raw_input("enter value")
ser.write(a)
Run Code Online (Sandbox Code Playgroud)
当我尝试运行代码时,这就是我得到的。
Traceback (most recent call last):
File "/home/vm/Desktop/serial.py", line 2, in <module>
from serial import serial
File "/home/vm/Desktop/serial.py", line 2, in <module>
from serial import serial
ImportError: cannot import name serial
Run Code Online (Sandbox Code Playgroud) 据我所知,XON 和 XOFF 只是用于两个串行设备之间握手的特殊 ASCII 字符。但我不清楚当我使用这种类型的流量控制进行通信时实际会发生什么。我的消息开头是否只有一个 XON 字符,末尾有一个 XOFF 字符?即,当我使用PySerial编写如下内容时:
import serial
ser = serial.Serial('COMx', 9600, xonxoff = True)
ser.write('Hi!\r\n')
Run Code Online (Sandbox Code Playgroud)
设备是否确实收到此信息:
\x11Hi!\r\n\x13
Run Code Online (Sandbox Code Playgroud)
(\x11分别是Python 中的\x13XON 和 XOFF 字符。)或者还有其他事情发生吗?(遗憾的是,随着PortMon 的消亡,我自己没有一个简单的方法来测试这一点。)
我正在尝试与串行WWAN调制解调器接口(用于诊断/信号强度测量目的).这是通过我桌面上的板载COM1(115200-8-n-1),连接通过PuTTY工作.我可以使用Python编写AT命令脚本,但是我很难让它打开串口.
我根据说明安装了Python 2.7.1和PySerial.我是我的机器的本地管理员,并且运行带有和没有管理员权限的Python,但是当我尝试打开端口时,我得到以下内容:
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> s = serial.Serial(
... port='COM1',
... baudrate=115200
... )
>>> s.open()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 56, in open
raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.W
inError()))
serial.serialutil.SerialException: could not open port COM1: [Error 5] Access is
denied. …Run Code Online (Sandbox Code Playgroud) 所以我有一个python脚本,它使用pyserial库通过串口将文件发送到另一台计算机.我写了一些脚本来计算文件的md5校验和,通过串口发送之前和之后我遇到了一些问题.
示例:我发送了一个名为third.txt的简单文件,其中包含数字1到10的列表.简单文件,没有任何花哨或大.发送前文件的校验和与在另一台计算机上发送后的文件校验和完全不同,即使文件明显相同.
我通过简单地通过USB移动文件并以这种方式进行校验和计算来检查我的代码是否有问题.这次它奏效了.
任何想法为什么会发生这种情况以及如何解决这个问题?
这是发送前的校验和代码.这不是确切的代码,但基本上就是我所做的.
<<Code that waits for command from client>>
with open(file_loc) as file_to_read:
data = file_to_read.read()
md5a = hashlib.md5(data).hexdigest()
ser.write('\n' + md5a + '\n')
Run Code Online (Sandbox Code Playgroud)
这是我发送后的校验和代码.
with open(file_loc) as file_to_read:
data = file_to_read.read()
md5b = hashlib.md5(data).hexdigest()
print('Sending Checksum Command')
ser.write("\n<<SENDCHECKSUM>>\n")
md5a = ser.readline()
print(md5a)
print(md5b)
if md5a == md5b:
print("Correct File Transmission")
else:
print("The checksum indicated incorrect file transmission, please check.")
ser.flush()
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
import serial
import time
ser = serial.Serial('com4',115200,timeout=1)
while 1:
time.sleep(10)
print ser.readline()
Run Code Online (Sandbox Code Playgroud)
我不想使用串行模块并允许在我的代码中只使用标准的 python 模块。
任何快速建议我该怎么做?
我正在尝试执行一些串行输入和输出操作,其中之一是将8x8阵列发送到外部设备(Arduino)。该pySerial库需要,我发信息是字节。但是,在我的python代码中,8x8矩阵由types组成<class 'str'>。这是我的发送功能:
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 (receivedByte == '1'):
port.write('1')
bytesWritten = 0
for row in range(8):
for col in range(8):
value = matrix.getPoint(col, row)
bytesWritten += port.write(value)//ERROR HERE!
print(int(port.read()));
port.close()
print("Data (%d) sent to port: \"%s\"." % (bytesWritten, portName))
except:
print("Unable to open the port …Run Code Online (Sandbox Code Playgroud) 无论我尝试什么,这个字符串都不会分裂.
def funktion():
ser = serial.Serial('COM5',115200)
b = str("Das ist ein Test")
a = str(ser.readline().decode())
b.split(' ')
a.split('s')
print (a)
print (b)
Run Code Online (Sandbox Code Playgroud)
我设法让我的 tkinter 应用程序在文本字段上显示文本。
我通过硬编码 COM 端口和波特率来做到这一点,然后在我的程序开始时设置一个串行对象。
baudRate = 9600
ser = serial.Serial('COM16', baudRate)
Run Code Online (Sandbox Code Playgroud)
然后我所有的代码都在之后运行。
但问题是一切都是硬编码的。我希望用户能够从下拉列表中选择 COM 端口。当他选择一个端口时,串行通信应该开始。
所以我就是这样构建的。这是我的相关代码。
#hardcoded baud rate
baudRate = 9600
# this is the global variable that will hold the serial object value
ser = 0 #initial value. will change at 'on_select()'
#this function populates the dropdown on frame1, with all the serial ports of the system
def serial_ports():
return serial.tools.list_ports.comports()
#when the user selects one serial port from the dropdown, this function will execute
def …Run Code Online (Sandbox Code Playgroud) 我有一个安装了 Python 3.5 的系统,它没有以太网或 wifi 连接。它也没有 pip。我想安装 pyserial 。我已经下载了它: https: //pypi.org/project/pyserial/#files(有两个选项 - 轮子和源,我选择源并下载它并通过 USB 传输)问候,