使用不同通讯协议模组开发智能烧水壶

精准控温使用的是日本芝浦/华工高理温度传感器,感温精确达到±1%(B=3950,R=10K)。

温度检测电路图如下:

下图为英国STRIX温控器正反面照片:

无源蜂鸣器控制电路如下所示:

其中,

预留该管脚,用作后续功能扩展。

本方案设计中在触摸焊盘上加了导电泡棉,增强导电性。

导电泡棉

触摸按键

按键检测芯片

选用TS02N作为按键检测芯片。TS02N是双通道电容式传感器,具有自动灵敏度校准功能,其电源电压范围为2.5~5.5V。通过并联输出端口(OUT1和OUT2),芯片由低电平触发,可以检测触摸感知的结果。由于有了SYNC功能,两个TS02N可以同时在一个应用程序上工作。

管脚分配

TS02N使用说明

触摸焊盘P1时,P8输出低电平;同理,触摸焊盘P2时,P7输出低电平。

触摸检测电路

主控板上设有主控芯片,无线信号接收及发生装置与主控芯片集成为一体或相互独立。

主控板上设有煮沸控制开关和保温控制开关。

电源板上设有继电器,继电器包括继电器线圈和继电器开关,继电器线圈通过电源板与主控板电性连接,继电器开关与加热电路电性连接、并控制加热电路的通断。

BLE模组方案使用涂鸦BLESDK和Telink芯片平台TLSR825x进行开发,以下为搭建开发环境的步骤。

我们将在\ble_sdk_multimode\tuya_ble_app中进行智能烧水壶应用代码的编写。

将代码导入Eclipse,可以直接在Eclipse进行代码修改,也可以先使用自己熟悉的代码编辑器。

温度采集代码

初始化温度采集所用的ADC设备,再采集温度。

//初始化adc设备voidb3950_init(void){/*createadcdevice,gethandle*/temper_adc=(tuya_adc_t*)tuya_driver_find(TUYA_DRV_ADC,TUYA_ADC2);/*adc_devcfg*/TUYA_ADC_CFG(temper_adc,TUYA_ADC2,0);/*adc_devinit*/tuya_adc_init(temper_adc);}//获取温度值intcur_temper_get(){intRt=0;floatRp=100000;floatT2=273.15+25;floatBx=3950;floatKa=273.15;inttemp=0;/*CollectADdataandstoreitinadc_buffer*/tuya_adc_convert(temper_adc,&adc_buf,1);/*req_val(0-4096)-V(0-2.4)*/volt=(float)adc_buf*2.4/4096;//volt=adc_buf;Rt=(3.3-volt)*20000/volt;PR_DEBUG("Rt:%d",Rt);temp=(int)(1/(1/T2+log(Rt/Rp)/Bx)-Ka+0.5);PR_DEBUG("volt:%f",volt);returntemp;}温度显示代码

温度显示流程为每2秒采集一次温度,并将温度值上报到云端。

利用蜂鸣器报警,当测得温度高于105摄氏度时说明水壶已经没水了,此时驱动蜂鸣器响动并上报干烧状态到云端。

功能简述

智能烧水壶设备上提供煮沸、保温两个按键。

离线控制代码

为了后期的程序扩展,采用回调函数注册的方式实现按键控制。

按键驱动代码如下:

主线程代码。按键或云端触发会控制水壶处于不同的模式,此时主线程根据不同模式进行对应的处理。

实现云端控制首先要实现dp数据触发的执行函数,下面我们将实现这些执行函数

实现煮沸控制的执行函数

此执行函数需要根据下发的DP数据控制水壶的煮沸功能,开启和关闭触发后要实现的具体功能如下:

开启:

关闭

具体代码实现,需要在kettle_app.c中增加执行函数

实现设定保温温度的函数

设定保温温度的函数是通过云端设定进行触发,触发后要实现的具体功能如下:

staticvoiddp_keep_warm_set_handle(INintvalue){set_kettle_keep_warm_temper(value);//设置保温温度,注意设定保温温度不会直接触发保温report_one_dp_status(DP_TEMP_SET);//上报dp_keep_warm_set这个dp点的设定值到云端}//保温温度设置范围为45~90摄氏度voidset_kettle_keep_warm_temper(intvalue){if(44

实现保温控制的执行函数

云端可以控制界面上的保温按钮决定是否开启保温,触发后要实现的具体功能如下:

关闭:切换烧水壶的工作状态到自然模式(无操作)

staticvoiddp_keep_warm_handle(INBOOL_TbONOFF){ //保温开启,水质模式为自来水模式,烧水壶进入保温1模式(先煮沸再保温)if(bONOFF==TRUE&&(get_water_type()==tap_water)){set_kettle_work_status(keep_warm_mode1);set_dp_keep_warm_switch(TRUE);set_dp_boil_value(FALSE);PR_DEBUG("keep_warm_mode1");//保温开启,水质模式为纯净水模式,烧水壶进入保温2模式(直接保温)}elseif(bONOFF==TRUE&&(get_water_type()==clear_water)){set_kettle_work_status(keep_warm_mode2);set_dp_keep_warm_switch(TRUE);set_dp_boil_value(FALSE);PR_DEBUG("keep_warm_mode2");}else{//关闭保温set_kettle_work_status(nature);set_dp_keep_warm_switch(FALSE);PR_DEBUG("closekeepwarm");}//上报dp数据report_one_dp_status(DP_KEEP_WARM);report_one_dp_status(DP_BOIL);}此时保温设置的执行函数已实现。

实现水质选择设定函数

云端可以控制水质选择,触发后要实现的具体功能如下:

具体代码实现,需要在kettle_app.c中增加执行函数。

voiddp_water_type_handle(intvalue){if(value==tap_water||value==clear_water){//设置水质模式tuya_hal_mutex_lock(mutex);kettle_work_information.water_mode=value;water_type_s.value=value;tuya_hal_mutex_unlock(mutex);//此时水壶处于自来水保温状态,且此时云端控制水质模式切换为纯净水,水壶状态切换到纯净水保温模式if(get_kettle_work_status()==keep_warm_mode1&&get_water_type()==clear_water){set_kettle_work_status(keep_warm_mode2);//此时水壶处于纯净水保温状态,且此时云端控制水质模式切换为自来水,水壶状态切换到自来水保温模式}elseif(get_kettle_work_status()==keep_warm_mode2&&get_water_type()==tap_water){set_kettle_work_status(keep_warm_mode1);}PR_DEBUG("waterchoose:%d",value);report_one_dp_status(DP_WATER_TYPE);}}//获取当前水壶的工作状态intget_kettle_work_status(){returnkettle_work_information.status;}//获取当前的水质模式intget_water_type(){returnkettle_work_information.water_mode;}此时水质选择设定函数已实现。

云端定时煮沸功能

云定时煮沸开启:

云端控制代码实现

上面已经实现了相应的执行函数,下面我们将实现App下发DP数据控制设备的功能。

云端控制代码实现:

指示灯驱动控制

指示灯作为烧水壶状态指示和配网指示,驱动形式为电平驱动,基本设置如下:

代码实现:

继电器的通断用于控制加热电路,驱动形式为电平驱动,基本设置如下:

#defineP_RELAY GPIO_PD3/*P14*//*继电器端口初始化*/voidrelay_init(void){ gpio_set_func(P_RELAY,AS_GPIO); gpio_set_output_en(P_RELAY,1); gpio_write(P_RELAY,0);}/*继电器通断控制*/voidset_relay(boolb_on_off){staticbools_last_status=0;if(s_last_status!=b_on_off){if(b_on_off==ON){ gpio_write(P_RELAY,1);}else{ gpio_write(P_RELAY,0);}s_last_status=b_on_off;}}蜂鸣器驱动控制

蜂鸣器作为按键提示音和故障报警提示音,驱动形式为方波信号驱动,基本设置如下:

为了后期的程序扩展,采用注册回调函数的方式实现按键检测与处理

a.按键注册信息及初始化

用户可注册内容设定如下:

#defineKEY1_CODE 0x01#defineKEY2_CODE 0x02#defineKEY_PRESS_SHORT_TIME50然后编写定时循环的按键状态扫描函数和按键处理函数:

a.温度采集

NTC端口设置如下:

a.初始化函数与主循环函数的编写

每2秒更新一次温度值,如果发生温度变化,则将数据更新上报至云端,并进行一次故障检测;如果故障状态变化,更新故障信息至云端:

按键信息注册如下:

根据功能设定,我们将烧水壶的工作模式拆分为以下4个模式:

要实现和云端进行数据交互,首先要使设备配网。根据功能简述中介绍可知,我们需要先进行以下配网检测处理:

下面我们介绍配网状态检测与处理的实现过程。

a.在上电初始化时,先对蓝牙连接状态进行判断和标记:

#defineTIME_ALLOW_CONNECT(3*60*1000)/*3min*/staticuint32_tsg_ble_tm=0;FLAG_BITg_kettle_flag;#defineF_BLE_BONDINGg_kettle_flag.bit0#defineF_WAIT_BLE_CONNg_kettle_flag.bit1/*等待蓝牙连接*/staticvoidwait_ble_connect(void){ /*3分钟定时*/if(!clock_time_exceed(sg_ble_tm,TIME_ALLOW_CONNECT*1000)){return;}F_WAIT_BLE_CONN=CLR;/*关闭等待连接标志*/set_led_green_mode(LED_MODE_FIX);/*绿灯停止闪烁*/bls_ll_setAdvEnable(0);/*关闭蓝牙广播*/}/*更新蓝牙状态*/staticvoidupdate_ble_status(void){if(F_BLE_BONDING==CLR){ /*未绑定?*/if(F_WAIT_BLE_CONN==SET){ /*等待连接标志打开?*/wait_ble_connect(); /*等待蓝牙连接*/}}}c.在蓝牙连接状态发生改变时做如下处理:

/*蓝牙连接状态改变时的处理函数*/voidtuya_app_kettle_ble_connect_status_change_handler(tuya_ble_connect_status_tstatus){if(status==BONDING_CONN){/*蓝牙已连接?*/report_all_dp_data();/*上报所有DP数据,保证APP显示与设备状态一致*/if(F_WAIT_BLE_CONN==SET){/*等待连接标志打开?*/F_BLE_BONDING=SET;/*标记为已绑定*/F_WAIT_BLE_CONN=CLR;/*停止配网等待*/set_led_green_mode(LED_MODE_FIX);/*停止闪烁*/}}if(status==UNBONDING_UNCONN){/*设备被解绑?*/F_BLE_BONDING=CLR;/*标记为未绑定*/bls_ll_setAdvEnable(0);/*停止蓝牙广播*/}}/*处理BLESDK消息的callback函数[tuya_ble_app_demo.c]*/staticvoidtuya_cb_handler(tuya_ble_cb_evt_param_t*event){ ...caseTUYA_BLE_CB_EVT_CONNECTE_STATUS: /*在状态改变事件发生时调用*/tuya_app_kettle_ble_connect_status_change_handler(event->connect_status);TUYA_APP_LOG_INFO("receivedtuyableconncetstatusupdateevent,currentconnectstatus=%d",event->connect_status);break;...}d.保温键长按5秒时,重新尝试等待配网的执行函数如下:

在设备配网后,就可以使用APP来控制设备和查看设备上报的数据,下面是数据上报的实现过程。

在App上改变设备状态时,会从云端下发控制数据,设备在接收到数据后进行如下处理,即可实现云端任务。

预约功能可通过云定时功能实现,即在涂鸦IoT平台上产品开发的功能定义页中,打开高级云功能的云定时功能:

至此智能恒温烧水壶就完成了,它可以APP远程控制,按键控制。具有水质模式切换,保温温度设定,定时烧水,故障告警等功能。在这款智能烧水壶的基础上还有很多功能可以深入开发,使体验更加人性化,智能化。同时您可以基于涂鸦IoT平台丰富它的功能,也可以更加方便的搭建更多智能产品原型,加速智能产品的开发流程。

THE END
1.解析王者荣耀触摸器下载:提升游戏体验的新利器社会新闻### 一、什么是王者荣耀触摸器? 王者荣耀触摸器是一款专为《王者荣耀》设计的游戏辅助工具,旨在提升玩家的操作精度和游戏体验。该工具通过优化触控灵敏度、设置自定义按键、提供宏操作等功能,使玩家在游戏中能够更加轻松自如地进行操作,尤其是在激烈的对战中,能够有效提升胜率。 ### 二、触摸器的主要功能 1. **http://ynjirun.com/nmbdbl=83163791
2.正版软件管理与服务平台(四川传媒学院)而且关于这一功能的配置选项必须要启用这一功能后才能进行设置。 9、保存退出 待一切设置完毕后,点击窗口下方的“确定”按钮或“应用”按钮。“确定”按钮将进行保存后并退出,而“应用”按钮只会进行保存,而不会退出。 以上就是快速解决win10笔记本的触摸板怎么激活的办法了,有遇到此类情况或者是不懂的如何解决的http://ms.scmc.edu.cn/help?page=6
3.触控精灵激活工具管家官方下载触控精灵激活工具官网下载触控精灵激活工具官方版是一款非常优秀的软件,触控精灵激活工具官方版界面美观,功能实用,可以在电脑端免root激活触控精灵app功能,并且能够一键添加手机本地游戏,使用起来简单便捷。 软件介绍 触控精灵激活工具官方版能够在电脑端免root激活触控精灵app功能,触控精灵激活后才能发挥真正的功能,可以一键添加手机本地游戏,直接支https://www.huajunxiazai.com/soft/271918.html
4.常见问题·国产操作系统麒麟操作系统——麒麟软件官方网站③ 然后使用绑定了“激活管理员”的微信号,扫描机器上的“激活二维码”,并且将正式授权书上的验证码填写进去即可获取到对应的激活码。 ④ 将获取到的激活码填写进系统里面,点击“激活/延长服务”即可2) 第三方软件怎么激活(永中office、wps、360浏览器)? A: 请https://www.kylinos.cn/support/problem
5.如何设置和自定义Steam控制器按键垫:这四个方向将绑定到特定的按钮,组合或激活器。适合通过库存进行选择。 操纵杆移动:标准操纵杆操作。可以将一个额外的按钮绑定到操纵杆的外环,但不能绑定到触摸板。 游戏杆鼠标:操纵杆或触摸板仅使用控制台方式的方向输入来控制屏幕上的鼠标光标。 http://zh-cn.agwebrunner.com/1876-how-to-set-up-and-customize-the-steam-controller
6.使用CSS3在触屏上为按钮实现激活效果资源然而,在触屏设备上,尤其是Android的WebView中,这些伪类的行为可能与在桌面浏览器上的表现不同。本文将深入探讨如何利用CSS3在触屏上为按钮实现完美的激活效果。 `:hover`伪类在触屏设备上存在一些问题。在Android的WebView中,由于WebKit同时处理touch和mouse事件,当用户手指触摸到按钮时,`:hover`状态会被正确触发。https://download.csdn.net/download/weixin_38737213/13585344
7.带触摸按键和离手检测功能的智能方向盘方案亮点:控制器基于内部CapSense模块进行电容信号的采集并处理,获得相应方向盘触摸按键和方向盘离手检测的激活状态与信号量。触摸按键基于压力检测以防止出现误触发,并在正确的触摸按键触发情况下,进行振动反馈。本方案可实现单点触摸,压力感应,上下左右滑动以及振动反馈。 方案详情: 控制器基于https://www.infineon.com/cms/jp/partners/partner-ecosystems/greater-china/autoeco/solution/automotive-body-convenience/solution_182/