Important
This is a work-in-progress ESP32 port of the GibberLink library for transmitting data over audio waves. While basic functionality is working, some features may be incomplete or subject to change.
ESP32 GibberLink is an Arduino library that enables data transmission over audio waves using ESP32 microcontrollers. It's a port of the original GibberLink project, specifically optimized for ESP32's hardware capabilities.
Keywords: ESP32, Arduino, Audio Communication, Data Transmission, I2S, DAC, Wireless Communication, ESP32 Library, Audio Protocol, ESP32 Projects
🚧 Under Development 🚧
- Basic functionality is implemented
- Some features may be incomplete
- API may change in future versions
- Testing and optimization ongoing
This project requires the following libraries to be installed in your Arduino IDE:
- ESP32 Arduino Core - Required for ESP32 support
- ArduinoJson - For JSON handling in the web interface
- ESPAsyncWebServer - For the web interface
- AsyncTCP - Required by ESPAsyncWebServer
- Open Arduino IDE
- Go to Tools -> Manage Libraries
- Search for and install each library listed above
- For ESP32 Arduino Core, follow the official installation guide
- Data transmission over audio waves
- Web interface for sending messages
- Support for both direct speaker connection (DAC) and I2S amplifier
- Compatible with all ASCII characters
- Easy integration into existing projects
- Web-based sender included
- ESP32 Development Board
- I2S MEMS Microphone (e.g., INMP441)
- 8Ω speaker or piezo buzzer
- 100Ω resistor
- ESP32 Development Board
- I2S MEMS Microphone (e.g., INMP441)
- MAX98357A I2S Amplifier
- Speaker (4Ω or 8Ω)
ESP32 INMP441
3.3V --- VDD
GND --- GND
GPIO34 - SD (Data)
GND --- L/R
GPIO25 - WS (Word Select)
GPIO26 - SCK (Serial Clock)
ESP32 Speaker
GPIO25 --- 100Ω --- Positive
GND ------------ Negative
ESP32 MAX98357A
GPIO26 ------ BCLK
GPIO25 ------ LRC
GPIO22 ------ DIN
3.3V ------ VIN
GND ------ GND
- Download this repository as ZIP
- In Arduino IDE: Sketch -> Include Library -> Add .ZIP Library
- Select the downloaded ZIP file
#include <ESP32GibberLink.h>
ESP32GibberLink gibberlink;
void onDataReceived(const char* data, size_t length) {
Serial.println("Received: ");
Serial.write((uint8_t*)data, length);
}
void setup() {
// Initialize with DAC output
gibberlink.begin(MIC_PIN, SPEAKER_PIN);
// Or initialize with I2S output
// gibberlink.beginI2S(MIC_PIN, I2S_BCLK, I2S_LRC, I2S_DOUT);
gibberlink.setDataCallback(onDataReceived);
gibberlink.startRecording();
}
The library includes a web interface example for sending messages from any browser:
- Upload the
web_sender
example - Connect to the ESP32's WiFi network
- Open the displayed IP address in your browser
- Enter text and click "Send"
In web_sender.ino
, you can select the audio output type:
// Choose your audio output type
#define AUDIO_OUTPUT_TYPE AUDIO_OUTPUT_DAC // Simple speaker
// or
#define AUDIO_OUTPUT_TYPE AUDIO_OUTPUT_I2S // I2S amplifier
The audio protocol uses:
- Sample rate: 16kHz
- Bit depth: 16-bit
- Frequency range: 1000Hz - 2600Hz
- Bit duration: 10ms
- Error detection: Basic packet validation
- Maximum message length: 256 bytes
- Transmission speed: ~100 bytes/second
- Range depends on volume and environmental noise
- Best results in quiet environments
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Original GibberLink project
- ggwave library by Georgi Gerganov
- ESP32 Arduino Core developers