This commit is contained in:
2026-02-12 21:00:02 -08:00
parent 77f8236347
commit 8bdbf227ca
1141 changed files with 1010880 additions and 2 deletions

View File

@@ -0,0 +1,113 @@
/**
* @file communication-mqtt-send.ino
* @author Phil Schatzmann
* @brief Send Audio File to MQTT.
* I am using the ArduinoMQTTClient library from Arduino provided by the library manager.
* We can just copy the audio data to the MQTT client!
* @version 0.1
* @date 2023-09-07
*
* @copyright Copyright (c) 2023
*/
#include "WiFi.h"
#include "ArduinoMqttClient.h"
#include "AudioTools.h"
#define SIZE 1024
#define N 100
// Communication
const char* ssid = "SSID"; // your network SSID (name)
const char* password = "PASSWORD"; // your network password (use for WPA, or use as key for WEP)
const char* broker = "test.mosquitto.org";
const char* topic = "audio.wav";
int port = 1883;
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
// Audio
AudioInfo info(8000, 1, 16);
WhiteNoiseGenerator<int16_t> noise(32000); // subclass of SoundGenerator with max amplitude of 32000
GeneratedSoundStream<int16_t> in_stream(noise); // Stream generated from noise
EncodedAudioStream out_stream(&mqttClient, new WAVEncoder()); // encode as wav file
StreamCopy copier(out_stream, in_stream, SIZE); // copies sound to MQTT client
// Connect to Wifi
void connectWIFI() {
// attempt to connect to WiFi network:
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println("You're connected to the network");
Serial.println();
}
// Connect to MQTT Server
void connectMQTT() {
// You can provide a unique client ID, if not set the library uses Arduino-millis()
// Each client must have a unique client ID
mqttClient.setId("AudioTools");
// You can provide a username and password for authentication
// mqttClient.setUsernamePassword("username", "password");
Serial.print("Attempting to connect to the MQTT broker: ");
Serial.println(broker);
if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
stop();
}
Serial.println("You're connected to the MQTT broker!");
Serial.println();
}
// Send audio to MQTT Server
void sendMQTT() {
// make sure that we write wav header
out_stream.begin(info);
// send message, the Print interface can be used to set the message contents
mqttClient.beginMessage(topic, SIZE * N, true);
// copy audio data to mqtt: 100 * 1024 bytes
copier.copyN(N);
mqttClient.endMessage();
}
void setup() {
// Initialize logger
Serial.begin(115200);
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
// connect
connectWIFI();
connectMQTT();
// setup audio
noise.begin(info);
in_stream.begin(info);
// send Audio
sendMQTT();
}
void loop() {
// call poll() regularly to allow the library to send MQTT keep alives which
// avoids being disconnected by the broker
mqttClient.poll();
delay(1000);
}