【SensorTile】物联网开发套件

电子专业 徐 自远 1252℃ 0评论

1、套件概述

有幸得到一套SensorTile物联网开发套件,狂拽酷炫吊炸天的性能真是让我兴奋至极,经过一段时间的学习摸索,初步了解其开发流程,这里将这款神器介绍给大家,并分享开发经验与源代码,共同学习进步,希望大家持续关注。

在物联网大潮下,ST推出的STEVAL-STLKT01V1(SensorTile的全部套件)就是一款高度集成的开发套件,具有丰富的功能,可以缩短设计周期,加速开发。

极小的SensorTile核心板,只有13.5×13.5mm,具有高效且低功耗的惯性器件,气压计,MEMS麦克风,板上80Mhz的MCU,提供蓝牙智能连接,在最小的尺寸中提供最好的无线性能。

STEVAL-STLKT01V1开发套件可用于原型机的开发,可以被用于评估阶段,在一个最佳的系统框架评估系统的高效性,低功耗,数据融合和嵌入式信号处理算法。可被用于参考设计,提供高效,低功耗的设计。包括:原理图,PCB图,器件列表,3D CAD,从基础的例程到复杂的软件工程。

套件全家福


包括:SensorTile核心板,mini扩展板,锂电池,ST-Link下载连接线,扩展板,可穿戴式的塑料盒。

SensorTIle核心板。


引用

器件

描述

A

MP34DT04

MEMS数字麦克风

B

LD39115J18R

1.8V低压差稳压器

C

STM32L476JGY6

ARM Cortex-M4 32位MCU

D

LSM6DSM

低功耗3轴加速度计和3轴陀螺仪

E

LSM303AGR

低功耗3轴加速度计和3轴磁力计

F

LPS22HB

MEMS气压计

G

BlueNRG-MS

BLE

H

BALF-NRG-01D3

谐波滤波器

STLCX01V1(SensorTile开发扩展板)


引用

器件

描述

A

SensorTile的连接头

插接或焊接SensorTile

B

Arduino连接头

兼容STM23 Nucleo板子

C

ST2378ETTR

1.71到5.5V的电平转换器

D

micro-USB连接头

供电与通信接口

E

音频DAC,耳机孔

16位低功耗音频DAC,3.5mm耳机孔

F

SWD连接头,复位按钮

5-pin SWD连接口,复位按钮

STLCR01V1(SensorTile mini扩展板)


引用

器件

描述

A

SensorTile的连接头

插接或焊接SensorTile

B

HTS221

数字相对湿度和温度计

C

STBC08PMR, STC3115, LDK120M-R, USBLC6-2P6

800mA锂电池充电器,低噪声低电压稳压器,静电保护

D

电源开关

 

E

SWD连接头

5-pin SWD连接口

F

micro-USB连接头,3-pin电池接口

供电与通信接口,锂电池供电接口

G

micro-SD卡插口

 

SensorTile的功能框架图如下:


系统需求:

如果仅仅需要运行demo,需要一台智能手机安卓4.4版本以上或者IOS 8.0以上操作系统,且支持4.0版本以上蓝牙。一个USB线用于供电。

如果需要自己设计,需要一台Windows7系统以上的电脑,安卓有IAR,KEIL或者AC6集成开发环境,USB线供电,一个STM32 Nucleo板子,ST-LINK固件。

多套固件支持该套件:

FP-SNS-ALLMEMS1

支持的硬件:BlueNRG ,LPS22HB, LSM6DSM, LSM303AGR MD34DT04。

FP-SNS-MOTENV1

支持的硬件:BlueNRG, HTS221, LPS25HB, LSM6DS0, LIS3MDL。

BLUEMICROSYSTEM1

支持的硬件:BlueNRG , LSM6DS3, LPS22HB, LSM6DSM, STC3115, LSM303AGR

开放MEMS算法(算法库会在之后介绍):osxMotionFX (实时姿态解算算法),osxMotionARactivity(运动状态识别算法)osxMotionCP (佩戴位置识别算法),osxMotionGR (手势识别算法),osxMotionPM (计步器)。

BLUEMICROSYSTEM2

支持的硬件:BlueNRG, LPS22HB, LPS25HB, LSM303AGR,LSM6DSM, MP34DT04。

开放MEMS算法:osxMotionFX (实时姿态解算算法),osxMotionARactivity(运动状态识别算法)osxMotionCP (佩戴位置识别算法),osxMotionGR (手势识别算法)。

注:所谓的算法库就是ST提供一种功能接口,调用可以方便的实现不同的功能。

总结:

极致小的尺寸,丰富的功能,简便的算法库,全套ST器件,开源SDK,甩SensorTag几条街,想拥抱物联网的你有什么理由拒绝呢?

参考引用:

SensorTile培训资料:


20160908 SensorTile 025 Training FINAL.pdf

SensorTile概述:


en.DM00298488.pdf

SensorTile用户手册:


en.DM00320099.pdf

SensorTile快速入门指南:


en.steval-stlkt01v1_quick_start_guide.pdf

Open.MEMS算法库介绍:


en.Open_MEMS_EN.pdf

2、功能展示

前面我们讲到有四套固件库支持SensorTile,但只有BLUEMICROSYSTEM1和BLUEMICROSYSTEM2提供算法库,两个固件库功能有稍许差别,BM1较BM2多了计步器和开关LED,BM2较BM1多了蓝牙语音,因此功能展示会综合两个固件库。以下功能展示全是本人亲自试验,绝不忽悠。

下载好Blue-MS(安卓默认是到谷歌商城下载,不能翻墙帖子最后有下载),SensorTile刷好固件(环境的搭建和程序的烧录会在以后介绍),开启手机BLE,打开软件界面如下:


扫描设备,ST采用了搜索过滤,只能搜索到使用了ST协议的设备,因此搜索的速度相当快。

传感器数据显示,点击设备名进入后,就出现各种传感器的信息,包括温度计,气压计等。可以查看Rssi,电池电量。相关界面如下:



虚拟示波器显示,可以看各种数据的波形,加速度计,磁力计,陀螺仪,温度计等(以后会介绍数据传输的工作原理,并做简单的DIY)。


加速度计相关算法,包括:朝向检查,自由落体检测,单击检测,双击检测,拿起检测,计步器,倾斜检测。在APP中体现如下(如果检测到相应状态图标就会跳动):








在注册了相关算法库之后开启算法库功能(注册方法以后介绍)。

osxMotionFX (实时姿态解算算法),这是9轴的姿态解算算法,首先需要磁力计校准,校准之后,界面上的六面体就会显示SensorTile的姿态,实测还是相当的准的,停下转动后在偏航上会有少许的滑动,这个是9轴的正常现象了,界面如下:


osxMotionARactivity(运动状态识别算法),这个可以显示佩戴者的运动状态,是静止、运动、走路、跑步等状态,界面如下:


osxMotionCP(佩戴位置识别算法),这个可以指示佩戴者佩戴的位置,是手上、脖子上、或是其的地方,检测出后会高亮显示,界面如下:


osxMotionPM (计步器),可以检测出行走的步数,并计算出速度,这个功能在加速度算法中也有实现,两者效果差不多,都不太准,不过市面上的多种手环也都存在不准的现象。SensorTile上的ST加速度计芯片已经硬件化了计步功能,也就是说直接从寄存器里读出来就是步数了,界面如下:


osxMotionGR (手势识别算法),可以检测出SensorTile是在左右运动,上下运运动还是摇晃,检测出后会高亮显示,界面如下:


osxAudioBV(蓝牙语音),这个厉害了,正如视频中所示,可以通过SensorTile传输语音到手机,然后手机将语音传输到Google语音识别云服务,最后传回文字到手机上,如果终端能识别这些文字,想想是不是很智能呢?不过使用这个功能之前需要先申请Google SpeechAPI Key,然后还需要手机可登录Google,这些暂时还实现不了,不过实测传输回来的语音还是挺清楚的,延迟也很低,界面如下:


遥控LED灯,可以使用手机来远程控制SensorTile上面的LED灯的状态(之后会介绍其工作原理,并从SDK-Example开始一步一步实现这个功能),界面如下:


相互通信功能,在APP中是Debug Console,发送什么数据过去就传回来什么(之后会介绍工作流程以及相关DIY),界面如下:


FOTA(空中固件下载)功能,最常见的就是固件更新,我也做了测试,首先将固件下载到手机,然后选择固件更新,耗时92秒,如下:



这就是目前SensorTile支持的功能,其实算法库拥有的功能还远不止如此,比如声音去燥,声音定位等等的,期待着大家去发现。

 

3、程序烧录与注册

拿到SensorTile之后,直接连接上USB线,然后用手机打开Blue-MS软件就可以直接使用了,但是要体验更多功能,这些并不够。

环境搭建:

硬件需求:SensorTile开发套件,满足要求的手机和电脑各一台,ST-link或者一个NUCLEO STM32开发版。

软件需求: IDE(IAR、KEIL、AC6),ST-Link驱动,BM1和BM2开发软件包,Blue-MS APP。

安装好IDE和ST-Link驱动,开发环境就搭好了。

程序烧录:

将一块STM32 NUCLEO板子的CN2跳帽去掉,USB线与相关的连接如下图所示:



将两根USB线连接电脑。使用IAR,KEIL或者AC6打开工程,这里采用KEIL5,BM2打开路径BlueMicrosystem2_V2.1.0\Projects\Multi\Applications\BlueMicrosystem2\MDK-ARM\STM32L476RG-SensorTile中的工程、编译、烧录。此时SensorTile上的灯在闪烁说明烧录成功了。

BM1打开路径BlueMicrosystem1_V3.0.0\Projects\Multi\Applications\BlueMicrosystem1\MDK-ARM\STM32L476RG-SensorTile,进行相同操作即可。

算法库注册

算法库的注册有两种方法,下载PC客户端,在电脑上进行注册,也可以直接在手机上进行注册。这里使用手机注册,点击状态栏上面的缩略点,弹出下拉菜单中选择”License Manager”然后弹出如下窗口:


列出的是该固件可以申请的License,打了勾的是已经弄好了的,有REQUEST 和UPLOAD的是还没有注册好的。以osxMotionAR为例,点击REQUEST弹出如下申请窗口:


填写名字、邮箱和公司信息。我使用的是QQ邮箱,点击红色按钮使用QQ邮箱发送,稍后会收到两封邮件,其中一个有注册序列号如下:



复制邮件中的序列号,点击UPLOAD粘贴序列号,最后点击红色的按钮,会提示注册成功。复位芯片,重新连接就会发现多了运动状态识别的功能。其他的算法库注册方法类似,这里要注意如果需要更换固件需要将License清除才能重新刷固件,不然会导致芯片无法启动。

 

4、DIY遥控LED

先上图片:


 

图片中实现的功能是用手机遥控控制LED,这个功能在Blue-MS是有的,但是在ST提供的SDK-Example中没有,那么就跟随我一起一步一步的实现吧!

SensorTile中烧录BM1固件,然后下载SDK,在帖子最后有下载,代码是托管在Github上的,用Android Studio 2.X打开,如果编译时提示缺少所需的编译工具,翻墙点击下载即可,或者直接修改代码中的编译工具版本。

整个工程分为BlueSTSDK和BlueSTExample两个部分,前者是SDK,后者是一个简单的例程,连接后可以显示所有的传感器数据,就像上面GIF图片中所示,点击列表就会出现详细的传感器数据。

打开工程后修改布局文件activity_demo.xml,添加一个按钮和两个线性布局,代码如下


  1. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  2. xmlns:tools=”http://schemas.android.com/tools”
  3. android:layout_width=”match_parent”
  4. android:layout_height=”match_parent”
  5. android:orientation=”vertical”
  6. android:weightSum=”1″ tools:context=”com.st.BlueSTSDK.Example.FeatureListActivity”>
  7. <LinearLayout
  8. android:layout_width=”wrap_content”
  9. android:layout_height=”wrap_content”>
  10. <Button
  11. android:layout_width=”wrap_content”
  12. android:layout_height=”wrap_content”
  13. android:id=”@+id/Btn_LED”
  14. android:text=”LED”/>
  15. </LinearLayout>
  16. <ListView android:id=”@+id/featureList”
  17. xmlns:android=”http://schemas.android.com/apk/res/android”
  18. android:layout_width=”match_parent”
  19. android:layout_height=”match_parent”/>
  20. </LinearLayout>
  21.  

    复制代码

    然后找到FeatureListActivity,给按钮添加响应函数,这里采用OnClickListener监听,而不直接在布局文件中添加android:onClick方法的原因是AppCompatActivity类并不支持。给FeatureListActivity添加接口类:

  22. View.OnClickListener

    复制代码

    添加LED按钮的全局变量:

  23. private Button LED;

    复制代码

    在onCreat函数中给按钮添加监听:

  24. LED = (Button) findViewById(R.id.Btn_LED);
  25. LED.setOnClickListener(this);
  26.  

    复制代码

    在onCreat外添加按钮实现函数:

  27. public void onClick(View view){
  28. switch (view.getId()){
  29. case R.id.Btn_LED:
  30. FeatureSwitch f = mNode.getFeature(FeatureSwitch.class); //get Feature Switch class
  31. if(!mNode.isEnableNotification(f))//Ensure the Switch is EnableNotification
  32. mNode.enableNotification(f);
  33. if(f.getSwitchStatus(f.getSample())==0){//Check the led state
  34. f.changeSwitchStatus((byte)0x01);//Tuen on LED
  35. }else {
  36. f.changeSwitchStatus((byte) 0x00);//Tuen off LED
  37. }
  38. break;
  39. }
  40. }
  41.  

    复制代码

    代码都进行了注释,界面上之所以显示这些类的信息是因为APP检测到有这些Feature类可用,如果注册了算法库后,会发现可用的Feature类变多,在点击了按钮之后,先获取Switch的类,然后判断该节点中Switch类是否Notification,,在没有点击列表中的Feature类的时候是没有Notification该类的,也就是说不会关注该Feature类的任何变动,对其各种操作也是不可行的。因此在这里先判断是否已经Notification了Switch类,如果没有就开启,这样无论是否点击列表中的Switch类都可以实现对LED的控制。然后调用Switch类中的获取LED灯状态的函数,该函数中需要Sample变量,该变量是收到的数据,这里同样需要调用Switch类中的获取Sample函数,这里获取到的是上一次收到的数据,根据LED的状态来控制LED灯,就实现了一键交替开关LED的效果。

    有了以上的代码已经能够实现灯的开关操作了,但是却不敢保证LED灯按照要求控制了,还需要一个回馈,因此修改onUpdate函数如下:

  42. public void onUpdate(Feature f, Feature.Sample sample) {
  43. final String featureDump = f.toString();
  44. if( f.getName().equals(“Switch”)){//if the Feature is Switch
  45. FeatureSwitch Switch = mNode.getFeature(FeatureSwitch.class);
  46. if(Switch.getSwitchStatus(sample)==0){//Check the led state
  47. LED_State=true;
  48. }else{
  49. LED_State=false;
  50. }
  51. FeatureListActivity.this.runOnUiThread(new Runnable() {
  52. @Override
  53. public void run() {
  54. if(LED_State) {
  55. LED.setText(“Turn On”);//update button text
  56. }else {
  57. LED.setText(“Tuen Off”);//update button text
  58. }
  59. }
  60. });
  61. }
  62. FeatureListActivity.this.runOnUiThread(new Runnable() {
  63. @Override
  64. public void run() {
  65. mTextView.setText(featureDump);//Modify the button’s text
  66. }
  67. });
  68. }//onUpdate
  69.  

    复制代码

    SensorTile所有的数据更新都是通过调用onUpdate函数来实现的,在该函数中调用各个Feature中的toString函数,将收到的数据转换为字符串,最后在UI更新线程中更新。由于所有的Feature的数据更新都会调用onUpdate,那就可以在函数中根据不同的Feature来进行不同的操作。首先获取Feature的名字,如果是”Switch”就往下处理,获取该节点的Switch的类,然后调用该类中的getSwitchStatus,这里sample直接用,不调用Switch类中getsample方法。得到了LED灯的状态就给全局变量LED_State赋值,最后根据LED_State的值改变按钮上的文字,这就可以确保准确了。这里注意LED_State变量不能定义在函数里面,否则在UI线程中会报错。

    SDK有很多Feature,熟悉了Switch的使用,其他的也就大同小异了,为以后更复杂的应用打好基础。

    回顾整个DIY过程,我们根本没有接触到底层,没有配置服务地址,没有配置特征,没有写发送接收函数,一切都是调用接口函数,却可以满足各种需求,这种开发模式是不是很爽呢。

     

     

     

    【SensorTile物联网开发套件(1)——概述】 http://m.toutiao.com/group/6345235550069031170/?iid=5947341222&app=news_article&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share

转载请注明:徐自远的乱七八糟小站 » 【SensorTile】物联网开发套件

喜欢 (0)

您必须 登录 才能发表评论!

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号