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”

per-5-1

然後點選 “Sketch” -> “Upload” 將程式編譯並上傳到 Arduino Uno。

  • 準備Ameba 為 I2C Master

我們額外再開一個Arduino IDE,確定板子是 Ameba, “Tools” -> “Board” ->
然後打開 Master Reader 的範例, “File” -> “Examples” -> “AmebaWire” -> “MasterReader”

per-5-3

然後點選 “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

per-5-6

 

接著我們將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)

per-5-8

程式碼說明

Ameba使用同樣的Arduino範例,Ardunio官方網站的範例說明可以參考這裡:
 
首先Wire.begin()會先設定address, 如果是Master可以不用設定address

https://www.arduino.cc/en/Reference/WireBegin

接著Master使用Wire.requestFrom()來設定要從哪一個Slave接收資料:
https://www.arduino.cc/en/Reference/WireRequestFrom

請先確認已安裝QQ通訊軟體