Raspberry Pi I2C configuration for the BNO055
|This page explains how to set up the i2c on a Raspberry Pi 3B or Zero W so it can
communicate with the BNO055 sensor.
|Please note that the BNO055 sensor will not operate with a Raspberry Pi unless the
following change is made. The Raspberry Pi hardware i2c device /dev/i2c-1 has to be disabled and replaced with
a device tree overlay device /dev/i2c-3. Software requiring /dev/i2c-1 will therefore no longer work after this
|The Raspberry Pi i2c hardware does not implement the i2c standard fully as it does
not support clock stretching. The BNO055 sensor requires that clock stretching be supported by i2c for it to transmit
data. Therefore the standard i2c hardware has to be disabled and a device tree overlay enabled to replace it. This
process is explained below.
|From the command line enter the command sudo raspi-config to start the Raspberry
Pi software configuration tool as shown below. Select option 5 Interfacing options.
|Then select option P5 i2c as shown below.
|Select No to having the i2c interface enabled as shown below. Then follow the instructions
to finish and close the program.
|Next enter sudo leafpad /boot/config.txt from the command line to edit the
config.txt file. Go to the bottom of the file and add the following line:
This device tree overlay creates an i2c_gpio module which is essentially a bit banged i2c device that supports
clock stretching. This takes the place of the Raspberry Pi i2c hardware and uses the same GPIO pins.
|Save and Close the file. Then reboot with command sudo reboot. After the system
has restarted use the command ls -l /dev/i2c* to show the i2c device setting. If the procedure has been
successful you should see that the /dev/i2c-3 device is present as shown below.
|To confirm that you are able to communicate with the BNO055 run the command i2cdetect
-y -r 3 from the command line. This should show the BNO055 is present at i2c address 0x28 as shown below.
|You will now be able to run our BNO055 example
code on your Raspberry Pi.
BNO055 IMU output being used to animate an OpenGL cube.
|Usage with WiringPi and other i2c source code
|The change described above replaces the Raspberry Pi hardware i2c device /dev/i2c-1
with the device /dev/i2c-3. This change means that any software that runs expecting to find /dev/i2c-1 will no
longer work. For this reason if you wish to develop software for the GPS-PIE slice you may wish to install the
interface example source code we provide on a new micro SD card to avoid any conflict with software you may already
have installed or written.
For programs that use WiringPi the only change needed is in the initialisation where the i2c device needs to be
changed as follows:
const char *device;
uint8_t devID = 0x28; // Your slave I2C device
device = "/dev/i2c-3"; // select i2c-3 port
wiringPiI2CSetupInterface (device, devID);
© The BlackBoxCameraTM Company Limited