本帖最后由 i-FOX 于 2025-5-6 12:27 编辑
一、设计初衷
Beetle RP2350的尺寸很小,导致可引出的引脚也比较少,在预留了一个串口、IIC、SPI后,只有4个IO可用,其中2个支持模拟,两个是串口2的。
一般默认的开发都是使用串口1,所以,把另一个串口用于GPIO的功能 。
其他引脚在芯片上无法引出。所以,单纯的引出这些引脚意义用处不大,还要增加很多扩展的功能才行,但这些扩展DFROBOT的很多模块都是支持的,为了不“重复造轮子”,这里直接把2.54的排针转换成DFROBOT模块的标准接口。
由于DFROBOT的SPI没有标准的接口定义,这里就先按自己的一个定义来设计 ,除了SPI的主要数据线外,增加2个引脚,用于复位或是中断功能。
如果IO不够用,可以使用Gravity:CH423 I2C模块,或是Gravity: MCP23017 I2C 16位数字IO扩展模块。
如果IIC不够用,可以使用Gravity: I2C分线模块
现在市面上的这种小模块,除了DFROBOT还有很多是Grove接口标准的,为了兼容,添加了两种接口定义。
原理图:

接口说明:
为防止两种接口的错误接插,在引出扩展板的电源处,增加保险。
DFROBOT的模块供电电压大多都是3.3~5V,而RP2350的IO电平是以3.3V为基准的,所以,接口上的电源采用3.3V
这里需要特别注意一下,DFROBOT也有两种接口,这两种接口的电源+-正好是反的,使用时需要注意。
Tricks for changing sensor cable pin mapping - DFRobot

为方便可穿戴应用,扩展板底面预留了电池的连接口,使用ph2.0-2p连接线连接,注意电池的正负。
为避免使用的外设过多,功率不够,另外增加了5V电源的输入接口。
这个扩展板,在焊接上Beetle RP2350时,可以当一个扩展板,但当不焊接 Beetle RP2350时,可以当一个DFROBOT接口与Grove接口的桥接转换板。这样可以使用更多 的模块进行开发DIY了。
焊接时,为了方便拆下开发板,在开发板底下放了四个小电阻,可以把板子架高一点点,焊开发板时,锡放多一些;拆的时候,与低板有一定提空间,方便把锡吸走,用烙铁就可以了,否则,还要上焊台。
如下,是焊接好后的扩展板。
正面,DFROBOT标准接口,两个IO,一个IIC,一个UART。

背面,Grove标准接口,多了一个SPI的接口,一个IO与A0复用。

二、外设测试
1、RGB灯

2、IIC数码管

3、IO-LED

三、测试代码
-
- #include "FastLED.h"
- #include <Arduino.h>
-
- #include "TM1650.h" //导入TM1650的库文件
- #include <Wire.h>
- #include <hardware/timer.h>
- #include <pico/time.h>
-
- int item = 0; //要显示的值
- TM1650 display;
- #define SDA_pin 4
- #define SCL_pin 5
-
- #define NUM_LEDS 36 // LED数量
- #define DATA_PIN 26 // 数据引脚
- #define BRIGHTNESS 64 // 亮度(0-255)
- uint8_t gHue = 0; // 全局色调值
- uint8_t gPattern = 0; // 当前模式
- CRGB leds[NUM_LEDS];
-
- volatile bool timerFired = false;
- repeating_timer_t timer;
- unsigned int count;
- // 定时器回调函数
- bool timerCallback(repeating_timer_t *rt) {
- timerFired = true;
-
- digitalWrite(27, !digitalRead(27));
- count++;
- if(count>9999)
- {
- count=0;
- }
- return true; // 返回true表示继续重复
- }
-
- void setup() {
- count=0;
- Wire.begin();
- pinMode(27, OUTPUT);//设置引脚为输出模式
- FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
- FastLED.setBrightness(BRIGHTNESS);
- display.init();
-
- add_repeating_timer_ms(500, timerCallback, NULL, &timer);// 100ms触发一次
- }
-
- void colorRunningLights() {
- fadeToBlackBy(leds, NUM_LEDS, 20);
-
- static uint8_t startPos = 0;
- for(int i = 0; i < 5; i++) {
- leds[(startPos + i) % NUM_LEDS] = CHSV(gHue + (i * 85), 255, 255);
- }
- startPos = (startPos + 1) % NUM_LEDS;
- gHue += 3;
- }
- void loop() {
-
- char line[4] ={0};// "1234";
- sprintf(line, "%4d", count);
- display.displayOff();
- display.displayString(line);
- display.setBrightness(TM1650_MIN_BRIGHT);
- display.displayOn();
-
- colorRunningLights();
- FastLED.show();
- delay(20);
-
-
- }
复制代码
|