不会c嘎嘎 2024-09-28 17:07 采纳率: 33.3%
浏览 12
已结题

python中使用hidapi与lArduino Leonardo通信

Arduino Leonardo 端代码:

#include <Keyboard.h>

void setup() {
  // 开始键盘模拟
  Keyboard.begin();
}

void loop() {
  // 发送字符 "Hello"
  Keyboard.print("Hello");
  delay(1000);  // 每1秒发送一次
}


pyhton 代码

``import hid

# 查找设备的 Vendor ID 和 Product ID
VID = 0x2341  # Arduino Leonardo 的 Vendor ID (可以根据你的设备调整)
PID = 0x8036  # Arduino Leonardo 的 Product ID

# 枚举连接的设备
for device in hid.enumerate():
    print(f"Device: {device}")

try:
    # 打开设备
    h = hid.Device(VID, PID)

    # 打印设备信息
    print(f"Manufacturer: {h.manufacturer}")
    print(f"Product: {h.product}")
    print(f"Serial No: {h.serial}")

    # 读取数据(假设设备发送64字节数据)
    while True:
        data = h.read(64)  # 读取64字节数据
        if data:
            print("收到的数据: ", data)
except Exception as e:
    print(f"发生错误: {e}")
finally:
    # 关闭设备
    h.close()

通信会被拒绝访问

img

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-28 17:08
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您提供的代码和错误信息来看,您在尝试使用Python的hidapi库与Arduino Leonardo进行通信时遇到了“拒绝访问”的错误。这可能是由于以下几个原因造成的:

    1. 权限问题:在某些操作系统上,访问HID设备可能需要特殊的权限。请确保您的Python脚本有足够的权限来访问HID设备。
    2. 设备独占问题:如果设备已经被其他应用程序(如Arduino IDE)占用,您可能会遇到此问题。请确保没有其他程序正在使用Arduino Leonardo。
    3. 驱动程序问题:确保您的操作系统上安装了正确的Arduino驱动程序,并且它们是最新的。
    4. 代码问题:确保您的Arduino代码和Python代码都正确无误,并且与您的硬件兼容。

    针对这些问题,您可以尝试以下解决方案:

    • 确保以管理员权限运行Python脚本。
    • 关闭可能占用设备的所有其他应用程序,然后重试。
    • 重新安装或更新Arduino驱动程序。
    • 检查并确认Arduino Leonardo上的代码是否正确上传并正在运行。

    关于您的Python代码,看起来基本是正确的。但要记住,hidapi主要用于访问具有特定HID特征的USB设备,而不是普通的串口通信设备。因此,如果您要通过串口与Arduino通信,您可能需要使用像pySerial这样的库而不是hidapi。请确认您的Arduino Leonardo是否支持HID功能。如果不支持,您可能需要使用串口通信方式来实现与Arduino的通信。在这种情况下,您可以使用以下示例代码进行通信:

    import serial
    import time
    
    # 设置串口端口和波特率(根据您的实际情况调整)
    ser = serial.Serial('COM端口号', 波特率)  # COM端口号和波特率请根据实际情况替换
    
    while True:
        # 向Arduino发送数据(可选)
        ser.write(b'Hello')  # 这取决于您是否想在Arduino上读取某些内容来确定返回的数据类型和内容
        time.sleep(1)  # 每秒发送一次数据(可选)
        if ser.inWaiting():  # 检查是否有数据可读(可选)
            print("收到的数据:", ser.readline().decode())  # 将读取的数据转换为字符串并打印出来(可选)
    

    请确保将'COM端口号''波特率'替换为您的实际串口端口和波特率设置。另外,请注意串口通信与HID通信之间的区别,并确认您的Arduino设置是哪种方式。如果可能的话,您可以考虑在硬件上更改Arduino的设置以支持HID通信方式。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月29日
  • 创建了问题 9月28日