I2C - 利用I2C让Ameba接收来自Arduino UNO的讯息


材料准备
  • Ameba x 1
  • Arduino UNO x 1

范例说明

在前個例子 “I2C – 利用I2C让Ameba与Arduino UNO沟通” 里,Ameba 是I2C master, 而Arduino UNO 是I2C slave,并且让Ameba 送资料给Arduino UNO。

在这个范例里, Ameba 一样是I2C master, Arduino UNO 是I2C slave, 但是改成资料从Arudino UNO 传给Ameba。

  • 准备Arduino Uno为 I2C Slave

首先我们先准备Arduino,先将Arduino IDE选成Arduino, “Tools” -> “Board” -> “Arduino/Genuino Uno”:

接着打开 Slave Sender 的范例,”Examples” -> “Wire” -> “slave_sender”

然后点选 “Sketch” -> “Upload” 将程式编译并上传到 Arduino Uno。

  • 准备Ameba 为 I2C Master

我们额外再开一个Arduino IDE,确定板子是 Ameba, “Tools” -> “Board” -> “Arduino Ameba”

然后打开 Master Reader 的范例, “File” -> “Examples” -> “AmebaWire” -> “master_reader”

然后点选 “Sketch” -> “Upload” 将程式编译并上传到 Ameba。

  • 接线

Arduino的范例里,使用A4当作I2C SDA, A5为I2C SCL。这些接脚与Ameba一样。
另外很重要的是,两块板子的GND要互接。

 

RTL8710 的接线图如下:

接着我们要从Serial Monitor视窗来看Ameba印出读到的数据首先我们要找到Ameba的Serial Port, 点Windows的[开始] 按钮、[控制台]、[系统及安全性],然后在[系统]下方按一下[装置管理员],开启[装置管理员]。会看到Ports那边有个mbed Serial Port(COM15), 这边 COM15 就是就是 Ameba 的Port Number

接着我们将Arduino的Port选到COM15, 它在 “Tools” -> “Port” -> COM15 (Ameba目前的Mbed Serial Port)。
每当我们要从Arduino IDE看Ameba印出的讯息, 都要设定成正确的port:

打开包含Ameba的Arduino IDE,开启Serial Monitor, “Tools” -> “Serial Monitor”, 会出现Serial Monitor的视窗,这个视窗可以让你看到Ameba印出来的讯息。

接着按下Arduino Uno的Reset按钮,让Arduino Uno等待I2C master连接。
再按下Ameba的Reset按钮,让Ameba开始接收从Arduino Uno传过来的讯息。这时候会看到Serial Monitor每隔0.5秒出现”hello ” 的讯息,这样就代表成功了。
(NOTE: 如果发现Ameba 的Serial Monitor没出现讯息,请试试看重开Serial Monitor)

程式码说明

Ameba使用同样的Arduino范例,Ardunio官方网站的范例说明可以参考这里:
https://www.arduino.cc/en/Tutorial/MasterReader
首先Wire.begin()会先设定address, 如果是Master可以不用设定address:
https://www.arduino.cc/en/Reference/WireBegin

接着Master使用Wire.requestFrom()来设定要从哪一个Slave接收资料:
https://www.arduino.cc/en/Reference/WireRequestFrom

请先确认已安装QQ通讯软体