Adafruit Feather 32u4 Bluefruit的使用

电子说

1.2w人已加入

描述

概述

羽毛是Adafruit的新开发板,就像它的名字一样,它轻巧,轻巧,可让您飞翔!我们将Feather设计为便携式微控制器内核的新标准。

开发板

这是 Adafruit Feather 32u4 Bluefruit -我们的“全能”标准一个‘Arduino兼容+内置USB和电池充电功能的低功耗蓝牙。带有BTLE模块的Adafruit Feather 32u4,随时可以摇滚! Feather系列中还有其他主板,请在此处查看。

蓝牙低功耗是最热门的新型低功耗,2.4GHz频谱无线协议。特别是,它是唯一可以与iOS一起使用而无需特殊认证的无线协议,并且所有现代智能手机均支持该协议。这使其非常适合在将使用iOS或Android手机或平板电脑的便携式项目中使用。在Mac OS X和Windows 8+中也支持该功能

开发板

在Feather 32u4的心脏处,时钟频率为8 MHz,逻辑电压为3.3V的ATmega32u4芯片设计方面,我们在Flora方面拥有丰富的经验。该芯片具有32K闪存和2K RAM,并带有内置USB,因此它不仅具有内置的USB到串行编程和调试功能,而无需类似FTDI的芯片,它也可以像鼠标一样工作,键盘,USB MIDI设备等。

开发板

为便于在便携式项目中使用,我们为3.7V锂聚合物电池中的任何一个添加了连接器,并内置了电池充电功能。您不需要电池,它可以直接从micro USB连接器正常运行。但是,如果您确实有电池,可以随身携带,然后插入USB进行充电。当Feather可用时,它将自动切换到USB电源。我们还将电池通过分压器连接到模拟引脚,因此您可以测量和监视电池电压以检测何时需要充电。

开发板

这里有一些方便的规格!像所有Feather 32u4一样,您将获得:

尺寸为2.0“ x 0.9” x 0.28“(51mm x 23mm x 8mm),而没有焊接头针。

作为(大? )羽毛-5.7克

ATmega32u4 @ 8MHz,具有3.3V逻辑/电源

3.3V稳压器,具有500mA峰值电流输出

USB本地支持,随附USB引导加载程序和串行端口调试

您还将获得大量引脚-20个GPIO引脚

硬件串行,硬件I2C,硬件SPI支持

7个PWM引脚

10个模拟输入

内置100mA锂聚合物充电器,带充电状态指示灯LED

插针#13红色LED,通用闪烁

电源/启用引脚

4个安装孔

重置按钮

羽毛32u4 Bluefruit LE 使用了多余的空间剩下来添加我们出色的Bluefruit BTLE模块和两个状态指示灯LED

Bluefruit LE的威力

Bluefru它的LE模块是Nordic的nRF51822芯片组,用多功能代码编程,可以完成很多工作!对于大多数人来说,他们将很高兴使用标准的Nordic UART RX/TX连接配置文件。在此配置文件中,Bluefruit充当数据管道,可以“透明”地从您的iOS或Android设备来回传输。您可以使用我们的iOS ApporAndroid应用程序,也可以编写自己的应用程序以与UART服务进行通信。

开发板的功能远远不只是通过空中发送字符串!得益于易于学习的AT命令集,您可以完全控制设备的行为,包括定义和操作自己的GATT服务和特性的能力,或更改设备宣传自己的方式以供其他低功耗蓝牙设备查看的能力。您还可以使用AT命令来查询芯片温度,检查电池电压等等,还可以检查连接RSSI或MAC地址等等。真的,在这里列出太久了!

使用Bluefruit App来启动您的项目

使用我们的BluefruitiOS ApporAndroid App,您可以快速获取自己的项目通过使用iOS或Android手机/平板电脑作为控制器原型化的项目。我们有一个彩色选择器,四元数/加速度计/陀螺仪/磁力计或位置(GPS),以及一个8键控制游戏手柄。可以通过BLE读取此数据,然后将其传输到ATmega32u4芯片中进行处理和控制

您还可以做更多的事情!

蓝果还可以像HID键盘一样(对于支持BLE HID的设备)

可以成为BLE心率监视器(BLE的标准配置文件)-您只需要添加脉冲检测电路

将其转换为UriBeacon,这是蓝牙LE信标的Google标准。只需为其供电,“朋友将在安装了UriBeacon应用程序的地方过滤指向附近任何设备的URL。

内置了无线引导加载功能,因此我们可以为您提供最新的最新固件的最新信息。使用任何Android或iOS设备获取更新并进行安装。这将更新BLE模块上的本机代码,以添加新的无线功能,而不对ATmega芯片进行编程。

开发板

已完全组装并经过测试,并带有USB引导加载程序,可让您在Arduino IDE中快速使用它。我们还会折腾一些接头,以便您可以将其焊接并插入无焊面包板上。锂电池,MicroSD卡和USB电缆不包括在内(但如果您要在商店中提供很多选择, d like!)

插脚

开发板

Feather 32u4 Bluefruit LE充满了微控制器的优势。还有很多引脚和端口。我们现在将带您参观它们!

开发板

开发板

DFU引脚在底部意外地标记为GND,对此感到抱歉!它应标记为DFU,请勿将其用作GND

电源引脚

开发板

GND -这是所有电源和逻辑的共同点

BAT -这是可选Lipoly电池进出JST插孔的正电压

USB -如果已连接,则是进出Micro USB插孔的正电压

EN -这是3.3V稳压器的使能引脚。它已上拉,因此请接地以禁用3.3V稳压器

3V -这是3.3V稳压器的输出,可提供500mA峰值

逻辑引脚

这是微控制器的通用I/O引脚组。所有逻辑均为3.3V

#0/RX -GPIO#0,还接收 Serial1 和中断#2的(输入)引脚

#1/TX -GPIO#1,还传输 Serial1 和中断#3

#2/SDA -GPIO#2,也是I2C(电线)数据引脚。默认情况下,此引脚上没有上拉电阻,因此当与I2C一起使用时,您可能需要2.2K-10K上拉电阻。也是中断#1

#3/SCL -GPIO#3,也是I2C(线)时钟引脚。默认情况下,此引脚上没有上拉电阻,因此当与I2C一起使用时,您可能需要2.2K-10K上拉电阻。可以执行PWM输出并充当中断#0。

#5 -GPIO#5,还可以执行PWM输出

#6 -GPIO#6,也可以做PWM输出和模拟输入 A7

#9 -GPIO#9,也可以模拟输入 A9 ,并且可以执行PWM输出。该模拟输入已连接至锂聚合物电池的分压器,因此请注意,由于电阻分压器,此引脚自然会“固定”在2VDC左右

#10 -GPIO# 10,也是模拟输入 A10 ,可以进行PWM输出。

#11 -GPIO#11,可以进行PWM输出。

#12 -GPIO#12,也可以是模拟输入 A11

#13 -GPIO#13,可以执行PWM输出并连接到USB插孔旁边的红色LED

A0至A5 -这些都是模拟输入以及数字I/O引脚。

SCK/MOSI/MISO -这些是硬件SPI引脚,也被Bluefruit LE模块使用。您可以将它们用作如果您不激活Bluefruit并保持BLE CS引脚为高电平,则为日常GPIO引脚。但是,我们确实建议让它们免费使用,因为应保留给Bluefruit使用。如果使用它们,请确保将其与可共享SPI总线的设备配合使用!如果需要,还可以使用AVR编程器对芯片进行重新编程。

Bluefruit LE模块+指示灯LED

开发板

由于Feather的尺寸较小,由于并非所有引脚都可以引出,因此我们使用它们来控制BLE模块

#8 -用作Bluefruit CS (片选)引脚

#7 -用作

#4 -作为Bluefruit IRQ (中断请求)引脚。 》

由于这些未带出,因此不存在意外使用它们的危险!

其他图钉!

顶侧

RST -这是Reset引脚,与grou相连并手动重置AVR,并手动启动引导加载程序

ARef -模拟参考引脚。通常,参考电压与芯片逻辑电压(3.3V)相同,但是如果您需要替代的模拟参考,请将其连接到此引脚并在固件中选择外部AREF。不能高于3.3V!

DFU -这是用于对Bluefruit模块进行无线更新的force-DFU(设备固件升级)引脚。您可能不需要使用它,但是如果需要升级,可以使用它!请查看 DFU Bluefruit升级页面以了解如何使用它。否则,请保持断开连接。

开发板

底侧

后面我们还有 SWDIO/SWCLK/RESET 引脚,这些引脚用于对Bluefruit LE模块本身进行编程。

SWD调试输入

通常,您不应该除非您出于某种原因要擦掉Bluefruit LE模块固件,否则请连接到 SWDIO 和 SWCLK 引脚,尽管这样做会刷新自己编写的完全自定义的固件映像完全自负风险,因为它将擦除Bluefruit固件!刷新固件或使用SWD接口将需要Segger J-Link EDU Mini之类的东西,才能通过nRF51822内部的调试控制器进行通信。/p》 出厂重置

重置按钮(不要与0.1“圆形 RST pin!)是出厂重置引脚,也很少使用,但是如果确实弄乱了它,则可以使用它将模块设置回出厂默认设置。引导设备启动时,将“ 重置”引脚连接到GND,以通过引导加载程序强制通过硬件强制恢复出厂设置。

开发板

装配体

我们出厂的Feathers经过了全面测试,但未连接标头-这使您在选择如何使用和配置Feather时更具灵活性

标题选项!

焊接时,有一些选择要考虑!

开发板

开发板

开发板

开发板

开发板

开发板

第一个选择是焊接普通的公头,这使您可以插入羽毛变成无焊面包板

开发板

开发板

开发板

另一种选择是使用插座母头。这不会让您将Feather插入面包板,但可以非常轻松地连接羽翼

我们也有“ slim”母头的版本短一些,并且形状更紧凑

开发板

开发板

开发板

最后,有“ Stacking Header”选项。这是两全其美的。您可以插入无焊面包板 并在顶部插入一个羽翼。但是它有点笨重

以普通标题进行焊接

开发板

准备标题栏:

如有必要,将标题栏剪切成一定长度。如果将其插入面包板,则焊接会更容易-长按针脚

开发板

开发板

开发板

开发板

添加分线板:

将分线板放置在插针上,以使短的插针穿过分线垫

然后焊接!

请务必焊接所有引脚以实现可靠的电接触。

(有关焊接的技巧,请务必查看我们的 优良焊接指南 )。

开发板

开发板

开发板

开发板

将另一条带焊接为

开发板

您完成了!目视检查焊点,然后继续进行下一步

在女性头上焊接

开发板

原位录音

对于插座,您需要将其绑在适当的位置,因此当您翻转电路板时,它们不会掉落

开发板

开发板

开发板

开发板

Flip&Tack Solder Fack&Tack Solder

After翻转,在每个条上焊接一个或两个点,以将接头“固定”到位

开发板

开发板

开发板

开发板

并焊接!

请务必焊接所有引脚以确保可靠的电接触。

(有关焊接的技巧,请务必查看我们的 优秀焊接指南 )。

开发板

开发板

开发板

您完成了!目视检查焊点,然后继续进行下一步

电源管理

开发板

电池+ USB电源

我们想制作羽毛连接到计算机以及通过电池轻松供电。羽毛有两种方式供电。您可以使用MicroUSB电缆(只需插入插孔)进行连接,Feather会将5V USB的电压降至3.3V。您也可以将4.2/3.7V锂聚合物(Lipo/Lipoly)或锂离子(LiIon)电池连接到JST插孔。这会使羽毛在可充电电池上运行。 为USB电源供电时,它将自动切换至USB供电,并以100mA的电流开始为电池(如果已连接)充电。 这种情况是“热插拔”式的,因此您始终可以将Lipoly保持为“备份”电源,只有在USB电源断开时才能使用。

JST连接器的极性与Adafruit LiPoly电池匹配。使用极性错误的电池可能会损坏您的羽毛

开发板

上面显示的是Micro USB插孔(左),Lipoly JST插孔(左上)以及3.3V稳压器和转换二极管(位于JST的右侧)插孔)和Lipoly充电电路(位于“重置”按钮的右侧)。还有一个 CHG LED,在电池充电时该指示灯会点亮。如果未连接电池,则该LED也会闪烁。

充电LED为由Lipoly充电器电路自动驱动。它将尝试检测电池,并期望将其安装。如果没有电池,则在使用电源时可能会偶尔闪烁一次,因为它正在尝试为(不存在的)电池充电。这不是有害的,而且完全正常!

电源

您在这里有很多电源选择!我们将引出 BAT 引脚(该引脚与lipoly JST连接器相连)以及 USB (如果已连接,则为USB + 5V)。我们还有 3V 引脚,该引脚具有3.3V稳压器的输出。我们使用500mA峰值SPX3819。虽然可以从中获得500mA的电流,但是由于5V会使稳压器过热,因此您不能连续从5V中获得。可以给ESP8266 WiFi芯片或XBee无线电供电是很好的,因为当前消耗是“尖峰”和零星的。

开发板

测量电池

如果用完电池,您可能想知道电压是多少!这样,您就可以知道电池何时需要充电。 Lipoly电池在4.2V时“达到极限”,并在3.7V左右保持不变,从而延长了电池的使用寿命,然后缓慢下降至3.2V左右,然后保护电路将其切断。通过测量电压,您可以快速确定何时到达3.7V以下

为方便起见,我们在 BAT 引脚上插入了一个双100K电阻分压器并将其连接到 D9 (又称模拟#9 A9 )。您可以读取此引脚的电压,然后将其加倍以获得电池电压。

下载:文件

复制代码

#define VBATPIN A9

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); #define VBATPIN A9

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);

当未插入电池时,此电压将在4.2V时“浮动”,由于lipoly充电器的输出,因此它不是检测电池是否已插入的好方法(没有简单的方法可检测电池是否已插入)

开发板

启用引脚

如果您想关闭3.3V稳压器,则可以使用 EN (可用)图钉。只需将此引脚连接到 Ground ,它将禁用3V稳压器。 BAT 和 USB 引脚仍将供电

备用电源选项

为羽毛供电的两种主要方法是将3.7/4.2V LiPo电池插入JST端口或 USB电源线。

如果您需要其他方式为Feather供电,则建议这样做:

对于永久性安装,请使用5V 1A USB墙适配器可让您插入USB电缆以提供可靠的电源

对于不希望使用LiPoly的移动设备,请使用USB电池组!

电压电源,请使用5V降压转换器,并将其连接到USB电缆的5V和GND输入端。

这是您不能执行的操作:

请勿使用碱性或镍氢电池并连接到电池端口-这会损坏LiPoly充电器,并且无法禁用充电器

请勿在7.4V的RC电池上使用电池端口 -这会破坏电路板

“羽毛” 不是为外部电源设计的-这是使电路板紧凑且成本低廉的设计决定。不建议使用,但在技术上可行:

将外部3.3V电源连接到3V和GND引脚。不建议这样做,这可能会导致意外行为,并且 EN 引脚将不再存在。而且,这不提供 BAT 或 USB 的电源,某些羽毛/机翼将这些引脚用于高电流使用。您可能最终会损坏Feather。

将外部5V电源连接到USB和GND引脚。不建议这样做,这可能会导致在插入USB端口时发生意外行为,因为您将为USB端口供电,这可能会混淆或损坏您的计算机。

Arduino IDE设置

您需要做的第一件事是下载最新版本的Arduino IDE。下载并安装后,您将需要使用 1.8版或更高版本作为本指南

Arduino IDE下载

strong》最新版本的Arduino IDE ,则需要启动IDE并导航到首选项菜单。您可以通过 Windows 或 Linux 中的 File 菜单或 OS上的 Arduino 菜单访问它X 。

开发板

将弹出一个对话框,如下所示。

开发板

我们将向新的其他董事会管理器URL 选项中添加一个URL。 URL列表以逗号分隔,您只需添加一次每个URL。新的Adafruit开发板和对现有开发板的更新将在每次打开时由开发板管理器自动提取。这些URL指向Board Manager用来建立可用和已安装板列表的索引文件。

要查找可以添加的URL的最新列表,您可以访问第三方板列表Arduino IDE Wiki上的URL。在此示例中,我们只需要向IDE添加一个URL,但是 您可以通过用逗号分隔 来添加多个URL。将下面的链接复制并粘贴到Arduino IDE首选项中的 Additional Boards Manager URLs 选项中。

https://adafruit.github.io/arduino-board-index/package_adafruit_index.json

开发板

以下是简短说明添加URL时,板管理器中将提供的每个Adafruit提供的软件包:

Adafruit AVR板-包括对Flora,Gemma,Feather的支持32u4,Trinket和Trinket Pro。

Adafruit SAMD板-包括对Feather M0和M4,Metro M0和M4,ItsyBitsy M0和M4,Circuit Playground Express,Gemma M0的支持和Trinket M0

Arduino Leonardo和Micro MIDI-USB -使用arcore项目为Flora,Feather 32u4,Micro和Leonardo添加了USB over MIDI支持。

如果要支持多个开发板,例如ESP8266和Adafruit,请在文本框中输入两个URL,并用逗号分隔( ,)

完成后,单击确定保存新的首选项设置。接下来,我们将研究使用Board Manager安装板。

现在继续下一步,实际安装板支持包!

使用Arduino IDE

由于Feather 32u4使用了以8 MHz运行的ATmega32u4芯片,因此您可以轻松地使其与Arduino IDE一起使用。许多库(包括像NeoPixels和display这样的流行库)在’32u4和8 MHz时钟速度下都可以很好地工作。

现在,您已经在Arduino IDE首选项中添加了适当的URL,您可以打开《导航到工具-》委员会菜单,从而使strong》委员会管理器。

开发板

一旦打开“董事会管理器”,请单击窗口左上角的类别下拉菜单,然后选择已贡献。然后,您将能够选择和安装由添加到首选项中的URL提供的板。在下面的示例中,我们正在安装对 Adafruit AVR板 的支持,但是对所有与板管理器一起安装的板也是如此。

下一步,退出并重新打开Arduino IDE 确保所有板卡均已正确安装。现在,您应该可以选择并上传到工具-》委员会菜单中列出的新委员会。

开发板

安装驱动程序(仅Windows)

插入Feather时,您可能需要安装驱动程序

单击下方以下载我们的驱动程序安装程序

下载Adafruit驱动程序安装程序

下载并运行安装程序

开发板

运行安装程序!由于我们也捆绑了SiLabs和FTDI驱动程序,因此您需要单击许可证

开发板

选择要安装的驱动程序:

开发板

点击安装进行安装

开发板

眨眼

现在,您可以上传第一个眨眼素描了!

在羽化32u4并等待操作系统识别它(只需几秒钟)。它将创建一个串行/COM端口,您现在可以从下拉列表中选择它,甚至将其“指示”为Feather 32u4!

开发板

现在加载眨眼示例

下载:文件

复制代码

// the setup function runs once when you press reset or power the board

void setup() {

// initialize digital pin 13 as an output.

pinMode(13, OUTPUT);

}

// the loop function runs over and over again forever

void loop() {

digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)

delay(1000); // wait for a second

digitalWrite(13, LOW); // turn the LED off by making the voltage LOW

delay(1000); // wait for a second

} // the setup function runs once when you press reset or power the board

void setup() {

// initialize digital pin 13 as an output.

pinMode(13, OUTPUT);

}

// the loop function runs over and over again forever

void loop() {

digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)

delay(1000); // wait for a second

digitalWrite(13, LOW); // turn the LED off by making the voltage LOW

delay(1000); // wait for a second

}

然后单击上载!就是这样,您可以在适应 delay()呼叫时看到LED闪烁速率的变化。

手动引导加载

如果您在引导加载程序中遇到“怪异”的地方,或者您上载的代码崩溃了并且无法自动执行-重新启动进入引导程序,双击RST 按钮返回到引导程序。红色LED会闪烁,因此您知道它处于引导加载程序模式。当Arduino IDE提示其尝试上传草图时,请双击右键,在状态栏中看到黄色箭头亮起并且 Uploading 。.. 文本时

开发板

不要单击之前的重置按钮,与其他引导加载程序不同,您希望在Arduino尝试上传时启动该引导加载程序

Ubuntu&Linux问题修复

如果您使用的是Linux,并且看到连接到服务器的延迟时间为几秒钟串行控制台,或者在连接时看到“ AT”和其他乱码,请按照此页面上的步骤进行操作。

安装BLE库

安装Adafruit nRF51 BLE库

要尝试我们的演示,您需要下载基于nRF51的模块(例如Adafruit BLE库)的Adafruit BLE库(又名Adafruit_BluefruitLE_nRF51)

您可以在github上查看代码,但是通过Arduino库管理器下载它可能更容易。

打开Arduino库管理器:

开发板

搜索 Adafruit BluefruitLE nRF51 库并安装

开发板

我们还提供了有关Arduino库安装的出色教程,网址为:

http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use

检查您会看到带有示例的库文件夹:

开发板

运行第一个示例

让我们从初学者项目开始,我们可以使用它进行基本测试。要打开ATCommand草图,请单击Arduino IDE中的文件》示例》 Adafruit_BluefruitLE_nRF51 文件夹,然后选择 atcommand :

开发板

这将在IDE,如下所示:

开发板

还没有上传草图!您必须先更改配置。

转到第二个标签为 BluefruitConfig.h 的标签,找到这些行

下载:文件

复制代码

// SHARED SPI SETTINGS

// ----------------------------------------------------------------------------------------------

// The following macros declare the pins to use for HW and SW SPI communication.

// SCK, MISO and MOSI should be connected to the HW SPI pins on the Uno when

// using HW SPI. This should be used with nRF51822 based Bluefruit LE modules

// that use SPI (Bluefruit LE SPI Friend)。

// ----------------------------------------------------------------------------------------------

#define BLUEFRUIT_SPI_CS 8

#define BLUEFRUIT_SPI_IRQ 7

#define BLUEFRUIT_SPI_RST 6 // Optional but recommended, set to -1 if unused // SHARED SPI SETTINGS

// ----------------------------------------------------------------------------------------------

// The following macros declare the pins to use for HW and SW SPI communication.

// SCK, MISO and MOSI should be connected to the HW SPI pins on the Uno when

// using HW SPI. This should be used with nRF51822 based Bluefruit LE modules

// that use SPI (Bluefruit LE SPI Friend)。

// ----------------------------------------------------------------------------------------------

#define BLUEFRUIT_SPI_CS 8

#define BLUEFRUIT_SPI_IRQ 7

#define BLUEFRUIT_SPI_RST 6 // Optional but recommended, set to -1 if unused

并将最后一行更改为:

下载:文件

复制代码

#define BLUEFRUIT_SPI_RST 4 // Optional but recommended, set to -1 if unused #define BLUEFRUIT_SPI_RST 4 // Optional but recommended, set to -1 if unused

(Bluefruit Feather在数字#4上已重置不是#6)

现在返回主选项卡 atcommand ,并查找以下代码行

下载:文件

复制代码

/* 。..hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); /* 。..hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

确保第二行没有注释(应该是)

现在好了可以上传到Bluefruit Feather!

如果您使用的是Ubuntu 15.04或其他Linux发行版,并在尝试将程序上传到板上时遇到错误,向上滚动至上一节中的Ubuntu和Linux问题修复程序

上传到羽毛Bluefruit LE

上传非常容易,首先请确保您已经如上所述,在木板下拉菜单中选择了 Adafruit 羽毛32u4 。此外,在 Ports (端口)菜单中,查找标有以下名称的端口:

开发板

现在单击Arduino IDE上的上载按钮(或文件菜单-》上载)

如果一切都很好,您将在状态栏中看到完成上传

开发板

上载到全新的板上/上载失败

如果您是第一次上载到新板上,或者上载失败,请按下 RESET 迷你按钮当您看到黄色箭头亮起并且状态栏中显示正在上传。.. 文本时,显示Feather 32u4 Bluefruit。当您看到红色LED闪烁时,您就知道引导加载程序正在运行。

开发板

在上传前不要单击重置按钮 ,与其他引导加载程序不同,您希望此引导加载程序在Arduino启动时运行尝试上传

运行草图

确定,再次检查是否选择了正确的端口

开发板

然后打开串行控制台。您将看到以下内容:

开发板

此草图从恢复出厂设置开始,然后查询BLE无线电以获取详细信息。如果您要调试无线电,这些详细信息将很有用。如果您看到上述信息,说明您正在工作! (请注意,日期和版本号可能会有所不同)

AT命令测试

现在您可以尝试一些 AT命令-查看学习指南的其余部分以获取完整列表。我们将从 AT + HWGETDIETEMP 开始,它将返回BLE芯片组的大致环境温度

开发板

开发板

确定,现在您知道如何与Feather 32u4 Bluefruit上传/测试/通信了。接下来,我们有一堆教程,您可以按照这些教程来检查蓝牙无线广播和应用程序。

对于以下所有示例,我们在各个模块之间共享相同的代码,因此不要忘记确保在上传之前将每个草图的BluefruitConfig.h中的RESET引脚设置为4,并通过检查

下载:文件

复制代码

/* 。..hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

/* 。..hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

配置!

在开始上传任何示例草图之前,您需要ll需要配置Bluefruit界面-有很多选项,因此请密切注意!

您拥有哪个板子?

Bluefruit名称下有一些产品:

开发板

如果您使用的是Bluefruit LE Shield,则您有一个 SPI连接的NRF51822 模块。您可以将它与 Atmega328 (与Arduino UNO或兼容),ATmega32u4 (与Arduino Leonardo兼容)或 ATSAMD21 (与Arduino Zero相兼容)和可能还有其他。

您的引脚排列为 硬件SPI ,CS = 8 ,IRQ = 7 ,RST = 4

开发板

Bluefruit Micro或Feather 32u4 Bluefruit

如果您拥有Bluefruit Micro或Feather 32u4 Bluefruit LE,则您的 ATmega32u4 芯片具有硬件SPI , CS = 8 ,IRQ = 7 ,RST =4

开发板

羽毛M0蓝果LE

如果您有羽毛M0蓝果LE,那么您带有硬件SPI 的 ATSAMD21 芯片,CS = 8 ,IRQ = 7 ,RST = 4

开发板

Bluefruit LE SPI朋友

如果您有独立模块,则可以灵活布线,但是我们强烈建议您使用硬件SPI ,CS = 8 ,IRQ = 7 ,RST = 4

您几乎可以将其与任何具有5或6个引脚的微控制器一起使用

开发板

开发板

开发板

Bluefruit LE UART Friend或Flora BLE

如果您有独立的UART模块,则可以灵活布线。但是,如果可能,我们建议硬件UART 。如果您不使用硬件UART,则可能需要使用流控制 CTS 引脚。还有一个 MODE 引脚

您可以将其与至少具有3个引脚的任何微控制器一起使用,但最好与具有硬件串行/UART功能的芯片一起使用!

配置使用的引脚

您将需要检查Bluefruit Config来设置将用于UART或SPI的引脚

每个示例草图都有一个带有配置的辅助选项卡细节。设置完成后,您将需要编辑草图并将其保存到自己的文档文件夹中。

开发板

常用设置:

您可以设置为通信缓冲区留出多少RAM,以及是否要具有完整的调试输出。调试输出在串行控制台上是“嘈杂的”,但很方便,因为您可以看到micro和BLE之间的所有通信

下载:文件

复制代码

// ----------------------------------------------------------------------------------------------

// These settings are used in both SW UART, HW UART and SPI mode

// ----------------------------------------------------------------------------------------------

#define BUFSIZE 128 // Size of the read buffer for incoming data

#define VERBOSE_MODE true // If set to ‘true’ enables debug output // ----------------------------------------------------------------------------------------------

// These settings are used in both SW UART, HW UART and SPI mode

// ----------------------------------------------------------------------------------------------

#define BUFSIZE 128 // Size of the read buffer for incoming data

#define VERBOSE_MODE true // If set to ‘true’ enables debug output

软件UART

如果您使用的是软件UART,则可以设置将用于RX的引脚, TX和CTS流量控制。某些微控制器只能使用哪些引脚!查看SoftwareSerial库文档以获取更多详细信息

下载:文件

复制代码

// SOFTWARE UART SETTINGS

#define BLUEFRUIT_SWUART_RXD_PIN 9 // Required for software serial!

#define BLUEFRUIT_SWUART_TXD_PIN 10 // Required for software serial!

#define BLUEFRUIT_UART_CTS_PIN 11 // Required for software serial!

#define BLUEFRUIT_UART_RTS_PIN -1 // Optional, set to -1 if unused // SOFTWARE UART SETTINGS

#define BLUEFRUIT_SWUART_RXD_PIN 9 // Required for software serial!

#define BLUEFRUIT_SWUART_TXD_PIN 10 // Required for software serial!

#define BLUEFRUIT_UART_CTS_PIN 11 // Required for software serial!

#define BLUEFRUIT_UART_RTS_PIN -1 // Optional, set to -1 if unused

硬件UART

如果您有硬件串行,则有一个“名称”,通常是Serial1-您可以在此处设置:

下载:文件

复制代码

// HARDWARE UART SETTINGS

#ifdef Serial1 // this makes it not complain on compilation if there‘s no Serial1

#define BLUEFRUIT_HWSERIAL_NAME Serial1

#endif // HARDWARE UART SETTINGS

#ifdef Serial1 // this makes it not complain on compilation if there’s no Serial1

#define BLUEFRUIT_HWSERIAL_NAME Serial1

#endif

模式引脚

对于硬件和软件串行,您可能会要定义MODE引脚。有一些草图不使用它,而是取决于设置/取消模式的命令。如果您有备用的GPIO,最好使用MODE引脚!

下载:文件

复制代码

#define BLUEFRUIT_UART_MODE_PIN 12 // Set to -1 if unused #define BLUEFRUIT_UART_MODE_PIN 12 // Set to -1 if unused

SPI引脚

对于硬件和软件SPI,您都需要设置 CS (片选)行, IRQ (中断请求)行,如果有备用引脚,请 RST (重置)

下载:文件

复制代码

// SHARED SPI SETTINGS

#define BLUEFRUIT_SPI_CS 8

#define BLUEFRUIT_SPI_IRQ 7

#define BLUEFRUIT_SPI_RST 4 // Optional but recommended, set to -1 if unused // SHARED SPI SETTINGS

#define BLUEFRUIT_SPI_CS 8

#define BLUEFRUIT_SPI_IRQ 7

#define BLUEFRUIT_SPI_RST 4 // Optional but recommended, set to -1 if unused

软件SPI引脚

如果没有可用的硬件SPI端口,则可以使用任何三个引脚。..速度稍慢但非常灵活

下载:文件

复制代码

// SOFTWARE SPI SETTINGS

#define BLUEFRUIT_SPI_SCK 13

#define BLUEFRUIT_SPI_MISO 12

#define BLUEFRUIT_SPI_MOSI 11 // SOFTWARE SPI SETTINGS

#define BLUEFRUIT_SPI_SCK 13

#define BLUEFRUIT_SPI_MISO 12

#define BLUEFRUIT_SPI_MOSI 11

请参考上表确定您有SPI或UART控制的Bluefruits!

选择串行总线

在BluefruitConfig.h文件中配置了引脚设置后,现在就可以检查并修改示例草图。

Adafruit_BluefruitLE_nRF51该库支持四种不同的串行总线选项,具体取决于您使用的硬件:硬件和软件类型均为 SPI ,硬件和软件类型均为 UART 。

基于UART的主板(Bluefruit LE UART Friend和Flora BLE)

这是针对Bluefruit LE UART Friend和Flora BLE板的。您可以使用 软件序列或硬件序列。硬件串行具有较高的质量,并且丢失数据的风险较小。但是,您可能没有可用的硬件串行!软件序列确实可以在流控制下正常工作,并且我们只需一个GPIO引脚就可以使用它。

对于软件序列(Arduino Uno,Adafruit Metro),您应该取消注释下面的软件序列构造器,并确保已注释掉其他三个选项(硬件串行和SPI)。

下载:file

复制代码

// Create the bluefruit object, either software serial.。.uncomment these lines

SoftwareSerial bluefruitSS = SoftwareSerial(BLUEFRUIT_SWUART_TXD_PIN, BLUEFRUIT_SWUART_RXD_PIN);

Adafruit_BluefruitLE_UART ble(bluefruitSS, BLUEFRUIT_UART_MODE_PIN,

BLUEFRUIT_UART_CTS_PIN, BLUEFRUIT_UART_RTS_PIN); // Create the bluefruit object, either software serial.。.uncomment these lines

SoftwareSerial bluefruitSS = SoftwareSerial(BLUEFRUIT_SWUART_TXD_PIN, BLUEFRUIT_SWUART_RXD_PIN);

Adafruit_BluefruitLE_UART ble(bluefruitSS, BLUEFRUIT_UART_MODE_PIN,

BLUEFRUIT_UART_CTS_PIN, BLUEFRUIT_UART_RTS_PIN);

对于需要硬件串行(Adafruit Flora等)的主板,请取消注释硬件串行构造函数,并确保已注释掉其他三个选项

下载:文件

复制代码

/* 。..or hardware serial, which does not need the RTS/CTS pins. Uncomment this line */

Adafruit_BluefruitLE_UART ble(BLUEFRUIT_HWSERIAL_NAME, BLUEFRUIT_UART_MODE_PIN); /* 。..or hardware serial, which does not need the RTS/CTS pins. Uncomment this line */

Adafruit_BluefruitLE_UART ble(BLUEFRUIT_HWSERIAL_NAME, BLUEFRUIT_UART_MODE_PIN);

基于SPI的板(Bluefruit LE SPI Friend)

对于基于SPI的板,您应取消注释以下硬件SPI构造函数,并确保已注释掉其他构造函数:

下载:文件

复制代码

/* 。..hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); /* 。..hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

如果某些无法使用硬件SPI的原因,可以通过以下构造函数切换到软件模式以对SPI传输进行位冲击:

下载:文件

复制代码

/* 。..software SPI, using SCK/MOSI/MISO user-defined SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_SCK, BLUEFRUIT_SPI_MISO,

BLUEFRUIT_SPI_MOSI, BLUEFRUIT_SPI_CS,

BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); /* 。..software SPI, using SCK/MOSI/MISO user-defined SPI pins and then user selected CS/IRQ/RST */

Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_SCK, BLUEFRUIT_SPI_MISO,

BLUEFRUIT_SPI_MOSI, BLUEFRUIT_SPI_CS,

BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

BLEUart

BLEUart 示例草图可让您在Arduino和另一个蓝牙接口上的蓝牙低功耗中央设备之间发送和接收文本数据结束(例如您的手机使用UART模式的Android或iOS上的 Adafruit Bluefruit LE Connect 应用程序)。

打开草图

要打开ATCommand草图,请单击文件》示例》 Adafruit_BluefruitLE_nRF51 Arduino IDE中的文件夹,然后选择 bleuart_cmdmode :

开发板

这将在IDE中打开示例的新实例,如下所示:

开发板

配置

之前请检查配置!页面以设置软件/硬件UART或软件/硬件SPI的草图。默认值为硬件SPI

如果使用软件或硬件串行UART:

本教程不需要使用MODE引脚,请确保您具有该模式如果您未配置并连接MODE引脚,请切换到CMD模式

如果您不使用它,请不要忘记将Bluefruit的CTS引脚接地! (植物群已经做到了)

运行草图

将草图上传到板上(通过箭头形的上传图标),并且上传过程完成后,请通过“工具”》“串行监视器” ,并确保右下角的波特率设置为 115200 :

开发板

看到请求后,请使用App连接到处于 UART 模式的Bluefruit LE模块,因此您可以获得tex电话上的t框

您在“串行监视器”顶部的框中键入的任何文本都会发送到已连接的电话,并且从电话发送的任何数据都将显示在串行监视器中:

开发板

您可以在下面的Adafruit Bluefruit LE Connect应用程序(在本例中为iOS)中看到传入的字符串:

开发板

响应文本(“为什么,Arduino!”)如下所示:

开发板

HIDKeyboard

HIDKeyboard 示例向您展示如何使用内置的HID键盘AT命令将键盘数据发送到任何启用BLE的Android或iOS手机或其他支持BLE HID外设的设备。

打开草图

要打开ATCommand草图,请单击Arduino IDE中的文件》示例》 Adafruit_BluefruitLE_nRF51 文件夹,然后选择 hidkeyboard 》:

开发板

这将在IDE中打开该示例的新实例,如下所示:

开发板

配置

请先检查配置!页面,以设置软件/硬件UART或软件/硬件SPI的草图。默认值为硬件SPI

如果使用软件或硬件串行UART:

本教程不需要使用MODE引脚,请确保您具有该模式

别忘了也将如果不使用的话,将Bluefruit上的CTS引脚接地!(植物区系有此功能)已经完成)

正在运行草图

将草图上传到板上(通过箭头形的上传图标),并且上传过程完成后,请通过工具》串行监视器打开串行监视器》,并确保右下角的波特率设置为 115200 :

开发板

要发送键盘数据,请在“串行监视器”顶部的文本框中键入任何内容,然后单击发送按钮。

绑定HID键盘

在使用HID键盘之前,您需要将其“绑定”到手机或电脑绑定过程在两个设备之间建立了永久的连接,这意味着一旦您的手机或PC再次看到Bluefruit LE模块,它将自动连接。

绑定键盘的确切步骤会有所不同。

当您不再需要绑定或希望绑定时将Bluefruit LE模块连接到另一台设备,请确保删除手机或PC上的绑定信息,否则您可能无法在新设备上连接!

Android

要在启用了蓝牙低功耗功能的Android设备上绑定键盘,请转到设置应用程序,然后单击蓝牙图标。

这些屏幕截图基于Nexus 7 2013上运行的Android 5.0。确切的外观可能会有所不同,具体取决于您的设备和操作系统版本。

开发板

在“蓝牙”设置面板中,您应该会看到“ Bluefruit LE”模块在“可用设备”列表下以 Bluefruit键盘做广告:

开发板

点击设备将启动绑定过程,该过程应以将Bluefruit Keyboard设备移动到新的“ Paired devices”(已配对设备)列表中并在设备名称下方写有“ Connected”(已连接)的方式结束: 》

要删除绑定信息,请单击设备名称右侧的齿轮图标,然后单击请点击忘记按钮:

开发板

iOS

要在iOS设备上绑定键盘,请转到t他在手机上设置应用程序,然后单击蓝牙菜单项。

键盘应出现在其他设备下列表:

开发板

绑定过程完成后,设备将被移至我的设备类别,您可以开始将Bluefruit LE模块用作键盘:

开发板

要取消绑定设备,请点击“信息”图标,然后在菜单中选择忘记此设备选项:

开发板

OS X

要在OS X设备上绑定键盘,请转到蓝牙首选项窗口,然后单击旁边的配对按钮。 Bluefruit Keyboard 设备生成此示例草图编辑:

开发板

要在配对后解除绑定,请单击 Bluefruit键盘旁边的小“ x”图标:

开发板

。..。..,然后单击删除确认对话框弹出时》按钮:

开发板

控制器

控制器草图可让您在手持控制器或外部数据源中启用BLE的iOS或Android设备,您可以利用手机或平板电脑上丰富的传感器。

您可以从手机中获取加速度计或四元数数据,然后通过BLE将其推送到Arduino,或者获取最新的GPS坐标无需购买(或供电!)任何外部硬件。

打开草图

要打开Controllersketch,请单击Arduino IDE中的文件》示例》 Adafruit_BluefruitLE_nRF51 文件夹,然后选择 controller :

开发板

这将在IDE中打开该示例的新实例,如下所示:

开发板

配置

检查配置!设置页面,以设置软件/硬件UART或软件/硬件SPI的草图。默认值为硬件SPI

如果使用软件或硬件串行UART:

如果您连接了本教程,本教程也将更易于使用。 MODE引脚,您可以使用任何引脚,但我们的教程默认情况下具有12引脚。您可以将其更改为任何引脚。如果您未设置MODE引脚,那么请确保将模式开关置于CMD 模式

如果您使用的是Flora或不想连接模式引脚,在配置选项卡中将BLUEFRUIT_UART_MODE_PIN设置为-1,以便草图将使用+++方法在命令模式和数据模式之间切换!

不要忘记也连接CTS (植物群已完成此操作)

运行草图

将草图上传到板上(通过箭头形的上传图标),然后上传过程完成,通过工具》串行监视器打开串行监视器,并确保右下角的波特率设置为 115200 :

开发板

在控制器模式下使用Bluefruit LE Connect

草图运行后,您可以打开Adafruit的Bluefruit LE Connect应用程序(适用于Android或iOS)并使用控制器应用程序以与草图交互。 (如果您不熟悉Bluefruit LE Connect,请参阅我们专用的Bluefruit LE Connect学习指南。)

在欢迎屏幕上,选择 Adafruit Bluefruit BLE设备列表中的LE 设备:

开发板

然后从活动列表中选择控制器:

开发板

这将显示可从手机或平板电脑发送到的数据点列表您的Bluefruit LE模块,方法是启用或禁用适当的传感器。

流式传输传感器数据

您可以从手机中获取四元数(绝对方向),加速度计,陀螺仪,磁力计或GPS位置数据,然后通过Controller活动将其直接发送到Arduino。

例如通过启用加速度计字段,您可以会在应用程序中看到加速度计数据更新:

开发板

数据将在示例草图中进行解析,并输出到串行监视器,如下所示:

下载:文件

复制代码

Accel 0.20 -0.51 -0.76

Accel 0.22 -0.50 -0.83

Accel 0.25 -0.51 -0.83

Accel 0.21 -0.47 -0.76

Accel 0.27 -0.48 -0.82 Accel 0.20 -0.51 -0.76

Accel 0.22 -0.50 -0.83

Accel 0.25 -0.51 -0.83

Accel 0.21 -0.47 -0.76

Accel 0.27 -0.48 -0.82

开发板

请注意,即使我们仅打印2个小数点,其值仍是从应用程序接收的完整的4字节浮点数。

控制面板模块

您也可以使用控制面板模块,通过选择适当的菜单项来捕获按钮的按下和释放:

开发板

这将弹出“控制面板”面板,如下所示:

开发板

按钮的按下和释放都将使用所用按钮的ID记录到串行监视器中:

下载:文件

复制代码

Button 8 pressed

Button 8 released

Button 3 pressed

Button 3 released Button 8 pressed

Button 8 released

Button 3 pressed

Button 3 released

拾色器模块

您还可以通过拾色器模块发送RGB颜色数据,该模块显示以下颜色选择对话框:

开发板

这将为您提供以下格式的十六进制颜色数据:

下载:文件

复制代码

RGB #A42FFF RGB #A42FFF

您可以将颜色选择器和控制器示例草图,以使由移动应用程序中的按钮触发的颜色可配置的动画-对于可穿戴设备非常方便!下载以下组合的示例代码(已配置为Feather,但易于适应FLORA,BLE Micro等)以开始使用:

feather_bluefruit_neopixel_animation_controller.zip

HeartRateMonitor

HeartRateMonitor 示例可让您定义newGATT服务和关联的GATT特征,并使用标准AT命令更新特征值。

打开草图

要打开ATCommand草图,请单击Arduino IDE中的文件》示例》 Adafruit_BluefruitLE_nRF51 文件夹,然后选择 heartratemonitor :

开发板

这将在IDE,如下所示:

开发板

配置

检查配置! 页面之前,可以设置软件/硬件UART或软件/硬件SPI的草图。默认值为硬件SPI

或软件UART

本教程不需要使用MODE引脚,如果您未配置并连接MODE引脚,请确保将模式开关置于CMD模式 p》

此演示使用了一些长数据传输字符串,因此即使您使用的是硬件串行,我们也建议定义CTS和RTS并将其连接到引脚。

如果您使用的是Flora或仅不想连接CTS或RTS,请将#define引脚设置为-1,别忘了还将Bluefruit上的CTS引脚接地!(植物群已经做到了)

如果使用RTS和CTS,则可以在下面删除此行,这会减慢数据传输速度

下载:文件

复制代码

// this line is particularly required for Flora, but is a good idea

// anyways for the super long lines ahead!

ble.setInterCharWriteDelay(5); // 5 ms // this line is particularly required for Flora, but is a good idea

// anyways for the super long lines ahead!

ble.setInterCharWriteDelay(5); // 5 ms

运行草图

将草图上传到板上(通过箭头形的上传图标),并且上传过程完成后,通过工具》串行监视器打开串行监视器,然后进行确保将右下角的波特率设置为 115200 :

开发板

开发板

如果您在移动设备或笔记本电脑上打开支持标准心率监视器服务的应用程序,则应该能够看到心率与看到的更改同步更新在串行监视器中:

nRF Toolbox HRM示例

下图是来自Android上的Nordic的免费nRF Toolbox应用程序的屏幕截图(也适用于iOS),显示了传入的心率监视器数据:

开发板

CoreBluetooth HRM示例

下图来自苹果公司免费提供的CoreBluetooth示例应用程序,显示了如何使用低功耗蓝牙服务和特性:

开发板

UriBeacon

UriBeacon 示例向您展示如何使用内置的UriBeacon AT命令将Bluefruit LE模块配置为UriBeacon广告商,如下Google的物理Web UriBea规格。

打开草图

要打开ATCommand草图,请单击Arduino IDE中的文件》示例》 Adafruit_BluefruitLE_nRF51 文件夹,然后选择 uribeacon :

开发板

这将打开一个IDE中示例的新实例,如下所示。您可以从默认的 http://www.adafruit.com 编辑信标将指向的URL,也可以直接上传以进行测试

开发板

配置

请更早检查配置!页面以设置软件/硬件UART或软件的草图/硬件SPI。默认值为硬件SPI

如果使用软件或硬件串行UART:

本教程不需要使用MODE引脚,请确保您具有该模式如果您未配置并连接MODE引脚,请切换到CMD模式

如果您不使用它,请不要忘记将Bluefruit的CTS引脚接地! (植物群已经做到了)

运行草图

将草图上传到板上(通过箭头形的上传图标),并且上传过程完成后,请通过“工具”》“串行监视器” ,并确保右下角的波特率设置为 115200 :

开发板

这时,您可以打开Android的Physical Web Application或iOS版,您应该会看到一个广告Adafrui的链接t的网站:

开发板

帮助!

当将Bluefruit Micro或Bluefruit LE与Flora/Due/Leonardo/Micro一起使用时,示例无法运行?

我们在 setup()上添加了一条特殊行以使它停止,直到Arduino看到您通过串口控制台连接。这样可以使调试工作变得很棒,但是却可以使您无法运行与计算机断开连接的程序。

解决方案?完成调试后,从setup()中删除这两行

下载:文件

复制代码

while (!Serial);

delay(500); while (!Serial);

delay(500);

我似乎无法“找到” Bluefruit LE!

是否正在获取类似内容?

开发板

对于UART/串行Bluefruits:

检查CMD中是否有 MODE 开关,如果未使用MODE引脚,则MODE引脚未连接任何东西!

如果正在尝试通过微型计算机控制 MODE ,请确保在草图中设置MODE引脚

确保您具有 RXI 和 TXO 接线正确!它们经常被意外交换

如果您使用硬件串行而不使用CTS,请确保 CTS 已连接到GND

检查MODE红色LED,它在闪烁吗?如果其持续闪烁,则表明您可能处于DFU模式,请重启该模块!

如果您使用的是“硬件串行/软件串行”,请确保知道哪一个并进行了设置

如果使用SPI Bluefruit:

确保已正确连接所有5(或6)根导线。

如果使用硬件SPI,则需要确保您已连接到硬件SPI端口,具体取决于主芯片组。

如果使用Bluefruit Micro:

请确保您更改了将 RESET 引脚固定到任何配置文件中的#4。另外,请确保您正在使用硬件SPI进行连接!

AT命令

Bluefruit LE模块使用Hayes AT样式的命令集来配置设备。

AT样式的命令集的优点是它很容易在机器对机器的通信中使用,同时对人类仍然有些用户友好。

测试命令模式‘=?’

“测试”模式用于检查系统上是否存在指定的命令。

某些固件版本或配置可能包含或不包含特定命令,您可以通过使用命令名称并在其后附加‘=?’来确定该命令是否存在,如下所示

下载:文件

复制代码

AT+BLESTARTADV=? AT+BLESTARTADV=?

如果存在该命令,设备将通过“确定” 进行回复。如果没有该命令,则设备将以‘错误’进行回复。

下载:文件

复制代码

AT+BLESTARTADV=?

OK

AT+MISSINGCMD=?

ERROR AT+BLESTARTADV=?

OK

AT+MISSINGCMD=?

ERROR

写入命令模式‘= xxx’

‘写入’模式用于为命令分配特定的值,例如

要在命令中写入值,只需在命令后附加‘=’符号,然后再添加anyparamater( s)您希望编写(除了将被解释为tet模式的孤独‘?’字符):

下载:文件

复制代码

AT+BLEPOWERLEVEL=-8 AT+BLEPOWERLEVEL=-8

如果写入成功后,通常会在新行上收到“确定” 响应,如下所示:

下载:文件

复制C ode

AT+BLEPOWERLEVEL=-8

OK AT+BLEPOWERLEVEL=-8

OK

如果命令出现问题(例如参数无效),您将得到 》‘ERROR’响应,在新行中显示,如下所示:

下载:file

复制代码

AT+BLEPOWERLEVEL=3

ERROR AT+BLEPOWERLEVEL=3

ERROR

注意:生成此特定错误是因为对于AT + BLEPOWERLEVEL命令,“ 3”不是有效值。将成功输入‘-4’,‘0’或‘4’ ,因为这些都是该命令的有效值。

执行模式

“执行”模式将使特定命令“运行”,如果可能的话,

下载:文件

复制代码

AT+FACTORYRESET AT+FACTORYRESET

您可能使用执行模式来执行出厂重置,例如,通过执行AT + FACTORYRESET命令如下:

下载:文件

复制代码

AT+FACTORYRESET

OK AT+FACTORYRESET

OK

注意:许多要读取的命令无论将其发送给谁都将执行相同的操作。 “执行”或“读取”模式下的命令解析器。例如,以下命令将产生相同的结果:

下载:文件

复制代码

AT+BLEGETPOWERLEVEL

-4

OK

AT+BLEGETPOWERLEVEL?

-4

OK AT+BLEGETPOWERLEVEL

-4

OK

AT+BLEGETPOWERLEVEL?

-4

OK

如果该命令不支持执行模式,则响应通常为“错误”

阅读命令模式‘?’

“读取”模式用于读取命令的当前值。

并非每个命令都支持读取模式,但是通常使用它来检索诸如通过在命令后附加一个‘?’来显示当前无线电的发射功率电平,如下所示:

下载:文件

复制代码

AT+BLEPOWERLEVEL? AT+BLEPOWERLEVEL?

如果命令没有t支持读取模式,或者如果请求有问题,通常会得到一个‘ERROR’响应。

如果命令读取成功,则您可以通常将获得读取结果,然后在新行上按“确定” ,如下所示:

下载:文件

复制代码

AT+BLEPOWERLEVEL?

-4

OK AT+BLEPOWERLEVEL?

-4

OK

注意:对于简单命令,“读取”模式和“执行”模式的行为相同。

标准AT

Bluefruit LE模块上提供以下标准Hayes/AT命令:

AT

充当ping来检查我们是否处于命令模式。如果处于命令模式,则应该收到“确定”响应。

代码库修订:0.3.0

参数 》:无

输出:无

下载:文件

复制代码

AT

OK AT

OK

ATI

显示有关Bluefruit模块的基本信息。

代码库修订 :0.3.0

参数:无

输出:显示以下值:

板名

微控制器/无线电SoC名称

唯一的序列号

核心Bluefruit代码库修订版

项目固件修订版

固件构建日期

软设备,软设备版本,引导加载程序版本(0.5.0 +)

下载:文件

复制代码

ATI

BLEFRIEND

nRF51822 QFAAG00

FB462DF92A2C8656

0.5.0

0.5.0

Feb 24 2015

S110 7.1.0, 0.0

OK ATI

BLEFRIEND

nRF51822 QFAAG00

FB462DF92A2C8656

0.5.0

0.5.0

Feb 24 2015

S110 7.1.0, 0.0

OK

《强g》更新:

版本 0.4.7 + 的固件在可以检测到芯片名称之后添加芯片修订(例如, ‘nRF51822 QFAAG00’)。

版本 0.5.0 + 会添加新的第七条记录,其中包含软件设备,软件设备版本和引导加载程序版本(例如‘S110 7.1.0 ,0.0’)。

ATZ

执行系统重置。

代码库修订 :0.3.0

参数:无

输出:无

下载:文件

复制代码

ATZ

OK ATZ

OK

ATE

使用AT解析器启用或禁用输入字符的回显

代码库修订:0.3.0

参数:‘1’=启用回显,‘0’=禁用回显

输出:无

下载:文件

复制代码

# Disable echo support

ATE=0

OK

#Enable echo support

ATE=1

OK # Disable echo support

ATE=0

OK

#Enable echo support

ATE=1

OK

+++

在DATA和COMMAND模式之间动态切换,而无需更改物理CMD/UART选择开关

在COMMAND模式下,输入‘+++ \ n’或‘+++ \ r \ n’将导致模块切换到DATA模式,并且在控制台中键入的所有内容都会消失

要从DATA模式切换回COMMAND模式,只需再次输入‘+++ \ n’或‘+++ \ r \ n’(确保包括换行符!),并显示一个新的“ OK”响应,让您知道您已回到COMMAND模式(请参见下面的示例代码中的两个“ OK”条目)。

代码库修订:0.4.7

参数:无

输出:无

请注意,+++也可以在移动设备上用于在iOS上发送和接收AT命令或Android,尽管应始终谨慎使用。

请参阅AT + MODESWITCHEN命令以控制+++命令的可用性

下载:文件

复制代码

ATI

BLEFRIEND

nRF51822 QFAAG00

B122AAC33F3D2296

0.4.6

0.4.6

Dec 22 2014

OK

+++

OK

OK ATI

BLEFRIEND

nRF51822 QFAAG00

B122AAC33F3D2296

0.4.6

0.4.6

Dec 22 2014

OK

+++

OK

OK

通用

所有Bluefruit LE模块上均提供以下通用命令:

AT + FACTORYRESET

清除非易失性存储器中的所有用户配置数据,并在重置之前执行出厂重置

代码库修订 :0.3.0

参数:无

输出:无

下载:文件

复制代码

AT+FACTORYRESET

OK AT+FACTORYRESET

OK

从固件版本0.5.0+开始,您可以通过按住DFU按钮10秒钟直到蓝色的CONNECTED LED点亮,然后释放按钮来执行出厂重置。

AT + DFU

强制该模块进入DFU模式,允许空中固定使用iOS或Android上的专用DFU应用重新更新。

代码库修订:0.3.0

参数:无

输出:无

输入AT + DFU命令后,AT解析器将不再响应,因为正常的程序执行有效地停止并且执行了完整的系统重置以启动引导加载程序代码

下载:文件

复制代码

AT+DFU

OK AT+DFU

OK

AT + HELP

显示以逗号分隔的列表系统上可用的所有AT解析器命令。

代码库版本:0.3.0

参数:无

输出:系统上可用的所有AT解析器命令的逗号分隔列表。

示例代码为低可能与将来的固件版本不匹配,并且仅用于说明目的

下载:file

复制代码

AT+HELP

AT+FACTORYRESET,AT+DFU,ATZ,ATI,ATE,AT+DBGMEMRD,AT+DBGNVMRD,AT+HWLEDPOLARITY,AT+HWLED,AT+HWGETDIETEMP,AT+HWMODEPINPOLARITY,AT+HWMODEPIN,AT+HWGPIOMODE,AT+HWGPIO,AT+HWI2CSCAN,AT+HWADC,AT+HWVBAT,AT+HWPWM,AT+HWPWRDN,AT+BLEPOWERLEVEL,AT+BLEGETADDRTYPE,AT+BLEGETADDR,AT+BLEBEACON,AT+BLEGETRSSI,AT+GAPGETCONN,AT+GAPDISCONNECT,AT+GAPDEVNAME,AT+GAPDELBONDS,AT+GAPINTERVALS,AT+GAPSTARTADV,AT+GAPSTOPADV,AT+GAPAUTOADV,AT+GAPSETADVDATA,AT+BLEUARTTX,AT+BLEUARTRX,AT+GATTADDSERVICE,AT+GATTADDCHAR,AT+GATTCHAR,AT+GATTLIST,AT+GATTCLEAR,AT+HELP

OK AT+HELP

AT+FACTORYRESET,AT+DFU,ATZ,ATI,ATE,AT+DBGMEMRD,AT+DBGNVMRD,AT+HWLEDPOLARITY,AT+HWLED,AT+HWGETDIETEMP,AT+HWMODEPINPOLARITY,AT+HWMODEPIN,AT+HWGPIOMODE,AT+HWGPIO,AT+HWI2CSCAN,AT+HWADC,AT+HWVBAT,AT+HWPWM,AT+HWPWRDN,AT+BLEPOWERLEVEL,AT+BLEGETADDRTYPE,AT+BLEGETADDR,AT+BLEBEACON,AT+BLEGETRSSI,AT+GAPGETCONN,AT+GAPDISCONNECT,AT+GAPDEVNAME,AT+GAPDELBONDS,AT+GAPINTERVALS,AT+GAPSTARTADV,AT+GAPSTOPADV,AT+GAPAUTOADV,AT+GAPSETADVDATA,AT+BLEUARTTX,AT+BLEUARTRX,AT+GATTADDSERVICE,AT+GATTADDCHAR,AT+GATTCHAR,AT+GATTLIST,AT+GATTCLEAR,AT+HELP

OK

AT + NVMWRITE

将数据写入256字节用户非易失性存储器(NVM)区域。

代码库版本:0.7.0

参数:

偏移:第一个数字偏移用户NVM中从起始位置开始的字节

数据类型:可以是STRING(1),BYTEARRAY(2)或INTEGER(3)之一

数据:要写入NVM内存的数据(确切的有效负载格式将根据指定的数据类型而变化)。

输出 :没事

下载:文件

复制代码

# Write 32768 as an integer starting at byte 16 in user NVM

AT+NVMWRITE=16,INTEGER,32768

OK # Write 32768 as an integer starting at byte 16 in user NVM

AT+NVMWRITE=16,INTEGER,32768

OK

AT + NVMREAD

从256字节用户非易失性存储器(NVM)区域读取数据。

代码库版本:0.7.0

参数:

偏移:第一个数字偏移用户NVM中起始位置的字节数

大小:要读取的字节数

数据类型:使用的类型对于正在读取的数据,需要正确解析数据并将其显示为响应。该值可以是STRING(1),BYTEARRAY(2)或INTEGER(3)之一

输出:回读的数据,根据数据类型进行格式化

下载:文件

复制代码

# Read an integer back from position 16 in user NVM

AT+NVMREAD=16, 4, INTEGER

32768

OK # Read an integer back from position 16 in user NVM

AT+NVMREAD=16, 4, INTEGER

32768

OK

AT + MODESWITCHEN

通过连接的BLE UART一侧的BLE外设上的“ +++”命令启用或禁用模式切换。

代码库版本:0.7 .1

参数:

位置:这可以是字符串,可以是‘ local ”或“ ble ”,指示哪一方应启用或禁用“ +++”命令,“本地”是Bluefruit外围设备,“ ble”是电话或平板电脑。

状态:“ 0 ”以禁用“ +++”模式开关,“ 1 ”以启用它们。

输出:无

默认情况下,“ +++”在本地启用,并在BLE中禁用

下载:文件

复制代码

# Disable reomte ’+++‘ mode switches

AT+MODESWITCHEN=ble,0

OK # Disable reomte ’+++‘ mode switches

AT+MODESWITCHEN=ble,0

OK

硬件

以下命令使您可以与Bluefruit LE模块上的低级硬件交互,例如读取或切换GPIO引脚,执行ADC转换等。 。:

AT + BAUDRATE

更改nRF51822上的HW UART外设使用的波特率。 请注意,我们不建议使用高于9600的波特率,因为nRF51 UART会丢弃字符!

代码库修订:0.7.0

参数:波特率,必须为以下值之一:

1200

2400

4800

9600

14400

19200

28800

38400

57600

76800

115200

230400

250000

460800

921600

1000000

输出:当前波特率

下载:文件

复制代码

# Set the baud rate to 115200

AT+BAUDRATE=115200

OK

# Check the current baud rate

AT+BAUDRATE

115200

OK # Set the baud rate to 115200

AT+BAUDRATE=115200

OK

# Check the current baud rate

AT+BAUDRATE

115200

OK

AT + HWADC

在指定的ADC引脚上执行ADC转换

代码库修订 :0.3.0

参数:ADC通道(0..7)

输出:ADC转换的结果

下载:文件

复制代码

AT+HWADC=0

178

OK AT+HWADC=0

178

OK

AT + HWGETDIETEMP

获取温度BLE模块裸片的摄氏度。可以将其用于调试目的(较高的管芯温度通常意味着较高的电流消耗),但不对应于环境温度,因此不能替代常规温度传感器。

代码库修订:0.3.0

参数:无

输出:模具温度(摄氏度)

下载:文件

复制代码

AT+HWGETDIETEMP

32.25

OK AT+HWGETDIETEMP

32.25

OK

AT + HWGPIO

获取或设置指定的GPIO引脚的值(取决于引脚的模式)。

代码库修订:0.3.0

参数:此命令的参数根据引脚模式而变化。

输出模式:在更新引脚时,可以使用以下逗号分隔的参数设置为输出:

插针编号

插针状态,其中:

0 =清除引脚(逻辑低电平/GND)

1 =设置引脚(逻辑高电平/VCC)

输入模式:要读取输入引脚或已配置为输出的引脚的当前状态,请输入引脚号作为单个参数。

输出:如果您正在读取输入或检查输入引脚的状态(表示仅提供1个参数,即引脚编号),则为引脚状态,其中:

0表示该引脚为逻辑低/GND

1表示该引脚为逻辑高/VCC

尝试设置未配置为输出的引脚的值将产生“错误”响应。

某些引脚保留用于Bluefruit模块上的特定功能,不能用作GPIO。如果您尝试使用保留的密码,则会生成“错误”响应。

下载:文件

复制代码

# Set pin 14 HIGH

AT+HWGPIO=14,1

OK

# Set pin 14 LOW

AT+HWGPIO=14,0

OK

# Read the current state of pin 14

AT+HWGPIO=14

0

OK

# Try to update a pin that is not set as an output

AT+HWGPIOMODE=14,0

OK

AT+HWGPIO=14,1

ERROR # Set pin 14 HIGH

AT+HWGPIO=14,1

OK

# Set pin 14 LOW

AT+HWGPIO=14,0

OK

# Read the current state of pin 14

AT+HWGPIO=14

0

OK

# Try to update a pin that is not set as an output

AT+HWGPIOMODE=14,0

OK

AT+HWGPIO=14,1

ERROR

AT + HWGPIOMODE

这将为指定的GPIO引脚(输入,输出等)设置模式。

代码库修订:0.3.0

参数:此命令一个或两个值(在两个参数的情况下用逗号分隔)

引脚号

新的GPIO模式,其中:

0 =输入

1 =输出

2 =启用了上拉的输入

3 =启用了上拉的输入

输出:如果传递了单个参数(GPIO引脚号),则会返回当前的引脚模式。

某些引脚保留用于Bluefruit模块和ca上的特定功能n不能用作GPIO。如果您尝试使用保留的密码,则会生成“错误”响应。

下载:文件

复制代码

# Configure pin 14 as an output

AT+HWGPIOMODE=14,0

OK

# Get the current mode for pin 14

AT+HWPGIOMODE=14

0

OK # Configure pin 14 as an output

AT+HWGPIOMODE=14,0

OK

# Get the current mode for pin 14

AT+HWPGIOMODE=14

0

OK

AT + HWI2CSCAN

扫描I2C总线以尝试检测任何已连接的I2C设备,并返回以前的设备地址

代码库修订:0.3.0

参数:无

输出:扫描I2C总线上的有效地址范围时找到的任何I2C地址的逗号分隔列表,或者没有找到任何设备。

下载:文件

复制代码

# I2C scan with two devices detected

AT+HWI2CSCAN

0x23,0x35

OK

# I2C scan with no devices detected

AT+HWI2CSCAN

OK # I2C scan with two devices detected

AT+HWI2CSCAN

0x23,0x35

OK

# I2C scan with no devices detected

AT+HWI2CSCAN

OK

AT + HWVBAT

返回主电源电压级别(以毫伏为单位)

代码库修订:0.3.0

参数:无

输出:VBAT电平(以毫伏为单位)

下载:文件

复制代码

AT+HWVBAT

3248

OK AT+HWVBAT

3248

OK

AT + HWRANDOM

生成使用nRF51822上的硬件随机数发生器生成一个32位随机数(基于白噪声)。

代码库修订:0.4.7

参数:无

输出:随机的32位十六进制值(例如’0x12345678‘)

下载:文件

复制代码

AT+HWRANDOM

0x769ED823

OK AT+HWRANDOM

0x769ED823

OK

AT + HWMODELED

允许您覆盖MODE led的默认行为(默认情况下指示运行模式)。

代码库修订:0.6.6

参数:LED运行模式,可以是以下值之一:

禁用或 DISABLE 或 0 -完全禁用MODE LED以省电

模式或 MODE 或 1 -默认行为,指示当前操作模式

hwuart 或 HWUART 或 2 -在硬件UART总线上的任何活动(TX或RX)上切换LED

bleuart 或 BLEUART 或 3 -切换LED上的任何活动BLE UART服务(TX或RX特性)

spi 或 SPI 或 4 -在任何SPI活动上切换LED

手动或手动或 5 -通过第二个逗号分隔的参数手动设置MODE LED的状态,可以打开,关闭或切换。

输出 :如果不带参数运行,则从上面的字段中返回一个大写的字符串,表示当前的MODE LED操作模式

下载:文件

复制代码

# Get the curent MODE LED setting

AT+HWMODELED

MODE

OK

# Change the MODE LED to indicate BLE UART activity

AT+HWMODELED=BLEUART

OK

# Manually toggle the MODE LED

AT+HWMODELED=MANUAL,TOGGLE

OK # Get the curent MODE LED setting

AT+HWMODELED

MODE

OK

# Change the MODE LED to indicate BLE UART activity

AT+HWMODELED=BLEUART

OK

# Manually toggle the MODE LED

AT+HWMODELED=MANUAL,TOGGLE

OK

AT + UARTFLOW

在nRF51822的UART外围模块上启用或禁用硬件流控制(CTS + RTS)。/p》

代码库修订:0.7.0

参数:硬件流控制状态,可以是以下之一:

off

0

1

输出:如果不带参数运行,返回一个数字,该数字表示流控制是启用(1)还是禁用(0)。

下载:file

复制代码

# Check the current flow control state

AT+UARTFLOW

1

OK

# Disable HW flow control

AT+UARTFLOW=off

OK # Check the current flow control state

AT+UARTFLOW

1

OK

# Disable HW flow control

AT+UARTFLOW=off

OK

信标

Adafruit的Bluefruit LE模块当前支持以下“信标”技术:

信标(Apple)通过AT + BLEBEACON

UriBeacon(Google)通过AT + BLEURIBEACON(已弃用)

Eddystone(Google)通过AT + EDDYSTONE *

可以使用以下命令将模块配置为充当“信标”:

AT + BLEBEACON

代码库修订:0.3.0

参数:以下逗号-启用信标模式需要使用分隔的参数:

蓝牙制造商ID(uint16_t)

128位UUID

主要值(uint16_t)

次要值(uint16_t)

RSSI @ 1m(int8_t)

输出:无

下载:文件

复制代码

# Enable Apple iBeacon emulation

# Manufacturer ID = 0x004C

AT+BLEBEACON=0x004C,01-12-23-34-45-56-67-78-89-9A-AB-BC-CD-DE-EF-F0,0x0000,0x0000,-59

OK

# Reset to change the advertising data

ATZ

OK

# Enable Nordic Beacon emulation

# Manufacturer ID = 0x0059

AT+BLEBEACON=0x0059,01-12-23-34-45-56-67-78-89-9A-AB-BC-CD-DE-EF-F0,0x0000,0x0000,-59

OK

# Reset to change the advertising data

ATZ

OK # Enable Apple iBeacon emulation

# Manufacturer ID = 0x004C

AT+BLEBEACON=0x004C,01-12-23-34-45-56-67-78-89-9A-AB-BC-CD-DE-EF-F0,0x0000,0x0000,-59

OK

# Reset to change the advertising data

ATZ

OK

# Enable Nordic Beacon emulation

# Manufacturer ID = 0x0059

AT+BLEBEACON=0x0059,01-12-23-34-45-56-67-78-89-9A-AB-BC-CD-DE-EF-F0,0x0000,0x0000,-59

OK

# Reset to change the advertising data

ATZ

OK

AT + BLEBEACON将导致将信标数据存储在Bluefruit LE模块上的非易失性配置存储器中,并且这些值将在系统重置和关机后再启动时保持不变。要删除或清除信标数据,您需要在命令模式下输入“ AT + FACTORYRESET”命令。

使用上面的示例代码输入Nordic Beacon仿真,您可以在下面的Nordic的“信标配置”工具中看到模拟的信标:

开发板

AT + BLEURIBEACON 》

将指定的URI转换为UriBeaconadvertising数据包,并将该模块配置为作为UriBeacon(Google物理Web项目的一部分)进行广告。

要查看UriBeacon URI,您可以使用以下移动设备之一应用程序:

Android 4.3+:Google Play商店上的物理Web

iOS:Apple的App Store中的物理Web

代码库修订版:0.4.7

参数:要编码的URI(例如http://www.adafruit.com/blog)

输出:未输入有效的URI(长度为acc

下载:文件

复制代码

AT+BLEURIBEACON=http://www.adafruit.com/blog

OK

# Reset to change the advertising data

ATZ

OK AT+BLEURIBEACON=http://www.adafruit.com/blog

OK

# Reset to change the advertising data

ATZ

OK

如果提供的URI太长,您将获得以下输出:

下载:文件

复制代码

AT+BLEURIBEACON=http://www.adafruit.com/this/uri/is/too/long

URL is too long

ERROR AT+BLEURIBEACON=http://www.adafruit.com/this/uri/is/too/long

URL is too long

ERROR

如果您要编码的URI太长,请尝试使用诸如bit.ly之类的缩短服务,然后对缩短的URI。

UriBeacon应该视为不推荐使用,和EddyStone应该用于将来的任何开发。在UriBeacon周围的Bluefruit LE固件中不会进行进一步的开发。

弃用:AT + EDDYSTONEENABLE

此命令将在Bluefruit LE模块上启用Eddystone支持。必须先启用Eddystone支持,然后才能使用其他相关命令。

代码库修订:0.6.6

参数: 1或0(1 =启用,0 =禁用)

输出:如果未提供任何参数,则Eddystone支持的当前状态(1 =启用,0 =禁用)

此命令已在固件0.7.0中删除,以避免造成混淆。在0.7.0及更高版本中使用AT + EDDYSTONESERVICEEN。

下载:文件

复制代码

# Enable Eddystone support

AT+EDDYSTONEENABLE=1

OK

# Check the current Eddystone status on the module

AT+EDDYSTONEENABLE

1

OK # Enable Eddystone support

AT+EDDYSTONEENABLE=1

OK

# Check the current Eddystone status on the module

AT+EDDYSTONEENABLE

1

OK

AT + EDDYSTONEURL

此命令将设置Eddystone-URL协议的URL。

代码库修订:0.6 .6

参数:

要编码的网址(强制性)

可选的第二个参数指示是否继续即使外围设备连接到中央设备,也要发布Eddystone URL。

固件 0.6.7 为RSSI的0米值添加了一个可选的第三个参数。最终用户应通过检查接收设备上1m处的RSSI值,然后在该值上加上41(以补偿超过1m的信号强度损失)来进行测量,因此1m处的RSSI为-62意味着您应该在0m输入-21作为RSSI。默认值为-18dBm。

输出:固件《= 0.6.6:无。如果固件》 = 0.6.7 ,不带任何参数运行此命令,则会返回当前URL。

下载:文件

复制代码

# Set the Eddystone URL to adafruit

AT+EDDYSTONEURL=http://www.adafruit.com

OK

# Set the Eddystone URL to adafruit and advertise it even when connected

AT+EDDYSTONEURL=http://www.adafruit.com,1

OK # Set the Eddystone URL to adafruit

AT+EDDYSTONEURL=http://www.adafruit.com

OK

# Set the Eddystone URL to adafruit and advertise it even when connected

AT+EDDYSTONEURL=http://www.adafruit.com,1

OK

AT + EDDYSTONECONFIGEN

此命令使Bluefruit LE模块在指定的秒数内启用Eddystone URL配置服务。

此命令应与Google的Physical Web应用程序结合使用,可用于Android或iOS。运行此命令,然后从应用程序中选择“编辑URL”选项以空中更改目标URL。

代码库修订:0.6.6

参数:发布配置服务UUID的秒数

输出:无

下载:文件

复制代码

# Start advertising the Eddystone config service for 5 minutes (300s)

AT+EDDYSTONECONFIGEN=300

OK # Start advertising the Eddystone config service for 5 minutes (300s)

AT+EDDYSTONECONFIGEN=300

OK

AT + EDDYSTONESERVICEEN

从GATT添加或删除Eddystone服务表(需要重置才能生效)。

代码库修订:0.7.0

参数:是否应该使用以下值中的一个启用或不启用Eddystone服务:

on

off

1

0

输出:如果命令不带任何参数执行,它将禁用一个数字值,该值指示服务是启用(1)还是禁用(0)。/p》

您必须执行系统重置才能使此命令生效。

下载:文件

复制代码

# Enable Eddystone service

AT+EddyStonServiceEn=on

OK

AT+EddyStonServiceEn=1

OK

# Disable Eddystone service

AT+EddyStonServiceEn=off

OK

AT+EddyStonServiceEn=0

OK # Enable Eddystone service

AT+EddyStonServiceEn=on

OK

AT+EddyStonServiceEn=1

OK

# Disable Eddystone service

AT+EddyStonServiceEn=off

OK

AT+EddyStonServiceEn=0

OK

AT + EDDYSTONEBROADCAST

此命令可用于开始使用存储在非易失性存储器(NVM)中的URL停止播发Eddystone有效载荷。

代码库修订:0.7.0

参数:是否使用以下值之一广播有效载荷:

on

off

1

0

输出:如果不执行任何参数,则当前广播状态将显示为数字值。

下载:文件

复制代码

# Enable broadcasting current setting of EddyStone (stored previously on nvm)

AT+EddyStoneBroadcast=on

OK

AT+EddyStoneBroadcast=1

OK

# Disable broadcasting current setting of EddyStone (still stored on nvm)

AT+EddyStoneBroadcast=off

OK

AT+EddyStoneBroadcast=0

OK # Enable broadcasting current setting of EddyStone (stored previously on nvm)

AT+EddyStoneBroadcast=on

OK

AT+EddyStoneBroadcast=1

OK

# Disable broadcasting current setting of EddyStone (still stored on nvm)

AT+EddyStoneBroadcast=off

OK

AT+EddyStoneBroadcast=0

OK

BLE通用

Bluefruit LE模块上提供以下通用BLE命令:

AT + BLEPOWERLEVEL

获取或设置模块无线电的当前发射功率等级(更高的发射功率等于更好的范围,更低的发射功率等于更长的电池寿命。

代码库修订 :0.3.0

参数:TX功率电平(以dBm为单位),可以是以下值之一(从最低到更高的发射功率):

-40

-20

-16

-12

-8

-4

0

4

输出:当前发射功率电平(以dBm为单位)

更新的功率级别将在输入命令后立即生效。如果该设备未连接到其他设备,则广告将暂时停止,然后在新的功率水平生效后重新开始。

下载:文件

复制代码

# Get the current TX power level (in dBm)

AT+BLEPOWERLEVEL

0

OK

# Set the TX power level to 4dBm (maximum value)

AT+BLEPOWERLEVEL=4

OK

# Set the TX power level to -12dBm (better battery life)

AT+BLEPOWERLEVEL=-12

OK

# Set the TX power level to an invalid value

AT+BLEPOWERLEVEL=-3

ERROR # Get the current TX power level (in dBm)

AT+BLEPOWERLEVEL

0

OK

# Set the TX power level to 4dBm (maximum value)

AT+BLEPOWERLEVEL=4

OK

# Set the TX power level to -12dBm (better battery life)

AT+BLEPOWERLEVEL=-12

OK

# Set the TX power level to an invalid value

AT+BLEPOWERLEVEL=-3

ERROR

AT + BLEGETADDRTYPE

获取地址类型(用于48位BLE设备地址)

通常这是’1‘(随机),这意味着模块使用48位地址,该地址是在制造过程中随机生成的,并由制造商写入裸片。

随机并不意味着每次都会随机生成设备地址,而只是使用一个随机数。

代码库修订:0.3.0

参数:无

输出:地址类型,可以是以下值之一:

0 =公共

1 =随机

下载:文件

复制代码

AT+BLEGETADDRTYPE

1

OK AT+BLEGETADDRTYPE

1

OK

AT + BLEGETADDR

获取48位BLE设备地址。

代码库修订:0.3.0

参数:无

输出:48位BLE设备地址,格式如下:’AA:BB:CC:DD:EE:FF‘

下载:文件

复制代码

AT+BLEGETADDR

E4:C6:C7:31:95:11

OK AT+BLEGETADDR

E4:C6:C7:31:95:11

OK

AT + BLEGETPEERADDR

获取我们连接到的对等(中央)设备的48位地址。

代码库修订:0.6.5

参数:无

输出:连接的中央设备的48位地址(十六进制格式)。如果我们未连接到中央设备,该命令将返回错误。

请注意,中央设备返回的地址几乎始终是随时间变化的随机值,通常不应信任该值。此命令是为某些特殊情况提供的,但在大多数日常情况下没有用。

下载:文件

复制代码

AT+BLEGETPEERADDR

48:B2:26:E6:C1:1D

OK AT+BLEGETPEERADDR

48:B2:26:E6:C1:1D

OK

AT + BLEGETRSSI

获取RSSI值(接收信号强度指示器),可用于估计数据的可靠性在两个设备之间传输(数字越小越好)。

代码库修订:0.3.0

参数:无

输出:如果我们连接到设备,则RSSI级别(以dBm为单位),否则为’0‘

下载:文件

复制代码

# Connected to an external device

AT+BLEGETRSSI

-46

OK

# Not connected to an external device

AT+BLEGETRSSI

0

OK # Connected to an external device

AT+BLEGETRSSI

-46

OK

# Not connected to an external device

AT+BLEGETRSSI

0

OK

BLE服务

以下命令允许您在命令模式下运行时与Bluefruit LE模块上存在的各种GATT服务进行交互。

AT + BLEUARTTX

此命令将发送指定的文本消息在命令模式下运行时通过UART服务。

代码库修订:0.3.0

参数:消息有效负载发送。有效载荷最多可以包含240个字符(因为AT命令字符串的总长度限制为最多256个字节)。

输出:此命令将产生错误消息,如果您未连接到中央设备,或者Bluefruit LE模块上的内部TX FIFO已满。

从固件版本开始, 0.6 .2 及更高版本,AT + BLEUARTTX可以接受一组有限的转义码序列:

\ r =回车符

\ n =新行

\ t =选项卡

\ b =退格

\\ =反斜杠

从固件发行版开始 0.6.7 及更高版本,由于AT + BLEUARTTX = ?, AT + BLEUARTTX可以接受以下转义码序列。对AT解析器有特定含义:

\? =发送单个问号

从固件版本 0.7.6 起,AT + BLEUARTTX可以接受以下转义码序列:

\ + =传输单个’+‘字符而不必担心`+++’模式开关组合

ESCAPE SEQUENCE注意:如果您尝试通过类似‘ble.print(“ 。..”);之类的代码发送转义序列,请注意,您需要发送一个双反斜杠,转义码才能按预期到达AT命令。例如:ble.println(“ AT + BLEUARTTX = Some Test \\ r \\ n”);

您必须连接到其他设备才能执行此命令

下载:文件

复制代码

# Send a string when connected to another device

AT+BLEUARTTX=THIS IS A TEST

OK

# Send a string when not connected

AT+BLEUARTTX=THIS IS A TEST

ERROR # Send a string when connected to another device

AT+BLEUARTTX=THIS IS A TEST

OK

# Send a string when not connected

AT+BLEUARTTX=THIS IS A TEST

ERROR

TX FIFO缓冲区处理

从固件版本 0.6.7 开始,当TX FIFO缓冲区已满时,将使用200ms的阻塞延迟来查看返回ERROR之前FIFO中是否有可用空间。下面的流程图详细说明了确切的过程:

开发板

注意:每个GATT事务都会进行TX FIFO完全检查(最多20字节的每个数据),因此大型数据传输可能具有多个200ms等待状态。

您可以使用AT + BLEUARTFIFO = TX命令检查TX FIFO的大小在发送数据之前,请确保缓冲区中有足够的可用空间。

TX FIFO的大小取决于所使用的固件版本:

固件《= 0.6.6: 160个字符宽

固件》 = 0.6.7: 1024个字符宽

在进行大型数据传输时,可能会传输部分有效载荷,并且该命令仍会产生如果FIFO在第三个中间时间未及时清空,则发生错误有效载荷传输(因为数据以最大20字节的块传输)。如果需要确保可靠的数据传输,则应在发送数据之前始终检查TX FIFO的大小,这可以使用AT + BLEUARTFIFO命令进行。如果没有足够的空间用于整个有效负载,请添加一个SW延迟,直到有足够的可用空间为止。任何单个AT + BLEUARTTX命令都可以放入FIFO,但是此命令的多个大实例可能会导致FIFO在传输过程中填满。

AT + BLEUARTTXF

这是一种便捷功能,其作用与 AT + BLEUARTTX ,但数据立即在单个BLE数据包(“ force 数据包”中为“ F”)中发送。此命令最多接受 20个字符,这是单个数据包中可以发送的字符数的限制。

代码库修订:0.7。 6

参数:请参见 AT + BLEUARTTX

输出:请参见 AT + BLEUARTTX

AT + BLEUARTRX

如果在命令模式下运行时从UART服务接收到任何数据,此命令会将UART服务的RX缓冲区转储到显示器。一旦使用此命令显示数据,数据就会从缓冲区中删除。

切换回数据模式时,缓冲区中剩余的任何字符都会导致在模式切换后立即显示缓冲的字符。完整(在可用缓冲区空间的限制内,在当前黑色的32KB SRAM器件上为1024字节,对于基于16KB SRAM的蓝色第一代BLEFriend板为160字节)。

代码库修订版:0.3.0

参数:无

输出:RX缓冲区的内容(如果有可用数据)

,您也可以使用AT + BLEUARTFIFO = RX命令进行检查

下载:文件

复制代码

# Command results when data is available

AT+BLEUARTRX

Sent from Android

OK

# Command results when no data is available

AT+BLEUARTRX

OK # Command results when data is available

AT+BLEUARTRX

Sent from Android

OK

# Command results when no data is available

AT+BLEUARTRX

OK

AT + BLEUARTFIFO

此该命令将返回BLE UART TX和RX FIFO中的可用空间。如果要传输大量数据,则可能要在发送前检查TX FIFO中是否有足够的可用空间,请记住,单个GATT数据包每个最多可以包含20个用户字节。

代码库修订:0.6.7

参数:不带参数运行此命令将返回两个逗号分隔的值,指示TX缓冲区中的可用空间,然后是RX缓冲区。要请求特定的缓冲区,可以使用“ TX”或“ RX”值(例如:“ AT + BLEUARTFIFO = TX”)执行命令。

输出 :如果不存在任何参数,则TX和RX FIFO缓冲区中剩余的可用空间,否则,指定的FIFO缓冲区中剩余的可用空间。

下载:文件

复制代码

AT+BLEUARTFIFO

1024,1024

OK

AT+BLEUARTFIFO=TX

1024

OK

AT+BLEUARTFIFO=RX

1024

OK AT+BLEUARTFIFO

1024,1024

OK

AT+BLEUARTFIFO=TX

1024

OK

AT+BLEUARTFIFO=RX

1024

OK

AT + BLEKEYBOARDEN

此命令将启用GATT over HID(GoH)键盘支持,使您可以在支持的iOS和Android设备上模拟键盘。默认情况下,HID键盘支持处于禁用状态,因此您需要将BLEKEYBOARDEN设置为1,然后执行系统重置,然后才能枚举键盘并出现在手机的Bluetooth(蓝牙)首选项中,可以将其绑定为BLE键盘。 p》

代码库修订:0.5.0

参数:1或0(1 =启用,0 =禁用)

输出:无

固件版本版本0.6.6,此命令现在是AT + BLEHIDEN的别名

必须先执行系统重置(ATZ),更改才能生效!

i》 在通过GATT键盘使用HID之前,您需要将移动设备与Bluetooth偏好面板中的Bluefruit LE模块绑定。

下载:文件

Co py代码

# Enable BLE keyboard support then reset

AT+BLEKEYBOARDEN=1

OK

ATZ

OK

# Disable BLE keyboard support then reset

AT+BLEKEYBOARDEN=0

OK

ATZ

OK # Enable BLE keyboard support then reset

AT+BLEKEYBOARDEN=1

OK

ATZ

OK

# Disable BLE keyboard support then reset

AT+BLEKEYBOARDEN=0

OK

ATZ

OK

AT + BLEKEYBOARD

通过BLE键盘界面发送文本数据(如果以前已经通过AT + BLEKEYBOARDEN启用了该数据)。

任何有效的alpha-可以发送数字字符,并且还支持以下转义序列:

\ r-回车符

\ n-换行符

\ b-Backspace

\ t-Tab

\\-反斜杠

从0.6.7版本开始,您还可以使用以下转义代码发送单个字符时(“ AT + BLEKEYBOARD =?”对于AT解析器具有另一种含义):

\? -问号

代码库修订:0.5.0

参数:文本字符串(可选,包括转义符)字符)以传输

输出:无

下载:文件

复制代码

# Send a URI with a new line ending to execute in Chrome, etc.

AT+BLEKEYBOARD=http://www.adafruit.com

OK

# Send a single question mark (special use case, 0.6.7+)

AT+BLEKEYBOARD=\?

OK # Send a URI with a new line ending to execute in Chrome, etc.

AT+BLEKEYBOARD=http://www.adafruit.com

OK

# Send a single question mark (special use case, 0.6.7+)

AT+BLEKEYBOARD=\?

OK

AT + BLEKEYBOARDCODE

将USB HID键码的原始十六进制序列发送到BLE键盘界面,包括键修饰符和最多六个字母数字

此命令接受以下字符串编码的字节数组有效负载,与通过GATT的HID发送键盘数据的方式匹配:

字节0 :修饰符

字节1 :保留(应始终为00)

字节2..7 :十六进制值)对应于HID键(如果不使用任何字符,则可以输入’00‘或将尾随的字符留空)

与AT + BLEKEYBOARDCODE命令一起发送,您必须发送第二个AT + BLEKEYBOARDCODE命令,该命令至少包含两个00个字符,以指示已释放键!

修饰符值

修饰符字节可以设置以下一个或多个位:

位0(0x01):左控制

位1(0x02):左移

位2(0x04):左Alt

位3(0x08):左窗口

位4( 0x10):右控制

第5位(0x20):右移

第6位(0x40) :右Alt

第7位(0x80):右窗口

代码库修订:0.5.0

参数:一组用连字符(’-‘)分隔的十六进制值。请注意,这些是HID扫描代码值,而不是标准ASCII值!

输出:无

HID键盘代码

十六进制格式的 HID键盘代码列表可以可以在此处找到(请参阅第7节),为方便起见,在下面列出:

HID键码值与ASCII键码不对应!例如,“ a”的HID密钥代码值为“ 04”,并且由于使用修饰符设置了大写字母值,因此没有大写字母“ A”的密钥代码。有关详细信息,请使用谷歌“ usb隐藏键盘扫描代码”,并查看以下示例。

下载:文件

复制代码

0x00 Reserved (no event indicated)

0x01 Keyboard ErrorRollOver

0x02 Keyboard POSTFail

0x03 Keyboard ErrorUndefined

0x04 Keyboard a and A

0x05 Keyboard b and B

0x06 Keyboard c and C

0x07 Keyboard d and D

0x08 Keyboard e and E

0x09 Keyboard f and F

0x0A Keyboard g and G

0x0B Keyboard h and H

0x0C Keyboard i and I

0x0D Keyboard j and J

0x0E Keyboard k and K

0x0F Keyboard l and L

0x10 Keyboard m and M

0x11 Keyboard n and N

0x12 Keyboard o and O

0x13 Keyboard p and P

0x14 Keyboard q and Q

0x15 Keyboard r and R

0x16 Keyboard s and S

0x17 Keyboard t and T

0x18 Keyboard u and U

0x19 Keyboard v and V

0x1A Keyboard w and W

0x1B Keyboard x and X

0x1C Keyboard y and Y

0x1D Keyboard z and Z

0x1E Keyboard 1 and !

0x1F Keyboard 2 and @

0x20 Keyboard 3 and #

0x21 Keyboard 4 and $

0x22 Keyboard 5 and %

0x23 Keyboard 6 and ^

0x24 Keyboard 7 and &

0x25 Keyboard 8 and *

0x26 Keyboard 9 and (

0x27 Keyboard 0 and )

0x28 Keyboard Return (ENTER)

0x29 Keyboard ESCAPE

0x2A Keyboard DELETE (Backspace)

0x2B Keyboard Tab

0x2C Keyboard Spacebar

0x2D Keyboard - and (underscore)

0x2E Keyboard = and +

0x2F Keyboard [ and {

0x30 Keyboard ] and }

0x31 Keyboard \ and |

0x32 Keyboard Non-US # and ~

0x33 Keyboard ; and :

0x34 Keyboard ’ and “

0x35 Keyboard Grave Accent and Tilde

0x36 Keyboard, and 《

0x37 Keyboard 。 and 》

0x38 Keyboard / and ?

0x39 Keyboard Caps Lock

0x3A Keyboard F1

0x3B Keyboard F2

0x3C Keyboard F3

0x3D Keyboard F4

0x3E Keyboard F5

0x3F Keyboard F6

0x40 Keyboard F7

0x41 Keyboard F8

0x42 Keyboard F9

0x43 Keyboard F10

0x44 Keyboard F11

0x45 Keyboard F12

0x46 Keyboard PrintScreen

0x47 Keyboard Scroll Lock

0x48 Keyboard Pause

0x49 Keyboard Insert

0x4A Keyboard Home

0x4B Keyboard PageUp

0x4C Keyboard Delete Forward

0x4D Keyboard End

0x4E Keyboard PageDown

0x4F Keyboard RightArrow

0x50 Keyboard LeftArrow

0x51 Keyboard DownArrow

0x52 Keyboard UpArrow

0x53 Keypad Num Lock and Clear

0x54 Keypad /

0x55 Keypad *

0x56 Keypad -

0x57 Keypad +

0x58 Keypad ENTER

0x59 Keypad 1 and End

0x5A Keypad 2 and Down Arrow

0x5B Keypad 3 and PageDn

0x5C Keypad 4 and Left Arrow

0x5D Keypad 5

0x5E Keypad 6 and Right Arrow

0x5F Keypad 7 and Home

0x60 Keypad 8 and Up Arrow

0x61 Keypad 9 and PageUp

0x62 Keypad 0 and Insert

0x63 Keypad 。 and Delete

0x64 Keyboard Non-US \ and |

0x65 Keyboard Application

0x66 Keyboard Power

0x67 Keypad =

0x68 Keyboard F13

0x69 Keyboard F14

0x6A Keyboard F15

0x6B Keyboard F16

0x6C Keyboard F17

0x6D Keyboard F18

0x6E Keyboard F19

0x6F Keyboard F20

0x70 Keyboard F21

0x71 Keyboard F22

0x72 Keyboard F23

0x73 Keyboard F24

0x74 Keyboard Execute

0x75 Keyboard Help

0x76 Keyboard Menu

0x77 Keyboard Select

0x78 Keyboard Stop

0x79 Keyboard Again

0x7A Keyboard Undo

0x7B Keyboard Cut

0x7C Keyboard Copy

0x7D Keyboard Paste

0x7E Keyboard Find

0x7F Keyboard Mute

0x80 Keyboard Volume Up

0x81 Keyboard Volume Down

0x82 Keyboard Locking Caps Lock

0x83 Keyboard Locking Num Lock

0x84 Keyboard Locking Scroll Lock

0x85 Keypad Comma

0x86 Keypad Equal Sign

0x87 Keyboard International1

0x88 Keyboard International2

0x89 Keyboard International3

0x8A Keyboard International4

0x8B Keyboard International5

0x8C Keyboard International6

0x8D Keyboard International7

0x8E Keyboard International8

0x8F Keyboard International9

0x90 Keyboard LANG1

0x91 Keyboard LANG2

0x92 Keyboard LANG3

0x93 Keyboard LANG4

0x94 Keyboard LANG5

0x95 Keyboard LANG6

0x96 Keyboard LANG7

0x97 Keyboard LANG8

0x98 Keyboard LANG9

0x99 Keyboard Alternate Erase

0x9A Keyboard SysReq/Attention

0x9B Keyboard Cancel

0x9C Keyboard Clear

0x9D Keyboard Prior

0x9E Keyboard Return

0x9F Keyboard Separator

0xA0 Keyboard Out

0xA1 Keyboard Oper

0xA2 Keyboard Clear/Again

0xA3 Keyboard CrSel/Props

0xA4 Keyboard ExSel

0xE0 Keyboard LeftControl

0xE1 Keyboard LeftShift

0xE2 Keyboard LeftAlt

0xE3 Keyboard Left GUI

0xE4 Keyboard RightControl

0xE5 Keyboard RightShift

0xE6 Keyboard RightAlt

0xE7 Keyboard Right GUI 0x00 Reserved (no event indicated)

0x01 Keyboard ErrorRollOver

0x02 Keyboard POSTFail

0x03 Keyboard ErrorUndefined

0x04 Keyboard a and A

0x05 Keyboard b and B

0x06 Keyboard c and C

0x07 Keyboard d and D

0x08 Keyboard e and E

0x09 Keyboard f and F

0x0A Keyboard g and G

0x0B Keyboard h and H

0x0C Keyboard i and I

0x0D Keyboard j and J

0x0E Keyboard k and K

0x0F Keyboard l and L

0x10 Keyboard m and M

0x11 Keyboard n and N

0x12 Keyboard o and O

0x13 Keyboard p and P

0x14 Keyboard q and Q

0x15 Keyboard r and R

0x16 Keyboard s and S

0x17 Keyboard t and T

0x18 Keyboard u and U

0x19 Keyboard v and V

0x1A Keyboard w and W

0x1B Keyboard x and X

0x1C Keyboard y and Y

0x1D Keyboard z and Z

0x1E Keyboard 1 and !

0x1F Keyboard 2 and @

0x20 Keyboard 3 and #

0x21 Keyboard 4 and $

0x22 Keyboard 5 and %

0x23 Keyboard 6 and ^

0x24 Keyboard 7 and &

0x25 Keyboard 8 and *

0x26 Keyboard 9 and (

0x27 Keyboard 0 and )

0x28 Keyboard Return (ENTER)

0x29 Keyboard ESCAPE

0x2A Keyboard DELETE (Backspace)

0x2B Keyboard Tab

0x2C Keyboard Spacebar

0x2D Keyboard - and (underscore)

0x2E Keyboard = and +

0x2F Keyboard [ and {

0x30 Keyboard ] and }

0x31 Keyboard \ and |

0x32 Keyboard Non-US # and ~

0x33 Keyboard ; and :

0x34 Keyboard ‘ and ”

0x35 Keyboard Grave Accent and Tilde

0x36 Keyboard, and 《

0x37 Keyboard 。 and 》

0x38 Keyboard / and ?

0x39 Keyboard Caps Lock

0x3A Keyboard F1

0x3B Keyboard F2

0x3C Keyboard F3

0x3D Keyboard F4

0x3E Keyboard F5

0x3F Keyboard F6

0x40 Keyboard F7

0x41 Keyboard F8

0x42 Keyboard F9

0x43 Keyboard F10

0x44 Keyboard F11

0x45 Keyboard F12

0x46 Keyboard PrintScreen

0x47 Keyboard Scroll Lock

0x48 Keyboard Pause

0x49 Keyboard Insert

0x4A Keyboard Home

0x4B Keyboard PageUp

0x4C Keyboard Delete Forward

0x4D Keyboard End

0x4E Keyboard PageDown

0x4F Keyboard RightArrow

0x50 Keyboard LeftArrow

0x51 Keyboard DownArrow

0x52 Keyboard UpArrow

0x53 Keypad Num Lock and Clear

0x54 Keypad /

0x55 Keypad *

0x56 Keypad -

0x57 Keypad +

0x58 Keypad ENTER

0x59 Keypad 1 and End

0x5A Keypad 2 and Down Arrow

0x5B Keypad 3 and PageDn

0x5C Keypad 4 and Left Arrow

0x5D Keypad 5

0x5E Keypad 6 and Right Arrow

0x5F Keypad 7 and Home

0x60 Keypad 8 and Up Arrow

0x61 Keypad 9 and PageUp

0x62 Keypad 0 and Insert

0x63 Keypad 。 and Delete

0x64 Keyboard Non-US \ and |

0x65 Keyboard Application

0x66 Keyboard Power

0x67 Keypad =

0x68 Keyboard F13

0x69 Keyboard F14

0x6A Keyboard F15

0x6B Keyboard F16

0x6C Keyboard F17

0x6D Keyboard F18

0x6E Keyboard F19

0x6F Keyboard F20

0x70 Keyboard F21

0x71 Keyboard F22

0x72 Keyboard F23

0x73 Keyboard F24

0x74 Keyboard Execute

0x75 Keyboard Help

0x76 Keyboard Menu

0x77 Keyboard Select

0x78 Keyboard Stop

0x79 Keyboard Again

0x7A Keyboard Undo

0x7B Keyboard Cut

0x7C Keyboard Copy

0x7D Keyboard Paste

0x7E Keyboard Find

0x7F Keyboard Mute

0x80 Keyboard Volume Up

0x81 Keyboard Volume Down

0x82 Keyboard Locking Caps Lock

0x83 Keyboard Locking Num Lock

0x84 Keyboard Locking Scroll Lock

0x85 Keypad Comma

0x86 Keypad Equal Sign

0x87 Keyboard International1

0x88 Keyboard International2

0x89 Keyboard International3

0x8A Keyboard International4

0x8B Keyboard International5

0x8C Keyboard International6

0x8D Keyboard International7

0x8E Keyboard International8

0x8F Keyboard International9

0x90 Keyboard LANG1

0x91 Keyboard LANG2

0x92 Keyboard LANG3

0x93 Keyboard LANG4

0x94 Keyboard LANG5

0x95 Keyboard LANG6

0x96 Keyboard LANG7

0x97 Keyboard LANG8

0x98 Keyboard LANG9

0x99 Keyboard Alternate Erase

0x9A Keyboard SysReq/Attention

0x9B Keyboard Cancel

0x9C Keyboard Clear

0x9D Keyboard Prior

0x9E Keyboard Return

0x9F Keyboard Separator

0xA0 Keyboard Out

0xA1 Keyboard Oper

0xA2 Keyboard Clear/Again

0xA3 Keyboard CrSel/Props

0xA4 Keyboard ExSel

0xE0 Keyboard LeftControl

0xE1 Keyboard LeftShift

0xE2 Keyboard LeftAlt

0xE3 Keyboard Left GUI

0xE4 Keyboard RightControl

0xE5 Keyboard RightShift

0xE6 Keyboard RightAlt

0xE7 Keyboard Right GUI

以下示例显示了如何使用此命令:

下载:文件

复制代码

# send ’abc‘ with left shift key (0x02) --》 ’ABC‘

AT+BLEKEYBOARDCODE=02-00-04-05-06-00-00

OK

# Indicate that the keys were released (mandatory!)

AT+BLEKEYBOARDCODE=00-00

OK # send ’abc‘ with left shift key (0x02) --》 ’ABC‘

AT+BLEKEYBOARDCODE=02-00-04-05-06-00-00

OK

# Indicate that the keys were released (mandatory!)

AT+BLEKEYBOARDCODE=00-00

OK

AT + BLEHIDEN

此命令将启用GATT over HID(GoH)支持,使您可以在受支持的iOS,Android,OSX和Windows 10设备上模拟键盘,鼠标或媒体控件。默认情况下,HID支持处于禁用状态,因此您需要将BLEHIDEN设置为1,然后执行系统重置,然后枚举HID设备并出现在中央设备上。

代码库修订 》:0.6.6

参数:1或0(1 =启用,0 =禁用)

输出:无

您通常需要“绑定” Bluefruit LE外设才能使用HID命令,确切的绑定过程将从一个操作系统更改为另一个操作系统。

如果您以前已绑定到设备并需要清除绑定,则可以运行AT + FACTORYRESET命令,该命令将删除Bluefruit LE模块上所有已存储的绑定数据。

下载:文件

复制代码

# Enable GATT over HID support on the Bluefruit LE module

AT+BLEHIDEN=1

OK

# Reset so that the changes take effect

ATZ

OK # Enable GATT over HID support on the Bluefruit LE module

AT+BLEHIDEN=1

OK

# Reset so that the changes take effect

ATZ

OK

AT + B LEHIDMOUSEMOVE

移动HID鼠标或滚动指定位置的刻度数。

所有参数均为带符号的8位值(-128至+127)。正值向右或向下移动,原点位于左上角。

代码库修订:0.6.6

参数:X刻度(+/-),Y刻度(+/-),滚轮(+/-),平移轮(+/-)

输出:无

下载:文件

复制代码

# Move the mouse 100 ticks right and 100 ticks down

AT+BLEHIDMOUSEMOVE=100,100

OK

# Scroll down 20 pixels or lines (depending on context)

AT+BLEHIDMOUSEMOVE=,,20,

OK

# Pan (horizontal scroll) to the right (exact behaviour depends on OS)

AT+BLEHIDMOUSEMOVE=0,0,0,100 # Move the mouse 100 ticks right and 100 ticks down

AT+BLEHIDMOUSEMOVE=100,100

OK

# Scroll down 20 pixels or lines (depending on context)

AT+BLEHIDMOUSEMOVE=,,20,

OK

# Pan (horizontal scroll) to the right (exact behaviour depends on OS)

AT+BLEHIDMOUSEMOVE=0,0,0,100

AT + BLEHIDMOUSEBUTTON

通过特定的字符串操作HID鼠标按钮。

代码库修订:0.6.6

参数:按钮掩码字符串[L] [R] [M] [B] [F],操作[PRESS] [CLICK] [DOUBLECLICK] [HOLD]

L =左按钮

R =右按钮

M =中间按钮

B =后退按钮

F =前进按钮

如果第二个参数(动作)为“ HOLD”,则可以传递一个可选的第三个参数,以指定按钮应保持的时间(以毫秒为单位)。

O utput :无

下载:文件

复制代码

# Double click the left mouse button

AT+BLEHIDMOUSEBUTTON=L,doubleclick

OK

# Press the left mouse button down, move the mouse, then release L

# This is required to perform ’drag‘ then stop type operations

AT+BLEHIDMOUSEBUTTON=L

OK

AT+BLEHIDMOUSEMOVE=-100,50

OK

AT+BLEHIDMOUSEBUTTON=0

OK

# Hold the backward mouse button for 200 milliseconds (OS dependent)

AT+BLEHIDMOUSEBUTTON=B,hold,200

OK # Double click the left mouse button

AT+BLEHIDMOUSEBUTTON=L,doubleclick

OK

# Press the left mouse button down, move the mouse, then release L

# This is required to perform ’drag‘ then stop type operations

AT+BLEHIDMOUSEBUTTON=L

OK

AT+BLEHIDMOUSEMOVE=-100,50

OK

AT+BLEHIDMOUSEBUTTON=0

OK

# Hold the backward mouse button for 200 milliseconds (OS dependent)

AT+BLEHIDMOUSEBUTTON=B,hold,200

OK

AT + BLEHIDCONTROLKEY

为绑定的设备发送HID媒体控制命令(调整音量,屏幕亮度,歌曲选择等)。

代码库修订 :0.6.6

参数:要发送的HID控制键,后跟可选的延迟时间(以毫秒为单位)以按住按钮

控制键字符串可以可以是下列值之一:

您还可以发送’0xABCD‘格式的原始16位十六进制值。可以在此处找到16位“ HID消费者控制密钥代码”的完整列表(请参见第12节)。

输出:通常没有。

系统控件(在大多数系统上都可以使用)

BRIGHTNESS +

BRIGHTNESS-

媒体控件(适用于大多数系统)

PLAYPAUSE

MEDIANEXT

MEDIAPREVIOUS

MEDIASTOP

声音控制(在大多数系统上都可以使用)

音量

静音

低音

TREBLE

BASS_BOOST

VOLUME +

VOLUME-

BASS +

BASS-

TREBLE +

TREBLE-

应用程序启动器(到目前为止仅Windows 10)

EMAILREADER

CALCULATOR

FILEBROWSER

浏览器/文件浏览器控件(仅适用于Windows/Android上的Firefox)

SEARCH

HOME

返回

前进

停止

刷新

书签

如果未绑定并连接到中央设备,此命令将返回ERROR。在运行这些命令之前,请确保已连接并启用了HID支持。

下载:文件

复制代码

# Toggle the sound on the bonded central device

AT+BLEHIDCONTROLKEY=MUTE

OK

# Hold the VOLUME+ key for 500ms

AT+BLEHIDCONTROLKEY=VOLUME+,500

OK

# Send a raw 16-bit Consumer Key Code (0x006F = Brightness+)

AT+BLEHIDCONTROLKEY=0x006F

OK # Toggle the sound on the bonded central device

AT+BLEHIDCONTROLKEY=MUTE

OK

# Hold the VOLUME+ key for 500ms

AT+BLEHIDCONTROLKEY=VOLUME+,500

OK

# Send a raw 16-bit Consumer Key Code (0x006F = Brightness+)

AT+BLEHIDCONTROLKEY=0x006F

OK

AT + BLEHIDGAMEPADEN

在HID服务中启用HID游戏手柄支持。默认情况下,从0.7.6版固件开始禁用游戏手柄,因为它会在iOS和OS X上引起问题,并且只能在基于Android和Windows的设备上使用。

代码库修订版:0.7.6

参数:是否应通过以下值之一启用游戏手柄服务:

on

off

1

0

输出:如果不带参数执行,则为数值将返回指示电池服务是启用(1)还是禁用(0)。

此命令需要系统重置才能生效。

AT + BLEHIDGAMEPAD

通过BLE发送特定的HID游戏手柄有效载荷

代码库修订:0.7.0

参数:以下逗号分隔的参数可用:

x :左,右:如果X = -1,则按“ LEFT”;如果X = 1,则按“ RIGHT”;如果X = 0,则既不按左,也不按右

y :上,下:如果Y = -1,则按“ UP”;如果Y = 1,则按“ DOWN”;如果Y = 0,则既不按上,也不按

按钮:0x00-0xFF,这是8个按钮0-7的位掩码

输出:没有任何

HID游戏手柄默认从0.7.6版本开始被禁用,并且必须首先通过AT + BLEHIDGAMEPADEN启用= 1才能使用。

注意:您需要为每个按钮发送’press‘和’release‘事件,否则系统会认为按钮一直处于按下状态,直到收到释放状态为止。

下载:文件

复制代码

# Press ’RIGHT‘ and ’Button0‘ at the same time

AT+BLEHIDGAMEPAD=1,0,0x01

# Press ’UP‘ and ’Button1‘ + ’Button0‘ at the same time

AT+BLEHIDGAMEPAD=0,-1,0x03 # Press ’RIGHT‘ and ’Button0‘ at the same time

AT+BLEHIDGAMEPAD=1,0,0x01

# Press ’UP‘ and ’Button1‘ + ’Button0‘ at the same time

AT+BLEHIDGAMEPAD=0,-1,0x03

AT + BLEMIDIEN

启用或禁用BLE MIDI服务。

代码库修订:0.7。 0

参数:状态,可以是以下之一:

打开

关闭

0

1

输出:如果不执行任何参数,它将以整数形式返回MIDI服务的当前状态,指示如果已启用(1)或已禁用(0)。

注意:该命令将需要重置才能生效。

下载:文件

复制代码

# Check the current state of the MIDI service

AT+BLEMIDIEN

1

OK

# Enable the MIDI Service

AT+BLEMIDIEN=1

OK # Check the current state of the MIDI service

AT+BLEMIDIEN

1

OK

# Enable the MIDI Service

AT+BLEMIDIEN=1

OK

AT + BLEMIDIRX

从缓冲区读取传入的MIDI字符数组。

代码库修订:0.7.0

参数:无

输出:字节数组格式的midi事件

下载:文件

复制代码

AT+BLEMIDIRX

90-3C-7F

OK AT+BLEMIDIRX

90-3C-7F

OK

AT + BLEMIDITX

发送MIDI事件到主机。

代码库修订:0.7.0

参数:十六进制数组格式的MIDI事件,可以是:

一系列完整的MIDI事件(最多4个事件)

恰好是1个完整的MIDI事件+几个无状态的运行事件(最多7个)

输出:无

下载:文件

复制代码

# Send 1 event (middle C with max velocity)

AT+BLEMIDITX=90-3C-7F

OK

# Send 2 events

AT+BLEMIDITX=90-3C-7F-A0-3C-7F

OK

# Send 1 full event + running event

AT+BLEMIDITX=90-3C-7F-3C-7F

OK # Send 1 event (middle C with max velocity)

AT+BLEMIDITX=90-3C-7F

OK

# Send 2 events

AT+BLEMIDITX=90-3C-7F-A0-3C-7F

OK

# Send 1 full event + running event

AT+BLEMIDITX=90-3C-7F-3C-7F

OK

AT + BLEBATTEN

按照Bluetooth SIG的定义启用电池服务。

代码库修订:0.7.0

参数:是否通过以下值中的一个启用电池服务:

on

off

1

0

输出:如果不执行任何参数,则将返回一个数字值,指示是否维修电池启用(1)或禁用(0)。

此命令需要系统重置以生效。

下载:文件

复制代码

# Enable the Battery Service

AT+BLEBATTEN=1

OK # Enable the Battery Service

AT+BLEBATTEN=1

OK

AT + BLEBATTVAL

设置电池服务(如果已启用)的当前电池电量百分比(0..100)。

代码库修订版:0.7.0

参数:电池百分比在0..100范围内。

输出:如果不执行任何参数,则将当前电池电量存储在特性中。

下载:文件

复制代码

# Set the battery level to 72%

AT+BLEBATTVAL=72

OK # Set the battery level to 72%

AT+BLEBATTVAL=72

OK

BLE GAP

GAP代表通用访问配置文件,用于管理与低功耗蓝牙设备的广告和连接。

以下命令可用于配置BLE模块上的GAP设置。

您可以使用这些命令来修改广告数据(例如,广告过程中出现的设备名称),检索有关已在两个设备之间建立的连接或断开连接的信息,如果您不再希望保持连接。

AT + GAPCONNECTABLE

此命令可用于防止设备“可连接”。

代码库修订:0.7.0

参数:设备是否应使用以下值之一将自身宣传为可连接:

1

0

输出:’connec

Download:file

Copy Code

# Make the device non-connectable (advertising only)

AT+GAPCONNECTABLE=0

OK

# Check the current connectability status

AT+GAPCONNECTABLE

1

OK # Make the device non-connectable (advertising only)

AT+GAPCONNECTABLE=0

OK

# Check the current connectability status

AT+GAPCONNECTABLE

1

OK

AT + GAPGETCONN

显示当前连接状态(无论是否连接到其他BLE设备)。

代码库修订 :0.3.0

参数:无

输出:如果我们已连接,则为1,否则为0

下载:文件

复制代码

# Connected

AT+GAPGETCONN

1

OK

# Not connected

AT+GAPGETCONN

0

OK # Connected

AT+GAPGETCONN

1

OK

# Not connected

AT+GAPGETCONN

0

OK

AT + GAPDISCONNECT

如果我们当前已连接,请断开与外部设备的连接。

代码库修订:0.3.0

参数:无

输出:无

下载:文件

复制代码

AT+GAPDISCONNECT

OK AT+GAPDISCONNECT

OK

AT + GAPDEVNAME

获取或设置设备名称,该名称包含在Bluefruit LE模块的广告负载中

代码库修订:0.3.0

参数:

无法读取当前设备名称

如果要更改值,则使用新设备名称

输出:如果命令以读取模式执行,则为设备名称

更新设备名称会将新值保留到非易失性存储器中,并且在重置设备时将使用更新的名称。要将设备重置为出厂设置并从内存中清除配置数据,请运行AT + FACTORYRESET命令。

下载:文件

复制代码

# Read the current device name

AT+GAPDEVNAME

UART

OK

# Update the device name to ‘BLEFriend’

AT+GAPDEVNAME=BLEFriend

OK

# Reset to take effect

ATZ

OK # Read the current device name

AT+GAPDEVNAME

UART

OK

# Update the device name to ‘BLEFriend’

AT+GAPDEVNAME=BLEFriend

OK

# Reset to take effect

ATZ

OK

AT + GAPDELBONDS

Bluefruit LE模块上存储的删除和绑定信息。

代码库修订:0.3.0

参数:无

输出:无

下载:文件

复制代码

AT+GAPDELBONDS

OK AT+GAPDELBONDS

OK

AT + GAPINTERVALS

获取或设置Bluefruit LE模块的各种广告和连接间隔。

使用此命令时要格外小心,因为更改间隔很容易引起问题,并且取决于某些移动设备可能选择的值不再识别

代码库修订:0.3.0

参数:如果更新GAP时间间隔,可以输入以下逗号分隔的值:

最小连接间隔(以毫秒为单位)

最大连接间隔(以毫秒为单位)

快速广告间隔(以毫秒为单位)

快速广告超时(以秒为单位)

》 = 0.7.0:低功耗广告间隔(以毫秒为单位),默认= 417.5 ms

为节省电量,Bluefruit模块在投放广告后会自动降低到较低的广告投放率“快速广告超时”秒。默认值为30秒(“快速广告超时”)。在固件《0.7.0中,低功耗广告间隔被硬编码为大约0.6s。通过可选的第五个参数在0.7.0固件版本中增加了对控制低功率间隔的支持。

请注意以下最大和最大限制。 GAP参数:

绝对最小连接间隔:10ms

绝对最大连接间隔:4000ms

绝对最小广告投放间隔:20ms

绝对最大快速广告投放间隔:10240ms

绝对最小低投放低功耗广告间隔:20ms

绝对最大低功耗广告间隔:10240ms

如果您只希望更新一个间隔值,则将其他以逗号分隔的值保留为空(例如,‘,110,只会更新第三个值,广告间隔)。

输出:如果读取当前的GAP间隔设置,则t他将显示以下逗号分隔的信息:

最小连接间隔(以毫秒为单位)

最大连接间隔(以毫秒为单位)

广告间隔(以毫秒为单位)

广告超时(以毫秒为单位)

i》 更新GAP间隔会将新值保留在非易失性存储器中,并且在重置设备时将使用更新后的值。要将设备重置为出厂设置并从内存中清除配置数据,请运行AT + FACTORYRESET命令。

下载:文件

复制代码

# Read the current GAP intervals

AT+GAPINTERVALS

20,100,100,30

# Update all values

AT+GAPINTERVALS=20,200,200,30

OK

# Update only the advertising interval

AT+GAPINTERVALS=,,150,

OK # Read the current GAP intervals

AT+GAPINTERVALS

20,100,100,30

# Update all values

AT+GAPINTERVALS=20,200,200,30

OK

# Update only the advertising interval

AT+GAPINTERVALS=,,150,

OK

AT + GAPSTARTADV

如果还没有,则导致Bluefruit LE模块开始传输广告包(假设我们尚未连接到外部设备。)

代码库修订:0.3.0

参数:无

输出:无

下载:文件

复制代码

# Command results when advertising data is not being sent

AT+GAPSTARTADV

OK

# Command results when we are already advertising

AT+GAPSTARTADV

ERROR

# Command results when we are connected to another device

AT+GAPSTARTADV

ERROR # Command results when advertising data is not being sent

AT+GAPSTARTADV

OK

# Command results when we are already advertising

AT+GAPSTARTADV

ERROR

# Command results when we are connected to another device

AT+GAPSTARTADV

ERROR

AT + GAPSTOPADV

阻止广告数据包通过Bluefruit LE模块传输。

代码库修订: 0.3.0

参数:无

Ou tput :无

下载:文件

复制代码

AT+GAPSTOPADV

OK AT+GAPSTOPADV

OK

AT + GAPSETADVDATA

遵循蓝牙4.0或4.1核心规范中的指导,将原始广告数据有效载荷设置为指定的字节数组(覆盖常规广告数据)。

特别是,核心规范补充(CSS)v4 包含有关常见广告数据字段的详细信息,例如“标志”(A部分,第1.3节)和各种服务UUID列表(A部分,第1.1节)。蓝牙SIG的通用访问配置文件页面上提供了所有可能的GAP数据类型的列表。

广告数据有效负载包含通用访问配置文件数据,该数据以以下格式插入到广告包中:[U8:LEN ] [U8:数据类型值] [n:值]

警告:此该命令要求您具备有关蓝牙4.0或4.1核心规范的低级详细信息的知识,并且只能由专业用户使用。滥用此命令很容易导致您的设备无法被无线电范围内的中央设备检测到。

警告:此命令将覆盖正常的广告有效负载,并可能阻止某些服务按预期方式运行。

要将广告数据恢复为正常的默认值,请使用AT + FACTORYRESET命令。

例如,要插入“标志”数据类型(数据类型值为0x01)并将其值设置为0x06/0b00000110(不支持BR/EDR和LE常规可发现模式),我们将使用以下字节数组:

下载:文件

复制代码

02-01-06 02-01-06

0x02表示条目中的字节数

0x01是“数据类型值”,并表示这是“ 标记’

0x06(0b00000110)是F滞后值,并声明以下字段(请参见Core Specification 4.0,第3卷,C部分,18.1):

LE常规可发现模式(即任何人都可以发现此设备)

不支持BR/EDR (即,这是仅适用于低功耗蓝牙的设备)

如果我们还希望在广告数据中包含两个16位服务UUID(以便侦听设备知道我们支持这些服务),则可以将以下数据附加到字节数组:

下载:文件

复制代码

05-02-0D-18-0A-18 05-02-0D-18-0A-18

0x05表示条目(5)中的字节数

0x02是“数据类型值”,并表示这是“ 16位服务类UUID的不完整列表”

0x0D 0x18是第一个16位UUID(转换为 0x180D ,对应于

0x0A 0x18是另一个16位UUID(转换为 0x180A ,与设备信息服务相对应)。

包括服务UUID非常重要,因为某些移动应用程序仅适用于在广告数据包中广告特定服务UUID的设备。例如,Nordic Semiconductors的大多数应用程序都是如此。

代码库修订:0.3.0

参数:应该插入广告包的广告数据部分的原始字节数组,请注意不要超出蓝牙核心规范定义的空间限制。

响应:无

下载:文件

复制代码

# Advertise as Discoverable and BLE only with 16-bit UUIDs 0x180D and 0x180A

AT+GAPSETADVDATA=02-01-06-05-02-0d-18-0a-18

OK # Advertise as Discoverable and BLE only with 16-bit UUIDs 0x180D and 0x180A

AT+GAPSETADVDATA=02-01-06-05-02-0d-18-0a-18

OK

此命令的结果可以在下面的截图中看到,该截图取自嗅探器,分析了Wireshark中的广告数据包。广告数据有效负载在图像底部的原始字节数组中以蓝色高亮显示,而数据包分析在上部:

开发板

BLE GATT

GATT是通用ATTribute配置文件的标准,用于管理连接设备之间的数据组织和数据交换。一台设备(外围设备)充当GATT服务器,将数据存储在 Attribute 记录中,连接中的第二台设备(中央设备)充当GATT客户端,在必要时向服务器请求数据

以下命令可用于在BLEFriend上创建自定义GATT服务和特征,用于存储和交换数据。

请注意,您在此处定义的任何特征会自动保存到设备上的非易失性FLASH配置存储器中,并在下次设备启动时重新初始化。

您需要通过“ ATZ”执行系统重置,然后以下大多数命令才会生效!

GATT限制

由于SRAM和资源可用性,以下命令具有以下限制:创建或使用custo时应牢记mer GATT服务和特性。

这些值适用于固件0.7.0及更高版本:

最大服务数量:10

最大服务数量特性:30

每个特性的最大缓冲区大小:32字节

CCCD的最大数量:16

如果要清除以前的任何配置值,请在进行新的外围设备配置之前输入“ AT + FACTORYRESET ”命令。

AT + GATTCLEAR

清除设备上定义的所有自定义GATT服务和特征。

代码库修订:0.3.0

参数:无

响应:无

下载:文件

复制代码

AT+GATTCLEAR

OK AT+GATTCLEAR

OK

AT + GATTADDSERVICE

添加新的自定义服务

代码库修订:0.3.0

参数:此命令接受一组用逗号分隔的命令用于定义服务属性的键值对。可以使用以下键值对:

UUID :用于此服务的16位UUID。 16位值应为十六进制格式(0x1234)。

UUID128 :用于此服务的128位UUID。 128位值应采用以下格式:00-11-22-33-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

响应:自定义GATT服务查找表中服务的索引值。 (重要的是要跟踪这些索引值以便以后与服务一起使用。)

注意:键值不区分大小写

仅可以为服务输入一种UUID类型(UUID或UUID128)

下载:文件

复制代码

# Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK # Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK

下载:文件

复制代码

# Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a custom service to the peripheral

AT+GATTADDSERVICE=UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

1

OK

# Add a custom characteristic to the above service (making sure that there

# is no conflict between the 16-bit UUID and bytes 3+4 of the 128-bit service UUID)

AT+GATTADDCHAR=UUID=0x0002,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

1

OK # Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a custom service to the peripheral

AT+GATTADDSERVICE=UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

1

OK

# Add a custom characteristic to the above service (making sure that there

# is no conflict between the 16-bit UUID and bytes 3+4 of the 128-bit service UUID)

AT+GATTADDCHAR=UUID=0x0002,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

1

OK

AT + GATTADDCHAR

为自外围设备(通过AT + GATTADDSERVICE)添加的最后一个服务添加自定义特征。

AT + GATTADDCHAR必须在AT + GATTADDSERVICE之后运行,并将新特性添加到最后添加的服务定义。

从Bluefruit LE固件的0.6.6版本开始,您现在可以在此命令中使用自定义的128位UUID。请参阅此命令说明底部的示例。

代码库修订:0.3.0

Parameters :此命令接受一组逗号分隔的键值对,用于定义特征属性。可以使用以下键值pais:

UUID :用于特征的16位UUID(将插入到第3和第4个字节中父服务的128位UUID)。此值应以十六进制格式输入(例如‘UUID = 0x1234’)。此值必须唯一,并且不得与父服务的128位UUID的字节3 + 4冲突。

PROPERTIES :8位特征属性字段,已定义由Bluetooth SIG提供。可以使用以下值:

0x02-读取

0x04-写入无响应

0x08-写入

0x10 -通知

0x20-指示

MIN_LEN :此特征值的最小大小(以字节为单位,最小值= 1,最大值= 20,默认= 1)

MAX_LEN :特征值的最大大小(以字节为单位,最小值= 1,最大值= 20,默认值= 1)

VALUE :分配给该特性的初始值(在‘MIN_LEN’和‘MAX_LEN’的范围内)。值可以是整数(“ -100”,“ 27” ),十六进制值(“ 0xABCD”),字节数组(“ aa-bb-cc-dd”)或字符串(“ GATT!”)。

》 = 0.7.0 -DATATYPE :此参数指示存储在特征中的数据类型,用于帮助正确解析数据。它可以是以下值之一:

自动(0,默认值)

STRING(1)

BYTEARRAY(2)

INTEGER(3)

》 = 0.7.0-description :将指定的字符串添加为特征描述条目

》 = 0.7.0-演示:将指定的值添加为特征表示格式条目

响应:广告的索引值自定义GATT特征查询表中的特征。 (重要的是要跟踪这些特征索引值,以便以后使用该特征。)

注意:键值不区分大小写

确保16位UUID是唯一的,并且与128位服务UUID的字节3 + 4不冲突

下载:文件

复制代码

# Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK # Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK

下载:文件

复制代码

# Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a custom service to the peripheral

AT+GATTADDSERVICE=UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

1

OK

# Add a custom characteristic to the above service (making sure that there

# is no conflict between the 16-bit UUID and bytes 3+4 of the 128-bit service UUID)

AT+GATTADDCHAR=UUID=0x0002,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

1

OK # Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a custom service to the peripheral

AT+GATTADDSERVICE=UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

1

OK

# Add a custom characteristic to the above service (making sure that there

# is no conflict between the 16-bit UUID and bytes 3+4 of the 128-bit service UUID)

AT+GATTADDCHAR=UUID=0x0002,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

1

OK

Bluefruit LE固件的版本 0.6.6 添加了使用新的“ UUID128 ”标志添加与父服务无关的自定义128位UUID的功能。 UUID(在传递16位‘ UUID ’标志时使用)。

要为您的客户特征指定128位UUID,请输入类似于以下内容的值语法:

下载:文件

复制代码

Bluefruit LE固件的# Add a custom characteristic to the above service using a

# custom 128-bit UUID

AT+GATTADDCHAR=UUID128=00-11-22-33-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

1

OK # Add a custom characteristic to the above service using a

# custom 128-bit UUID

AT+GATTADDCHAR=UUID128=00-11-22-33-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

1

OK

版本 0.7.0 添加了新的 DESCRIPTION 和 PRESENTATION 按键,对应于GATT特征用户描述和GATT特征表示格式描述符。

DESCRIPTION 字段是一个字符串,其中包含特征的简短文本描述。某些应用程序可能不会显示此数据,但可以使用类似Nordic在iOS和Android上的“主控制面板”应用程序看到。

PRESENTATION 字段包含7字节封装特征表示格式数据的有效负载。它需要一组特定的字节和值才能正常工作。有关如何格式化有效负载的详细信息,请参见以下链接:https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u = org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml

以下示例显示了如何使用这两个新字段:

下载:文件

复制代码

AT+GATTADDCHAR=UUID=0x2A37, PROPERTIES=0x10, MIN_LEN=2, MAX_LEN=3, VALUE=00-40,

DESCRIPTION=HRM Measurement, PRESENTATION=17-00-AC-27-01-00-00 AT+GATTADDCHAR=UUID=0x2A37, PROPERTIES=0x10, MIN_LEN=2, MAX_LEN=3, VALUE=00-40,

DESCRIPTION=HRM Measurement, PRESENTATION=17-00-AC-27-01-00-00

对于特征表示格式,我们有:

格式= IEEE-11073 32位FLOAT(十进制23,十六进制0x17)

指数= 0/无

单位=热力学温度:华氏度(0x27AC)-蓝牙LE单元列表

命名空间= Bluetooth SIG分配的编号(0x01)

描述=无(0x0000)

Nordic的主控制面板应用程序的结果可以在下面看到:

开发板

AT + GATTCHAR

获取或获取设置指定的自定义GATT特征的值(基于通过AT + GATTADDCHAR将特征添加到系统时返回的索引ID)。

代码库修订:0.3.0

参数:此函数采用一个或两个逗号分隔的函数(一个参数=读取,两个参数=写入)。

第一个参数是从AT + GATTADDCHAR函数返回的特征索引值。此参数始终是必需的,如果未输入第二个参数,则将返回该特性的当前值。

第二个(可选)参数是分配给该特性的新值(在MIN_SIZE和

响应:如果该命令在读取模式下使用(仅提供特征索引作为值),则响应将显示特征的当前值。如果在写模式下使用该命令(提供了两个逗号分隔的值),则将更新特征以使用提供的值。

下载:文件

复制代码

# Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK

# Read the battery measurement characteristic (index ID = 1)

AT+GATTCHAR=1

0x64

OK

# Update the battery measurement characteristic to 32 (hex 0x20)

AT+GATTCHAR=1,32

OK

# Verify the previous write attempt

AT+GATTCHAR=1

0x20

OK # Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK

# Read the battery measurement characteristic (index ID = 1)

AT+GATTCHAR=1

0x64

OK

# Update the battery measurement characteristic to 32 (hex 0x20)

AT+GATTCHAR=1,32

OK

# Verify the previous write attempt

AT+GATTCHAR=1

0x20

OK

AT + GATTLIST

列出设备上已定义的所有自定义GATT服务和特征。

代码库修订:0.3.0

参数:无

响应 》:设备上定义的所有自定义服务和特征的列表。

下载:文件

复制代码

# Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK

# Add a custom service to the peripheral

AT+GATTADDSERVICE=UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

2

OK

# Add a custom characteristic to the above service (making sure that there

# is no conflict between the 16-bit UUID and bytes 3+4 of the 128-bit service UUID)

AT+GATTADDCHAR=UUID=0x0002,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

2

OK

# Get a list of all custom GATT services and characteristics on the device

AT+GATTLIST

ID=01,UUID=0x180F

ID=01,UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,MAX_LEN=1,VALUE=0x64

ID=02,UUID=0x11, UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

ID=02,UUID=0x02,PROPERTIES=0x02,MIN_LEN=1,MAX_LEN=1,VALUE=0x64

OK # Clear any previous custom services/characteristics

AT+GATTCLEAR

OK

# Add a battery service (UUID = 0x180F) to the peripheral

AT+GATTADDSERVICE=UUID=0x180F

1

OK

# Add a battery measurement characteristic (UUID = 0x2A19), notify enabled

AT+GATTADDCHAR=UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,VALUE=100

1

OK

# Add a custom service to the peripheral

AT+GATTADDSERVICE=UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

2

OK

# Add a custom characteristic to the above service (making sure that there

# is no conflict between the 16-bit UUID and bytes 3+4 of the 128-bit service UUID)

AT+GATTADDCHAR=UUID=0x0002,PROPERTIES=0x02,MIN_LEN=1,VALUE=100

2

OK

# Get a list of all custom GATT services and characteristics on the device

AT+GATTLIST

ID=01,UUID=0x180F

ID=01,UUID=0x2A19,PROPERTIES=0x10,MIN_LEN=1,MAX_LEN=1,VALUE=0x64

ID=02,UUID=0x11, UUID128=00-11-00-11-44-55-66-77-88-99-AA-BB-CC-DD-EE-FF

ID=02,UUID=0x02,PROPERTIES=0x02,MIN_LEN=1,MAX_LEN=1,VALUE=0x64

OK

AT + GATTCHARRAW

此只读命令从特征读取二进制(而不是ASCII)数据。它不可打印,但开销较小,并且在Arduino中编写库时更容易。

代码库修订:0.7.0

参数:用于显示数据的特征的数字ID

输出:与指定特征对应的二进制数据。

注意:这是一个专用命令,命令末尾没有NEWLINE!

调试

以下调试命令在Bluefruit LE模块上可用:

谨慎使用这些命令,因为它们很容易导致ARM内核出现HardFault错误,这将导致设备停止响应。

AT + DBGMEMRD

显示原始内存

代码库修订:0.3.0

参数:可以将以下逗号分隔的参数设置为:与此命令一起使用:

从中读取内存的起始地址(十六进制形式,带或不带开头的“ 0x”)

字长(可以为1 、、 2、4或8)

要读取的字数

输出:使用指定的十六进制格式的原始内存内容长度和字长(有关详细信息,请参见下面的示例)

下载:文件

复制代码

# Read 12 1-byte values starting at 0x10000009

AT+DBGMEMRD=0x10000009,1,12

FF FF FF FF FF FF FF 00 04 00 00 00

OK

# Try to read 2 4-byte values starting at 0x10000000

AT+DBGMEMRD=0x10000000,4,2

55AA55AA 55AA55AA

OK

# Try to read 2 4-byte values starting at 0x10000009

# This will fail because the Cortex M0 can‘t perform misaligned

# reads, and any non 8-bit values must start on an even address

AT+DBGMEMRD=0x10000009,4,2

MISALIGNED ACCESS

ERROR

# Read 12 1-byte values starting at 0x10000009

AT+DBGMEMRD=0x10000009,1,12

FF FF FF FF FF FF FF 00 04 00 00 00

OK

# Try to read 2 4-byte values starting at 0x10000000

AT+DBGMEMRD=0x10000000,4,2

55AA55AA 55AA55AA

OK

# Try to read 2 4-byte values starting at 0x10000009

# This will fail because the Cortex M0 can’t perform misaligned

# reads, and any non 8-bit values must start on an even address

AT+DBGMEMRD=0x10000009,4,2

MISALIGNED ACCESS

ERROR

AT + DBGNVMRD

显示非以下内容的配置数据部分的原始内容:易失性内存

代码库修订:0.3.0

属性:无

输出:来自非易失性存储器的原始配置数据

下载:文件

复制代码

AT+DBGNVMRD

FE CA 38 05 00 03 00 00 01 12 01 00 55 41 52 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 64 00 64 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BA FF 00 00

OK AT+DBGNVMRD

FE CA 38 05 00 03 00 00 01 12 01 00 55 41 52 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 64 00 64 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BA FF 00 00

OK

AT + DBGSTACKSIZE

返回当前堆栈大小,以在优化系统内存使用时帮助检测堆栈溢出或检测堆栈内存使用情况。

代码库修订:0.4.7

参数:无

输出:当前的大小堆栈内存(以字节为单位)

下载:文件

复制编码e

AT+DBGSTACKSIZE

1032

OK AT+DBGSTACKSIZE

1032

OK

AT + DBGSTACKDUMP

转储当前堆栈内容。堆栈存储器中未使用的部分填充有“ 0xCAFEFOOD”,以帮助确定堆栈使用的停止位置。

此命令仅用于调试和开发目的。

代码库修订strong》:0.4.7

参数:无

输出:整个堆栈区域的内存内容

下载:文件

复制代码

AT+DBGSTACKDUMP

0x20003800: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003810: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003820: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003830: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003840: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003850: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003860: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003870: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003880: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003890: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038A0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038B0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038C0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038D0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038E0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038F0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003900: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003910: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003920: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003930: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003940: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003950: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003960: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003970: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003980: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003990: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039A0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039B0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039C0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039D0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039E0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039F0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A00: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A10: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A20: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A30: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A40: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A50: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A60: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A70: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A80: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A90: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AA0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AB0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AC0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AD0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AE0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AF0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B00: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B10: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B20: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B30: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B40: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B50: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B60: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B70: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B80: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B90: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BA0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BB0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BC0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BD0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BE0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BF0: CAFEF00D CAFEF00D 00000000 CAFEF00D

0x20003C00: 00000004 20001D04 CAFEF00D FFFFEF68

0x20003C10: CAFEF00D 00001098 CAFEF00D CAFEF00D

0x20003C20: CAFEF00D CAFEF00D 00001006 200018D8

0x20003C30: 00000001 200018D8 20001C50 00000004

0x20003C40: 20001BB0 000134A5 0000100D 20001D28

0x20003C50: 00000006 00000006 20001C38 20001D44

0x20003C60: 20001C6C 20001D44 00000006 00000005

0x20003C70: 20001D38 00000005 20001D38 00000000

0x20003C80: 00000001 00012083 200018C8 000013D3

0x20003C90: 00550000 00000001 80E80000 4FC40000

0x20003CA0: 000080E8 00000009 60900000 000080E8

0x20003CB0: 60140000 20002764 0009608F 000080E8

0x20003CC0: 80000000 000080E8 00000000 00129F5F

0x20003CD0: 00000000 0001E4D9 80E80000 200018C8

0x20003CE0: 200018D4 00000000 80E80000 000000FF

0x20003CF0: 0000011C 0001BCE1 0000203A 0001BC1D

0x20003D00: 00000000 0001BC1D 80E80000 0001BCE1

0x20003D10: 0000011C 0001BDA9 80E80000 0001BDA9

0x20003D20: 0000011C FFFFFFF9 008B8000 0001BC1D

0x20003D30: 00000048 00000010 0000A000 00000009

0x20003D40: 0001E326 00000001 80E80000 51538000

0x20003D50: 000080E8 0001E9CF 00000000 00000009

0x20003D60: 61C78000 000080E8 00000048 00000504

0x20003D70: 0000A1FC 0002125C 00000000 000080E8

0x20003D80: 00000000 0012A236 00000000 0001E4D9

0x20003D90: 000080E8 00000009 00004998 000080E8

0x20003DA0: 622C8000 0012A29B 00000042 0001E479

0x20003DB0: 40011000 000185EF 00006E10 00000000

0x20003DC0: 00000000 00000004 0000000C 00000000

0x20003DD0: 62780000 00018579 2000311B 0001ACDF

0x20003DE0: 00000000 20003054 20002050 00000001

0x20003DF0: 20003DF8 0002085D 00000001 200030D4

0x20003E00: 00000200 0001F663 00000001 200030D4

0x20003E10: 00000001 2000311B 0001F631 00020A6D

0x20003E20: 00000001 00000000 0000000C 200030D4

0x20003E30: 2000311B 00000042 200030D4 00020AD7

0x20003E40: 20002050 200030D4 20002050 00020833

0x20003E50: 20002050 20003F1B 20002050 0001FF89

0x20003E60: 20002050 0001FFA3 00000005 20003ED8

0x20003E70: 20002050 0001FF8B 00000010 00020491

0x20003E80: 00000001 0012A54E 00000020 00022409

0x20003E90: 00000000 20002050 200030D4 0001FF8B

0x20003EA0: 00021263 00000005 0000000C 20003F74

0x20003EB0: 20003ED8 20002050 200030D4 00020187

0x20003EC0: 20003ED4 20003054 00000000 20003F75

0x20003ED0: 00000008 20003F64 00000084 FFFFFFFF

0x20003EE0: FFFFFFFF 00000008 00000001 00000008

0x20003EF0: 20302058 2000311B 0001F631 00020A6D

0x20003F00: 20002050 00000000 0000000C 200030D4

0x20003F10: 32002050 32303032 00323330 000258D7

0x20003F20: 20002050 200030D4 20002050 00020833

0x20003F30: 00000000 20002050 00000020 000001CE

0x20003F40: 20003F40 200030D4 00000004 0001ED83

0x20003F50: 200030D4 20003F60 000001D6 000001D7

0x20003F60: 000001D8 00016559 0000000C 00000000

0x20003F70: 6C383025 00000058 200030D4 FFFFFFFF

0x20003F80: 1FFF4000 00000028 00000028 000217F8

0x20003F90: 200020C7 000166C5 000166AD 00017ED9

0x20003FA0: FFFFFFFF 200020B8 2000306C 200030D4

0x20003FB0: 200020B4 000180AD 1FFF4000 200020B0

0x20003FC0: 200020B0 200020B0 1FFF4000 0001A63D

0x20003FD0: CAFEF00D CAFEF00D 200020B4 00000002

0x20003FE0: FFFFFFFF FFFFFFFF 1FFF4000 00000000

0x20003FF0: 00000000 00000000 00000000 00016113

OK AT+DBGSTACKDUMP

0x20003800: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003810: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003820: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003830: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003840: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003850: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003860: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003870: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003880: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003890: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038A0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038B0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038C0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038D0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038E0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200038F0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003900: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003910: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003920: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003930: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003940: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003950: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003960: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003970: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003980: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003990: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039A0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039B0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039C0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039D0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039E0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x200039F0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A00: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A10: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A20: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A30: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A40: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A50: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A60: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A70: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A80: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003A90: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AA0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AB0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AC0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AD0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AE0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003AF0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B00: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B10: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B20: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B30: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B40: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B50: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B60: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B70: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B80: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003B90: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BA0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BB0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BC0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BD0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BE0: CAFEF00D CAFEF00D CAFEF00D CAFEF00D

0x20003BF0: CAFEF00D CAFEF00D 00000000 CAFEF00D

0x20003C00: 00000004 20001D04 CAFEF00D FFFFEF68

0x20003C10: CAFEF00D 00001098 CAFEF00D CAFEF00D

0x20003C20: CAFEF00D CAFEF00D 00001006 200018D8

0x20003C30: 00000001 200018D8 20001C50 00000004

0x20003C40: 20001BB0 000134A5 0000100D 20001D28

0x20003C50: 00000006 00000006 20001C38 20001D44

0x20003C60: 20001C6C 20001D44 00000006 00000005

0x20003C70: 20001D38 00000005 20001D38 00000000

0x20003C80: 00000001 00012083 200018C8 000013D3

0x20003C90: 00550000 00000001 80E80000 4FC40000

0x20003CA0: 000080E8 00000009 60900000 000080E8

0x20003CB0: 60140000 20002764 0009608F 000080E8

0x20003CC0: 80000000 000080E8 00000000 00129F5F

0x20003CD0: 00000000 0001E4D9 80E80000 200018C8

0x20003CE0: 200018D4 00000000 80E80000 000000FF

0x20003CF0: 0000011C 0001BCE1 0000203A 0001BC1D

0x20003D00: 00000000 0001BC1D 80E80000 0001BCE1

0x20003D10: 0000011C 0001BDA9 80E80000 0001BDA9

0x20003D20: 0000011C FFFFFFF9 008B8000 0001BC1D

0x20003D30: 00000048 00000010 0000A000 00000009

0x20003D40: 0001E326 00000001 80E80000 51538000

0x20003D50: 000080E8 0001E9CF 00000000 00000009

0x20003D60: 61C78000 000080E8 00000048 00000504

0x20003D70: 0000A1FC 0002125C 00000000 000080E8

0x20003D80: 00000000 0012A236 00000000 0001E4D9

0x20003D90: 000080E8 00000009 00004998 000080E8

0x20003DA0: 622C8000 0012A29B 00000042 0001E479

0x20003DB0: 40011000 000185EF 00006E10 00000000

0x20003DC0: 00000000 00000004 0000000C 00000000

0x20003DD0: 62780000 00018579 2000311B 0001ACDF

0x20003DE0: 00000000 20003054 20002050 00000001

0x20003DF0: 20003DF8 0002085D 00000001 200030D4

0x20003E00: 00000200 0001F663 00000001 200030D4

0x20003E10: 00000001 2000311B 0001F631 00020A6D

0x20003E20: 00000001 00000000 0000000C 200030D4

0x20003E30: 2000311B 00000042 200030D4 00020AD7

0x20003E40: 20002050 200030D4 20002050 00020833

0x20003E50: 20002050 20003F1B 20002050 0001FF89

0x20003E60: 20002050 0001FFA3 00000005 20003ED8

0x20003E70: 20002050 0001FF8B 00000010 00020491

0x20003E80: 00000001 0012A54E 00000020 00022409

0x20003E90: 00000000 20002050 200030D4 0001FF8B

0x20003EA0: 00021263 00000005 0000000C 20003F74

0x20003EB0: 20003ED8 20002050 200030D4 00020187

0x20003EC0: 20003ED4 20003054 00000000 20003F75

0x20003ED0: 00000008 20003F64 00000084 FFFFFFFF

0x20003EE0: FFFFFFFF 00000008 00000001 00000008

0x20003EF0: 20302058 2000311B 0001F631 00020A6D

0x20003F00: 20002050 00000000 0000000C 200030D4

0x20003F10: 32002050 32303032 00323330 000258D7

0x20003F20: 20002050 200030D4 20002050 00020833

0x20003F30: 00000000 20002050 00000020 000001CE

0x20003F40: 20003F40 200030D4 00000004 0001ED83

0x20003F50: 200030D4 20003F60 000001D6 000001D7

0x20003F60: 000001D8 00016559 0000000C 00000000

0x20003F70: 6C383025 00000058 200030D4 FFFFFFFF

0x20003F80: 1FFF4000 00000028 00000028 000217F8

0x20003F90: 200020C7 000166C5 000166AD 00017ED9

0x20003FA0: FFFFFFFF 200020B8 2000306C 200030D4

0x20003FB0: 200020B4 000180AD 1FFF4000 200020B0

0x20003FC0: 200020B0 200020B0 1FFF4000 0001A63D

0x20003FD0: CAFEF00D CAFEF00D 200020B4 00000002

0x20003FE0: FFFFFFFF FFFFFFFF 1FFF4000 00000000

0x20003FF0: 00000000 00000000 00000000 00016113

OK

历史记录

此页面根据固件版本号(您可以通过“ ATI”命令获得)跟踪对AT命令集的添加或更改:

版本0.7.7

在0.7.7发行版中添加了以下AT命令和功能:

添加了 AT + BLEUARTTXF (强制使用F)以立即在BLE中发送指定的数据UART数据包(最大20个字节),绕过任何FIFO延迟,避免了可能在两个事务中传输数据包。

调整后的BLE UART服务使用最小连接间隔作为发送间隔

AT + DFUIRQ ,以在nRF51822上存在支持的事件时启用将DFU引脚用于IRQ

为Bluefruit SPI板启用CS引脚上的内部上拉电阻

添加了 AT + MODESWITCHEN ,以启用/禁用从本地(串行或S PI)或BLE UART端。默认情况下,本地=启用,布尔=禁用,这意味着默认情况下只能通过本地接口执行命令。

实施了‘\ +’转义码以立即发送‘+’字符而不触发++ +延迟等待进一步的相似输入

添加了 AT + BLEHIDGAMEPADEN 以分别启用HID游戏手柄,因为iOS/OSX与游戏手柄设备发生冲突,导致HID键盘无法正常工作。

以下错误已在0.7.7版中修复:

修复了当app_error_handler()出现长时间延迟时的出厂重置问题

修复了在UART中字符串被截断为64个字符的问题

修复了HID键盘支持,不适用于iOS 9和10

版本0.7.0

0.7中添加了以下AT命令。 0版本:

AT + BAUDRATE

更改HWUART波特率

AT + UARTFLOW

启用或禁用硬件UARTflow控制

AT + BLEMIDIEN =打开/关闭/0/1

启用/禁用MIDI服务,需要重置才能生效

AT + BLEMIDITX

发送MIDI事件

AT + BLEMIDIRX

接收可用的MIDI事件

AT + GATTCHARRAW

添加了此只读命令,以从特征读取二进制(而不是ASCII)数据。它是不可打印的,但开销较小,并且更容易在Arduino中编写库

AT + NVMWRITE = offset,datatype,data

将数据写入256字节用户NVM。数据类型必须为STRING(1),BYTEARRAY(2)或INTEGER(3)

AT + NVMREAD = offset,size,datatype

从256个字节的用户NVM中读取数据

AT + NVMREADRAW = offset,size二进制数据

返回二进制数据(而不是ASCII),以“ OK \ r \ n”结尾。它是不可打印的,但开销较小,在某些情况下更易于使用。

AT + BLEHIDGAMEPAD = x,y,按钮

X是左,右:X =按下-1 LEFT,按下X = 1 RIGHT,按下X = 0,没有按下

Y是UP,DOWN:Y = -1 i UP,Y = 1是按下,Y = 0,没有按下

按钮[0x00-0xFF]是8个按钮0-7的位掩码

AT + GAPCONNECTABLE = on/off/1/0

允许/禁止连接到设备

AT + EDDYSTONESERVICEEN

将EddyStone服务添加/删除到GATT表(需要重置)

AT + EDDYSTONEBROADCAST = on/off/0/1

使用NVM中的设置开始/停止广播url

AT + BLEBATTEN = on/off/1/0

启用电池服务。由于服务更改而需要重置。

AT + BLEBATTVAL = percent

更新电池电量,百分比为0到100

以下命令已更改: 0.7.0版本:

AT + GATTADDCHAR

添加了DATATYPE选项以指示GATT特征有效负载的数据类型。有效选项为:AUTO( 0,默认值),STRING(1),BYTEARRAY(2),INTEGER(3)

通过Description标志添加了特征用户描述选项

通过PRESENTATION添加了特征表示格式支持标志

AT + GAPINTERVALS

添加了新的“ adv_lowpower_interval”参数,默认值为417.5 ms。现在,当前参数为:min_conn,max_conn,adv_interval,adv_timeout,adv_lowpower_interval

此版本中的主要错误修复和更改:

重要的BTLE UART速度和可靠性改进

为以下项添加了回调支持(正在进行中):

BLE UART RX

GATT特性RX

MIDI RX

连接/断开

每个特性的MAX_LEN从20字节增加到32字节

更改了默认的GAP参数:

广告间隔= 20ms

最小连接间隔= 20 ms

最大连接间隔= 40 ms

增加了默认情况下,保存为Flash的CCCD的最大数量从8减少到16

Eddystone配置服务

删除了AT + EDDYSTONEENABLE以避免混淆

将Eddystone的广告超时更改为‘unlimited’

修复了写-无响应特征属性,该属性未得到正确处理

修复了时序限制,无法满足App le设计指南

将系统固定到ms计算

使用google eddystone验证器固定所有测试,但写入tx_power = 1 dB(在nrf51上无效)

已固定一个错误,其中从中央进行写入无法正确更新特征上的值

修复了HID示例的问题,当与中央进行配对时,断开连接然后重新连接就无法再发送HID报告了

版本0.6.7

0.6.7版本中添加了以下AT命令:

AT + BLEUARTFIFO

返回蓝牙UART服务的TX和RX FIFO中可用的可用字节数。

在0.6.7版本中更改了以下命令:

AT + BLEUARTTX

如果TX FIFO已满,则该命令将等待最多200ms,以查看由于FIFO已满而在退出并返回错误响应之前FIFO大小是否减小。

AT + BLEURIBEACON

Th命令将返回使用旧的(不建议使用的)UriBeacon UUID(0xFED8),并且只有AT + EDDYSTONEURL命令将使用较新的Eddystone UUID(0xFEAA)。

AT + BLEKEYBOARD和AT + BLEUARTTX

这些命令现在接受‘\?’因为‘AT + BLEKEYBOARD =?对于AT解析器还有另一个含义。要发送单个问号,应使用以下命令:’AT + BLEKEYBOARD = \?‘或’AT + BLEUARTTX = \?‘

AT + EDDYSTONEURL

此命令现在接受RSSI的第三个可选参数,值为0m(默认值为-18dBm)。

不带此命令运行此命令参数(’AT + EDDYSTONEURL \ r \ n‘)现在将返回当前URL。

此版本中的主要错误修复:

FIFO处理改进了UART UART服务的速度和稳定性,并且TX和RF FIFO分别增加到1024字节。

解决了计时器溢出每4小时左右导致工厂重置的问题。

修复了GATT服务器的一个问题,其中错误地为’max_len‘》 4

版本0.6.6

0.6中添加了以下AT命令.6版本:

AT + EDDYSTONEURL

更新信标的URL并切换到信标模式

AT + EDDYSTONEENABLE

启用/禁用信标mod e使用已配置的url

AT + EDDYSTONECONFIGEN

在指定的秒数内为Eddystone配置服务启用广告

AT + HWMODELED

允许用户覆盖默认MODE LED行为,具有以下选项之一:DISABLE,MODE,HWUART,BLEUART,SPI,MANUAL

AT + BLECONTROLKEY

允许将HID媒体控制值发送到绑定的中央设备(音量,屏幕亮度等)。

AT + BLEHIDEN

启用或禁用Bluefruit LE固件(鼠标,键盘和媒体控件)中的BLE HID支持

AT + BLEMOUSEMOVE

移动HID鼠标

AT + BLEMOUSEBUTTON

设置HID鼠标按钮的状态

在0.6中更改了以下命令。 6版本:

此版本中的主要错误修复:

此发行版的已知问题:

AT + BLEKEYBOARDEN-现在是AT + BLEHIDEN的别名

AT + GATTADDCHAR-添加了一个新的UUID128字段以允许自定义UUID

修复了带有长信标URL的问题

修复了at + blebeacon中主要号码和次要号码的大端序问题

Windows 10似乎支持以下特征的有限数量DIS服务。我们必须禁用序列号特性才能在Windows 10中启用HID支持。

版本0.6.5

在0.6.5版本中添加了以下AT命令:

AT + BLEGETPEERADDR

在0.6.5版本中更改了以下命令:

(在nRF51上)将UART缓冲区大小从128字节增加到256字节

+++现在以当前操作模式做出响应

修复了有时未保存到NVM的AT + GATTCHAR值的错误

修复了AT + GATTCHAR的错误重置后未考虑值(重新填充值时始终使用min_len)

版本0.6.2

这是第一个针对 32KB SRAM部件(QFAC)的发行版。由于内存管理问题,此固件无法使用16KB SRAM部件,而应使用早期的0.5.0固件。

在0.6.2版本中更改了以下AT命令:

AT + BLEUARTTX

添加了用于新行,制表符和退格键的基本转义码

AT + BLEKEYBOARD

现在也适用于OS X,并且可以功能与其他支持BLE HID键盘的操作系统

版本0.5.0

在0.5.0版本中添加了以下AT命令:

AT + BLEKEYBOARDEN

AT + BLEKEYBOARD

AT + BLEKEYBOARDCODE

在0.5.0版本中更改了以下AT命令:

ATI

SoftDevice,SoftDevice版本和Bootloader版本被添加为新记录(第7个)。例如:“ S110 7.1.0,0.0”表示S110软设备的7.1.0版本与0.0引导程序一起使用(将来的板将使用较新的0.1引导程序)。

其他说明关于0.5.0:

从版本0.5.0开始,可以通过按住DFU按钮的任意位置(无需终端仿真器)在任意位置执行 AT + FACTORYRESET 命令保持10秒钟,直到蓝色的CONNECTED LED开始闪烁,然后释放它。

版本0.4.7

在0.4.7版本中添加了以下AT命令:

+++

AT + HWRANDOM

AT + BLEURIBEACON

AT + DBGSTACKSIZE

AT + DBGSTACKDUMP

以下命令在0.4中进行了更改。 7版本:

ATI

在芯片名称之后添加了芯片修订版。 ATI以前会报告’nRF51822‘,但现在会添加特定的硬件版本(如果可以检测到的话)(例如’nRF51822 QFAAG00‘)

版本0.3.0

首次公开发行

》命令示例

在命令模式下操作以执行特定任务时,可以使用以下代码段。

心率监视器服务

下面的命令列表将向BLEFriend的心率表添加心率服务属性表,具有两个特征:

心率测量

身体传感器位置

下载:文件

复制代码

# Perform a factory reset to make sure we get a clean start

AT+FACTORYRESET

OK

# Add the Heart Rate service entry

AT+GATTADDSERVICE=UUID=0x180D

1

OK

# Add the Heart Rate Measurement characteristic

AT+GATTADDCHAR=UUID=0x2A37, PROPERTIES=0x10, MIN_LEN=2, MAX_LEN=3, VALUE=00-40

1

OK

# Add the Body Sensor Location characteristic

AT+GATTADDCHAR=UUID=0x2A38, PROPERTIES=0x02, MIN_LEN=1, VALUE=3

2

OK

# Create a custom advertising packet that includes the Heart Rate service UUID

AT+GAPSETADVDATA=02-01-06-05-02-0d-18-0a-18

OK

# Reset the device to start advertising with the custom payload

ATZ

OK

# Update the value of the heart rate measurement (set it to 0x004A)

AT+GATTCHAR=1,00-4A

OK # Perform a factory reset to make sure we get a clean start

AT+FACTORYRESET

OK

# Add the Heart Rate service entry

AT+GATTADDSERVICE=UUID=0x180D

1

OK

# Add the Heart Rate Measurement characteristic

AT+GATTADDCHAR=UUID=0x2A37, PROPERTIES=0x10, MIN_LEN=2, MAX_LEN=3, VALUE=00-40

1

OK

# Add the Body Sensor Location characteristic

AT+GATTADDCHAR=UUID=0x2A38, PROPERTIES=0x02, MIN_LEN=1, VALUE=3

2

OK

# Create a custom advertising packet that includes the Heart Rate service UUID

AT+GAPSETADVDATA=02-01-06-05-02-0d-18-0a-18

OK

# Reset the device to start advertising with the custom payload

ATZ

OK

# Update the value of the heart rate measurement (set it to 0x004A)

AT+GATTCHAR=1,00-4A

OK

Python脚本

以下代码执行相同的功能,但已放置使用PySerial在Python包装器中显示如何为AT解析器编写动作脚本。

下载:文件

复制代码

import io

import sys

import serial

import random

from time import sleep

filename = “hrm.py”

ser = None

serio = None

verbose = True # Set this to True to see all of the incoming serial data

def usage():

“”“Displays information on the command-line parameters for this script”“”

print “Usage: ” + filename + “ ”

print “For example: ”

print “ Windows : ” + filename + “ COM14”

print “ OS X : ” + filename + “ /dev/tty.usbserial-DN009WNO”

print “ Linux : ” + filename + “ /dev/ttyACM0”

return

def checkargs():

“”“Validates the command-line arguments for this script”“”

if len(sys.argv) 《 2:

print “ERROR: Missing serialPort”

usage()

sys.exit(-1)

if len(sys.argv) 》 2:

print “ERROR: Too many arguments (expected 1)。”

usage()

sys.exit(-2)

def errorhandler(err, exitonerror=True):

“”“Display an error message and exit gracefully on ”ERROR “ responses”“”

print “ERROR: ” + err.message

if exitonerror:

ser.close()

sys.exit(-3)

def atcommand(command, delayms=0):

“”“Executes the supplied AT command and waits for a valid response”“”

serio.write(unicode(command + “ ”))

if delayms:

sleep(delayms/1000)

rx = None

while rx != “OK ” and rx != “ERROR ”:

rx = serio.readline(2000)

if verbose:

print unicode(rx.rstrip(“ ”))

# Check the return value

if rx == “ERROR ”:

raise ValueError(“AT Parser reported an error on ’” + command.rstrip() + “‘”)

if __name__ == ’__main__‘:

# Make sure we received a single argument (comPort)

checkargs()

# This will automatically open the serial port (no need for ser.open)

ser = serial.Serial(port=sys.argv[1], baudrate=9600, rtscts=True)

serio = io.TextIOWrapper(io.BufferedRWPair(ser, ser, 1),

newline=’ ‘,

line_buffering=True)

# Add the HRM service and characteristic definitions

try:

atcommand(“AT+FACTORYRESET”, 1000) # Wait 1s for this to complete

atcommand(“AT+GATTCLEAR”)

atcommand(“AT+GATTADDSERVICE=UUID=0x180D”)

atcommand(“AT+GATTADDCHAR=UUID=0x2A37, PROPERTIES=0x10, MIN_LEN=2, MAX_LEN=3, VALUE=00-40”)

atcommand(“AT+GATTADDCHAR=UUID=0x2A38, PROPERTIES=0x02, MIN_LEN=1, VALUE=3”)

atcommand(“AT+GAPSETADVDATA=02-01-06-05-02-0d-18-0a-18”)

# Perform a system reset and wait 1s to come back online

atcommand(“ATZ”, 1000)

# Update the value every second

while True:

atcommand(“AT+GATTCHAR=1,00-%02X” % random.randint(50, 100), 1000)

except ValueError as err:

# One of the commands above returned “ERROR ”

errorhandler(err)

except KeyboardInterrupt:

# Close gracefully on CTRL+C

ser.close()

sys.exit()

import io

import sys

import serial

import random

from time import sleep

filename = “hrm.py”

ser = None

serio = None

verbose = True # Set this to True to see all of the incoming serial data

def usage():

“”“Displays information on the command-line parameters for this script”“”

print “Usage: ” + filename + “ ”

print “For example: ”

print “ Windows : ” + filename + “ COM14”

print “ OS X : ” + filename + “ /dev/tty.usbserial-DN009WNO”

print “ Linux : ” + filename + “ /dev/ttyACM0”

return

def checkargs():

“”“Validates the command-line arguments for this script”“”

if len(sys.argv) 《 2:

print “ERROR: Missing serialPort”

usage()

sys.exit(-1)

if len(sys.argv) 》 2:

print “ERROR: Too many arguments (expected 1)。”

usage()

sys.exit(-2)

def errorhandler(err, exitonerror=True):

“”“Display an error message and exit gracefully on ”ERROR “ responses”“”

print “ERROR: ” + err.message

if exitonerror:

ser.close()

sys.exit(-3)

def atcommand(command, delayms=0):

“”“Executes the supplied AT command and waits for a valid response”“”

serio.write(unicode(command + “ ”))

if delayms:

sleep(delayms/1000)

rx = None

while rx != “OK ” and rx != “ERROR ”:

rx = serio.readline(2000)

if verbose:

print unicode(rx.rstrip(“ ”))

# Check the return value

if rx == “ERROR ”:

raise ValueError(“AT Parser reported an error on ’” + command.rstrip() + “‘”)

if __name__ == ’__main__‘:

# Make sure we received a single argument (comPort)

checkargs()

# This will automatically open the serial port (no need for ser.open)

ser = serial.Serial(port=sys.argv[1], baudrate=9600, rtscts=True)

serio = io.TextIOWrapper(io.BufferedRWPair(ser, ser, 1),

newline=’ ‘,

line_buffering=True)

# Add the HRM service and characteristic definitions

try:

atcommand(“AT+FACTORYRESET”, 1000) # Wait 1s for this to complete

atcommand(“AT+GATTCLEAR”)

atcommand(“AT+GATTADDSERVICE=UUID=0x180D”)

atcommand(“AT+GATTADDCHAR=UUID=0x2A37, PROPERTIES=0x10, MIN_LEN=2, MAX_LEN=3, VALUE=00-40”)

atcommand(“AT+GATTADDCHAR=UUID=0x2A38, PROPERTIES=0x02, MIN_LEN=1, VALUE=3”)

atcommand(“AT+GAPSETADVDATA=02-01-06-05-02-0d-18-0a-18”)

# Perform a system reset and wait 1s to come back online

atcommand(“ATZ”, 1000)

# Update the value every second

while True:

atcommand(“AT+GATTCHAR=1,00-%02X” % random.randint(50, 100), 1000)

except ValueError as err:

# One of the commands above returned “ERROR ”

errorhandler(err)

except KeyboardInterrupt:

# Close gracefully on CTRL+C

ser.close()

sys.exit()

此脚本的结果可以在下面的“ HRM”应用程序中看到北欧的nR F工具箱应用程序:

请注意,nRF工具箱仅在以下情况下显示HRM数据:值更改,因此在打开HRM应用程序并连接到BLEFriend之后,您至少需要更新一次心率测量特征

开发板

SDEP(SPI数据传输)

为了便于在基于UART和SPI的Bluefruit LE模块之间进行切换,Bluefruit LE SPI Friend和Shield在以下位置使用了相同的AT命令集: UART模块(ATI,AT+HELP等)。

这些基于文本的AT命令使用我们称为 SDEP (简单数据交换协议)的简单二进制协议对二进制消息进行编码。

在大多数情况下,您永远不需要直接处理SDEP,但是我们已经在此处记录了该协议,以防您需要深入了解Bluefruit LE SPI界面!

SDEPOverview

SDEP被设计为总线中立协议,以标准,易于扩展的方式处理二进制命令和响应(包括错误响应)。 “总线中性”意味着无论传输机制(USB HID,SPI,I2C,空中无线数据等)如何,我们都可以使用SDEP。

所有SDEP消息都有一个四个字节标头,对于Bluefruit LE模块,最多16个字节有效负载。大型消息被分解为几个4 + 16字节的消息块,这些消息块在传输总线的任一端重建。选择20字节限制(4字节报头+ 16字节有效负载)以考虑到蓝牙低功耗4.0中的最大数据包大小(每个数据包20字节)。

SPI设置

对于Bluefruit LE SPI Friend,SDEP是总线中立的或Shield,使用SPI传输时要遵循以下约束和假设,主要是要考虑nRF51822片上系统的硬件限制:

SPI硬件要求

SPI时钟应运行在《= 4MHz

之间应增加100us的延迟CS线有效的那一刻,以及在SPI总线上传输任何数据之前

对于整个数据包,CS线必须保持有效,而不是在每个字节之间切换CS

但是,可以将CS线置为无效,然后在各个SDEP数据包(每个最多20个字节)之间重新置位。

SPI通讯必须将ands设置为先发送MSB(最高有效位)(而不是先发送LSB)

IRQ引脚

只要在nRF51822的缓冲区中有完整的SDEP数据包,Bluefruit LE SPI Friend/Shield就会断言IRQ线。读取数据包,并在整个事务中保持CS线有效(如上所述)。

只要有一个或多个数据包可用,IRQ线就会保持有效,因此读取后该线可能会保持高电平一个数据包,这意味着SPI从设备侧的FIFO中仍然有更多数据包。

SDEP数据包和SPI错误标识符

一旦声明了CS并经过了强制的100us延迟,应从SPI总线读取一个字节,这将指示SPI上可用负载的类型。 nRF51822(有关SDEP消息的更多信息,请参见下面的消息类型指示器) ge类型)。如果需要继续读取帧的其余部分,则在读取此字节后保持CS置为有效。

如果遇到标准SDEP消息类型指示符(0x10、0x20、0x40或0x80),请继续读取像平常一样。但是,还应考虑其他两个指标,它们指示nRF51822 SPI从设备侧存在问题:

0xFE :从设备未准备就绪(等待有点,然后再试一次)

0xFF :从设备读取溢出指示符(您读取的数据多于可用数据)

此表示有六个可能的响应字节读取消息类型指示符(发送SDEP命令后读取的第一个字节):0x10、0x20、0x40、0x80指示有效的消息类型,或0xFE,0xFF指示错误情况。

示例交易

下图显示了一个示例SDEP响应分布在两个数据包中(因为响应的大小》 20个字节)。请注意,由于在Bluefruit LE SPI端的FIFO中有多个数据包可用,因此在数据包之间IRQ线保持断言:

开发板

SDEP(简单数据交换协议)

简单数据交换协议(SDEP)可用于使用任何二进制串行总线(USB HID, USB Bulk,SPI,I2C,无线等),使用四种不同的消息类型(命令,响应,警报和错误消息)之一交换数据。

该协议旨在灵活,可扩展,唯一的要求是单个消息小于等于20个字节,并且每个消息的第一个字节是一个单字节(U8)标识符,用于指示消息类型,该标识符定义了其余消息的格式

字节序

所有大于8位的值均以小字节序格式编码。

div》消息类型指示器

每条消息的第一个字节是8位标识符,称为消息类型指示器。此值指示要发送的消息的类型,并允许我们确定消息其余部分的格式。

消息类型

命令

响应

警告

错误ID(U8)

0x10

0x20

0x40

0x80

SDEP数据事务

尽管某些传输协议对谁可以发起传输施加了限制,但两个连接的设备都可以发起SDEP事务。例如,主设备始终使用低功耗蓝牙或USB发起事务,这意味着从设备只能回复传入的命令。

每个接收到 Command Message 的设备都必须回复响应消息,错误消息或警告消息。

消息类型 命令消息

命令消息(消息类型= 0x10 )具有以下结构:

名称

消息类型

命令ID

有效载荷长度

有效载荷类型

U8

U16

U8

。..含义

始终为“ 0x10”

唯一命令标识符

[7]更多数据

[6-5]保留

[4-0]有效载荷长度(0..16)

可选命令有效载荷(参数等)

命令ID (字节1-2)和有效载荷长度(字节3)在任何命令中都是必需的信息。消息有效负载是可选的,如果有效负载长度设置为0个字节,则将被忽略。存在消息有效负载时,其长度可以为1..16字节,以保持最大消息长度20字节以内。

长命令(有效负载》 16字节)必须分为多个数据包。为方便起见,更多数据字段(字节3的第7位)用于指示其他数据包是否可用于同一命令。 SDEP接收器必须继续读取数据包,直到找到具有 More data == 0 的数据包,然后在必要时将所有子数据包组合为一个命令。

有效负载是用户定义的,并且可以从一个命令更改为另一个命令。

示例命令消息为:

下载:文件

复制代码

10 34 12 01 FF 10 34 12 01 FF

0:消息类型(U8)

1 + 2:命令ID(U16)

3:有效载荷镜头(U8)

4:有效载荷(。..)0x10

0x34 0x12

0x01

0xFF

第一个字节是消息类型(0x10),它将其标识为命令消息。

第二个和第三个字节为0x1234(little-endian表示法为34 12),这是唯一的命令ID。如果找到匹配的条目,该值将与命令查找表进行比较,并重定向到适当的命令处理程序函数。

第四个字节表示我们的消息有效载荷为1个字节

第五个字节是1个字节的有效负载:0xFF

响应消息

响应消息(消息类型= 0x20)在以下位置生成对传入命令的响应,并具有以下结构:

Name

消息类型

命令ID

有效载荷长度

有效载荷类型

U8

U16

U8

含义

始终“ 0x20’

命令ID,此消息是对

的响应。[7]更多数据

[6-5]保留

[4-0]有效载荷长度(0 。.16)

可选响应有效载荷(参数等)

通过包括与该响应消息相关的命令ID ,收件人可以更轻松地将响应和命令相关联。这在发送多个命令的情况下很有用,并且某些命令的执行时间可能比具有不同命令ID的后续命令要花更长的时间。

响应消息只能在响应命令时生成消息,因此命令ID字段应始终存在。

长响应(有效载荷》 16字节)必须分为多个数据包。与长命令类似,更多数据字段(字节3的第7位)用于指示其他数据包是否可用于同一响应。在跨越一个以上数据包的响应中,最终数据包上的 More data 位将设置为0,以指示这是序列中的最后一个数据包。 SDEP接收器必须在必要时将所有子数据包重新组合为一个有效载荷。

如果需要更精确的命令/响应相关性,则应开发自定义协议,该协议中应包含唯一的消息标识符。每个命令/响应的有效负载,但这不在此高级协议定义的范围内。

示例响应消息为:

下载:文件

复制代码

20 34 12 01 FF 20 34 12 01 FF

0:消息类型(U8)

1 + 2:命令ID(U16)

3:有效载荷镜头(U8)

4:有效载荷0x20

0x34 0x12

0x01

0xFF

第一个字节是消息类型(0x20),它将其标识为响应消息。

第二个和第三个字节为0x1234,这是唯一的命令ID此响应与之相关。

第四个字节表示我们的消息有效负载为1个字节。

第五个字节为1个字节的负载:0xFF

警报消息

每当系统出现警报情况(电池电量低等)时,都会发送警报消息(消息类型= 0x40)以下结构:

《表类=“ editor-table”》

名称

消息类型

警告ID

有效载荷长度

有效载荷

类型

U8

U16

U8

。..

含义

始终为“ 0x40”

警报条件的唯一ID

有效负载长度(0..16)

可选响应有效载荷

示例警报消息为:

下载:文件

复制代码

40 CD AB 04 42 07 00 10 40 CD AB 04 42 07 00 10

0:消息类型(U8)

1 + 2:警报ID(U16)

3:有效负载长度

4 + 5 + 6 + 7:有效载荷 0x40

0xCD 0xAB

0x04

0x42 0x07 0x00 0x10

第一个字节是消息类型(0x40),它将其标识为警报消息。

第二个和第三个字节是0xABCD,这是唯一的警报ID。

第四个字节表示我们有4个字节的消息有效负载。

最后四个字节是实际有效负载:在这种情况下,假设我们正在传输32-字节,则为0x10000742

标准警报ID

范围为0x0000到0x00FF的警报ID保留给标准SDEP警报,并且可能不会被自定义警报使用。

以下警报已定义为协议的标准部分:

ID

0x0000

0x0001

0x0002

0x0003警告

保留

系统重置

电池电量低

电池严重说明

保留供将来使用

系统即将重置

电池电量不足

电池电量严重不足

错误消息

每当系统出现错误情况时,都会返回错误消息(消息类型= 0x80),并具有以下结构:

名称

消息类型

错误ID

保留类型

U8

U16

U8含义

始终为“ 0x80”

错误条件的唯一ID

保留以供将来使用

每当出现错误情况并且系统需要正常运行错误(例如请求失败,尝试访问不存在的资源等)后,系统可能会返回带有适当错误ID的特定错误消息。

示例错误消息为:

下载:文件

复制代码

80 01 00 00 80 01 00 00

《表类=“ editor-table”》

0:消息ID(U8)

1 + 2:错误ID(U16)

3:保留(U8)

0x80

0x01 0x00

0x00

标准错误ID

0x0000到0x00FF范围内的错误ID保留用于标准SDEP错误,并且不能由自定义错误使用。

以下错误已被定义为协议的标准部分:

ID

0x0000

0x0001

0x0003错误

保留

无效CMD ID

无效负载说明

保留供将来使用

在查找表中未找到CMDID

消息有效负载无效

现有命令

目前,在该命令中仅实现了四个SDEP命令Bluefruit SPIFRIEND32固件:

SDEP_CMDTYPE_INITIALIZE = 0xBEEF

SDEP_CMDTYPE_AT_WRAPPER = 0x0A00

SDEP_CMDTYPE_BLE_UARTTX = 0x0A01

li》 SDEP_CMDTYPE_BLE_UARTRX = 0x0A02

SDH_CMDTYPE_INITIALIZE 可用于在硬件RST线路不可用时重置SDEP系统。

两条 SDEP_CMDTYPE_UART * 命令通过BLE UART服务发送数据。

SDEP_CMDTYPE_AT_WRAPPER 是您大部分时间使用的命令,它是一个包装器通过二进制SDEP传输发送AT命令。这并不是非常有效,二进制机制每个命令占用的字节数更少,但是它允许重用所有早期的AT解析器命令,而不必为每个命令实现一个包装器,这将大大增加整体代码的大小。

SDEP AT包装使用

使用SDEP您只需在AT Wrapp中发送正确的标头以及要发送到解析器的AT命令即可。例如:

下载:文件

复制代码

10-00-0A-03-‘a’-‘t’-‘I’ 10-00-0A-03-‘a’-‘t’-‘I’

消息类型:0x10(命令)

命令ID:0x0A00

命令有效载荷长度:3个字节

命令有效载荷:‘a’+‘t’+‘i’

这将导致ATI命令被执行,这将返回基本系统信息。

GATT服务详细信息

Bluetooth Low Energy中的数据围绕名为“ GATT服务”和“ GATT特性”的单位进行组织。要将数据公开给另一台设备,您必须在该设备上实例化至少一个服务。

Adafruit的Bluefruit LE Pro模块支持某些“标准”服务,如下所述(将来可能会添加更多)。/p》

UART服务

UART服务是在连接的设备之间发送和接收数据的标准方法,它模拟了熟悉的两线UART接口(一根线用于传输数据,另一线用于接收数据)。

专用UART服务页面上有详细信息。

UART服务

基本UUID: 6E40 0001 -B5A3-F393-E0A9-E50E24DCCA9E

此服务模拟TXD和RXD两行上的基本UART连接。

它基于Nordic Semiconductors专有的UART服务规范。可以使用Nordic Semiconductors用于Android和iOS的nRFUART应用查看与该服务之间发送和发送的数据。

此服务在每个Bluefruit LE模块上均可用,并在加电序列中自动启动。

特征

Nordic的UART服务包括以下特征:

名称

TX

RX必填

是UUID

0x0002

0x0003类型

U8 [20]

U8 [20] R

XW

XN

XI

R =读取; W =写N =通知; I =指示

从中央设备的角度分配特性名称

TX(0x0002)

此特征用于将数据发送回传感器节点,并且可以由连接的中央设备(移动电话,平板电脑等)写入。

RX(0x0003)

此特征用于将数据发送到连接的中央设备。通知可以由连接的设备启用,以便每次更新TX通道时都会发出警报。

软件资源

为帮助您使Bluefruit LE模块与其他Central设备进行通信,我们为大多数支持主要平台的平台汇集了许多开源工具低功耗蓝牙。

Bluefruit LE Client Apps和库

Adafruit已将以下移动或桌面应用和库组合在一起,以使您的Bluefruit LE模块与移动设备或笔记本电脑进行通讯变得尽可能容易,并尽可能提供完整的源代码:/p》

Bluefruit LE Connect(Android/Java)

从Android 4.3开始,已向Android添加了蓝牙低功耗支持(尽管从4.4开始才非常稳定),并且我们已经将Bluefruit LE Connect发布到Play商店。

Github上也提供了适用于Android的Bluefruit LE Connect的完整代码,可帮助您g et从您自己的Android应用开始。您需要使用最新版本的Android Studio才能使用此项目。

开发板

Bluefruit LE Connect(iOS/Swift )

苹果公司很早就采用低功耗蓝牙技术,并且苹果的应用程序商店中也有iOS版的Bluefruit LE Connectapp。

Bluefruit LE的完整快速源代码Github也提供适用于iOS的Connect。您需要XCode并访问Apple的developerper程序才能使用此项目:

版本1.x源代码:https://github.com/adafruit/Bluefruit_LE_Connect

版本2.x源代码:https://github.com/adafruit/Bluefruit_LE_Connect_v2

该应用程序的2.x版是一个完整的重写,在单个代码库中包含iOS,OS X GUI和OS X命令行工具。

开发板

OS X(Swift)的Bluefruit LE Connect

此OS X桌面应用程序基于相同的V2.x代码库作为iOS应用程序,并允许您从笔记本电脑或Mac的便利性访问BLE UART,基本的Pin I/O和OTA DFU固件更新。

这是在本地记录传感器数据并进行记录的理想选择将其导出为CSV,JSON或XML文件以在另一个应用程序中进行解析,并使用nati

Github上也提供了完整的源代码。

开发板

用于OS X的Bluefruit LE命令行更新程序(Swift)

此实验性命令行工具不受支持,仅作为概念证明提供,但可用于允许从命令行对Bluefruit设备进行固件更新。

此实用程序通过检查Bluefruit设备上的固件版本(通过设备信息服务)来执行类似于GUI应用程序的自动固件更新,并将其与在线可用的固件版本进行比较,并在适当的情况下在后台下载文件。

只需通过DMG文件安装预编译的工具,然后将其放置在系统路径中的某个位置,或在本地运行该文件通过“ 。/bluefruit”查看帮助菜单:

下载:文件

复制代码

$ 。/bluefruit

bluefruit v0.3

Usage:

bluefruit

[options.。.]

Commands:

Scan peripherals: scan

Automatic update: update [--enable-beta] [--uuid ]

Custom firmware: dfu --hex [--init ] [--uuid ]

Show this screen: --help

Show version: --version

Options:

--uuid If present the peripheral with that uuid is used. If not present a list of peripherals is displayed

--enable-beta If not present only stable versions are used

Short syntax:

-u = --uuid, -b = --enable-beta, -h = --hex, -i = --init, -v = --version, -? = --help $ 。/bluefruit

bluefruit v0.3

Usage:

bluefruit

[options.。.]

Commands:

Scan peripherals: scan

Automatic update: update [--enable-beta] [--uuid ]

Custom firmware: dfu --hex [--init ] [--uuid ]

Show this screen: --help

Show version: --version

Options:

--uuid If present the peripheral with that uuid is used. If not present a list of peripherals is displayed

--enable-beta If not present only stable versions are used

Short syntax:

-u = --uuid, -b = --enable-beta, -h = --hex, -i = --init, -v = --version, -? = --help

已弃用:Bluefruit Buddy(OS X)

此本地OS X应用程序是概念验证的基本应用程序,可让您使用最新的Macbook或iMac连接到Bluefruit LE模块。您可以获取有关模块的基本信息,并使用UART服务发送和接收数据。

该应用程序的完整源代码可在github存储库中的Adafruit_BluefruitLE_OSX中找到。

开发板

ABLE(跨平台/节点+电子)

ABLE(Adafruit Bluefruit LE Desktop)是一个跨平台的桌面应用程序基于Sandeep Misty的贵族库和Github的Electronproject(由Atom使用)。

它可在OS X,Windows 7+和精选Linux上运行(Ubuntu已在本地测试)。 Windows 7支持特别有趣,因为Windows 7没有对低功耗蓝牙的本机支持,但是贵族库直接与受支持的蓝牙4.0 USB dongle对话,在系统上模拟BLE(尽管目前仍处于BETA早期,并且断开了连接并采取了

此应用程序可让您收集传感器数据或执行移动Bluefruit LE Connect应用程序所提供的许多相同功能,但只能在台式机上进行。

该应用程序仍处于测试阶段,但除了易于使用的预编译二进制文件之外,还提供了完整的源代码。

开发板

div》 Bluefruit LE Python包装器

作为概念证明,我们在使Python与OS X上的本机Bluetooth API以及某些Linux目标上的最新版Bluez一起工作方面做了一些努力。/p》

当前有一些示例草图显示了h由于获取了BLE UART数据以及来自设备信息服务(DIS)的一些基本详细信息。

这不是一个积极支持的项目,而只是一个实验,但是如果您有最新的Macbook或Raspberry Pi并了解Python,您可能想在我们的github帐户中查看Adafruit_Python_BluefruitLE。

调试工具

如果您的冒险意识变得更好,并且您的Bluefruit LE模块陷入了困境,那么以下工具可能会有用

这些调试工具纯粹是为高级用户提供的便利出于设备恢复目的,不建议您这样做,除非您对可能的开发板感到满意。使用它们需要您自担风险。

AdaLink(Python)

此命令行工具是基于python的包装程序,可使用Segger J-Link或STLink/V2对ARM MCU进行编程。您可以使用它重新刷新Bluefruit LE模块

在Github上Adafruit_Adalinkrepo主文件上的readme.md文件中提供了有关如何使用该工具的详细信息。

使用AdaLink完全重新编程Bluefruit LE模块将需要四个文件,并且看起来像这样(使用JLink):

下载:文件

复制代码

adalink nrf51822 --programmer jlink --wipe

--program-hex “Adafruit_BluefruitLE_Firmware/softdevice/s110_nrf51_8.0.0_softdevice.hex”

--program-hex “Adafruit_BluefruitLE_Firmware/bootloader/bootloader_0002.hex”

--program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32.hex”

--program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32_signature.hex” adalink nrf51822 --programmer jlink --wipe

--program-hex “Adafruit_BluefruitLE_Firmware/softdevice/s110_nrf51_8.0.0_softdevice.hex”

--program-hex “Adafruit_BluefruitLE_Firmware/bootloader/bootloader_0002.hex”

--program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32.hex”

--program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32_signature.hex”

您也可以使用AdaLink工具获取有关模块的一些基本信息,例如通过--info命令当前正在编程哪个SoftDevice或IC版本(16KB SRAM或32KB SRAM):

下载:文件

复制代码

$ adalink nrf51822 -p jlink --info

Hardware ID : QFACA10 (32KB)

Segger ID : nRF51822_xxAC

SD Version : S110 8.0.0

Device Addr : **:**:**:**:**:**

Device ID : **************** $ adalink nrf51822 -p jlink --info

Hardware ID : QFACA10 (32KB)

Segger ID : nRF51822_xxAC

SD Version : S110 8.0.0

Device Addr : **:**:**:**:**:**

Device ID : ****************

Adafruit nRF51822 Flasher(Python)

Adafruit的nRF51822 Flasheris是我们在生产中使用的内部Python工具来烧写电路板当他们通过测试程序并下线时,或者只是在调试时针对不同的固件版本进行测试。

它依赖于表面下的AdaLink或OpenOCD(请参见上文),但是您可以使用此命令行

该工具目前支持使用特定的SoftDevice,Bootloader和Bluefruit固件组合来刷新nRF51822。

该工具目前支持通过AdaLink使用Segger J-Link或STLink/V2,或者在Raspberry Pi上使用GPIO可以访问传统的ARM SWD调试器。 (该存储库中包含用于RPi的OpenOCD的预构建版本,因为在原始RPi上从头开始构建它需要很长时间。)

由于该工具的纯粹是一个内部项目,但将其公开,以防万一它可以帮助冒险的客户自行清理木板。

下载:文件

复制代码

$ python flash.py --jtag=jlink --board=blefriend32 --softdevice=8.0.0 --bootloader=2 --firmware=0.6.7

jtag : jlink

softdevice : 8.0.0

bootloader : 2

board : blefriend32

firmware : 0.6.7

Writing Softdevice + DFU bootloader + Application to flash memory

adalink -v nrf51822 --programmer jlink --wipe --program-hex “Adafruit_BluefruitLE_Firmware/softdevice/s110_nrf51_8.0.0_softdevice.hex” --program-hex “Adafruit_BluefruitLE_Firmware/bootloader/bootloader_0002.hex” --program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32.hex” --program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32_signature.hex”

。.. $ python flash.py --jtag=jlink --board=blefriend32 --softdevice=8.0.0 --bootloader=2 --firmware=0.6.7

jtag : jlink

softdevice : 8.0.0

bootloader : 2

board : blefriend32

firmware : 0.6.7

Writing Softdevice + DFU bootloader + Application to flash memory

adalink -v nrf51822 --programmer jlink --wipe --program-hex “Adafruit_BluefruitLE_Firmware/softdevice/s110_nrf51_8.0.0_softdevice.hex” --program-hex “Adafruit_BluefruitLE_Firmware/bootloader/bootloader_0002.hex” --program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32.hex” --program-hex “Adafruit_BluefruitLE_Firmware/0.6.7/blefriend32/blefriend32_s110_xxac_0_6_7_150917_blefriend32_signature.hex”

。..

BLE FAQ

我可以和带有Bluefruit LE模块的Classic蓝牙设备通话吗?

否。低功耗蓝牙和“经典”蓝牙都是由蓝牙SIG定义和维护的同一蓝牙核心规范的一部分,但是它们是完全不同的协议,具有不同的物理约束和要求。这两个协议不能直接互相通信。

我的Bluefruit LE模块能否连接到其他Bluefruit LE外设

否,Adafruit的Bluefruit LE固件目前仅是外围设备,并且无法在中央模式下运行导致该模块的行为类似于您的手机或启用BLE的笔记本电脑。

如果需要中央支持,则应查看基于nRF52832的较新产品,例如Adafruit Feather nRF52 Bluefruit LE,其中包含一个SoftDevice,能够在中央或外围模式下运行。基于nRF518322的产品(例如本学习指南中使用的产品)不不能在中央模式下运行,因为它们使用的软设备不支持该产品,并且无法更新

我刚得到我的Bluefruit板,当我运行草图时,它会永远挂在“ Connecting 。..”阶段!/strong》

此处有几种可能的解释,但是首先要尝试的是:

断开连接并关闭Bluefruit LE Connect应用程序(如果打开的话)

在移动设备上禁用BLE

重新启动Bluefruit草图和硬件

(在移动设备上)重新打开BLE

再次打开Bluefruit LE Connect移动应用并尝试重新连接

如果问题仍然存在,尝试执行工厂重置(请参阅相应的学习指南,以获取有关如何执行此操作的详细信息,因为它在一块板上可能会有所不同)。

为什么都不是重置示例草图后,我的更改是否仍然存在?

Bluefruit LE模块处于Adafruit演示草图的已知状态,其中大多数在草图开始时执行出厂重置。

这对于确保草图正常运行很有用,但是具有每次板退出复位并运行草图时,都会擦除NVM中的所有自定义用户数据并将所有设置都恢复为出厂默认值的副作用。

要禁用恢复出厂设置,请打开演示草图并找到 FACTORYRESET_ENABLE 标志并将其设置为“ 0”,这将防止启动时恢复出厂设置。

如果您不会在.ino草图文件中看到‘FACTORYRESET_ENABLE’标志,您可能具有较旧的草图版本,并且可能需要通过Arduino库管理器更新为最新版本。

我在基于UART的Bluefruit LE模块上需要CTS和RTS吗?

在使用HW串行时并不一定要使用CTS和RTS,但是它们都应与SW串行一起使用,或者在任何传输大量数据的时间使用。

之所以需要CTS和RTS,是因为nRF51822上的UART模块不是很健壮,并且该芯片的早期版本具有非常小的FIFO,这意味着UART外设很快就不堪重负了。

使用CTS和RTS大大提高了UART连接的可靠性,因为这两个引脚在另一端告诉设备何时需要等待t要处理现有的缓冲数据。

要启用CTS和RTS支持,请进入草图文件夹中的BluefruitConfig.h文件,并为这些功能专用的宏分配一个适当的引脚(可以将它们设置为

同时启用这两个引脚应该可以解决大型命令或连续传输多个命令时遇到的任何数据可靠性问题。

如何更新到最新的Bluefruit LE固件?

使Bluefruit LE模块保持最新状态的最简单方法是使用适用于Android的Bluefruit LE Connect应用程序或适用于iOS的Bluefruit LE Connect。这两个应用程序均具有固件更新功能,可让您自动下载最新固件并以尽可能安全,轻松的方式刷新Bluefruit LE设备。如果需要在先前版本上进行一些测试,您还可以使用这些应用程序回滚到较旧版本的Bluefruit LE固件。

支持的固件版本‘xxx’?

我们会定期发布带有错误修复和新功能的Bluefruit LE固件映像特征。本学习指南中的每个AT命令都列出了使用该命令所需的最低固件版本,但是要获得从一个固件版本到另一个固件版本的更改的更高层次概述,请查阅固件历史记录页面。

我的Bluefruit LE设备是否支持ANCS?

ANCS在我们的路线图上(很可能在0.7.x版本家族中),但是我们目前不支持它,因为在将其作为服务实现时存在一些异常情况。

我的Bluefruit LE设备卡在DFU模式下,该怎么办?

如果您的设备由于某种原因而处于DFU模式,并且固件已损坏,则有几种选择。

首先,按住DFU按钮约10秒钟,直到CONN LED开始闪烁,然后尝试尝试恢复出厂设置,然后释放DFU按钮以执行恢复出厂设置。

如果此操作无效,则可能需要从DFU模式开始刷新固件,可以通过以下方式之一进行刷新:

Bluefruit LE Connect(Android)

将模块置于DFU模式(恒定LED闪烁)

打开Bluefruit LE Connect

连接到“ DfuTarg”设备

连接后,您将看到一个包含一些基本设备信息的屏幕。点击右上角的“ 。..”,然后选择固件更新

点击使用自定义固件按钮

为BLEFRIEND32固件版本0.6.7选择适当的.hex和.init文件(从Bluefruit LE固件存储库复制)。..,该文件将是:

十六进制文件:blefriend32_s110_xxac_0_6_7_150917_blefriend32。 hex

初始化文件:blefriend32_s110_xxac_0_6_7_150917_blefriend32_init.dat

单击开始更新

不幸的是,iOS应用尚未支持DFU模式下的自定义固件更新,但我们会将其更新到下一个版本中。

北欧nRF工具箱

您还可以使用Nordic的nRF工具箱应用来使用OTA引导加载程序更新固件。

在 Android 上:

打开nRF Toolbox(使用最新版本)

单击 DFU 图标

单击选择文件按钮

选择应用程序,然后单击确定

找到适当的.hex文件(例如“ blefriend32_s110_xxac_0_6_7_150917_blefriend32.hex”)

“ 初始化数据包”,指示是,然后选择适当的* _init.dat文件(例如:“ blefriend32_s110_xxac_0_6_7_150917_blefriend32_init.dat”)。

点击主屏幕底部的选择设备按钮,找到 DfuTarg 设备,点击该设备

点击上传按钮,现在应该在主屏幕上启用该按钮

这将开始DFU更新过程,这将导致在Bluefruit LE模块上更新或恢复固件

在 iOS 上:

创建一个.zip文件,其中包含用于固件更新的.hex文件和init.dat文件。例如:

将‘blefriend32_s110_xxac_0_6_7_150917_blefriend32.hex’重命名为 application.hex

重命名‘blefriend32_s110_xxac_0_6_7_15017_blefriend32_init.dat’为 application.dat

使用uTunes将包含application.hex和application.dat文件的 .zip文件上传到iPhone,如此处所述

打开nRF工具箱应用程序(使用最新版本)

单击 DFU 图标

单击选择文件文本标签

切换到用户文件以查看您在上方上传的.zip文件

选择.zip文件(例如blefriend32_065.zip)

在主屏幕上选择选择文件类型

选择应用程序

在主屏幕上选择选择设备

选择 DfuTarg

单击上传按钮,该按钮现在应该已启用

这将开始DFU程序,并且更新完成后,您的Bluefruit LE模块将重置。

如果您获得正常的2或3脉冲闪烁模式,则更新有效!

Adafruit_nRF51822_Flasher

作为最后的选择,如果您可以访问Raspberry Pi,Segger J-Link或STLink/V2,则也可以尝试手动刷新整个设备,如上面的FAQ中所述,并提供更多详细信息在“软件资源”页面上。

如何通过SWD重新刷新Bluefruit LE模块?

通过SWD重新刷新Bluefruit LE模块(例如切换到嗅探器固件并返回)的风险由您自己承担,并且可能会导致设备变砖,并且我们无法为该操作提供任何支持!不幸的是,有1,000,000处可能出错的东西,这就是为什么我们提供两个单独的Bluefruit LE Friend板-嗅探器和带有非嗅探器固件的普通Bluefruit LE Friend板,这提供了具有故障保护功能的引导加载程序,可防止您

AdaLink(SWD/JTAG调试器包装)

在两种类型的板(嗅探器和Bluefruit LE模块)之间转换不幸的是,这不是无风险的操作,并且需要外部硬件,软件和专有技术来解决问题,这就是为什么我们的支持团队不对此进行覆盖。

那。..确定要走那条孤独的路,而您拥有Segger J-Link(这是我们内部用于生产和开发的J-Link),或者已经拥有升级Bluefruit LE设备后,您应该查看AdaLink,这是我们内部使用的工具,用于刷新恢复Bluefruit LE模块所需的四个文件。 (注意:最新版本的AdaLink还支持便宜的STLink/V2,但是如果您要购买调试器以长期使用,则J-Link通常更健壮。)

必需的Intel Hex文件可在Bluefruit LE固件库中找到。您需要刷新:

适当的引导程序映像

适当的SoftDevice映像

Bluefruit LE固件映像

包含CRC检查的匹配签名文件,以便引导程序接受上面的固件映像(与固件映像位于同一文件夹中)

适当的文件通常列在固件存储库中的版本控制.xml文件中。

如果您尝试刷新嗅探器固件(后果自负!),则只需刷新单个.hex文件,您可以在这里找到。嗅探器不需要SoftDevice映像,也不需要使用故障安全的引导加载程序-这就是为什么如果没有受支持的SWD调试器,则更改是一种单向操作且冒险的操作。

Adafruit_nF51822_Flasher

我们还提供了一个内部python工具,该工具比AdaLink(上面引用)高出一个级别,并且可以更轻松地将特定版本的官方固件闪存到Bluefruit LE模块。有关详细信息,请参见Adafruit_nRF51822_Flasherrepo。

我可以访问BETA固件版本吗?

适用于iOS和Android的Bluefruit LE Connect应用程序的最新版本使您可以选择使用预发行版本或BETA固件更新Bluefruit LE模块。

此功能主要是作为论坛中支持问题的调试和测试机制提供的,仅应在尝试识别和解决模块中的特定问题时使用!

在iOS上启用BETA版本

确保您至少具有版本1.7.1 的Bluefruit LE Connect

Go到“设置”页面

滚动到“设置”页面底部,直到找到 Bluefruit LE

单击Bluefruit LE图标并启用显示beta版本开关

使用Bluefruit LE Connect时,您现在应该可以在固件存储库中看到所有可用的Beta版本。

在Android上启用BETA版本

确保您具有最新版本的Bluefruit LE Connect

打开Bluefruit LE Connect应用程序

点击应用程序主屏幕右上角的“ 。..”图标

选择设置

向下滚动到软件更新部分并启用显示测试版

您应该可以看到任何测试版现在,当您使用Bluefruit LE Connect

为什么升级到Android 6.0后看不到我的Bluefruit LE设备

在Android 6.0中,有一些重要的安全更改会影响低功耗蓝牙设备。如果无法使用定位服务(这意味着GPS已关闭),您也将无法看到蓝牙低功耗设备的广告。有关详细信息,请参见此问题。

请确保在Android 6.0上启用定位服务将Bluefruit LE Connect或其他Bluetooth Low Energy应用程序与Bluefruit LE模块配合使用时。

BLE的理论速度限制是什么?

这取决于多种因素,并且取决于中央设备的功能(

考虑到nR51822的硬件限制(每个连接间隔最多6个数据包,最小连接间隔7.5ms),您最终会以下是各种移动操作系统的理论限制:

iPhone 5/6 + IOS 8.0/8.1

6个数据包* 20个字节* 1/0.030 s = 4 kB/s = 32 kbps

iPhone 5/6 + IOS 8.2/8.3

3个数据包* 20字节* 1/0.030 s = 2 kB/s = 16 kbps

带nRF8001的iPhone 5/6 + IOS 8.x

1个数据包* 20字节* 1/0.030 s = 0.67 kB/s = 5.3 kbps

Nexus 4

4个数据包* 20字节* 1/0.0075 s = 10.6 kB/s = 84 kbps

带有nRF51822 0.9.0的北欧主仿真器固件(MEFW)1个数据包* 20字节* 1/0.0075 = 2.67 kB/s = 21.33 kbps

带有nRF51822的北欧主仿真器固件(MEFW)0.11.0

6个数据包* 20字节* 1/0.0075 = 16 kB/s = 128 kbps

Bluefruit LE固件还存在一些限制,但是我们正在积极努力以显着提高即将在2016年第二季度发布的即将发布的0.7.0版本的吞吐量。以上数据可作为理论上的最大值,用于确定是否BLE是否适合您的项目。

UPDATE :有关各种 Android 版本和手机的限制的更多详细信息,请参阅Nordic Semiconductors的这篇有用的文章。

我的Bluefruit板可以检测到其他Bluefruit板或Central设备吗?

否。目前,我们所有的Bluefruit LE模块都在外围模式下运行,这意味着它们只能通过广告有效载荷来广告自己的存在。中央设备(通常是手机或笔记本电脑)负责侦听这些广告数据包,启动连接过程以及启动设备之间的任何交易。 Bluefruit模块无法检测范围内的其他Bluefruit模块或中央设备,它们只能发送自己的广告数据并等待连接请求进入。

如何确定以m/ft为单位的Bluefruit模块和手机之间的距离?

简单的答案是:您不能。

RF设备通常使用RSSI来测量信号强度,RSSI代表接收信号强度指示器,单位为dBm。设备越接近RSSI值通常就越强(例如,-90dBm比-60dBm弱得多),但是现实中,以dBm为单位的RSSI值与距离之间没有可靠的关系。如果设备之间存在隔离墙,RSSI将掉落。如果在相同的2.4GHz频带上存在很多干扰,RSSI将下降。根据设备的不同,如果仅更改天线方向,RSSI将会下降。您可以使用AT+BLEGETRSSI命令读取两个连接的设备之间的RSSI值,但是从该值中得出的关于距离的信息没有有意义且可重复的结论,而在非常松散的情况下可能不是“更远”或“更近”

我的Bluefruit LE模块可以距手机多远?

这取决于模块本身以外的许多因素,例如天线方向,手机上的天线设计,发送时的发射功率节点,相同2.4GHz带宽内的竞争流量,端点之间的障碍物等。

它的低至几米,最高可达10米的视线,但通常设计为低功耗蓝牙假设Bluefr正常,则在非常短的范围内工作,并且在5-6米或更小的范围内最有效以实现可靠的通信uit固件设置。

我可以创建多少个GATT服务和特征?

对于固件0.7.0及更高版本,存在以下限制:

最大服务数量:10

最大特征数:30

每个特征的最大缓冲区大小:32字节

CCCD的最大数:16

是否可以修改或禁用内置的GATT服务和特征(DIS,DFU等)?

不,不幸的是你不能。我们依靠设备信息服务(DIS)的内容来了解您正在运行的固件和引导程序版本,并且在不能够信任此信息的情况下无法提供固件更新,这就是为什么它既是必需的又是只读的。

类似地,DFU服务是强制性的,用于维护空中更新,并且禁用它会创建它所带来的更多问题。

如何将BlueZ和gatttool与Bluefruit模块一起使用?

BlueZ有一个与之相关的一点学习曲线,但是您可以在下面的某个选项中找到一些注意事项,以使用我们所有Bluefruit LE模块和板卡中内置的BLE UART服务发送和接收数据。

这些命令可能随BlueZ的不同版本进行更改。以下使用版本5.21。

下载:文件

复制代码

# Initialise the USB dongle

$ sudo hciconfig hci0 up

# Scan for the UART BLE device

$ sudo hcitool lescan

D6:4E:06:4F:72:86 UART

# Start gatttool, pointing to the UART device found above

$ sudo gatttool -b D6:4E:06:4F:72:86 -I -t random --sec-level=high

[D6:4E:06:4F:72:86][LE]》 connect

Attempting to connect to D6:4E:06:4F:72:86

Connection successful

# Scan for primary GATT Services

[D6:4E:06:4F:72:86][LE]》 primary

attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb

attr handle: 0x0008, end grp handle: 0x0008 uuid: 00001801-0000-1000-8000-00805f9b34fb

attr handle: 0x0009, end grp handle: 0x000e uuid: 6e400001-b5a3-f393-e0a9-e50e24dcca9e

attr handle: 0x000f, end grp handle: 0xffff uuid: 0000180a-0000-1000-8000-00805f9b34fb

# Get the handles for the entries in the UART service (handle 0x0009)

[D6:4E:06:4F:72:86][LE]》 char-desc

handle: 0x0001, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x0002, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb

handle: 0x0004, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb

handle: 0x0006, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0007, uuid: 00002a04-0000-1000-8000-00805f9b34fb

handle: 0x0008, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x0009, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x000a, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x000b, uuid: 6e400002-b5a3-f393-e0a9-e50e24dcca9e

handle: 0x000c, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x000d, uuid: 6e400003-b5a3-f393-e0a9-e50e24dcca9e

handle: 0x000e, uuid: 00002902-0000-1000-8000-00805f9b34fb

handle: 0x000f, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0011, uuid: 00002a27-0000-1000-8000-00805f9b34fb

# 6e400002 (handle 0x000b) = TX characteristic

# 6e400003 (handle 0x000d) = RX characteristic

# Optional (but maybe helpful) 。.. scan for CCCD entries

[D6:4E:06:4F:72:86][LE]》 char-read-uuid 2902

handle: 0x000e value: 00 00

# Enable notifications on the RX characteristic (CCCD handle = 0x000e)

# 0100 = get notifications

# 0200 = get indications

# 0300 = get notifications + indications

# 0000 = disable notifications + indications

[D6:4E:06:4F:72:86][LE]》 char-write-req 0x000e 0100

Characteristic value was written successfully

# Just to make sure it was updated

[D6:4E:06:4F:72:86][LE]》 char-read-hnd 0x000e

Characteristic value/descriptor: 01 00

# Writing “test” in the Serial Monitor of the Arduino sketch should

# cause this output not that notifications are enabled:

Notification handle = 0x000d value: 74 65 73 74

# Write something to the TX characteristic (handle = 0x000b)

# This should cause E F G H to appear in the Serial Monitor

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 45

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 46

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 47

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 48

# To send multiple bytes

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000B 707172737475

# If you are running the callbackEcho sketch and notifications

# are enabled you should get this response after the above cmd:

Notification handle = 0x000d value: 70 71 72 73 74 75

--------------

# If you just want to enable constant listening, enter the following command from the CLI:

$ sudo gatttool -b D6:4E:06:4F:72:86 -t random --char-write-req -a 0x000e -n 0100 --listen

# This should give us the following output as data is written on the Uno,

# though we can‘t send anything back:

Characteristic value was written successfully

Notification handle = 0x000d value: 74 65 73 74

Notification handle = 0x000d value: 6d 6f 72 65 20 74 65 73 74

# Initialise the USB dongle

$ sudo hciconfig hci0 up

# Scan for the UART BLE device

$ sudo hcitool lescan

D6:4E:06:4F:72:86 UART

# Start gatttool, pointing to the UART device found above

$ sudo gatttool -b D6:4E:06:4F:72:86 -I -t random --sec-level=high

[D6:4E:06:4F:72:86][LE]》 connect

Attempting to connect to D6:4E:06:4F:72:86

Connection successful

# Scan for primary GATT Services

[D6:4E:06:4F:72:86][LE]》 primary

attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb

attr handle: 0x0008, end grp handle: 0x0008 uuid: 00001801-0000-1000-8000-00805f9b34fb

attr handle: 0x0009, end grp handle: 0x000e uuid: 6e400001-b5a3-f393-e0a9-e50e24dcca9e

attr handle: 0x000f, end grp handle: 0xffff uuid: 0000180a-0000-1000-8000-00805f9b34fb

# Get the handles for the entries in the UART service (handle 0x0009)

[D6:4E:06:4F:72:86][LE]》 char-desc

handle: 0x0001, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x0002, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb

handle: 0x0004, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb

handle: 0x0006, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0007, uuid: 00002a04-0000-1000-8000-00805f9b34fb

handle: 0x0008, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x0009, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x000a, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x000b, uuid: 6e400002-b5a3-f393-e0a9-e50e24dcca9e

handle: 0x000c, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x000d, uuid: 6e400003-b5a3-f393-e0a9-e50e24dcca9e

handle: 0x000e, uuid: 00002902-0000-1000-8000-00805f9b34fb

handle: 0x000f, uuid: 00002800-0000-1000-8000-00805f9b34fb

handle: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb

handle: 0x0011, uuid: 00002a27-0000-1000-8000-00805f9b34fb

# 6e400002 (handle 0x000b) = TX characteristic

# 6e400003 (handle 0x000d) = RX characteristic

# Optional (but maybe helpful) 。.. scan for CCCD entries

[D6:4E:06:4F:72:86][LE]》 char-read-uuid 2902

handle: 0x000e value: 00 00

# Enable notifications on the RX characteristic (CCCD handle = 0x000e)

# 0100 = get notifications

# 0200 = get indications

# 0300 = get notifications + indications

# 0000 = disable notifications + indications

[D6:4E:06:4F:72:86][LE]》 char-write-req 0x000e 0100

Characteristic value was written successfully

# Just to make sure it was updated

[D6:4E:06:4F:72:86][LE]》 char-read-hnd 0x000e

Characteristic value/descriptor: 01 00

# Writing “test” in the Serial Monitor of the Arduino sketch should

# cause this output not that notifications are enabled:

Notification handle = 0x000d value: 74 65 73 74

# Write something to the TX characteristic (handle = 0x000b)

# This should cause E F G H to appear in the Serial Monitor

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 45

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 46

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 47

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000b 48

# To send multiple bytes

[D6:4E:06:4F:72:86][LE]》 char-write-cmd 0x000B 707172737475

# If you are running the callbackEcho sketch and notifications

# are enabled you should get this response after the above cmd:

Notification handle = 0x000d value: 70 71 72 73 74 75

--------------

# If you just want to enable constant listening, enter the following command from the CLI:

$ sudo gatttool -b D6:4E:06:4F:72:86 -t random --char-write-req -a 0x000e -n 0100 --listen

# This should give us the following output as data is written on the Uno,

# though we can’t send anything back:

Characteristic value was written successfully

Notification handle = 0x000d value: 74 65 73 74

Notification handle = 0x000d value: 6d 6f 72 65 20 74 65 73 74

当BLE UART数据可用时,我可以使用IRQ引脚将MCU从睡眠状态唤醒吗?

否,在基于SPI的板上,IRQ引脚用于指示SDEP响应可用于SDEP命令。例如,当您以SDEP消息形式发送“ AT + BLEUARTRX”命令时,运行在nRF51822上的Bluefruit固件将解析该消息,准备SDEP响应,并触发IRQ引脚以告知MCU响应已准备就绪。这完全独立于目前没有中断功能的BLE UART服务。

我是否还可以使用Bluefruit更新在设备上运行的草图LE Connect?

不,只能通过空中更新核心固件。草图需要使用Arduino IDE和串行引导程序加载。

DFU Bluefruit更新

有关使用Bluefruit LE Connect的最新更新过程的视频,请参见:

iOS:https://learn。 adafruit.com/introducing-adafruit-ble-bluetooth-low-energy-friend/dfu-on-ios

Android:https://learn.adafruit.com/introducing-adafruit-ble-bluetooth-低能耗朋友/dfu-on-android-4-dot-3-plus

下面的视频已过期,并且适用于Bluefruit LE Connect应用在相应应用商店中的iOS,Android和OS X之前的早期版本。为了使您的设备保持最新状态,只需安装并打开Bluefruit LE Connect应用程序并连接到Bluefruit设备。如果有可用的固件更新,它将自动提出,并且整个更新过程将为您透明地处理。

您可以使用Android或iOS手机/平板电脑对Bluefruit LE模块本身进行无线编程。这不会重新编程Bluefruit Micro中的ATmega32u4,而仅是BLE模块本身。由于这不是一件普通的事情,所以要做起来有些挑战。

您需要断开/断开Bluefruit Micro的电源,暂时在 DFU 引脚和 GND ,然后通过USB或电池为开发板供电。

红色LED指示灯将连续闪烁,以使其处于DFU模式。然后按照我们的指南现场更新固件

下载

GitHub上的PCB文件

MDBT数据表

Adafruit Fritzing库中的Fritzing对象

羽毛32u4 Bluefruit LE引脚排列图

示意图

点击以嵌入

开发板

我们已将调节器从SPX3819更改为AP2112-压降较低,但不能处理高于6V的电压

织物印刷

尺寸以英寸为单位

开发板

设备恢复

有时,不幸的事情会发生。值得庆幸的是,有99%的时间纯粹是软件问题,并且Bluefruit设备具有强大的引导加载程序以及一些故障保险柜,几乎可以随时恢复设备。

如何恢复蓝果板 1。在启动时强制DFU模式

第一步是强制您的板进入特殊的引导加载程序模式,这将防止任何错误的用户草图或损坏的配置数据引起问题。

使用跳线电缆将DFU引脚连接到GND,或者如果板上有DFU按钮,则在为板上电路板供电(连接USB电缆等)时,请按住该按钮。

通电后,您应该会看到一个更快的DFU MODE闪烁模式,让您知道自己处于引导加载程序模式。

现在卸下DFU和GND之间的跨接电缆(以防止进入DFU重置时的模式)

拔下DFU和一旦进入DFU模式,便可以在下次重置时退出GND!

2。更新Bluefruit固件

下一步,使用Bluefruit LE Connect应用程序将设备更新到最新的Bluefruit固件。我们会定期修复错误,因此,始终在最新版本中发布是一个好主意。

您可以在DFU模式下执行固件更新,尽管Bluefruit板可能在其中显示为 DfuTarg 。

由于引导加载程序模式是一种故障安全模式,并且具有Bluefruit功能的一小部分,因此,我们可以为Bluefruit LE Connect应用程序选择合适的固件“系列”。

告诉Bluefruit LE Connect应用程序有关我们硬件的很多详细信息。因此,您需要指明要刷新的固件类型,尤其是是否要刷新基于SPI固件的UART。请确保根据您的产品和下表选择正确的固件:

BLEFRIEND32固件(UART,32KB SRAM)

Bluefruit UART Friend V2

Bluefruit LE UART Friend

BLESPIFRIEND固件(SPI)

Bluefruit LE SPI朋友

Bluefruit LE Shield

Bluefruit LE Micro

羽毛32u4 Bluefruit LE

羽毛M0 Bluefruit LE

3。刷新测试草图

一旦更新了Bluefruit核心固件,请从Arduino IDE刷新测试草图至设备,例如以下闪烁代码:

下载:文件

复制代码

// 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

} // 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

}

4。执行出厂重置

一旦Bluefruit核心固件已更新,最后一步就是执行出厂重置。

在电路板上电的情况下,连接 DFU 引脚连接到 GND

将该引脚设置为GND(或按住DFU按钮不放)超过5秒钟,直到蓝色状态LED开始闪烁

拔下DFU跳线或释放DFU按钮

这将导致恢复出厂设置,这将清除所有配置数据,并应还原您的电路板,让您恢复原状在大多数情况下恢复到正常状态!

还是有问题吗?

跳到我们的支持论坛,清楚地说明您的问题以及以下信息,我们将很乐意为您提供帮助:

您的产品名称和理想的产品ID

您正在使用的Bluefruit固件版本(在大多数示例草图中的“串行监视器”输出的顶部提供) es)

您正在使用的操作系统

您正在使用的Arduino IDE版本

在第一篇文章中提供上述信息将被跳过来回两个回合,您会更快地得到我们的答复,节省了大家的时间和精力!

请务必同时阅读本学习指南的“常见问题解答”部分,该部分回答了许多常见问题!

羽毛帮助!

即使此常见问题解答已标记为羽毛,但仍存在问题

拔出USB时,ItsyBitsy/Feather停止工作!

我们的许多示例草图在setup()中都有

while (!Serial);

行,使板子等到USB打开。这使调试程序变得容易得多,因为您可以看到所有USB数据输出。如果您想在没有USB连接的情况下运行Feather,请删除该行或将其注释掉

我的羽毛从未在Arduino IDE中显示为COM或串行端口

A 其数量众多/羽毛“故障”是由于仅充电的USB电缆

我们每天收到5起以上的投诉,这些投诉最终归因于仅充电的电缆!

仅使用您知道用于数据同步的电缆

如果您有任何仅用于充电的电缆,请将其切成两半,将其丢弃。我们是认真的!它们通常质量低劣,只会在以后给您和其他人造成困扰,只是获得了一条优质的数据+充电USB电缆

确认!我“做了些什么”,现在插入Itsy/Feather时,它不再显示为设备,因此我无法上载或修复它。..

没问题!您可以轻松地“修复”错误的代码上传。请注意,如果您设置了看门狗定时器或睡眠模式以停止USB,或任何“破坏”了电路板的草图,则可能会发生这种情况

在计算机中打开详细上传 Arduino IDE偏好设置

插入Itsy或Feather 32u4/M0,它不会显示为可以正常使用的COM/串行端口

打开Blink示例(示例-》基础-》闪烁)

在“工具”菜单中选择正确的板,例如羽毛32u4,羽毛M0,Itsy 32u4或M0 (物理检查以确保您选择了正确的主板!)

编译它(确保可以正常工作)

单击“上载”以尝试上载代码

IDE在尝试上载时将打印出一些COM端口。 在这段时间内,双击重置按钮,您将看到红色的脉冲LED指示您现在处于引导加载模式

该板将显示为Bootloader的COM/串行端口

IDE应该看到Bootloader的COM/串行端口并正确上传

开发板

我无法显示Itsy/Feather USB设备-我收到“ USB设备故障”错误!

这似乎发生在人们从Arduino开发板菜单中选择错误的开发板。

如果您有Feather 32u4(在板上看一下以了解其内容),请确保选择 Feather 32u4 基于ATMega32u4的主板!请勿使用其他任何东西,请勿使用32u4分支电路板线。

如果您有羽毛M0(在板上查看以了解其含义),请确保选择羽毛M0 -不要使用32u4或Arduino Zero

如果您有ItsyBitsy M0(在板上看一下它的内容),请确保选择 ItsyBitsy M0 》-不要使用32u4或Arduino零

我遇到了COM端口和我的Ity/Feather 32u4/M0的问题

32u4/M0可以具有两个 COM端口,一个是用户端口,其中之一是引导程序端口。它们不是相同的COM端口号!

上载新用户程序时,它将附带一个用户com端口,特别是如果您在用户程序中使用串行端口。

如果您崩溃了用户程序,或者程序中止或失败,则用户COM端口可以消失。

当用户COM端口消失时,Arduino将无法自动启动Bootloader并上传新软件。

因此,您需要通过执行上载单击过程来重新启动Bootloader并上传一些可以已知像“眨眼”一样工作

我不明白为什么COM端口消失了,这在我的Arduino UNO上不会发生!

UNO类型的Arduinos有一个分开的串行端口芯片(又名“ FTDI芯片”或“ Prolific PL2303”等)w hich与主芯片分开处理所有串行端口功能。这样,如果主芯片出现故障,您可以始终使用COM端口。

基于M0和32u4的Arduinos没有单独的芯片,而是由主处理器为您执行此任务。它可以实现更低的成本,更高的功率设置。..但是需要付出更多的努力,因为您将不时需要手动“踢”入引导程序

我正在尝试上传到我的32u4,并收到“ avrdude:butterfly_recv():程序员没有响应”错误

这可能是因为引导加载程序未启动,并且您意外地试图上传到 错误的COM端口

最好的解决方案是上面的详细介绍:通过手动启动引导加载程序手动手动上传Blink或类似的工作草图

我是尝试上传到我的Feather M0上时,出现此错误“连接到程序员:.avrdude:butterfly_recv():程序员不是响应”

您可能没有在下拉面板中选择Feather M0 -下。确保选择了Feather M0。

我正在尝试将其上传到我的羽毛中,但出现此错误“ avrdude:ser_recv():程序员未响应“

您可能没有在菜单中选择Feather M0/Feather 32u4板下拉菜单。确保选择了Feather M0(或Feather 32u4)。

我在羽毛上安装了一些护翼,现在无法读取电池电压!

请确保您的机翼不使用引脚9,这与脂电池!

我的羽毛上的黄色LED闪烁,但是没有插入电池,为什么?

充电LED由Lipoly充电器电路自动驱动。它将尝试检测电池,并期望将其安装。如果没有电池,则在使用电源时可能会偶尔闪烁一次,因为它正在尝试为(不存在的)电池充电。

这无害,而且完全正常!
        责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分