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

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

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

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

454398 ? 來(lái)源:工程師吳畏 ? 2019-07-26 14:37 ? 次閱讀

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

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

在本文中,我們將使用長(zhǎng)電纜和RS-485接口連接兩個(gè)Arduino電路板。

什么是RS-485?

RS-485是一個(gè)串行接口,是RS232的前身。這個(gè)模塊因?yàn)樵赗S232接口上運(yùn)行的舊計(jì)算機(jī)的COM端口而聲名鵲起。

RS-485模塊。

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

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

所需的硬件

2 x Arduino

2 x RS-485模塊

面包板

部分電線

所有必需的硬件。

使用RS-485連接兩個(gè)Arduinos的原理圖

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

項(xiàng)目原理圖。

長(zhǎng)度為幾米的電纜連接。

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

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

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

讓我們編寫兩個(gè)程序。每隔500毫秒播放一次“ping”文本。另一個(gè)將收聽(tīng)廣播,并在收到文本“ping”時(shí),閃爍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;

}

}

}

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

的 結(jié)論

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

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

    關(guān)注

    4

    文章

    555

    瀏覽量

    35165
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6453

    瀏覽量

    185937
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    如何使用SPIUART連接兩個(gè)ESP模塊?

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

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

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

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

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

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

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

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

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

    兩個(gè)PLC之間如何交互信號(hào)

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

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

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

    CYW4373E是否支持BLE長(zhǎng)距離LE編碼的PHY?

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

    串行通信和以太網(wǎng)通信,該怎么選才好?

    )的數(shù)據(jù)傳輸方式。什么是串行通信?串行通信是通過(guò)信道計(jì)算機(jī)總線將數(shù)據(jù)按照順序一位一位的發(fā)送數(shù)據(jù)的通信
    的頭像 發(fā)表于 12-22 08:20 ?863次閱讀
    <b class='flag-5'>串行</b><b class='flag-5'>通信</b>和以太網(wǎng)<b class='flag-5'>通信</b>,該怎么選才好?

    兩個(gè)單片機(jī)之間串口通信的例程

    今天來(lái)分享一下兩個(gè)單片機(jī)之間串口通信的例程吧!仿真文件的話,只要添加兩個(gè)單片機(jī)就OK了。那么如果想用手里的單片機(jī)來(lái)實(shí)現(xiàn)的話,不妨接收端用電腦來(lái)接收吧。下面就來(lái)看一下今天的例程吧!
    的頭像 發(fā)表于 11-09 10:05 ?5317次閱讀
    <b class='flag-5'>兩個(gè)</b>單片機(jī)<b class='flag-5'>之間</b>串口<b class='flag-5'>通信</b>的例程

    PCB設(shè)計(jì)安規(guī)丨電氣間隙與爬電距離要點(diǎn)

    PCB設(shè)計(jì)中,爬電距離和電氣間隙是兩個(gè)非常重要的安規(guī)要求。它們都涉及到PCB上元件之間的安全距離,以確保
    的頭像 發(fā)表于 11-03 11:19 ?1735次閱讀
    PCB設(shè)計(jì)安規(guī)丨電氣間隙與爬電<b class='flag-5'>距離</b>要點(diǎn)

    ch340怎么實(shí)現(xiàn)兩個(gè)單片機(jī)之間的io口通信?

    使用ch340,怎么實(shí)現(xiàn)兩個(gè)單片機(jī)之間的io口通信
    發(fā)表于 11-03 06:33

    兩個(gè)51單片機(jī)之間能實(shí)現(xiàn)藍(lán)牙通信嗎?

    兩個(gè)51單片機(jī)之間能實(shí)現(xiàn)藍(lán)牙通信?
    發(fā)表于 10-28 07:48

    2個(gè)esp8266 WiFi模塊之間的相互通信

    本教程是關(guān)于2個(gè)esp8266 WiFi模塊之間的相互通信。我將解釋方法和代碼兩個(gè)esp8266模塊之間的相互
    發(fā)表于 09-25 08:29