I2C - Slave 從 Arduino UNO 接收資料

材料準備

範例說明

介紹
I2C裡有兩個角色,一個是Master,另一個是Slave。 Master的角色只能有一個,而Slave可以有很多個。每個Slave都有自己的位址(address)編號,所以當Master要與特定的Slave溝通時,就會使用這個位址。 I2C使用了兩根接腳,一根是資料線 (SDA),另一根是時脈線 (SCL)。 Master藉由控制SCL讓Slave知道有東西要傳,而資料就可以在SDA上面傳送。 I2C在Arduino的範例裡被稱呼為Wire。

流程
在前個例子 “I2C – 向 Arduino UNO 發送資料” 裡, Ameba 是I2C master, 而Arduino UNO是I2C slave,並且讓Ameba 送資料給Arduino UNO。
在這個範例裡, Ameba 是I2C slave, Arduino UNO 是I2C master, 改成資料從Arudino UNO 傳給Ameba。

  • 準備Arduino Uno為 I2C Master

首先我們先準備Arduino,先將Arduino IDE選成Arduino, “Tools” -> “Board” -> “Arduino/Genuino Uno”
接著打開 Master Writer 的範例,”Examples” -> “Wire” -> “master_writer”

per-5-1

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

  • 準備Ameba 為 I2C Slave

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

per-5-3

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

  • 接線

Arduino的範例裡,使用A4當作I2C SDA, A5為I2C SCL。這些接腳與Ameba一樣。
另外很重要的是,兩塊板子的GND要互接。

打開Arduino Uno的Arduino IDE並打開serial monitor(“Tools”->“Serial Monitor”)。
接下來,按下 Arduino Uno 上的重置按鈕。 現在 Arduino Uno(Master)正在與 Ameba(Slave)建立連接。 在Serial Monitor中,您可以看到從 Arduino Uno 打印的訊息。
我們按下 Ameba 上的重置按鈕開始接收來自 Arduino UNO 的訊息。 然後觀察Serial Monitor,您可以看到每 0.5 秒顯示一次消息。

per-5-8

程式碼說明

可以在 Arduino 的文檔中找到此範例的詳細資訊:
https://www.arduino.cc/en/Tutorial/MasterWriter
首先Wire.begin()會先設定address, 如果是Master可以不用設定address
https://www.arduino.cc/en/Reference/WireBegin
接下來,Master使用 Wire.beginTransmission(address) 開始傳輸數據給I2C slave:
https://www.arduino.cc/en/Reference/WireBeginTransmission
使用 Wire.write() 發送數據,最後使用 Wire.endTransmission() 來結束傳輸:
https://www.arduino.cc/en/Tutorial/WireEndTransmission
請先確認已安裝QQ通訊軟體