• Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
RetroPie forum home
  • Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

Volume Control startup script

Scheduled Pinned Locked Moved Help and Support
volumecontrolstartupemulationstaion
6 Posts 2 Posters 1.5k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B
    bruceiow
    last edited by 17 Dec 2017, 10:30

    Hi All,

    Firstly I am running RPi 4.3 on a pi3 with a hifiberry mini amp and rotary encoder. What I am trying to do is get a python script to run on startup of emulationstation and then silently monitor the GPIO ports my encoder is attached to and then increase/decrease alsaaudio volume as required.

    So I have coded it up ok, when I run my script on the command line I can get the script to print out the current alsa volume and then set a new volume.

    What I am struggling with is how to get that script to initiate on startup and then run quietly. I added a line to rc.local that calls the script as I would on the command line. When emulation station boots it clearly calls that script as it prints out the volume ok and any tweaks to the encoder prints out to screen. However, the execution of emulation station halts. I took out of the script all of the print code incase that was causing it, but not it isn't that.

    Should I be rewriting this as a daemon or something and calling that instead?

    M 1 Reply Last reply 17 Dec 2017, 11:55 Reply Quote 0
    • M
      mitu Global Moderator @bruceiow
      last edited by 17 Dec 2017, 11:55

      @bruceiow Post the contents of the file where you added your script (/etc/rc.d/rc.local ?)

      1 Reply Last reply Reply Quote 0
      • B
        bruceiow
        last edited by 17 Dec 2017, 12:08

        Hi ya,

        In m rc.local I put this line prior to exit 0

        python /home/pi/encoder.py
        

        This is the content of encoder.py:

        from RPi import GPIO
        from time import sleep
        import alsaaudio
        clk = 22
        dt = 23
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(clk, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
        GPIO.setup(dt, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
        m = alsaaudio.Mixer()
        vol = m.getvolume()
        vol1 = iter(vol)
        counter = vol1.next()
        clkLastState = GPIO.input(clk)
        try:
            while True:
                    clkState = GPIO.input(clk)
                    dtState = GPIO.input(dt)
                    if clkState != clkLastState:
                            if dtState != clkState:
                               if counter < 100:
                                    counter += 1
                            else:
                               if counter > 0:
                                    counter -= 1
                            print counter
                            m.setvolume(counter)
                    clkLastState = clkState
                    sleep(0.01)
        finally:
            GPIO.cleanup()
        
        M 1 Reply Last reply 17 Dec 2017, 12:49 Reply Quote 0
        • M
          mitu Global Moderator @bruceiow
          last edited by mitu 17 Dec 2017, 12:49

          @bruceiow Add an & at the end of the command you introduced, so the code is executed in background and the script does not block waiting for the program output:

          python /home/pi/encoder.py 2>/dev/null 1>&2 &
          

          The more elegant solution would be to create a service for the script, something similar to https://www.raspberrypi-spy.co.uk/2015/10/how-to-autorun-a-python-script-on-boot-using-systemd/. This way you can start/stop the service when needed.

          1 Reply Last reply Reply Quote 0
          • B
            bruceiow
            last edited by 17 Dec 2017, 15:24

            Thank you, that ambersand got it moving. I think I will revisit my code again as it now boots in ok, but it isn't running the code yet. I'll try the service route :)

            1 Reply Last reply Reply Quote 0
            • B
              bruceiow
              last edited by 18 Dec 2017, 10:26

              Well I got it working :-)

              I have created a repo on git incase anyone else needs to do this:

              https://github.com/bruceiow/rPiVolumeControl

              1 Reply Last reply Reply Quote 0
              6 out of 6
              • First post
                6/6
                Last post

              Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

              Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.

                This community forum collects and processes your personal information.
                consent.not_received