- 2024-12-27
-
发表了主题帖:
【Follow me第二季第4期】【汇总】Arduino Nano RP2040 学习汇总
本帖最后由 rushairer 于 2024-12-28 15:28 编辑
# 【Follow me第二季第4期】【汇总】Arduino Nano RP2040 学习汇总
大家好,我是阿笨,本职工作是一名持续创业者,互联网开发者。去年开始学习电子电路知识,有幸能够参加DigiKey & EEWorld举办的【Follow me】活动。
这次活动我完成了三个任务,分别是:
1. [使用PlatformIO实现Blink三色LED](https://bbs.eeworld.com.cn/thread-1301220-1-1.html "使用PlatformIO实现Blink三色LED")
2. [使用PlatformIO实现学习IMU基础知识](https://bbs.eeworld.com.cn/thread-1302012-1-1.html "使用PlatformIO实现学习IMU基础知识")
3. [使用PlatformIO实现PDM麦克风声波曲线图](https://bbs.eeworld.com.cn/thread-1303010-1-1.html "使用PlatformIO实现PDM麦克风声波曲线图")
学习 Arduino Nano RP2040 开发板的使用,知识获取的方式:
1. 来自DigiKey 提供的[直播视频](https://training.eeworld.com.cn/video/41682 "直播视频")
2. 来自Arduino [官方网站 Nano RP2040 Connect 的相关文档](https://docs.arduino.cc/hardware/nano-rp2040-connect/ "官方网站")的相关文档
3. 来自Arduino IDE提供的示例代码
我个人比较喜欢先看官方文档和示例,一方面是内容会更权威,另一方面内容会与时俱进即使更新。
#### 【任务一】使用PlatformIO实现Blink三色LED
##### 任务介绍:
搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!
我的开发环境是Mac+vscode,所以选择的PlatformIO平台来实现项目代码。
由于RP2040开发板自带了三色LED,所以只准备一个RP2040开发板即可。
##### 软件流程图:
##### 任务代码:
```c++
#include
#include "WiFiNINA.h"
#define LED1 LEDR
#define LED2 LEDG
#define LED3 LEDB
float angle1;
float angle2;
float angle3;
void setup()
{
Serial.begin(115200);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
for (int i = 0; i < 5; i++)
{
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(200);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(200);
digitalWrite(LED3, LOW);
digitalWrite(LED1, HIGH);
delay(200);
}
angle1 = 0.0;
angle2 = 0.0 + PI / 3.0;
angle3 = 0.0 + 2.0 * PI / 3.0;
}
void loop()
{
angle1 += 0.01;
angle2 += 0.01;
angle3 += 0.01;
if (angle1 >= PI)
{
angle1 -= PI;
}
if (angle2 >= PI)
{
angle2 -= PI;
}
if (angle3 >= PI)
{
angle3 -= PI;
}
int a = sin(angle1) * 255;
int b = sin(angle2) * 255;
int c = sin(angle3) * 255;
analogWrite(LED1, a);
analogWrite(LED2, b);
analogWrite(LED3, c);
delay(5);
Serial.print(">");
Serial.print("RED:");
Serial.print(a);
Serial.print(",");
Serial.print("GREEN:");
Serial.print(b);
Serial.print(",");
Serial.print("BLUE:");
Serial.print(c);
Serial.print("\r\n");
Serial.println("Hello DigiKey & EEWorld!");
}
```
成功运行后,会看到RP2040自带的3色LED会先3色交替闪烁5次,然后呼吸闪烁,串口输出“Hello DigiKey & EEWorld!”和3色的值。
EE大学堂 地址 https://training.eeworld.com.cn/course/68827
源代码下载地址 https://download.eeworld.com.cn/detail/rushairer/635223
#### 【任务二】使用PlatformIO实现学习IMU基础知识
##### 任务介绍:
学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据。
我的开发环境是Mac+vscode,所以选择的PlatformIO平台来实现项目代码。
由于RP2040开发板自带了IMU,所以只准备一个RP2040开发板即可。
RP2040自带IMU的文档 参考官方文档 https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-basics/
串口输出数据曲线图工具我选择的是 serial-plotter
https://marketplace.visualstudio.com/items?itemName=badlogicgames.serial-plotter
##### 软件流程图:
##### 任务代码:
```c++
#include
#include
float Ax, Ay, Az;
float Gx, Gy, Gz;
void setup()
{
Serial.begin(115200);
if (!IMU.begin())
{
Serial.println("IMU error");
while (1)
{
;
}
}
}
void loop()
{
if (IMU.accelerationAvailable())
{
IMU.readAcceleration(Ax, Ay, Az);
Serial.println("Accelerometer data:");
Serial.print(">");
Serial.print("Ax:");
Serial.print(Ax);
Serial.print(",");
Serial.print("Ay:");
Serial.print(Ay);
Serial.print(",");
Serial.print("Az:");
Serial.print(Az);
Serial.print("\r\n");
}
if (IMU.gyroscopeAvailable())
{
IMU.readGyroscope(Gx, Gy, Gz);
Serial.println("Gyroscope data:");
Serial.print(">");
Serial.print("Gx:");
Serial.print(Gx);
Serial.print(",");
Serial.print("Gy:");
Serial.print(Gy);
Serial.print(",");
Serial.print("Gz:");
Serial.print(Gz);
Serial.print("\r\n");
}
delay(300);
}
```
EE大学堂 地址 https://training.eeworld.com.cn/course/68856
源代码下载地址 https://download.eeworld.com.cn/detail/rushairer/635326
#### 【任务三】使用PlatformIO实现PDM麦克风声波曲线图
##### 任务介绍:
学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
我的开发环境是Mac+vscode,所以选择的PlatformIO平台来实现项目代码。
由于RP2040开发板自带了麦克风,所以只准备一个RP2040开发板即可。
串口输出数据曲线图工具我选择的是 serial-plotter
https://marketplace.visualstudio.com/items?itemName=badlogicgames.serial-plotter
##### 软件流程图:
##### 任务代码:
```c++
#include
#include
// 输出频道数
static const char channels = 1;
// PDM输出频率
static const int frequency = 16000;
// 读取数据缓冲区
short sampleBuffer[512];
// 是否读取数据的开关
volatile int samplesRead;
void onPDMdata();
void setup()
{
Serial.begin(115200);
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency))
{
Serial.println("PDM error");
while (1)
{
;
}
}
}
void loop()
{
// 判断是否够2个byte,然后进行读取
if (samplesRead)
{
Serial.print(">");
// 遍历缓冲区
for (int i = 0; i < samplesRead; i++)
{
Serial.print("value:");
Serial.println(sampleBuffer);
}
// 关闭读取开关,等待重新积累2个byte后再开启
samplesRead = 0;
}
}
// PDM 麦克风读取数据的回调函数
void onPDMdata()
{
// 可读取的byte数
int bytesAvailable = PDM.available();
// 读取数据进缓冲区
PDM.read(sampleBuffer, bytesAvailable);
// 每2个byte输出一次
samplesRead = bytesAvailable / 2;
}
```
EE大学堂 地址 https://training.eeworld.com.cn/course/68889
源代码下载地址 https://download.eeworld.com.cn/detail/rushairer/635452
### 心得体会
非常感谢DigiKey组织的这次活动,让我有机会体验Arduino Nano RP2040 这款优秀的开发板。
以前自学知识都是一带而过,很少有落到纸面的总结。如果这次活动,我走完了从学习,到实践,到总结的一个完整过程,受益匪浅。
平常很少画流程图,正好通过三个简单的任务,重新学习了流程图的用法。
希望今后可以参加更多精彩活动。
-
发表了主题帖:
【Follow me第二季第4期】【任务三】使用PlatformIO实现PDM麦克风声波曲线图
# 【Follow me第二季第4期】【任务三】使用PlatformIO实现PDM麦克风声波曲线图
【Follow me第二季第4期】【任务三】使用PlatformIO实现PDM麦克风声波曲线图
大家好,我是阿笨,本职工作是一名持续创业者,互联网开发者。去年开始学习电子电路知识,有幸能够参加DigiKey & EEWorld举办的【Follow me】活动。
我的开发环境是Mac+vscode,所以选择的PlatformIO平台来实现项目代码。
使用串口图形化插件 serial-plotter
https://marketplace.visualstudio.com/items?itemName=badlogicgames.serial-plotter
EE大学堂 地址 https://training.eeworld.com.cn/course/68889
源代码下载地址 https://download.eeworld.com.cn/detail/rushairer/635452
[localvideo]1151a513e8d8501f980c1d852e4d2054[/localvideo]
代码如下:
```c++
#include
#include
// 输出频道数
static const char channels = 1;
// PDM输出频率
static const int frequency = 16000;
// 读取数据缓冲区
short sampleBuffer[512];
// 是否读取数据的开关
volatile int samplesRead;
void onPDMdata();
void setup()
{
Serial.begin(115200);
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency))
{
Serial.println("PDM error");
while (1)
{
;
}
}
}
void loop()
{
// 判断是否够2个byte,然后进行读取
if (samplesRead)
{
Serial.print(">");
// 遍历缓冲区
for (int i = 0; i < samplesRead; i++)
{
Serial.print("value:");
Serial.println(sampleBuffer);
}
// 关闭读取开关,等待重新积累2个byte后再开启
samplesRead = 0;
}
}
// PDM 麦克风读取数据的回调函数
void onPDMdata()
{
// 可读取的byte数
int bytesAvailable = PDM.available();
// 读取数据进缓冲区
PDM.read(sampleBuffer, bytesAvailable);
// 每2个byte输出一次
samplesRead = bytesAvailable / 2;
}
```
-
上传了资料:
【Follow me第二季第4期】【任务三】使用PlatformIO实现PDM麦克风声波曲线图 源代码
- 2024-12-16
-
上传了资料:
【Follow me第二季第4期】【任务二】使用PlatformIO实现学习IMU基础知识
-
发表了主题帖:
【Follow me第二季第4期】【任务二】使用PlatformIO实现学习IMU基础知识
本帖最后由 rushairer 于 2024-12-17 20:43 编辑
【Follow me第二季第4期】【任务二】使用PlatformIO实现学习IMU基础知识
大家好,我是阿笨,本职工作是一名持续创业者,互联网开发者。去年开始学习电子电路知识,有幸能够参加DigiKey & EEWorld举办的【Follow me】活动。
我的开发环境是Mac+vscode,所以选择的PlatformIO平台来实现项目代码。
使用串口图形化插件 serial-plotter
https://marketplace.visualstudio.com/items?itemName=badlogicgames.serial-plotter
EE大学堂 地址 https://training.eeworld.com.cn/course/68856
源代码下载地址 https://download.eeworld.com.cn/detail/rushairer/635326
[localvideo]5ca72d7ea058e12a35997e3ebe7051fc[/localvideo]
代码如下:
```c++
#include
#include
float Ax, Ay, Az;
float Gx, Gy, Gz;
void setup()
{
Serial.begin(115200);
if (!IMU.begin())
{
Serial.println("IMU error");
while (1)
{
;
}
}
}
void loop()
{
if (IMU.accelerationAvailable())
{
IMU.readAcceleration(Ax, Ay, Az);
Serial.println("Accelerometer data:");
Serial.print(">");
Serial.print("Ax:");
Serial.print(Ax);
Serial.print(",");
Serial.print("Ay:");
Serial.print(Ay);
Serial.print(",");
Serial.print("Az:");
Serial.print(Az);
Serial.print("\r\n");
}
if (IMU.gyroscopeAvailable())
{
IMU.readGyroscope(Gx, Gy, Gz);
Serial.println("Gyroscope data:");
Serial.print(">");
Serial.print("Gx:");
Serial.print(Gx);
Serial.print(",");
Serial.print("Gy:");
Serial.print(Gy);
Serial.print(",");
Serial.print("Gz:");
Serial.print(Gz);
Serial.print("\r\n");
}
delay(300);
}
```
- 2024-12-08
-
上传了资料:
【Follow me第二季第4期】【任务一】使用PlatformIO实现Blink三色LED 源代码
-
加入了学习《【Follow me第二季第4期】【任务一】使用PlatformIO实现Blink三色LED》,观看 PlatformIO 实现RP2040 点灯示例
-
发表了主题帖:
【Follow me第二季第4期】【任务一】使用PlatformIO实现Blink三色LED
本帖最后由 rushairer 于 2024-12-8 19:57 编辑
### 【Follow me第二季第4期】【任务一】使用PlatformIO实现Blink三色LED
大家好,我是阿笨,本职工作是一名持续创业者,互联网开发者。去年开始学习电子电路知识,有幸能够参加DigiKey & EEWorld举办的【Follow me】活动。
我的开发环境是Mac+vscode,所以选择的PlatformIO平台来实现项目代码。
[localvideo]04f1d547ae7fe0c89a3c2f02dce62bb4[/localvideo]
EE大学堂 地址 https://training.eeworld.com.cn/course/68827
源代码下载地址 https://download.eeworld.com.cn/detail/rushairer/635223
代码如下:
```c++
#include
#include "WiFiNINA.h"
#define LED1 LEDR
#define LED2 LEDG
#define LED3 LEDB
float angle1;
float angle2;
float angle3;
void setup()
{
Serial.begin(115200);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
for (int i = 0; i < 5; i++)
{
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(200);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(200);
digitalWrite(LED3, LOW);
digitalWrite(LED1, HIGH);
delay(200);
}
angle1 = 0.0;
angle2 = 0.0 + PI / 3.0;
angle3 = 0.0 + 2.0 * PI / 3.0;
}
void loop()
{
angle1 += 0.01;
angle2 += 0.01;
angle3 += 0.01;
if (angle1 >= PI)
{
angle1 -= PI;
}
if (angle2 >= PI)
{
angle2 -= PI;
}
if (angle3 >= PI)
{
angle3 -= PI;
}
int a = sin(angle1) * 255;
int b = sin(angle2) * 255;
int c = sin(angle3) * 255;
analogWrite(LED1, a);
analogWrite(LED2, b);
analogWrite(LED3, c);
delay(5);
Serial.println("Hello DigiKey & EEWorld!");
}
```
- 2024-11-21
-
加入了学习《FollowMe 第二季:3 - EK_RA6M5 开发板入门》,观看 EK-RA6M5 开发板入门
- 2024-08-13
-
加入了学习《FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解》,观看 Adafruit Circuit Playground Express 及任务讲解