Beetle RP2040

1. 产品简介

RP2040 是由树莓派设计开发的基于ARM Cortex-M0+的双核MCU芯片。拥有133 MHz时钟频率,264KB RAM以及支持USB1.1设备等特性。这些丰富配置可让用户专注于实现功能,无需花费时间和精力优化应用程序的大小。

Beetle-RP2040是基于RP2040芯片设计的微型开发板。尺寸仅27mm×20mm,很容易嵌入到小型设备或项目外壳中。并且,Beetle-RP2040采用了大焊盘设计,有效的降低了焊接导线的难度,即便是焊接新手,也能顺利的完成焊接。经过精心的挑选,Beetle-RP2040引出了8个GPIO端口,这8个GPIO具备I2C、UART、SPI、数字口、模拟口等功能,在项目应用上更加的灵活与方便。

2. 产品特性

3. 应用场景

4. 功能指示图

功能名称 功能说明 备注
USB下载口及供电口 下载程序及为主控供电。 接口形式:TYPE-C
RP2040 树莓派RP2040主控芯片。
复位按键 按下后,程序执行复位操作。
BOOT按键 按住BOOT按键USB插入电脑后为电脑会弹出优盘。 程序不能正常使用和下载的时候使用此按键
LED 板载用于测试的LED灯,接在13引脚。 蓝色

BOOT按键的使用:如果出现不能正常下载程序的情况,按住BOOT按键的同时插入电脑USB线。此时,电脑会弹出移动盘。在ArduinoIDE中端口选择变成了灰色,无法选择。但是,你依然可以像正常的下载Arduino程序。只是,不需要选择端口了。

只要下载过一次程序以后,RP2040就可以正常的选择端口了。

如下图:

5. 引脚排列图

引脚号 数字口 模拟口 UART I2C SPI 其它
GP0 D0 SPI0/MISO
GP1 D1 SPI0/CSn
GP2 D2 SDA1 SPI0/SCK 当使用SPI0的时候,I2C1不可用
GP3 D3 SCL1 SPI0/MOSI
GP4 D4 TX2 SDA0 当使用I2C0的时候,UART2不可用
GP5 D5 RX2 SCL0
GP28 D28 A2 TX1
GP29 D29 A3 RX1
GND 接地引脚
VCC 该引脚接在USB电源引脚,作为输出时电压为USB电压,通常为5V。作为输入使用时,供电电压可在3.3V~5V之间。
3V3 该引脚接在降压芯片输出端。可做为电源输出,电压值为3.3V 。

6. 产品尺寸图

7. 规格参数

8. Arduino使用教程

8.1 使用前准备

8.1.1 下载Arduino IDE

点击进入Arduino官网下载Arduino IDE 根据自己的电脑系统,选择适合的IDE包。

8.1.2 下载及安装SDK

8.1.2.1 添加json链接

点击菜单"File",然后点击"Preferences",进入Preferences窗口。

在Preferences窗口点击图中箭头所示的图标

在弹出的窗口中换行添加json链接:

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

8.1.2.2 下载SDK

按如下图所示的方法依次点击下拉菜单,进入“板卡管理”窗口。

在搜索框中输入"RP2040" ,查找并安装名为"Raspberry Pi Pico/RP2040"的SDK。如下图箭头所示。

8.1.2.3 选择开发板

点击Tools菜单,如下图方式选择“DFRobot Beetle RP2040”开发板。

至此,Beetle RP2040 SDK安装完成。

8.2 点亮LED

8.2.1 功能说明

在Beetle RP2040的主芯片左上角板载有一颗LED灯,旁边标注了一个丝印 “L”。这颗LED灯作用是快速验证主控板和代码。如图所示:

与ArduinoUNO的LED配置一致,Breetle RP2040的LED也接在13引脚。这样,你可以直接使用ArduinoIDE中的Blink例程。

下面例程中,将介绍点亮这颗板载LED。

8.2.2 示例程序

程序功能:让板载的LED灯按一秒的间隔闪烁。

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);//设置引脚为输出模式
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); //为端口写高电平
  delay(1000);                    // 延时一秒钟
  digitalWrite(LED_BUILTIN, LOW);  //为端口写低电平  
  delay(1000);                   //延时一秒    
}

8.2.3 程序执行结果

板载的LED灯按1秒的间隔时间反复闪烁。

8.3 数字引脚

Beetle RP2040共引出8个GPIO,每个GPIO均可作为数字输入和输出使用。功能如下表:

引脚编号 Arduino数字口 输出 输入 PWM 内部上拉电阻
GP0 D0
GP1 D1
GP2 D2
GP3 D3
GP4 D4
GP5 D5
GP28 D28
GP29 D29

8.3.1 写数字引脚

硬件连接

示例程序

程序功能:让连接在GP0的LED灯按一秒的间隔闪烁。

int digital_test =0; 

void setup() {
  pinMode(digital_test, OUTPUT); //设置引脚为输出模式
}

void loop() {
  digitalWrite(digital_test, HIGH); //高电平点亮LED
  delay(1000);                    
  digitalWrite(digital_test, LOW); //低电平熄灭LED  
  delay(1000);                       
}

程序执行结果

程序下载完成后,连接在GP0的LED灯将按一秒的间隔闪烁。如LED不亮,可对照连线图检查硬件连接是否有误。

8.4 读数字引脚

数字引脚在作为输入时,需要对端口电平设置上拉或者下拉,将端口稳定为高电平或者低电平,以确保端口电平的稳定性。RP2040可使用外部上拉和内部上拉两种方式。

8.4.1 外接上拉电阻

硬件连接

示例程序

程序功能:按下接在P0口的按键后,板载的LED灯亮起,松开后LED灯熄灭。

const int buttonPin = 0;     
const int ledPin = 13;      

int buttonState = 0;         

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);//将按键端口设置为输入.
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, LOW);
  } else {
    digitalWrite(ledPin, HIGH);
  }
}

程序执行结果

程序下载完成后,按下连接在GP0的按键KEY后,板载的LED灯亮起,松开后LED灯熄灭。如LED不亮,可对照连线图检查硬件连接是否有误,或电阻值是否用错。

8.4.2 内部上拉电阻

在上个例程中使用了R1做为外部上拉电阻,以此来确保端口的稳定性。在RP2040芯片内部,具有设置内部上拉电阻功能。此时,可取消R1外部上拉电阻,简化硬件电路的搭建。

硬件连接

示例程序

程序功能:使用语句pinMode(buttonPin, INPUT_PULLUP)将端口GP0设置为内部上拉。按下接在GP0口的按键后,板载的LED灯亮起,松开后LED灯熄灭。

const int buttonPin = 0;     
const int ledPin = 13;      

int buttonState = 0;         

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP); //将按键端口设置为输入,并内部上拉。
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, LOW);
  } else {
    digitalWrite(ledPin, HIGH);
  }
}

程序执行结果

程序下载完成后,按下连接在GP0的按键KEY后,板载的LED灯亮起,松开后LED灯熄灭。

pinMode(buttonPin, INPUT_PULLUP)改为pinMode(buttonPin, INPUT)取消内部上拉,并重新下载程序后,板载LED常亮,工作异常。说明端口支持内部上拉。经逐一测试,Beetle RP2040的8个端口均支持内部上拉。

8.5 读模拟引脚

Beetle RP2040拥有2路ADC引脚,分别为GP28(A2)和GP29(A3)。可读取外部模拟量,ADC范围为0~3.3V,ADC精度10位,对应范围为0~1023 。

硬件连接

R:电位器。取值100K以上。可调端接在GP28(A2)上,固定端分别接在3V3和GND端。

示例程序

程序功能:该程序将读取接在GP28(A2)上的电位器模块,然后在串口监视器中实时打印旋转电位器的值。

const int analogInPin = A2;  //硬件连接在GP28(A2)
int sensorValue = 0;        

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(analogInPin);
  Serial.println("sensor = ");
  Serial.println(sensorValue);
  delay(200);
}

程序执行结果

打开串口监视器,窗口打印出了当前电位器的值,旋转电位器的角度,打印的值也随之改变。

8.6 PWM输出(模拟写)

PWM(Pulse Width Modulation)是利用MCU的数字接口,采用脉冲宽度调制的方式来对模拟电路进行控制的一种非常有效的技术,广泛应用在灯光控制、电机速度控制、测量、通信到功率控制与变换的许多领域中。

Beetle RP2040的8个GPIO均支持PWM输出。在Arduino开发环境中,PWM输出定义为模拟输出,使用analogWrite() 函数进行控制。PWM值的范围为0~255 。

下方示例将演示使用PWM驱动板载LED灯呈现呼吸灯状态。该示例无需外部硬件连接。

示例程序

程序功能:使用PWM驱动板载LED灯呈现呼吸灯状态。

void setup(){
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop(){

byte value;

  for (value=0; value<255; value++)
  { 
    analogWrite(LED_BUILTIN, value);
    delay(10);
  } 

  for (value=255; value>0; value--)
  { 
    analogWrite(LED_BUILTIN, value);
    delay(10);
  }  
}

程序执行结果

程序下载完成后,板载的绿色LED发光的强度呈现出逐渐变亮然后逐渐变弱的呼吸的状态。

8.7 舵机控制

PWM不仅可用于驱动LED灯光和电机。还可用于舵机驱动。Arduino官方提供了舵机专用库。可用于控制舵机的转动角度。

下方例程将说明在Beetle RP2040中如何驱动舵机。

硬件连接

示例程序

程序功能:让接在GP3端口的舵机从0度转动到90度,然后再从90度转到180度。循环往复。

#include <Servo.h>

Servo myservo; 

void setup() {

  myservo.attach(3,500,3500);  // 设置舵机接入的端口号为D3

}

void loop() {

  int pos;

  for (pos = 0; pos <= 180; pos += 1) { 
    myservo.write(pos);             
    delay(15);                       
  }

  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);              
    delay(15);                       
  }

}

程序执行结果

舵机从0度转动到90度,然后再从90度转到180度,来回往复运动。

8.8 UART通信

在Arduino开发环境中,Beetle RP2040定义了3组UART通讯接口:UART0、UART1、UART2。USB转串口定义为UART0,与UART1、UART2不冲突。

引脚号 UART功能 引脚其它功能
GP4 Serial2 / TX2 SDA0
GP5 Serial2 / RX2 SCL0
GP28 Serial1 / TX1 A2
GP29 Serial1 / RX1 A3
USB Serial

以下是“pins_arduino.h”文件中对UART接口的定义。

#define PIN_SERIAL1_TX (28u)
#define PIN_SERIAL1_RX (29u)

#define PIN_SERIAL2_TX (4u)
#define PIN_SERIAL2_RX (5u)

下方例子将演示使用UART1读取UART接口传感器的值。并在ArduinoIDE的串口监视器打印出来。在本例中,使用了环境传感器(SKU:SEN0500)。该传感器支持UART和I2C两种通讯方式,可检测紫外线、光线强度、温湿度及大气压强五项环境参数。

环境传感器商品链接:

环境传感器-传感器模组-DFRobot创客商城

环境传感器WIKI链接:

DFROBOT SEN0500 Fermion:多功能环境传感器 产品资料 使用教程

硬件连接

在本例中,使用的是环境传感器的UART通讯方式,需连接UART端口,连线方式如下:

BeetleRP2040:GP29(RX) (连接) 环境传感器:TX(T)

BeetleRP2040:GP28(TX) (连接) 环境传感器:RX(R)

BeetleRP2040:3V3 (连接) 环境传感器:3V3

BeetleRP2040:GND (连接) 环境传感器:GND

软件准备

示例程序

代码功能:读取环境传感器的值,并串口打印读取到的值。

#include "DFRobot_EnvironmentalSensor.h"

DFRobot_EnvironmentalSensor environment(/*addr =*/SEN050X_DEFAULT_DEVICE_ADDRESS, /*s =*/&Serial1); //定义接传感器的UART接口

void setup()
{
  environment.begin();  //初始化传感器
  Serial1.begin(9600); //定义接传感器的UART接口波特率
  Serial.begin(9600); //定义USB转串口接口波特率
}

void loop()
{
  Serial.println("-------------------------------");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_C));
  Serial.println(" ℃");
  Serial.print("Temp: ");
  Serial.print(environment.getTemperature(TEMP_F));
  Serial.println(" ℉");
  Serial.print("Humidity: ");
  Serial.print(environment.getHumidity());
  Serial.println(" %");
  Serial.print("Ultraviolet intensity: ");
  Serial.print(environment.getUltravioletIntensity());
  Serial.println(" mw/cm2");
  Serial.print("LuminousIntensity: ");
  Serial.print(environment.getLuminousIntensity());
  Serial.println(" lx");
  Serial.print("Atmospheric pressure: ");
  Serial.print(environment.getAtmospherePressure(HPA));
  Serial.println(" hpa");
  Serial.print("Altitude: ");
  Serial.print(environment.getElevation());
  Serial.println(" m");
  Serial.println("-------------------------------");
  delay(500);
}

程序执行结果

打开ArduinoIDE串口监视器,监视器窗口正确打印出了传感器的数据。

8.9 I2C通信

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

Beetle RP2040提供了2组I2C通讯接口:I2C0和I2C1。引脚对应关系如下:

引脚号 I2C功能 引脚其它功能
GP2 I2C1/SDA1 SPI0/SCK
GP3 I2C1/SCL1 SPI0/MOSI
GP4 I2C0/SDA0 TX2
GP5 I2C0/SCL0 RX2

在Arduino中,I2C0做为默认使用的I2C接口,因为I2C1与SPI的部分引脚有重叠。但I2C0仅与不常用的UART2复用。

下方例子将演示使用I2C接口读取AHT20温湿度传感器的温度值和湿度值。该传感器支持3.3V~5V供电,I2C通讯,且有Arduino库可直接使用。其它I2C设备使用方式类似。

AHT20商品链接:

AHT20 WIKI链接:SEN0527_产品资料 使用教程 (dfrobot.com.cn)

硬件连接

AHT20: SDA引脚 (连接) BeetleRP2040: GP4引脚

AHT20: SCL引脚 (连接) BeetleRP2040: GP5引脚

AHT20: GND引脚 (连接) BeetleRP2040: GND引脚

AHT20: VCC引脚 (连接) BeetleRP2040: 3V3引脚

示例程序

编写程序前,先下载并安装AHT20库。库下载链接:https://gitee.com/dfrobot/DFRobot_AHT20

代码功能:读取AHT20温湿度传感器的温度值和湿度值,并串口打印。

#include "DFRobot_AHT20.h"

DFRobot_AHT20 aht20;

void setup(){
  Serial.begin(9600);
  while(!Serial){
  }
  uint8_t status;
  while((status = aht20.begin()) != 0){
    Serial.print("AHT20 sensor initialization failed. error status : ");
    Serial.println(status);
    delay(1000);
  }
}

void loop(){
  if(aht20.startMeasurementReady(true)){
    Serial.print("temperature(-40~85 C): ");
    Serial.print(aht20.getTemperature_C());
    Serial.print(" C, ");
    Serial.print(aht20.getTemperature_F());
    Serial.print(" F\t");
    Serial.print("humidity(0~100): ");
    Serial.print(aht20.getHumidity_RH());
    Serial.println(" %RH");
    delay(8000);
  }
}

程序执行结果

打开ArduinoIDE的串口监视器,将波特率设置为9600,窗口打印出了传感器读取的温湿度信息。

8.10 SPI通信

SPI接口,全称串行外设接口(Serial Peripheral Interface),是一种同步外设接口,它可以使单片机与各种外围设备以串行方式进行通信以交换信息。外围设备包括Flash 、RAM、LCD显示屏、A/D转换器和MCU等。

Beetle RP2040支持全双工SPI通讯接口,引脚分布如下:

引脚号 SPI接口功能 引脚其它功能
GP0 SPI0/MISO
GP1 SPI0/CSn
GP2 SPI0/SCK SDA1
GP3 SPI0/MOSI SCL1

下方例子将演示如何使用SPI驱动LCD显示屏显示图案。在本例中,使用了1.8" 128x160 TFT LCD 显示屏。

显示屏商品链接:

Fermion:1.8”128x160IPS TFT LCD显示屏-LCD/LED/OLED显示屏-DFRobot创客商城

显示屏WIKI链接:

1.8''_128*160_TFT_LCD_Display_with_MicroSD_Card (dfrobot.com.cn)

硬件连接

BeetleRP2040:GP0 (连接) 显示屏:MISO

BeetleRP2040:GP2 (连接) 显示屏:SCLK

BeetleRP2040:GP3 (连接) 显示屏:MOSI

BeetleRP2040:GP4 (连接) 显示屏:DC

BeetleRP2040:GP5 (连接) 显示屏:CS

BeetleRP2040:GP28 (连接) 显示屏:RES

BeetleRP2040:GND (连接) 显示屏:GND

BeetleRP2040:3V3 (连接) 显示屏:VCC

示例程序

代码实现的功能:让接在RP2040的SPI接口上的LCD显示屏显示文字“DFRobot”。

#include "DFRobot_GDL.h"

#define TFT_DC  4
#define TFT_CS  5
#define TFT_RST 28

DFRobot_ST7735_128x160_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);

void setup() {
  screen.begin();
  screen.setTextSize(1);
  screen.fillScreen(COLOR_RGB565_BLACK);
  screen.setFont(&FreeMono12pt7b);
  screen.setCursor(/*x=*/32,/*y=*/64);
  screen.setTextColor(COLOR_RGB565_LGRAY);
  screen.setTextWrap(true);
  screen.print("DFRobot");
}

void loop() {

}

执行结果

显示屏在正中位置显示了字符“DFRobot”。

9. 更多资料下载

DFR0959-RP2040芯片手册-EN.pdf

DFR0959-Beetle-RP2040(V1.0)-SCH.PDF

DFR0959_2D尺寸图-CAD.rar

DFR0959_2D-尺寸图.pdf

DFR0959_3D-STP.rar

PICO-datasheet.pdf

PICO-Python-SDK.pdf

10. 修改历史

文档修改历史

文档版本号 修改时间 修改人 修改内容
V1.0 2022.5.20 刘礼华 第一版发布

产品修改历史

产品版本号 修改时间 修改人 产品修改内容
V1.0 2022.5.20 刘礼华 第一版发布

更多

DFshopping_car1.png DFRobot商城购买链接