从 InPlay IN100 BLE Beacon 传感器到 Arduino ESP32 BLE/WiFi 网桥

描述

该项目演示了一个概念验证,其中来自 InPlay IN100 BLE Beacon 的广播温度数据被 ESP32 上运行的 Arduino BLE 扫描仪应用程序接收。ESP32 解码温度数据,并使用 HTTP post 通过 WiFi 将数据传输到 Machinechat 的 JEDI 物联网应用软件,在那里可以对其进行可视化和操作。

硬件

软件

  • JEDI Pro
    适用于物联网数据收集、可视化、监控和数据存储的软件,可集成到物联网解决方案中。功能包括:收集来自传感器、设备和机器的数据;构建直观的实时和历史数据以及系统视图指示板;创建规则,自动监控和响应数据情况;通过电子邮件和短信接收警报通知。

  • Arduino
    Arduino是一个基于易于使用的硬件和软件的开源电子平台。

  • InPlay配置工具
    NanoBeacon配置工具是一个软件程序,用于测试和编写NanoBeacon DK(开发套件)的配置。

背景

Machinechat JEDI Pro是物联网应用软件,能够从多个来源收集数据,包括HTTP,串行,LoRaWAN, MQTT和内部。收集的数据可以通过运行在JEDI上的MQTT代理进行可视化、存储、操作和访问。
InPlay的IN100 NanoBeacon SoC是一款功能强大且高效的BLE信标解决方案,基于其专有的超低功耗SoC设计平台,采用蓝牙5.3技术。IN100消除了对软件编程的需求,使其成为无需代码的SoC设计。为开发人员提供了配置工具,可根据其应用需求为各种操作模式配置器件。

实现

对于这个项目演示,将在InPlay IN100 BLE信标开发套件上设置一个简单的应用程序,每秒发送广播数据。广播数据将包括设备名称“IN100”、VCC数据和内部温度数据。DFRobot ESP32C3开发板将使用Arduino应用程序进行编程,该应用程序包括BLE信标扫描仪功能,以接收和解码来自IN100的广播数据。此外,ESP32连接到WiFi网络和HTTP将温度传感器数据发布到Machinechat JEDI,以便在数据指示板上可视化。

设置InPlay BLE Beacon传感器

1 - 将编程板连接到IN100开发板之一,并从运行Nanobeacon配置工具的计算机插入USB电缆。

2 运行配置工具,连接IN100开发板。连接后,将使用Advertising Set#1的默认设置。选择Edit 按钮来配置自定义设置。

3 - 在“Advertising Data ”中选择“Settings ”选项卡。

4 - 按如下所示配置设置。设备名称“ Device Name 输入“IN100”。对于制造商特定数据“*Manufacturer Specific Data ,将ID保留为默认值,编辑数据以包括VCC和内部温度(大端)。完成设置后,选择Run in RAM* 按钮开始发送广播数据包。

设置Beetle ESP32C3 Arduino应用程序

1 - 甲虫ESP32C3上设置Arduino。参见链接Arduino环境配置

2 - 安装应用程序所需的库。通过Arduino的库管理器添加以下库:

ArduinoJson

3 - 为了正确运行,代码大小需要使用Huge (3MB) Partition方案,而不是默认的1.2MB APP和1.5MB SPIFFS分区

4 - 最新源代码BeetleESP32C3BLE_InplayBeacon.ino应用程序,在github上的链接如下:

安装Machinechat JEDI

如果尚未安装Machinechat JEDI,请参见以下内容:

配置JEDI数据指示板

一旦IN100开始播放广播,ESP32开始运行BLE扫描仪/WiFi/HTTP应用程序,请检查设备指示板,查看JEDI是否正在接收数据。

在JEDI中,选择Data Dashboards 选项卡,然后选择ADD CHART 来添加一个新图表。

结论

该项目展示了一种快速简便的方法,通过WiFi将BLE信标传感器数据传递给Machinechat的JEDI物联网应用软件。InPlay的IN100提供低成本、低功耗、无代码的BLE信标技术,可轻松与多种传感器技术结合开发BLE信标传感器。DFRobot的Beetle ESP32C3提供了一个小型、灵活、低成本的ESP32开发板,可在BLE和WiFi技术之间架起桥梁。

更多参考

这个项目挺有意思的,联动了 IN100 / ESP32 / PC(充当服务器)等多个平台,学到了许多:

  • 第一次知道有 JEDI One 的软件套件,恰好手上也有 BeagleBone Black,这样每次构建原型的时候就再也不用手绘曲线或者搓一个 UI 了
  • IN100 的低代码配置界面确实非常友好,这样几分钟之内就可以构建出一个可用的 beacon 广播原型,这样非常适合协议分析或者 mock 设备的场景,可以看到 UI 中支持的外设数据源也非常广,有 I2C 和 GPIO 边沿触发等
  • UI 上竟然还提供了 data encryption 的选项,之后仔细查阅了资料,发现是使用 AES-EAX 的 AEAD 密码学方法的,这样有需求的话无线通信时的数据安全性也可以得到保障
  • ESP32C3 的 Arduino 编程也算友好和敏捷,虽然我平常用 ESP-IDF 比较多,不过看得出来 Arduino 在构建 BLE 原型时更加得心应手:对于回调直接继承基类 BLEAdvertisedDeviceCallbacks 并 hide 掉基类的 onResult 方法,相比于 ESP-IDF 的 event-driven 的状态机编程,体验会好很多,不过体积也比较容易膨胀

除此之外,也有一些问题想要讨论——

  • J4105 的迷你主机写在硬件清单是否必要?如果其只是运行 JEDI One 的 WebUI 和通信后端的话,我觉得可能会引起一定的混淆,最好注明用途?
  • Advertiser 配置中 MSD 为什么特意使用大端呢?我印象中 BLE 的 GATT 字段是明确使用小端的,当然了厂商特定数据 MSD 肯定是不受这个限制的;但如果同一个项目中广播 beacon 的同时也有额外的 GATT 服务可以使用,这样的不一致性就可能会给开发带来一定的混淆,之后迭代或重构的时候比较容易搞错

感谢你的认可。

  • J4105 的迷你主机写在硬件清单是否必要?如果其只是运行 JEDI One 的 WebUI 和通信后端的话,我觉得可能会引起一定的混淆,最好注明用途?

的确最好注明用途,该主机虽然不直接处理 BLE 或 WiFi 数据,但它运行 JEDI One,是系统中 数据处理和可视化 的核心,因此是整个架构不可或缺的一部分。

  • Advertiser 配置中 MSD 为什么特意使用大端呢?我印象中 BLE 的 GATT 字段是明确使用小端的,当然了厂商特定数据 MSD 肯定是不受这个限制的;但如果同一个项目中广播 beacon 的同时也有额外的 GATT 服务可以使用,这样的不一致性就可能会给开发带来一定的混淆,之后迭代或重构的时候比较容易搞错

MSD在与 BLE GATT并存的项目中,确实最好通过文档显式标注,以避免后期开发混淆或错误解析。