用Spresense扩大电子制作的广度!【第4篇】

使用ROHM的BLE附加板,通过智能手机玩转高分辨率音乐播放器!

 

第1篇:什么是Spresense?
第2篇:使用Spresense制作高分辨率音乐播放器!
第3篇:使用ROHM附加板,通过Spresense轻松实现传感器检测!

 

大家好,我是吉田!
这是使用索尼推出的Spresense进行电子制作的第4篇,这次仍然将用到ROHM推出的BLE附加板和传感器附加板。
我将使用附加板,进一步增加第2篇中制作的高分辨率音乐播放器的功能。上次制作的作品只能播放音乐,这次我将大幅扩展它的功能,比如说通过智能手机进行操控,或者说通过翻转播放器就能停止播放等等!

1

本项目所需部件

SONY Spreense 主板
Spresense

SONY Spresense 扩展板
Extension

ROHM 传感器附加板
SPRESENSE-SENSOR-EVK-701

ROHM 照度、接近传感器模块
2

ROHM Bluetooth LE 附加板
3

小型锂聚合物电池(400mAh)和电源插座
(※注意:注意:请小心处理,使用风险自负)
battely

・入耳式耳机或者头戴式耳机
・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之间的数据接收和发送。

4

话不多说,我们赶紧来体验一下这一块BLE附加板吧。如下图照片所示,先将该附加板插入Spresense主板的GPIO左端,确保一定要插到位。照片中的右侧部分还连接了上次项目中用到的传感器附加板。插好之后,BLE和传感器附加板就刚好把GPIO遮起来了。(后面还要用到传感器附加板。)

5

在使用这块BLE附加板时,我们需要用到ROHM的库文件里面的“MK71251-02.ino”这一示例文件。
使用Arduino IDE 打开MK71251-02,将其加载至Spresense。
启动串口监视器,就会跳出等待连接的消息。

6

智能手机端要接收这一消息,需要用到ROHM集团旗下的蓝碧石半导体公司提供的“LAPIS BLE_Tool”这一APP。因此,我们需要先在智能手机端搜索这一APP,然后安装好。
之后,打开手机APP,搜索BLE设备。当发现名字类似于“LAPIS xxx”这样的设备时,连接该设备。

7

当串口监视器上出现“Connected successfully”的消息时,则表示Spresense和智能手机连接成功。

8

当然,也可以在智能手机APP端,查看Device Information和Serial Port Profile等情况,确认是否连接成功。

9

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成功接收到了相关数据。

10

接下来,我们在智能手机端发送“N”,是不是就会收到一个“NEXT”,发送“S”,手机端就会显示一个“Stop”呢?如果智能手机端出现这样的红色字,则表示Spresense也可以回复信息(发送信息)了。
在本项目后面部分,我们就将利用该功能,切换音乐播放器的控制状态。

11

3.使用传感器附加板进行动作检测

接下来,我将使用传感器附加板,进一步添加一些功能。
通过往传感器附加板上,添加之前的电子制作文章中介绍的”传感器评估套件“中的传感器,可以添加照度、接近、颜色、磁性、温度、紫外线、脉搏等至少7种传感器功能。这次,我将添加照度、接近一体型传感器模块。

RPR-0521RS

这次用到的是RPR-0521RS,它是一款集成了光学式接近传感器、红外线LED、数字照度传感器于一体的传感器模块。仅仅通过这一个传感器模块,就能检测到亮度、人和物体的接近情况。这次我将利用该模块,来判断Spresense是不是处于翻转过来的状态(传感器部分和物体的距离变近)。

首先我们将照度、接近度传感器安装至传感器附加板的GPIO引脚。该传感器模块原本就带了5个引脚,直接将其插入附加板的5个GPIO引脚即可。

13

此传感器模块同样也只需使用ROHM的库文件,就能进行检测。我们先启动示例文件PRR-0521RS.ino。

14

运行该Sketch之后,怎么样?当我们用手靠近或者远离Spresense时,照度和接近度的检测数值是不是就会发生变化呢?

15

16

接下来,我们要利用这种机制来实现音乐播放器不同状态的切换。我想让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!”了呢?

17

4.打造成可以从外部进行控制的音乐播放器

到了这一步,就完成了Bluetooth连接、接近传感器的设置了,接下来,我们就要开始对第2篇中制作的高分辨率音乐播放器进行控制相关的制作了。关于如何使用Spresense播放高分辨率音乐,请参照第2篇电子制作的文章,事先完成相应的准备工作。

关于播放器的外壳,还是和第2篇一样,用到的还是Spresense的空包装盒。在包装盒的相应位置上预留孔位,确保可以连接Spresense的LED、USB、扬声器等设备。这样,Spresense的主板、扩展板、附加板、传感器、电池,这些部件就全部装进去了。

18

然后,在SD卡下面建一个“MUSIC”文件夹,在文件夹内提前保存几个高分辨率音源(.wav文件)。这里我们可以继续使用e-onkyo的免费高分辨率音源。

19

至于程序,我们需要在第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卡里面的下一首歌曲。

20

然后,我们试着用手指遮挡传感器部分,或者将Spresense翻过来看看。这样一来,音乐是否戛然而止呢?如果再翻转过来,则又会从头开始播放。

22

另外,请尝试在手机端输入N(ext)或S(top),确认是否会跳到下一曲或停止播放。

23

这样,我们制作的电子作品不就变成了像模像样的音乐播放器了呀!

5.总结

在本项目里,我们用到了BLE和两块传感器附加板,添加了一些功能,实现了对Spresense的操控。

Bluetooth连接部分非常简单,如果另行制作APP,就能进一步提高音乐播放器和智能手机的互联程度了。

通过灵活运用传感器附加板,还能够进行各种状态的检测。
除了本项目里面的运用方法以外,比如使用加速度传感器,通过晃动音乐播放器来切换音乐,通过上下移动播放器来调整音量等等,也是相当不错的主意。
请大家自行根据作品制作的创意和目的,扩展Spresense的功能!

(吉田)

 

 

本系列连载的内容

第1篇:什么是Spresense?
第2篇:使用Spresense制作高分辨率音乐播放器!
第3篇:使用ROHM附加板,通过Spresense轻松实现传感器检测!
第4篇:使用ROHM的BLE附加板,通过智能手机玩转高分辨率音乐播放器!(本文)
第5篇:使用Spresense相机板制作数码相机!

吉田 显一(Yoshiken)
吉田 显一(Yoshiken)

在普通公司工作的上班族,非常喜欢创作的周末创客,出版了电子书MESHBOOK,平时也写写博客。
http://blog.ktrips.net

相关文章

  1. arduino-h02_14

    用Arduino制作的太阳能电池板供电数字养殖箱【后篇】

  2. 用Spresense扩大电子制作的广度!【第5篇】

  3. 用Spresense扩大电子制作的广度!【第3篇】

  4. spresense_2

    用Spresense扩大电子制作的广度!【第2篇】

  5. title_image

    用Spresense扩大电子制作的广度!【第1篇】

  6. learning-electronics-03-00

    超越LED闪烁!更多了解电子制作“N讲”【第3篇】

  7. learning-electronics-02-08

    超越LED闪烁!更多了解电子制作“N讲”【第2篇】

  8. learning-electronics-01-09

    超越LED闪烁!更多了解电子制作“N讲”【第1篇】

  9. 电机的种类有哪些?电子制作中使用的电机种类介绍

TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • IGBT功率元器件
  • 热设计
  • 电路仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


Sugiken老师的电机驱动器课堂

PICK UP

PAGE TOP