【Follow me第二季第4期】提交帖:全部任务
[复制链接]
本帖最后由 lb8820265 于 2025-1-12 10:23 编辑
项目演示视频
物料展示
整个学习的过程只需要一个Arduino RP2040 开发板即可,开发板上自带有许多的传感器。
前期准备工作
Arduino® Nano RP2040 Connect这个开发板是Arduino公司生产的产品,用的是树莓派Pico中的RP2040,树莓派有针对该芯片有专门的专门的SDK,是用C语言写的,我之前有学习过,但这次Arduino公司有对其进行封装,让其上手变得特别简单,使用Arduino IDE可以非常简单的完成一些简单的任务,完全不需要关注底层的驱动和相关的配置。但是也有许多不便的地方,比如定时器需要另外的安装库,PIO的功能甚至连库也没找到,而且许多的库也没法看到源码。最后还是决定用Arduino IDE来完成本次的任务。
先在Arduino官网上将IDE软件下载下来然后安装,使用USB线连接好电脑与开发板,正常情况会默认识别出硬件与端口号,如下图所示。
而且提示安装对应的库文件,没安装也可以在后期搜索Arduino Mbed OS Nano Boards安装,如下图所示。
任务成果展示
任务一:
搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!;
三色LED灯的原理是通过三个引脚来控制的,引脚拉低,对应颜色的灯就发光。
但是,三个引脚是从Wifi芯片上引出的,这点和官方树莓派Pico的做法一样。
因此,需要安装WiFi芯片的库文件,在库文件搜索处,搜索WifiNINA,然后安装,如下图所示。
程序流程图如下:
程序全部源码如下:
- #include "WiFiNINA.h"
- void setup() {
- Serial.begin(9600);
- pinMode(LEDR, OUTPUT);
- pinMode(LEDG, OUTPUT);
- pinMode(LEDB, OUTPUT);
- }
- void loop() {
-
- Serial.println("Hello DigiKey & EEWorld!");
-
- digitalWrite(LEDR, LOW);
- digitalWrite(LEDG, HIGH);
- digitalWrite(LEDB, HIGH);
- delay(500);
-
- digitalWrite(LEDR, HIGH);
- digitalWrite(LEDG, LOW);
- digitalWrite(LEDB, HIGH);
- delay(500);
-
- digitalWrite(LEDR, HIGH);
- digitalWrite(LEDG, HIGH);
- digitalWrite(LEDB, LOW);
- delay(500);
- }
代码是然后LED三色闪烁,同时串口发送"Hello DigiKey & EEWorld!"。
可以先点击IDE的“√”按钮,看看语法有没有错误,然后点击“->”按钮进行程序烧录。
看到提示”Done uploading”就说明烧录成功了,如下图。
串口可以使用IDE软件自带的串口工具,在Tools->Serial Monitor中,设置好波特率后,就可以看到打印的字符。
任务二:
学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据;
板子上有ST公司的陀螺仪加速度计芯片,叫做LSM6DSOX,Arduino IDE有IMU的库函数,但是需要额外安装,在库中搜索安装如下。
可以去Arduino官网中查看该库的详细介绍:Arduino_LSM6DSOX | Arduino Documentation,这个库函数写的非常的简单,而且限制了数据的跟新频率为104Hz,详细的源码可以去官方Github库中查看: 。
程序流程图如下:
程序全部源码如下:
- #include <Arduino_LSM6DSOX.h>
- float Ax, Ay, Az;
- float Gx, Gy, Gz;
- float data[6];
- char tail[] = {0x00, 0x00, 0x80, 0x7f};
- void setup() {
- Serial.begin(115200);
- while(!Serial);
- if (!IMU.begin()) {
- Serial.println("Failed to initialize IMU!");
- while (1);
- }
- }
- void loop() {
- if (IMU.accelerationAvailable()) {
- IMU.readAcceleration(Ax, Ay, Az);
- data[0]=Ax;
- data[1]=Ay;
- data[2]=Az;
- }
- if (IMU.gyroscopeAvailable()) {
- IMU.readGyroscope(Gx, Gy, Gz);
- data[3]=Gx;
- data[4]=Gy;
- data[5]=Gz;
- }
- Serial.write((char *)data, sizeof(float) * 6);
- Serial.write(tail, 4);
- }
程序是在loop中不断的查询数据是否准备好,然后获取数据并发送出来。烧录程序后数据的展示使用的是一个叫做VOFA+的软件,这是一个免费的数据波形展示软件,设定两个波形显示控件,左边是加速度计的值,右边是陀螺仪的值,配置好数据引擎为JustFloat,配置好串口参数,打开DTR,如下图所示。
然后转动开发板,显示的结果如下图所示。
任务三:
学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
该任务在库例程中有一个直接可用的例程,在File->Examples->PDM,这个例子可以直接烧录运行,然后在IDE自带的数据显示工具中显示波形数据,但是波形显示的数据量太少,不太直观,这里仍然用VOFA+软件进行波形的展示,稍微修改一下例程中的代码,将波特率改为115200,数据按照通信协议进行发送。
程序流程图如下:
程序全部源码如下:
- #include <PDM.h>
- float data[2];
- char tail[] = {0x00, 0x00, 0x80, 0x7f};
-
- static const char channels = 1;
-
- static const int frequency = 16000;
-
- short sampleBuffer[512];
-
- volatile int samplesRead;
- void setup() {
- Serial.begin(115200);
- while (!Serial);
-
- PDM.onReceive(onPDMdata);
-
-
-
-
-
-
-
- if (!PDM.begin(channels, frequency)) {
- Serial.println("Failed to start PDM!");
- while (1);
- }
- }
- void loop() {
-
- if (samplesRead) {
- for (int i = 0; i < samplesRead; i++) {
- data[0] = sampleBuffer[i];
- Serial.write((char *)data, sizeof(float) * 1);
- Serial.write(tail, 4);
- }
- samplesRead = 0;
- }
- }
-
-
- void onPDMdata() {
-
- int bytesAvailable = PDM.available();
-
- PDM.read(sampleBuffer, bytesAvailable);
-
- samplesRead = bytesAvailable / 2;
- }
烧录后对着板子说话,就可以在波形上位机中看到变化的声音波形数据了,如下图所示。
项目总结
这次使用Arduino® Nano RP2040 Connect开发板结合Arduino IDE确实体验到了开发的便利性,但是如果想要更好的发挥出这个板子的全部性能,做出有意思的东西,则还需要进行探索,期望后期能用这块板子做更多有意思的东西。
程序源码
Follow me 第二季第4期任务一-嵌入式开发相关资料下载-EEWORLD下载中心
Follow me 第二季第4期任务二-嵌入式开发相关资料下载-EEWORLD下载中心
Follow me 第二季第4期任务三-嵌入式开发相关资料下载-EEWORLD下载中心
|