OLED Display
Figure 5. Argon mounted on Tripler with OLED.
Having demonstrated that we can blink a LED on the Argon, we now want to move onto something a bit more useful. The Argon will form the hub of the Mesh Security System and will connect to an OLED and MP3 shield to indicate system status. In Part 2 we will get the OLED and MP3 shields working.
As shown in Figure 5, connection is simple using the Featherwing Tripler. By mounting the shields horizontally rather than stacking them you can still easily see all the indication LEDs. You will have to solder the headers on the tripler and shields. Do the tripler first. I solder one pin and then check that the header is correctly positioned before soldering the rest. It is a lot easier to rectify an issue with only one pin soldered in place. Once you have completed soldering the headers on the tripler you can use this as a jig to hold the pins in place when soldering them to the shields. This will ensure that the shield pins line up with the headers on the tripler.
Figure 6. OLED Operational
The display board is 128x32 monochrome OLED which has 3 user buttons plus reset. This screen is made of 128x32 individual white OLED pixels and because the display makes its own light, no backlight is required. This reduces the power required to run the OLED and is why the display has such high contrast. The board uses a SSD1306 and connects via I2C (pins D0 and D1), so it is very pin frugal. As I2C is a shared bus you can have other shields which utilise I2C connected at the same time (as long as they have different I2C addresses). The three buttons use:
Button | Pin | Notes |
---|---|---|
A | D4 | No pull-up. Can't be used with Ethernet. |
B | D3 | 100K pull-up. Can't be used with Ethernet. |
C | D2 | No pull-up. |
The library is available in the Web IDE as oled-wing-adafruit and using the display from the Argon is easy. The library takes care of setting the appropriate input modes and debouncing the buttons for you.
I've reproduced my test code stub below. I always like to get each element of a project working before adding the next. This makes debugging much easier.
MP3 Shield
The MP3 Shield is shown in Figure 5 above. This is before the through hole headers have been soldered onto the shield. The shield version that we are using is the Adafruit Music Maker FeatherWing. This shield uses the the VS1053, an encoding/decoding (codec) chip that can decode a wide variety of audio formats such as MP3, AAC, Ogg Vorbis, WMA, MIDI, FLAC, WAV (PCM and ADPCM). This chip also allows you to adjust bass, treble, and volume digitally.
Figure 7. Argon Block Diagram (showing I/O).
Communication is via a SPI interface which allows audio to be played from an SD card. There's also a special MIDI mode that you can boot the chip into that will read 'classic' 31250 Kbaud MIDI data from the UART TX pin. The hardware SPI pins are needed whenever you are transmitting data from the SD card to the decoder chip. If you are using the wing in the special MIDI mode, they're not used.
D11: SPI MISO - connected to MISO - used by both the SD card and VS1053
D12: SPI MOSI - connected to MOSI - used by both the SD card and VS1053
D13: SPI SCK - connected to SCK - used by both the SD card and VS1053
The Adafruit VS1053 Library does include a constructor to define the SPI pins you want to use, but this doesn't help us because:
- The hardware SPI pins are already connected by the tripler; and
- The alternative SPI pins on the Argon are D2, D3 and D4 - which seem to be very popular with shield designers!
Figure 8. Adafruit Music Maker FeatherWing Shield.
Next are the control pins required to play music. From left to right, in Figure 9 below, they are:
MP3_DCS - this is the VS1053 data select pin
DREQ - this is the VS1053 data request interrupt pin
MP3_CS - this is the VS1053 chip select pin
SD_CS - this is the SD Card chip select pin
Figure 9. MP3 Control Pins.
Unfortunately the MP3 control pins connected (via the tripler) to the Argon conflict with the A, B and C buttons connected to D2, D3 and D4 from the OLED shield. Thankfully there is no conflict on pins D0 or D1, so we can still control the OLED with the MP3 shield in place. Obviously the designers of the two shields at Adafruit didn't talk to each other!
Figure 10. MP3 Shield Installed.
To summarise, the Argon pins used to control the MP3 shield are:
SD_CS = D2; // SD Card chip select pin
MP3_CS = D3; // VS1053 chip select pin (output)
DREQ = D4; // VS1053 Data request, ideally an Interrupt pin
MP3_DCS = D5; // VS1053 Data/command select pin (output)
SPI MISO = D11; // used by both the SD card and VS1053
SPI MOSI = D12; // used by both the SD card and VS1053
SPI SCK = D13; // used by both the SD card and VS1053
Figure 10 shows the MP3 shield in place on the tripler adjacent to the OLED shield. To give myself a bit more room, I removed the OLED shield while soldering the header pins to the MP3 shield. I again inserted the header pins into the tripler before soldering to make sure that everything lined up.
There are two versions of the Adafruit Music Maker, one includes an amplifier and the other just has a 3.5mm connection for headphones or powered speakers. In retrospect I should have got the one with the amplifier built in. Nevertheless I happen to have a Duinotech 2 x 3W amplifier, so I might as well use that. This is the red PCB shown in Figure 10. Before dealing with this, you will want to make sure that the MP3 shield is working.
Thankfully ScruffR has done the hard work of porting the Adafruit VS1053 Arduino library to work with Particle mesh boards. You will need to import this library and the SDFat library in order to get the shield working. This is easy, just search for the libraries in the Web IDE and then add them. Plug in some headphones (assuming you have the same version shield as I do) and you can use the code below to test the operation of your shield. You will obviously need to copy some mp3 files to SD card before you can play them. Make sure that the names of the files are in the 8.3 format or they wont be able to be played.
Duinotech 2 x 3W Amplifier
Rather than use the 3.5mm jack on the MP3 shield, we will connect directly to the Ground, Right and Left pins next to the headphone jack (Figure 11). They are line level, AC coupled outputs which are suitable for connection to an amplifier.
Figure 11. MP3 Shield Audio Out Pins.
The Duinotech 2 x 3W Class D Amplifier (Figure 12) has greater than 90% efficiency and typically delivers 3W into 4 ohm speakers (or 1.5W into 8 ohms). Its operating voltage range is 2.5 to 5.5 VDC.
The amplifier board uses the PAM8403 chip and power output will be determined by a combination of the input voltage supplied and output impedance. As we are using the regulated 3.3V from the Argon and 8 ohm speakers our expected power output from the amplifier is around 0.5W.
Figure 12. Duinotech 2 x 3W Amplifier.
The amplifier pin out description is provided in the table below.
Amplifier Pinout
|
|
Module
|
Function
|
R+/R-
|
Right Speaker
|
L-/L+
|
Left Speaker
|
GND
|
Ground Connection
|
+5V
|
Power Supply
|
5W
|
Shutdown Control
|
GND
|
Ground Connection
|
LIN
|
Left Audio In
|
GND
|
Ground for Audio
|
RIN
|
Right Audio In
|
Connection between the MP3 shield and amplifier is straight forward.
- MP3 Shield L and G connect to LIN and Audio GND on the amplifier.
- MP3 Shield R and G connect to RIN and Audio GND on the amplifier.
- R+/R- on the amplifier connect to the right speaker.
- L+/L- on the amplifier connect to the left speaker.
- +5V and GND on the amplifier connect to the 3.3V and GND pins on the Argon.
In Part 3 we will complete construction of the Argon Hub and 3D print an enclosure for it. We will then move onto configuring the Xenon's.