NUC980开发板DIY项目大挑战】基于NK-980IoT的国学唐诗学习机
4 ?" ], q2 p" E1 M: B& _
. z8 M# l8 I. J1 d6 g
( n. V6 z) o$ d1 ^: R作者:recan 链接:https://club.rt-thread.org/ask/article/372fe88529e45e45.html ) N7 v/ F4 u; I+ R
1 K3 e9 q* M& Q基于NK-980IoT的国学唐诗学习机 / g N! A: t* c8 _& N( F; |6 E
1 项目背景
! a3 c% A4 r9 f: J. ~$ i+ o
最近一直在陪小孩学习国学精髓,比如唐诗、宋词这些经典国学常识;恰好看到RT-Thread官方社区有开展一个DIY活动,并且这个板子刚好带有音频相关的外设接口,于是想着试着玩一玩,没准后面可以把功能再升级一下,给小孩做个高级”玩具”(这个成本可不低啊)。
0 m5 T8 b$ D' p* R/ R 2 开发板简介6 M3 A2 X6 w( h, O
开发板简单的介绍,参考如下: * G* i+ q: z$ T8 e5 S* j2 O# C
整体上板子的外设情况还是非常不错的,可以做很多有用、好玩的东西。由于我本次的DIY项目主要关于音频,所以我也就重点看了这块的介绍。
* F8 x5 r( _8 d1 z音频芯片型号为NAU8822L,其中I2C接口用于配置(MODE引脚低),I2S接口用于传输数据。 I2S_LRCK接FS,用于区分左右通道数据。$ Z9 f; H$ y+ E" b. |- \
I2S_BCLK接BCLK 数据传输bit时钟。
" G" S1 q- t: f% `# q* L# dI2S_DI接ADCOUT 主<-从。$ a* J8 D6 u1 R2 a
I2S_DO接ADCIN 主->从。: u- r& B! L' ^/ s
I2S_MCLK接MCLK 主时钟,给设备提供时钟源。
3 H/ k2 g# V. |- j& \
3 项目实现 ' f% J1 V5 k+ k3 E1 ^
3.1 硬件部分 8 ]. U" _) A9 ?4 `8 t
本方案中,硬件部分主要包括使用了2个按键和2个LED,SD卡、以及音频处理的I2S接口。
# r5 i. F- P. s" b5 {LED:用作功能指示;黄灯表示唐诗五言绝句模式,红灯表示唐诗七言绝句模式; 按键:用作功能选择,有唐诗 五言绝句 和唐诗 七言律诗,两种功能模式; 音频喇叭:用作音频的输出; SD卡:用作音频文件的存储。
; _* q7 X9 |+ r. h2 ~/ E 3.2 软件部分
- f: {9 @- ~% a# f( o4 p \
整个代码结构比较简单,如下图所示:
) T0 A b5 t0 ^/ G& S* f使用到的软件包主要是 wavplayer,在播放音频时,也主要使用这个软件包的接口。
. v. c/ M, }8 A: H
程序的简单逻辑如下: 1、程序上电,完成初始化操作,包括按键、LED等GPIO的模式设定,创建一个信号量;另外,系统在上电初始化后,检测到SD卡存在的话,会自动挂载其文件系统,挂载点为 /mnt/sd1 这个目录; 2、播放开机使用欢迎词; 3、while-1循环等待功能按键的输入; 4、当识别到对应的按键输入后,响应的功能指示灯亮起,并且设定具体需要播放的音频文件名,然后通过信号量触发给main循环的信号量等待,然后由main循环调用wavplayer的接口执行对应音频文件的播放; - void wav_palyer_file(constchar*file)! O; n9 I4 _, e+ f
- {! F7 S! |9 w8 K2 _6 r
- int new_argc =3;' p. K) d' \/ o. i+ e) N
- char*new_argv[64]={
7 Q; h- `0 j3 ?* ]+ f - "wavplayer",
4 w" { ~$ S6 n9 p - "-s",9 D9 O: W2 b2 ~0 h
- "/mnt/sd1/test/test.wav",+ [* b( B6 |, [5 M F
- };
: L' ]: `; Z$ y% @- _4 g8 Q# ]3 ^1 K - externint wav_player(int argc,char*argv[]);
1 |/ [' w, l6 K$ b8 X6 s7 D3 ?' ~ - snprintf(new_argv[2],64,"%s", file);3 c% u: G0 P. b) p
- wav_player(new_argc, new_argv);
8 l8 n( l2 |* {% m7 p* r - }
复制代码
" b1 g+ I5 b4 ]6 O% u5、周次循环3-4步骤。 工程代码代码已开源在gitee:国学唐诗学习机 工程代码建议使用env环境执行编译,下载使用官方的NuWriter工具。 工程中使用的音频文件,如果需要测试,可以联系 我 获取。 , q+ S# \* K6 t% u
4 功能展示4.1 已实现功能主要是用按键触发不同的国学内容,然后进行朗诵,功能属于比较简单,演示视频详见:B站链接 # m8 y# G: s1 V; ~% F9 Z6 t$ L0 Q
, m& ?0 f6 f5 g# e9 g# HB站链接: https://www.bilibili.com/video/BV1UY4y1B788/
- R& N% k+ ~/ G U, g' z, {5 u! n: p' D
4.2 未来实现功能比如一键联网更新 唐诗音频文件:通过http或tftp等远程方式,自动更新已发布的唐诗音频文件; 比如支持本地人工朗诵录音和播放:通过读学习者的朗诵执行与原文的比对; 比如支持考察模式:学习机随机选择一首诗名,然后学习者来背诵,形成学习闭环; 比如加入语音识别功能:支持语音输入来让学习机朗诵对应的诗词; 比如加入LCD显示:支持更多样化的人机交互。 " l8 e2 N" V6 k# z _% {
5 音频文件制作
$ ]. [+ }6 a+ c |1 v7 g
本次项目使用的所有音频文件,均使用 AI文字合成语音在线网站 制作,详见如下:
( G3 L( p0 N" _- f+ W- _. g+ }将所有制作好的音频文件,按照预定的文件名,拷贝到SD卡中,即可被读取播放了。
) l) F4 f: M) w8 F- z 6 项目总结NK-980IoT版子支持下载固件程序到SRAM中快速运行,这个功能很赞,可以加快调试速度;但是,我使用烧录到SPI Flash的方式,试了好几次烧录完了都没跑起来,真是有些头疼; 看似小的DIY项目,也需要一番构思,留有功能升级的设计; 扩展功能,有望再花点时间,升级升级; 体验了一把windows下使用env开发编译,虽然比不上Linux环境的流畅,但在windows环境能有这样的体验也还不错,赞一个。 # K! A$ \% `6 ]6 R
, n, I6 |9 [: }$ Y 7 参考资料NK980IoT使用RT-Thread的简介 ' c# k9 u8 h8 [: ^0 q5 M
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start - _) n8 z! d6 P, H
NK-980IOT测评之I2S接口音频测试 + B4 \8 l) C6 S) \) J6 ], g9 I( |7 E* {( X
https://club.rt-thread.org/ask/article/0a848bea7e87954b.html ' R/ x& V) E/ i1 D8 L, [3 w
NK-980IOT 测评之 I2S 和 SDH
B% V5 y G' e
https://club.rt-thread.org/ask/article/02738a52239b522c.html
# t) U6 W' H; w3 c : k' f7 W$ [/ W0 W/ y- O( V* h! A
5 K( W) Y: t9 B6 l- u6 h+ q! n% m. k# v
8 致谢
0 t6 r6 `8 z* O) {2 Z) ~/ c最后,感谢论坛小伙伴 @qinyunti 的部分技术支持,I2S音频操作部分主要参考之前的测评文章,也期待论坛中有更多关于NK-980IoT的技术文章输出。 . E& H- z. |& s7 L+ X6 x8 h
5 f! e5 o+ i2 `- U+ P7 o
' N9 \3 |# X, P! t5 G h9 d# J. K
3 _9 B) l9 o- W3 P( S0 l& ?; r7 } |