Corsasri
Posts: 99
Joined: Sat Mar 07, 2015 9:40 am

Getting amplifier working.

Mon Jun 29, 2020 7:11 am

Hopefully this is my last bit of help needed. I have a Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A https://www.adafruit.com/product/3006
How do I go about getting it working with my already created script listed below. And how can I adjust the volume using a keyboard.
My RPI is running the script using Rc.local.

Code: Select all

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
import random

GPIO.setmode(GPIO.BOARD)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP)

os.system ("omxplayer --no-osd --loop --win '0 0  707 475' /home/pi/mytracker/video/still.mp4 &")

def blink(ledpin):
    GPIO.output(ledpin,GPIO.HIGH)
    time.sleep(float(random.randrange(1,10,1))/10)
    GPIO.output(ledpin,GPIO.LOW)
    time.sleep(float(random.randrange(1,10,1))/10)

def play_video1():
    print ("GPIO11")
    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00dB --win '0 0 707 475' -r -o local /home/pi/mytracker/video/1.mp4 &")
    start_time = time.time()
    while (GPIO.input(11) == False) and (time.time()-start_time < 178):
        blink(13)

    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/mytracker/video/still.mp4 &")

def play_video2():
    print ("GPIO15")
    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00db --win  '0 0 707 475' -r -o local  /home/pi/mytracker/video/2.mp4 &")
    start_time = time.time()
    while (GPIO.input(15) == False) and (time.time()-start_time < 78):
        blink(13)

    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/mytracker/video/still.mp4 &")

def play_video3():
    print ("GPIO7")
    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00db --win  '0 0 707 475' -r -o local  /home/pi/mytrackervideo/3.mp4 &")
    start_time = time.time()
    while (GPIO.input(7) == False) and (time.time()-start_time < 1195):
        blink(13)

    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/mytracker/video/still.mp4 &")

def play_video4():
    print ("GPIO16")
    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00dd --win '0 0 707 475' -r -o local /home/pi/mytracker/video/4.mp4 &")
    start_time = time.time()
    while (GPIO.input(16) == False) and (time.time()-start_time < 178): 
        blink(13)

    print ("sudo killall omxplayer.bin")
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/mytracker/video/still.mp4 &")



while True:
    input_state = GPIO.input(11)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(11)
        if input_state == False:
            play_video1()

    input_state = GPIO.input(15)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(15)
        if input_state == False:
            play_video2()

    input_state = GPIO.input(7)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(7)
        if input_state == False:
            play_video3()

    input_state = GPIO.input(16)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(16)
        if input_state == False:
            play_video4()
    

GPIO.cleanup()
pygame.quit()

Last edited by Corsasri on Mon Jun 29, 2020 7:51 am, edited 3 times in total.

User avatar
rpiMike
Posts: 1340
Joined: Fri Aug 10, 2012 12:38 pm
Location: Cumbria, UK

Re: Getting amplifier working.

Mon Jun 29, 2020 7:17 am

The omxplayer wrapper allows volume control.

https://python-omxplayer-wrapper.readth ... en/latest/

Corsasri
Posts: 99
Joined: Sat Mar 07, 2015 9:40 am

Re: Getting amplifier working.

Mon Jun 29, 2020 7:33 am

rpiMike wrote:
Mon Jun 29, 2020 7:17 am
The omxplayer wrapper allows volume control.

https://python-omxplayer-wrapper.readth ... en/latest/
Thanks for that info about omxplaer. But still need to figure out how to get the amp working.

User avatar
B.Goode
Posts: 10191
Joined: Mon Sep 01, 2014 4:03 pm
Location: UK

Re: Getting amplifier working.

Mon Jun 29, 2020 7:40 am

Fixed Code markup for you...

Corrected by original poster. Contribution now redundant.
Last edited by B.Goode on Mon Jun 29, 2020 10:49 am, edited 1 time in total.

Corsasri
Posts: 99
Joined: Sat Mar 07, 2015 9:40 am

Re: Getting amplifier working.

Mon Jun 29, 2020 7:53 am

B.Goode wrote:
Mon Jun 29, 2020 7:40 am
Fixed Code markup for you...

Code: Select all

 
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
import random

GPIO.setmode(GPIO.BOARD)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP)

os.system ("omxplayer --no-osd --loop --win '0 0  707 475' /home/pi/video/still.mp4 &")

def blink(ledpin):
    GPIO.output(ledpin,GPIO.HIGH)
    time.sleep(float(random.randrange(1,10,1))/10)
    GPIO.output(ledpin,GPIO.LOW)
    time.sleep(float(random.randrange(1,10,1))/10)

def play_video1():
    print "GPIO11"
    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00dB --win '0 0 707 475' -r -o local /home/pi/video/1.mp4 &")
    start_time = time.time()
    while (GPIO.input(11) == False) and (time.time()-start_time < 178):
        blink(13)

    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/video/still.mp4 &")

def play_video2():
    print "GPIO15"
    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00db --win  '0 0 707 475' -r -o local  /home/pi/video/2.mp4 &")
    start_time = time.time()
    while (GPIO.input(15) == False) and (time.time()-start_time < 78):
        blink(13)

    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/video/still.mp4 &")

def play_video3():
    print "GPIO7"
    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00db --win  '0 0 707 475' -r -o local  /home/pi/video/3.mp4 &")
    start_time = time.time()
    while (GPIO.input(7) == False) and (time.time()-start_time < 1195):
        blink(13)

    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/video/still.mp4 &")

def play_video4():
    print "GPIO16"
    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --vol +450.00dd --win '0 0 707 475' -r -o local /home/pi/video/4.mp4 &")
    start_time = time.time()
    while (GPIO.input(16) == False) and (time.time()-start_time < 178): 
        blink(13)

    print "sudo killall omxplayer.bin"
    os.system("sudo killall omxplayer.bin")
    os.system ("omxplayer --no-osd --loop --win '0 0 707 475' -o local /home/pi/video/still.mp4 &")



while True:
    input_state = GPIO.input(11)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(11)
        if input_state == False:
            play_video1()

    input_state = GPIO.input(15)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(15)
        if input_state == False:
            play_video2()
    input_state = GPIO.input(7)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(7)
        if input_state == False:
            play_video3()

    input_state = GPIO.input(16)
    if input_state == False:
        time.sleep(0.5)
        input_state = GPIO.input(16)
        if input_state == False:
            play_video4()
    

GPIO.cleanup() 
Thanks for that, think it was because i was using my Iphone. Changed the code myself in first post.

User avatar
rpiMike
Posts: 1340
Joined: Fri Aug 10, 2012 12:38 pm
Location: Cumbria, UK

Re: Getting amplifier working.

Mon Jun 29, 2020 8:00 am

Doesn’t that amp basically have fixed amplification? Changing the analogue audio out volume with omxplayer will effectively change the volume output by the amp.

Edit: oh it’s I2S

Corsasri
Posts: 99
Joined: Sat Mar 07, 2015 9:40 am

Re: Getting amplifier working.

Mon Jun 29, 2020 8:05 am

rpiMike wrote:
Mon Jun 29, 2020 7:17 am
The omxplayer wrapper allows volume control.

https://python-omxplayer-wrapper.readth ... en/latest/
When i try to install i get a error using this command. sudo apt-get update && sudo apt-get install -y libdbus-1{,-dev}

error below. Unable to locate package libdbus-1

pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get install -y libdbus-1{,-dev} Hit:1 http://raspbian.raspberrypi.org/raspbian buster InRelease
Hit:2 http://archive.raspberrypi.org/debian buster InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libdbus-1

User avatar
rpiMike
Posts: 1340
Joined: Fri Aug 10, 2012 12:38 pm
Location: Cumbria, UK

Re: Getting amplifier working.

Mon Jun 29, 2020 8:38 am

It seems you just need libdbus-1-dev:

Code: Select all

sudo apt install -y libdbus-1-dev
pip3 install omxplayer-wrapper
Example:

Code: Select all

from omxplayer.player import OMXPlayer
import time

player = OMXPlayer('/opt/vc/src/hello_pi/hello_video/test.h264')
time.sleep(5)
player.quit()

Corsasri
Posts: 99
Joined: Sat Mar 07, 2015 9:40 am

Re: Getting amplifier working.

Mon Jun 29, 2020 9:50 am

rpiMike wrote:
Mon Jun 29, 2020 8:38 am
It seems you just need libdbus-1-dev:

Code: Select all

sudo apt install -y libdbus-1-dev
pip3 install omxplayer-wrapper
Example:

Code: Select all

from omxplayer.player import OMXPlayer
import time

player = OMXPlayer('/opt/vc/src/hello_pi/hello_video/test.h264')
time.sleep(5)
player.quit()
Thanks rpimike for that that installed. But do you know how i get the amp to produce the sound ? what do i need to add to my script.

User avatar
rpiMike
Posts: 1340
Joined: Fri Aug 10, 2012 12:38 pm
Location: Cumbria, UK

Re: Getting amplifier working.

Mon Jun 29, 2020 9:53 am

Have you followed adafruit's guide?

https://learn.adafruit.com/adafruit-max ... d-mono-amp

Corsasri
Posts: 99
Joined: Sat Mar 07, 2015 9:40 am

Re: Getting amplifier working.

Mon Jun 29, 2020 11:11 am

rpiMike wrote:
Mon Jun 29, 2020 9:53 am
Have you followed adafruit's guide?

https://learn.adafruit.com/adafruit-max ... d-mono-amp
I have installed the package required in the link and yes it produces sound. But can you maybe explain how i get it to work with my original script. because the links shows it working with desktop ui. or is the amp program loaded automatically when the rpi boots into console.

Return to “Beginners”