【问题标题】:Arduino to Arduino communication via SoftwareSerial通过 SoftwareSerial 进行 Arduino 到 Arduino 通信
【发布时间】:2020-06-26 10:53:47
【问题描述】:

我有两个 Arduino Leonardo。 这两个 Arduino 板可以通过 SoftwareSerial 库相互通信吗? (不是Serial1,谢谢)

【问题讨论】:

  • 答案很可能是肯定的。这是你问的还是你会改进你的问题?
  • 如果你在谷歌上问过这个问题,他肯定会说是的。

标签: arduino


【解决方案1】:

是的,您可以使用数字引脚来做到这一点。只需将两个 Tx 连接到 Rx

【讨论】:

    【解决方案2】:

    是的,您可以在每个 Arduino 上使用任何备用数字引脚

    【讨论】:

      【解决方案3】:

      是的,当然。您可以使用所有 PWN 引脚,3、5、6、10、11、13。

      【讨论】:

        【解决方案4】:

        是的,但您必须始终考虑到 Arduino 是基于 microcrontroler,而不是 微处理器,因此当您对其进行编程时,您应该忘记多任务处理,每一种多任务处理尝试都会出现出现意外行为(减速接近卡住)。
        在这种情况下,软件串行通信会根据接收到的数据量减慢程序执行速度,并且在硬件串行通信过程中会完全卡住。
        为了解决这个问题,您应该在代码中使用“一次一件事”的方法。
        我希望它有所帮助,不要害怕。

        【讨论】:

          【解决方案5】:

          在 Arduino IDE 中的软件序列下有一个示例,说明了如何使用它。它说使用数字引脚 3 和 4 而不是硬件串行引脚 0 和 1。草图不断读取软件串行并将它读取的任何内容打印到串行监视器。

          修改此代码以在第二个 Arduino 上运行以不断写入软件串行并不需要太多。

          【讨论】:

            【解决方案6】:

            是的!只需使用 arduino 的 TX 和 RX 引脚。将接收端的TX、RX引脚分别连接到发送端的RX、TX。

            【讨论】:

              【解决方案7】:

              当然,只要确保划掉 RX 和 TX:

              RX1 -> TX2

              RX2 -> TX1

              【讨论】:

                【解决方案8】:

                您可以使用任何数字引脚作为软件串行,如果我不起作用,请使用引脚 10、11 作为软件串行。

                【讨论】:

                  【解决方案9】:

                  您可以使用SerialTransfer.h 自动打包和解析您的数据,以便在 Arduino 间进行通信,而无需担心。该库可通过 Arduino IDE 安装,并包含许多示例。

                  以下是库的功能:

                  这个库:

                  • 可以通过 Arduino IDE 的库管理器下载(搜索“SerialTransfer.h”)
                  • 适用于“软件串行”库
                  • 是非阻塞的
                  • 使用数据包分隔符
                  • 使用一致的开销字节填充
                  • 使用 CRC-8(带有查找表的多项式 0x9B)
                  • 允许使用动态大小的数据包(数据包的有效负载长度可以从 1 到 255 个字节)
                  • 可以传输字节、整数、浮点数,甚至结构!!

                  TX Arduino 草图示例:

                  #include "SerialTransfer.h"
                  
                  SerialTransfer myTransfer;
                  
                  void setup()
                  {
                    Serial.begin(115200);
                    Serial1.begin(115200);
                    myTransfer.begin(Serial1);
                  }
                  
                  void loop()
                  {
                    myTransfer.txBuff[0] = 'h';
                    myTransfer.txBuff[1] = 'i';
                    myTransfer.txBuff[2] = '\n';
                  
                    myTransfer.sendData(3);
                    delay(100);
                  }
                  

                  RX Arduino 草图示例:

                  #include "SerialTransfer.h"
                  
                  SerialTransfer myTransfer;
                  
                  void setup()
                  {
                    Serial.begin(115200);
                    Serial1.begin(115200);
                    myTransfer.begin(Serial1);
                  }
                  
                  void loop()
                  {
                    if(myTransfer.available())
                    {
                      Serial.println("New Data");
                      for(byte i = 0; i < myTransfer.bytesRead; i++)
                        Serial.write(myTransfer.rxBuff[i]);
                      Serial.println();
                    }
                    else if(myTransfer.status < 0)
                    {
                      Serial.print("ERROR: ");
                      Serial.println(myTransfer.status);
                    }
                  }
                  

                  【讨论】:

                    【解决方案10】:

                    是的,您可以使用 pwm 引脚进行通信。建议不要使用 0,1 进行串行通信,因为它们用于使用 USB 端口将草图上传到 Arduino。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多