使用ROHM的BLE附加板,通过智能手机玩转高分辨率音乐播放器!
第1篇:什么是Spresense?
第2篇:使用Spresense制作高分辨率音乐播放器!
第3篇:使用ROHM附加板,通过Spresense轻松实现传感器检测!
大家好,我是吉田!
这是使用索尼推出的Spresense进行电子制作的第4篇,这次仍然将用到ROHM推出的BLE附加板和传感器附加板。
我将使用附加板,进一步增加第2篇中制作的高分辨率音乐播放器的功能。上次制作的作品只能播放音乐,这次我将大幅扩展它的功能,比如说通过智能手机进行操控,或者说通过翻转播放器就能停止播放等等!
本项目所需部件
・小型锂聚合物电池(400mAh)和电源插座
(※注意:注意:请小心处理,使用风险自负)
・入耳式耳机或者头戴式耳机
・Micro USB 数据线
・Micro SD 卡
本项目的流程
1. 使用ROHM BLE附加板连接智能手机
2. 使用Bluetooth,与Spresense进行数据的接收和发送
3. 使用传感器附加板进行动作检测
4. 打造成可以从外部进行控制的音乐播放器
5. 总结
1. 使用ROHM BLE附加板连接智能手机
可以轻松地实现Spresense功能扩展的附加板有很多,ROHM推出的支持Bluetooth Low Energy的附加板BLE-EVK-701就是其中一种。使用该附加板之后,通过BLE,就能实现智能手机与Spresense之间的数据接收和发送。
话不多说,我们赶紧来体验一下这一块BLE附加板吧。如下图照片所示,先将该附加板插入Spresense主板的GPIO左端,确保一定要插到位。照片中的右侧部分还连接了上次项目中用到的传感器附加板。插好之后,BLE和传感器附加板就刚好把GPIO遮起来了。(后面还要用到传感器附加板。)
在使用这块BLE附加板时,我们需要用到ROHM的库文件里面的“MK71251-02.ino”这一示例文件。
使用Arduino IDE 打开MK71251-02,将其加载至Spresense。
启动串口监视器,就会跳出等待连接的消息。
智能手机端要接收这一消息,需要用到ROHM集团旗下的蓝碧石半导体公司提供的“LAPIS BLE_Tool”这一APP。因此,我们需要先在智能手机端搜索这一APP,然后安装好。
之后,打开手机APP,搜索BLE设备。当发现名字类似于“LAPIS xxx”这样的设备时,连接该设备。
当串口监视器上出现“Connected successfully”的消息时,则表示Spresense和智能手机连接成功。
当然,也可以在智能手机APP端,查看Device Information和Serial Port Profile等情况,确认是否连接成功。
2.使用Bluetooth,与Spresense进行数据的接收和发送
接下来,我们就用设置好的蓝牙连接,尝试与Spresense进行数据的接收和发送。
在这里,我们使用该串行通信,发送某一特定的代码之后,会出现相应的消息,通过此种方式来实现状态控制,具体做法如下:
首先,在之前用到的Bluetooth库文件MK71251-02中,添加如下所示的描述。
… void loop() { unsigned char data, d; int rc; const char next[5] = "NEXT"; const char stop[5] = "STOP"; const char play[5] = "PLAY"; // rc = 0, if data is available on Serial2, else rc = -1 rc = mk71251.read(&data); if (rc == 0){ printf("Read %c\n",data); if (data == 'N') { //もしNなら次のファイル for (unsigned int i = 0; i <= strlen(next); i++) { d = next[i]; mk71251.write(&d); } } else if (data == 'S') { //もしSならストップ for (unsigned int i = 0; i <= strlen(stop); i++) { d = stop[i]; mk71251.write(&d); } } else if (data == 'P') { //もしPなら再生 for (unsigned int i = 0; i <= strlen(play); i++) { d = play[i]; mk71251.write(&d); } } } }
再将其加载至Spresense,再次连接智能手机。
然后,在智能手机APP端,打开Serial Port Profile,在里面输入文字和数字,点击Send按钮。
如果Spresense的串口监视器端出现了“Read xx”这样的响应,则表示Spresense成功接收到了相关数据。
接下来,我们在智能手机端发送“N”,是不是就会收到一个“NEXT”,发送“S”,手机端就会显示一个“Stop”呢?如果智能手机端出现这样的红色字,则表示Spresense也可以回复信息(发送信息)了。
在本项目后面部分,我们就将利用该功能,切换音乐播放器的控制状态。
3.使用传感器附加板进行动作检测
接下来,我将使用传感器附加板,进一步添加一些功能。
通过往传感器附加板上,添加之前的电子制作文章中介绍的”传感器评估套件“中的传感器,可以添加照度、接近、颜色、磁性、温度、紫外线、脉搏等至少7种传感器功能。这次,我将添加照度、接近一体型传感器模块。
这次用到的是RPR-0521RS,它是一款集成了光学式接近传感器、红外线LED、数字照度传感器于一体的传感器模块。仅仅通过这一个传感器模块,就能检测到亮度、人和物体的接近情况。这次我将利用该模块,来判断Spresense是不是处于翻转过来的状态(传感器部分和物体的距离变近)。
首先我们将照度、接近度传感器安装至传感器附加板的GPIO引脚。该传感器模块原本就带了5个引脚,直接将其插入附加板的5个GPIO引脚即可。
此传感器模块同样也只需使用ROHM的库文件,就能进行检测。我们先启动示例文件PRR-0521RS.ino。
运行该Sketch之后,怎么样?当我们用手靠近或者远离Spresense时,照度和接近度的检测数值是不是就会发生变化呢?
接下来,我们要利用这种机制来实现音乐播放器不同状态的切换。我想让Spresense处于正面朝上(接近度为Far)时播放音乐,Spresense背面朝上(接近度为Near)时停止播放。
在PRR-0521RS添加下述黄色部分信息之后,修改文件名,另行保存。
… void loop() { byte rc; unsigned short ps_val; float als_val; byte near_far; rc = rpr0521rs.get_psalsval(&ps_val, &als_val); if (rc == 0) { Serial.print("RPR-0521RS (Proximity) = "); Serial.print(ps_val); Serial.print(" [count]"); near_far = rpr0521rs.check_near_far(ps_val); if (near_far == RPR0521RS_NEAR_VAL) { Serial.println(" Back and Stop! "); } else { Serial.println(" Front and Play! "); } } delay(500); }
完成这一步操作之后,当Spresense处于正面朝上的状态时,串口监视器就会出现“Front and Play!”这一信息,当背面朝上时,则显示的信息是不是就变成“Back and Stop!”了呢?
4.打造成可以从外部进行控制的音乐播放器
到了这一步,就完成了Bluetooth连接、接近传感器的设置了,接下来,我们就要开始对第2篇中制作的高分辨率音乐播放器进行控制相关的制作了。关于如何使用Spresense播放高分辨率音乐,请参照第2篇电子制作的文章,事先完成相应的准备工作。
关于播放器的外壳,还是和第2篇一样,用到的还是Spresense的空包装盒。在包装盒的相应位置上预留孔位,确保可以连接Spresense的LED、USB、扬声器等设备。这样,Spresense的主板、扩展板、附加板、传感器、电池,这些部件就全部装进去了。
然后,在SD卡下面建一个“MUSIC”文件夹,在文件夹内提前保存几个高分辨率音源(.wav文件)。这里我们可以继续使用e-onkyo的免费高分辨率音源。
至于程序,我们需要在第2篇的高分辨率音源播放的Sketch基础上,添加前面编辑好的BLE和接近传感器的逻辑。程序有点长,最终形成的Sketch如下图所示。
#include #include #include #include "RPR-0521RS.h" RPR0521RS rpr0521rs; #include "MK71251.h" #include MK71251 mk71251; SDClass theSD; AudioClass *theAudio; File dir, myFile; err_t err; bool ErrEnd = false; static void audio_attention_cb(const ErrorAttentionParam *atprm) { puts("Attention!"); if (atprm->error_code >= AS_ATTENTION_CODE_WARNING) { ErrEnd = true; } } void setup() { byte rc1; byte rc2; rc1 = rpr0521rs.init(); rc2 = mk71251.init(); Serial.begin(115200); while (!Serial); Wire.begin(); pinMode(LED0, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); /* start audio system */ theAudio = AudioClass::getInstance(); theAudio->begin(audio_attention_cb); puts("initialization Audio Library"); /* Set clock mode to Hi-Res */ theAudio->setRenderingClockMode(AS_CLKMODE_HIRES); theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_SPHP); err = theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_WAV, "/mnt/sd0/BIN", AS_SAMPLINGRATE_96000, AS_BITLENGTH_24, AS_CHANNEL_STEREO); /* Verify player initialize */ if (err != AUDIOLIB_ECODE_OK) { printf("Player0 initialize error\n"); exit(1); } } void openMyFile() { if (!dir) { dir = theSD.open("/MUSIC"); } myFile = dir.openNextFile(); if (!myFile) { dir.close(); dir = theSD.open("/MUSIC"); myFile = dir.openNextFile(); } /* Verify file open */ if (!myFile) { printf("File open error\n"); exit(1); } printf("Open! %s\n",myFile.name()); //Serial.print("myFile name: "); //Serial.println(myFile.name()); /* Send first frames to be decoded */ err = theAudio->writeFrames(AudioClass::Player0, myFile); if (err != AUDIOLIB_ECODE_OK) { printf("File Read Error! =%d\n",err); myFile.close(); exit(1); } puts("Play!"); digitalWrite(LED0, HIGH); delay(100); digitalWrite(LED1, HIGH); delay(100); digitalWrite(LED2, HIGH); delay(100); digitalWrite(L
那我们接下来就将该Sketch加载至Spresense,来体验一下吧!
先接通电源,连接智能手机APP和Bluetooth。这时,如果Spresense是常规的正面朝上状态,则会开始播放排列在第一位的歌曲。一曲结束后,会切换到SD卡里面的下一首歌曲。
然后,我们试着用手指遮挡传感器部分,或者将Spresense翻过来看看。这样一来,音乐是否戛然而止呢?如果再翻转过来,则又会从头开始播放。
另外,请尝试在手机端输入N(ext)或S(top),确认是否会跳到下一曲或停止播放。
这样,我们制作的电子作品不就变成了像模像样的音乐播放器了呀!
5.总结
在本项目里,我们用到了BLE和两块传感器附加板,添加了一些功能,实现了对Spresense的操控。
Bluetooth连接部分非常简单,如果另行制作APP,就能进一步提高音乐播放器和智能手机的互联程度了。
通过灵活运用传感器附加板,还能够进行各种状态的检测。
除了本项目里面的运用方法以外,比如使用加速度传感器,通过晃动音乐播放器来切换音乐,通过上下移动播放器来调整音量等等,也是相当不错的主意。
请大家自行根据作品制作的创意和目的,扩展Spresense的功能!
(吉田)
本系列连载的内容
第1篇:什么是Spresense?
第2篇:使用Spresense制作高分辨率音乐播放器!
第3篇:使用ROHM附加板,通过Spresense轻松实现传感器检测!
第4篇:使用ROHM的BLE附加板,通过智能手机玩转高分辨率音乐播放器!(本文)
第5篇:使用Spresense相机板制作数码相机!