

Usually with a sensor device you have to check the register table in the device datasheet.

There is a difference here from when you write data to a typical sensor. Note that the data type I chose here is uint8_t, which corresponds to a 8-bit unsigned number (0-255). To send a byte to Arduino, we use the wiringPiI2CWrite() function. Send data to Arduino via I2C // Send data to arduino The parameter you have to give to the function is the device ID of the I2C slave on the bus.Īfter the communication is successfully established, we can start sending and receiving data. With the wiringPiI2CSetup(), your Raspberry Pi will try to detect and connect to your Arduino board. Std::cout << "I2C communication successfully setup.\n" Std::cout << "Failed to init I2C communication.\n" Init I2C communication int main (int argc, char **argv) Here you can choose whatever ID you want. When using a sensor, usually the ID is already set, and you have to find it in the datasheet. Note that it’s quite different from when you use I2C to read data from a sensor. So here on Raspberry Pi we have to use the same ID to find the Arduino device on the I2C bus. You can find the complete header file on GitHub. Here we include the WiringPiI2C header, which is part of the WiringPi library. Let’s write the most basic program to use Arduino as an I2C slave. Open this file (with sudo), find the line #dtparam=i2c_arm=on, and remove the leading ‘#’ to uncomment it.Īfter that, reboot your Pi, and I2C will be activated as long as you don’t comment the I2C line again in the config file.

To activate it, search for the “/boot/config.txt” file. If you haven’t used I2C on your Raspberry Pi yet, it probably means that the I2C communication is not activated. To learn more about gpio headers: Raspberry Pi pinout guide | Arduino Uno pinout guide. To make it simple, in this scenario the Raspberry Pi will impose 3.3V, which is not a problem for the Arduino pins. If the Raspberry Pi is configured as a master and the Arduino as a slave on the I2C bus, then you can connect the SDA and SCL pins directly. But in this specific case we can avoid using one. Usually you’d have to use a level converter between 3.3V and 5V. You should really pay attention when you connect 2 pins between those boards. Important note: the Raspberry Pi 4 (and earlier) is running under 3.3V, and the Arduino Uno is running under 5V! Connect the SCL (I2C clock) of the Pi (pin 3) to the Arduino SCL.Connect the SDA (I2C data) of the Pi (pin 2) to the Arduino SDA.Link the GND of the Raspberry Pi to the GND of the Arduino.You are learning how to use the combo Raspberry Pi + Arduino to build your own projects?Ĭheck out Raspberry Pi and Arduino and learn step by step. Make sure the Raspberry Pi detects the Arduino board on the I2C bus.Raspberry Pi I2C master program with WiringPi.
