OpenWrt/MightyOhm Wifi Radio: Difference between revisions
< OpenWrt
No edit summary |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== MightyOhm Wifi Radio == | |||
Listings from [http://mightyohm.com/blog/2008/10/building-a-wifi-radio-part-1-introduction/ MigthyOhm] | |||
== OpenWrt == | == OpenWrt == | ||
=== interface.sh === | === interface.sh === | ||
<blockquote> | <blockquote> | ||
Line 102: | Line 104: | ||
=== display2.sh === | |||
<blockquote> | |||
<pre> | |||
#! /bin/sh - | |||
# display2.sh - Wifi Radio LCD display routines, revision 2 | |||
# 01/29/08 Jeff Keyzer http://mightyohm.com | |||
# This shell script queries mpd for current song information and sends | |||
# relevant bits of it to the serial port, where an AVR-based LCD display | |||
# is waiting. | |||
# | |||
# For more information, visit | |||
# http://mightyohm.com/blog/tag/wifiradio/ | |||
# | |||
# This work is protected by the | |||
# Creative Commons Attribution-Share Alike 3.0 United States License. | |||
# http://creativecommons.org/licenses/by-sa/3.0/us/ | |||
# | |||
trap 'exit 1' SIGINT # exit on ctrl-c, useful for debugging | |||
#stty 9600 -echo < /dev/tts/0 # set serial port to 9600 baud | |||
# so we can talk to the AVR | |||
while true # loop forever | |||
do | |||
# get name of current song from the mpd server | |||
name=$(echo "currentsong" | nc localhost 6600 | grep -e "^Name: ") | |||
#echo $name | |||
echo $name > /dev/tts/0 # send it to the AVR for display | |||
# get the artist/title of the current song, if it exists | |||
title=$(echo "currentsong" | nc localhost 6600 | grep -e "^Title: ") | |||
if [ -z "$title" ] # check if a title was returned | |||
then | |||
title="Title: NULL" # no, let the AVR know not to display a title | |||
fi | |||
#echo $title | |||
echo $title > /dev/tts/0 # send it to the AVR for display | |||
sleep 1 # wait a while, this determines the base rate at which | |||
# the AVR display loops | |||
done | |||
</pre> | |||
</blockquote> | |||
=== mpd autostart === | |||
<blockquote> | |||
<pre> | |||
ln -s /etc/init.d/mpd /etc/rc.d/S93mpd | |||
</pre> | |||
</blockquote> | |||
=== /etc/init.d/AVR === | |||
<blockquote> | |||
<pre> | |||
#!/bin/sh /etc/rc.common | |||
# Copyright (C) 2008 OpenWrt.org | |||
START=99 | |||
start() { | |||
sleep 5 # make sure boot process is done, no more console messages | |||
/root/interface.sh | |||
} | |||
</pre> | |||
</blockquote> | |||
<blockquote> | |||
<pre> | |||
ln -s /etc/init.d/AVR /etc/rc.d/S99AVR | |||
</pre> | |||
</blockquote> | |||
=== /etc/inittab === | |||
<blockquote> | <blockquote> | ||
<pre> | <pre> | ||
::sysinit:/etc/init.d/rcS S boot | |||
::shutdown:/etc/init.d/rcS K stop | |||
#tts/0::askfirst:/bin/ash --login | |||
#ttyS0::askfirst:/bin/ash --login | |||
tty1::askfirst:/bin/ash --login | |||
</pre> | |||
</blockquote> | |||
=== /etc/sysctl.conf === | |||
<blockquote> | |||
<pre> | |||
# Disables the magic SysRq key | |||
kernel.sysrq = 0 | |||
</pre> | </pre> | ||
</blockquote> | </blockquote> | ||
Line 112: | Line 201: | ||
== AVR == | |||
<blockquote> | <blockquote> | ||
<pre> | <pre> | ||
Line 118: | Line 208: | ||
</blockquote> | </blockquote> | ||
<blockquote> | |||
<pre> | |||
</pre> | |||
</blockquote> | |||
<blockquote> | <blockquote> |
Latest revision as of 13:18, 27 September 2012
MightyOhm Wifi Radio
Listings from MigthyOhm
OpenWrt
interface.sh
#! /bin/sh - # interface.sh - Wifi Radio User Interface Script # 01/29/09 Jeff Keyzer http://mightyohm.com # # This shell script sets up a playlist in mpd and changes playlist entries # based on the position of a tuner knob connected to an AVR on the router's # serial port. # # The script expects the AVR to send data at 9600 baud (8N1) to the router, # in the format "tuner: value", one line at a time. # # This script also launches display.sh, the LCD display script. # # For more information, visit # http://mightyohm.com/blog/tag/wifiradio/ # # This work is protected by the # Creative Commons Attribution-Share Alike 3.0 United States License. # http://creativecommons.org/licenses/by-sa/3.0/us/ # Some configuration settings VOLUME=60 STATIONS=10 MAXADC=1024 ADCBIN=$(expr "(" $MAXADC / $STATIONS ")" + 1) trap 'kill $! ; exit 1' SIGINT # exit on ctrl-c, useful for debugging # kills the display.sh process before exiting stty 9600 -echo < /dev/tts/0 # set serial port to 9600 baud # so we can talk to the AVR # turn off local echo to make TX/RX directions # completely separate from each other # mpd setup mpc volume $VOLUME # adjust this to suit your speakers/amplifier mpc clear # clear current playlist # build a playlist, substitute your favorite radio stations here # the first line becomes station #1, and so on. mpc add http://relay3.slayradio.org:8000/ # Slay Radio mpc add http://scfire-dtc-aa01.stream.aol.com:80/stream/1046 # KCRW Simulcast mpc add http://208.101.28.234:8004 # Bassdrive mpc add http://205.188.215.232:8016 # di.fm Soulful House mpc add http://scfire-ntc-aa03.stream.aol.com:80/stream/1009 # di.fm Lounge mpc add http://205.188.215.225:8002 # di.fm Breaks mpc add http://scfire-ntc-aa03.stream.aol.com:80/stream/1025 # di.fm Electro House mpc add http://di-fm-01.quintex.com:8888 # di.fm NYC Exposure mpc add http://208.122.59.30:7234 # di.fm Future Synthpop mpc add http://scfire-mtc-aa03.stream.aol.com:80/stream/1026 # di.fm Progressive mpc playlist # show the resulting playlist oldstation=0 # var to keep track of what station we're playing # Tell the AVR we're ready to start doing stuff echo "AVR Start!\n" > /dev/tts/0 # launch LCD display routines in the background /root/display2.sh & while true # loop forever do inputline="" # clear input # Loop until we get a valid tuner position from the AVR until inputline=$(echo $inputline | grep -e "^tuner: ") do inputline=$(head -n 1 < /dev/tts/0) done value=$(echo $inputline | sed 's/tuner: //') # strip out the tuner: part #echo "$value" # compute playlist positon based on tuner value # the tuner range is 0 to MAXADC # the ADC range is separated into equally sized bins, each bin # is one station # station ends up being an integer from 1 to STATIONS # that determines what station to play station=$(expr $value / $ADCBIN + 1) # if station has changed, we need to change position in the playlist if [ "$station" -ne "$oldstation" ] then echo "Tuner Position: " $value echo "New station..." mpc play $station fi oldstation=$station # remember what station we're on so we know # if we need to change stations next time around done
display2.sh
#! /bin/sh - # display2.sh - Wifi Radio LCD display routines, revision 2 # 01/29/08 Jeff Keyzer http://mightyohm.com # This shell script queries mpd for current song information and sends # relevant bits of it to the serial port, where an AVR-based LCD display # is waiting. # # For more information, visit # http://mightyohm.com/blog/tag/wifiradio/ # # This work is protected by the # Creative Commons Attribution-Share Alike 3.0 United States License. # http://creativecommons.org/licenses/by-sa/3.0/us/ # trap 'exit 1' SIGINT # exit on ctrl-c, useful for debugging #stty 9600 -echo < /dev/tts/0 # set serial port to 9600 baud # so we can talk to the AVR while true # loop forever do # get name of current song from the mpd server name=$(echo "currentsong" | nc localhost 6600 | grep -e "^Name: ") #echo $name echo $name > /dev/tts/0 # send it to the AVR for display # get the artist/title of the current song, if it exists title=$(echo "currentsong" | nc localhost 6600 | grep -e "^Title: ") if [ -z "$title" ] # check if a title was returned then title="Title: NULL" # no, let the AVR know not to display a title fi #echo $title echo $title > /dev/tts/0 # send it to the AVR for display sleep 1 # wait a while, this determines the base rate at which # the AVR display loops done
mpd autostart
ln -s /etc/init.d/mpd /etc/rc.d/S93mpd
/etc/init.d/AVR
#!/bin/sh /etc/rc.common # Copyright (C) 2008 OpenWrt.org START=99 start() { sleep 5 # make sure boot process is done, no more console messages /root/interface.sh }
ln -s /etc/init.d/AVR /etc/rc.d/S99AVR
/etc/inittab
::sysinit:/etc/init.d/rcS S boot ::shutdown:/etc/init.d/rcS K stop #tts/0::askfirst:/bin/ash --login #ttyS0::askfirst:/bin/ash --login tty1::askfirst:/bin/ash --login
/etc/sysctl.conf
# Disables the magic SysRq key kernel.sysrq = 0