作者:recan
鏈接:
https://club.rt-thread.org/ask/article/372fe88529e45e45.html
基于NK-980IoT的國(guó)學(xué)唐詩(shī)學(xué)習(xí)機(jī)
1 項(xiàng)目背景
最近一直在陪小孩學(xué)習(xí)國(guó)學(xué)精髓,比如唐詩(shī)、宋詞這些經(jīng)典國(guó)學(xué)常識(shí);恰好看到RT-Thread官方社區(qū)有開展一個(gè)DIY活動(dòng),并且這個(gè)板子剛好帶有音頻相關(guān)的外設(shè)接口,于是想著試著玩一玩,沒準(zhǔn)后面可以把功能再升級(jí)一下,給小孩做個(gè)高級(jí)”玩具”(這個(gè)成本可不低?。?/span>
2 開發(fā)板簡(jiǎn)介
開發(fā)板簡(jiǎn)單的介紹,參考如下:
整體上板子的外設(shè)情況還是非常不錯(cuò)的,可以做很多有用、好玩的東西。由于我本次的DIY項(xiàng)目主要關(guān)于音頻,所以我也就重點(diǎn)看了這塊的介紹。
音頻芯片型號(hào)為NAU8822L,其中I2C接口用于配置(MODE引腳低),I2S接口用于傳輸數(shù)據(jù)。
I2S_LRCK接FS,用于區(qū)分左右通道數(shù)據(jù)。
I2S_BCLK接BCLK 數(shù)據(jù)傳輸bit時(shí)鐘。
I2S_DI接ADCOUT 主<-從。
I2S_DO接ADCIN 主->從。
I2S_MCLK接MCLK 主時(shí)鐘,給設(shè)備提供時(shí)鐘源。
3 項(xiàng)目實(shí)現(xiàn)
3.1 硬件部分
本方案中,硬件部分主要包括使用了2個(gè)按鍵和2個(gè)LED,SD卡、以及音頻處理的I2S接口。
LED:用作功能指示;黃燈表示唐詩(shī)五言絕句模式,紅燈表示唐詩(shī)七言絕句模式;
按鍵:用作功能選擇,有唐詩(shī)五言絕句和唐詩(shī)七言律詩(shī),兩種功能模式;
音頻喇叭:用作音頻的輸出;
SD卡:用作音頻文件的存儲(chǔ)。
3.2 軟件部分
整個(gè)代碼結(jié)構(gòu)比較簡(jiǎn)單,如下圖所示:
使用到的軟件包主要是 wavplayer,在播放音頻時(shí),也主要使用這個(gè)軟件包的接口。
程序的簡(jiǎn)單邏輯如下:
1、程序上電,完成初始化操作,包括按鍵、LED等GPIO的模式設(shè)定,創(chuàng)建一個(gè)信號(hào)量;另外,系統(tǒng)在上電初始化后,檢測(cè)到SD卡存在的話,會(huì)自動(dòng)掛載其文件系統(tǒng),掛載點(diǎn)為 /mnt/sd1 這個(gè)目錄;
2、播放開機(jī)使用歡迎詞;
3、while-1循環(huán)等待功能按鍵的輸入;
4、當(dāng)識(shí)別到對(duì)應(yīng)的按鍵輸入后,響應(yīng)的功能指示燈亮起,并且設(shè)定具體需要播放的音頻文件名,然后通過信號(hào)量觸發(fā)給main循環(huán)的信號(hào)量等待,然后由main循環(huán)調(diào)用wavplayer的接口執(zhí)行對(duì)應(yīng)音頻文件的播放;
-
void wav_palyer_file(constchar*file)
-
{
-
int new_argc =3;
-
char*new_argv[64]={
-
"wavplayer",
-
"-s",
-
"/mnt/sd1/test/test.wav",
-
};
-
externint wav_player(int argc,char*argv[]);
-
snprintf(new_argv[2],64,"%s", file);
-
wav_player(new_argc, new_argv);
-
}
1、周次循環(huán)3-4步驟。
工程代碼代碼已開源在gitee:國(guó)學(xué)唐詩(shī)學(xué)習(xí)機(jī)
工程代碼建議使用env環(huán)境執(zhí)行編譯,下載使用官方的NuWriter工具。
工程中使用的音頻文件,如果需要測(cè)試,可以聯(lián)系我獲取。
4 功能展示
4.1 已實(shí)現(xiàn)功能
主要是用按鍵觸發(fā)不同的國(guó)學(xué)內(nèi)容,然后進(jìn)行朗誦,功能屬于比較簡(jiǎn)單,演示視頻詳見:B站鏈接
B站鏈接:
https://www.bilibili.com/video/BV1UY4y1B788/
4.2 未來(lái)實(shí)現(xiàn)功能
比如一鍵聯(lián)網(wǎng)更新 唐詩(shī)音頻文件:通過http或tftp等遠(yuǎn)程方式,自動(dòng)更新已發(fā)布的唐詩(shī)音頻文件;
比如支持本地人工朗誦錄音和播放:通過讀學(xué)習(xí)者的朗誦執(zhí)行與原文的比對(duì);
比如支持考察模式:學(xué)習(xí)機(jī)隨機(jī)選擇一首詩(shī)名,然后學(xué)習(xí)者來(lái)背誦,形成學(xué)習(xí)閉環(huán);
比如加入語(yǔ)音識(shí)別功能:支持語(yǔ)音輸入來(lái)讓學(xué)習(xí)機(jī)朗誦對(duì)應(yīng)的詩(shī)詞;
比如加入LCD顯示:支持更多樣化的人機(jī)交互。
5 音頻文件制作
本次項(xiàng)目使用的所有音頻文件,均使用 AI文字合成語(yǔ)音在線網(wǎng)站制作,詳見如下:
將所有制作好的音頻文件,按照預(yù)定的文件名,拷貝到SD卡中,即可被讀取播放了。
6 項(xiàng)目總結(jié)
-
NK-980IoT版子支持下載固件程序到SRAM中快速運(yùn)行,這個(gè)功能很贊,可以加快調(diào)試速度;但是,我使用燒錄到SPI Flash的方式,試了好幾次燒錄完了都沒跑起來(lái),真是有些頭疼;
-
看似小的DIY項(xiàng)目,也需要一番構(gòu)思,留有功能升級(jí)的設(shè)計(jì);
-
擴(kuò)展功能,有望再花點(diǎn)時(shí)間,升級(jí)升級(jí);
-
體驗(yàn)了一把windows下使用env開發(fā)編譯,雖然比不上Linux環(huán)境的流暢,但在windows環(huán)境能有這樣的體驗(yàn)也還不錯(cuò),贊一個(gè)。
7 參考資料
-
NK980IoT使用RT-Thread的簡(jiǎn)介
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start
-
NK-980IOT測(cè)評(píng)之I2S接口音頻測(cè)試
https://club.rt-thread.org/ask/article/0a848bea7e87954b.html
-
NK-980IOT 測(cè)評(píng)之 I2S 和 SDH
https://club.rt-thread.org/ask/article/02738a52239b522c.html
8 致謝
最后,感謝論壇小伙伴 @qinyunti 的部分技術(shù)支持,I2S音頻操作部分主要參考之前的測(cè)評(píng)文章,也期待論壇中有更多關(guān)于NK-980IoT的技術(shù)文章輸出。
-
音頻
+關(guān)注
關(guān)注
29文章
2877瀏覽量
81547 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97471 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1289瀏覽量
40129 -
nuc980
+關(guān)注
關(guān)注
0文章
4瀏覽量
1262
原文標(biāo)題:【NUC980開發(fā)板DIY項(xiàng)目大挑戰(zhàn)】基于NK-980IoT的國(guó)學(xué)唐詩(shī)學(xué)習(xí)機(jī)
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論