本帖最后由 Lucheni 于 2025-1-10 23:25 编辑
Hello大家好,我是Lucheni,很非常高兴能参加这次的活动,体验Arduino Nano RP2040 Connect开发板的乐趣。
本次活动我仅购买了单块Arduino Nano RP2040 Connect开发板,没有使用其他的模组。
本次我分别完成了任务一二三和选做一,接下来我会分别展示各个任务的实现过程。
任务一:搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!
代码流程图如下
本次的开发我依旧使用了熟悉的Arduino开发环境,毕竟是Arduino官方版本的开发板,当然用Arduino更为合适。如上图,此块Arduino和经典nano开发板略有区别,led为三色led,所以使用常规blink例程驱动三色led会有问题。
参考开发板官方Tutorials文件(https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-01-technical-reference/),RGB led是连接在W-102模块上的,所以要控制led,需要先安装WiFiNINA库。
#include <WiFiNINA.h>
然后需要在初始化函数中定义LED控制管脚
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
打开和关闭像素代码如下:
digitalWrite(LEDR, HIGH); //RED
digitalWrite(LEDG, HIGH); //GREEN
digitalWrite(LEDB, HIGH); //BLUE
digitalWrite(LEDR, LOW); //RED
digitalWrite(LEDG, LOW); //GREEN
digitalWrite(LEDB, LOW); //BLUE
串口操作则和常规Arduino完全一致
最后项目主要代码如下:实现了三色依次切换亮起,并在串口输出亮起的灯,最后三色同时亮起,同时串口输出Hello DigiKey & EEWorld!
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LEDR, HIGH); //RED
digitalWrite(LEDG, HIGH); //GREEN
digitalWrite(LEDB, HIGH); //BLUE
Serial.println("Hello DigiKey & EEWorld!");
delay(1000);
digitalWrite(LEDR, LOW); //RED
digitalWrite(LEDG, LOW); //GREEN
digitalWrite(LEDB, LOW); //BLUE
Serial.println("RED ON!");
digitalWrite(LEDR, HIGH); //RED
delay(1000);
digitalWrite(LEDR, LOW); //RED
Serial.println("GREEN ON!");
digitalWrite(LEDG, HIGH); //RED
delay(1000);
digitalWrite(LEDG, LOW); //GREEN
Serial.println("BLUE ON!");
digitalWrite(LEDB, HIGH); //RED
delay(1000);
}
任务二:调试IMU传感器,通过串口打印六轴数据
同样参考Tutorials可知,本块开发板使用了STM的LSM6DSOXTR,这是一颗IMU(惯性测量单元),具有3D数字加速度计和3D数字陀螺仪。除其他功能外,它还具有机器学习核心,可用于任何运动检测项目,例如自由落体、计步器、计步器、计步器。同时该芯片还具有嵌入式温度传感器。
代码流程图如下
要连接LSM6DSOX模块的数据,Arduino官方提供了Arduino_LSM6DSOX库( ),在Arudino中可以直接通过库管理器安装。
库的安装和初始化代码如下
#include <Arduino_LSM6DSOX.h>
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}
读取传感器数据可以使用如下代码:
加速度计数据:
float x, y, z;
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(x, y, z);
}
陀螺仪数据:
float x, y, z;
if (IMU.gyroscopeAvailable()) {
IMU.readGyroscope(x, y, z);
}
温度数据:
if (IMU.temperatureAvailable())
{
int temperature_deg = 0;
IMU.readTemperature(temperature_deg);
Serial.print("LSM6DSOX Temperature = ");
Serial.print(temperature_deg);
Serial.println(" °C");
}
因本次任务仅要求读取六轴数据,所以实际项目代码中并没有进行温度数据读取。
任务三+选做任务一:调试PDM麦克风,通过串口打印收音数据和音频波形,并体现在RGB LED上。
此开发板板载了MP34DT06JTR 麦克风,这是一款紧凑、低功耗的全向数字 MEMS 麦克风,带有 IC 接口。它具有 64 dB 的信噪比,能够感应声波,并且可以在 -40 °C 至 +85 °C 的温度下工作。
代码流程图如下
要从 MP34DT06JTR 访问数据,需要使用 Arduino Mbed OS Nano 板包中包含的 PDM 库。安装了主板包后,可以通过浏览文件 > 示例 > PDM > PDMSerialPlotter 找到PDM麦克风的工作示例。
Arudino官方为此麦克风单独写了一份Tutorial:https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-microphone-basics/
麦克风使用的主要代码如下:
static const char channels = 1;// 设置输出通道的数量。
static const int frequency = 20000;// 将采样频率设置为 20 KHz。
short sampleBuffer[512];// 读取样本,每个样本为 16 位。
PDM.begin(channels, frequency); 初始化 PDM 库。
Serial.print(sampleBuffer[i]);// 将样本打印到串行监视器/绘图仪。
选做任务一其实和任务三比较类似,任务三是将麦克风的数据输出,选做任务一则是通过led的颜色变化体现麦克风收到的声音大小。
代码中我使用了如下公式将声音大小转换为led亮度:
r=255-(abs(sampleBuffer[i])/10000)*255;
感谢DigiKey和EEWorld举办此次活动,让我有机会体验到Arduino官方开发板的乐趣!
Arudino为官方开发板开发的相关资料和教程非常细节和丰富,个人觉得这是国内相关厂商需要学习的。
代码下载链接如上:https://download.eeworld.com.cn/detail/Lucheni/635466
任务提交视频:https://training.eeworld.com.cn/video/42217
|