I2C - 從 Arduino UNO 接收資料
材料準備
範例說明
介紹
在前個例子 “I2C – 向 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” ->
然後打開 Master Reader 的範例, “File” -> “Examples” -> “AmebaWire” -> “MasterReader”
然後點選 “Sketch” -> “Upload” 將程式編譯並上傳到 Ameba。
- 接線
Arduino的範例裡,使用A4當作I2C SDA, A5為I2C SCL。這些接腳與Ameba一樣。
另外很重要的是,兩塊板子的GND要互接。
流程
接著我們要從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/Reference/WireBegin
接著Master使用Wire.requestFrom()來設定要從哪一個Slave接收資料:
https://www.arduino.cc/en/Reference/WireRequestFrom