当前位置: 首页 > 知识库问答 >
问题:

Python通过串行端口将数据写入Vellemank8090

松高爽
2023-03-14

每个人

我试图通过Python从中继板控制中继,并编写以下代码。不幸的是,我总是出错。有人能告诉我我做错了什么吗?对于构造,我链接了文档(参见第二个链接)。我还发现了另一个帖子,其中有人试图从中继板读取数据(参见第一个链接)。但是代码对我也不起作用。

致以最诚挚的问候

翻译为www.DeepL。com/Translator

有用信息

stackoverflow关于从Velleman K8090读取数据的另一篇文章

USB中继板(K8090)的文档这里是USB中继板(Velleman K8090)的留档。

我的代码

import serial

ser = serial.Serial()
ser.baudrate = 19200
ser.port = 'COM4'
ser.data_bits = 8
ser.parity = 'N'
ser.stop_bits = 1
ser.flow_control = 'N'

ser.open()
print(ser.is_open)

print(str(bytearray([0x04, 0x11, 0x01, 0x00, 0x00, (((~(0x04 + 0x11 + 0x01 + 0x00 + 0x00)) + 0x01) & 0xff), 0x0f])))
data = str(bytearray([0x04, 0x11, 0x01, 0x00, 0x00, (((~(0x04 + 0x11 + 0x01 + 0x00 + 0x00)) + 0x01) & 0xff), 0x0f]))
ser.write(data)

ser.close()
print(ser.is_open)

输出:

真正的字节数组(b'\x04\x11\x01\x00\x00\xea\x0f')回溯(最近的调用最后):文件"C:\用户\twters\桌面\K8090_V2.py",第16行,在ser.write(数据)文件"C:\用户\twters\AppData\本地\程序\Python\Python37-32\lib\site-包\串行\serialwin32.py",第308行,在写data=to_bytes(data)File"C:\用户\twters\AppData\本地\程序\Python\Python37-32\lib\site-包\串行\serialutil.py",第63行,在to_bytes引发TypeError('Unicode字符串不支持,请编码为字节:{!r}'。格式(seq))类型错误:不支持Unicode字符串,请编码为字节:“字节数组(b'\x04\x11\x01\x00\x00\xea\x0f')”

共有1个答案

乜裕
2023-03-14

在Python3str中创建一个unicode字符串(这与Python2.7不同)。您可能需要字节。这样地:

data = bytes(bytearray([0x04, 0x11, 0x01, 0x00, 0x00, (((~(0x04 + 0x11 + 0x01 + 0x00 + 0x00)) + 0x01) & 0xff), 0x0f]))
 类似资料:
  • 我试图让Arduino在串口读取字符“s”时触发一个中继。该字符“s”由python根据从屏幕读取的图像发送。 我的问题是arduino似乎无法从串行端口读取数据,因为它从不执行if条件。我的猜测是这两者之间存在某种死锁(这就是为什么我将ardu.close()放在函数foo中) 这是我的arduino代码: 这是我的python代码:

  • 我有一个Velleman k8090中继板,我试图从中读取一些数据。我可以很好地写入电路板,但每当我输出读取的数据时,我都会得到奇怪的字符,比如菱形或倒置的问号。以下是我的部分代码: 为什么我会有这些奇怪的角色?文件规定它应该返回年份和星期。 编辑:经过一些搜索和故障排除,我现在非常确定它与Python代码或数据类型有关,而不是与硬件有关。这个论坛包含了一个C语言的例子,它从黑板上读取。我从黑板上

  • 问题 你想通过串行端口读写数据,典型场景就是和一些硬件设备打交道(比如一个机器人或传感器)。 解决方案 尽管你可以通过使用Python内置的I/O模块来完成这个任务,但对于串行通信最好的选择是使用 pySerial包 。 这个包的使用非常简单,先安装pySerial,使用类似下面这样的代码就能很容易的打开一个串行端口: import serial ser = serial.Serial('/dev

  • 所以我使用Visual Studio Windows窗体创建GUI,以便将数据发送到Arduino。我一直在测试如何在Arduino端接收数据,但似乎找不到关于数据如何发送的解释。我一直在使用发送缓冲区。 信息 Arduino串行监视器读取ASCII字符,但由于我使用GUI与Arduino通信,所以我不确定数据是如何传输的。在Arduino串行监视器中,我输入数据并按enter键。这意味着,如果我

  • 正如标题所暗示的,我正在尝试通过用户表单将数据添加到新行中。我遇到的问题是布局如下: 标题1月2月3日4月5月6月7月8月9月10月11月12日总收入(此处需要插入数据)传出(同样,需要在此处添加另一组数据) 实现这一目标的代码是什么,因为目前它低于离任,但我希望它介于收入和离任之间 如果您需要更多信息,我很乐意讨论。 提前谢谢

  • 我正试图使用串口从C#向Arduino发送一个数组。在C#中,首先是输入字符串 然后,我将其转换为int数组 然后,我将其转换为字节数组,通过串行端口发送 最后,我把它寄出去了 那么,应该由我的Arduino接收 所以recdata应该是一个int数组 但事实并非如此。当我将其打印到另一个串行端口进行检查时。。 我得到3个输出,而不是1个,就好像serialport先发送一个int,然后发送第二个