注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
mingzhe123的个人空间 https://home.eeworld.com.cn/space-uid-1166487.html [收藏] [复制] [分享] [RSS]
日志

任务一:搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld ...

已有 209 次阅读2024-11-30 22:50

2024年得捷电子和eeworld论坛联合举办的Follow me活动第二季已经进行到第4期,有幸再次参见,趁着这次周末有时间,将任务做了。

对于Arduino,并不是很陌生,之前也是用ESP32、ESP8266做了不少好玩的东西。但对于主控为树莓派系列的MCU,但使用Arduino开发还是第一次接触,虽然我也有树莓派4

本次任务除了申请官方指定的Arduino® Nano RP2040 Connect,还申请了另外一块开发板RASPBERRY PI PICO 2,帮助更好的完成任务,并碰撞出更多的灵感。

开发板简介

Arduino Nano RP2040 Connect开发板集成了 Raspberry Pi Foundation 开发的 RP2040 微控制器与 u-blox NINA-W102 Wi-Fi 和蓝牙无线电模块,以及一个丰富的先进传感器甚至能够支持人工智能算法。事实上,该板包括一个支持语音激活功能的数字麦克风、一个六轴惯性运动传感器 (IMU)、一个小型 RGB LED 和广泛可用的闪存 (16 MB),甚至能够满足最苛刻的要求应用程序。

新板从 Raspberry Pi RP2040 继承了对 MicroPython 和 C/C++ 语言的编程支持,两者均基于为 Raspberry Pi Pico 板开发的 SDK。与 Arduino 系列中的所有其他板一样,最新添加的产品支持本地编程环境,例如著名的 Arduino IDE(现在为 2.0 版)。

框架图

开发板框图如图 1 所示。核心由 RP2040 微控制器表示,能够通过经典的 USB 连接与主机开发和调试环境进行通信,并通过四通道 SPI 串行高速存储器与 16-MB 外部闪存进行通信。速度接口。3.3V 电源由 MP2322 稳压器提供,输入源可从 USB 端口 (V USB ) 或外部电源 (V IN ) 中选择。NINA W102 Wi-Fi/蓝牙模块通过 I 2连接到 microC、SPI、UART接口,连接RGB LED。至于其他传感器,MEMS麦克风通过脉冲密度调制(PDM)数字音频接口连接到micro,而六轴运动传感器和认证模块通过I 2 C总线连接。以 12 MHz 运行的外部 MEMS 振荡器提供时钟脉冲。

 

 

                                                                                                                                                                                                                                                                      图 1:开发板框图

组件

该板的主要组件在图 2 中突出显示。首先,我们有 RP2040 芯片,这是一个基于 ARM Cortex M0+ 的 32 位双核微控制器,工作频率为 133 MHz,并配有一个集成的 264-KB SRAM 存储器。该 MCU 的卓越性能和高效率使其能够支持使用 TinyML、TensorFlow Lite 或 Edge Impulse 开发的机器学习算法。除了对 MicroPython 的全面支持(从 2021 年 7 月开始提供)外,该板还为机器视觉项目提供免费的 OpenMV 许可证。RP2040 微控制器提供的功能包括:

  • 直接内存访问控制器
  • USB 1.1 控制器和 PHY,具有主机和设备支持
  • 8 个可编程 IO 状态机
  • 用于扩展外设支持的可编程 IO
  • 具有内部温度传感器的四通道 ADC,0.5-MS/s,12 位转换
  • SWD调试
  • 两个片上 PLL,用于生成 USB 和内核时钟
  • 多种低功耗模式支持
  • USB 1.1 主机/设备
  • 内部稳压器提供核心电压
  • 先进的高性能总线/先进的外围总线

                                                                                                                                                                                                                                                                                         图 2:电路板的主要组成部分

在 MCU 之后,此卡的第二个优势无疑是连接性,它通过 u-blox NINA W102 无线电模块实现,这是一种廉价且易于适应的设备。该模块还增加了四个模拟 GPIO(RP2040 只有四个模拟引脚),使总数达到八个,与其他 Arduino Nano 板一致。配备集成天线的无线电模块基于双核 Xtensa LX6 CPU,可以使用 SWD 接口和位于板背面的特殊焊盘独立于 RP2040 进行编程。在实践中,NINA W102 模块使用与 ESP32 模块相同的 CPU,ESP32 模块是最受创客欢迎的硬件平台之一,还有 Arduino 和 Raspberry Pi。RGB LED 连接到无线电模块,可以使用为模块本身开发的相同库 (WiFiNINA) 驱动。物联网应用中使用的连接需要高度的安全性,以便在所有操作条件下保持传输数据的一致性,并防止来自外部的潜在攻击。为此,设计人员采用了功能强大的加密协处理器,即已在 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)的硬件支持以及网络关键管理支持。设计人员包括一个功能强大的加密协处理器,即已在 Arduino MKR 系列板上使用的 Microchip ATECC608A。加密协处理器的特点是功耗特别低,提供对安全启动的支持、对非对称签名的硬件支持、验证、密钥协商、对对称算法(SHA-256 和 HMAC、AES-128)的硬件支持以及网络关键管理支持。

传感器设备包括 ST LSM6DSOX 六轴 IMU,它将 3D 加速度计和 3D 陀螺仪与专用机器学习核心相结合。该组件主要用于“永远在线”操作要求特别低功耗的移动市场,具有以下技术特性:

  • 3D 陀螺仪,±2-/±4-/±8-/±16-g 满量程
  • 3D 加速度计,±125-/±250-/±500-/±1,000-/±2,000-dps 满量程
  • 先进的计步器、计步器和计步器
  • 显着运动检测、倾斜检测
  • 标准中断:自由落体、唤醒、6D/4D 定向、单击和双击
  • 可编程有限状态机:加速度计、陀螺仪和外部传感器
  • 机器学习核心
  • 嵌入式温度传感器

该设备可以使用专用的 Arduino LSM6DSOX 库轻松编程。

另一个相关的传感器是全向数字麦克风,可用于声音激活、音频控制,甚至人工智能语音识别。MP34DT05 麦克风实时捕捉和分析声音,可用于为任何项目创建语音界面。ST MP34DT05-A 是一款超紧凑、低功耗、全向、数字 MEMS 麦克风,内置电容感应元件和 I2C 接口。能够检测声波的传感元件采用 MEMS 工艺制造,而 IC 接口采用 CMOS 工艺制造,可在外部以 PDM 格式提供数字信号。MP34DT05-A 是一款低失真数字麦克风,具有 64-dB 的信噪比和 –26-dBFS ±3-dB 的灵敏度。可以使用专用的 Arduino PDM 库对该设备进行编程。

关于可编程 I/O 引脚,该板提供 8 个模拟输入引脚和 22 个数字 I/O 引脚(其中 20 个可配置为 PWM 发生器或外部中断)。引脚 13 上还提供了一个内置用户 LED。图 3显示了 Arduino Nano RP2040 连接板的完整引脚排列,该板也可提供预安装的插头引脚。引脚布局井井有条,所有模拟和电源引脚都在左侧接头上,数字引脚在右侧接头上。如图 1 所示,RP2040 MCU 支持 UART、SPI 和 I 2 C 通信。

图 3:电路板引脚排列

Raspberry Pi Pico 2是一款树莓派官方设计的低成本,高性能的微控制器开发板,具有灵活数字接口。硬件上,采用 Raspberry Pi 官方自主研发的 RP2350 微控制器芯片,搭载了双ARM Cortex M33或Hazard3处理器,高达 150MHz 的运行频率,内置了 520KB 的 SRAM 和 4MB 的内存,还板载有多达 26 个多功能的 GPIO 引脚。软件上,可选择树莓派提供的 C/C++ SDK,或者使用 MicroPython 进行开发。
其主要特点包括:

RP2350 微控制器芯片
双 Cortex-M33 或 Hazard3 处理器,最高频率可达 150MHz
520KB 的 SRAM 和 4MB 的板载闪存
USB 1.1,支持设备和主机模式
低功耗睡眠和休眠模式
通过 USB 大容量存储进行拖放编程
26× 多功能 GPIO 引脚,其中 3 个可用于 ADC
2× SPI, 2× I2C, 2× UART, 3× 12 位 500ksps 模数转换器(ADC),24× 可控 PWM 通道
2× 定时器,带 4 个警报,1× AON 定时器
温度传感器
3 × 可编程 IO (PIO) 块,总共 12 个状态机,用于自定义外设支持
灵活、用户可编程的高速 IO
可以模拟 SD 卡和 VGA 等接口

引脚图和设计文件

 

开发环境搭建

话不多说,开始进行开发环境搭建。

在arduino IDE中配置RP2040开发环境

    2.1】打开arduino IDE,点击File,然后点击首选项

 

 

 

2.2】将链接 javascript:; 复制到其他开发板管理器地址中

 

 

 

单击“确定”

  2.3】进入开发板管理器中 安装RP2040。在搜索框中搜索RP2040,点击IN STALLED,弹出的窗口,点击OK,等待安装完成(我这个示先安装过)

   

3】安装完成之后就可以使用Arduino® Nano RP2040 Connect与RASPBERRY PI PICO 2了。

   

 

任务一基础:

         搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!

        首先了解一下硬件资源,板子上自带了5颗LED灯,包括一颗电源灯,还有一颗RGB灯,最后一颗为通信指示灯。本次任务我适用RGB灯,其电路如下图,但是这几个脚直接接到内置的wifi模块上,查看资料后发现,可以直接通过封装好的库函数WiFiNINA调用其控制函数控制其RGB灯。

       串口部分基础任务中直接走虚拟串口与PC直接通信。这部分和软件调试使用同一个usb口,因此不需要额外增加电路。

 

基础代码:

#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);

}

 任务一进阶:

  任务一进阶适用PICO2开发板与Arduino Nano RP2040 Connect,其主要原理是PICO2的按键通过串口控制Arduino Nano RP2040 Connect开发板上的RGB 灯,其系统架构图如下图所示:

 

其主要代码如下:

PICO2代码:

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;

}

Arduino Nano RP2040 Connect代码:

#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){} //清空串口缓存 
  } 
}

总结:

 树莓派的MCU,通过arduino来开发难度降低了很多,用户只需要调动封装好的库函数即可。但是有一点要吐槽一下,本来是个及其简单的程序,适用arduino IDE开发却需要很长的编译时间,实在不敢恭维,后期有时间尝试一下VS Code。

任务视频:

6e78ba689815c74cde103e114c042655

 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章