色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何僅在兩個Aduino之間進行2路I2C通信

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-25 15:16 ? 次閱讀

步驟1:您需要什么:

我們假設您具有以下部分:

兩個Arduino UNO

一些公對母電線

一些公對公電線

一個旋轉電位計

一個面包板

步驟2:I2C的工作方式

I2C是一種通信協議,使您可以在微控制器和某些傳感器等電路之間進行通信。它僅使用兩根線(如此高效?。?。第一線是時鐘線,通常在文檔中寫為SCL。第二根線是數據線,通常寫為SDA。

I2C總線上的設備可以是“主機”或“從機”。僅主機控制時鐘線上的電壓,而主機和從機都可以操縱數據線上的電壓。通過仔細輪流,網絡上的所有設備都可以共享信息

為了將信息發送到正確的位置,每個從站都有一個唯一的地址號碼,就像每個電話都有一個唯一的號碼一樣。

當我看到I2C器件時,他們有文檔說:“該電路希望接收N字節表示ABC的數據,并發送回M字節表示DEF的數據?!比绻徺I的設備不包含此信息,則不要購買。

有關I2C通信內部工作的更多詳細信息,請查看以下鏈接:

http://www.robot-electronics.co.uk/i2c-tutorial

http://www.i2c-bus.org/結果

https://en.wikipedia.org/wiki/I%C2%B2C

步驟3:設置

上圖中的設備使用引腳A4和A5進行I2C通信。每種類型的arduino和Wire庫的I2C引腳說明如下:

https://www.arduino.cc/zh/Reference/Wire

主設置看起來像這樣:

#include

void setup() {

// note that begin() has no parameter.

Wire.begin();

}

從站設置看起來像這樣:

#include

void setup() {

// note that begin() has a parameter.

// Any number from 0.。..127 will work.

Wire.begin(1);

}

如果您要在該網絡上使用第二個從站,則需要除#1外的地址,因為該地址已被使用。這意味著只能通過仔細計劃來添加和刪除網絡上的設備。許多使用I2C的設備都將帶有一個帶撥碼開關(小光開關)的PCB,可以將其撥動以更改地址。便宜的型號將有裸露的接觸。要翻轉這些開關,必須觸摸裸觸點。

第4步:發送數據

與之交談的人,然后發送信息,然后說“我完成了?!?/p>

void loop() {

Wire.beginTransmission(1);

Wire.write(“hello, ”);

Wire.endTransmission();

}

從站僅需發送信息。每個人都假定從服務器正在與主機通信。

void loop() {

Wire.write(“world!”);

}

Wire.write()具有三個版本:一個用于單個數字,一個用于字符串,以及一個用于數據塊。您必須告訴Wire數據塊有多長時間。

步驟5:接收數據

主機可以使用

Wire.read()

從網絡獲取單個字節的數據,而不管是誰發送的。

Wire.read()是阻塞操作-您的Arduino在讀取一個字節之前不會做其他任何事情。如果沒有要讀取的字節,則可能要等待很長時間!為避免此問題,還有

Wire.available()

將返回等待讀取的字節數。

將兩者放在一起,

while(Wire.available()) {

char c = Wire.read();

// do something with c

// maybe count how much we received,

// do something when we get the whole message.

}

// do other stuff while we wait for the whole message.

第6步:請求/接收

您已經擁有運行I2C網絡所需的一切,但是我想讓您了解另外一項功能,這有點棘手,所以請忍受我。實際上,我會說這完全是不需要,但是我將其包括在內是為了徹底。也許表明有很多方法可以完成相同的工作,有些方法比其他方法更好。

您已經知道,在C代碼中,有諸如setup()和loop()之類的方法。您也可以創建自己的方法并按名稱調用它們。您是否知道可以將方法名稱作為參數發送給另一個方法?通常用于稱為回調的東西。在這種情況下,我們將告訴線庫(I2C)當從站從網絡接收數據時調用哪種方法。

// a master is calling and requesting something.

void requestEvent() {

// definitely send something back.

Wire.write(2); // one byte as an example.

}

// a master has sent something.

// Might not be requesting anything.

// Might not be all the data that was sent (yet)

void receiveEvent(int bytes) {

int i;

for(i=0;i char c = Wire.read();

// do something with c.

}

// maybe send something back

}

void setup() {

Wire.begin(1); // slave address = 1

Wire.onRequest(requestEvent);

Wire.onReceive(receiveEvent);

}

void loop() {

// do nothing!

}

此處的一些注意事項:

requestEvent()不會收到數字,說明主機期望多少字節。

據我所知,這些事件是中斷-無論loop()中發生了什么,它們都會盡快發生。如果時間和代碼正確,那么無論循環做什么,都可能會嚴重混亂。由于很難重新創建導致問題的條件,因此很難診斷出它為什么混亂。

因此,正如我所說的,盡管您可以使用這些工具,但我不建議您這樣做

第7步:雙向通信

現在讓我們將它們放在一起。

主代碼:

#include

#define TO_MASTER_SIZE 3

#define TO_SLAVE_SIZE 4

#define START_NODE 1 // The starting I2C address of slave nodes

#define END_NODE 2 // last node to probe +1

#define NODE_READ_DELAY 100 // Some delay between I2C node reads

byte messageToMaster[TO_MASTER_SIZE];

byte messageToSlave[TO_SLAVE_SIZE];

void setup() {

Serial.begin(9600);

Serial.println(“MASTER”);

Wire.begin(); // Activate I2C link

}

void loop() {

for (int address = START_NODE; address 《 END_NODE; address++) {

sendToSlave(address);

readFromSlave();

}

delay(NODE_READ_DELAY);

}

void sendToSlave(int address) {

// message is 0123

for(int i = 0; i 《 SEND_SIZE; i++) {

messageToSlave[i] = (byte)i;

}

Wire.beginTransmission(address);

Wire.write(messageToSlave, TO_SLAVE_SIZE);

Wire.endTransmission();

}

void readFromSlave() {

// if data size is available from nodes

if(Wire.available() == TO_MASTER_SIZE) {

for (int i = 0; i 《 TO_MASTER_SIZE; i++) {

messageToMaster[i] = Wire.read(); // get data

}

int fromAddress = messageToMaster[0];

int value = ((int)messageToMaster[1] 《《 8 ) | (int)messageToMaster[2];

Serial.print(“Slave ”);

Serial.print(fromAddress);

Serial.print(“ says ”);

Serial.print(value);

}

}

從站代碼:

#include

// Change this unique address for each I2C slave node

#define NODE_ADDRESS 1

// matches values on master side.

#define TO_MASER_SIZE 3

#define TO_SLAVE_SIZE 4

#define NODE_READ_DELAY 100

byte messageToMaster[TO_MASTER_SIZE];

byte nodeReceive[TO_SLAVE_SIZE];

void setup() {

Serial.begin(9600);

Serial.print(“SLAVE #”);

Serial.println(NODE_ADDRESS);

Wire.begin(NODE_ADDRESS); // Activate I2C network

}

void loop() {

delay(NODE_READ_DELAY);

if(Wire.avaialable() == TO_SLAVE_SIZE) {

readFromMaster();

sendToMaster();

}

}

void readFromMaster() {

for(int i = 0; i 《 TO_SLAVE_SIZE; i ++){

nodeReceive[i] = Wire.read();

}

Serial.print(“Master says ”);

for(int i = 0; i 《 TO_SLAVE_SIZE; i ++){

Serial.print(nodeReceive[i]);

}

Serial.println();

}

void sendToMaster() {

int x = analogRead(A0);

messageToMaster[0] = NODE_ADDRESS;

messageToMaster[1] = (x0》》8) & 0xff; // the top byte of x

messageToMaster[2] = (x0 ) & 0xff; // the bottom byte of x

Wire.write(messageToMaster,TO_MASTER_SIZE);

Serial.print(“Sensor value: ”);

Serial.println(x);

}

有趣的一點是,總線(網絡)上的任何人都可以收聽雙向通信。從理論上講,可以添加一個靜默設備,其唯一的工作就是監視網絡。

第8步:最終想法

單個I2C網絡可能有多個主機,但這是多余的棘手的問題–主機之間必須進行協商以避免彼此之間的交談,這會導致混亂。

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • aduino
    +關注

    關注

    0

    文章

    3

    瀏覽量

    3466
收藏 人收藏

    評論

    相關推薦

    基于I2C總線的智能家居應用

    隨著科技的飛速發展,智能家居系統已經成為現代生活的一重要組成部分。I2C(Inter-Integrated Circuit)總線是一種串行通信協議,廣泛應用于微控制器和各種傳感器之間
    的頭像 發表于 01-17 16:21 ?116次閱讀

    I2C總線與Arduino的接口示例

    基礎 I2C總線由條線組成:數據線(SDA)和時鐘線(SCL)。SDA用于傳輸數據,而SCL用于同步數據傳輸。I2C設備可以是主設備或從設備。主設備生成時鐘信號并啟動數據傳輸,從設備響應主設備的請求。 Arduino與
    的頭像 發表于 01-17 15:34 ?161次閱讀

    I2C總線的工作模式介紹

    根線組成:數據線(SDA)和時鐘線(SCL)。數據線負責傳輸數據,而時鐘線則用于同步數據傳輸。I2C總線是全雙工的,意味著數據可以在兩個方向上傳輸。它支持多個主設備和從設備,但在同一時刻只能有一
    的頭像 發表于 01-17 15:32 ?137次閱讀

    I2C總線應用實例分析

    I2C總線使用條線進行通信:數據線(SDA)和時鐘線(SCL)。這種雙線制設計使得I2C總線能夠在多個設備
    的頭像 發表于 01-17 15:09 ?161次閱讀

    I2C總線與SPI總線的比較

    在現代電子系統中,微控制器與各種外設之間通信是必不可少的。I2C和SPI是種流行的串行通信協議,它們各自具有獨特的特點和應用場景。
    的頭像 發表于 01-17 15:08 ?159次閱讀

    adc12d1800兩個通道采樣,Q正常,I異常,為什么?

    項目中一片adc12d1800,兩個通道采樣,Q正常,I異常。 異常的具體現象為:采集噪聲測試,從chipscope上觀察,DI與DID不重合,多次復位,
    發表于 12-26 06:01

    TPA6130A2如果不需要I2C功能,是否可以將I2C兩個引腳懸空?

    如果不需要I2C功能,是否可以將I2C兩個引腳懸空。 2.如果將I2C兩個引腳懸空,該IC是否
    發表于 11-01 08:16

    ad如何設置兩個元器件的距離

    之間應保持的最小距離,以確保電路板的電氣性能和制造過程的可靠性。以下是如何在AD中設置兩個元器件之間距離的步驟: 一、進入規則設置界面 打開AD軟件 :首先,確保你已經打開了Altium Designer軟件,并加載了需要
    的頭像 發表于 09-02 15:31 ?8334次閱讀

    簡單認識I2C通信協議

    I2C(Inter-Integrated Circuit)通信協議是由飛利浦公司(現為恩智浦半導體)開發的一種簡單、雙向二線制同步串行總線協議。自1982年發布以來,I2C協議因其高效、靈活和易于實現的特點,在電子設備間的數據交
    的頭像 發表于 07-25 18:06 ?1639次閱讀

    兩個ESP8266模塊之間如何進行TCP通信?

    嗨,我有兩個ESP8266模塊,我希望它們之間進行TCP通信。 我已經編寫了固件,將一 ESP 配置為 AccessPoint,另一
    發表于 07-12 06:26

    使用UDP廣播在兩個ESP8266之間進行通信,發送會存在延遲是怎么回事?

    我正在使用 UDP 廣播在兩個ESP8266 (wemos) 之間進行通信。 作為測試,我只是從第一設備發送 10 個字節,第二
    發表于 07-11 06:27

    兩個PLC之間如何交互信號

    在工業自動化系統中,PLC(Programmable Logic Controller,可編程邏輯控制器)是核心的控制設備。在許多復雜的應用場景中,需要兩個或多個PLC之間進行信號交互,以實現更高
    的頭像 發表于 06-14 16:57 ?4773次閱讀

    兩個銅片可以形成原電池嗎

    兩個銅片本身不能形成原電池,因為原電池的工作原理依賴于兩個不同電位的電極材料之間的氧化還原反應。
    的頭像 發表于 05-21 16:23 ?1113次閱讀

    I3C接口通信基礎

    I 2 CI3C之間顯著的變化是時鐘速度。I 2
    發表于 05-03 10:22 ?4029次閱讀
    <b class='flag-5'>I3C</b>接口<b class='flag-5'>通信</b>基礎

    arcgis中如何關聯兩個屬性表

    在ArcGIS中,關聯兩個屬性表是一重要的操作,可以通過此操作將兩個表中的數據關聯起來,以便進行分析和查詢。下面是詳細介紹如何在ArcGIS中實現屬性表的關聯。 首先,我們需要明確
    的頭像 發表于 02-25 11:01 ?4418次閱讀
    主站蜘蛛池模板: 欧美片内射欧美美美妇 | 少妇高潮惨叫久久久久久欧美 | 超碰97人人做人人爱亚洲尤物 | 久久精品电影久久电影大全 | 国产一级做a爰片久久毛片男 | 亚洲偷自拍精品视频在线观看 | 久久日本精品国产精品 | 暖暖 免费 高清 日本视频大全 | 欧美日韩北条麻妃一区二区 | 国产一区二区三区内射高清 | 星空无限传媒视频在线观看视频 | 亚洲AV久久无码精品热九九 | 一本到2v不卡区 | 99久久精品免费国产一区二区三区 | 蜜臀AV精品一区二区三区 | 伊人久久大香线蕉avapp下载 | 成人国内精品久久久久影院 | 甜性涩爱在线播放 | 亚洲偷偷自拍免费视频在线 | 男男gaygay拳头 | 99久久免热在线观看6 | 国产精品一区二区AV白丝在线 | 午夜阳光影院在线观看视频 | 伊人第一路线 | 果冻传媒2021精品影视 | 亚洲免费在线视频观看 | 校花爽好大快深点h | swag合集120部 | 亚洲视频中文字幕在线观看 | 99久久久无码国产精品AAA | 爽爽影院免费观看 | 一区二区三区福利视频 | 久久国内精品视频 | 果冻传媒在线观看高清完整免费 | 午夜一级免费视频 | 久久囯产精品777蜜桃传媒 | 97在线看视频福利免费 | 美女的jj| 亚洲成人中文 | 国产白色视频在线观看w | 在教室伦流澡到高潮H免费视频 |