电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>MuSticks在隔离期间保持活跃的有趣方式

MuSticks在隔离期间保持活跃的有趣方式

2022-11-03 | zip | 3.04 MB | 次下载 | 免费

资料介绍

描述

 

动机

在这段保持社交距离的时期,很难找到更积极和四处走动的方法。与我上学时相比,在线课程几乎不需要在建筑物中走动和在储物柜中交换学习材料。在社区外散步是保持活跃和每天锻炼的好方法,但是,有些日子可能风太大而不能在外面散步,或者可能会下雨。此外,在持续的 COVID-19 期间,留在室内以降低传播或感染病毒的风险变得越来越重要。

这就是为什么我们有动力开发一种有趣的方式来让人们在室内保持活跃和健康!MuSticks 结合了音乐和棍子的理念,让室内锻炼变得实用而有趣。在这些困难时期保持健康并保持活跃很重要,我们希望 MuSticks 能够以这种小方式帮助人们。

材料

该项目使用 Raspberry Pi Zero W、Adafruit Stereo Speaker Bonnet 和 Surface Bone Conductive Transducer 扬声器。我们决定使用换能器,因为它具有在硬表面上转换音频信号的有趣特性。我们决定使用塑料瓶,但您可以尝试不同的材料。

 
 
 
pYYBAGNiFEuAfbfVAAjwQoLWpQE816.jpg
 
1 / 5Raspberry Pi 零 W
 

3D打印零件

我们决定把木棍分成三部分。

  • 扬声器支架
  • 一个瓶架
  • 板/电池座
 
 
 
poYBAGNiFFuAHKHeAAcQSNMeCM8637.jpg
 
1 / 53D 打印零件
 

为了制作完整的棍子,您需要打印两个扬声器支架和两个瓶架。扬声器支架紧贴瓶架,如下所示:

pYYBAGNiFGaABnwfAAVGf8msiMw789.jpg
扬声器支架紧贴瓶架。
 

然后使用螺钉/螺母将板/电池连接到瓶架上,如下所示

poYBAGNiFHiAGMT6AAe0ehysNQo392.jpg
三部分连接
 

边框/电池座有两个版本;“Battery and Board Holder.stl ”文件比BBH3.stl文件的比例略小这种差异允许两个持有人一起抢夺并滚动以关闭并保护内容物。

pYYBAGNiFJmAVMhbAAuLUgdxVbQ079.jpg
可以关闭卷的板/电池座。
 

硬件放在一起

 
 
 
pYYBAGNiFJmAVMhbAAuLUgdxVbQ079.jpg
 
1 / 3扬声器连接
 

树莓派零设置。

为了发布我们的 Web 界面,我们需要在我们的 RPi Zero W 中安装 LDAP。您可以找到几个网页来指导您在 Raspberry Pi Zero W 中安装 LDAP。

我们还使用以下命令安装 mp3 实用程序 MPG123:

$ sudo apt-get install mpg123

然后按照此处的 Adafruit Speaker Bonnet for Raspberry Pi 轻松安装中的说明进行操作

感谢 Adafruit 的说明,我们能够找到 SomaFM

超过 30 个独特的收听者支持的、无商业广告的、地下/替代无线电广播频道向世界传播。

轻松测试扬声器并提供多种选择是理想之选。但是,从 Web 服务运行它并不容易。

现在我们准备好创建我们的界面了。

网页

安装服务器和扬声器后,我们使用“Bootstrap Studio”创建了一个简单的 Web 界面。我们不确定是否可以上传自动生成模板,但我们可以显示我们对代码所做的手动更改。

下图是界面截图:

poYBAGNiFM2AWrNmAAKuwAeyICk128.jpg
手机访问的 Web 界面
 

每个按钮图像都会向服务器的主页提交一个代码,以指示所选电台。代码看起来像






请注意,value 属性具有在 GET 命令名称操作中发送回服务器的值。

最初的想法是接收选台,然后批处理一个进程在后台运行MPG123,但不可能。对于初学者,除非我们使用 sudo 命令运行 shell 进程,否则程序不会启动。

我们尝试执行以下命令,其中 exec 是生成进程的 PHP 函数:

exec("nohup mpg123 http://ice1.somafm.com/u80s-128-mp3 > /dev/null 2>&1 echo $!");

但它一开始进程就崩溃了 mpg123 程序。

然后我们在命令行中使用 sudo 权限尝试了 shell_exec,例如:

shell_exec('sudo mpg123 http://ice1.somafm.com/u80s-128-mp3 > /dev/null 2>&1  echo $!');

这有效,但需要注意的是该进程永远不会返回到服务器,因此客户端被卡住了,不允许它做出不同的选择。

我们最终决定打破 Web 服务器和 MPG123 程序之间的依赖关系。

我们创建了一个循环运行的 bash 脚本,读取文本命令文件的内容并在主进程级别提交批处理作业以运行 MPG123 程序。该脚本将在下一节中解释。

Web 服务器的工作是获取所选站并将相应的命令代码写入命令文件,以便 bash 脚本可以读取选择并执行该过程。

一个问题是文件访问的并发性,我们是否可以打开它以写入并同时读取以执行命令。是的,我们可以!!!

这是服务器 PHP 程序的一部分,它从客户端获取选择并将命令代码写入命令文件:

//Check if there is a command
if (isset($_GET["action"]))
{
   //Open file to write
   $myfile = fopen("runSelection.txt", "w");
   //Set command to stop current streaming
   fwrite($myfile, "4\n");
   //Make sure to flush buffer to file
   fclose($myfile);
   //Wait, maybe not that necessary
   sleep(1);
   //Select the next stream station
   if ($_GET["action"] == "selEighties")
   {
      $myfile = fopen("runSelection.txt", "w");
      fwrite($myfile, "3\n");
      fclose($myfile);
   }
   .
   .
   .

注意,我们首先检查客户端是否通过action属性发送了一个选择,然后我们用PHP函数fopen打开文件进行写入,然后编写命令代码4,即停止当前的MPG123作业,然后我们关闭文件刷新缓冲区并允许 bash 脚本读取和执行此命令有一个小的延迟(可能不需要)。

接下来,如果选择了一个站,则再次打开命令文件(fopen),写入相应的命令,关闭文件(刷新缓冲区)并等待下一次客户端选择。

这个过程保证了客户端/服务器执行的流畅,并且没有通过允许服务器访问内核进程命令而暴露任何可能的安全性。

Bash 脚本

bash 脚本具有让项目在 Web 界面上蓬勃发展的魔力。

该脚本扫描命令文件 runSelection.txt。当客户端请求站点时,PHP 服务器服务正在写入此文件。

脚本循环运行,直到选择退出命令 (2)

while [ $selection -ne 2 ]
do
    .
    .
    .
done

该脚本通过以下循环命令读取文件的每一行(仅一行)

while read line
do
   selection="$line"
   .
   .
   .
done < runSelection.txt

然后脚本检查选择,如果它与之前的选择不同,它会提交批处理文件以执行,例如

# if current selection is not the last read then execute
if [[ $selection -eq 3 ]] && [[ $lastSel -ne $selection ]]; then
   # Prepare command to execute in the background
   cmd="mpg123 http://ice1.somafm.com/u80s-128-mp3"
   # Execute command and assign process id to variable.
   nohup $cmd > /dev/null & PID=$!
   echo "$PID"
   # Remember last selection so it does not execute again.
   lastSel=selection
   exec4=0
fi

注意脚本保留了进程id,所以当停止命令(4)进入命令文件时,它可以杀死它,如下所示:

cmd="kill $PID"
echo "$cmd"
# Kill last submitted process
nohup $cmd > /dev/null

就是这样,bash 文件可以愉快地创建和删除进程,并且 Web 服务可以不间断地工作。

我们花了一些心思才想出解决方法,但如果您有一个想要批处理的过程,这可能是一个可能的解决方案。

最后,请注意我们选择使用 SomaFM 播放音乐,但您可以添加 MP3 歌曲库并享受乐趣。

享受!!

 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费