5765|14

654

帖子

26

TA的资源

版主

楼主
 

SensorTile物联网开发套件(4)——DIY遥控LED [复制链接]

 
 
本帖最后由 lb8820265 于 2016-10-26 16:22 编辑

先上图片:

   图片中实现的功能是用手机遥控控制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>
复制代码
     然后找到FeatureListActivity,给按钮添加响应函数,这里采用OnClickListener监听,而不直接在布局文件中添加android:onClick方法的原因是AppCompatActivity类并不支持。给FeatureListActivity添加接口类:
  1. View.OnClickListener
复制代码
      添加LED按钮的全局变量:
  1. private Button LED;
复制代码
     在onCreat函数中给按钮添加监听:
  1. LED = (Button) findViewById(R.id.Btn_LED);
  2. LED.setOnClickListener(this);
复制代码
     在onCreat外添加按钮实现函数:
  1. public   void onClick(View view){
  2.     switch (view.getId()){
  3.         case R.id.Btn_LED:
  4.             FeatureSwitch f = mNode.getFeature(FeatureSwitch.class); //get Feature Switch class
  5.             if(!mNode.isEnableNotification(f))//Ensure the Switch is EnableNotification
  6.                 mNode.enableNotification(f);
  7.             if(f.getSwitchStatus(f.getSample())==0){//Check the led state
  8.                 f.changeSwitchStatus((byte)0x01);//Tuen on LED
  9.             }else {
  10.                 f.changeSwitchStatus((byte) 0x00);//Tuen off LED
  11.             }
  12.             break;
  13.     }
  14. }
复制代码
   代码都进行了注释,界面上之所以显示这些类的信息是因为APP检测到有这些Feature类可用,如果注册了算法库后,会发现可用的Feature类变多,在点击了按钮之后,先获取Switch的类,然后判断该节点中Switch类是否Notification,,在没有点击列表中的Feature类的时候是没有Notification该类的,也就是说不会关注该Feature类的任何变动,对其各种操作也是不可行的。因此在这里先判断是否已经Notification了Switch类,如果没有就开启,这样无论是否点击列表中的Switch类都可以实现对LED的控制。然后调用Switch类中的获取LED灯状态的函数,该函数中需要Sample变量,该变量是收到的数据,这里同样需要调用Switch类中的获取Sample函数,这里获取到的是上一次收到的数据,根据LED的状态来控制LED灯,就实现了一键交替开关LED的效果。
      有了以上的代码已经能够实现灯的开关操作了,但是却不敢保证LED灯按照要求控制了,还需要一个回馈,因此修改onUpdate函数如下:
  1. public void onUpdate(Feature f, Feature.Sample sample) {
  2.     final String featureDump = f.toString();
  3.    if( f.getName().equals("Switch")){//if the Feature is Switch
  4.        FeatureSwitch Switch = mNode.getFeature(FeatureSwitch.class);
  5.        if(Switch.getSwitchStatus(sample)==0){//Check the led state
  6.            LED_State=true;
  7.        }else{
  8.            LED_State=false;
  9.        }
  10.        FeatureListActivity.this.runOnUiThread(new Runnable() {
  11.            @Override
  12.            public void run() {
  13.                if(LED_State) {
  14.                    LED.setText("Turn On");//update button text
  15.                }else {
  16.                    LED.setText("Tuen Off");//update button text
  17.                }
  18.            }
  19.        });
  20.    }
  21.     FeatureListActivity.this.runOnUiThread(new Runnable() {
  22.         @Override
  23.         public void run() {
  24.             mTextView.setText(featureDump);//Modify the button's text
  25.         }
  26.     });
  27. }//onUpdate
复制代码
      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过程,我们根本没有接触到底层,没有配置服务地址,没有配置特征,没有写发送接收函数,一切都是调用接口函数,却可以满足各种需求,这种开发模式是不是很爽呢。
SDK 函数手册 javadoc.zip (534.92 KB, 下载次数: 54)
SDK源码https://github.com/STMicroelectronics-CentralLabs/BlueSTSDK_Android

最新回复

是激活了过后其他自己写的软件也可以用 还是只有激活的软件才可以用了 也就是请问激活的是控制板的固件还是手机上的软件还是手机了?  详情 回复 发表于 2017-3-9 13:19

赞赏

1

查看全部赞赏

点赞 关注
个人签名QQ:252669569
 
 

回复
举报

2万

帖子

71

TA的资源

管理员

沙发
 
哈哈   最喜欢看效果呈现视频了
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

1万

帖子

2854

TA的资源

管理员

板凳
 
汇总贴在此:看lb8820265玩SensorTile物联网开发套件
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

玩板看这里:

https://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 
 
 

回复

5221

帖子

236

TA的资源

管理员

4
 
SensorTile物联网开发套件抢鲜体验、免费申请活动正在进行(即日起-11月21日)
想要的小伙伴玩的小伙伴马上行动吧~
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

5
 
晕倒,不会Android 的编程。。。。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

6
 
SDK是什么意思呢??求科普

点评

软件开发工具包(Software Development Kit, SDK)  详情 回复 发表于 2017-1-9 16:27
 
 
 

回复

654

帖子

26

TA的资源

版主

7
 
小笼包 发表于 2017-1-9 14:47
SDK是什么意思呢??求科普

软件开发工具包(Software Development Kit, SDK)
个人签名QQ:252669569
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

8
 
楼主用的是AS几的版本, 编译配置是怎样的? SDK 是用的版本几? 不太熟悉Android Studio .  运行到手机里面 就闪退 咋回事。
我用的是SDK API 24
Gradle 2.2.3

点评

成功编译了吗?在手机里面闪退是在什么时候出现的呢?  详情 回复 发表于 2017-2-22 10:55
 
 
 

回复

654

帖子

26

TA的资源

版主

9
 
本帖最后由 lb8820265 于 2017-2-22 10:56 编辑
wbhb2011 发表于 2017-2-22 10:04
楼主用的是AS几的版本, 编译配置是怎样的? SDK 是用的版本几? 不太熟悉Android Studio .  运行到手机里 ...

成功编译了吗?在手机里面闪退是在什么时候出现的呢?官方提供的SDK可以编译运行吗?

点评

OK了 import project 然后在android 下调试。尽量选择高版本的SDK API 就行了。现在能用。  详情 回复 发表于 2017-2-22 17:44
个人签名QQ:252669569
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

10
 
lb8820265 发表于 2017-2-22 10:55
成功编译了吗?在手机里面闪退是在什么时候出现的呢?官方提供的SDK可以编译运行吗?

OK了 import project 然后在android 下调试。尽量选择高版本的SDK API 就行了。现在能用。
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

11
 
请问楼主能帮我看一下如何在这里获取记步数据吗,因为我的设计需要获取步数,但是我找了好久都没有在BlueSTSDK里面找到获取步数的方法函数。@lb8820265

点评

特地的给你看了下,SDK中是有的,具体位置请看图片: [attachimg]286993[/attachimg] BlueMS中使用这个也是需要获取相应的licence的,当获取后你用SDK打开是否能看到相关的选项。  详情 回复 发表于 2017-3-7 15:09
 
 
 

回复

654

帖子

26

TA的资源

版主

12
 
李炳1991 发表于 2017-3-6 18:18
请问楼主能帮我看一下如何在这里获取记步数据吗,因为我的设计需要获取步数,但是我找了好久都没有在BlueST ...

特地的给你看了下,SDK中是有的,具体位置请看图片:

BlueMS中使用这个也是需要获取相应的licence的,当获取后你用SDK打开是否能看到相关的选项。

点评

我也找到了 不过无法使用 获取license就是使用官方的BlueMS给板子固件获取license对吗,然后就可以了。  详情 回复 发表于 2017-3-9 13:04
个人签名QQ:252669569
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

13
 
lb8820265 发表于 2017-3-7 15:09
特地的给你看了下,SDK中是有的,具体位置请看图片:

BlueMS中使用这个也是需要获取相应的licence的, ...

我也找到了  不过无法使用  获取license就是使用官方的BlueMS给板子固件获取license对吗,然后就可以了。

点评

是激活了过后其他自己写的软件也可以用 还是只有激活的软件才可以用了 也就是请问激活的是控制板的固件还是手机上的软件还是手机了?  详情 回复 发表于 2017-3-9 13:19
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

14
 
李炳1991 发表于 2017-3-9 13:04
我也找到了  不过无法使用  获取license就是使用官方的BlueMS给板子固件获取license对吗,然后就可以了。

是激活了过后其他自己写的软件也可以用 还是只有激活的软件才可以用了 也就是请问激活的是控制板的固件还是手机上的软件还是手机了?

点评

激活的是板子上的固件,只要激活了板子,任何APP都可以直接使用的。  详情 回复 发表于 2017-3-9 18:16
 
 
 

回复

654

帖子

26

TA的资源

版主

15
 
李炳1991 发表于 2017-3-9 13:19
是激活了过后其他自己写的软件也可以用 还是只有激活的软件才可以用了 也就是请问激活的是控制板的固件还 ...

激活的是板子上的固件,只要激活了板子,任何APP都可以直接使用的。
个人签名QQ:252669569
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表