91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用語(yǔ)音指令控制串口輸出

安信可科技 ? 來(lái)源:安信可科技 ? 2025-09-25 15:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡(jiǎn)介

在上兩篇文章中, 我們實(shí)現(xiàn)了GPIO輸出, 和PWM輸出(組件介紹在前文中已經(jīng)介紹過(guò)),在本章節(jié)我們將繼續(xù)進(jìn)行使用語(yǔ)音指令控制串口輸出。

配置Example默認(rèn)串口數(shù)據(jù)輸出


1、首先修改

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_config.h

中的USER_RUN_DEMO_SELECT為USER_DEMO_UART

8e0833a8-871e-11f0-a18e-92fbcf53809c.png

這樣默認(rèn)運(yùn)行的程序就是

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/src/examples/hb_uart.c

代碼如下所示

#include"user_uart.h"
#include"user_event.h"
#include"user_player.h"
#include"user_config.h"
#defineTAG"hb_uart_voice"
staticuni_pthread_tg_uart_thread_id =0;
staticboolg_uart_thread_running =false;
// 串口發(fā)送線程函數(shù)
staticvoid_uart_send_task(void*args) {
charbuf[6] = {1,2,3,4,5,6};
intret;
 g_uart_thread_running =true;
while(g_uart_thread_running) {
 LOGT(TAG,"UART send done, ret=%d", ret);
 uni_msleep(2000);// 每隔2秒發(fā)送一次
 }
}
// 創(chuàng)建發(fā)送線程
staticResult _create_uart_thread(void) {
if(g_uart_thread_running) {
 returnE_OK;
 }
 thread_param param;
uni_memset(¶m,0,sizeof(param));
 param.stack_size = STACK_SMALL_SIZE;
 param.priority = OS_PRIORITY_LOW;
uni_strncpy(param.task_name,"uart_voice",sizeof(param.task_name) -1);
if(0!=uni_pthread_create(&g_uart_thread_id, ¶m, _uart_send_task,NULL)) {
 returnE_FAILED;
 }
uni_pthread_detach(g_uart_thread_id); // 自動(dòng)資源回收
returnE_OK;
}
// 停止發(fā)送線程
staticvoid_stop_uart_thread(void) {
if(!g_uart_thread_running)return;
 g_uart_thread_running =false;
if(g_uart_thread_id !=0) {
 uni_pthread_destroy(g_uart_thread_id);
  g_uart_thread_id =0;
 }
}
// 語(yǔ)音喚醒命令回調(diào)
staticvoid_on_wakeup_cmd_cb(USER_EVENT_TYPE event,user_event_context_t*context) {
if(context ==NULL)return;
event_goto_awakend_t*awake = &context->goto_awakend;
if(strcmp(awake->cmd,"wakeup_uni") ==0) {
  _create_uart_thread(); // 啟動(dòng)串口線程
 user_player_reply_list_random(awake->reply_files); // 播放語(yǔ)音回復(fù)
 }
}
// 自定義設(shè)置命令回調(diào)
staticvoid_custom_setting_cb(USER_EVENT_TYPE event,user_event_context_t*context) {
if(context ==NULL)return;
event_custom_setting_t*setting = &context->custom_setting;
if(strcmp(setting->cmd,"TurnOn") ==0) {
  _stop_uart_thread(); // 停止串口線程
 user_player_reply_list_random(setting->reply_files); // 播放語(yǔ)音回復(fù)
 }
}
// 注冊(cè)語(yǔ)音事件回調(diào)
staticvoid_register_event_callback(void) {
user_event_subscribe_event(USER_GOTO_AWAKENED, _on_wakeup_cmd_cb);
user_event_subscribe_event(USER_CUSTOM_SETTING, _custom_setting_cb);
}
// 主入口
inthb_user_uart_voice_control(void){
if(0!=user_uart_init(NULL)) {
 LOGE(TAG,"UART init failed");
 return-1;
 }
 _register_event_callback();
return0;
}

其默認(rèn)行為為創(chuàng)建線程定時(shí)發(fā)送數(shù)據(jù), 然后使用LOG打印。但是它沒(méi)辦法調(diào)試。 因此我們做一點(diǎn)簡(jiǎn)單的修改, 當(dāng)接受的數(shù)據(jù)的時(shí)候再發(fā)送出去。

// 串口發(fā)送線程函數(shù)
staticvoid_uart_send_task(void*args) {
charbuf[6] = {1,2,3,4,5,6};
intret;
 g_uart_thread_running =true;
while(g_uart_thread_running) {
  LOGT(TAG,"Voice triggered UART send [1, 2, 3, 4, 5, 6]");
  ret = user_uart_send(buf,sizeof(buf));
  LOGT(TAG,"UART send done, ret=%d", ret);
  uni_msleep(2000);// 每隔2秒發(fā)送一次
 }
}

2、編譯和燒錄

8e22f580-871e-11f0-a18e-92fbcf53809c.png



實(shí)驗(yàn)現(xiàn)象:串口以9600的波特率持續(xù)接收到數(shù)據(jù) 01,02,03,04,05,06 和程序中的數(shù)據(jù)對(duì)應(yīng),正確無(wú)誤。

8e358614-871e-11f0-a18e-92fbcf53809c.png




發(fā)送測(cè)試:之后嘗試向其發(fā)送數(shù)據(jù), 查看VC-02是否能正常轉(zhuǎn)發(fā)回來(lái)(關(guān)閉HEX顯示, 發(fā)送的數(shù)據(jù)和接受的一致)。

8e56e714-871e-11f0-a18e-92fbcf53809c.png



使用語(yǔ)音命令控制串口發(fā)送數(shù)據(jù)


1、創(chuàng)建文件

hb_user_uart_testing.c在/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/src/examples下

#include"user_uart.h"
#include"user_event.h"
#include"user_player.h"
#include"user_config.h"
#defineTAG"hb_uart_voice"
staticuni_pthread_tg_uart_thread_id =0;
staticboolg_uart_thread_running =false;
// 串口發(fā)送線程函數(shù)
staticvoid_uart_send_task(void*args) {
charbuf[6] = {1,2,3,4,5,6};
intret;
 g_uart_thread_running =true;
while(g_uart_thread_running) {
 LOGT(TAG,"Voice triggered UART send [1, 2, 3, 4, 5, 6]");
  ret =user_uart_send(buf,sizeof(buf));
 LOGT(TAG,"UART send done, ret=%d", ret);
 uni_msleep(2000);// 每隔2秒發(fā)送一次
 }
}
// 創(chuàng)建發(fā)送線程
staticResult _create_uart_thread(void) {
if(g_uart_thread_running) {
 returnE_OK;
 }
 thread_param param;
uni_memset(¶m,0,sizeof(param));
 param.stack_size = STACK_SMALL_SIZE;
 param.priority = OS_PRIORITY_LOW;
uni_strncpy(param.task_name,"uart_voice",sizeof(param.task_name) -1);
if(0!=uni_pthread_create(&g_uart_thread_id, ¶m, _uart_send_task,NULL)) {
 returnE_FAILED;
 }
uni_pthread_detach(g_uart_thread_id); // 自動(dòng)資源回收
returnE_OK;
}
// 停止發(fā)送線程
staticvoid_stop_uart_thread(void) {
if(!g_uart_thread_running)return;
 g_uart_thread_running =false;
if(g_uart_thread_id !=0) {
 uni_pthread_destroy(g_uart_thread_id);
  g_uart_thread_id =0;
 }
}
// 語(yǔ)音喚醒命令回調(diào)
staticvoid_on_wakeup_cmd_cb(USER_EVENT_TYPE event,user_event_context_t*context) {
if(context ==NULL)return;
event_goto_awakend_t*awake = &context->goto_awakend;
if(strcmp(awake->cmd,"wakeup_uni") ==0) {
  _create_uart_thread(); // 啟動(dòng)串口線程
 user_player_reply_list_random(awake->reply_files); // 播放語(yǔ)音回復(fù)
 }
}
// 自定義設(shè)置命令回調(diào)
staticvoid_custom_setting_cb(USER_EVENT_TYPE event,user_event_context_t*context) {
if(context ==NULL)return;
event_custom_setting_t*setting = &context->custom_setting;
if(strcmp(setting->cmd,"TurnOn") ==0) {
  _stop_uart_thread(); // 停止串口線程
 user_player_reply_list_random(setting->reply_files); // 播放語(yǔ)音回復(fù)
 }
}
// 注冊(cè)語(yǔ)音事件回調(diào)
staticvoid_register_event_callback(void) {
user_event_subscribe_event(USER_GOTO_AWAKENED, _on_wakeup_cmd_cb);
user_event_subscribe_event(USER_CUSTOM_SETTING, _custom_setting_cb);
}
// 主入口
inthb_user_uart_voice_control(void){
if(0!=user_uart_init(NULL)) {
 LOGE(TAG,"UART init failed");
 return-1;
 }
 _register_event_callback();
return0;
}

輸入上述代碼, 其主要的業(yè)務(wù)邏輯就是通過(guò)喚醒命令來(lái)觸發(fā)串口的定時(shí)輸出,然后通過(guò)TrunOn的命令來(lái)關(guān)閉串口輸出的線程。

2、添加編譯支持在

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/build/user/src/examples下的subdir.mk添加對(duì)當(dāng)前編譯文件的引用。

8e6c0e3c-871e-11f0-a18e-92fbcf53809c.png



3、修改

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_config.h文件, 增加對(duì)應(yīng)的demo宏支持。

8eb93482-871e-11f0-a18e-92fbcf53809c.png



4、修改

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/src/user_main.c,增加對(duì)上述自定義宏的支持。

8ed0000e-871e-11f0-a18e-92fbcf53809c.png



5-、編譯并且燒錄固件。

8e22f580-871e-11f0-a18e-92fbcf53809c.png



實(shí)驗(yàn)現(xiàn)象

燒錄完成之后, 串口默認(rèn)不輸出任何數(shù)據(jù)。

8ef950d0-871e-11f0-a18e-92fbcf53809c.png



當(dāng)識(shí)別到語(yǔ)音命令“你好小美” 之后將開(kāi)始打印01 02 03 04 05。

8f126b6a-871e-11f0-a18e-92fbcf53809c.png



當(dāng)識(shí)別到語(yǔ)音命令“打開(kāi)燈光” 的時(shí)候?qū)h除串口發(fā)送進(jìn)程, 串口停止輸出。

8f2c93fa-871e-11f0-a18e-92fbcf53809c.png



如上圖所示, 此時(shí)的串口處于打開(kāi)狀態(tài),但是沒(méi)有輸出數(shù)據(jù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5869

    瀏覽量

    225591
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1328

    瀏覽量

    56218
  • 串口輸出
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    7822

原文標(biāo)題:【離線語(yǔ)音】安信可VC-01/02二次開(kāi)發(fā)篇: 串口輸出

文章出處:【微信號(hào):安信可科技,微信公眾號(hào):安信可科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是語(yǔ)音芯片IC的串口通訊協(xié)議標(biāo)準(zhǔn)(AT)指令?

    的一種通信協(xié)議,它為語(yǔ)音芯片的智能交互與控制提供了堅(jiān)實(shí)的橋梁。一、串口通訊協(xié)議標(biāo)準(zhǔn)(AT)指令概述串口通訊協(xié)議標(biāo)準(zhǔn)(AT)
    的頭像 發(fā)表于 12-05 08:44 ?2226次閱讀
    什么是<b class='flag-5'>語(yǔ)音</b>芯片IC的<b class='flag-5'>串口</b>通訊協(xié)議標(biāo)準(zhǔn)(AT)<b class='flag-5'>指令</b>?

    BC009本地智能語(yǔ)音識(shí)別模塊

    BC009 本地智能語(yǔ)音識(shí)別模塊 1、產(chǎn)品特征2 1 米內(nèi)識(shí)別率 90%以上2 可以通過(guò)語(yǔ)音指令控制輸出2 可以通過(guò)單片機(jī)串口
    發(fā)表于 10-26 14:49

    【大聯(lián)大品佳 Nuvoton ISD9160語(yǔ)音識(shí)別試用體驗(yàn)】-深圳志芯

    測(cè)試使用語(yǔ)音識(shí)別開(kāi)發(fā)板,經(jīng)過(guò)測(cè)試的11條語(yǔ)音指令基本識(shí)別準(zhǔn)確,有正確反饋,揚(yáng)聲器會(huì)播報(bào)指令ID號(hào)。同時(shí)也發(fā)現(xiàn)一些問(wèn)題:1.語(yǔ)音指令無(wú)法自由修改,必須通過(guò)開(kāi)發(fā)板公司進(jìn)行修改;2.發(fā)出
    發(fā)表于 08-21 20:12

    【大聯(lián)大品佳 Nuvoton ISD9160語(yǔ)音識(shí)別試用體驗(yàn)】

    測(cè)試使用語(yǔ)音識(shí)別開(kāi)發(fā)板,經(jīng)過(guò)測(cè)試的11條語(yǔ)音指令基本識(shí)別準(zhǔn)確,有正確反饋,揚(yáng)聲器會(huì)播報(bào)指令ID號(hào)。同時(shí)也發(fā)現(xiàn)一些問(wèn)題:1.語(yǔ)音指令無(wú)法自由修改,必須通過(guò)開(kāi)發(fā)板公司進(jìn)行修改;2.發(fā)出
    發(fā)表于 10-12 15:38

    為何要開(kāi)發(fā)一套無(wú)線控文字語(yǔ)音指令系統(tǒng)

    無(wú)線控文字語(yǔ)音指令系統(tǒng)背景硬件控制指令指令說(shuō)明功能效果背景因一項(xiàng)目需求:根據(jù)不同情形,發(fā)出相應(yīng)的文字語(yǔ)音,且需要遠(yuǎn)程控制
    發(fā)表于 01-07 06:38

    基于n元語(yǔ)法模型的領(lǐng)域語(yǔ)音指令識(shí)別

    本文采用一種音素匹配法結(jié)合改進(jìn)了的n元語(yǔ)法模型的方法,對(duì)語(yǔ)音指令進(jìn)行理解。指令按照結(jié)構(gòu)劃分類(lèi)別,通過(guò)提取其中關(guān)鍵要素來(lái)獲取指令語(yǔ)義。音素匹配法可以提取指令中部分或
    發(fā)表于 02-23 14:27 ?11次下載

    使用語(yǔ)音命令控制LED開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《使用語(yǔ)音命令控制LED開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 10-27 16:35 ?1次下載
    使<b class='flag-5'>用語(yǔ)音</b>命令<b class='flag-5'>控制</b>LED開(kāi)源分享

    實(shí)現(xiàn)使用語(yǔ)音控制機(jī)械臂運(yùn)動(dòng)

    使用語(yǔ)音控制myCobot機(jī)械臂運(yùn)動(dòng)
    的頭像 發(fā)表于 03-17 18:13 ?2214次閱讀
    實(shí)現(xiàn)使<b class='flag-5'>用語(yǔ)音</b><b class='flag-5'>控制</b>機(jī)械臂運(yùn)動(dòng)

    用語(yǔ)音控制語(yǔ)音命令門(mén)鎖制作

    電子發(fā)燒友網(wǎng)站提供《用語(yǔ)音控制語(yǔ)音命令門(mén)鎖制作.zip》資料免費(fèi)下載
    發(fā)表于 06-12 10:48 ?1次下載
    <b class='flag-5'>用語(yǔ)音</b><b class='flag-5'>控制</b>的<b class='flag-5'>語(yǔ)音</b>命令門(mén)鎖制作

    智能語(yǔ)音窗簾:離線語(yǔ)音控制技術(shù)的優(yōu)勢(shì)與應(yīng)用

    離線語(yǔ)音控制技術(shù)是無(wú)需依賴(lài)互聯(lián)網(wǎng)的語(yǔ)音控制技術(shù),用戶(hù)只需通過(guò)語(yǔ)音指令便可直接控制窗簾的開(kāi)關(guān)等功能
    的頭像 發(fā)表于 07-07 16:02 ?2150次閱讀
    智能<b class='flag-5'>語(yǔ)音</b>窗簾:離線<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>技術(shù)的優(yōu)勢(shì)與應(yīng)用

    語(yǔ)音控制空調(diào)伴侶插座—離線語(yǔ)音模塊的智能家居新篇章

    語(yǔ)音控制空調(diào)伴侶插座可以通過(guò)與空調(diào)的連接,讓用戶(hù)可以用語(yǔ)音指令調(diào)整空調(diào)溫度,無(wú)需手動(dòng)操作空調(diào)。
    的頭像 發(fā)表于 08-15 14:23 ?2150次閱讀
    <b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>空調(diào)伴侶插座—離線<b class='flag-5'>語(yǔ)音</b>模塊的智能家居新篇章

    塔式風(fēng)扇的離線語(yǔ)音控制升級(jí)之路

    隨著離線語(yǔ)音控制技術(shù)的應(yīng)用,用戶(hù)只需通過(guò)簡(jiǎn)單的語(yǔ)音指令即可控制塔式風(fēng)扇
    的頭像 發(fā)表于 09-06 11:43 ?1207次閱讀
    塔式風(fēng)扇的離線<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>升級(jí)之路

    智能沙發(fā)語(yǔ)音控制方案

    智能沙發(fā)語(yǔ)音控制方案是指通過(guò)在沙發(fā)內(nèi)部嵌入離線語(yǔ)音模塊,使沙發(fā)能夠根據(jù)用戶(hù)的語(yǔ)音指令進(jìn)行相應(yīng)的操作和調(diào)控
    的頭像 發(fā)表于 09-19 16:42 ?2329次閱讀
    智能沙發(fā)<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>方案

    KT148A語(yǔ)音芯片的下載用的是串口,測(cè)試可以直接串口發(fā)指令控制嗎?

      KT148A語(yǔ)音芯片的下載用的是串口,那我實(shí)際測(cè)試是不是可以直接串口發(fā)指令測(cè)試控制?就不用單獨(dú)寫(xiě)程序去模擬一線
    的頭像 發(fā)表于 11-14 14:21 ?1581次閱讀
    KT148A<b class='flag-5'>語(yǔ)音</b>芯片的下載用的是<b class='flag-5'>串口</b>,測(cè)試可以直接<b class='flag-5'>串口</b>發(fā)<b class='flag-5'>指令</b><b class='flag-5'>控制</b>嗎?

    語(yǔ)音控制模塊工作原理

    ,才能夠發(fā)出正確的指令。 語(yǔ)音芯片控制模塊是實(shí)現(xiàn) “語(yǔ)音指令 - 設(shè)備響應(yīng)” 的核心組件,其工作原理可拆解為信號(hào)采集、處理、識(shí)別及指令執(zhí)行的
    的頭像 發(fā)表于 06-17 11:49 ?1366次閱讀
    <b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>模塊工作原理