Arduino | I2C練習(1):使用兩個Arduino做溝通
千里始於足下,動手做才知道Arduino的好玩
I2C的原理
I2C的原理請參見<I2C原理參考>,黑修斯此篇只有簡單介紹。I2C通訊是利用兩條實體線進行的通訊機制,分別為序列資料線(SDA) 與 序列時脈線(SCL),中間需要串聯上拉電阻。
- 主控端數量:可以多個
- 連線速率: 100kbps標準模式 400Kbps快速模式 3.4Mbps高速模式
- 確認機制:有,收到資料會發送通知資料
實驗器材
- Arduino UNO 開發板
- Arduino MEGA 2560 開發板
- 1.8K Ω 的電阻 2個
- 杜邦線6條
實驗項目
- 使用兩個Arduino 開發板做溝通---單方面回傳hello
- 使用兩個Arduino 開發板做溝通---透過指令回傳
1.使用兩個arduino做溝通---單方面回傳hello
程式是參考趙英傑老師的書<超圖解Arduino互動設計入門 第二版>,用來熟悉I2C的軟體端操作,另外I2C可不是只有透過程式可以操作,也可以使用硬體的方式才操作。動作設定
主從端設定Arduino UNO | 主端(Master) |
Arduino MEGA 2560 | 從端(Client) |
UNO GND <---> MEGA 2560 GND
UNO 5V <---> 1.8K Ω 的電阻 <---> UNO SDA <---> MEGA 2560 SDA
UNO 5V <---> 1.8K Ω 的電阻 <---> UNO SCL <---> MEGA 2560 SCL
動作說明
主端(Arduino UNO)不斷發送"hello"的字串,透過I2C給從端3號(為Arduino MEGA 2560,黑修斯設定為從端3號),並透過Serial印出。開啟序列埠來觀察
將Arduino MEGA 2560與電腦連接,開啟序列埠觀察。主端(Arduino UNO)程式碼:本人是設定給Arduino UNO
從端(Arduino MEGA 2560)程式碼:本人是設定給Arduino MEGA 2560,並定址為3號從端
最後,你可以觀察到,確定有收到主端Arduino UNO透過I2C發過來的訊號。
2.使用兩個arduino做溝通---透過指令回傳
實驗二與實驗一的線路接法相同,差別在這次將UNO跟MEGA2560上的USB通訊埠一同連接電腦,因為此次是透過電腦下達指令(透過serial port)給主端,主端發出對應訊號透過I2C給MEGA2560,而MEGA2560再透過serial port印出。動作說明
主端等待電腦端透過Serial發出訊號,若是接收到對應的指令,會透過I2C將相關指令發給從端3號,而主端會透過Serial回傳"指令1已經發送",而從端3號收到來至主端的指令會透過Serial印出。實驗二從端程式:跟實驗一程式一樣,主端發送什麼指令,從端就印出什麼指令。
(請複製實驗一的程式碼)
實驗二主端程式:
開啟序列埠來觀察
開啟兩個序列埠來輸入與監測,對主端發送101010,看看結果。確實程式的動作都有完美執行。
使用PuTTy連線測試
那我們來用看看PuTTy連線呢?動作也有完美執行。
關於PuTTy的操作,請見這篇
好書推薦
<超圖解Arduino互動設計入門 第三版,趙英傑,旗標>
對Arduino有濃厚的興趣,想要在深入了解原理的地方,請參考 "趙英傑"老師的書,目前出到第三版,而這本書是黑修斯大學時代,教授上課用的教科書本之一,這本書內容生動有趣,基礎原理講述清楚明白,非常適合入門初學與基礎打底。黑修斯自己更是從書中獲益良多,這本書被Arduino的創辦人看過之後,也連絡 "趙英傑"老師出版成國際英文版呢。
Reference
超圖解Arduino互動設計入門 第二版,趙英傑,旗標。(註:已經有第三版)I2C bus 簡介 (Inter-Integrated Circuit Bus) @ 傑克! 真是太神奇了! :: 痞客邦 ::
黑修斯的GitHub_ArduinoHC_I2C (相關程式碼都在此)
轉貼本文時,需註明來自黑修斯隨手札記原創作者 hughes chen(黑修斯),及附上原文連結,同時 禁止修改,禁止商業使用 。
0 留言
不一定能即時回覆問題,有時間會盡量答覆。