meiyao

  • 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 创意大赛

统计信息

已有231人来访过

  • 芯积分:301
  • 好友:4
  • 主题:81
  • 回复:138

留言

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


现在还没有留言