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. 产品特性
-
树莓派RP2040主芯片;
-
2M FLASH储存空间;
-
迷你外形尺寸,仅27mm×20mm;
-
沉金大焊盘,方便焊接;
-
支持C++、MicroPython、Arduino C编程;
-
8个GPIO引出,支持I2C×2、UART×2、SPI×1、数字口×8、模拟口×2;
-
板载BLINK_LED灯;
-
TYPE-C数据接口;
-
支持USB 1.1设备;
3. 应用场景
-
可编程灯光控制,家电控制;
-
舞台道具控制;
-
桌面设备;
-
节点数据采集及AI分析;
-
电脑USB设备;
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. 规格参数
-
主芯片:树莓派RP2040
-
主频率:133MHz
-
RAM:264K
-
FLASH:2M
-
供电电压:DC 3.3V~5V
-
系统电平:3.3V
-
USB接口:TYPE-C
-
GPIO数量:×8
-
I2C数量:×2
-
UART数量:×2
-
SPI数量:×1
-
数字口数量:×8
-
模拟口数量:×2
-
复位按键:×1
-
BOOT按键:×1
-
LED:×1
-
USB 设备:USB 1.1
-
编程方式:C++、MicroPython、Arduino C、Mind+图形化编程
-
焊盘尺寸:4mm×3.5mm
-
焊盘间距:2.54mm
-
PCB材质:FR-4
-
PCB覆铜工艺:沉金
-
焊锡材质:环保无铅焊锡
-
产品尺寸(不含包装):27mm×20mm×4.91mm(最高处)
-
产品重量(不含包装):20g
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 写数字引脚
硬件连接
-
R:限流电阻,取值在220Ω~2KΩ之间。
-
LED:弯脚侧为LED正极,直脚侧为负极,GP0为高电平时点亮,低电平熄灭。
示例程序
程序功能:让连接在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 外接上拉电阻
硬件连接
-
R1:上拉电阻,将端口电平稳定在高电平,确保端口的稳定性,连接在3V3与GP0之间,阻值为10K。
-
R2:按键的限流电阻,连接在按键与GP0之间,阻值为220Ω。
-
KEY:控制按键,连接在限流电阻R2与GND之间。当按下时,将GP0拉到低电平。
示例程序
程序功能:按下接在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外部上拉电阻,简化硬件电路的搭建。
硬件连接
-
R:按键的限流电阻,连接在按键与GP0之间,阻值为220Ω。
-
KEY:控制按键,连接在限流电阻R2与GND之间。当被按下时,将GP0拉到低电平。
示例程序
程序功能:使用语句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中如何驱动舵机。
硬件连接
-
舵机棕色线或黑色线(GND):连接GND;
-
舵机红色线(VCC):连接VCC(不要连接3V3电源端,舵机功率较大,3.3V可能无法正常驱动舵机,且有损坏主控的危险);
-
舵机黄色线(信号):连接GP3;
示例程序
程序功能:让接在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两种通讯方式,可检测紫外线、光线强度、温湿度及大气压强五项环境参数。
环境传感器商品链接:
环境传感器WIKI链接:
DFROBOT SEN0500 Fermion:多功能环境传感器 产品资料 使用教程
硬件连接
在本例中,使用的是环境传感器的UART通讯方式,需连接UART端口,连线方式如下:
BeetleRP2040:GP29(RX) (连接) 环境传感器:TX(T)
BeetleRP2040:GP28(TX) (连接) 环境传感器:RX(R)
BeetleRP2040:3V3 (连接) 环境传感器:3V3
BeetleRP2040:GND (连接) 环境传感器:GND
软件准备
-
下载并安装DFRobot_RTU库
示例程序
代码功能:读取环境传感器的值,并串口打印读取到的值。
#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-Beetle-RP2040(V1.0)-SCH.PDF
10. 修改历史
文档修改历史
文档版本号 | 修改时间 | 修改人 | 修改内容 |
---|---|---|---|
V1.0 | 2022.5.20 | 刘礼华 | 第一版发布 |
产品修改历史
产品版本号 | 修改时间 | 修改人 | 产品修改内容 |
---|---|---|---|
V1.0 | 2022.5.20 | 刘礼华 | 第一版发布 |