我有一个IRobot Roomba型号565,我正尝试使用带有Roomba的OI的Wemos D1 mini对其进行控制。

我将FTDI适配器的TX和RX引脚连接到Roombas RX和TX,我可以在Termite(串行终端)中看到信息(电池固件等),但是如果我依次发送命令128,131,135,则Roomba不能进入清洁模式。使用串行终端向Roomba发送命令将不起作用,因为它将以三个字节(而不是一个字节)发送128个字节。因此,我使用了某人的草图,该草图将有关Roomba的信息发布到MQTT服务器中。所以我将其上传到我的Wemos D1 mini上,并相应地连接了RX和TX,但是它发送“无数据”,当我进行电源重置时,它会发出两声提示音。确实对蜂鸣声的含义以及为什么它不能正常工作感到困惑。我确实尝试了两个不同的草图,但它们都不起作用。

如何使用Wemos D1 mini指令Roomba进入清洁模式?添加我尝试过的草图的链接。 MQTT来自Youtuber,名为The Hook Up,这里是他的GitHub。第二个是我在搜索为什么不起作用时看到的,所以这里是那个。另外,我尝试上传此文件,但遇到编译错误,因此没有进行测试。在搜索它时,我得到的最接近的东西是错误代码和蜂鸣声的列表,但仅发出2声蜂鸣声并且没有语音消息,它什么也没说。我也完全忘了提到,当我将Roomba与串行适配器连接时,打开Termite(串行终端),然后按清洁按钮,我将得到以下响应
/>这告诉我,在Roomba中很有可能获得OI支持。

我也按照奥斯汀的建议尝试使用Python,但是仍然没有运气
这是我的代码,如果您可以找到我做的某种错误🤞

import serial
ser = serial.Serial("COM7", 115200) # open serial port
print(ser.name) # check which port was really used
ser.write(bytearray([128, 131, 135]))
print ("commands sent")


评论

您找到了有关两声蜂鸣的哪些信息?

我已经编辑了你们要问的问题。非常感谢您告诉我。另外,我想知道是否应该致电Irobot,也许他们会有所帮助。你们有什么感想?大多数人都说这是我的Roomba的错,因为他们的工作正常。

您使用的串行终端将数字表示为ASCII字符,这意味着键入128实际上将发送字节49、50和56。为什么不尝试在带有pyserial库的Python中执行此操作,这将只有几行代码。导入序列,创建序列对象(ser = serial.Serial(“ COM#”,),然后执行ser.write(bytearray([128,131,135])。

我对python不太了解。如果您可以给我看一个示例文件,那将很棒。在那之前,我将尝试自己做,并给出我得到的结果

您好@AustinTronics我尝试使用python,但仍然没有运气,我在问题中张贴了代码

#1 楼

您的代码看起来不错,设备可能正在向您发送回字节,因此您需要在端口上读取它们。添加到您所拥有的内容后,将看起来像这样:

import serial
import time

ser = serial.Serial("COM7", 115200) # open serial port
print(ser.name) # check which port was really used
ser.write(bytearray([128, 131, 135]))
print ("commands sent")

start_time = time.time()
while time.time()-start_time < 10:
    if ser.inWaiting() > 0:
        incomming_byte = ser.read()
        print(incomming_byte),      #Prints bytes interpreted as ascii/char values
        #print(ord(incomming_byte)) #Prints bytes interpreted as decimal values

ser.close()


这将循环10秒,以检查串行缓冲区中是否有任何字节,以及是否有,那么它将读取字节。 print语句后的逗号应在同一行上打印所有字节,而不是在多行上打印。第二个打印语句已被注释掉,因此它不会运行,但是我把它放在那里,以防您想找回十进制值。

评论


$ \ begingroup $
太好了!我尝试了您的脚本,它返回了以下内容。 b'\ x80'b'\ x83'b'\ x87'现在我不知道这意味着什么。关于下一步做什么的任何信息?
$ \ endgroup $
–阿里安汗
19年6月7日在18:33



$ \ begingroup $
进行了一些研究,发现它是十六进制的,因此我将其转换为十进制,并返回128 131 135。我尝试了其他命令,例如获取电池等,但是它回复了我们发送的相同字节。 dd
$ \ endgroup $
–阿里安汗
19年6月7日在18:47

$ \ begingroup $
这很奇怪。尝试发送没有命令的随机字节,看看是否能将其取回。我还想知道是否有任何命令可以打开LED或使设备进行任何物理更改,以便您可以直观地检查其是否正常运行。
$ \ endgroup $
–奥斯汀Tronics
19年6月7日在18:56

$ \ begingroup $
尝试发送OI PDF中未列出的命令,并且返回了'n'。当我按下Roomba上的按钮时,会显示一条消息,提示“已保存bbox vars”。有用于控制LED的命令,我发送了命令,但相同的行为仍然存在。如果您需要OI表,请继续。 irobot.lv/uploaded_files/File / ...
$ \ endgroup $
–阿里安汗
19年6月8日在0:37



$ \ begingroup $
尝试分离命令。每个字节数组一个命令。不要尝试在一个字节数组中一次发送所有命令。在每个命令之间还要等待一秒钟,以使设备有足够的时间做出反应。因此,bytearray([128])后跟一个time.sleep(1),再跟一个bytearray([131])跟着另一个time.sleep(1),依此类推...
$ \ endgroup $
–奥斯汀Tronics
19年6月8日在0:52