Thank you for your donation!


Instruction Guide Use hardware momentary switches to control moOde
#11
hello,

Thank you for this code lines!

I'm very intressed in this feature because I use to use Volumio with the HWbuttons plugin and I've discovered moode 5 beta. I want to moove to moode!
I'm trying to configure my Pi from your script, but I have a little problem:
- when I use "low" GPIO pin with 3.3v pins there is no reaction. do this script only works with high GPIO or is there a way to use the low ones and if it's possible what line must I modify?

I want to use a 3.5 tft screen and I only can use the 27 to 40 pins in order to plug the screen.


Thanks

Mothinos
Reply
#12
It would be easy enough to make a config screen for this.

Is this the complete source code for the feature?
Code:
#!/usr/bin/python
#coding: utf8
#script for moode audio GPIO buttons
#on playlist names no spaces

#import
import RPi.GPIO as GPIO
import sys
import time
import datetime
import os
import subprocess

# Set GPIO mode
GPIO.setmode(GPIO.BCM)

# Define the GPIO pins to be used
SW_PREV = 10
SW_NEXT = 11
SW_POWEROFF = 9
SW_PLAY = 12
SW_VOLUP = 20
SW_VOLDOWN = 26
SW_PL1 = 16
SW_PL2 = 13
# Adjust to the button characteristics if necessary
PRELL = 1000

# Code to manage buttons
GPIO.setup(SW_PREV,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_NEXT,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_POWEROFF,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_PLAY,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_VOLUP,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_VOLDOWN,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_PL1,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SW_PL2,GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Event procedures
def eSW_PREV(channel):
      subprocess.call(['mpc', 'prev' ])
      print str(datetime.datetime.now())[:19] + " previous"

def eSW_NEXT(channel):
      subprocess.call(['mpc', 'next' ])
      print str(datetime.datetime.now())[:19] + " next"

def eSW_POWEROFF(channel):
      subprocess.call(['mpc', 'stop' ])
      subprocess.call(['sudo', 'poweroff' ])
      print str(datetime.datetime.now())[:19] + " shutting down"

def eSW_PLAY(channel):
      subprocess.call(['mpc', 'toggle' ])
      print str(datetime.datetime.now())[:19] + " play"

def eSW_VOLUP(channel):
      subprocess.call(['/var/www/vol.sh', 'up 1' ])
      print str(datetime.datetime.now())[:19] + " volup"

def eSW_VOLDOWN(channel):
      subprocess.call(['/var/www/vol.sh', 'dn 1' ])
      print str(datetime.datetime.now())[:19] + " voldown"

def eSW_PL1(channel):
      subprocess.call(['mpc', 'load playlist1' ])
      print str(datetime.datetime.now())[:19] + " playlist 1"

def eSW_PL2(channel):
      subprocess.call(['mpc', 'load playlist2' ])
      print str(datetime.datetime.now())[:19] + " playlist 2"
     
# Event declarations
GPIO.add_event_detect(SW_PREV, GPIO.RISING, callback = eSW_PREV, bouncetime = PRELL)
GPIO.add_event_detect(SW_NEXT, GPIO.RISING, callback = eSW_NEXT, bouncetime = PRELL)
GPIO.add_event_detect(SW_POWEROFF, GPIO.RISING, callback = eSW_POWEROFF, bouncetime = PRELL)
GPIO.add_event_detect(SW_PLAY, GPIO.RISING, callback = eSW_PLAY, bouncetime = PRELL)
GPIO.add_event_detect(SW_VOLUP, GPIO.RISING, callback = eSW_VOLUP, bouncetime = PRELL)
GPIO.add_event_detect(SW_VOLDOWN, GPIO.RISING, callback = eSW_VOLDOWN, bouncetime = PRELL)
GPIO.add_event_detect(SW_PL1, GPIO.RISING, callback = eSW_PL1, bouncetime = PRELL)
GPIO.add_event_detect(SW_PL2, GPIO.RISING, callback = eSW_PL2, bouncetime = PRELL)

# Actual program sequence
while True:
  time.sleep(1)
The config screen would list the 8 events along with fields for GPIO pin number, Enable/Disable, and Playlist name for the two playlist options. Config would prolly be stored in a simple .conf file.
-Tim
Reply
#13
(03-25-2019, 01:20 PM)mothinos Wrote: hello,

Thank you for this code lines!

I'm very intressed in this feature because I use to use Volumio with the HWbuttons plugin and I've discovered moode 5 beta. I want to moove to moode!
I'm trying to configure my Pi from your script, but I have a little problem:
- when I use "low" GPIO pin with 3.3v pins there is no reaction. do this script only works with high GPIO or is there a way to use the low ones and if it's possible what line must I modify?

I want to use a 3.5 tft screen and I only can use the 27 to 40 pins in order to plug the screen.


Thanks

Mothinos
Hi,

May be Kent a.k.a. theoldpresbyope can answer that question. He is the one who helped with the script. I am sure he will read this and try to help.

Remy
Reply
#14
(03-25-2019, 01:20 PM)mothinos Wrote: ...
I'm trying to configure my Pi from your script, but I have a little problem:
- when I use "low" GPIO pin with 3.3v pins there is no reaction. do this script only works with high GPIO or is there a way to use the low ones and if it's possible what line must I modify?
...

Hi, @mothinos

First, let's make sure I understand your question. 

When interfacing to the GPIO, "low" and "high" usually refer to the state of the pin, with low being 0V and high 3V3, e.g., "low" and "high" refer to the voltage on the pin.

Is this what you mean or are you referring to the GPIO pin number itself?

Regards,
Kent
Reply
#15
Try @Cyanoazimin script from post #9 :-)
Reply
#16
Hi,

Here is screenie of new GPIO Config feature :-) The underlying code can be easily extended to support other actions. This interfaces with a modified version of @Cyanoazimin's nice script from post #9.

   

I'll need some volunteers to test this out because I'm w/o any hardware that has GPIO controlled buttons.

-Tim
Reply
#17
(03-26-2019, 10:53 PM)Tim Curtis Wrote: Hi,

Here is screenie of new GPIO Config feature :-) The underlying code can be easily extended to support other actions. This interfaces with a modified version of @Cyanoazimin's nice script from post #9.



I'll need some volunteers to test this out because I'm w/o any hardware that has GPIO controlled buttons.

-Tim

Tim, from the 1st post...
Quote:On the hardware side, you set your hardware button to connect the ground pin of your RPi with a GPIO pin of your choice.
So you should be able to strip the ends of a couple of dupont cables, connect the plug ends to ground and selected pin then briefly touch the bare ends together. 
Happy to test it here...
Reply
#18
(03-26-2019, 10:53 PM)Tim Curtis Wrote: Hi,

Here is screenie of new GPIO Config feature :-) The underlying code can be easily extended to support other actions. This interfaces with a modified version of @Cyanoazimin's nice script from post #9.



I'll need some volunteers to test this out because I'm w/o any hardware that has GPIO controlled buttons.

-Tim

Cool, that's great, but I think I think Random, Single, Power off/on are much more useful than playlist, especially the powerbutton.

Moode with buttons and pydPiper, that's a perfect local player.
Reply
#19
(03-26-2019, 11:41 PM)DRONE7 Wrote:
Quote:On the hardware side, you set your hardware button to connect the ground pin of your RPi with a GPIO pin of your choice.
So you should be able to strip the ends of a couple of dupont cables, connect the plug ends to ground and selected pin then briefly touch the bare ends together. 
Happy to test it here...

Hi. As explained here it actually depends on the "default pull status" of the GPIO: if the default pull status is low, you connect the gpio to the 3.3 volts pin (never connect with the 5 volts pin). If the default status is high, you connect to the ground. 
[Image: 2uypzex.jpg]
Remy
Reply
#20
Thanks for that Remy... that's much clearer !
Reply


Forum Jump: