(SKU:DFR0492)FireBeetle Board-328P with BLE4.1
目录 |
概述
DFRobot FireBeetle萤火虫系列是专为物联网设计开发的低功耗控制器系列,此款FireBeetle低功耗蓝牙控制器集成蓝牙4.1 (Bluetooth Low Energy 4.1)技术和Arduino控制器于一身,在功能上类似于上一代的Bluno系列,但是功耗更低。
FireBeetle BLE 4.1向下兼容Bluno系列 (BLE 4.0) 产品线,使用更稳定的DIALOG蓝牙4.1芯片,在产品性能上优于Bluno,支持最大传输速率4Kbyte/s,支持低功耗(25uA POWER DOWN),可以直接将该产品应用于可穿戴、智能玩具等低功耗设备中。
FireBeetle BLE 4.1主板支持多个蓝牙设备级联,并兼容Bluno的使用方式,支持接近配对(KISS连接),按住主机的BOOT按钮并靠近要连接的Peripheral设备,就可以连接。
特性
- 支持Arduino IDE编程
- 支持BLE 4.1主从机切换
- 支持蓝牙串口数据透传
- 支持蓝牙点对点无线编程
- 支持蓝牙4.1多设备级联(最多4个)
- 支持Arduino蓝牙库(支持多蓝牙连接使用)
- 支持低功耗蓝牙(待机25uA;中断70uA)
- 蓝牙进入低功耗后(AT指令),在没有任何操作的情况下,10s后进入低功耗
- 双中断唤醒:
- * BLE4.1通过D2唤醒Atmage328P(高电平唤醒)
- * Atmage328P通过D3唤醒BLE4.1(低电平唤醒)
- 支持接近式配对方法(KISS连接)
- 支持蓝牙固件更新
- 支持USB充电
- 锂电池供电
- LED状态指示灯
技术规格
- 处理器:ATMEGA328P
- Bootloader:Arduino Pro or Pro Mini,ATmega328(3.3V , 8MHz)
- 工作电压:3.3V
- VCC输入/输出电压范围:3.7V~5.5V
- 锂电池电压:3.7 V锂电池
- 支持最大无线传输速率4Kbyte/s(多个设备连接时速度会相对慢一些)
- 支持低功耗:25uA(POWER DOWN);70uA(使能相关外部中断)
- 支持最大放电电流:600mA(LDO-3.3V电源输出)
- 支持最大充电电流:400mA
- 数字IO口:14
- 模拟IO输入:6
- SPI接口:1
- I2C接口:1
- UART接口:1
- LED_BUILTIN:D13
- 接口方式:2.54mm间距(排针/排母),默认不焊接
- 模块尺寸:58 × 29(mm)
PinOut
指示灯说明
- RX:串口数据接收指示灯,当接收到串口数据时,RX亮
- TX:串口数据发送指示灯,发送串口数据时,TX灯亮
- CHG:电池充电指示灯,在没有接锂电池时,CHG闪烁;充电状态下,CHG灯常亮;充电完毕,CHG常灭
- LINK:蓝牙连接指示灯,当蓝牙连接到设备后,连接成功后常亮3s,后每3s闪烁一次,断开连接后常灭
按键说明
- BOOT:蓝牙固件更新;接近连接使能开关;
- 更新固件:按下BOOT,然后上电(插上USB),进入固件更新模式,参见固件更新版块。
- 接近连接:在蓝牙正常工作下(上电状态下),按住主机BOOT,靠近从机蓝牙设备,连接蓝牙。
- RST:复位按键
注:NC不连接,VCC为电源电压输出(5V-USB 供电时, 3.7V-锂电池供电时)
Arduino使用教程
Arduino板卡选型
对于FireBeetle BLE4.1控制器,出于低功耗的目的,选择了Arduino Pro Mini @3.3V 8MHz Bootloader,下载时请选择此板卡。
特别注意:由于Pro Mini采用了8MHz晶振,处理速度较慢,在使用115200波特率时,可能会出现乱码、丢包等现象,建议使用9600bps。
低功耗Arduino测试程序
BLE 4.1通过AT+LOWPOWER=ON AT指令来让蓝牙进入低功耗,在低功耗模式下,蓝牙同样可以广播、连接。当蓝牙接收到数据后,会自动唤醒,并产生一个中断信号给328p芯片,这里的中断引脚连接到328p的D2,也即是代码中的中断0口。
#include <avr/sleep.h> void wakeup(){ sleep_disable(); delay(2000); } void lowpower(){ ADCSRA &= ~(1<<ADEN);/*关掉ADC*/ TWCR &= ~(1<<TWEN);/*关掉TWI*/ delay(10); set_sleep_mode(SLEEP_MODE_PWR_DOWN);/*设置睡眠模式为掉电模式*/ sleep_enable();/*启用睡眠模式*/ MCUCR |= (1<<BODS|1<<BODSE); MCUCR = MCUCR & (~(1<<BODSE)) | (1<<BODS); sleep_cpu();/*进入睡眠模式*/ } void setup() { attachInterrupt(0, wakeup, CHANGE); /*设置触发D2口的中断方式为电平变化,回调函数为wakeup(),即执行唤醒328p芯片的功能*/ lowpower(); } void loop() { lowpower(); delay(2000); }
- 在此低功耗模式下,FireBeetle Board-328P with BLE4.1主板整体功耗约70uA
- 如果关闭中断及其他外设,FireBeetle Board-328P with BLE4.1主板整体功耗约25uA
AT指令
AT即Attention,AT指令是用来配置蓝牙参数的通信指令。AT指令以AT开头,<CR+LF>回车和换行符结尾。
- 注意:<CR+LF>为回车换行符,请勿把它当做AT指令的一部分
AT指令表
AT指令 | 功能 | 参数<X> | 描述 |
AT+ROLE=<X> | 设置蓝牙模式 | “?”查询当前模式
“ROLE_CENTRAL”设置为中心 “ROLE_PERIPHERAL”设置为节点 |
返回当前模式
返回OK 返回OK |
AT+NETWORK=<X> | 设置网络模式 | “?”查询当前网络
“P2P”设置为单点连接 “STAR”设置为星型网络 |
返回当前网络模式
返回OK 返回OK |
AT+MIN_INTERVAL=<X> | 设置最小通信间隔 | “?”查询当前最小通信间隔
设置范围为10~99999ms |
返回当前最小通信间隔
返回OK |
AT+MAX_INTERVAL=<X> | 设置最大通信间隔 | “?”查询当前最大通信间隔
设置范围为10~99999ms |
返回当前最大通信间隔
返回OK |
AT+BIND=<X> | 设置BLE芯片绑定蓝牙地址 | “?”查询当前绑定的蓝牙MAC地址
0x0017ea9397e1 设置需绑定的蓝牙MAC地址 |
返回0x000000000000(默认值)
返回OK |
AT+CMODE=<X> | 设置BLE芯片连接模式 | “?”查询当前BLE芯片的连接模式
“UNIQUE”设置为指定连接 “ANYONE”设置为任意连接 |
返回当前连接模式
返回OK 返回OK |
AT+MAC=<X> | 查询BLE芯片的蓝牙地址 | “?”查询当前BLE芯片的蓝牙地址 | 返回当前BLE芯片的蓝牙地址 |
AT+NAME=<X> | 设置模块名称 | “?”查询当前模块的名称
“DFBLEduino2” |
返回设备名称
返回OK |
AT+SETTING=<X> | 改变或恢复默认设置 | “?”查询当前设备的设置状态
“DEFAULT”恢复初始设定 “DEFPERIPHERAL”恢复成从机模式的初始设定 “DEFCENTRAL”恢复成主机模式的初始设定 |
返回当前设备的设置状态
返回OK 返回OK 返回OK |
AT+USB_MONITOR=<X> | 设置是否打开USB监控 | “?”查询当前USB监控的状态
“ON”打开USB监控 “OFF”关闭USB监控 |
返回当前USB监控的状态
返回OK 返回OK |
AT+HELP=<X> | 获取AT帮助 | “ALL”查询所有AT指令的帮助 | 返回AT指令的说明信息 |
AT+NET_INF=<X> | 查看当前网络内的设备信息 | “?”查询当前网络内的设备信息 | 返回当前网络内的设备信息 |
AT+VERSION=<X> | 查询固件版本 | “?”查询当前设备的固件版本 | 返回当前设备的固件版本 |
AT+RSSI=<X> | 查看当前的RSSI值 | “?”查询当前的RSSI值 | 返回当前的RSSI值(未连接状态下返回-000) |
AT+P<n>=<X> | 查询和设置管脚P(n, n=0,1,2,3...)高低电平 | “?”先将IO口设置为输入模式,再检测IO口的高低电平
“1”将管脚设置为输出模式,且输出高电平 “0”将管脚设置为输出模式,且输出低电平 |
Eg:AT+P47=? (返回0或1)
Eg:AT+P47=1(返回OK) Eg:AT+P47=0 (返回OK) |
AT+WL=<X> | 查询或清除白名单 | “?”查询白名单
“NONE”清除白名单 |
返回白名单设备的MAC地址列表
返回OK |
AT+LOWPOWER=<X> | 查询和设置当前低功耗模式 | “?”查询当前低功耗模式
“ON”开启低功耗功能 “OFF”关闭低功耗功能 |
返回当前状态
返回OK 返回OK |
AT+EXIT | 退出AT指令模式 | 退出AT指令模式 | 返回OK |
通过AT指令配置BLE设备
1.打开Arduino IDE
2.在菜单->工具-> 串口中选择正确的设备
3.开启串口监视器(点击窗口的右上角的按键)
4.在两个下拉菜单中选择"No line ending"(①)和115200 baud(②)
5.在输入框中(③)输入"+++",并点击发送键(④)
6.如果收到“Enter AT Mode”(⑤),就证明已经进入AT指令模式.
7.在两个下拉菜单中选择"Both NL & CR"(①)和115200 baud(②)
8.在输入框中(③)输入AT指令,并点击发送键(④)
9.如果BLE配置成功,界面将会返回"OK"(⑤)
10.如果收到“ERROR CMD”,可以再发一遍。发送多次后如果还是“ERROR CMD”,你需要检查一下指令发送是否正确.(大写字母)
11.可以使用"AT+EXIT"来退出AT指令模式.
12.可以输入AT+HELP=ALL指令,查询所有的AT指令。
蓝牙配对
在使用BLE4.1系列产品时,需要对外围硬件有一定了解,几个关键的按键如下:
- BOOT:蓝牙固件更新/接近连接使能开关;
- 更新固件:按下BOOT,然后上电(插上USB),进入固件更新模式,参见固件更新版块。
- 接近连接:在蓝牙正常工作下(上电状态下),按住主机BOOT,靠近从机蓝牙设备,连接蓝牙。
- WAKEUP:唤醒按键,当使能了BLE4.1设备低功耗后,可以通过这个按键唤醒设备,也可以将该引脚连接到MCU的Pin脚进行唤醒
- RST:BLE4.1模块复位按键
使用BLE4.1模块时,可参考BLE4.1最小系统参考电路图:
手机蓝牙配对方法
- 玩转Bluno,Android端下载,IOS系统下载地址
- BlunoBasicDemo Android系统下载地址,Android源码地址(DFRobot出品)
- LightBlue IOS系统下载
- Blynk IOS系统下载
BLE4.1模块和手机端进行连接时,因为是BLE设备,和传统蓝牙设备(如蓝牙耳机)有区别,需要指定特征值以及设备服务ID,通过手机的设备管理器进行BLE的连接,会出现通信问题,因此,需要第三方软件。如DFRobot的《BlunoBasicDemo》,TI的《BLE Device Monitor》等等。这里将以DFRobot的《BlunoBasicDemo》为例。
- 通过AT+ROLE=ROLE_PERIPHERAL指令将BLE4.1模块设置成从机模式。 AT+NETWORK=P2P 设置为点对点模式,设置完成后,重启BLE4.1模块(可以直接断电重启)。
- 打开手机端BlunoBasicDemo软件,点击SCAN,可以看到扫描到BLE4.1设备:
- 点击该设备进行连接。连接成功后,显示Connected,同时BLE4.1设备LINK灯常亮3秒,之后每3秒闪烁一次。
- 在Data sending Area窗口输入要发送的数据:
- 点击Send Data,进行发送。打开Arduino串口助手,可以接收手机端发送的数据。
PC蓝牙配对方法
暂不支持通过自带蓝牙直接连接(与手机类似,PC端同样需要一个软件才能支持自带蓝牙的连接,很遗憾,暂时没资源做相关开发,只能暂时搁置)
点对点通信方法
BLE 4.1点对点连接的过程与BLE 4.0类似,只是多了一条设置点对点连接的命令。总共需要两个设备,一个设置成主机(ROLE_CENTRAL);另一个设置成从机(ROLE_PERIPHERAL)。通过AT+ROLE=ROLE_CENTRAL,AT+ROLE=ROLE_PERIPHERAL设置,主机设置方法如图:
然后通过AT+NETWORK=P2P命令将两个BLE 4.1设备设置成点对点连接方式(默认就是点对点连接模式)。
设置完成后,重启BLE4.1设备(可以直接断电重启),开始接近连接,当两边的LINK灯亮了,所明已经连接上了。
- 接近连接:按住主机设备的BOOT按钮,靠近要连接的从机设备,直至连接成功,LINK灯亮起。
备注:
- 任意两台设备第一次连接时,按住中心设备的BOOT按钮是为了将需要连接的设备录入白名单中。之后再次连接该设备就不需要再按BOOT按钮了
- BLE 4.1设备也可以与之前BLE 4.0设备(Bluno 1代)相连接,BLE 4.0只支持点对点连接,所以不用设置P2P命令,但BLE 4.1设备依旧需要设置P2P命令。
蓝牙星形网络链接
星型连接模式与点对点连接模式,在设置上唯一的区别在于,通过AT+NETWORK=STAR。设置完成后,重启设备,用主机(中心设备)连接从机设备(注意连接时需要按住主机的BOOT),当LINK灯亮时,说明已将节点设备录入中心设备的白名单。之后就会自动连接白名单中的设备。
注:星型连接模式只针对BLE4.1设备,不包括Bluno一代(BLE4.0)以及其他品牌的BLE设备。
星型连接模式下,蓝牙设备之间的通信采用了特殊的数据包压缩方式,可以通过Arduino库文件,使用Arduino主控进行数据间的交互,点击下arduino库文件,该库文件还需要Arduinojson库文件。设备连接时,先连入中心设备的从机设备ID为1,后面链接进入网络的ID以此叠加。示例代码中,给出了如何获取该设备在网络中的ID,以及收到数据后,数据的来源设备ID。建议在创建星型网络模型时,依次给设备上电。
#include <DFRobot_Bluno2.h> #include <ArduinoJson.h> DFRobot_Bluno2 blunoNet; int blunoID=0; void setup() { Serial.begin(9600); blunoNet.begin(Serial);//获取id } void loop() { uint8_t event=blunoNet.getEvent();//queue switch(event) { case EVENT_NETINFO: { eventNode e = blunoNet.popEvent(); StaticJsonBuffer<200> jsonBuffer; JsonObject& root = jsonBuffer.parseObject((const char *)e.payload); if (!root.success()) { return; } int s = root["r"].size(); for(int i = 0; i < s; i++){ if(root["r"][i]["s"].as<int>()){ blunoID = root["r"][i]["i"].as<int>(); break; } break; } } case EVENT_DATA: { eventNode e = blunoNet.popEvent(); blunoNet.sendPacket(e.src, blunoID, "hello12345678901234567890",26); break; } default: //no event { break; } } blunoNet.loop(); if(Serial.available()){ char message=Serial.read(); blunoNet.sendPacket(!blunoID, blunoID, &message,1); } }
蓝牙低功耗
BLE4.1进入低功耗后,功耗<10uA,同时可以进行BLE端的数据交互、设备的广播。通过AT+LOWPOWER=ON指令,使能BLE4.1设备低功耗功能。重启BLE4.1设备,10秒后进入低功耗。需要注意的是,进入低功耗后,如果MCU需要通过UART给BLE4.1设备发送数据,需要先通过WAKEUP唤醒蓝牙设备,否则UART端接收到的数据会出现乱码。
在低功耗模式没有任何操作的情况下,蓝牙会在10s后进入低功耗,这时可以通过中断方法唤醒蓝牙,或者通过蓝牙唤醒ATmega328P:
- BLE4.1通过P4_2 (D2) 引脚唤醒Arduino控制器(Atmage328P):高电平唤醒
- Arduino控制器 (ATmega328P) 通过WAKEUP(D3)使能引脚唤醒BLE4.1:低电平唤醒
无线下载
Bluno2的无线下载功能,完全兼容Bluno 1代 (BLE 4.0)。在使用上,只能点对点连接模式下进行,主机(中心设备)对从机设备的Arduino主控进行无线下载。
- 与P2P连接类似,一个设置成主机,插到电脑端;另一个设置成从机,配对链接后,就可以通过主机给从机下载代码了。
固件升级
DFRobot新出的BLE4.1设备保留原Bluno的固件升级方式,点击链接下载BLE4.1固件升级工具,BLE4.1固件更新地址点击下载。
升级步骤如下:
- 按住BOOT
- 将BLE4.1设备连接到电脑,插入USB,直到CHG和LINK灯交替闪烁后松开BOOT按键
- 打开Bluno2 Firmware软件,选择对应的串口号
- 选择需要更新的固件,固件格式是.img
- 点击下载,有时会卡在99%,观察CHG,只要CHG开始单闪,证明已经下载完成,可以拔掉USB。
常见问题
问: 程序无法下载怎么办?!!! |
- 答: 程序无法下载的原因有很多:
- 基础检查:供电、板型、COM口等是否正确
- 由于使用蓝牙串口通信,可能是蓝牙已占用串口,请断开当前所有的蓝牙连接,重新插拔上电,请重新下载
- 可能由于设备串口已被占用,请拔掉所有控制器的外设,重新编译下载
- 可是由于Arduino IDE本身发生了崩溃,请断开所有蓝牙(包括手机),关掉所有Arduino IDE软件,拔掉USB线。然后重新打开后再测试。(重启大法能解决60%的设备问题)
- 可能由于FireBeetle上328P内的Bootloader丢失,请尝试重烧ATmega32p的Bootloader
- 可能由于蓝牙BLE 4.1固件问题,请尝试重烧固件,参考上一章
问: 插上电脑后,设备管理器中显示为Arduino UNO COM x,我该如何选择板型 |
- 答: 默认COM名称为Arduino UNO,请根据板子不同的bootloader选择对应的板型,例如:FireBeetle BLE4.1,选择Arduino Pro Mini 3.3V@ 8MHz
问: 蓝牙ID号总是随着连接先后变动,无法确定,怎么办 |
- 答: 目前蓝牙的ID号是根据连接顺序的先后来确定的,依次为ID1、ID2、ID3、ID4,还不支持改动,请按照所需顺序连接,主机(中心设备ID0)
问: 有时候,接收到的蓝牙数据会有乱码等现象?为什么?115200的波特率 |
- 答: FireBeetle BLE4.1 使用3.3V Pro Mini的bootloader,8MHz晶振,高波特率模式下,可能会有问题,这是3.3V Pro Mini本身Bootlaoder的问题,建议更换低波特率,例如9600bps。注意,请用AT指令去同时配置蓝牙的波特率。
问: 支持HID、ibeacon、树形网络功能吗? |
- 答:HID、ibeacon以及树形网络功能正在开发中,敬起期待。
问: 如何给FireBeetle主板供电? |
- 答: 点击链接,查看FireBeetle萤火虫系列主板供电问题
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。
尺寸图
- pin脚间距:2.54mm
- 安装孔间距:24mm/53mm
- 安装孔尺寸:3.1mm
- 主板尺寸:29.00mm×58.00mm
- 板厚:1.6mm