Jetbot Basic Motion Example Not working

I tried to run Jetbot’s ‘Example 1 - Basic Motion’
After running “robot = Robot()”… I keep getting the error below. I believe I have connected everything right as the manual says. I am using waveshare’s kit.
see the error message below;


OSError Traceback (most recent call last)
in
----> 1 robot = Robot()

/usr/local/lib/python3.6/dist-packages/jetbot-0.4.0-py3.6.egg/jetbot/robot.py in init(self, *args, **kwargs)
20 def init(self, *args, **kwargs):
21 super(Robot, self).init(*args, **kwargs)
—> 22 self.motor_driver = Adafruit_MotorHAT(i2c_bus=self.i2c_bus)
23 self.left_motor = Motor(self.motor_driver, channel=self.left_motor_channel, alpha=self.left_motor_alpha)
24 self.right_motor = Motor(self.motor_driver, channel=self.right_motor_channel, alpha=self.right_motor_alpha)

/usr/local/lib/python3.6/dist-packages/Adafruit_MotorHAT-1.4.0-py3.6.egg/Adafruit_MotorHAT/Adafruit_MotorHAT_Motors.py in init(self, addr, freq, i2c, i2c_bus)
229 self.motors = [ Adafruit_DCMotor(self, m) for m in range(4) ]
230 self.steppers = [ Adafruit_StepperMotor(self, 1), Adafruit_StepperMotor(self, 2) ]
→ 231 self._pwm = PWM(addr, debug=False, i2c=i2c, i2c_bus=i2c_bus)
232 self._pwm.setPWMFreq(self._frequency)
233

/usr/local/lib/python3.6/dist-packages/Adafruit_MotorHAT-1.4.0-py3.6.egg/Adafruit_MotorHAT/Adafruit_PWM_Servo_Driver.py in init(self, address, debug, i2c, i2c_bus)
57 self.i2c = get_i2c_device(address, i2c, i2c_bus)
58 logger.debug(“Reseting PCA9685 MODE1 (without SLEEP) and MODE2”)
—> 59 self.setAllPWM(0, 0)
60 self.i2c.write8(self.__MODE2, self.__OUTDRV)
61 self.i2c.write8(self.__MODE1, self.__ALLCALL)

/usr/local/lib/python3.6/dist-packages/Adafruit_MotorHAT-1.4.0-py3.6.egg/Adafruit_MotorHAT/Adafruit_PWM_Servo_Driver.py in setAllPWM(self, on, off)
93 def setAllPWM(self, on, off):
94 “Sets a all PWM channels”
—> 95 self.i2c.write8(self.__ALL_LED_ON_L, on & 0xFF)
96 self.i2c.write8(self.__ALL_LED_ON_H, on >> 8)
97 self.i2c.write8(self.__ALL_LED_OFF_L, off & 0xFF)

/usr/local/lib/python3.6/dist-packages/Adafruit_GPIO-1.0.4-py3.6.egg/Adafruit_GPIO/I2C.py in write8(self, register, value)
114 “”“Write an 8-bit value to the specified register.”“”
115 value = value & 0xFF
→ 116 self._bus.write_byte_data(self._address, register, value)
117 self._logger.debug(“Wrote 0x%02X to register 0x%02X”,
118 value, register)

/usr/local/lib/python3.6/dist-packages/Adafruit_PureIO-1.0.4-py3.6.egg/Adafruit_PureIO/smbus.py in write_byte_data(self, addr, cmd, val)
266 # Send the data to the device.
267 self._select_device(addr)
→ 268 self._device.write(data)
269
270 def write_word_data(self, addr, cmd, val):

OSError: [Errno 121] Remote I/O error

i think this may means the I2C bus cannot talk to the motor driver. I got it when i reversed the orange and yellow wires to the motor driver.

To check the devices visible on the I2C bus, try the following cmd:

i2cdetect -y 2

you should see something like this:

Warning: Can’t use SMBus Quick Write command, will skip some addresses
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:
10:
20:
30: – – – – – – – –
40:
50: 50 – – – – – – 57 – – – – – – – –
60:
70:

And then what lol

Please use the option “-r” in your i2cdetect command, like

$sudo i2cdetect -y -r 1

1 Like