【Follow me第二季第4期】任务一:搭建环境并开启第一步Blink三色LED / 串口打印He...
本帖最后由 mingzhe123 于 2024-12-1 12:14 编辑<p>2024年得捷电子和eeworld论坛联合举办的Follow me活动第二季已经进行到第4期,有幸再次参见,趁着这次周末有时间,将任务做了。</p>
<p>对于Arduino,并不是很陌生,之前也是用ESP32、ESP8266做了不少好玩的东西。但对于主控为树莓派系列的MCU,但使用Arduino开发还是第一次接触,虽然我也有树莓派4<img height="28" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smiling-face-with-open-mouth-and-cold-sweat_1f605.png" width="28" /></p>
<p>本次任务除了申请官方指定的<span style="color:#000000;">Arduino® Nano RP2040 Connect</span>,还申请了另外一块开发板<a>RASPBERRY PI PICO 2,<span style="color:#000000;">帮助更好的完成任务,并碰撞出更多的灵感。</span></a></p>
<p><span style="font-size:16px;"><strong><span style="color:#000000;">开发板简介</span></strong></span></p>
<p><span style="font-size:16px;"><strong><u>Arduino</u> Nano RP2040 Connect</strong></span>开发板集成了 Raspberry <a href="https://www.elecfans.com/tags/pi/" style="cursor:pointer; text-decoration:none; color:#4298ba; word-break:break-all" target="_blank"><u>Pi</u></a> Foundation 开发的 RP2040 <u>微控制器</u>与 u-blox NINA-W102 <u>Wi-Fi</u> 和<u>蓝牙</u>无线电模块,以及一个丰富的先进<u>传感器</u>甚至能够支持<u>人工智能</u><a href="https://www.elecfans.com/v/tag/2562/" style="cursor:pointer; text-decoration:none; color:#4298ba; word-break:break-all" target="_blank"><u>算法</u></a>。事实上,该板包括一个支持语音激活功能的数字麦克风、一个六轴惯性运动传感器 (IMU)、一个小型 RGB <a href="https://www.hqchip.com/app/1721" style="cursor:pointer; text-decoration:none; color:#4298ba; word-break:break-all" target="_blank"><u>LED</u></a> 和广泛可用的闪存 (16 MB),甚至能够满足最苛刻的要求应用程序。</p>
<p>新板从 Raspberry Pi RP2040 继承了对 Micro<u>Python</u> 和 C/<u>C++</u> 语言的<u>编程</u>支持,两者均基于为 Raspberry Pi Pico 板开发的 <u>SD</u>K。与 Arduino 系列中的所有其他板一样,<u>最新</u>添加的<u>产品</u>支持本地编程环境,例如著名的 Arduino IDE(现在为 2.0 版)。</p>
<h3>框架图</h3>
<p>开发板框图如图 1 所示。核心由 RP2040 微控制器表示,能够通过经典的 <u>USB</u> 连接与主机开发和调试环境进行<u>通信</u>,并通过四通道 SPI 串行高速存储器与 16-MB 外部闪存进行通信。速度<u>接口</u>。3.3V <u>电源</u>由 MP2322 稳压器提供,输入源可从 USB <u>端口</u> (V <sub>USB</sub> ) 或外部电源 (V <sub>IN</sub> ) 中选择。NINA W102 Wi-Fi/蓝牙模块通过 I <sup>2连接到 micro</sup>C、SPI、<u>UART</u>接口,连接RGB LED。至于其他传感器,<u>MEMS</u>麦克风通过脉冲密度调制(PDM)数字音频接口连接到micro,而六轴运动传感器和<u>认证</u>模块通过I <sup>2</sup> C总线连接。以 12 MHz 运行的外部 MEMS <u>振荡器</u>提供<u>时钟</u>脉冲。</p>
<div> </div>
<p> </p>
<div style="text-align: center;"></div>
<p> 图 1:开发板框图</p>
<h2>组件</h2>
<p>该板的主要组件在图 2 中突出显示。首先,我们有 RP2040 <u>芯片</u>,这是一个基于 ARM Cortex M0+ 的 32 位双核微控制器,工作频率为 133 MHz,并配有一个集成的 264-KB S<u>RAM</u> 存储器。该 <u>MCU</u> 的卓越性能和高效率使其能够支持使用 <u>T</u><a href="https://bbs.elecfans.com/group_715" style="cursor:pointer; text-decoration:none; color:#4298ba; word-break:break-all" target="_blank"><u>i</u></a>nyML、<u>TensorFlow</u> Lite 或 Edge Impulse 开发的<u>机器学习</u>算法。除了对 MicroPython 的全面支持(从 2021 年 7 月开始提供)外,该板还为<u>机器视觉</u>项目提供免费的 OpenMV 许可证。RP2040 微控制器提供的功能包括:</p>
<ul style=" list-style:outside none disc; color:#2f2f2f; white-space:normal; background-color:#ffffff">
<li style=" list-style:unset">直接内存访问<u>控制器</u></li>
<li style=" list-style:unset">USB 1.1 控制器和 PHY,具有主机和设备支持</li>
<li style=" list-style:unset">8 个可编程 IO 状态机</li>
<li style=" list-style:unset">用于扩展外设支持的可编程 IO</li>
<li style=" list-style:unset">具有内部<u>温度传感器</u>的四通道 <u>ADC</u>,0.5-MS/s,12 位转换</li>
<li style=" list-style:unset">SWD调试</li>
<li style=" list-style:unset">两个片上 PLL,用于生成 USB 和内核时钟</li>
<li style=" list-style:unset">多种低功耗模式支持</li>
<li style=" list-style:unset">USB 1.1 主机/设备</li>
<li style=" list-style:unset">内部稳压器提供核心电压</li>
<li style=" list-style:unset">先进的高性能总线/先进的外围总线</li>
</ul>
<div>
<div style="text-align: center;"><a style="cursor:pointer; color:#4298ba; word-break:break-all"></a></div>
<p> 图 2:电路板的主要组成部分</p>
</div>
<p>在 MCU 之后,此卡的第二个优势无疑是连接性,它通过 u-blox NINA W102 无线电模块实现,这是一种廉价且易于适应的设备。该模块还增加了四个<u>模拟</u> GPIO(RP2040 只有四个模拟引脚),使总数达到八个,与其他 Arduino Nano 板一致。配备集成<u>天线</u>的无线电模块基于双核 Xtensa LX6 <a href="https://www.elecfans.com/v/tag/132/" style="cursor:pointer; text-decoration:none; color:#4298ba; word-break:break-all" target="_blank"><u>CPU</u></a>,可以使用 SWD 接口和位于板背面的特殊焊盘独立于 RP2040 进行编程。在实践中,NINA W102 模块使用与 <u>ESP32</u> 模块相同的 CPU,ESP32 模块是最受<u>创客</u>欢迎的<u>硬件</u>平台之一,还有 Arduino 和 Raspberry Pi。RGB LED 连接到无线电模块,可以使用为模块本身开发的相同库 (WiFiNINA) 驱动。物联网应用中使用的连接需要高度的安全性,以便在所有操作条件下保持传输数据的一致性,并防止来自外部的潜在攻击。为此,设计人员采用了功能强大的加密协<u>处理器</u>,即已在 Arduino MKR 系列板上使用的 <u>Microchip</u> ATECC608A。加密协处理器的特点是功耗特别低,提供对安全启动的支持、对非对称签名的硬件支持、验证、密钥协商、对对称算法(SHA-256 和 HMAC、AES-128)的硬件支持以及网络关键管理支持。物联网应用中使用的连接需要高度的安全性,以便在所有操作条件下保持传输数据的一致性,并防止来自外部的潜在攻击。为此,设计人员采用了功能强大的加密协处理器,即已在 Arduino MKR 系列板上使用的 Microchip ATECC608A。加密协处理器的特点是功耗特别低,提供对安全启动的支持、对非对称签名的硬件支持、验证、密钥协商、对对称算法(SHA-256 和 HMAC、AES-128)的硬件支持以及网络关键管理支持。物联网应用中使用的连接需要高度的安全性,以便在所有操作条件下保持传输数据的一致性,并防止来自外部的潜在攻击。为此,设计人员采用了功能强大的加密协处理器,即已在 Arduino MKR 系列板上使用的 Microchip ATECC608A。加密协处理器的特点是功耗特别低,提供对安全启动的支持、对非对称签名的硬件支持、验证、密钥协商、对对称算法(SHA-256 和 HMAC、AES-128)的硬件支持以及网络关键管理支持。设计人员包括一个功能强大的加密协处理器,即已在 Arduino MKR 系列板上使用的 Microchip ATECC608A。加密协处理器的特点是功耗特别低,提供对安全启动的支持、对非对称签名的硬件支持、验证、密钥协商、对对称算法(SHA-256 和 HMAC、AES-128)的硬件支持以及网络关键管理支持。设计人员包括一个功能强大的加密协处理器,即已在 Arduino MKR 系列板上使用的 Microchip ATECC608A。加密协处理器的特点是功耗特别低,提供对安全启动的支持、对非对称签名的硬件支持、验证、密钥协商、对对称算法(SHA-256 和 HMAC、AES-128)的硬件支持以及网络关键管理支持。</p>
<p>传感器设备包括 ST LSM6DSOX 六轴 IMU,它将 3D 加速度计和 3D <u>陀螺仪</u>与专用机器学习核心相结合。该组件主要用于“永远在线”操作要求特别低功耗的移动市场,具有以下技术特性:</p>
<ul style=" list-style:outside none disc; color:#2f2f2f; white-space:normal; background-color:#ffffff">
<li style=" list-style:unset">3D 陀螺仪,±2-/±4-/±8-/±16-g 满量程</li>
<li style=" list-style:unset">3D 加速度计,±125-/±250-/±500-/±1,000-/±2,000-dps 满量程</li>
<li style=" list-style:unset">先进的计步器、计步器和计步器</li>
<li style=" list-style:unset">显着运动<u>检测</u>、倾斜检测</li>
<li style=" list-style:unset">标准中断:自由落体、唤醒、6D/4D 定向、单击和双击</li>
<li style=" list-style:unset">可编程有限状态机:加速度计、陀螺仪和外部传感器</li>
<li style=" list-style:unset">机器学习核心</li>
<li style=" list-style:unset"><u>嵌入式</u>温度传感器</li>
</ul>
<p>该设备可以使用专用的 Arduino LSM6DSOX 库轻松编程。</p>
<p>另一个相关的传感器是全向数字麦克风,可用于声音激活、<u>音频</u>控制,甚至人工智能<u>语音识别</u>。MP34DT05 麦克风实时捕捉和分析声音,可用于为任何项目创建语音界面。ST MP34DT05-A 是一款超紧凑、低功耗、全向、数字 MEMS 麦克风,内置<u>电容</u>感应元件和 <u>I2C</u> 接口。能够检测声波的传感元件采用 MEMS 工艺制造,而 <a href="https://m.hqchip.com/app/1726" style="cursor:pointer; text-decoration:none; color:#4298ba; word-break:break-all" target="_blank"><u>IC</u></a> 接口采用 CMOS 工艺制造,可在外部以 PDM 格式提供<u>数字信号</u>。MP34DT05-A 是一款低失真数字麦克风,具有 64-dB 的信噪比和 –26-dBFS ±3-dB 的灵敏度。可以使用专用的 Arduino PDM 库对该设备进行编程。</p>
<p>关于可编程 I/O 引脚,该板提供 8 个模拟输入引脚和 22 个数字 I/O 引脚(其中 20 个可配置为 PWM 发生器或外部中断)。引脚 13 上还提供了一个内置用户 LED。图 3显示了 Arduino Nano RP2040 连接板的完整引脚排列,该板也可提供预安装的插头引脚。引脚布局井井有条,所有模拟和电源引脚都在左侧接头上,数字引脚在右侧接头上。如图 1 所示,RP2040 MCU 支持 UART、SPI 和 I <sup>2</sup> C 通信。</p>
<div>
<div style="text-align: center;"><a style="cursor:pointer; color:#0f769f; word-break:break-all"></a></div>
<p style="text-align: center;">图 3:电路板引脚排列</p>
<p><strong><span style="font-size:16px;">Raspberry Pi Pico 2</span></strong>是一款树莓派官方设计的低成本,高性能的微控制器开发板,具有灵活数字接口。硬件上,采用 Raspberry Pi 官方自主研发的 RP2350 微控制器芯片,搭载了双ARM Cortex M33或Hazard3处理器,高达 150MHz 的运行频率,内置了 520KB 的 SRAM 和 4MB 的内存,还板载有多达 26 个多功能的 GPIO 引脚。软件上,可选择树莓派提供的 C/C++ SDK,或者使用 MicroPython 进行开发。<br />
其主要特点包括:</p>
<p>RP2350 微控制器芯片<br />
双 Cortex-M33 或 Hazard3 处理器,最高频率可达 150MHz<br />
520KB 的 SRAM 和 4MB 的板载闪存<br />
USB 1.1,支持设备和主机模式<br />
低功耗睡眠和休眠模式<br />
通过 USB 大容量存储进行拖放编程<br />
26× 多功能 GPIO 引脚,其中 3 个可用于 ADC<br />
2× SPI, 2× I2C, 2× UART, 3× 12 位 500ksps 模数转换器(ADC),24× 可控 PWM 通道<br />
2× 定时器,带 4 个警报,1× AON 定时器<br />
温度传感器<br />
3 × 可编程 IO (PIO) 块,总共 12 个状态机,用于自定义外设支持<br />
灵活、用户可编程的高速 IO<br />
可以模拟 SD 卡和 VGA 等接口</p>
<h4>引脚图和设计文件</h4>
<p> </p>
<div style="text-align: center;"></div>
<p><span style="font-size:16px;"><strong>开发环境搭建</strong></span></p>
<p>话不多说,开始进行开发环境搭建。</p>
<p>在arduino IDE中配置RP2040开发环境</p>
<p> 2.1】打开arduino IDE,点击File,然后点击首选项</p>
<p> </p>
<div style="text-align: center;"> </div>
<p> </p>
<p>2.2】将链接 <a href="https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json" target="_blank">https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json</a> 复制到其他开发板管理器地址中</p>
<p> </p>
<div style="text-align: center;"> </div>
<p> </p>
<p>单击“确定”</p>
<p> 2.3】进入开发板管理器中 安装RP2040。在搜索框中搜索RP2040,点击IN STALLED,弹出的窗口,点击OK,等待安装完成(我这个示先安装过)</p>
<p> </p>
<p>3】安装完成之后就可以使用Arduino® Nano RP2040 Connect与<a>RASPBERRY PI PICO 2</a>了。</p>
<p> </p>
<p> </p>
<p><span style="font-size:16px;"><strong>任务一基础:</strong></span></p>
<p> 搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!</p>
<p> 首先了解一下硬件资源,板子上自带了5颗LED灯,包括一颗电源灯,还有一颗RGB灯,最后一颗为通信指示灯。本次任务我适用RGB灯,其电路如下图,但是这几个脚直接接到内置的wifi模块上,查看资料后发现,可以直接通过封装好的库函数<a style="Open Sans", "Lucida Grande", lucida, verdana, sans-serif; box-sizing:inherit; scrollbar-color:var(--color-scrollbar-body) transparent; letter-spacing:0.01em; color:var(--color-accent-4); cursor:pointer; transition:color 0.2s ease-out; white-space:normal; background-color:#ffffff"><span style="color:#000000;">WiFiNINA调用其控制函数控制其RGB灯。</span></a></p>
<p> 串口部分基础任务中直接走虚拟串口与PC直接通信。这部分和软件调试使用同一个usb口,因此不需要额外增加电路。</p>
<p> </p>
<p><span style="font-size:16px;"><strong>基础代码:</strong></span></p>
<pre>
<code class="language-cpp">#include <WiFiNINA.h>
//#include <Arduino.h>
void setup() {
Serial.begin(115200);
pinMode(LEDB, OUTPUT);
pinMode(LEDR,OUTPUT);
pinMode(LEDG,OUTPUT);
digitalWrite(LEDB,LOW);
digitalWrite(LEDR,LOW);
digitalWrite(LEDG,LOW);
Serial.println("The task began!!!");
Serial.println();
}
void loop() {
delay(2000);
digitalWrite(LEDB, HIGH);
digitalWrite(LEDG, LOW);
Serial.println("Hello DigiKey & EEWorld!");
delay(2000);
digitalWrite(LEDB, LOW);//状态翻转
digitalWrite(LEDG, HIGH);
}
</code></pre>
<p><span style="font-size:16px;"><strong> 任务一进阶:</strong></span></p>
<p> 任务一进阶适用PICO2开发板与<strong><u>Arduino</u> Nano RP2040 Connect</strong>,其主要原理是PICO2的按键通过串口控制<strong><u>Arduino</u> Nano RP2040 Connect</strong>开发板上的RGB 灯,其系统架构图如下图所示:</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">其主要代码如下:</p>
<p style="text-align: left;">PICO2代码:</p>
<pre>
<code class="language-cs">int val;
const int BUTTON_PIN = 21; // the number of the pushbutton pin
const int SHORT_PRESS_TIME = 500; // 500 milliseconds
// Variables will change:
int lastState = LOW;// the previous state from the input pin
int currentState; // the current reading from the input pin
unsigned long pressedTime= 0;
unsigned long releasedTime = 0;
char key_flag = 0;
void setup() {
Serial1.setRX(17);
Serial1.setTX(16);
Serial1.begin(115200); // opensserial port, sets data rate to 9600 bps
while(Serial.read()>= 0){}//clear serialbuffer
pinMode(25,OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial1.write(49);
}
void Key(void) {
delay(1);
}
void loop() {
delay(10);
// read the state of the switch/button:
currentState = digitalRead(BUTTON_PIN);
if(lastState == HIGH && currentState == LOW) // button is pressed
pressedTime = millis();
else if(lastState == LOW && currentState == HIGH) { // button is released
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if( pressDuration < SHORT_PRESS_TIME )
Serial.println("A short press is detected");
key_flag = !key_flag;
if(key_flag) {
Serial1.write(49);
Serial.println("49");
digitalWrite(25,LOW);
} else {
Serial1.write(50);
Serial.println("50");
digitalWrite(25,HIGH);
}
}
// save the the last state
lastState = currentState;
}</code></pre>
<p><u>Arduino</u> Nano RP2040 Connect代码:</p>
<pre>
<code class="language-cpp">#include <WiFiNINA.h>
int val;
void setup() {
Serial.begin(115200); // opensserial port, sets data rate to 9600 bps
Serial1.begin(115200); // opensserial port, sets data rate to 9600 bps
while(Serial1.read()>= 0){}//clear serialbuffer
while(Serial.read()>= 0){}//clear serialbuffer
pinMode(LEDB, OUTPUT);
pinMode(LEDR,OUTPUT);
pinMode(LEDG,OUTPUT);
digitalWrite(LEDB,LOW);
digitalWrite(LEDR,LOW);
digitalWrite(LEDG,LOW);
Serial.println("The pro task began!!!");
Serial.println();
}
void loop() {
if (Serial1.available() > 0) {
delay(100); // 等待数据传完
int numdata = Serial1.available();
val=Serial1.read();
Serial1.println(val);
if(val==49)
{
Serial.println("Test OK");
Serial.println(val);
// delay(2000);
digitalWrite(LEDB, HIGH);
Serial.println("Hello DigiKey & EEWorld!");
digitalWrite(LEDG, HIGH);
}
if(val==50)
{
Serial.println("Test OK!!!");
Serial.println(val);
// delay(2000);
digitalWrite(LEDB, LOW);
Serial.println("Turn off the lights!");
digitalWrite(LEDG, LOW);
}
while(Serial1.read()>=0){} //清空串口缓存
}
}</code></pre>
<p><span style="font-size:16px;"><strong>总结:</strong></span></p>
<p> 树莓派的MCU,通过arduino来开发难度降低了很多,用户只需要调动封装好的库函数即可。但是有一点要吐槽一下,本来是个及其简单的程序,适用arduino IDE开发却需要很长的编译时间,实在不敢恭维,后期有时间尝试一下VS Code。</p>
<p><span style="font-size:16px;"><strong>任务视频:</strong></span></p>
<p>232ff75a18e8790122d50b866d442195<br />
</p>
</div>
<p>论坛上线树莓派5了,赶紧申请 </p>
页:
[1]