简介
Gravity: BLE 传感器信标,是一款通过蓝牙广播传感器数据的无线信标,内置11位ADC采集功能,可连接数字量或模拟量传感器进行数据采集和广播。使用手机、ESP32等支持BLE接收的设备,均可在信标广播范围内获取信标广播的传感器数据。
Gravity: BLE 传感器信标集成低功耗蓝牙5.3技术,数据格式可自行配置,如iBeacon、Eddystone、用户自定义等。信标广播的数据格式、广播的内容、广播的时间间隔等等都可以通过图形化界面自行配置,无需任何代码编程即可完成一个蓝牙信标。配置完成后,设备供电即作为一个蓝牙信标运行,会按照配置信息自动采集传感器数据并向外界广播。适合作为物联网传感器节点,如智能农场、办公室、工厂、仓库等场景中的数据采集节点。
注:Gravity: BLE传感器信标需要使用3.3V USB-TTL工具进行配置。
产品参数
- 工作电压: 3.3~5.5V DC
- 信标工作电流:<2mA @ Eddystone TLM
- 支持传感器:3.3V数值/模拟量传感器
- 输入信号:数字/模拟量
- 工作频段:2.4GHz ISM
- 调制方式:GFSK
- 发射功率:+5.0dBm
- 电路板尺寸:27mm*33.5mm
- 安装孔尺寸:内径3.1mm/外径6mm
引脚说明
标号 | 名称 | 功能描述 |
---|---|---|
1 | 电源输入端 | 3.3-5.5V DC电源输入 |
2 | 烧录/调试端 | 用于模块调试和烧录 |
3 | 传感器信号输入端 | "A": 传感器信号输入 "-": 传感器GND "+":传感器供电 |
4 | 传感器VCC选择端 | 短接:传感器供电方式为3.3V持续供电 断开(默认):传感器供电方式可设置为仅广播时供电 |
快速使用教程
以自定义数据格式为例,通过手机app和ESP32获取传感器数据。
一、软硬件准备
- 硬件
- TEL0149 Gravity: 传感器信标x1
- 3.3V USB-TTL工具 x1
- Gravity:模拟LM35线性温度传感器 x1 或其他模拟量传感器
- Windows/Linux/Mac OS 电脑 x1
- ESP32
- 软件
- 手机APP推荐使用:nRF Connect (iOS, Android), LightBlue (iOS), BLE Hero (iOS)
- 信标配置软件:NanoBeaconConfigTool_V3.2.11
- Arduino IDE&ESP32环境:FireBeetle_ESP32_E 首次使用教程
二、配置传感器信标
*注:模块仅能烧录一次,在未确定配置信息前不要直接点击"Burn/Program"进行烧录。可通过"Run inRAM"进行测试,在烧录前"Run in RAM"可无限次使用,断电后系统复位。
-
1.下载NanoBeaconConfigTool_V3.2.11,运行NanoBeaconConfig.exe
-
2.Advertising
Gravity: BLE 传感器信标可设置三个广播通道,勾选Enable即可开启对应广播通道,默认开启一个,Edit进入配置页面
-
3.Advertising Set#1 - Edit - Avdertising Data
可设置iBeacon、Eddystone、Custom三种数据格式,教程中将主要使用Custom
-
4.Advertising Set#1 - Edit - Avdertising Data - Custom Settings
勾选“Device Name”,输入“Gravity: Sensor Beacon”,名字可任意起一个,手机和ESP32扫描时可直接根据名字筛选
勾选“Manufacturer Specific Data”,点击“EDIT”配置数据
-
5.Advertising Set#1 - Edit - Avdertising Data - Custom Settings - EDIT
此处只配置一条模拟量的数据,下拉框选择“ADC CH1”,勾选:“Big Endian”,点击“Append to Data”,即可在窗口中看到“0x<ADC CH1 2byte 1 0>”,点击OK退出
-
**6.Advertising Set#1 - Edit - Avdertising Parameters **
此处设置广播间隔时间和地址,根据需要修改即可,完成后OK退出,至此广播数据格式配置完毕,模块将以1S/次广播数据
-
7.ADC
接下来进行ADC相关配置,Gravity: BLE 传感器信标使用IO5进行模拟量采集,因此在ADC界面中Enable "ADC Channel 1 MPGIO 5",并点击Edit进行配置
-
8.ADC - ADC Channel 1 MPGIO 5 - Edit
将Unit修改为0.001便于计算,对精度影响不大,若对精度有极高要求可不做修改。由于电路中对模拟量输入做了分压处理(2.06),因此将分压后的电压值进行重新映射
Value of 1.4V 修改为 2.898
Value of 0.4V 修改为 0.828
至此,完成ADC采集相关配置,此时信标广播的数据将为“传感器信号输入端”的电压值,单位mv
-
9.GPIO
由于MGPIO 5作为ADC输入端,需将其配置为“disable”
MGPIO6 将作为传感器的供电端,将其配置为“output high” “pull up” “latch”,使MGPIO6 锁定输出高电平3.3V,用于为传感器供电。
-
10.晶振电容匹配
NanoBeaconConfig Tool中可以通过设置来匹配晶振电容,结合我们的电路,为了使频偏保持在最佳状态,我们建议您将以下两处参数修改为12。
-
11.检查配置
软件左下角可看到我们开启了Set #1、ADC Channel 1、MGPIO5、MGPIO6
-
12.连接模块与PC
按照接线图进行硬件连接
-
13.连接模块与PC
在软件右上角点击“Probe”刷新端口,刷新后选择对应端口,点击“Connect”,连接成功后会有弹窗提示
-
14.运行测试
点击“Run in RAM”,完成后会有弹窗提示
*注:模块仅能烧录一次,在未确定配置信息前不要直接点击"Burn/Program"进行烧录。可通过"Run inRAM"进行测试,在烧录前"Run in RAM"可无限次使用,断电后系统复位。
三、手机app获取数据
-
1.以安卓手机为例,安装并打开nRF Connect.apk
-
2.若周边有太多其他信标设备,导致找不到我们的设备,则可以在筛选器中输入信标的设备名称,在配置传感器信标第4步的教程中,我们为Device Name命名为“Gravity: Sensor Beacon”
- 3.可以看到菜单中只保留了“Gravity: Sensor Beacon”,点击一下可看到详细信息
-
4.数据解释
“Gravity: Sensor Beacon”为配置传感器信标第4步中设置的Device Name
"06:05:04:03:02:01"为配置传感器信标第6步中设置的地址
“0X00E3”为配置传感器信标第5步中设置的ADC采集数据
-
5.传感器数据计算
当前已知信标采集到的传感器数据为“0X00E3”,将其转换为十进制为227,即信标采集到的电压值为227mv
我们所连接的传感器是LM35,通过查询LM35的wiki可知,LM35输出电压和温度对应关系为10mV/℃,即信标广播的LM35温度传感器数据为22.7℃
四、ESP32获取数据
-
准备好Arduino IDE&ESP32环境:FireBeetle_ESP32_E 首次使用教程
-
为ESP32烧录以下程序
/*
Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
Ported to Arduino ESP32 by Evandro Copercini
Changed to a beacon scanner to report iBeacon, EddystoneURL and EddystoneTLM beacons by beegee-tokyo
*/
#include <Arduino.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
#include <BLEEddystoneURL.h>
#include <BLEEddystoneTLM.h>
#include <BLEBeacon.h>
#define ENDIAN_CHANGE_U16(x) ((((x)&0xFF00) >> 8) + (((x)&0xFF) << 8))
float Sensor_Data;
int scanTime = 5; //In seconds
BLEScan *pBLEScan;
class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks
{
void onResult(BLEAdvertisedDevice advertisedDevice)
{
if (advertisedDevice.haveName())
{
if(String(advertisedDevice.getName().c_str()) == "Gravity: Sensor Beacon"){
Serial.print("Device name: ");
Serial.println(advertisedDevice.getName().c_str());
std::string strManufacturerData = advertisedDevice.getManufacturerData();
uint8_t cManufacturerData[100];
strManufacturerData.copy((char *)cManufacturerData, strManufacturerData.length(), 0);
Serial.printf("strManufacturerData: %d ", strManufacturerData.length());
for (int i = 0; i < strManufacturerData.length(); i++)
{
Serial.printf("[%X]", cManufacturerData[i]);
}
Sensor_Data = int(cManufacturerData[2]<<8 | cManufacturerData[3]);
Serial.println();
Serial.print("Voltage:");Serial.print(int(Sensor_Data));Serial.println("mV");
Serial.print("Temp_LM35:");Serial.print(Sensor_Data/10);Serial.println("℃");
Serial.println("------------------");
}
}
}
};
void setup()
{
Serial.begin(115200);
Serial.println("Scanning...");
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //create new scan
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
pBLEScan->setInterval(100);
pBLEScan->setWindow(99); // less or equal setInterval value
}
void loop()
{
// put your main code here, to run repeatedly:
BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory
delay(2000);
}
-
此程序是根据ESP32自带的BLE_Beacon_Scanner修改得到,根据需要可自行修改。
五、确认数据并烧录
-
*注:模块仅能烧录一次,若仅为了测试功能可跳过此步
-
以上的数据格式是以自定义格式进行广播,意在使大家能够快速使用,其他格式请根据自己的需要参考软件规格书自行配置。
-
确认数据无误后即可将数据格式烧录固化到芯片中。
-
点击右下角的“Burn/Program”按钮烧录程序,烧录成功后会有烧录成功的弹窗提示。
-
烧录完毕后,可断开模块与烧录器的连接,使用电池为模块供电。
高级应用
一、广播Eddystone TLM数据
Eddystone TLM的数据内自带温度数据,此时温度数据有信标芯片内部的温度传感器提供,会受到芯片本身的发热影响。
配置Eddystone TLM时仅需要在“Advertising Data Format”中选择“Eddystone ”,然后在“Eddystone -Settings”中选择“TLM Frame”即可,广播间隔、地址等可全部保持默认,也可根据需要自行配置。
二、高功耗传感器供电
因使用MGPIO6作为电源输出时,MGPIO6的带载能力弱(4mA),一些功耗较高的传感器可能无法驱动,因此我们在Gravity: BLE传感器信标板子的背面做了跳线焊盘,将焊盘短接后,传感器的电源将由板载的LDO提供,3.3V电压会更加稳定且带载能力更强
三、动态电源控制
若要做动态电源控制,即广播时为传感器供电,广播结束后停止为传感器供电,则将MGPIO6 设为“wakeup high, sleep low” Latch设为“disable”。
样例配置文件可直接下载后直接加载:DynamicPower.zip
四、长间隔防丢包
当广播间隔设为10S/次 甚至更久时,若接收端接收失败,那就要等待10S后信标下一次广播,且下一次广播时仍有接收失败风险。这种情况下,为防止接收端接收失败,可在间隔时间到达时进行多次广播。
具体实现方法为:
-
将信标芯片的动态电源控制端SW0使能,SW0的作用为每次启动广播时输出高电平
-
使能两个广播通道,一个设置为周期广播20S/次,另一个设置为触发广播广播周期200ms/次,两个广播通道需设置相同的数据格式
-
周期广播不再赘述,在触发广播中勾选MGPIO6,因为在硬件电路中MGPIO6与SW0相连,通过MGPIO6检测SW0的电平跳变,每检测到一次SW0的电平跳变就广播6次数据(触发广播模式中,默认会将设置的次数广播完才会重新进入检测状态)
-
MGPIO6设置为输入模式,启动边沿检测
-
在Advanced页面中需要输入一条指令“register write: 0 1 3 32e8 0”,将防抖功能关闭
-
完成以上操作后可通过Run in RAM进行测试。以上配置文件可直接下载后直接加载:trigger.zip
NanoBeacon Config Tool使用说明
关于NanoBeacon Config Tool更多用法,可查看软件的用户指南:NanoBeacon Config Tool User Guide EN.pdf
用户指南中使用的是“Beacon development kit”,在使用Gravity: BLE 传感器信标时,直接使用3.3V USB-TTL工具即可:
常见问题
还没有客户对此产品有任何问题,欢迎通过QQ在线客服或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。