A while ago I needed a doorbell, so I hacked one together using a Raspberry Pi I had laying around. It was a temporary fix while I got around to building an Arduino based replacement. A month or so ago the SD card croaked, so it was time.

I have a bunch of Wemos D1 Mini's which would be the basis of my project and I also wanted it to play an actual sound file, so I'd ordered an I2S based Class-D Mono Amplifier from Adafruit.

I'd stumbled across a project using the same amplifier and they'd used a permissive license, so I didn't actually end up needing to write much of my own code. I however spent a number of hours trying to figure out why the sound was extremely distorted, only to note that I'd hooked up LRC to TX instead of D4.

Pin Connections

Adafruit I2S DAC ESP8266 D1 Mini Description
LRC GPIO2/TX1 LRCK D4 Left/Right audio
BCLK GPIO15 BCLK D8 I2S Clock
DIN GPIO03/RX0 DATA RX I2S Data
GAIN n/c n/c 9 dB gain
SD n/c n/c Stereo average
GND GND GND Ground
Vin BAT 5V 3.3/5V power

I've broken the Non Blocking WAV player into a separate library ESP8266-wavplay along with one for the Wav SPIFFS reader ESP8266-wavspiffs, which makes for a tiny amount of code to produce a functional doorbell.

#include "ESP8266Wavplay.h"

void setup()
{
  Serial.begin(115200);
  Serial.println("Booting");
  // Set D3 as Switch pin
  pinMode(D3, INPUT_PULLUP);

  // Setup WavPlay
  wavSetup();
  showDir();
}

void loop() {
  int state = digitalRead(D3);

  if ( state == 0 && !wavPlaying()) {
    wavStartPlaying("/doorbell.wav");
  }

  // WavPlay is non blocking, we need to call it to make
  // sure it keeps playing until file end.
  wavLoop();
}

You can find the project here and is already laid out as a PlatformIO project. If you've yet to come across PlatformIO and you do a lot with Arduino, it takes a lot of the pain out of things like managing dependencies, custom libraries, platform independent code etc.

Happy Hacking and may the force be with you.


This content is available for you to use for free, even commercially, under a Creative Commons Attribution 4.0 International License

If you wish to support my work, please tip me on gittip.


Comments

comments powered by Disqus