rushairer

  • 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 及任务讲解

最近访客

< 1/1 >

统计信息

已有1人来访过

  • 芯积分:55
  • 好友:--
  • 主题:4
  • 回复:0

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言