SensorTile物联网开发套件(5)——DIY相互通信

往期回顾

SensorTile物联网开发套件(1)——概述

SensorTile物联网开发套件(2)——功能展示

SensorTile物联网开发套件(3)——程序烧录与注册

SensorTile物联网开发套件(4)——DIY遥控LED

先上效果图:

图中显示的效果是,发送字符串数据给SensorTIle,SensorTIle收到后在字符串后加字符“1”发送给手机,手机收到后在字符串后加字符“2”并显示出来。

虽说SensorTIle提供各种接口函数,也提供许多的控制指令,而且也支持自己添加Feature类。但有时候我们想要更加自由些,这时候就需要两者可以相互通信,SDK提供了类似的功能叫做Debug Console,SDK-Example中实现了原数据的直接回传,这次就对这个功能做稍微的修改,主要是为了熟悉该修改哪个地方。

打开SDK工程,修改布局文件夹activity_debug_console.xml如下:

  1. <RelativeLayout 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:layout_marginBottom="@dimen/activity_vertical_margin"

  6. android:layout_marginLeft="@dimen/activity_horizontal_margin"

  7. android:layout_marginRight="@dimen/activity_horizontal_margin"

  8. android:layout_marginTop="@dimen/activity_vertical_margin"

  9. tools:context="com.st.BlueSTApp.DebugConsoleActivity">

  10. <EditText

  11. android:id="@+id/Edit_Send"

  12. android:layout_width="wrap_content"

  13. android:layout_height="wrap_content"

  14. android:layout_toLeftOf="@+id/Btn_Send"

  15. android:layout_alignParentLeft="true"/>

  16. <Button

  17. android:layout_width="wrap_content"

  18. android:layout_height="wrap_content"

  19. android:text="send"

  20. android:onClick="onClick"

  21. android:layout_alignParentRight="true"

  22. android:id="@+id/Btn_Send" />

  23. <ScrollView

  24. android:id="@+id/consoleView"

  25. android:layout_width="match_parent"

  26. android:layout_height="wrap_content"

  27. android:layout_above="@+id/inputText"

  28. android:layout_below="@+id/Btn_Send"

  29. android:layout_centerHorizontal="true">

  30. <TextView

  31. android:id="@+id/deviceConsole"

  32. android:layout_width="match_parent"

  33. android:layout_height="wrap_content"/>

  34. </ScrollView>

  35. <EditText

  36. android:id="@+id/inputText"

  37. android:layout_width="match_parent"

  38. android:layout_height="wrap_content"

  39. android:layout_alignParentBottom="true"

  40. android:layout_centerHorizontal="true"

  41. android:enabled="false"

  42. android:imeOptions="actionSend"

  43. android:inputType="text"

  44. android:labelFor="@+id/deviceConsole"

  45. android:singleLine="true"/>

  46. </RelativeLayout>

上面函数功能是添加一个按钮和一个文本编辑框控件。

然后找到DebugConsoleActivity类,声明编辑框变量:

  1. private EditText mEditSend;

在onCreat函数中绑定编辑框控件:

  1. mEditSend=(EditText) findViewById(R.id.Edit_Send);

  2. 在onCreat函数外添加按钮响应函数:

  3. public   void onClick(View view) {

  4. switch (view.getId()) {

  5. case R.id.Btn_Send:

  6. String toSend = mEditSend.getText().toString();

  7. sendMessage(toSend);

  8. break;

  9. }

  10. }

在类中找到onStdOutReceived函数,修改如下:

  1. public void onStdOutReceived(Debug debug, final String message) {

  2. appendMessage(message+'2', ConsoleType.OUTPUT);

  3. }//onStdOutReceived

APP中的代码非常简单,获取文本编辑框中的字符串然后发送给SensorTile,然后在收到的字符串后面加上字符“2”。接下来使用KEIL打开BM1工程,找到sensor_service.c文件,其中有个很长的Attribute_Modified_CB函数,该函数的1530行处,原函数如下:

  1. if(SendBackData)

  2. {

  3. Term_Update(value,data_length);

  4. }

将其修改如下:

  1. if(SendBackData) {

  2. uint8_t value[20];

  3. memcpy(value, (uint8_t*)att_data, data_length);

  4. value[data_length]='1';

  5. Term_Update(value,data_length+1);

  6. }

这是收到Debug Console数据的处理函数,原函数是直接将收到数据发送回去,将其修改为在数据后面加字符“1”后发送。好啦,程序很简单,主要是熟悉流程,为以后更加复杂的应用打好基础。

本帖APP源码:https://github.com/flyloong/BlueSTSDK/tree/V1.0.1 
本帖SensorTIle源码:https://github.com/flyloong/BlueMicrosystem1/tree/V1.0.0

(0)

相关推荐