176|0

661

帖子

29

TA的资源

版主

楼主
 

【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!");
  •   // Red
  •   digitalWrite(LEDR, LOW);
  •   digitalWrite(LEDG, HIGH);
  •   digitalWrite(LEDB, HIGH);
  •   delay(500);
  •   // Green
  •   digitalWrite(LEDR, HIGH);
  •   digitalWrite(LEDG, LOW);
  •   digitalWrite(LEDB, HIGH);
  •   delay(500);
  •   // Blue
  •   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};
  • // default number of output channels
  • static const char channels = 1;
  • // default PCM output frequency
  • static const int frequency = 16000;
  • // Buffer to read samples into, each sample is 16-bits
  • short sampleBuffer[512];
  • // Number of audio samples read
  • volatile int samplesRead;
  • void setup() {
  •   Serial.begin(115200);
  •   while (!Serial);
  •   // Configure the data receive callback
  •   PDM.onReceive(onPDMdata);
  •   // Optionally set the gain
  •   // Defaults to 20 on the BLE Sense and 24 on the Portenta Vision Shield
  •   // PDM.setGain(30);
  •   // Initialize PDM with:
  •   // - one channel (mono mode)
  •   // - a 16 kHz sample rate for the Arduino Nano 33 BLE Sense
  •   // - a 32 kHz or 64 kHz sample rate for the Arduino Portenta Vision Shield
  •   if (!PDM.begin(channels, frequency)) {
  •     Serial.println("Failed to start PDM!");
  •     while (1);
  •   }
  • }
  • void loop() {
  •   // Wait for samples to be read
  •   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;
  •   }
  • }
  • /**
  •  * Callback function to process the data from the PDM microphone.
  •  * NOTE: This callback is executed as part of an ISR.
  •  * Therefore using `Serial` to print messages inside this function isn't supported.
  •  * */
  • void onPDMdata() {
  •   // Query the number of available bytes
  •   int bytesAvailable = PDM.available();
  •   // Read into the sample buffer
  •   PDM.read(sampleBuffer, bytesAvailable);
  •   // 16-bit, 2 bytes per sample
  •   samplesRead = bytesAvailable / 2;
  • }

    烧录后对着板子说话,就可以在波形上位机中看到变化的声音波形数据了,如下图所示。

 

项目总结

    这次使用Arduino® Nano RP2040 Connect开发板结合Arduino IDE确实体验到了开发的便利性,但是如果想要更好的发挥出这个板子的全部性能,做出有意思的东西,则还需要进行探索,期望后期能用这块板子做更多有意思的东西。

程序源码

Follow me 第二季第4期任务一-嵌入式开发相关资料下载-EEWORLD下载中心

Follow me 第二季第4期任务二-嵌入式开发相关资料下载-EEWORLD下载中心

Follow me 第二季第4期任务三-嵌入式开发相关资料下载-EEWORLD下载中心

 

点赞 关注
个人签名QQ:252669569
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条
ADI 中国30周年,与你一起走过的那些精彩瞬间!
即日起-4月30日,阅读资料,您可以参与ADI真爱粉大考验,同时为ADI中国30周年送上祝福!我们将从参与者中随机抽取精美礼品送出!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表