updating vercel docs
This commit is contained in:
parent
3f4e51e198
commit
f29f356613
3 changed files with 77 additions and 187 deletions
10
README.md
10
README.md
|
|
@ -28,9 +28,15 @@ npm run dev
|
||||||
3. Add your ESP32-S3 Device MAC Address to the Settings page in the NextJS Frontend. This links your device to your account.
|
3. Add your ESP32-S3 Device MAC Address to the Settings page in the NextJS Frontend. This links your device to your account.
|
||||||
To find your ESP32-S3 Device's MAC Address, build and upload `test/print_mac_address_test.cpp` using PlatformIO.
|
To find your ESP32-S3 Device's MAC Address, build and upload `test/print_mac_address_test.cpp` using PlatformIO.
|
||||||
|
|
||||||
4. Add your OpenAI API Key in the `server-deno/.env` and `frontend-nextjs/.env.local` file. ([See the Deno server README](server-deno/README.md))
|
4. Add your OpenAI API Key in the `server-deno/.env` and `frontend-nextjs/.env.local` file.
|
||||||
```
|
```
|
||||||
OPENAI_API_KEY=your_openai_api_key
|
OPENAI_API_KEY=<your_openai_api_key>
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Start the Deno server. ([See the Deno server README](server-deno/README.md))
|
||||||
|
```bash
|
||||||
|
cd server-deno
|
||||||
|
deno run -A --env-file=.env main.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Set up your ESP32 Arduino Client. ([See the ESP32 README](firmware-arduino/README.md)) On PlatformIO, first `Build` the project, then `Upload` the project to your ESP32.
|
5. Set up your ESP32 Arduino Client. ([See the ESP32 README](firmware-arduino/README.md)) On PlatformIO, first `Build` the project, then `Upload` the project to your ESP32.
|
||||||
|
|
|
||||||
|
|
@ -1,194 +1,89 @@
|
||||||
# ESP32 WebSocket Audio Client
|
# ESP32 WebSocket Audio Client
|
||||||
|
|
||||||
This firmware turns your Seed Studio XIAO ESP32-S3 (or general ESP32 WROOM Dev module) device into a WebSocket audio client, enabling real-time full-duplex audio communication with the server hosted at `../backend`. It's designed to be used in interactive toys or devices to converse with your personal AI characters.
|
This firmware turns your ESP32 device into a WebSocket audio client for Elato, enabling real-time conversations with AI characters.
|
||||||
|
|
||||||
## Pin Configuration
|
## Hardware Setup
|
||||||
|
|
||||||
<!-- ### For Seeed Studio XIAO ESP32S3 -->
|
### Components Needed
|
||||||
|
- ESP32-S3 board
|
||||||
|
- I2S MEMS microphone (INMP441 recommended)
|
||||||
|
- I2S speaker with amplifier (MAX98357A recommended)
|
||||||
|
- Microspeaker
|
||||||
|
- Button/Touch sensor and LED (optional but recommended)
|
||||||
|
|
||||||
| **Component** | **Seeed Studio XIAO ESP32S3** | **General ESP32 Dev Board** |
|
### Pin Connections
|
||||||
| -------------------------- | ----------------------------- | --------------------------- |
|
|
||||||
| **I2S Input (Microphone)** | | |
|
|
||||||
| SD | D9 | GPIO 13 |
|
|
||||||
| WS | D7 | GPIO 5 |
|
|
||||||
| SCK | GD8 | GPIO 18 |
|
|
||||||
| **I2S Output (Speaker)** | | |
|
|
||||||
| WS | D0 | GPIO 32 |
|
|
||||||
| BCK | D1 | GPIO 33 |
|
|
||||||
| DATA | D2 | GPIO 25 |
|
|
||||||
| SD (shutdown) | D3 | N/A |
|
|
||||||
| **Others** | | |
|
|
||||||
| LED | D4 | GPIO 2 |
|
|
||||||
| Button | D5 | GPIO 26 |
|
|
||||||
|
|
||||||
<!--
|
| **Component** | **Standard ESP32** |
|
||||||
I2S Input (Microphone)
|
|---------------|-------------------|
|
||||||
|
| **Microphone** | |
|
||||||
|
| SD (Data) | GPIO 14 |
|
||||||
|
| WS (Word Select) | GPIO 4 |
|
||||||
|
| SCK (Clock) | GPIO 1 |
|
||||||
|
| **Speaker** | | |
|
||||||
|
| WS | GPIO 5 |
|
||||||
|
| BCK | GPIO 6 |
|
||||||
|
| DATA | GPIO 7 |
|
||||||
|
| SD (shutdown) | GPIO 10 |
|
||||||
|
| **Control** | |
|
||||||
|
| Button | GPIO 2 |
|
||||||
|
| LED (Blue) | GPIO 13 |
|
||||||
|
| LED (Red) | GPIO 9 |
|
||||||
|
| LED (Green) | GPIO 8 |
|
||||||
|
|
||||||
- SD: D9
|
## Software Setup
|
||||||
- WS: D7
|
|
||||||
- SCK: GD8
|
|
||||||
|
|
||||||
I2S Output (Speaker with amp MAX98357A)
|
### Using PlatformIO
|
||||||
|
|
||||||
- WS: D0
|
1. Install Visual Studio Code and the PlatformIO extension
|
||||||
- BCK: D1
|
2. Clone this repository
|
||||||
- DATA: D2
|
3. Open the project folder in PlatformIO
|
||||||
- SD: D3 (shutdown)
|
4. Edit `src/Config.cpp` with your server details:
|
||||||
|
- If using locally: Set your computer's IP address in `ws_server` and `backend_server`
|
||||||
|
- If using production: Ensure proper certificates are set
|
||||||
|
5. Build and upload to your ESP32
|
||||||
|
|
||||||
Other
|
|
||||||
|
|
||||||
- LED: D4
|
### To use locally:
|
||||||
- Button: D5
|
1. **Find your local IP address**:
|
||||||
|
- View your Wifi IP when you click on Wifi Settings > Your Wifi Network > Details, OR
|
||||||
|
- On macOS/Linux: Open Terminal and run `ifconfig`
|
||||||
|
- On Windows: Open Command Prompt and run `ipconfig`
|
||||||
|
- Look for your active network interface (WiFi: `en0` on Mac, `wlan0` on Linux, `Wireless LAN adapter Wi-Fi` on Windows)
|
||||||
|
- Note the IP address (e.g., `192.168.1.100`)
|
||||||
|
|
||||||
### For a general ESP32 dev board
|
2. **Update firmware configuration**:
|
||||||
|
- In the firmware project, set `DEV_MODE` in Config.cpp
|
||||||
|
- Update the WebSocket server IP to your local IP address
|
||||||
|
|
||||||
I2S Input (Microphone)
|
## First-Time Setup
|
||||||
|
|
||||||
- SD: GPIO 13
|
1. Power on your ESP32
|
||||||
- WS: GPIO 5
|
2. Connect to the "Elato device" WiFi network from your phone/computer
|
||||||
- SCK: GPIO 18
|
3. A configuration portal will open (or navigate to 192.168.4.1)
|
||||||
|
4. Enter your home WiFi credentials
|
||||||
I2S Output (Speaker)
|
5. The device will restart and connect to your WiFi
|
||||||
|
|
||||||
- WS: GPIO 32
|
|
||||||
- BCK: GPIO 33
|
|
||||||
- DATA: GPIO 25
|
|
||||||
|
|
||||||
Other
|
|
||||||
|
|
||||||
- LED: GPIO 2
|
|
||||||
- Button: GPIO 26 -->
|
|
||||||
|
|
||||||
## Firmware burning with PlatformIO
|
|
||||||
|
|
||||||
1. Install PlatformIO IDE (Visual Studio Code extension) if you haven't already.
|
|
||||||
|
|
||||||
2. Create a new PlatformIO project:
|
|
||||||
|
|
||||||
- Open PlatformIO Home
|
|
||||||
- Click "New Project"
|
|
||||||
- Name your project (e.g., "FullDuplexWebSocketAudio")
|
|
||||||
- Select "Espressif ESP32 Dev Module" as the board
|
|
||||||
- Choose "Arduino" as the framework
|
|
||||||
- Select a location for your project
|
|
||||||
|
|
||||||
3. Replace the contents of `src/main.cpp` with the provided ESP32 WebSocket Audio Client code.
|
|
||||||
|
|
||||||
4. Add the required libraries to your `platformio.ini` file:
|
|
||||||
|
|
||||||
- For Seeed Studio XIAO ESP32S3
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[env:seeed_xiao_esp32s3]
|
|
||||||
platform = espressif32
|
|
||||||
board = seeed_xiao_esp32s3
|
|
||||||
framework = arduino
|
|
||||||
monitor_speed = 115200
|
|
||||||
lib_deps =
|
|
||||||
https://github.com/tzapu/WiFiManager.git
|
|
||||||
gilmaimon/ArduinoWebsockets@^0.5.4
|
|
||||||
bblanchon/ArduinoJson@^7.1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
- For a general ESP32 Dev board
|
|
||||||
```ini
|
|
||||||
[env:esp32dev]
|
|
||||||
platform = espressif32
|
|
||||||
board = esp32dev
|
|
||||||
framework = arduino
|
|
||||||
monitor_speed = 115200
|
|
||||||
lib_deps =
|
|
||||||
https://github.com/tzapu/WiFiManager.git
|
|
||||||
gilmaimon/ArduinoWebsockets @ ^0.5.3
|
|
||||||
bblanchon/ArduinoJson @ ^7.1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
5. Update the WebSocket server details in the code:
|
|
||||||
|
|
||||||
- Find the following lines in the code and update them with your information:
|
|
||||||
```cpp
|
|
||||||
const char *websocket_server_host = "<your-server-host>"; // this is your WiFi I.P. Address
|
|
||||||
const uint16_t websocket_server_port = 8000;
|
|
||||||
const char *websocket_server_path = "/Elato";
|
|
||||||
const char *auth_token = "<your-auth-token-here>"; // generate auth-token in your Elato web-app in Settings
|
|
||||||
```
|
|
||||||
|
|
||||||
6. Build the project:
|
|
||||||
|
|
||||||
- Click the "PlatformIO: Build" button in the PlatformIO toolbar or run the build task.
|
|
||||||
|
|
||||||
7. Upload the firmware:
|
|
||||||
|
|
||||||
- Connect your ESP32 to your computer.
|
|
||||||
- Click the "PlatformIO: Upload" button or run the upload task.
|
|
||||||
|
|
||||||
8. Monitor the device:
|
|
||||||
|
|
||||||
- Open the Serial Monitor to view debug output and device status.
|
|
||||||
- You can do this by clicking the "PlatformIO: Serial Monitor" button or running the monitor task.
|
|
||||||
|
|
||||||
9. Connect to WiFi using the WiFi Captive portal
|
|
||||||
- It is straightforward to connect to your local Wifi network with an SSID (WiFi name) and Password.
|
|
||||||
- Once the device is on, it acts as an Access Point to connect to a known WiFi network.
|
|
||||||
- Find the device name "Elato device" in your list of local wifi networks.
|
|
||||||
- Press "Configure Wifi" and type in your SSID and PW for your Wifi and connect.
|
|
||||||
- The Seeed Stuido XIAO ESP32S3 should then automatically connect to your Wifi and save your Wifi details.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
1. Power on the ESP32 device.
|
1. Power on the device
|
||||||
2. The device will automatically connect to the WiFi network as set on the Captive portal.
|
2. The LED indicates status:
|
||||||
3. Press the button to initiate a full-duplex WebSocket connection to the server.
|
- Green 🟢: Setup mode and websocket/wifi is not connected
|
||||||
4. The LED indicates the current status:
|
- Blue 🔵: Device is speaking
|
||||||
|
- Yellow 🟡: Device is listening to user
|
||||||
- Off: Not connected
|
- Red 🔴: Processing user request
|
||||||
- Solid On: Connected and listening on microphone
|
|
||||||
- Pulsing: Streaming audio output (receiving from server)
|
|
||||||
|
|
||||||
5. Speak into the microphone to send audio to the server.
|
|
||||||
6. The device will play audio received from the server through the speaker.
|
|
||||||
|
|
||||||
<!-- ## Features -->
|
|
||||||
|
|
||||||
<!-- - Real-time audio streaming using WebSocket
|
|
||||||
- Full-duplex I2S audio input (microphone) and I2S audio output (speaker)
|
|
||||||
- WiFi connectivity
|
|
||||||
- LED status indicator -->
|
|
||||||
<!-- - Button interrupt for connection management -->
|
|
||||||
|
|
||||||
<!-- ## Hardware Requirements
|
|
||||||
|
|
||||||
- ESP32 development board
|
|
||||||
- INMP441 MEMS microphone (I2S input)
|
|
||||||
- MAX98357A amplifier (I2S output)
|
|
||||||
- LED (for status indication)
|
|
||||||
- Push button (for connection control)
|
|
||||||
- USB Type-C or Micro USB power cable -->
|
|
||||||
|
|
||||||
|
|
||||||
## Functions
|
|
||||||
|
|
||||||
- `micTask`: Handles audio input from the microphone
|
|
||||||
- `buttonTask`: Manages button presses for connection control
|
|
||||||
- `ledControlTask`: Controls the LED status indicator
|
|
||||||
- `handleTextMessage`: Processes text messages from the server
|
|
||||||
- `handleBinaryAudio`: Processes binary audio data from the server
|
|
||||||
|
|
||||||
## Customization
|
|
||||||
|
|
||||||
You can modify the following parameters in the code:
|
|
||||||
|
|
||||||
<!-- - Audio sample rate (`SAMPLE_RATE`) -->
|
|
||||||
- Buffer sizes (`bufferCnt`, `bufferLen`)
|
|
||||||
<!-- - LED brightness levels (`MIN_BRIGHTNESS`, `MAX_BRIGHTNESS`) -->
|
|
||||||
- Debounce time for the button (`DEBOUNCE_TIME`)
|
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
- If you experience connection issues, check your WiFi credentials and server details.
|
- If connection fails, check your WiFi signal and server details
|
||||||
- Ensure all required libraries are installed and up to date.
|
- Monitor serial output at 115200 baud for detailed logs
|
||||||
- Verify that the pin configuration matches your hardware setup.
|
|
||||||
|
|
||||||
## Contributing
|
## Advanced Configuration
|
||||||
|
|
||||||
Feel free to submit issues or pull requests to improve this firmware.
|
Edit `Config.cpp` to customize:
|
||||||
|
- Server addresses and ports
|
||||||
|
- Audio sample rate (default 24kHz)
|
||||||
|
- Pin assignments for different boards
|
||||||
|
|
||||||
|
For development, uncomment `#define DEV_MODE` in Config.h to use local servers without SSL.
|
||||||
|
|
||||||
|
To use the button, uncomment `#define TOUCH_MODE` in Config.h
|
||||||
|
|
@ -11,18 +11,7 @@ This directory contains the WebSocket server implementation for Elato AI, built
|
||||||
|
|
||||||
### Local Development
|
### Local Development
|
||||||
|
|
||||||
1. **Find your local IP address**:
|
1. **Start the server**:
|
||||||
- View your Wifi IP when you click on Wifi Settings > Your Wifi Network > Details, OR
|
|
||||||
- On macOS/Linux: Open Terminal and run `ifconfig`
|
|
||||||
- On Windows: Open Command Prompt and run `ipconfig`
|
|
||||||
- Look for your active network interface (WiFi: `en0` on Mac, `wlan0` on Linux, `Wireless LAN adapter Wi-Fi` on Windows)
|
|
||||||
- Note the IP address (e.g., `192.168.1.100`)
|
|
||||||
|
|
||||||
2. **Update firmware configuration**:
|
|
||||||
- In the firmware project, set `DEV_MODE` in Config.cpp
|
|
||||||
- Update the WebSocket server IP to your local IP address
|
|
||||||
|
|
||||||
3. **Start the server**:
|
|
||||||
```bash
|
```bash
|
||||||
# Navigate to the server-deno directory
|
# Navigate to the server-deno directory
|
||||||
cd server-deno
|
cd server-deno
|
||||||
|
|
@ -31,7 +20,7 @@ This directory contains the WebSocket server implementation for Elato AI, built
|
||||||
deno run -A --env-file=.env main.ts
|
deno run -A --env-file=.env main.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Verify the server**:
|
2. **Verify the server**:
|
||||||
- The server should be running on port 8000 (default)
|
- The server should be running on port 8000 (default)
|
||||||
- You should see a message confirming the server is listening
|
- You should see a message confirming the server is listening
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue