3.3.7
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
|
||||
#include "ESP_I2S.h"
|
||||
#include "ESP_SR.h"
|
||||
|
||||
#define I2S_PIN_BCK 17
|
||||
#define I2S_PIN_WS 47
|
||||
#define I2S_PIN_DIN 16
|
||||
|
||||
#define LIGHT_PIN 40
|
||||
#define FAN_PIN 41
|
||||
|
||||
/**
|
||||
* The input format:
|
||||
* M to represent the microphone channel
|
||||
* R to represent the playback reference channel
|
||||
* N to represent an unknown or unused channel
|
||||
*
|
||||
* For example, input_format="MMNR" indicates that the input data consists of four channels,
|
||||
* which are the microphone channel, the microphone channel, an unused channel, and the playback channel
|
||||
*/
|
||||
#define SR_INPUT_FORMAT "MM"
|
||||
|
||||
I2SClass i2s;
|
||||
|
||||
// Generated using the following command:
|
||||
// python3 tools/gen_sr_commands.py "Turn on the light,Switch on the light;Turn off the light,Switch off the light,Go dark;Start fan;Stop fan"
|
||||
enum {
|
||||
SR_CMD_TURN_ON_THE_LIGHT,
|
||||
SR_CMD_TURN_OFF_THE_LIGHT,
|
||||
SR_CMD_START_FAN,
|
||||
SR_CMD_STOP_FAN,
|
||||
};
|
||||
static const sr_cmd_t sr_commands[] = {
|
||||
{0, "Turn on the light", "TkN nN jc LiT"},
|
||||
{0, "Switch on the light", "SWgp nN jc LiT"},
|
||||
{1, "Turn off the light", "TkN eF jc LiT"},
|
||||
{1, "Switch off the light", "SWgp eF jc LiT"},
|
||||
{1, "Go dark", "Gb DnRK"},
|
||||
{2, "Start fan", "STnRT FaN"},
|
||||
{3, "Stop fan", "STnP FaN"},
|
||||
};
|
||||
|
||||
void onSrEvent(sr_event_t event, int command_id, int phrase_id) {
|
||||
switch (event) {
|
||||
case SR_EVENT_WAKEWORD: Serial.println("WakeWord Detected!"); break;
|
||||
case SR_EVENT_WAKEWORD_CHANNEL:
|
||||
Serial.printf("WakeWord Channel %d Verified!\n", command_id);
|
||||
ESP_SR.setMode(SR_MODE_COMMAND); // Switch to Command detection
|
||||
break;
|
||||
case SR_EVENT_TIMEOUT:
|
||||
Serial.println("Timeout Detected!");
|
||||
ESP_SR.setMode(SR_MODE_WAKEWORD); // Switch back to WakeWord detection
|
||||
break;
|
||||
case SR_EVENT_COMMAND:
|
||||
Serial.printf("Command %d Detected! %s\n", command_id, sr_commands[phrase_id].str);
|
||||
switch (command_id) {
|
||||
case SR_CMD_TURN_ON_THE_LIGHT: digitalWrite(LIGHT_PIN, HIGH); break;
|
||||
case SR_CMD_TURN_OFF_THE_LIGHT: digitalWrite(LIGHT_PIN, LOW); break;
|
||||
case SR_CMD_START_FAN: digitalWrite(FAN_PIN, HIGH); break;
|
||||
case SR_CMD_STOP_FAN: digitalWrite(FAN_PIN, LOW); break;
|
||||
default: Serial.println("Unknown Command!"); break;
|
||||
}
|
||||
ESP_SR.setMode(SR_MODE_COMMAND); // Allow for more commands to be given, before timeout
|
||||
// ESP_SR.setMode(SR_MODE_WAKEWORD); // Switch back to WakeWord detection
|
||||
break;
|
||||
default: Serial.println("Unknown Event!"); break;
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
pinMode(LIGHT_PIN, OUTPUT);
|
||||
digitalWrite(LIGHT_PIN, LOW);
|
||||
pinMode(FAN_PIN, OUTPUT);
|
||||
digitalWrite(FAN_PIN, LOW);
|
||||
|
||||
i2s.setPins(I2S_PIN_BCK, I2S_PIN_WS, -1, I2S_PIN_DIN);
|
||||
i2s.setTimeout(1000);
|
||||
i2s.begin(I2S_MODE_STD, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO);
|
||||
|
||||
ESP_SR.onEvent(onSrEvent);
|
||||
ESP_SR.begin(i2s, sr_commands, sizeof(sr_commands) / sizeof(sr_cmd_t), SR_CHANNELS_STEREO, SR_MODE_WAKEWORD, SR_INPUT_FORMAT);
|
||||
}
|
||||
|
||||
void loop() {}
|
||||
@@ -0,0 +1,16 @@
|
||||
fqbn:
|
||||
esp32s3:
|
||||
- espressif:esp32:esp32s3:USBMode=default,PartitionScheme=esp_sr_16,FlashSize=16M,FlashMode=dio
|
||||
esp32p4:
|
||||
- espressif:esp32:esp32p4:USBMode=default,ChipVariant=postv3,PartitionScheme=esp_sr_16,FlashSize=16M,FlashMode=qio
|
||||
|
||||
requires:
|
||||
- CONFIG_SOC_I2S_SUPPORTED=y
|
||||
|
||||
targets:
|
||||
esp32: false
|
||||
esp32c3: false
|
||||
esp32c6: false
|
||||
esp32h2: false
|
||||
esp32s2: false
|
||||
esp32c5: false
|
||||
Reference in New Issue
Block a user