0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样在两个或更多Arduino板之间创建长距离串行通信

454398 来源:工程师吴畏 2019-07-26 14:37 次阅读

我们知道Arduino有几条用于快速数据传输的内置总线。例如,显示器通常使用SPI总线。通常通过I2C总线连接各种传感器。还有流行的UART,它通常与USB接口一起使用以与计算机交换数据。但所有这些方法都有一个严重的缺点:它们不能在远距离工作。

想象一下我们需要从房屋顶部的传感器收集数据的情况,并且取决于传感器证词,在我们的地下室切换继电器。我们怎样才能成功呢?我们肯定需要一个强大的抗噪声接口 - 可以使用多年的接口。 RS-485模块可以顺利完成这项工作。

在本文中,我们将使用长电缆和RS-485接口连接两个Arduino电路板。

什么是RS-485?

RS-485是一个串行接口,是RS232的前身。这个模块因为在RS232接口上运行的旧计算机的COM端口而声名鹊起。

RS-485模块。

RS-485模块的最大范围是1200米,这意味着我们可以将信号扩展到1.2km。如果线路上有特殊放大器,它可以进一步扩展。这种长导线的传输速度约为60 kb/s,这是传输传感器数据的相对较好的速度。

RS-485电缆使用双绞线。该电缆仍用于以太网线路,使其易于使用。要在距离超过500米的地方传输数据,您需要一根屏蔽双绞线。 32个设备可以连接到一根电缆,但同时只有一个设备可以传输数据。

所需的硬件

2 x Arduino

2 x RS-485模块

面包板

部分电线

所有必需的硬件。

使用RS-485连接两个Arduinos的原理图

为了通过RS-485接口连接两个Arduino板,我们需要一个特殊的模块。通常,此类模块使用流行的MAX485芯片

项目原理图。

长度为几米的电缆连接。

注意:在上图中,电线A和B是直的。如果距离很小,这就足够了。如果电缆连接长度为几米,则必须使用双绞线!

RS-485的接收器和发送器程序

正如我们已经注意到的,如果有多个设备连接到该线路,则一次只能有一个设备传输数据。我们需要以某种方式通知所有其他设备我们已准备好传输,并且它们必须保持沉默并倾听。这可以在联系人 DE 和 RE 的帮助下完成。

让我们编写两个程序。每隔500毫秒播放一次“ping”文本。另一个将收听广播,并在收到文本“ping”时,闪烁LED#13。

发射器程序

#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将在第二块板上开始闪烁。

的 结论

RS-485自90年代后期开始应用于各种工业系统中,这些系统需要在存在电磁干扰的情况下长距离传输数据。通常,RS-485接口与专用协议一起使用,例如ModBus或DMX512。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串行通信
    +关注

    关注

    4

    文章

    569

    浏览量

    35386
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186910
收藏 人收藏

    评论

    相关推荐

    如何使用Arduino实现CAN总线通信

    CAN总线(Controller Area Network)是一种多主控制的串行通信协议,广泛应用于汽车电子、工业自动化等领域。它以其高可靠性、实时性和灵活性而受到青睐。Arduino作为一
    的头像 发表于 11-12 10:09 685次阅读

    ad如何设置两个元器件的距离

    Altium Designer(简称AD)中设置两个元器件之间距离,主要是通过设置元器件间的安全间距(Clearance)规则来实现的。这个规则定义了元器件
    的头像 发表于 09-02 15:31 6351次阅读

    如何使用SPIUART连接两个ESP模块?

    /metalphreak/esp8266_spi_driver. 但是谁能建议我,我如何使用SPI与两个ESP模块进行通信。 我怎样才能将一ESP设为主服务器,另一
    发表于 07-19 16:08

    为什么无法nodemcu和arduino mega之间交换数据?

    您好,我正在尝试通过 UART arduino mega 和 nodemcu 之间交换数据(使用 arduino IDE 对者进行编程
    发表于 07-19 12:15

    如何使用AT SAVETRANSLINK命令两个设备(2 esp-07)之间创建桥接?

    如何使用 AT SAVETRANSLINK 命令两个设备(2 esp-07)之间创建透明桥接?还是到目前为止是不可能的?
    发表于 07-17 06:53

    两个ESP8266模块之间如何进行TCP通信

    嗨,我有两个ESP8266模块,我希望它们之间进行TCP通信。 我已经编写了固件,将一 ESP 配置为 AccessPoint,另一
    发表于 07-12 06:26

    使用UDP广播两个ESP8266之间进行通信,发送会存在延迟是怎么回事?

    我正在使用 UDP 广播两个ESP8266 (wemos) 之间进行通信。 作为测试,我只是从第一设备发送 10 个字节,第二
    发表于 07-11 06:27

    如何使用freeRTOS两个任务之间传输任务数据?

    /温度。 我想创建 CSV 文件来记录一段时间内的数据。 我创建 I2C 任务的方法与示例中的 emFIlesystem 任务相同。 者都在运行,做着它们应该做的事情,但我觉得它
    发表于 07-03 07:55

    两个PLC之间如何交互信号

    工业自动化系统中,PLC(Programmable Logic Controller,可编程逻辑控制器)是核心的控制设备。许多复杂的应用场景中,需要两个多个PLC
    的头像 发表于 06-14 16:57 4192次阅读

    两个铜片可以形成原电池吗

    两个铜片本身不能形成原电池,因为原电池的工作原理依赖于两个不同电位的电极材料之间的氧化还原反应。
    的头像 发表于 05-21 16:23 926次阅读

    想搞懂通信协议?先来看一篇SPI热热身

    用于短距离通信,因为它不支持长距离传输。SPI接口的特点包括:全双工通信:SPI允许数据同时两个
    的头像 发表于 05-12 08:10 1676次阅读
    想搞懂<b class='flag-5'>通信</b>协议?先来看一篇SPI热热身

    CAN总线的传输距离与采样点、传输时延之间的关系,你弄明白了吗?

    CAN总线的最大传输距离与波特率、采样点、传输时延之间存在什么样的关系呢?如何理论计算出最大传输距离呢?本文将详细解答这两个问题。延时原理分析影响CAN
    的头像 发表于 03-06 08:23 930次阅读
    CAN总线的传输<b class='flag-5'>距离</b>与采样点、传输时延<b class='flag-5'>之间</b>的关系,你弄明白了吗?

    CYW4373E是否支持BLE长距离LE编码的PHY?

    你好,CYW4373E 是否支持 BLE 长距离 LE 编码的 PHY?
    发表于 02-29 06:34

    变频器长距离供电时末端电压会升高还是降低?

    变频器长距离电缆传输时,由于长距离电缆对地的电容效应,会造成充放电效应因而造成过流,这是因为电缆对地耦合电容较大时,变频器的输出电流会有很大的充放电电流吗?加装输出电抗用以补偿对地容性,这个还能
    发表于 01-11 18:50

    串行通信和以太网通信,该怎么选才好?

    )的数据传输方式。什么是串行通信串行通信是通过信道计算机总线将数据按照顺序一位一位的发送数据的通信
    的头像 发表于 12-22 08:20 1100次阅读
    <b class='flag-5'>串行</b><b class='flag-5'>通信</b>和以太网<b class='flag-5'>通信</b>,该怎么选才好?