在現代電子設計中,I2C總線因其簡單性和靈活性而廣受歡迎。它允許多個設備共享同一通信線路,從而節省空間和成本。Arduino,作為一個多功能的微控制器平臺,自然也支持I2C通信。
I2C總線基礎
I2C總線由兩條線組成:數據線(SDA)和時鐘線(SCL)。SDA用于傳輸數據,而SCL用于同步數據傳輸。I2C設備可以是主設備或從設備。主設備生成時鐘信號并啟動數據傳輸,從設備響應主設備的請求。
Arduino與I2C
Arduino板通常有兩個I2C引腳:A4(SDA)和A5(SCL)。這些引腳可以直接連接到I2C設備的相應引腳。Arduino的軟件庫提供了對I2C通信的支持,使得與I2C設備的通信變得簡單。
硬件連接
為了演示I2C通信,我們將使用一個常見的I2C設備:MCP9808溫度傳感器。以下是連接步驟:
- 將MCP9808的VCC引腳連接到Arduino的5V。
- 將MCP9808的GND引腳連接到Arduino的GND。
- 將MCP9808的SDA引腳連接到Arduino的A4引腳。
- 將MCP9808的SCL引腳連接到Arduino的A5引腳。
軟件實現
在Arduino IDE中,我們需要包含Wire庫,這是Arduino提供的用于I2C通信的庫。以下是讀取MCP9808溫度的示例代碼:
#include
// MCP9808 I2C地址
#define MCP9808_ADDRESS 0x18
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 初始化I2C通信
Wire.begin();
}
void loop() {
// 讀取溫度
float temp = readTemperature();
// 打印溫度
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" C");
// 等待一秒鐘
delay(1000);
}
float readTemperature() {
// 啟動I2C通信
Wire.beginTransmission(MCP9808_ADDRESS);
// 發送溫度寄存器地址
Wire.write(0x05);
// 停止I2C通信
Wire.endTransmission();
// 請求兩個字節的數據
Wire.requestFrom(MCP9808_ADDRESS, 2);
// 等待數據準備就緒
if (Wire.available() == 2) {
// 讀取兩個字節的數據
byte msb = Wire.read();
byte lsb = Wire.read();
// 將兩個字節合并為一個16位的值
int16_t raw = (msb < < 8) | lsb;
// 將原始值轉換為攝氏度
return raw / 16.0;
}
// 如果沒有數據,返回0
return 0;
}
代碼解釋
- 包含Wire庫 :
#include引入Arduino的I2C通信庫。 - 定義I2C地址 :
#define MCP9808_ADDRESS 0x18定義MCP9808的I2C地址。 - 初始化 :
setup()函數中初始化串口和I2C通信。 - 主循環 :
loop()函數中讀取溫度并打印到串口。 - 讀取溫度 :
readTemperature()函數中實現與MCP9808的I2C通信,讀取溫度值。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
接口
+關注
關注
33文章
9556瀏覽量
157368 -
數據
+關注
關注
8文章
7342瀏覽量
94936 -
I2C總線
+關注
關注
8文章
422瀏覽量
63440 -
Arduino
+關注
關注
190文章
6527瀏覽量
197233
發布評論請先 登錄
相關推薦
熱點推薦
SGM4541 I2C總線過壓保護器:設計與應用的詳細解析
SGM4541 I2C總線過壓保護器:設計與應用的詳細解析 在如今的電子設備設計中,保護電路免受過電壓的損害是至關重要的。SG Micro Corp推出的SGM4541 I2C總線過壓
SGM4541A:I2C總線過壓保護的理想之選
SGM4541A:I2C總線過壓保護的理想之選 在電子設備的設計中,I2C總線的穩定運行至關重要。而SGM4541A作為一款低IQ I2C
I2C總線-通信線纜長度的影響及改進措施
I2C總線確實不適合遠距離通信,尤其是需要使用線纜與I2C接口器件進行通信,這里的“不適合”并不是說不可以,這也是本文的重點。一般使用I2C
發表于 01-21 06:03
探索PCF8584:I2C總線控制器的卓越之選
以作為標準高速并行總線與串行I2C總線之間的接口設備,兼容8049、8051、6800、68000和Z80等多種并行總線微控制器/微
P82B715:I2C總線擴展的得力助手
P82B715:I2C總線擴展的得力助手 在電子設計領域,I2C總線是一種常用的通信協議,但它的總線電容限制往往會影響實際通信距離和系統設計
I2C的總線協議
I2C 總線使用兩根信號線(數據線 SDA 和時鐘線 SCL)在設備間傳輸數據。SCL 為單向時鐘線,固定由主機驅動。SDA 為雙向數據線,在數據傳輸過程中由收發兩端分時驅動。
I2C 總線
發表于 12-15 08:07
深入剖析I2C協議
I2C是由Philips開發的簡單的雙向兩線總線,在深入淺出理解SPI協議中,我們區分了單工,半雙工,全雙工協議數據流向的區別,根據特征,I2C協議屬于半雙工協議(即同一時刻,數據單向流動)。此外
高效率、6通道、白光LED驅動器,帶I2C接口 skyworksinc
電子發燒友網為你提供()高效率、6通道、白光LED驅動器,帶I2C接口相關產品參數、數據手冊,更有高效率、6通道、白光LED驅動器,帶I2C接口的引腳圖、接線圖、封裝手冊、中文資料、英
發表于 07-30 18:31
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介
I2C協議的基本功能的軟件或硬件實現。它通常包括對I2C總線的初始化、數據傳輸、時序控制和錯誤處理等功能的支持。I2C核心提供了一組API或接口
發表于 04-15 10:39
飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介
I2C協議的基本功能的軟件或硬件實現。它通常包括對I2C總線的初始化、數據傳輸、時序控制和錯誤處理等功能的支持。I2C核心提供了一組API或接口
發表于 04-15 10:19
I2C總線與Arduino的接口示例
評論