作者:赵俊涛
一、概述
随着近年来智能化设备的不断增长,平板电脑、智能数字音视频播放器、移动数码相机等各类数码产品,正越来越受到城乡居民欢迎。特别是“云生活”让人们对数码产品有了更多需求,加上互联网技术、5G技术、智能化新产品、新型分期消费模式等的出现,让数码产品消费热潮涌动。本设计为基于RT-Thread的“数码小精灵”设计,硬件采用了以BK为主控芯片的麻雀一号开发板开发。BK是一款高性能WiFi模块,采用高集成的无线射频芯片,内部集成2.4GHzWi-Fi1T1R先进技术,支持摄像头图像输出,拥有最佳的功耗性能、射频性能、稳定性、通用性和可靠性,适用于各种应用和不同产品需求。模块内部拥有KB内嵌RAM和4MbyteFlash空间,CPU主频高达MHz。
本设计在此基础上主要实现了以下功能,包括天气和疫情数据更新显示、MP3音乐播放器以及数码拍照相机的功能。其中MP3播放器具有音量调节,播放/停止控制和歌曲切换的功能;数码相机将拍照图片进行LCD屏显示,同时具有SD卡存储和OneNet云平台存储功能。该产品可以充当家庭数码助理的角色,因此取名“数码小精灵”。同时本作品完成的过程中参考了部分网络资料和网友的思路,在此一并表示感谢。
二、RT-Thread使用情况概述
本设计基于麻雀一号开发板SDK进行开发,其RT-Thread为3.1.0版本。
图1RT-Thread版本
在RT-Thread系统上的设备注册列表,其中主要使用了rtc,sd0,w0,sound,uart1等设备。使用到的RT-Thread组件包括了FinSH控制台,虚拟文件系统,POSIX接口。在软件包上面涉及到网络工具及NetUtils,WebClient,cJSON,EasyFlash,rt_ota,TJpgDec,Player等。
图2设备注册列表
三、硬件框架
麻雀一号开发板外设资源丰富,但资源相当丰富,集成WiFi、BLE、摄像头、音频扬声器、MIC录音、TF卡座、五向按键、还有一个1.44寸的LCD屏,使用常见的TypeC接口作为供电和调试串口,预留支持锂电池供电接口。
本设计的人机交互部分主要利用了开发板的五向按键和LCD显示屏,其中按键用于功能选择,数据刷新以及音乐播放控制功能。
普通模式下:“←”:音乐播放、“?”:天气和疫情数据刷新、“→”:相机拍照
音乐播放模式下:“↑”:音量加、“↓”:音量减、“←”:下一曲、“?”:停止播放
设备联网采用WIFI连接,上电自动连接网络。数据显示LCD进行显示,同时设备接有SD进行相机拍照的存储。此外照片同时可以通过WIFI上传至OneNet云平台,进行远端网页或者手机等智能终端进行查看。四、软件框架说明
系统软件流程框图如下图所示,设备上电后启动RT-Thread操作系统,同时进行相关硬件设备的初始化操作,如LCD显示屏,音频扬声器,以及挂在SD卡到文件系统等操作,之后进行设备的网络连接。网络连接后输入应用程序启动命令进行程序启动,LCD显示欢迎界面,接下来用户可以通过五向按键进行功能选择,主要是天气疫情数据更新显示、MP3播放器功能以及数码相机的功能。相机拍照后会进行本地SD卡数据存储以及OneNet云端存储。五、软件模块说明
1.设备联网
设备联网主要使用到了RT-Thread组件中的wlan驱动程序实现,上电初始化完成后在主程序中查询wlan无线设备,并根据用户配置的SSID和PASSWORD进行WIFI网络的连接。该部分的具体代码实现如下所示:
1staticintiot_station_connect(char*ssid,char*passwd){2rt_err_tresult=RT_EOK;3structrt_wlan_infoinfo;4structrt_wlan_device*wlan;5rt_tick_ttick=0;6wlan=(structrt_wlan_device*)rt_device_find(WIFI_DEVICE_STA7_NAME);8if(!wlan)9{10rt_kprintf("nowlan:%sdevice\n",WIFI_DEVICE_STA_NAME);11return-1;}12result=rt_wlan_init(wlan,WIFI_STATION);13rt_wlan_register_event_handler(wlan,WIFI_EVT_STA_CONNECTED,i14ot_wlan_sta_connected_event);15rt_wlan_register_event_handler(wlan,WIFI_EVT_STA_DISCONNECTED16,iot_wlan_sta_disconnected_event);17rt_wlan_info_init(info,WIFI_STATION,SECURITY_WPA2_AES_PSK,18ssid);19result=rt_wlan_connect(wlan,info,passwd);20rt_wlan_info_deinit(info);21returnresult;22}
2.NTP网络时间同步
网络时间同步主要思路就是通过调用网络工具包中的ntp同步函数来实现,通过创建独立时间同步线程,达到定时同步网络时间的目的。该部分使用时需要启用RT-Thread中的RTC功能。相关代码如下:1{2time_tcur_time=ntp_sync_to_rtc();3if(cur_time)4{5rt_kprintf("GetlocaltimefromNTPserver:%s",ctime((constt6ime_t*)cur_time));7rt_kprintf("Thesystemtimeisupdated.Timezoneis%d.\n",NTP8_TIMEZONE);9}}10staticrt_thread_ttid1=RT_NULL;11staticvoidntcthread1_entry(void*parameter){12while((1))13{14time_tcur_time=ntp_sync_to_rtc();15if(cur_time)16{17rt_kprintf("GetlocaltimefromNTPserver:%s",ctime((consttim18e_t*)cur_time));19rt_kprintf("Thesystemtimeisupdated.Timezoneis%d.\n",NTP_T20IMEZONE);21break;}22else23{24rt_thread_mdelay();25}}}26voidNTCThreadInit(void){27if(tid1!=RT_NULL)28{29rt_kprintf("ntcthreadstillrun\n");30return;}31rt_kprintf("NTCthreadinit\n");32tid1=rt_thread_create("NTC",33ntcthread1_entry,RT_NULL,34THREAD_STACK_SIZE,35THREAD_PRIORITY,THREAD_TIMESLICE);36if(tid1!=RT_NULL)37rt_thread_startup(tid1);38}3.天气疫情数据更新
该部分主要是利用了webclient工具包的功能,通过调用天气和疫情数据API接口获取相关Json数据,并利用CJson工具包进行返回Json数据的解析。最后通过LCD进行数据显示。相关代码如下:
1#defineGET_URI"