我正计划从旧的5V Arduino Nano迁移到新的Arduino Nano 33 IoT。我已经使用软件串行(SoftwareSerial.h)为旧的5V Arduino Nano编写了功能代码,以与Sim800L模块通信。但是,当我将开发板更改为新的Arduino Nano 33 IoT时,找不到软件串行库。

我尝试在“素描”下的“包含库”菜单中找到它,但是该库根本不存在。鉴于该产品太新了,我还没有找到任何有用的研究来帮助我解决这个问题。 EEPROM库有相同的问题。

#include <SoftwareSerial.h>
#include <EEPROM.h>

有谁知道如何为新的Nano 33 IoT板包含SoftwareSerial.h和EEPROM.h库,也许知道用于该新板的新库?

以下是编译时收到的错误消息:
Sim800L_V7.1:3:12: error: SoftwareSerial.h: No such file or directory

   #include <SoftwareSerial.h>

            ^~~~~~~~~~~~~~~~~~

compilation terminated.

exit status 1
SoftwareSerial.h: No such file or directory

任何帮助将不胜感激
谢谢

最佳答案

Arduino Nano 33 IoT没有可用的SoftwareSerial.h,因为它不是必需的。该板提供了更多功能:可以分配给不同引脚的硬件串行。

该功能由微 Controller Atmel SAMD21G提供,称为I / O复用(详细信息请参见the data sheet Atmel SAM D21E / SAM D21G / SAM D21J第21页)。该微 Controller 提供6个SERCOM,您可以将其分配给(几乎)任何引脚。

某些SERCOM已被Arduino Nano 33 IoT使用:

SPI NINA的

  • SERCOM2
  • SERCOM3用于MOSI / MISO
  • 用于I2C总线的SERCOM4
  • SERCOM5用于串行调试(USB)

  • 我们仍然有SERCOM0和SERCOM1。

    引脚分配的详细信息在variant.cppvariant.h文件中进行了描述。由于Arduino是开源的,因此您可以在the GitHub repository for SAMD boards上轻松找到它们。

    对于Arduino Nano 33 IoT,引脚分配在以下内容中进行了描述:
  • variants/nano_33_iot/variant.cpp
  • variants/nano_33_iot/variant.h

  • 通过阅读variant.cpp,我们了解了引脚分配,尤其是SAMD引脚(PAxx或PBxx)与Arduino引脚之间的链接。

    SAMD引脚对于与the data sheet Atmel SAM D21E / SAM D21G / SAM D21J的PORT功能复用建立链接很重要。

    SERCOM可以是经典的,也可以是备用的。在数据表中,经典字体在C列中,备用字体在D列中。SERCOM由其索引和焊盘定义。例如:SERCOM0/PAD[3]也称为0.3

    备注:的垫由0至3所定义的RX,但TX只被定义在0和2这是一个重要的考虑因素,当你选择引脚使用。

    For reference, see the table I used to select the SERCOM to assign.

    理论足够,请寻求解决方案...

    在Arduino Nano 33 IoT的引脚5(RX)和6(TX)上添加一个硬件序列:
    #include <Arduino.h>
    #include "wiring_private.h"
    
    Uart mySerial (&sercom0, 5, 6, SERCOM_RX_PAD_1, UART_TX_PAD_0);
    
    // Attach the interrupt handler to the SERCOM
    void SERCOM0_Handler()
    {
        mySerial.IrqHandler();
    }
    
    void setup() {
      // Reassign pins 5 and 6 to SERCOM alt
      pinPeripheral(5, PIO_SERCOM_ALT);
      pinPeripheral(6, PIO_SERCOM_ALT);
    
      // Start my new hardware serial
      mySerial.begin(9600);
    }
    
    void loop() {
      // Do something with mySerial...
    }
    

    另一个示例,在Arduino Nano 33 IoT的引脚13(RX)和8(TX)
    上添加一个硬件序列:
    #include <Arduino.h>
    #include "wiring_private.h"
    
    Uart mySerial (&sercom1, 13, 8, SERCOM_RX_PAD_1, UART_TX_PAD_2);
    
    // Attach the interrupt handler to the SERCOM
    void SERCOM1_Handler()
    {
        mySerial.IrqHandler();
    }
    
    void setup() {
      // Reassign pins 13 and 8 to SERCOM (not alt this time)
      pinPeripheral(13, PIO_SERCOM);
      pinPeripheral(8, PIO_SERCOM);
    
      // Start my new hardware serial
      mySerial.begin(9600);
    }
    
    void loop() {
      // Do something with mySerial...
    }
    

    关于c++ - 适用于Arduino Nano 33 IoT的软件串行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57175348/

    10-13 07:03