Ameba Arduino: [RTL8195] [RTL8710] 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