Installing the Wolfson DAC
Installing the Wolfson DAC card is pretty straightforward. It uses a set of sprung connectors to conenct to the P5 header of the Raspberry Pi, pushes on to the P1 header and fixes in place with a plastic screw. The screw is important to make sure the connectors are held against the P5. I didn’t bother with trying to set the DAC up with a stock Raspbian OS - Element 14 have an image file of a modified Raspbian with all modules etc set up from the get-go. It can be downloaded from here, though I found that the file wouldn’t unzip on my Mac, unless I used Keka, a third party archiver utility available from the App Store. There’s some discussion on the Element 14 discussion forums about the unzipping problem. I set up wifi and installed squeezelite as described in this tutorial - all pretty straightforward as I have a fair bit of Linux experience. I’m using an unbranded wifi USB stick that steadfastly refused to work with piCorePlayer - but it seems fine in Raspbian. In use, the Pi starts squeezelite when it boots, and it’s then visible to the LMS web interface and other squeezebox control apps such as SqueezePad and iPeng. I was using a terminal to shut the Pi down via the command line before powering down. This seemed less than ideal, so I investigated setting up a ‘shutdown’ push button switch for an easier and more orderly shutdown.3 Pin Header on the Wolfson DAC
The Wolfson DAC pretty much covers the main set of header pins, and makes three of these available via a three pin header on the card (referred in this thread).Wolfson_Card_J8-1:RPI_TX -> RPi: P1-08 - TXD0 (ALT0) - GPIO14 Wolfson_Card_J8-2:RPI_RX -> RPi: P1-10 - RXD0 (ALT0) - GPIO15 Wolfson_Card_J8-3:GND
[caption id="attachment_2527" align="alignleft" width="400"]Setting up the shutdown script.
Bearing in mind I’d never done any prior work with hardware interfaces, and never done any python work, this proved an interesting exercise! First, I installed RPi-GPIO:sudo apt-get update sudo apt-get -y install python-rpi.gpioI don’t recall installing the time and os Python modules, so I assume they are there by default. I copied the shutdown code (from here) and saved as /home/pi/scripts/shutdown2.py. Note that the comment lines indicate sources - all I had to do was to edit the pin numbers from the original to use Pin 14.
# This script will wait for a button to be pressed and then shutdown
# the Raspberry Pi.
# http://kampis-elektroecke.de/?page_id=3740
# http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio
# https://pypi.python.org/pypi/RPi.GPIO
import RPi.GPIO as GPIO
import time
import os
# we will use the pin numbering of the SoC, so our pin numbers in the code are
# the same as the pin numbers on the gpio headers
GPIO.setmode(GPIO.BCM)
# Pin 14 will be input and will have its pull up resistor activated
# so we only need to connect a button to ground
GPIO.setup(14, GPIO.IN, pull_up_down = GPIO.PUD_UP)
# ISR: if our button is pressed, we will have a falling edge on pin 14
# this will trigger this interrupt:
def Int_shutdown(channel):
# shutdown our Raspberry Pi
os.system("sudo shutdown -h now")
# Now we are programming pin 14 as an interrupt input
# it will react on a falling edge and call our interrupt routine "Int_shutdown"
GPIO.add_event_detect(14, GPIO.FALLING, callback = Int_shutdown, bouncetime = 2000)
# do nothing while waiting for button to be pressed
while 1:
time.sleep(1)To run the script at startup, I added this line to rc.local:
sudo python /home/pi/scripts/shutdown2.pyOne reboot, and voila! My first attempt to use Raspberry Pi GPIO pins was a success! I’ve now soldered the switch to a couple of push-on connectors which fit to the J8 pins 1 and 3 (GPIO14 and GND respectively), so it’s a little fragile in the absence of a proper case! Pressing the shutdown button shuts the system down. I suspect that a reset button connected to Header 6 would re-start the device from that state, but I’ve yet to investigate. I’m presently using this Pi as a small player to drive a pair of headphones - it sounds rather good. Here's a photo of the finished device: [caption id="attachment_2526" align="alignleft" width="1000"]