78浏览
查看: 78|回复: 3

[讨论] 【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板

[复制链接]
本帖最后由 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接口标准的,为了兼容,添加了两种接口定义。

原理图:

【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图1
接口说明:

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

【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图2

为方便可穿戴应用,扩展板底面预留了电池的连接口,使用ph2.0-2p连接线连接,注意电池的正负。
为避免使用的外设过多,功率不够,另外增加了5V电源的输入接口。

这个扩展板,在焊接上Beetle RP2350时,可以当一个扩展板,但当不焊接 Beetle RP2350时,可以当一个DFROBOT接口与Grove接口的桥接转换板。这样可以使用更多 的模块进行开发DIY了。

焊接时,为了方便拆下开发板,在开发板底下放了四个小电阻,可以把板子架高一点点,焊开发板时,锡放多一些;拆的时候,与低板有一定提空间,方便把锡吸走,用烙铁就可以了,否则,还要上焊台。

如下,是焊接好后的扩展板。

正面,DFROBOT标准接口,两个IO,一个IIC,一个UART。
【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图3
背面,Grove标准接口,多了一个SPI的接口,一个IO与A0复用。


【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图4

二、外设测试

1、RGB灯
【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图5

2、IIC数码管
【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图6

3、IO-LED
【Beetle 树莓派RP2350】支持DFROBOT与Grove接口兼容扩展板图7


三、测试代码

  1. #include "FastLED.h"
  2. #include <Arduino.h>
  3. #include "TM1650.h" //导入TM1650的库文件
  4. #include <Wire.h>
  5. #include <hardware/timer.h>
  6. #include <pico/time.h>
  7. int item = 0; //要显示的值
  8. TM1650 display;
  9. #define SDA_pin 4
  10. #define SCL_pin 5
  11. #define NUM_LEDS 36      // LED数量
  12. #define DATA_PIN 26      // 数据引脚
  13. #define BRIGHTNESS 64   // 亮度(0-255)
  14. uint8_t gHue = 0;         // 全局色调值
  15. uint8_t gPattern = 0;     // 当前模式
  16. CRGB leds[NUM_LEDS];
  17. volatile bool timerFired = false;
  18. repeating_timer_t timer;
  19. unsigned int count;
  20. // 定时器回调函数
  21. bool timerCallback(repeating_timer_t *rt) {
  22.     timerFired = true;
  23.    
  24.     digitalWrite(27, !digitalRead(27));
  25.     count++;
  26.     if(count>9999)
  27.     {
  28.       count=0;
  29.     }
  30.     return true; // 返回true表示继续重复
  31. }
  32. void setup() {
  33.   count=0;
  34.   Wire.begin();
  35.   pinMode(27, OUTPUT);//设置引脚为输出模式
  36.   FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
  37.   FastLED.setBrightness(BRIGHTNESS);
  38.   display.init();
  39.   add_repeating_timer_ms(500, timerCallback, NULL, &timer);// 100ms触发一次
  40. }
  41. void colorRunningLights() {
  42.   fadeToBlackBy(leds, NUM_LEDS, 20);
  43.   
  44.   static uint8_t startPos = 0;
  45.   for(int i = 0; i < 5; i++) {
  46.     leds[(startPos + i) % NUM_LEDS] = CHSV(gHue + (i * 85), 255, 255);
  47.   }
  48.   startPos = (startPos + 1) % NUM_LEDS;
  49.   gHue += 3;
  50. }
  51. void loop() {
  52.   char line[4] ={0};// "1234";
  53.   sprintf(line, "%4d", count);
  54.   display.displayOff();
  55.   display.displayString(line);
  56.   display.setBrightness(TM1650_MIN_BRIGHT);
  57.   display.displayOn();
  58.   colorRunningLights();
  59.   FastLED.show();
  60.   delay(20);
  61. }
复制代码


i-FOX  见习技师
 楼主|

发表于 昨天 11:36

扩展板已开源,有需要自取。https://oshwhub.com/146267c/beetlerp2350-standard-interface-
回复

使用道具 举报

无垠的广袤  初级技师

发表于 前天 14:11

大佬的设计太棒啦
回复

使用道具 举报

Z7AoUY2D2kq8  见习技师

发表于 前天 21:46

厉害厉害厉害厉害厉害厉害厉害厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail