- 創客機器人實戰:基于Arduino和樹莓派
- 何福貴等編著
- 916字
- 2020-10-23 14:26:25
4.10 Arduino I2C
I2C是Inter-Integrated Circuit的縮寫,是一種兩線接口。I2C只是用兩條雙向的線,一條Serial Data Line(SDA),另一條Serial Clock(SCL)。
SCL:上升沿將數據輸入到每個EEPROM器件中;下降沿驅動EEPROM器件輸出數據(邊沿觸發)。
SDA:雙向數據線,為OD門,與其他任意數量的OD與OC門成“線與”關系。
I2C的一個總線上可以掛多個設備(傳感器),設備之間直接通過ID進行區分,同一個總線上只能有一個主設備,可以有多個從設備,通信只能從主設備發起,不能從從設備發起。速率方面常用的有9.6Kbps、1.92Kbps、1.152Kbps。
在某些情況下,設置兩個(或更多)Arduino板彼此分享信息是有幫助的。在下面的例子中,兩板程序通過I2C同步串行協議和對方通信,作為一個主讀/從發配置。
I2C總線是由數據線SDA和時鐘SCL構成的串行總線,可發送和接收數據。在兩個設備之間可以進行雙向傳送。各種被控制設備均并聯在這條總線上,總線上的每個設備模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既可以是主設備又可以是從設備,這取決于它所要完成的功能。本例的接線如圖4-9所示。

圖4-9 Arduino開發板I2C通信接線
主控板的代碼如下:


從控板的代碼如下。

Arduino中的Wire庫主要函數說明如下:
(1)Wire.begin()和Wire.begin(address):初始化Wire庫,并且加入到I2C網絡,前者作為Master,后者作為Slaver,其中參數address為7位的器件地址(可選),如果沒有輸入,則以Master的形式加入到I2C網絡。
(2)Wire.requestFrom():主設備請求從設備一個字節,這個字節可以被主設備用read()或available()接受,有兩種形式:Wire.requrstFrom(addtess,quantity)和Wire.requrstFrom(addtess,quantity,stop)。
參數:addtess表示7位的器件地址;quantity表示請求得到的數量。
(3)Wire.beginTransmission(address):開始一次數據傳輸,發送一個I2C開始字符,參數address表示器件的7位地址。
(4)Wire.endTransmission()和Wire.endTransmission(stop):結束一個由beginTransmission()開始的并且由write()排列的從機的傳輸。在Arduino中,endTransmission()接受一個布爾型變量,如果為1,則endTransmission()發送一個停止信息;如果為0,則發送開始信息。
(5)Wire.write():向從機發送數據,有3種形式。
Wire.write(value):value為要發送的數值。
Wire.write(string):string為字符組的指針。
Wire.write(data,length):data為一個字節數組,length為傳輸的數量。
(6)Wire.send():發送數據。
(7)Wire.receive():接收數據。
(8)Wire.onReceive():從機接收主機發來的數據。
(9)Wire.onRequest():從機請求主機發送數據。
要打開Arduino IDE自帶的I2C的例程,在Arduino IDE的菜單欄中選擇“文件”>“示例”>“Wire”命令,如圖4-10所示。

圖4-10 Arduino IDE自帶的I2C例程
- Go Machine Learning Projects
- Visual FoxPro 6.0數據庫與程序設計
- Windows XP中文版應用基礎
- MCSA Windows Server 2016 Certification Guide:Exam 70-741
- 流處理器研究與設計
- Supervised Machine Learning with Python
- C語言寶典
- Ceph:Designing and Implementing Scalable Storage Systems
- Mastering ServiceNow Scripting
- Excel 2010函數與公式速查手冊
- 計算機組裝與維修實訓
- 智能+:制造業的智能化轉型
- Oracle 11g Anti-hacker's Cookbook
- 玩轉PowerPoint
- R Statistics Cookbook