I2C - Use I2C to receive data from Arduino UNO


Materials
  • Ameba x 1
  • Arduino UNO x 1

Example

In the previous example “I2C – Communicate with Arduino UNO via I2C” , Ameba, the I2C master, transmits data to the Arduino UNO, the I2C slave. As to this example, Ameba is the I2C master, and receives data from the Arduino UNO, which is the I2C slave.

  • Setting up Arduino Uno to be I2C Slave

First, select Arduino in the Arduino IDE in “Tools” -> “Board” -> “Arduino/Genuino Uno”:

Open “Examples” -> “Wire” -> “slave_sender”

Then click “Sketch” -> “Upload” to compile and upload the example to Arduino Uno.

  • Setting up Ameba to be I2C Master

Next, open another window of Arduino IDE, make sure to choose Ameba in the IDE: “Tools” -> “Board” -> “Arduino Ameba”

Open “File” -> “Examples” -> “AmebaWire” -> “master_reader”

CLick “Sketch” -> “Upload” to compile and upload the example to Ameba.

  • Wiring

The Arduino example uses A4 as the I2C SDA and A5 as the I2C SCL, we can use the same pins on Ameba.
Another important thing is that the GND pins of Arduino and Ameba should be connected to each other.

 

Below is the RTL8710 Wiring Diagram:

Next, we will observe the data receive by Ameba in the Serial Monitor.
(Note: If you don’t know which port Ameba is connected to, please find it in the Device Manager of Windows first. Ameba is connected to “mbed Serial Port”. For example, if you find Mbed Serial Port(COM15) means Ameba is connected to port COM15.)

We select the port in “Tools” -> “Port” -> “COM15” (the port connected to Ameba)

Open the Arduino IDE window of the Ameba, go to “Tools” -> “Serial Monitor”. The Serial Monitor displays the messages printed by Ameba.

Press the reset button on Arduino Uno, Arduino Uno now waits for connection from I2C master.
Then press the reset button on Ameba, Ameba will start to receive messages from Arduino Uno. And you can see the “hello ” message printed per 0.5 second in Serial Monitor.
(NOTE: If the message doesn’t show in the Serial Monitor of Ameba, please try to open the Serial Monitor again.)

Code Reference

You can find detailed information of this example in the documentation of Arduino:
https://www.arduino.cc/en/Tutorial/MasterReader
First use Wire.begin()/Wire.begin(address) to join the I2C bus as a master or slave, in the Master case the address is not required.
https://www.arduino.cc/en/Reference/WireBegin
Next, the Master uses Wire.requestFrom() to specify from which Slave to request data.
https://www.arduino.cc/en/Reference/WireRequestFrom
Please confirm that QQ communication software is installed