/*
Doorbell_Receiver
This sketch shows how to use the Arduino_Cloud
to make two Arduino Board talk to each other
and create a WiFi doorbell
Compatible boards:
Arduino/Genuino mkr1000
Arduino/Genuino Zero + WiFi shield
For a step-by-step tutorial visit:
https://create.arduino.cc/projecthub/Arduino_Genuino/doorbell-36646c
Created 02 April 2016
by Tommaso Laterza
This code code is in the public domain.
*/
#include <SPI.h>
#include <WiFi101.h>
#include <WiFiSSLClient.h>
#include <MQTT.h>
#include <SD.h>
#include <AudioZero.h>
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
/////// Wifi Settings ///////
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
// Arduino Cloud settings and credentials
const char userName[] = SECRET_USER_NAME;
const char deviceName[] = SECRET_DEVICE_NAME;
const char deviceId[] = SECRET_DEVICE_ID;
const char devicePsw[] = SECRET_DEVICE_PSW;
int status = WL_IDLE_STATUS;
volatile bool buttonPressed = false;
MQTTClient client;
WiFiSSLClient net;
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, pass);
client.begin("mqtt-dev.arduino.cc", 8883, net);
connect();
client.subscribe("/tommasltrz/DoorbellTransmitter/bell");
// setup SD-card
Serial.print("Initializing SD card...");
if (!SD.begin(6)) {
Serial.println(" failed!");
while (true);
}
Serial.println(" done.");
pinMode(4, INPUT);
attachInterrupt(4, buttonPressedCallback, RISING);
}
void connect() {
Serial.print("checking wifi...");
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network:
status = WiFi.begin(ssid, p);
delay(4000);
}
Serial.println("connecting...");
while (!client.connect(deviceName, deviceId, devicePsw)) {
Serial.print(".");
}
Serial.println("connected!");
}
void loop() {
client.loop();
if (buttonPressed) {
client.publish("/tommasltrz/DoorbellReciever/bell", "open");
Serial.println("publishing up");
buttonPressed = false;
delay(1000);
}
}
void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
if (payload.equals("ring")) {
AudioZero.begin(2 * 44100); // 44100kHz stereo => 88200 sample rate
File myFile = SD.open("test.wav"); // open wave file from sdcard
if (!myFile) {
Serial.println("error opening test.wav");
while (true);
}
Serial.print("Playing");
AudioZero.play(myFile);
Serial.println("End");
AudioZero.end();
}
}
void buttonPressedCallback() {
buttonPressed = true;
}