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)
程式碼說明
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