适用于Arduino Nano 33 IoT的软件系列

2022-02-22 00:00:00 arduino c++ arduino-c++

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

我尝试在"Sketch"下的"Include Library"菜单中找到它,但库就是不在那里。考虑到这个产品是如此新,我还没有找到任何有用的研究来帮助我做这件事。我的EEPROM库也有同样的问题。

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

有没有人知道如何将SoftwareSerial.h和EEPROM.h库包含到新的Nano 33 IoT电路板中,或者是否知道用于新电路板的新库?

以下是我在编译时收到的错误信息:

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

如有任何帮助,我们将不胜感激 谢谢


解决方案

没有SoftwareSerial.h可用于Arduino Nano 33 IoT,因为它不是必需的。此主板提供更多功能:可分配给不同引脚的硬件系列。

此功能由微控制器Atmel SAMD21G提供,称为I/O多路复用(详情请参见the data sheet Atmel SAM D21E / SAM D21G / SAM D21J第21页)。微控制器提供6个Sercom,您可以将其分配给(几乎)任何引脚。

Arduino Nano 33 IoT已经使用了一些Sercom:

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

我们还有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的端口功能复用非常重要。

Sercom可以是传统或备用。在数据表中,经典位于C列,备用位于D列。Sercom由其索引和焊盘定义。例如:SERCOM0/PAD[3]也称为0.3

备注:RX的焊盘定义为0到3,但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...
}

相关文章