天南地北客
发表于: 2018-6-7 16:39:11 | 显示全部楼层

在本篇文章中,我们使用博世的XDK110无线传感器开发套件将传感器数据传输到MQTT消息传递服务。我们将简单介绍一下XDK110无线传感器开发套件,描述其板载的硬件器件,探索其软件开发环境,并演示将该节点连接到MQTT消息传递服务。


XDK110开发套件

博世XDK110是一款多功能设备,包含多个MEMS传感器:

●    加速度计

●    声学传感器

●    陀螺仪

●    磁力仪

●    光传感器

●    湿度/压力/温度传感器

●    惯性测量单元


它还包括一个microSD卡插槽、两个瞬时开关、三个可编程LED,并支持无线网络和蓝牙低功耗(BLE)连接。设备的编程和配置通过XDK-Workbench IDE完成。


XDK110允许用户编程设备以通信事件或传输原始传感器数据,允许传感器在新设备中的功能或将其添加到旧设备。

1-bcds-22135.jpg

Hughes_Projects_BOSCHXDK_BoardImages.gif


以上显示的是博世XDK110内部的单电路板。


上面的gif标识了电路板上的部件,如下所示:

1.    电源开关

2.    MicroUSB数据

3.    德州仪器CC3100 SimpleLink™Wi-Fi®网络处理器,用于MCU应用的物联网解决方案

4.    0.05“2×5 JTAG编程头

5.    RFI屏蔽覆盖蓝牙芯片和周围的无源组件。

6.    SD卡插槽

7.    用于扩展连接器的ESD或电平转换IC

8.    扩展连接器

9.    标有APH的IC

10.    标有“157 1433”的IC

11.    麦克风

12.    标有“036 DA”的IC

13.    标有“1A”的IC

14.    环境光传感器

15.    标有“007 A533 030”的IC

16.    标有“021 TS”的IC

17.    标有“ZVK 58J”的IC

18.    标有“WK”的IC

19.    EFM32 Gecko 32位微控制器

20    标有“CKP TI 571”的IC


传感器IC非常小,没有充分的识别信息空间。顶端标记可能是IC标识符,也可能是批次或日期代码。如果您使用博世Sensortec集成电路并在具有上述类似顶部标记的传感器上运行,请在下面评论,我会更新列表。


PCB完全由表面贴装元件构成,并可在板的内部层上布线几乎所有信号线。顶层和底层铜箔与照片中不可见的一系列通孔缝合在一起。围栏通过两个离地间隙区域延伸穿过电路板的所有层。在电路板的顶部是两个连接到BLE和WiFi IC的芯片天线。


设计人员决定放弃丝网印刷零件定位和标记,而是使用印刷在铜上的阻焊剂和文字印制板上出现的少量标记。


缺少标记是早期设计阶段的一个危险选择,应该留给制造的最后阶段,因为对于电路板制造商而言,错误地定位IC或测试工程师以使用错误的测试焊盘太容易了。


本设计中使用的主处理器是Silicon Labs的EFM32微控制器。这个微控制器及其支撑组件周围的金属轮廓可能是用于RFI屏蔽的焊接连接,这是不必要的。


电路板上我看不见的部分是封装在RFI屏蔽内的任何部分(在上图中标记为#5)。下面的唯一线索是从金属屏蔽下面出现并连接到其中一个芯片天线的迹线。

WIN_20180409_10_44_04_Pro.jpg


上图中(EFM32附近)显示但未突出显示的是四个LED和两个按钮开关。未显示为设备供电的电池。


编程设备(XDK Workbench)

最近发布了新版本的Bosch XDK Workbench。在尝试使用下面显示的网站提供的软件示例对XDK110进行编程之前,请确认该代码适用于您的XDK Workbench版本,因为某些示例未由博世XDK组维护。


XDK Workbench中提供的软件示例由Bosch更新,并且应该可以工作。


XDK110的软件集成

XDK Workbench是基于Eclipse的IDE(集成开发环境)。提供了几个示例来演示功能并为软件开发人员提供一个起点。可以在以下开发人员的网站上找到该设备的其他软件。

●    博世软件创新

●    Zatar

●    Relayr

●    Evothings

●    博世工程

●    博世Sensortec

●    BellaDati

●    LEM IoT

●    Appropos

Hughes_Projects_BOSCHXDKNode.png


如果您熟悉Eclipse,则XDK Workbench应该相对易于使用。标题为“XDK-Examples”的欢迎界面中的一组示例提供了允许大多数开发人员立即开始使用所需的代码。 “XDK-Docs”选项卡中的文档提供了有关各种可用传感器的信息,如何配置它们以供使用,以及如何访问其数据。


编程示例(XDK Live)

XDK Workbench中特别感兴趣的是名为“XDK Live”的软件。这是一个基于事件的源代码创建工具,应该允许非程序员创建运行XDK110所需的源代码。该软件还处于软件开发周期的早期阶段,但是,在某些时候,XDK Live可能会取代传统编程的许多用例。


XDK Live语言是一种抽象的,基于事件的语言。它在满足特定条件时执行代码 - 例如,某段时间已过,按下按钮时或传感器值超过预定义值时。


您可以快速编写代码,告诉您电机是否振动太大,CNC机器噪音太大或叉车倾斜度过大。


以下XDK Live代码创建一个蓝牙低功耗设备,每5秒发送一次录制温度。它通过解释XDK Live代码并使用它创建编译并上载到设备的C ++源代码来完成此操作。

  1. // The following code belongs to the main package
  2. package main;
  3. // The XDK110 is the device used
  4. import platforms.xdk110;   
  5.             
  6. // Setup a BLE instance named myPhone
  7. setup myPhone : BLE {
  8. // Name of the sensor seen by other BLE devices                  
  9.      deviceName = "BoschXDK";
  10.      // Advertising interval in milliseconds.        
  11.      advertisingInterval = 2000;
  12.      // The last four digits of the device UUID are assigned to the 32-bit characteristic  
  13.      // for temperature(measured in thousandths of a degree Celsius).     
  14.      var myTemperature = int32_characteristic(UUID=0xAACC);   
  15. }

  16. // Do this every 5 seconds
  17. every 5 seconds {
  18.      // Write the current temperature value to myTemperature variable
  19.      myPhone.myTemperature.write(environment.temperature.read());
  20. }
复制代码

Hughes_Project_BOSCHXDK_ArticleImages.jpg


在上述程序中由XDK110传输的数据显示在iOS应用程序“Light-Blue Explorer”上。BLE协议使用数据的小端和大端格式组合 - 对于缺乏经验的BLE编程人员来说,这是潜在的“难题”。

跳转到指定楼层
天南地北客
发表于: 2018-6-7 17:33:34 | 显示全部楼层

使用XDK110和MQTT

消息队列遥测传输(MQTT)是专为机器对机器(M2M)数据传输设计的数据传输协议。称为消息“代理”的服务器 - 接收来自“发布”特别是“主题”信息的设备的传输,并随后将这些消息传递给“订阅”那些特定“主题”的其他机器。


在下面截图中,XDK110通过Wi-Fi将数据发布到主题为“XDK110 / example”的MQTT代理。我的电脑正在运行客户端程序]Mosquitto_sub.exe,并订阅相同MQTT代理上的主题“XDK110 / example”。 XDK110发布的所有数据都显示在控制台中的计算机上。


任何数量的设备都可以发布,并且任何数量的设备都可以订阅代理服务器上的可用主题。在大多数情况下,数据不在服务器上维护。服务质量设置提供了一种方法来验证传输之后收到的消息。

Hughes_Project_BOSCHXDKNode_MQTTExample.png

屏幕截图显示通过虚拟COM端口接口(中心底部“控制台”窗口)发送的调试数据以及MQTT服务器(“命令提示符”窗口)中的数据。


任何人都可以在XDK Live上生成代码;如果你想修改生成的代码,你需要高于平均水平的编程专业知识。


以下演示使用XDK Live创建MQTT客户端。基本构建块用于创建结构,并且每次保存文件时都会预编译代码。

  1. // The following code belongs to the main package
  2. package main;
  3. // The XDK110 is the device used
  4. import platforms.xdk110;

  5. // Create a wireless connection named 'wireless'
  6. setup wireless : WLAN {
  7.         ssid = "AllAboutCircuits";
  8.         psk = "BestWebsiteEver”;
  9.         useDHCP = true;
  10. }

  11. // Create a MQTT instance
  12. setup messaging : MQTT {
  13.         transport = wireless;
  14.         url = "mqtt://broker.hivemq.com:1883";
  15.         cleanSession = true;
  16.         clientId = "1234";
  17.         var Test = topic("XDK/Test",1);        
  18. }

  19. // When button one is pressed, send text via MQTT
  20. every button_one.pressed {
  21.         messaging.Test.write("Test Write");
  22. }

  23. // Read and transmit the temperature every 5 seconds
  24. every 5 seconds {
  25.         var myTemperature = environment.temperature.read();
  26.         messaging.Test.write(`Temp: ${myTemperature}`);
  27. }

  28. // Read and transmit the barometric pressure every 15 seconds
  29. every 15 seconds {
  30.         var myPressure = environment.pressure.read();
  31.         messaging.Test.write(`Press: ${myPressure}`);
  32. }
复制代码

每次修改和保存代码时,软件都会将此抽象代码预先编译为实际代码,然后在将新固件加载到设备之前进行编译。


总之,XDK Live中的以下代码片段...

  1. every 15 seconds {
  2.         var myPressure = environment.pressure.read();
  3.         messaging.Test.write(`Press: ${myPressure}`);
  4. }
复制代码

...生成以下C ++格式的函数:

  1. Retcode_T HandleEvery15Second1(void* userParameter1, uint32_t userParameter2)
  2. {
  3.         BCDS_UNUSED(userParameter1);
  4.         BCDS_UNUSED(userParameter2);

  5.         Retcode_T exception = NO_EXCEPTION;
  6.         
  7.         Environmental_Data_T sensorEnvironmentModalityPreparation_0;
  8.         exception = Environmental_readData(xdkEnvironmental_BME280_Handle, &sensorEnvironmentModalityPreparation_0);
  9.         if(exception != NO_EXCEPTION) return exception;
  10.         
  11.         uint32_t myPressure = sensorEnvironmentModalityPreparation_0.pressure;
  12.         char result1354933794[17];
  13.         snprintf(result1354933794, sizeof(result1354933794), "Press: %" PRIu32 "", myPressure);
  14.         
  15.         char* _newConnectivityMQTTMessaging_Test_0 = result1354933794;
  16.         exception = ConnectivityMQTTMessaging_Test_Write(&_newConnectivityMQTTMessaging_Test_0);
  17.         if(exception != NO_EXCEPTION) return exception;

  18.         return NO_EXCEPTION;
  19. }
复制代码

一旦代码生成,编译并加载到设备中,它就开始与消息代理进行通信。


结果显示在下面的屏幕截图中,该图像从通过MQTT代理连接到XDK110的计算机上截取。

Hughes_Projects_XDK_MQTT_Example.png


虚拟XDK演示应用

如果你想开始玩XDK110,Virtual XDK iOS和Android应用程序是一个很好的开始。 XDK110所需的代码可从欢迎屏幕的“VirtualXDKDemo”得到 - 该应用程序创建了一个BLE外设,可将所有可用的传感器数据传输到手机上进行查看。

Hughes_Project_BOSCHXDK_VirtualXDK.jpg

VirtualXDK iOS应用程序显示可用的传感器数据并随时间变化。


总结

一体化传感器解决方案旨在将明显过时的设备立即升级为与新购买的产品相当或甚至更值得购买的产品。值得注意的是,其他平台(如Nordic Thingy)提供了类似的功能。 XDK110就是一个具有软件生态系统的例子,它有助于有效集成到现有设备中。


如果您使用过XDK110或类似的传感器开发板,请在下面的回复中分享您的经验。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 73 | 回复: 123



手机版|

GMT+8, 2024-3-28 16:14 , Processed in 0.090812 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表