在Ubuntu中用Python控制Lego-WeDo 2.0马达

2024-10-01 17:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过ubuntu发行版的Python控制legowedo2.0的马达。你知道吗

乐高WEDO2.0“集线器”采用蓝牙低能耗技术,电机通过电缆连接,我想旋转。你知道吗

我读了很多关于BLED112 USB加密狗的书,它是also recommended by Lego,但是我现在只有一个通用的bluetooth4.0usb加密狗。hci0是加密狗,hci1是内部加密狗。你知道吗

当电机处于配对模式时,命令sudo hcitool -i hci0 lescan显示输出A0:E6:F8:49:E2:93 LPF2 Smart Hub 2 I。那么

gatttool -I [ ][LE]> connect A0:E6:F8:49:E2:93抛出“连接成功”。你知道吗

我的Python代码现在是:

from gattlib import GATTRequester
from time import sleep

address = 'A0:E6:F8:49:E2:93'

req = GATTRequester(address,True,"hci0")
req.write_by_handle(0x3d, "\x06\x04\x01\x09")
sleep(2)
req.write_by_handle(0x3d, "\x01\x01\x01\x64")
sleep(2)
req.write_by_handle(0x3d, "\x01\x01\x01\x9C")
sleep(2)
req.write_by_handle(0x3d, "\x01\x01\x01\x00")

它应该改变engine's LEDspin it a bit的颜色,然后停止。你知道吗

但是,我收到的唯一输出是:

RuntimeError: connect: Device or resource busy (16)

当使用hci1时,加密狗会快速闪烁几秒钟,然后出现错误:

Segmentation fault (core dumped)

最后,当我断开加密狗的连接并在上面的代码中键入hci0时,错误是:RuntimeError: Invalid device!,正如我所预料的,假设加密狗已经被删除了。你知道吗

在所有这一切,WeDo引擎只是显示一个不断的蓝光,表明它是连接和等待命令。你知道吗

在代码req.write_by_handle(0x3d, "\x01\x01\x01\x64")中,初始的\x01应该指示电机连接到WeDo集线器的哪个端口,并且它确实连接到第一个端口。(不管怎么说,第一个命令将处理集线器本身,以更改其颜色,因此即使电机连接到错误的端口,颜色也应该更改。)

我错过了什么?你知道吗

我确实可以使用一台装有乐高儿童友好软件的Windows电脑,它可以成功地与电机配对并控制电机。你知道吗

有没有其他型号的电动机可能更容易通过Python控制?USB或蓝牙都可以。你知道吗


跑步

from gattlib import GATTRequester, GATTResponse, DiscoveryService
from time import sleep

service = DiscoveryService("hci0")
devices = service.discover(2)

for address, name in devices.items():
    print("name: {}, address: {}".format(name, address))

作为输出提供:

name: LPF2 Smart Hub 2 I, address: A0:E6:F8:49:E2:93

接下来

from gattlib import GATTRequester

req = GATTRequester("A0:E6:F8:49:E2:93")
name = req.read_by_uuid("00002a00-0000-1000-8000-00805f9b34fb")[0]
steps = req.read_by_handle(0x15)[0]

输出:

Segmentation fault (core dumped)

Tags: fromimportbyaddresssleepa0req电机

热门问题