Page 1 of 1

Getting amplifier working.

Posted: Mon Jun 29, 2020 7:11 am
by Corsasri
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()


Re: Getting amplifier working.

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

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

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 7:33 am
by Corsasri
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.

Re: Getting amplifier working.

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

Corrected by original poster. Contribution now redundant.

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 7:53 am
by Corsasri
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.

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 8:00 am
by rpiMike
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

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 8:05 am
by Corsasri
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

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 8:38 am
by rpiMike
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()

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 9:50 am
by Corsasri
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.

Re: Getting amplifier working.

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

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

Re: Getting amplifier working.

Posted: Mon Jun 29, 2020 11:11 am
by Corsasri
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.