【Funpack第四期】Silicon蓝牙开发板,可应用于智能家居等各类的消费电子产品上。
有幸参加这次硬禾学堂Funpack第四期的活动,这款Thunderboard EFR32BG22开发板资源很丰富,值得推荐,作为学习蓝牙5.2使用非常适合,并且开源的程序也非常完善,也可以学习到大公司使用的架构。
标签
单片机
蓝牙
低功耗
EFR32
智能家居
micah
更新2021-01-13
678

把这次活动的心得放前面吧:

在这次活动中认识了很多大佬,其中也有还在读书的高校学生等,感觉个个都比我厉害,可能我唯一比他们厉害的地方只要长肉了吧 :-(

这次参加Funpack的活动让我意识到硬禾学堂是实实在在注重技术的传播和教学的,也通过这次活动让我知道了硬禾学堂这么优秀的一个平台,相信我后期也会多多参加硬禾学堂的活动的,也请大家多多支持硬禾学堂。

参加这次活动整体感觉不错,从digikey买东西的感觉也不错,但唯一感觉直播的表现不太好,感觉直播太短,没有实际的Demo进行演示。

 

 

正文:

----------------------------------------------------

 

利用该开发板卡的源程序和安卓APP源代码的基础上进行了修改,功能除了采集主要的温度、湿度、光照强度、紫外线、磁场这些数据外,还添加了一个温度的上下阈值的设定,当温度超过设定的阈值范围外则灯亮。

 

首先看下设置阈值界面的布局样式

FmQ03Z--CRIJfN-XVCHO_5R38qHZ

下列代码为activity_settings.xml文件内添加的线性布局代码

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="@dimen/material_listitem_height"
    android:background="@color/white">
    <RelativeLayout
        style="@style/block"
        android:layout_centerVertical="true"
        android:orientation="horizontal">
        <TextView
            android:layout_marginStart="@dimen/space_S"
            style="@style/tb_robo_regular_14dp_grey"
            android:layout_marginTop="@dimen/space_S"
            android:text="@string/settings_upper_temperature_limit" />
        <EditText
            android:id="@+id/temperature_upper"
            android:layout_marginEnd="75dp"
            android:layout_alignParentEnd="true"
            android:inputType="number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </RelativeLayout>

</RelativeLayout>

<!-- Model lower -->
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="@dimen/material_listitem_height"
    android:background="@color/white">
    <RelativeLayout
        style="@style/block"
        android:layout_centerVertical="true"
        android:orientation="horizontal">
        <TextView
            android:layout_marginStart="@dimen/space_S"
            style="@style/tb_robo_regular_14dp_grey"
            android:layout_marginTop="@dimen/space_S"
            android:text="@string/settings_lower_temperature_limit" />
        <EditText
            android:id="@+id/temperature_lower"
            android:layout_marginEnd="75dp"
            android:layout_alignParentEnd="true"
            android:inputType="number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </RelativeLayout>
</RelativeLayout>

 

下图为展示传感器数据的界面,和原来界面相比并没有坐视觉上的改动,但是对其背后的控制代码做了一些改动,主要是订阅温度值,和判断温度是否超过了所设定的阈值,从而进行动作

FuvdC2nqu0eRFuj3yKOoe4Dh00I0

下列代码存在settingsActivity.java文件内,主要是用来做设定温度阈值和记忆阈值的作用,可以具体看代码注释

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    ButterKnife.bind(this);
    component().inject(this);
    setupToolbar();
    initHelpDialog();
    //设置温度上下限数值
    editUpper.setText(String.valueOf(DemoEnvironmentActivity.upper));
    editLower.setText(String.valueOf(DemoEnvironmentActivity.lower));
}

@Override
protected void onStop() {
    super.onStop();
    //保存温度输入上下限数值
    DemoEnvironmentActivity.upper = Integer.parseInt(editUpper.getText().toString());
    DemoEnvironmentActivity.lower = Integer.parseInt(editLower.getText().toString());
}

 

下列代码存在于DemoEnvironmentActivity.java文件中,该关键代码主要是创建变量,以及设置我们的温度阈值的初始化值,更重要的是用来判断温度和控制LED灯。

@Override
public String getToolbarString() {
    return getString(R.string.demo_environment);
}
//上下限变量,及初始化值
public static int upper = 20;
public static int lower = 0;

//标志位,防止反复一直控制LED灯的亮灭
private boolean isTurn = false;

@Override
public void setTemperature(float temperature, int temperatureType) {

    Log.d(TAG, "setTemperature: " + temperature);

    //控制LED灯的亮灭
    if (temperature>=lower&&temperature<=upper&&isTurn){
        presenter.bleManager.ledAction(0);  //灭
        isTurn = false;
    }else if ((temperature<lower||temperature>upper)&&!isTurn){
        presenter.bleManager.ledAction(1);  //亮
        isTurn = true;
    }

    if (temperatureControl.isEnabled()) {
        temperatureControl.setTemperature(temperature, temperatureType);
    }
}

 

 

 

 

 

 

附件下载
Funpack第4期可编译下载的代码.txt
因为源代码文件太大,上传不了本平台,所以该附件内有源码的百度网盘下载链接,源代码为Android Studio工程文件
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号