找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1126|回复: 7

基于openwrt的网络收音机按钮版本适合老人使用20230227更新

[复制链接]
发表于 2023-2-23 11:44 | 显示全部楼层 |阅读模式
本帖最后由 xinyu1727 于 2023-3-2 21:55 编辑

事件背景:其实这个按钮版的网络收音机是给爷爷做的,从小有这个听广播的爱好也是因为爷爷的影响,这个冬天看到他因为闲暇无事可做,那么冷的天也助着拐杖往屋外走,想必老人家也是呆不住吧,老人本有很多年的收听电台的爱好,但房间里的调频广播信号已经不能像以前在外面果园的信号质量了!而自己也一直有这个爱好用路由开发网络收音机,于是就有了做个按钮版本的网络收音机的想法!

过往相关帖子:
AR9344/AR9341方案的无线音乐播放器(2020320更新) https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=1024286
AR9344+AR8035+AR9382千兆双频AP音乐推送网络收音机固件 https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=4062855
根据想法需要做的构思:
AR934x方案(AR9341、AR9342、AR9344)的老旧路由器(比如水星MW300R V3/V4和/迅捷FW300 V4和TP841v8/tp842v2/TP843/TP941V6CN/百米HQ55等等很多很多),
利用外壳上的LED灯做按钮、I2S接口、保留一两个LED即可,以下做了两个改造案例,所有LED全部拆掉,对接自己画的PCB按钮操作面板



1,画PCB的按钮面板
3个按钮控制音量和播放/停止,面板底部为PCM5102A的I2S音频解码芯片(因为个人不太喜欢用USB声卡,也因为这个方案的路由算是过时老旧家用路由比较少有USB口的)
把原有路由器的8个LED灯的端口全部用上   





2,PCB打板焊接
   

用的4脚RGB灯,占用2个路由处理器AR934x的io口system灯一个,wlan灯一个,还有一个灯预留吧



3,路由盖板开孔,固定按钮面板
本次使用的机器是百米路由的HQ55,128M内存和16M闪存,25包邮买了两三年了吧!小音箱是淘来的,8块一个,全频喇叭分量足,音质超棒的
还有个水星MW300R V4,之前10块一个包邮的买了好几个慢慢玩,玩坏了不心疼,当然了,原有硬件没办法直接刷op,提前改好的64M+8M(8M够用了,还有剩余呢)


这个PCB按钮面板只是按钮部分和I2S音频解码电路部分,推动这个小音音箱接耳机接口是行不通的,所以内置了一个小小的功放板(TC8002D芯片的D类功放,成品试听效果也是很棒的,拇指头那么大),功放模块接的USB的5V或者路由本身没有USB5V的就再加个12v-5v降压模块最好有2.5A以上的,




4,编译固件,用的syb999的CC源码,仓库地址https://github.com/syb999/openwrt-15.05
AR934x路由方案可用的I2S音频驱动两年前已经分享给他加入他的源代码里去了,有兴趣玩路由音箱的小伙伴可以直接下载使用
主要加载mpd-mini(播放网络电台)和mpc(mpd播放器命令控制端),alsa-utils(音量控制)
建立mpd.conf文件/etc/mpd.conf内容如下:

music_directory         "/etc/mpd/music/"
playlist_directory      "/etc/mpd/playlists"
db_file                 "/etc/mpd/database"
log_file                "/tmp/mpd.log"
pid_file                "/tmp/mpd.pid"
state_file              "/tmp/mpd.state"
user                    "root"
group                   "users"
bind_to_address         "any"
port                    "6600"
audio_output {
        type                "alsa"
        name                "ALSA"
        format          "96000:24:2"
        device                "hw:AK4430"        # optional
        mixer_type      "software"        # optional
        mixer_device        "default"        # optional
        mixer_control        "PCM"        # optional
        mixer_index        "0"                # optional
}
filesystem_charset              "UTF-8"

因为openwrt原有的代码的网口的led已经占用了,现在要把这6个GPIO腾出来才能用于I2S音频输出,还有按钮输入端口,mach-xxxx.c文件需要修改
GPIO端口号不变,重新定义端口用途


依葫芦画瓢,新增button按钮



关闭网口占用的LED



按钮控制换台是使用的button驱动检测按钮状态来触发执行一个脚本,可参考/etc/rc.button/reset脚本,
播放/换台/停止脚本,按钮复用,长按为停止,命名为power,也可以命名为其他随你喜好,但调用这些脚本的定义在gpio-button-hotplug/src/gpio-button-hotplug.c里面,并且名字要跟上面button注册对应上,自己研究



音量加按钮脚本,按钮复用,长按2秒为音量65%,命名为rfkill,也可以命名为其他随你喜好,但调用这些脚本的定义在gpio-button-hotplug/src/gpio-button-hotplug.c里面,并且名字要跟上面button注册对应上,自己研究



音量减按钮脚本,按钮复用,长按2秒为静音,命名为BTN_2,也可以命名为其他随你喜好,但调用这些脚本的定义在gpio-button-hotplug/src/gpio-button-hotplug.c里面,并且名字要跟上面button注册对应上,自己研究


播放/换台/进程守护脚本
其实这个脚本也是syb999大佬热心帮忙做的,再自己增加的部分内容,再次谢过哈!
脚本命名和放置路径为/etc/rc.button/addmp3

#!/bin/sh

prefix="http://lhttp.qingting.fm/live/"
suffix="/64k.mp3"

FILE="/tmp/addmp3.count.tmp"

if [ ! -f "$FILE" ];then
        echo 1 > /tmp/addmp3.count.tmp
fi

count="$(cat $FILE)"

if [ $count -gt 1 ];then
        echo $(expr $count + 1) > /tmp/addmp3.count.tmp
        count=$count
fi

if [ $(busybox ps | grep addmp3 | grep -v grep | awk '{print$1}' | wc -l) -gt 2 ];then
        kill -9 $(busybox ps | grep addmp3 | grep -v grep | head -n1 | awk '{print$1}')
fi

ralist="4804 20500149 4915 5022107 20500150 15318569 20210755 20207761 20026 5022405 20091 15318341 20071 20697 1756 1754 4875 1753 20769 20767 1763 4599 1762 20555 20861 1670 20571 1757 21043 20771 5042 1759 20211621 5044 5021920 20211626 15318330 1259 1270 1278 1260 4955 1271 1254 1272 20192 15318432 468 469 1277 5021523 5017 1275 5021725 1110 4864 4027 1739 1738 336 332 4938 2803 4054 2783 4963 2779 2801 1163 4866 1134 1140 4878 20450 1862 20010 5009 5008 5022283 5022610 21001 1758 4581 20212227 4873 1612 274 273 267 268 276 1676 1673 1674 1675 1677 4956 20176 4956 5022537 1675 20320 4014 15318631 4865 20839 15318631"

total=$(echo $ralist | sed 's/ /\n/g' | wc -l)


        if [ $count -gt $total ];then
                count=1
                echo $count > /tmp/addmp3.count.tmp
        fi
        target="$(echo $ralist | cut -d ' ' -f $count)"
        theurl="${prefix}${target}${suffix}"
        mpc clear && mpc add $theurl && mpc play
        count=$(expr $count + 1)
        echo $count > /tmp/addmp3.count.tmp
while true;do
mpc1=$(mpc | grep -E "playing" | awk -F ' ' {'print $3'} | awk -F / {'print $1'} | awk -F : {'print $2'})
sleep 2
mpc2=$(mpc | grep -E "playing" | awk -F ' ' {'print $3'} | awk -F / {'print $1'} | awk -F : {'print $2'})
if [ "$mpc1" = "$mpc2" ]; then
echo 1 > /sys/class/leds/tp-link:green:system/brightness && echo 0 > /sys/class/leds/tp-link:green:wlan/brightness && echo -e "$(date +%F%n%T) $theurl play error\n" >> /tmp/radio.tmp && mpc clear && mpc add $theurl && mpc play
else
echo 1 > /sys/class/leds/tp-link:green:wlan/brightness
fi
done

这个脚本可以实现播放按钮连续换台,计数达到电台总数之后又从头开始顺序选台播放,并且mpd播放进程守护,按一次播放新的电台如果播放失败,点亮红色sys系统指示灯,并且再次尝试播放,播放成功后红色sys灯熄灭并且绿色wlan灯亮,网络断开后变成红灯尝试重新播放,网络恢复后继续播放!这个比较直观是否网络异常或者电台失效

5、其实还有一个想法还没实现
就是在此成品基础上再增加一个LCD 12864,显示音量和播放时间,WAN口IP地址,当前日期时间,网上相关的帖子也有I2C接口的,也有用TTL接口方案的

给tp-link wr941n增加一个液晶屏,散热片和USB口 https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=50946

个人感觉这个可行性比较高,不需要增加单片机,把里面的C代码交叉编译成执行文件,丢到路由器里让它执行就可以了,后续参考一下试试能不能整出来,但是现在交叉编译环境还没弄好,毕竟不是专业搞linux还是嵌入式哈


PCB按钮面板的PCB资料有需要的话,晚点传上来分享


20230227更新播放/换台脚本,直接读取syb999制作的app:luci-app-autodl里面的电台列表文件audurllist,方便自己喜欢的电台更新维护:

#!/bin/sh

audurllist="/usr/autodl/audurllist"
FILE="/tmp/addmp3.count.tmp"

if [ ! -f "$FILE" ];then
        echo 1 > /tmp/addmp3.count.tmp
fi

count="$(cat $FILE)"

if [ $count -gt 1 ];then
        echo $(expr $count + 1) > /tmp/addmp3.count.tmp
        count=$count
fi

if [ $(busybox ps | grep addmp3 | grep -v grep | awk '{print$1}' | wc -l) -gt 2 ];then
        kill -9 $(busybox ps | grep addmp3 | grep -v grep | head -n1 | awk '{print$1}')
fi

ralist="$(cat $audurllist)"
total=$(echo $ralist | sed 's/ /\n/g' | wc -l)

        if [ $count -gt $total ];then
                count=1
                echo $count > /tmp/addmp3.count.tmp
        fi
        target="$(echo $ralist | cut -d ' ' -f $count | sed 's/.mp3.*/\.mp3/')"
        theurl="${target}"
        mpc clear && mpc add $theurl && mpc play
        count=$(expr $count + 1)
        echo $count > /tmp/addmp3.count.tmp
while true;do
mpc1=$(mpc | grep -E "playing" | awk -F ' ' {'print $3'} | awk -F / {'print $1'} | awk -F : {'print $2'})
sleep 2
mpc2=$(mpc | grep -E "playing" | awk -F ' ' {'print $3'} | awk -F / {'print $1'} | awk -F : {'print $2'})
if [ "$mpc1" = "$mpc2" ]; then
echo 1 > /sys/class/leds/tp-link:green:system/brightness && echo 0 > /sys/class/leds/tp-link:green:wlan/brightness && echo $(date +%F%n%T) $theurl play error >> /tmp/radio.tmp && mpc clear && mpc add $theurl && mpc play
else
echo 1 > /sys/class/leds/tp-link:green:wlan/brightness
fi
done

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 4恩山币 +7 收起 理由
roto + 2 感谢你的分享,无论怎样,你都是最无私的人.
long1983 + 2 这么好的东西必须支持,
gaze + 2 太牛批了!!动手能力强,学习楼主
有什么奇怪 + 1 感谢你的分享,无论怎样,你都是最无私的人.

查看全部评分

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2023-2-23 11:52 | 显示全部楼层
能用自己的技能 爱好 给亲人做些什么 真的太帅了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-2-23 12:09 | 显示全部楼层
楼主写的非常好,顶楼主一个,向楼主思考。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-2-23 12:21 | 显示全部楼层
这个太厉害了  
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-2-23 12:23 | 显示全部楼层
能不能做成一个插件 配合APP 这样就不用硬改了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-23 12:27 | 显示全部楼层
heisjnn 发表于 2023-2-23 12:23
能不能做成一个插件 配合APP 这样就不用硬改了

现成的mpd客户端也能播放,适合我们这些人,老人适合按钮操作,即便这样也需要硬改,接I2S,功放电路音箱什么的
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-2-23 13:57 | 显示全部楼层
这是真大牛啊,膜拜一下
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-2-24 14:04 | 显示全部楼层
楼主实在太厉害了~小弟佩服啊
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-9-28 13:03

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表