概述

DFRobot FireBeetle是DFRobot小巧开发板系列,既可单独使用也可以堆叠使用,拥有不同的主控板与扩展板,多样的功能堆叠,简单的模块组合。 FireBeetle M0,与arduino M0一样使用了ATSAMD21G18 ARM Cortex M0+高性能低功耗芯片,主频高达48MHz,拥有32KB RAM和256KB Flash,分别是Atmega328的8倍和16倍。 FireBeetle M0搭载了16MB SPI Flash,其中内置了12MB U盘,大大简化用户的桌面系统与开发板的数据交互操作,并且支持基于SPI Flash的easy flash数据库,内置基于SPI Flash的字模,用户使用屏幕可直接显示中英日韩多国语言文字。 使用了更方便的Type-C接口,更舒适的卧式按钮,板载了WS2812 RGB灯,并且板载了FPC插座用于连接屏幕,使用屏幕从未如此简单。

特性

性能描述

引脚说明以及外观指示图

外观指示图

Board Overview

NOTE: NC不连接,VCC为电源电压输出(5V-USB 供电时输出USB电压, 3.7V-锂电池供电时输出电池电压)

电源及引脚

Power pins

FireBeetle M0为电源连接设计了丰富的接口

引脚介绍

这是微控制器的通用I / O引脚设置。
所有逻辑电压均为3.3V
几乎所有引脚均可进行PWM输出
所有引脚均可为中断输入

~4 Button

我们将~4引脚连接在UserButton,并在底部留出焊盘。
在特殊情况下您可以自行焊接引出后和其他引脚一样使用,但是这样会影响串口重置功能的使用。
请参考"使用教程-串口重置"

FPC对应线序

我们为连接屏幕设计了GDI接口,使用18pin-FPC线连接屏幕,用以便捷的使用屏幕,以下是GDI接口使用的引脚列表

FPC PINS FireBeetle M0 PINS Description
VCC 3V3 3.3V
BLK(PWM调光) 9 背光
GND GND GND
SCLK SCK SPI时钟
MOSI MOSI 主机输出,从机输入
MISO MISO 主机输入,从机输出
DC 7 数据/命令
RES 6 复位
CS 5 TFT片选
SDCS 3 SD卡片选
FCS A4 字库
TCS A3 触摸
SCL SCL IIC时钟
SDA SDA IIC数据
INT 2 INT
BUSY-TE 10 防撕裂引脚
X1 NC 自定义引脚1
X2 NC 自定义引脚2

warning_yellow.png NOTE: 请不要重复使用相关引脚

使用教程

驱动安装

FireBeetle-M0内置了USB通信,在绝大部分的设备中,都可以免驱使用,您可以跳过此步骤。

若您发现插上设备,驱动没有自动安装,也可以自行手动安装:[点击链接下载驱动程序]

根据您的系统,x86系统点击①,64位系统点击②,根据提示信息完成驱动安装。

Arduino IDE 编译环境配置

- 配置URL网址到Arduino IDE

打开Arduino IDE,点击'''File->Preferences''',如下图所示:

安装SDK1

在新打开的界面中,点击如下图红色圆圈中的按钮,

安装SDK2

将如下链接地址复制到新弹出的对话框中:http://download.dfrobot.top/firebeetle/package_firebeetle_index.json

安装SDK3
点击OK

- 更新板卡

打开Tools->Board:->Boards Manager,如下图所示:

安装SDK 4

Boards Manager会自动更新板卡,会在列表中看到FireBeetle-M0主板,点击安装如下图所示:

安装SDK 5

安装完成后,列表会显示已经安装FireBeetle-M0主板,如下图所示:

安装SDK 6

安装成功!

- 选择主板与串口

打开Tools->Board:选择FireBeetle M0主板

打开Tools->PORT:选择对应的串口

- 烧录程序

使用准备好的Blink程序进行一次烧录

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

在①中输入您编写的完整程序

点击②进行烧录

等待③窗口显示"Done uploading"等信息即烧录完成。

FireBeetle M0默认Blink灯连接到13,您可以到观察~13灯稳定闪烁,此时已经完成一次完整arduino烧录。

电池测量

锂电池在4.2V时为满电状态,使用过程中大部分时间维持在3.7V左右
最后下降到3.2V左右时电量耗尽,然后保护电路切断其供电。
为了简化此操作,我们在Li-ion接口上接入了一个双100K电阻分压器,并将其连接至A2。
如果您用完电池,您可能想知道电压是多少!使用以下代码:

#define VBATPIN A2
void setup() {
  // put your setup code here, to run once:
}
void loop() {
  float measuredvbat = analogRead(VBATPIN);
  measuredvbat *= 2;    // we divided by 2, so multiply back 
  measuredvbat *= 3.3;  // Multiply by 3.3V, our reference voltage
  measuredvbat /= 1024; // convert to voltage
  Serial.print("VBat: " ); Serial.println(measuredvbat);
}

显示结果如图
demo结果1

WS2812

M0板载的WS2812连接到Arduino的引脚~8 ,我们使用开源FastLED库,并将其设置为在pin8,您可以在以下位置找到内置的demo:

#include "FastLED.h"            // 此示例程序需要使用FastLED库

#define NUM_LEDS 1            // LED灯珠数量
#define DATA_PIN 8              // Arduino输出控制信号引脚
#define LED_TYPE WS2812         // LED灯带型号
#define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序

uint8_t max_bright = 128;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高

CRGB leds[NUM_LEDS];            // 建立光带leds

void setup() { 
  LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化光带 
  FastLED.setBrightness(max_bright);                            // 设置光带亮度
}

void loop() { 
  leds[0] = CRGB::Red;          // 设置光带中第一个灯珠颜色为红色,leds[0]为第一个灯珠,leds[1]为第二个灯珠
  FastLED.show();                // 更新LED色彩
  delay(50);                     // 等待500毫秒
}

U盘

如何简化主板与PC的数据交互?
FireBeetle M0内置了SPI Flash,可以像U盘一样连接电脑
您可以存储CSV、txt、jpg、wav等文件,实现datalogger、图片显示、音频播放等有趣的功能。
U盘模式
双击①RST即可进入U盘模式,此时②绿灯常亮
通过PC弹出U盘可退出U盘模式

EF数据库

EasyFlash是一款开源的轻量级面向嵌入式平台的Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上存储器。 您可以在此链接,了解关于EF数据库的详细信息。http://https://github.com/armink/EasyFlash FireBeetle M0内置了EasyFlash库,在以下位置找到相应demo

/*!
 * @file delValue.ino
 * @brief 设置一个键值对并通过key删除它
 * @n 实验现象:串口监视器打印出key对应value的长度
 *
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [LiYue](Yue.Li@dfrobot.com)
 * @version  V1.0
 * @date  2019-12-23
 * @get from https://www.dfrobot.com
 * @url https://github.com/cdjq/DFRobot_EasyFlash
 */

#include <DFRobot_EasyFlash.h>
DFRobot_EasyFlash easyflash;

char key[] = "key";               
char value[] = "value";
char valueRec[20];
size_t valueLen;
size_t getLen;
String data;
void setup()
{
  Serial.begin(115200);
  while(!Serial);
  easyflash.begin();
  easyflash.setValue(key,value);
  data = easyflash.getValue(key);
  getLen = easyflash.getValue(key,valueRec,20,valueLen);   //getValue()返回获得的key的长度,valueLen记录value的实际长度(获得长度小于等于用来接受的buffer长,所以可能小于实际长度)。
  Serial.print("The length of the value is :");Serial.println(getLen);
  Serial.println(data);
  easyflash.delValue(key);                        //根据key删除键值对
  getLen = easyflash.getValue(key,valueRec,20,valueLen);  //getValue()返回实际获得的长度,注意这里如果value已经删除,valueLen无法获得value的实际长度,所以valueLen的值不会变,传进来是多少函数运行完还是多少
  Serial.print("After delete the key&value.The length of the value is :");Serial.println(getLen);
}

void loop() {

}

内置字库

使用屏幕打印非英文字符时,经常会因为字库文件过大,使程序占用过多非必要的内存
在UNO、leonardo等主控中无法运行
而FireBeetle M0内置了字库,使庞大的字库文件无需占用flash,大大节省您宝贵的flash空间,轻松显示各国文字

使用方法:

以上位置可以找到使用demo
①烧录字库demo
②串口显示字符打印demo

CSV库

同样为了简化数据交互的难题,FireBeetle移植了CSV库

CSV
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

将数据以CSV文件格式储存在FireBeetle M0中,使用EXCEL编辑FireBeetle U盘中的CSV数据,您可以便捷的完成筛选数据、绘制图表等有趣的操作。

您可以在如图位置找到demo:

CSV

尺寸图

主板尺寸

常见问题

串口重置

程序错误导致串口丢失?我们设计了Blink重置功能,将程序重置为RGB blink,更方便的找回串口
串口重置
按住~4按钮后,单击RST,进入重置准备状态,并在此状态中会等待两秒
此时~8RGB灯在重置准备状态中会亮起红灯,同时~13LED灯也会常亮
串口重置2
红灯亮起后,单击~4,开始烧录RGB Blinkc程序,烧录时RGB亮起蓝灯,烧录状态非常快所以蓝灯通常一闪而过
烧录成功后RGB灯依次发出红绿蓝光,此时将板子连接电脑将正常弹出串口

引脚输出和上拉

使用上拉打开引脚作为输入的旧方法是使用

pinMode(pin, INPUT)

这是因为8位AVR芯片上的上拉选择寄存器与输出选择寄存器相同。 对于M0,您不能再这样做了!而是使用:

pinMode(pin, INPUT_PULLUP)

以此方式编写的代码仍然具有与AVR向后兼容的优势。对于不同的板类型,您不需要单独的版本

SerialUSB与Serial

大部分arduino示例是通过Serial.print进行调试并提供输出的,而官方Arduino M0内核的USB端口改为SerialUSB。

我们对此进行了改进,您使用Serial和SerialUSB时均可使用USB进行调试。而TX1、RX1与TX、RX通信接口我们分别设置为Serial1与Serial2。

其他问题

如果您对此产品有任何问题,欢迎通过qq或者论坛联系我们! 更多问题及有趣的应用,可以 [访问论坛]

更多

[点击链接下载芯片手册]
[点击链接下载原理图]