我计划从旧的5V Arduino Nano到新的Arduino Nano 33 IoT。我已经编写了一个使用软件系列(SoftwareSerial.h)与Sim800L模块通信的5V Arduino Nano的功能代码。然而,当我将电路板更改为新的Arduino Nano 33 IoT时,无法找到软件串行库。
我试着在"Sketch“下的”包含库“菜单中找到它,但是这个库根本就不在那里。鉴于该产品是如此新,我没有发现任何有用的研究来帮助我这一点。我对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任何帮助都将不胜感激。
发布于 2019-08-18 05:33:27
Arduino Nano 33 IoT没有可用的IoT,因为它不是必需的。这个板提供更多:硬件串行口,可以分配给不同的引脚。
这个特性是由微控制器Atmel SAMD21G提供的,它被称为I/O多路复用(Atmel SAM D21E / SAM D21G / SAM D21J中的详细信息,第21页)。该微控制器提供了6个SERCOM,您可以分配(几乎)任何引脚。
Arduino Nano 33 IoT已经使用了一些SERCOM:
我们还有SERCOM0和SERCOM1。
引脚分配的详细信息在variant.cpp和variant.h文件中描述。由于Arduino是开源的,您可以很容易地在SAMD板的GitHub存储库上找到它们。
对于Arduino Nano 33 IoT,引脚分配的说明如下:
通过阅读variant.cpp,我们了解了引脚的分配,特别是SAMD (PAxx或PBxx)和Arduino引脚之间的联系。
SAMD引脚对于使连接与端口功能复用的Atmel SAM D21E / SAM D21G / SAM D21J非常重要。
SERCOM可以是经典的,也可以是替代的。在数据表中,经典在C列中,备用在列D中。例如:SERCOM0/PAD[3]也称为0.3。
备注:为RX定义了从0到3的pads,但TX仅在0和2上定义。当您选择要使用的引脚时,这是一个重要的考虑因素。
理论够多了,去找解决办法.
在Arduino Nano 33 的引脚5 (RX)和6 (TX)上添加一个IoT硬件系列:
#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 的引脚13 (RX)和8 (TX)上添加一个IoT硬件系列:
#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...
}发布于 2019-12-17 12:47:32
我对正式的Arduino Github项目提出了同样的问题,Martino Facchin给了我解决方案:
UART mySerial(digitalPinToPinName(4), digitalPinToPinName(3), NC, NC);注意:"Uart mySerial“应该用大写字母"UART mySerial”编写,否则编译器将找不到lib。
更多关于解决方案和核心修改的信息:https://github.com/arduino/ArduinoCore-nRF528x-mbedos/issues/38
https://stackoverflow.com/questions/57175348
复制相似问题