色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于HMI-Board的智能宿舍空調管理系統設計案例

冬至子 ? 來源:qianmo ? 作者:qianmo ? 2023-07-31 14:57 ? 次閱讀

概述

為解決寢室空調總是忘關的問題,基于HMI-Board設計了一款智能空調管理器,可通過onenet指令下發實現遠程關閉空調。

設計思路

HMI-Board使用板載RW-007WiFi模塊,通過MQTT協議連接Onenet平臺,上報當前狀態信息,接收并解析Onenet平臺的下發指令。客戶端進入Onenet云平臺,可查閱HMI-Board上報數據流,也可通過MQTT指令下發,遠程控制空調和其他設備。

開發環境

  • RT-Thread Studio
  • RA Smart Configurator
  • HMI-Board開發板
    設計過程
    本次設計的主要功能可分為兩個部分。

1.紅外數據的編解碼:

為獲取紅外指令的編碼數據并解析,臨時自制了一款示波器,通過該示波器采集了如下波形數據:

1.jpg

通過該波形數據,分析遙控器紅外編碼協議,并通過紅外發射管將紅外遙控數據復現。

最初使用的正點原子的F407開發板,搭配RT-Thread Studio的infrared軟件包進行紅外遙控數據的復現工作,通過修改NEC相關代碼,使之適配RTT的HWTIMER和PWM設備驅動框架。并最終調試通過。

在移植到HMI-Board開發板時,發現Renesas的底層設備驅動代碼與RTT設備驅動框架的對接工作任務量有點兒大。時間有限,為盡快完成設計,使用了Renesas的PWM的底層驅動函數搭配阻塞延時的方式,最終實現紅外數據的復現。

2.Onenet下發指令的接收與解析

Onenet下發指令的接收,使用了RTT提供的命令接受回調函數”onenet_set_cmd_rsp_cb”,在該函數內通過查詢的方式將接收的字符數據與本地指令庫進行比對,并執行相應操作。

工程代碼

上電自動連接網絡

#define WLAN_SSID "test_ssid"
#define WLAN_PASSWORD "12345678"
rt_wlan_connect(WLAN_SSID, WLAN_PASSWORD);//連接WiFi熱點
初始化MQTT,并連接Onenet平臺
onenet_mqtt_init();//MQTT初始化
onenet_upload_cycle();//開啟MQTT定時上傳
onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb);//開啟命令接收回調
紅外遙控數據編碼
//紅外發送數據裝載
static rt_size_t infrared_send(struct ir_raw_data* data, rt_size_t size)
{
rt_size_t send_size;
for (send_size = 0; send_size < size; send_size++)
{
infrared_send_buf[send_size] = (data[send_size].level<<28) + (data[send_size].us);
}
infrared_send_buf[size] = 0x5A5A5A5A;
return send_size;
}
#define CARRIER_WAVE 0xA
#define IDLE_SIGNAL 0xB
#define NO_SIGNAL 0x0
//紅外遙控數據編碼
static rt_err_t ir_decoder_write(void)
{
rt_uint32_t data_buff_1,data_buff_2;
data_buff_1 = (0x8050040A);
/* guidance code /
write_raw_data[0].level = CARRIER_WAVE;
write_raw_data[0].us = 9000;
write_raw_data[1].level = IDLE_SIGNAL;
write_raw_data[1].us = 4500;
for (rt_uint8_t index = 0; index < 64; index += 2)
{
if (((data_buff_1 << (index / 2)) & 0x80000000)) /
Logic 1 /
{
write_raw_data[2 + index].level = CARRIER_WAVE;
write_raw_data[2 + index].us = 646;
write_raw_data[2 + index + 1].level = IDLE_SIGNAL;
write_raw_data[2 + index + 1].us = 1643;
}
else /
Logic 0 /
{
write_raw_data[2 + index].level = CARRIER_WAVE;
write_raw_data[2 + index].us = 646;
write_raw_data[2 + index + 1].level = IDLE_SIGNAL;
write_raw_data[2 + index + 1].us = 516;
}
}
write_raw_data[66+0].level = CARRIER_WAVE;
write_raw_data[66+0].us = 646;
write_raw_data[66+1].level = IDLE_SIGNAL;
write_raw_data[66+1].us = 516;
write_raw_data[66+2].level = CARRIER_WAVE;
write_raw_data[66+2].us = 646;
write_raw_data[66+3].level = IDLE_SIGNAL;
write_raw_data[66+3].us = 1643;
write_raw_data[66+4].level = CARRIER_WAVE;
write_raw_data[66+4].us = 646;
write_raw_data[66+5].level = IDLE_SIGNAL;
write_raw_data[66+5].us = 516;
/
connect code /
write_raw_data[72].level = CARRIER_WAVE;
write_raw_data[72].us = 646;
write_raw_data[73].level = IDLE_SIGNAL;
write_raw_data[73].us = 20000;
data_buff_2 = (0x0004000E);
for (rt_uint8_t index = 0; index < 64; index += 2)
{
if (((data_buff_2 << (index / 2)) & 0x80000000)) /
Logic 1 /
{
write_raw_data[74 + index].level = CARRIER_WAVE;
write_raw_data[74 + index].us = 560;
write_raw_data[74 + index + 1].level = IDLE_SIGNAL;
write_raw_data[74 + index + 1].us = 1690;
}
else /
Logic 0 /
{
write_raw_data[74 + index].level = CARRIER_WAVE;
write_raw_data[74 + index].us = 560;
write_raw_data[74 + index + 1].level = IDLE_SIGNAL;
write_raw_data[74 + index + 1].us = 560;
}
}
/
epilog code /
write_raw_data[138].level = CARRIER_WAVE;
write_raw_data[138].us = 646;
write_raw_data[139].level = IDLE_SIGNAL;
write_raw_data[139].us = 43580;
infrared_send(write_raw_data, 140);
LOG_D("data_buff_1:0x8050040A data_buff_2:0x0004000En");
// rt_kprintf("data_buff_1:0x8050040A data_buff_2:0x0004000En");
// rt_thread_mdelay(200);
return RT_EOK;
}
紅外編碼數據發送
//紅外編碼數據發送
rt_err_t ir_send_data(void)
{
LOG_D("ir_send_startn");
for (rt_size_t i = 0;i<210;i++)
{
if ((infrared_send_buf[i] != 0x5A5A5A5A))/
Determine if it is a stop bit /
{
R_GPT_Stop(&g_timer2_ctrl);
if ((infrared_send_buf[i] & 0xF0000000) == 0xA0000000) /
Determine if it is a carrier signal /
{
R_GPT_Start(&g_timer2_ctrl);
}
rt_hw_us_delay(infrared_send_buf[i] & 0x0FFFFFFF);
}
else
{
R_GPT_Stop(&g_timer2_ctrl);
rt_kprintf("nir_send_ok!n");
return RT_EOK;
}
}
rt_kprintf("nir_send_error!n");
return RT_ERROR;
}
Onenet指令接收與解析
/
onenet mqtt command response callback function */
//static void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
//#define LED_PIN BSP_IO_PORT_02_PIN_09
void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
{
char res_buf[] = { "cmd is received!n" };
char my_res_buf[] = { "?????????" };//接收指令數據
LOG_D("recv data is %.*sn", recv_size, recv_data);
// LOG_D("%sn",recv_data);
// LOG_D("recv_size:%d,strlen:%dn",recv_size,strlen(recv_data));
strncpy(my_res_buf,recv_data,recv_size);
LOG_D("my_res_buf:%sn",my_res_buf);
const char *led0_on = "led0_on";
const char *led0_off = "led0_off";
const char *led1_on = "led1_on";
const char *led1_off = "led1_off";
const char *air_on = "air_on";
const char air_off = "air_off";
if(!strcmp(my_res_buf,led0_on)){rt_pin_write(0x0209, PIN_LOW);}
if(!strcmp(my_res_buf,led0_off)){rt_pin_write(0x0209, PIN_HIGH);}
if(!strcmp(my_res_buf,led1_on)){rt_pin_write(0x020A, PIN_LOW);}
if(!strcmp(my_res_buf,led1_off)){rt_pin_write(0x020A, PIN_HIGH);}
if(!strcmp(my_res_buf,air_on)){rt_pin_write(0x020A, PIN_LOW);}
if(!strcmp(my_res_buf,air_off)){ir_send_data();rt_pin_write(0x020A, PIN_LOW);}
/
user have to malloc memory for response data */
*resp_data = (uint8_t *) ONENET_MALLOC(strlen(res_buf));
strncpy((char *)*resp_data, res_buf, strlen(res_buf));
*resp_size = strlen(res_buf);
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接收機
    +關注

    關注

    8

    文章

    1184

    瀏覽量

    53572
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40303
  • 紅外編解碼
    +關注

    關注

    0

    文章

    3

    瀏覽量

    4765
  • MQTT協議
    +關注

    關注

    0

    文章

    98

    瀏覽量

    5455
  • HMI系統
    +關注

    關注

    0

    文章

    20

    瀏覽量

    1043
收藏 人收藏

    評論

    相關推薦

    HMI-Board開發板工程在添加新組件時LVGL組件會報錯的解決辦法

    在使用HMI-Board開發板開發lvgl的GUI界面設計時,可以直接在官方提供的lvgl的demo中開發,這樣就可以省去lvgl最初的繁瑣配置步驟,這里真的要感謝官方,將最繁瑣的一步幫我們省去了,可以更加專注于LVGL的開發。
    的頭像 發表于 09-13 16:17 ?1612次閱讀
    <b class='flag-5'>HMI-Board</b>開發板工程在添加新組件時LVGL組件會報錯的解決辦法

    Renesas HMI Board挑戰賽—FSP工具使用

    RT-Thread和瑞薩推出的HMI-Board上的主控芯片型號為R7FA6M3AH3CFB。
    的頭像 發表于 11-22 11:32 ?1279次閱讀
    Renesas <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>挑戰賽—FSP工具使用

    使用DAPLink在對HMI-Board進行固件燒錄,棧溢出如何解決?

    使用DAPLink在對HMI-Board進行固件燒錄時,最初使用bin固件從0x000000處進行燒錄,但是燒錄到一半發現燒錯程序就將DAPLink拔出。但是隨后再使用之前可以成功燒錄的elf/hex等文件就報了棧溢出的錯誤。
    發表于 09-27 08:29

    宿舍娘_可以調情的宿舍管理系統

    ``在其他論壇看到的一個宿舍管理系統,做得挺曖昧,很有意思,創意不錯。{:soso_e113:}亮點是語音對話,把宿舍YY成一個萌妹子來對待。``
    發表于 08-14 12:46

    【MiCOKit申請】智能宿舍學生管理系統

    申請理由:我是一名大三學生 現在的學校里邊硬件資源比較差 但堅持學習了51stn32 現在正在研究一個宿舍管理系統 我在這個項目里邊需要用到 安卓的系統 而且我們的開發板還有WiFi
    發表于 08-10 01:09

    基于DES加密算法的預付費空調管理系統設計

    針對目前空調管理性、智能化較差的問題設計了一種基于DES加密算法的預付費空調管理系統。該系統以AT89S52為主控芯片,通過RC522讀寫器
    發表于 11-23 10:49 ?1次下載
    基于DES加密算法的預付費<b class='flag-5'>空調管理</b><b class='flag-5'>系統</b>設計

    基于PLC的宿舍管理系統設計與實現

    為解決學生逃課滯留宿舍,僅靠人力難以監督的問題,文章提出一種以學生課表為中心,基于PLC的宿舍管理系統。每間宿舍配備
    發表于 05-31 10:04 ?20次下載

    限量預售|2D加速、JPEG硬解、超高性價比M4芯片,您的圖形評估利器——HMI-Board來啦!

    能力。依托于瑞薩高性能芯片 RA6M3 及 RT-Thread 軟件生態,HMI Board 不僅硬件性能強勁,同時軟件生態豐富,助力開發者快速開發出 GUI 智能硬件產品。 HMI-Boar
    的頭像 發表于 05-16 05:45 ?1371次閱讀
    限量預售|2D加速、JPEG硬解、超高性價比M4芯片,您的圖形評估利器——<b class='flag-5'>HMI-Board</b>來啦!

    聯合發布 | 2D加速、JPEG硬解、超高性價比M4芯片,您的圖形評估利器——HMI-Board來啦!

    MCU RA6M3 及RT-Thread軟件生態,HMI Board不僅硬件性能強勁,同時軟件生態豐富,助力開發者快速開發出GUI智能硬件產品。 HMI-Board搭載2M Flash
    的頭像 發表于 05-19 15:15 ?1558次閱讀
    聯合發布 | 2D加速、JPEG硬解、超高性價比M4芯片,您的圖形評估利器——<b class='flag-5'>HMI-Board</b>來啦!

    怎么解決HMI-Board在調試4bitSDHI掛載文件系統失敗的問題呢?

    這兩天在學習使用HMI-Board的SDHI功能,在掛載文件系統時遇到了開發實踐指南中提到掛載文件系統失敗的問題,根據開發實踐指南中的方法能夠解決1bit位SDHI掛載文件系統失敗的問
    的頭像 發表于 08-07 14:53 ?699次閱讀
    怎么解決<b class='flag-5'>HMI-Board</b>在調試4bitSDHI掛載文件<b class='flag-5'>系統</b>失敗的問題呢?

    瑞薩RA6M3 HMI-Board Video Demo 上手指南

    高性能芯片 RA6M3 及 RT-Thread 和 LVGL 軟件生態,HMI Board 不僅硬件性能強勁,同時軟件生態豐富,助力開發者快速開發出 GUI 智能硬件產品。 本示例開源鏈接: https
    的頭像 發表于 09-15 18:25 ?1836次閱讀
    瑞薩RA6M3 <b class='flag-5'>HMI-Board</b> Video Demo 上手指南

    【直播預告】HMI-Board Windows32

    三晚,我們有幸邀請到了本次大賽的一等獎得主,他將與我們分享他的作品——HMI-Board智能終端桌面。 直播信息 直播主題 HMI-Board?Windows32 直播時間 11月15日?2030 直播
    的頭像 發表于 11-14 18:20 ?511次閱讀
    【直播預告】<b class='flag-5'>HMI-Board</b> Windows32

    空調管溫傳感器壞了的表現有哪些

    空調管溫傳感器是用來監測空調系統的冷凝器和蒸發器的溫度的重要組件。當空調管溫傳感器出現故障時,會影響空調的運行效果,并可能導致
    的頭像 發表于 01-16 14:58 ?5615次閱讀

    空調管系統可解決的問題有哪些?

    空調管系統概覽是對全局的數據情況進行統覽,包括接入設備統計、運行時長統計、用電統計等、右側可以靈活配置,嵌入3D場景,以實際場景標注空調位置,展示具體數據 。
    的頭像 發表于 03-05 10:57 ?881次閱讀
    <b class='flag-5'>空調管</b>控<b class='flag-5'>系統</b>可解決的問題有哪些?

    HMI-Board OTA升級快速上手指南

    硬件平臺HMI-Board為RT-Thread聯合瑞薩推出的高性價比圖形評估套件,取代傳統的HMI+主控板硬件,一套硬件即可實現HMI+IoT+控制的全套能力。依托于瑞薩高性能芯片RA6M3
    的頭像 發表于 01-18 11:46 ?148次閱讀
    <b class='flag-5'>HMI-Board</b> OTA升級快速上手指南
    主站蜘蛛池模板: 久久久99精品成人片中文| 在线观看国产亚洲| 医生含着我的奶边摸边做| 久久久国产精品免费A片3D| 精品欧美小视频在线观看| 97久久国产露脸精品国产| 中文字幕成人| 亚洲国产在线2o20| 亚洲国产成人精品无码区5566| 男女亲吻摸下面吃奶视频| 国产偷国产偷亚洲高清app| 国产呻吟久久久久久久92| 久久精品中文闷骚内射| 末班车动漫无删减免费| 色欲天天婬色婬香影院| 向日葵视频app下载18岁以下勿看| 伦理在线影院伦理电影| 青青伊人网| 麻豆AV蜜桃AV久久| 欧美色妞AV重囗味视频| 老头狠狠挺进小莹体内视频| 年轻老师毛茸茸自由性| 免费国产网站| 亚洲精品无码AAAAAA片| MD传媒MD0021在线观看| 国产看午夜精品理论片| 欧美高清video mr.sexo| 暖暖高清视频免费| 亚洲区视频| 国产精品JK白丝AV网站| 国产VA精品午夜福利视频| 岛国大片在线观看免费版| 成人免费一区二区无码视频 | rio 快播| 久久99视频免费| 老熟女毛茸茸浓毛| 午夜福利试看120秒体验区| 99无人区码一码二码三| 久久频这里精品99香蕉久网址| 新金梅瓶玉蒲团性奴3| 高H短篇辣肉纯肉|