0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣在兩個或更多Arduino板之間創(chuàng)建長距離串行通信

454398 ? 來源:工程師吳畏 ? 2019-07-26 14:37 ? 次閱讀

我們知道Arduino有幾條用于快速數(shù)據(jù)傳輸?shù)膬?nèi)置總線。例如,顯示器通常使用SPI總線。通常通過I2C總線連接各種傳感器。還有流行的UART,它通常與USB接口一起使用以與計算機(jī)交換數(shù)據(jù)。但所有這些方法都有一個嚴(yán)重的缺點:它們不能在遠(yuǎn)距離工作。

想象一下我們需要從房屋頂部的傳感器收集數(shù)據(jù)的情況,并且取決于傳感器證詞,在我們的地下室切換繼電器。我們怎樣才能成功呢?我們肯定需要一個強(qiáng)大的抗噪聲接口 - 可以使用多年的接口。 RS-485模塊可以順利完成這項工作。

在本文中,我們將使用長電纜和RS-485接口連接兩個Arduino電路板。

什么是RS-485?

RS-485是一個串行接口,是RS232的前身。這個模塊因為在RS232接口上運行的舊計算機(jī)的COM端口而聲名鵲起。

RS-485模塊。

RS-485模塊的最大范圍是1200米,這意味著我們可以將信號擴(kuò)展到1.2km。如果線路上有特殊放大器,它可以進(jìn)一步擴(kuò)展。這種長導(dǎo)線的傳輸速度約為60 kb/s,這是傳輸傳感器數(shù)據(jù)的相對較好的速度。

RS-485電纜使用雙絞線。該電纜仍用于以太網(wǎng)線路,使其易于使用。要在距離超過500米的地方傳輸數(shù)據(jù),您需要一根屏蔽雙絞線。 32個設(shè)備可以連接到一根電纜,但同時只有一個設(shè)備可以傳輸數(shù)據(jù)。

所需的硬件

2 x Arduino

2 x RS-485模塊

面包板

部分電線

所有必需的硬件。

使用RS-485連接兩個Arduinos的原理圖

為了通過RS-485接口連接兩個Arduino板,我們需要一個特殊的模塊。通常,此類模塊使用流行的MAX485芯片。

項目原理圖。

長度為幾米的電纜連接。

注意:在上圖中,電線A和B是直的。如果距離很小,這就足夠了。如果電纜連接長度為幾米,則必須使用雙絞線!

RS-485的接收器和發(fā)送器程序

正如我們已經(jīng)注意到的,如果有多個設(shè)備連接到該線路,則一次只能有一個設(shè)備傳輸數(shù)據(jù)。我們需要以某種方式通知所有其他設(shè)備我們已準(zhǔn)備好傳輸,并且它們必須保持沉默并傾聽。這可以在聯(lián)系人 DE 和 RE 的幫助下完成。

讓我們編寫兩個程序。每隔500毫秒播放一次“ping”文本。另一個將收聽廣播,并在收到文本“ping”時,閃爍LED#13。

發(fā)射器程序

#define SerialTxControl 2 // contact # 2 will switch receiver / transmitter mode

#define RS485Transmit HIGH

#define RS485Receive LOW

void setup (void) {

Serial.begin (9600); // set the serial port to 9600baud speed

pinMode (SerialTxControl, OUTPUT);

digitalWrite (SerialTxControl, RS485Transmit); // put the device into transmitter mode

}

void loop (void) {

Serial.print (“ping”); // send text

delay (500);

}

接收方程序

#define SerialTxControl 2

#define RS485Transmit HIGH

#define RS485Receive LOW

char buffer [100];

byte state = 0;

void setup (void) {

Serial.begin (9600);

pinMode (13, OUTPUT);

pinMode (SerialTxControl, OUTPUT);

digitalWrite (SerialTxControl, RS485Receive); // put the device into receiver mode

}

void loop (void) {

int i = 0;

if (Serial.available ()) {// if any data came to the port

delay (5); // wait a bit for the entire data packet to be accepted by the port

while (Serial.available ()) {

buffer [i ++] = Serial.read (); // read data and write it to the buffer

}

}

if (i》 0) {// if there is something in the buffer

buffer [i ++] = ‘ 0’; // convert the buffer contents to a string by adding a null character

if (strcmp (buffer, “ping”)) {// if the accepted string is equal to the ping text

digitalWrite (13, state); // blink LED

state =! state;

}

}

}

將這兩個程序加載到每個Arduino板上。如果一切正確組裝并連接到電源,連接到引腳13的LED將在第二塊板上開始閃爍。

的 結(jié)論

RS-485自90年代后期開始應(yīng)用于各種工業(yè)系統(tǒng)中,這些系統(tǒng)需要在存在電磁干擾的情況下長距離傳輸數(shù)據(jù)。通常,RS-485接口與專用協(xié)議一起使用,例如ModBus或DMX512。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 串行通信
    +關(guān)注

    關(guān)注

    4

    文章

    580

    瀏覽量

    35628
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    188114
收藏 人收藏

    評論

    相關(guān)推薦

    RS-485和RS-232長距離電纜傳輸解決方案

    ? ? ? 工業(yè)自動化和監(jiān)控系統(tǒng)中,數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性至關(guān)重要。RS-485和RS-232作為種常見的串口通信標(biāo)準(zhǔn),各自具有獨特的優(yōu)勢和局限性。特別是
    的頭像 發(fā)表于 01-21 17:17 ?193次閱讀
    RS-485和RS-232<b class='flag-5'>長距離</b>電纜傳輸解決方案

    兩個不同頻率晶振靠的近會怎樣

    晶振的振蕩本質(zhì)上是一種機(jī)械振動(壓電晶體層面)。當(dāng)兩個晶振靠得很近時,它們的機(jī)械振動可能會相互影響。一晶振的振動可能會通過電路或者外殼等介質(zhì)傳遞給另一
    的頭像 發(fā)表于 01-20 13:55 ?1090次閱讀
    <b class='flag-5'>兩個</b>不同頻率晶振靠的近會<b class='flag-5'>怎樣</b>

    差分信號與串行通信的關(guān)系 差分信號接收器的工作原理

    數(shù)據(jù)傳輸方式,它將數(shù)據(jù)按位順序逐個傳輸。串行通信中,差分信號被用來提高信號的抗干擾能力和傳輸距離。差分信號通過比較兩個信號
    的頭像 發(fā)表于 12-26 09:22 ?428次閱讀

    如何使用Arduino實現(xiàn)CAN總線通信

    的硬件模塊實現(xiàn)CAN總線通信。 硬件需求 Arduino :任何支持Arduino IDE的板子都可以,例如Arduino Uno、Meg
    的頭像 發(fā)表于 12-23 09:06 ?624次閱讀

    如何使用Arduino實現(xiàn)CAN總線通信

    CAN總線(Controller Area Network)是一種多主控制的串行通信協(xié)議,廣泛應(yīng)用于汽車電子、工業(yè)自動化等領(lǐng)域。它以其高可靠性、實時性和靈活性而受到青睞。Arduino作為一
    的頭像 發(fā)表于 11-12 10:09 ?1454次閱讀

    ad如何設(shè)置兩個元器件的距離

    Altium Designer(簡稱AD)中設(shè)置兩個元器件之間距離,主要是通過設(shè)置元器件間的安全間距(Clearance)規(guī)則來實現(xiàn)的。這個規(guī)則定義了元器件
    的頭像 發(fā)表于 09-02 15:31 ?9065次閱讀

    如何使用SPIUART連接兩個ESP模塊?

    /metalphreak/esp8266_spi_driver. 但是誰能建議我,我如何使用SPI與兩個ESP模塊進(jìn)行通信。 我怎樣才能將一ESP設(shè)為主服務(wù)器,另一
    發(fā)表于 07-19 16:08

    如何使用AT SAVETRANSLINK命令兩個設(shè)備(2 esp-07)之間創(chuàng)建橋接?

    如何使用 AT SAVETRANSLINK 命令兩個設(shè)備(2 esp-07)之間創(chuàng)建透明橋接?還是到目前為止是不可能的?
    發(fā)表于 07-17 06:53

    兩個ESP8266模塊之間如何進(jìn)行TCP通信?

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

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

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

    如何使用freeRTOS兩個任務(wù)之間傳輸任務(wù)數(shù)據(jù)?

    /溫度。 我想創(chuàng)建 CSV 文件來記錄一段時間內(nèi)的數(shù)據(jù)。 我創(chuàng)建 I2C 任務(wù)的方法與示例中的 emFIlesystem 任務(wù)相同。 者都在運行,做著它們應(yīng)該做的事情,但我覺得它
    發(fā)表于 07-03 07:55

    兩個PLC之間如何交互信號

    工業(yè)自動化系統(tǒng)中,PLC(Programmable Logic Controller,可編程邏輯控制器)是核心的控制設(shè)備。許多復(fù)雜的應(yīng)用場景中,需要兩個多個PLC
    的頭像 發(fā)表于 06-14 16:57 ?5007次閱讀

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

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

    CAN總線的傳輸距離與采樣點、傳輸時延之間的關(guān)系,你弄明白了嗎?

    CAN總線的最大傳輸距離與波特率、采樣點、傳輸時延之間存在什么樣的關(guān)系呢?如何理論計算出最大傳輸距離呢?本文將詳細(xì)解答這兩個問題。延時原理分析影響CAN
    的頭像 發(fā)表于 03-06 08:23 ?1089次閱讀
    CAN總線的傳輸<b class='flag-5'>距離</b>與采樣點、傳輸時延<b class='flag-5'>之間</b>的關(guān)系,你弄明白了嗎?

    CYW4373E是否支持BLE長距離LE編碼的PHY?

    你好,CYW4373E 是否支持 BLE 長距離 LE 編碼的 PHY?
    發(fā)表于 02-29 06:34

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品