- 2025-01-17
-
加入了学习《直播回放: ROHM 重点解析双极型晶体管的实用选型方法和使用方法》,观看 ROHM - 双极晶体管的选型和使用方法
-
回复了主题帖:
新年新挑战,任务打卡赢好礼!
1、更新完善个人信息:完善您的个人资料,让我们更好地了解您。
2、回复3个帖子:在论坛中积极参与讨论,分享您的见解与心得。
3、认真学完1个大学堂视频:提升自我,获取知识,享受学习的乐趣。
4、报名参加活动中心的1个活动:融入社区,与更多志同道合的人一起共度美好时光。
5、下载一份资源站资料:获取您需要的资源,助力您的学习与工作。
-
回复了主题帖:
加速电机控制器开发:EasyGo硬件在环测试平台一站式解决方案
电机控制一直都是非常不错的应用,楼主说的很全面.
-
回复了主题帖:
E2PROM的数据怎么读取出来?
E2PROM的数据可以通过I2C总线接口读取出来。
-
回复了主题帖:
【Follow me第二季第4期】-任务提交与汇总
PDM麦克风,是采用脉冲密度调制,通过调整连续脉冲序列中1和0的密度来代表模拟信号的幅度。
- 2025-01-11
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
立一个新年Flag,EEWORLD加油
最想关注是AI,FPGA,LINUX的技术。
最想要的是FPGA开发板,linux开发板,多一些这方面的资料学习.
- 2025-01-10
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
立一个新年Flag,EEWORLD加油
最想关注是AI,FPGA,LINUX的技术。
最想要的是FPGA开发板,linux开发板,多一些这方面的资料学习.
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
立一个新年Flag,EEWORLD加油
最想关注是AI,FPGA,LINUX的技术。
最想要的是FPGA开发板,linux开发板,多一些这方面的资料学习.
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
立一个新年Flag,EEWORLD加油
- 2024-12-20
-
发表了主题帖:
【Follow me第二季第4期】Arduino Nano RP2040 Connect 任务总贴
本帖最后由 meiyao 于 2025-1-13 09:34 编辑
1、视频:
nauo rp2040_哔哩哔哩_bilibili
2、全部物料清单:
开发板:ARDUINO NANO RP2040 CONNECT
扩展板:FollowMe2024S2P4
OLED:GROVE OLED YELLOW&BLUE DISPLAY
3、软件流程设计思路
必做任务一:搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!;
Arduino Nano RP2040 Connect的必做任务一“搭建环境并开启第一步Blink三色LED/串口打印Hello DigiKey & EEWorld!”涉及多个步骤,以下是对该任务的详细解答:
1、搭建开发环境 下载并安装Arduino IDE:
确保使用的是Arduino IDE的最新版本,以便获得最新的功能和支持。
官方连接:
https://www.arduino.cc/en/software
安装RP2040支持包: 打开Arduino IDE,进入“工具”>“板子”>“开发板管理器”。
在开发板管理器中,搜索并安装“Arduino Mbed OS RP2040”或“Arduino Nano RP2040 Connect”的支持包。
连接开发板: 使用USB连接线(A口to Micro)将Arduino Nano RP2040 Connect开发板连接到电脑。
在Arduino IDE中,通过“工具”>“端口”选择正确的端口。
2、Blink三色LED 了解RGB LED控制:
Arduino Nano RP2040 Connect开发板上的RGB LED是通过Wi-Fi模块Nina W102控制的,在编程时需要包含WiFiNINA库才能使用RGB LED。
编写代码: 在Arduino IDE中编写代码,以控制RGB LED的闪烁。
代码如下:
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(100); // 减少延迟时间以加快闪烁速度
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(100); // 同样减少延迟时间
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(100); // 再次减少延迟时间
// 输出消息到串口,但保持延迟时间不变,以便有足够时间查看消息
Serial.println("{ Hello DigiKey & EEWorld!}");
delay(1000); // 保持1秒的延迟,以便观察消息或LED闪烁的结束
// 慢闪10次
for (int i = 0; i < 10; i++) {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(200); // 慢闪延迟200毫秒
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(200);
}
// 快闪10次
for (int i = 0; i < 10; i++) {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(50); // 快闪延迟50毫秒
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(50);
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(50);
}
Serial.println("Arduino® Nano RP2040 Connect");
3、串口打印Hello DigiKey & EEWorld!代码:
在上面的代码中添加串口打印语句。
修改后的代码如下:
//设置串口打印后续Print
Serial.begin(9600);
Serial.println("{ Hello DigiKey & EEWorld!}");
Serial.println("Arduino® Nano RP2040 Connect");
4、实际输出结果
[localvideo]98cb65848e7acaca9b314783dfef8435[/localvideo]
必做任务二:学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据;
Arduino Nano RP2040 Connect 惯性测量单元基础知识,调试IMU传感器,并通过串口打印六轴原始数据。
1、IMU基础知识 IMU(Inertial Measurement Unit)是一个由不同传感器组成的部件,用于记录特定力、角速度、方向等数据。
在Arduino Nano RP2040 Connect上,通常集成了LSM6DSOX这款6轴IMU传感器,它包含以下两个主要部分:
三轴加速度计:用于测量加速力,这种力可以是静态的(持续的重力作用力),也可以是动态的(如感知运动或振动)。
陀螺仪是通过测量科氏力来检测角速度的,科氏力在大学物理中提到过.
三轴陀螺仪:用于测量和保持物体的方向和角速度。陀螺仪比加速度计更先进,因为它可以测量物体的倾斜和横向方向,而加速度计只能测量其线性运动。
对姿态的描述,最直观的便是欧拉角了。实际上一个动图便能十分直观的理解.
2、调试IMU传感器 安装所需库:
打开Arduino IDE。 进入“工具”>“库管理器”。 搜索并安装“Arduino_LSM6DSOX”库。
连接开发板: 使用USB连接线将Arduino Nano RP2040 Connect开发板连接到电脑。
在Arduino IDE中,通过“工具”>“端口”选择正确的端口。
编写代码: 下面是一个简单的示例代码,演示如何读取加速度和陀螺仪数据,并通过串口打印输出:
根据上图可以看到,我通过摆动板了,就可以读到IMU传感器的数据并通过串口打印出来。
3.代码:
// 打印加速度计X轴的数据
Serial.print("accelerated speed_X = "); // 在串行监视器上打印文本标签
Serial.print(acc_x); // 打印变量acc_x的值,它应该包含加速度计X轴的数据
Serial.print('\t'); // 打印一个制表符,用于在输出中创建水平间隔
// 打印加速度计Y轴的数据
Serial.print("accelerated speed_Y = "); // 在串行监视器上打印文本标签
Serial.print(acc_y); // 打印变量acc_y的值,它应该包含加速度计Y轴的数据
Serial.print('\t'); // 打印一个制表符
// 打印加速度计Z轴的数据
Serial.print("accelerated speed_Z = "); // 在串行监视器上打印文本标签
Serial.print(acc_z); // 打印变量acc_z的值,它应该包含加速度计Z轴的数据
Serial.print('\n'); // 打印一个换行符,以开始新的一行输出
// 打印陀螺仪X轴的数据
Serial.print("Gyro_X = "); // 在串行监视器上打印文本标签
Serial.print(gyro_x); // 打印变量gyro_x的值,它应该包含陀螺仪X轴的数据
Serial.print('\t'); // 打印一个制表符
// 打印陀螺仪Y轴的数据
Serial.print("Gyro_Y = "); // 在串行监视器上打印文本标签
Serial.print(gyro_y); // 打印变量gyro_y的值,它应该包含陀螺仪Y轴的数据
Serial.print('\t'); // 打印一个制表符
// 打印陀螺仪Z轴的数据
Serial.print("Gyro_Z = "); // 在串行监视器上打印文本标签
Serial.print(gyro_z); // 打印变量gyro_z的值,它应该包含陀螺仪Z轴的数据
Serial.print('\n'); // 打印一个换行符,以结束当前行的输出并开始新的一行
必做任务三:学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
1、PDM麦克风技术知识 PDM麦克风简介:
PDM麦克风是一种基于脉冲密度调制技术的麦克风,它输出的是数字信号,适合直接处理数字音频。
Arduino Nano RP2040 Connect板载了MP34DT06JTR这款PDM麦克风,它是一款超紧凑、低功耗、全向、数字MEMS麦克风。
PDM工作原理: PDM是一种调制形式,用于表示数字域中的模拟信号。它是1位数字采样的高频数据流,其中脉冲的相对密度对应于模拟信号的幅度。 大量的“1”对应于高(正)幅度值,而大量的“0”对应于低(负)幅度值,交替的“1”和“0”对应于幅度值0。
PDM麦克风的应用: PDM麦克风适用于语音识别、音频采集等场景,因为它能够直接输出数字信号,方便后续的数字音频处理。
PDM调制器(在PDM麦克风内)或噪声整形器(在PCM到PCM转换器内)有能力产生在通带内有着非常低噪声的1比特信号。
给定一个正弦波输入信号时,PDM调制器输出的时域和频域的视图。时域输出在两个电平之间以高速率切换。频域内,在xx轴上通带从00扩展到0.5fs0.5fs。在此之上是由过采样创建的频谱空间。在通带之上很容易见到猛烈的噪声上升。同样可见的是一个很小数量的三次谐波失真(峰值接近0.06fs0.06fs)。
MIC标准原理图:
TDM系统框图:
2、调试PDM麦克风 环境准备:
如果需要在MicroPython环境中使用PDM麦克风,需要下载并安装专门的驱动PinkInk/mp34dt06-a-micropython-driver。
代码编写与上传: 在Arduino IDE中编写代码,以初始化PDM麦克风并通过串口打印收音数据。
输出结果:
点我弄出声响时,出现不一样的声音波形,会特别的高,从下图波形就可以看到。
通过串口打印音频波形 使用串口绘图器, Arduino IDE提供了串口绘图器(Serial Plotter)工具,可以用于观察音频数据的波形变化。 在上传了上述代码后,打开串口监视器旁边的串口绘图器。 调整绘图器的设置,以便能够清晰地看到音频波形的变化。
数据可视化: 在串口绘图器中,可以观察到PDM麦克风收音的音频波形。通过大声说话或发出其他声音,可以看到波形随之变化。
3、代码:
delay(10);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(100); // 减少延迟时间以加快闪烁速度
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(100); // 同样减少延迟时间
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(100); // 再次减少延迟时间
// 输出消息到串口,但保持延迟时间不变,以便有足够时间查看消息
Serial.println("{ Hello DigiKey & EEWorld!}");
delay(1000); // 保持1秒的延迟,以便观察消息或LED闪烁的结束
// 慢闪10次
for (int i = 0; i < 10; i++) {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(200); // 慢闪延迟200毫秒
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(200);
}
// 快闪10次
for (int i = 0; i < 10; i++) {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(50); // 快闪延迟50毫秒
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(50);
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(50);
}
Serial.println("Arduino® Nano RP2040 Connect");
}
void onPDMdata() {
// 获取PDM缓存可读字节数
int bytesAvailable = PDM.available();
// 将缓存读取到Buff中
PDM.read(sampleBuffer, bytesAvailable);
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
选做任务一(非必做):通过RGB LED不同颜色、亮度显示PDM麦克风收到的声音大小;
实现步骤
初始化PDM麦克风: 在setup()函数中,初始化PDM麦克风,并设置回调函数以处理接收到的音频数据。
Serial.begin(115200); // 初始化串口通信
while (!Serial);
// 设置LED 引脚输出
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
// 配置数据回调函数
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1); // 启动失败
}
读取音频数据: 在回调函数中,读取PDM麦克风接收到的音频数据,并存储在缓冲区中。
if (samplesRead) {
float rms = getRMSAmplitude(sampleBuffer, samplesRead);
controlLEDs(rms);
// 打印RMS值到串口(减缓打印速度)
Serial.println(rms);
delay(100); // 添加延时,单位为毫秒(这里设置为100ms)
// 重置已读取的样本数量
samplesRead = 0;
计算声音大小: 使用一种算法(如峰值振幅法、RMS振幅法等)来计算音频数据的振幅或声音大小。
映射到RGB LED: 将计算出的声音大小映射到RGB LED的颜色和亮度上。例如,可以设定低音量时红色LED亮起,中低音量时绿色LED亮起,中高音量时蓝色LED亮起,高音量时RGB全亮。
更新RGB LED: 根据映射结果,更新RGB LED的颜色和亮度。
代码示例 演示了如何通过RGB LED显示PDM麦克风收到的声音大小:
if (rms < 500) {
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, LOW);
}
// 500<rms<1500绿色LED亮起
else if (rms < 1500) {
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, LOW);
}
// 1500<rms<3000蓝色LED亮起
else if (rms < 3000) {
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, HIGH);
}
// rms>3000LED全亮
else {
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, HIGH);
}
在串口绘图器中,可以观察到PDM麦克风收音的音频波形。通过大声说话或发出其他声音,可以看到波形随之变化。
串口输出值。
下面的图是我正常居住环境声音。
输出结果:
[localvideo]93ff1f0cbbc17f931e562490b07b59e1[/localvideo]
Arduino Nano RP2040 Connect OLED
硬件连接:
Arduino Nano RP2040 Connect开发板、OLED显示器需支持I2CI通信协议相连接线。
连接步骤:将OLED显示器的VCC和GND分别连接到Arduino Nano RP2040 Connect的3.3V和GND引脚。 根据OLED显示器的通信协议(I2C),将相应的数据线SDA、SCL对于I2C连接到Arduino Nano RP2040 Connect的对应引脚上。 可以添加适当的电阻来限流,以保护OLED显示器和Arduino Nano RP2040 Connect的引脚。
软件设置: 安装库文件:在Arduino IDE中,需要安装支持OLED显示器的库文件,如Adafruit_GFX和Adafruit_SSD1306(针对常见的SSD1306驱动的OLED显示器)。
编写代码:使用Arduino IDE编写代码,初始化OLED显示器,并显示所需的内容。
代码示例如下(以I2C通信协议为例):
oid testdrawline() {
int16_t i;
display.clearDisplay(); // Clear display buffer
for(i=0; i<display.width(); i+=4) {
display.drawLine(0, 0, i, display.height()-1, SSD1306_WHITE);
display.display(); // Update screen with each newly-drawn line
delay(1);
}
for(i=0; i<display.height(); i+=4) {
display.drawLine(0, 0, display.width()-1, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for(i=0; i<display.width(); i+=4) {
display.drawLine(0, display.height()-1, i, 0, SSD1306_WHITE);
display.display();
delay(1);
}
for(i=display.height()-1; i>=0; i-=4) {
display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for(i=display.width()-1; i>=0; i-=4) {
display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE);
display.display();
delay(1);
}
for(i=display.height()-1; i>=0; i-=4) {
display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for(i=0; i<display.height(); i+=4) {
display.drawLine(display.width()-1, 0, 0, i, SSD1306_WHITE);
display.display();
delay(1);
}
for(i=0; i<display.width(); i+=4) {
display.drawLine(display.width()-1, 0, i, display.height()-1, SSD1306_WHITE);
display.display();
delay(1);
}
delay(2000); // Pause for 2 seconds
}
void testdrawrect(void) {
display.clearDisplay();
for(int16_t i=0; i<display.height()/2; i+=2) {
display.drawRect(i, i, display.width()-2*i, display.height()-2*i, SSD1306_WHITE);
display.display(); // Update screen with each newly-drawn rectangle
delay(1);
}
delay(2000);
}
void testfillrect(void) {
display.clearDisplay();
for(int16_t i=0; i<display.height()/2; i+=3) {
// The INVERSE color is used so rectangles alternate white/black
display.fillRect(i, i, display.width()-i*2, display.height()-i*2, SSD1306_INVERSE);
display.display(); // Update screen with each newly-drawn rectangle
delay(1);
}
delay(2000);
}
void testdrawcircle(void) {
display.clearDisplay();
for(int16_t i=0; i<max(display.width(),display.height())/2; i+=2) {
display.drawCircle(display.width()/2, display.height()/2, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(2000);
}
void testfillcircle(void) {
display.clearDisplay();
for(int16_t i=max(display.width(),display.height())/2; i>0; i-=3) {
// The INVERSE color is used so circles alternate white/black
display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);
display.display(); // Update screen with each newly-drawn circle
delay(1);
}
delay(2000);
}
void testdrawroundrect(void) {
display.clearDisplay();
for(int16_t i=0; i<display.height()/2-2; i+=2) {
display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i,
display.height()/4, SSD1306_WHITE);
display.display();
delay(1);
}
delay(2000);
}
void testfillroundrect(void) {
display.clearDisplay();
for(int16_t i=0; i<display.height()/2-2; i+=2) {
// The INVERSE color is used so round-rects alternate white/black
display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i,
display.height()/4, SSD1306_INVERSE);
display.display();
delay(1);
}
delay(2000);
}
void testdrawtriangle(void) {
display.clearDisplay();
for(int16_t i=0; i<max(display.width(),display.height())/2; i+=5) {
display.drawTriangle(
display.width()/2 , display.height()/2-i,
display.width()/2-i, display.height()/2+i,
display.width()/2+i, display.height()/2+i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(2000);
}
void testfilltriangle(void) {
display.clearDisplay();
for(int16_t i=max(display.width(),display.height())/2; i>0; i-=5) {
// The INVERSE color is used so triangles alternate white/black
display.fillTriangle(
display.width()/2 , display.height()/2-i,
display.width()/2-i, display.height()/2+i,
display.width()/2+i, display.height()/2+i, SSD1306_INVERSE);
display.display();
delay(1);
}
delay(2000);
}
void testdrawchar(void) {
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.cp437(true); // Use full 256 char 'Code Page 437' font
// Not all the characters will fit on the display. This is normal.
// Library will draw what it can and the rest will be clipped.
for(int16_t i=0; i<256; i++) {
if(i == '\n') display.write(' ');
else display.write(i);
}
display.display();
delay(2000);
}
void testdrawstyles(void) {
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F("Hello, world!"));
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
display.println(3.141592);
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.print(F("0x")); display.println(0xDEADBEEF, HEX);
display.display();
delay(2000);
}
void testscrolltext(void) {
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println(F("scroll"));
display.display(); // Show initial text
delay(100);
// Scroll in various directions, pausing in-between:
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
}
void testdrawbitmap(void) {
display.clearDisplay();
display.drawBitmap(
(display.width() - LOGO_WIDTH ) / 2,
(display.height() - LOGO_HEIGHT) / 2,
logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
display.display();
delay(1000);
}
#define XPOS 0 // Indexes into the 'icons' array in function below
#define YPOS 1
#define DELTAY 2
void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {
int8_t f, icons[NUMFLAKES][3];
// Initialize 'snowflake' positions
for(f=0; f< NUMFLAKES; f++) {
icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width());
icons[f][YPOS] = -LOGO_HEIGHT;
icons[f][DELTAY] = random(1, 6);
Serial.print(F("x: "));
Serial.print(icons[f][XPOS], DEC);
Serial.print(F(" y: "));
Serial.print(icons[f][YPOS], DEC);
Serial.print(F(" dy: "));
Serial.println(icons[f][DELTAY], DEC);
}
for(;;) { // Loop forever...
display.clearDisplay(); // Clear the display buffer
// Draw each snowflake:
for(f=0; f< NUMFLAKES; f++) {
display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);
}
display.display(); // Show the display buffer on the screen
delay(200); // Pause for 1/10 second
// Then update coordinates of each flake...
for(f=0; f< NUMFLAKES; f++) {
icons[f][YPOS] += icons[f][DELTAY];
// If snowflake is off the bottom of the screen...
if (icons[f][YPOS] >= display.height()) {
// Reinitialize to a random position, just off the top
icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width());
icons[f][YPOS] = -LOGO_HEIGHT;
icons[f][DELTAY] = random(1, 6);
}
}
}
}
驱动OLED效果:
[localvideo]309637c0a5d4806bf6bc61286e45e370[/localvideo]
心得体会:
在完成这些任务的过程中,我深刻体会到了理论与实践的紧密结合。从最初的搭建环境到成功点亮Blink三色LED,再到串口打印出“Hello DigiKey & EEWorld!”,每一步都让我感受到了技术实现的成就感,但是第一步都是坎坷,也是提升。
学习IMU传感器和PDM麦克风技术时,我不仅掌握了基础知识,还通过调试和串口打印数据,加深了对这些技术的理解,因为之前从来没有做过这方面的,选做任务的挑战也让我受益匪浅,整个过程充满了探索和挑战,但正是这些经历,让我对嵌入式系统和物联网技术有了更深入的认识和体会。
- 2024-12-16
-
加入了学习《【Follow me第二季第4期】ARDUINO NANO RP2040 CONNECT》,观看 IMU功能演示与方向讲解-ARDUINO NANO RP2040 CONNECT
-
加入了学习《【Follow me第二季第4期】ARDUINO NANO RP2040 CONNECT》,观看 Blink RGB与UART功能演示-ARDUINO NANO RP2040 CONNECT
- 2024-12-15
-
加入了学习《【Follow me第二季第3期】》,观看 【Follow me第二季第3期】进阶任务:示例程序中新增命令打印信息
- 2024-12-13
-
加入了学习《【Follow me第二季第3期】任务汇总》,观看 【Follow me第二季第3期】任务汇总
- 2024-12-12
-
加入了学习《Follow me 第二季第3期成果视频》,观看 成果展示
- 2024-12-10
-
加入了学习《【Follow me第二季第1期】+ CPE基于VS-CODE PIO的都功能挂饰开发》,观看 【Follow me第二季第1期】+ CPE基于VS-CODE PIO的都功能挂饰开发
-
回复了主题帖:
STM32全球线上峰会,STM32N6重磅发布啦!
- 2024-12-07
-
加入了学习《FollowMe 第二季:3 - EK_RA6M5 开发板入门》,观看 EK-RA6M5 开发板入门
- 2024-12-05
-
评论了课程:
【2024 DigiKey 应用说】第三期:大模型时代的智能汽车
感谢分享大模型车端部署技术、生成式AI对汽车电子设计的交互革命、沉浸式交互可能性及自动驾驶核心技术视频,我对这个又有了深层次的理解与认识。
- 2024-11-06
-
上传了资料:
2024 DigiKey 创意大赛