前言

最近参加了一个followme的活动,活动的任务是ardunio rp2024 connect的板子,主要完成三个任务:

  1. 搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!;

  2. 学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据;

  3. 学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。

image-20241115163958320

纯新手,朋友介绍过来玩的硬件。啥也不会,一边学一边玩吧。

干啥第一件事肯定就是搭环境。

先去ardunio的官网,找安装包,安装ardunio的ide。

image-20241119164041020

现在板子到日本了,估计过两天就到了。

image-20241115170520745

今天终于到了。开箱!!!

IMG_7019 IMG_7020 IMG_7022

由于手头没有mirco的线,先用这个转换头看看。


尝试

1.配置开发环境

  • 安装ardunio2.3.3 IDE

  • 安装板包

    搜索开发板的名字 arduino nano rp2040 connect

image-20241119170555726

2.点灯

image-20241119171504358

在上述的情况下已经完成安装的操作,我们的板子在连接的时候就一直闪烁。表现为一个红灯间接闪烁,一个灯变色间接闪烁,一个绿灯常亮。

IMG_7024


下面开始点灯的操作

image-20241119172019132

选择Blink,然后点击上传按钮

image-20241119172347916

我们可以看到,板子的灯也变了

IMG_7027

恭喜你完成了点灯的操作!!!😘

任务一:搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!;

1.查看官方的引脚图

image-20241119192609010

可以看到我们刚才点灯调用的是LED_BUILTIN的引脚。找到我们本次任务的采用的RGBLED的引脚。

image-20241119192825570


因为之前没搞过硬件不太懂,想当然的认为这里的引脚是RGB LED

image-20241119193050448

一片红灯,我得试试是不是刚才引脚图里面的LEDR/LEDG/LEDB。

image-20241119193251279

得偿所愿,也是一排红灯。但是有提示,提示这个pin脚在WIFININA的库里面才能使用。我又去官网找到开发文档,相见恨晚!!


image-20241119193748581

内置的LED。得调库才行。早点发现开发文档就好了。

2.安装WIFININA库

好了开始装库WIFININA。

image-20241119194537477

3.成功点亮

image-20241119195814100

运行成功。代码如下:

#include <WiFiNINA.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(LEDR,OUTPUT);
pinMode(LEDG,OUTPUT);
pinMode(LEDB,OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
//串口打印
Serial.println("Hello DigiKey & EEWorld!");

//亮红灯
digitalWrite(LEDR, HIGH);
delay(1000);
digitalWrite(LEDR, LOW);
delay(1000);

//亮绿灯
digitalWrite(LEDG, HIGH);
delay(1000);
digitalWrite(LEDG, LOW);
delay(1000);

//亮蓝灯
digitalWrite(LEDB, HIGH);
delay(1000);
digitalWrite(LEDB, LOW);
delay(1000);
}

IMG_7028

IMG_7029

IMG_7030

任务一完成

任务二:学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据

要学习 IMU (惯性测量单元) 的基础知识,并通过 Arduino IDE 调试 IMU 传感器以通过串口打印六轴原始数据,可以按照以下步骤操作:


1. 什么是 IMU?

IMU 是一种集成传感器模块,通常包含以下传感器:

  • **加速度计 (Accelerometer)**:用于测量线性加速度 (单位:g)。
  • **陀螺仪 (Gyroscope)**:用于测量角速度 (单位:°/s 或 rad/s)。

有些 IMU 还包含磁力计 (Compass) 和温度计,但基础的六轴 IMU 只包含加速度计和陀螺仪。

查阅官方文档可知,Arduino Nano RP2040 Connect 板载 IMU 是 LSM6DSOX,它是一个六轴传感器:

  • **加速度计 (Accelerometer)**:测量线性加速度 (单位:m/s²)。

  • **陀螺仪 (Gyroscope)**:测量角速度 (单位:°/s)。

2.安装Arduino_LSM6DSOX库

image-20241119201744973

新建一个开始新的任务。

image-20241119202208888

根据官方文档的函数,我们可以得到如下代码:

#include <Arduino_LSM6DSOX.h> // 引入 LSM6DSOX 库
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// 初始化 IMU
if (!IMU.begin()) {
Serial.println("无法检测到 LSM6DSOX 传感器!");
while (1); // 停止运行
}
Serial.println("LSM6DSOX 初始化成功!");
}

void loop() {
// put your main code here, to run repeatedly:

// 检测加速度和陀螺仪是否可用
if (IMU.accelerationAvailable() && IMU.gyroscopeAvailable()) {
// 读取加速度数据 (单位:m/s²)
IMU.readAcceleration(Ax, Ay, Az);

// 读取陀螺仪数据 (单位:°/s)
IMU.readGyroscope(Gx, Gy, Gz);

// 打印加速度数据
Serial.print("加速度 (m/s²): ");
Serial.print("X = ");
Serial.print(Ax);
Serial.print(", Y = ");
Serial.print(Ay);
Serial.print(", Z = ");
Serial.println(Az);

// 打印陀螺仪数据
Serial.print("陀螺仪 (°/s): ");
Serial.print("X = ");
Serial.print(Gx);
Serial.print(", Y = ");
Serial.print(Gy);
Serial.print(", Z = ");
Serial.println(Gz);

Serial.println(); // 空一行
}

delay(100); // 延时,控制数据刷新频率
}

3.查看结果

运行查看串口结果:

image-20241119203202884

任务三:学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。

1.准备工作

PDM 麦克风 使用脉冲密度调制技术输出数字音频数据,其输出信号需要经过解码转换为 PCM(脉冲编码调制)数据,才能被处理为音频信号。

板载麦克风型号:Nano RP2040 Connect 上的 PDM 麦克风型号为 MP34DT06JTR

PDM的库在安装IDE的集成在里面了

2.撰写代码

#include <PDM.h>

// 定义缓冲区大小(可以调整以适应需求)
#define BUFFER_SIZE 512

// 缓冲区存储麦克风数据
short buffer[BUFFER_SIZE];

// 记录是否有新数据的标志
volatile int bytesRead;;

// 初始化采样率和通道数
const int sampleRate = 16000; // 16 kHz 采样率
const int numChannels = 1; // 单声道

void setup() {
// 初始化串口
Serial.begin(115200);
while (!Serial) {
delay(10); // 等待串口就绪
}
Serial.println("PDM 麦克风初始化中...");

// 初始化 PDM 麦克风
if (!PDM.begin(numChannels, sampleRate)) {
Serial.println("PDM 麦克风初始化失败!");
while (1); // 停止程序
}

// 设置缓冲区大小
PDM.setBufferSize(BUFFER_SIZE);

// 注册音频数据回调函数
PDM.onReceive(onPDMData);

Serial.println("PDM 麦克风初始化成功!");
}

void loop() {
// 检查是否有新数据
if (bytesRead) {
// 打印音频数据到串口监视器
for (int i = 0; i < bytesRead; i++) {
Serial.println(buffer[i]); // 打印到串口监视器或绘图器
}
}

// 延迟以防止串口拥堵(调整为实际需求)
delay(10);
}

// 回调函数:处理音频数据
void onPDMData() {
int bytesAvailable = PDM.available(); // 获取数据字节数

// 确保缓冲区足够大以存储数据
PDM.read(buffer, bytesAvailable); // 从 PDM 读取数据

bytesRead = bytesAvailable /2;

}

3.查看串口

image-20241119215201949

image-20241119215227032