Sunday, November 25, 2012

RPi Changes


As promised here are the changes that I made to the RPi to accommodate the physical button that allows changing of the station being played.

1) add another user that will monitor for the button (adduser radiochange)
2) make changes to the sudoers... it should now have the following lines.
radio ALL=(radio)NOPASSWD:/usr/bin/doradio,/usr/bin/mpg123 *,/usr/bin/killall mpg123, /usr/bin/amixer *

www-data ALL=(radio)NOPASSWD:/usr/bin/doradio,/usr/bin/mpg123 *,/usr/bin/killall mpg123, /usr/bin/amixer *

radiochange ALL=(radiochange)NOPASSWD:/usr/bin/radioSwitch,/usr/bin/doradio,/usr/bin/mpg123 *,/usr/bin/killall mpg123, /usr/bin/amixer *


3) Create the switch monitor program (vi /usr/bin/radioSwitch) and put the following code in it:

# python3
# Monitor button on RPI
import RPi.GPIO as GPIO
import time
import subprocess
change_channel = 1
# use BCM GPIO
GPIO.setmode(GPIO.BCM)
# set up GPIO input pins
# (pull_up_down be PUD_OFF, PUD_UP or PUD_DOWN, default PUD_OFF)
GPIO.setup(1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# GPIO 0 & 1 have hardware pull ups fitted in the Pi so don't enable them
GPIO.setup(0, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(change_channel, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
print("RadioPI Monitoring for button press")
delay = range(0,5000)
dum = 0
while True:
 while GPIO.input(change_channel) != 0:
  time.sleep(0.07)
 print("Button Pressed")
 output = subprocess.Popen("/usr/bin/radioChange", shell=True)
 output.wait()
#finished a run so start again

4) Make the new program executable: chmod 755 /usr/bin/radioSwitch

5) Setup inittab to fire off the radioSwitch program, find the following line and comment it out.

#2:23:respawn:/sbin/getty 38400 tty2

Add the following line

2:2345:respawn:/bin/login -f radiochange tty2 /dev/tty2 2>&1


6) Change the doRadioScript.php...   replace the line

 $inName = trim($_GET["inName"]);

with

    if ($_GET["inName"] > "")
    {
      $inName = trim($_GET["inName"]);
    } else {
      $inName = trim($radioList[$nextStation][0]);
    }

7) Change the stationCommon.php script to the following:

<?php
        {
           $radioList[] = $tempArray;
           if (trim($tempArray[0]) == $currentStation)
           {
              $currentURL = trim($tempArray[1]);
              $stationPosition = $stationCount;
           }
           $stationCount++;
        }
    }
    fclose($file);
    $nextStation = $stationPosition + 1;
    if ($nextStation >= $stationCount) $nextStation = 0;
?>

8) There is also a bug in the current sound drivers so you eed to change the doRadio script... and make it look like the following (you could probably change the 2s to something less but I didn't try it)... and the amixer line just bumps up the volume.

sudo -uradio killall  mpg123
sleep 2s
sudo -uradio /usr/bin/amixer set PCM 9
sleep 2s
sudo -uradio /usr/bin/mpg123 -@ `cat /var/www/stationURL` &

I think that's all the changes.  If I think of anymore I'll post them.

No comments:

Post a Comment

Comments are moderated. We're only going to allow stuff that we find funny, interesting, or just plain for the heck of it. If you don't like that, feel free to leave.

Copyright Realm Laboratories, LLC