Skip to content

Commit 5025891

Browse files
authored
Merge pull request #22 from m5stack/dev
Dev
2 parents abcd129 + 2a6f127 commit 5025891

38 files changed

+3072
-26
lines changed

docs/cn.md

Lines changed: 1006 additions & 0 deletions
Large diffs are not rendered by default.

docs/en.md

Lines changed: 1000 additions & 0 deletions
Large diffs are not rendered by default.

examples/KWS_ASR/KWS_ASR.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@ void setup()
2727
// language = "zh_CN";
2828

2929
/* Init module serial port */
30-
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Basic
31-
// Serial2.begin(115200, SERIAL_8N1, 13, 14); // Core2
32-
// Serial2.begin(115200, SERIAL_8N1, 18, 17); // CoreS3
30+
// int rxd = 16, txd = 17; // Basic
31+
// int rxd = 13, txd = 14; // Core2
32+
// int rxd = 18, txd = 17; // CoreS3
33+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
34+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
35+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
3336

3437
/* Init module */
3538
module_llm.begin(&Serial2);
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
#include <Arduino.h>
7+
#include <M5Unified.h>
8+
#include <M5ModuleLLM.h>
9+
10+
M5ModuleLLM module_llm;
11+
12+
/* Must be capitalized */
13+
String wake_up_keyword = "HELLO";
14+
// String wake_up_keyword = "你好你好";
15+
String kws_work_id;
16+
String vad_work_id;
17+
String whisper_work_id;
18+
String language;
19+
20+
void setup()
21+
{
22+
M5.begin();
23+
M5.Display.setTextSize(2);
24+
M5.Display.setTextScroll(true);
25+
// M5.Display.setFont(&fonts::efontCN_12); // Support Chinese display
26+
// M5.Display.setFont(&fonts::efontJA_12); // Support Japanese display
27+
28+
language = "en_US";
29+
// language = "zh_CN";
30+
31+
/* Init module serial port */
32+
// int rxd = 16, txd = 17; // Basic
33+
// int rxd = 13, txd = 14; // Core2
34+
// int rxd = 18, txd = 17; // CoreS3
35+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
36+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
37+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
38+
39+
/* Init module */
40+
module_llm.begin(&Serial2);
41+
42+
/* Make sure module is connected */
43+
M5.Display.printf(">> Check ModuleLLM connection..\n");
44+
while (1) {
45+
if (module_llm.checkConnection()) {
46+
break;
47+
}
48+
}
49+
50+
/* Reset ModuleLLM */
51+
M5.Display.printf(">> Reset ModuleLLM..\n");
52+
module_llm.sys.reset();
53+
54+
/* Setup Audio module */
55+
M5.Display.printf(">> Setup audio..\n");
56+
module_llm.audio.setup();
57+
58+
/* Setup KWS module and save returned work id */
59+
M5.Display.printf(">> Setup kws..\n");
60+
m5_module_llm::ApiKwsSetupConfig_t kws_config;
61+
kws_config.kws = wake_up_keyword;
62+
kws_work_id = module_llm.kws.setup(kws_config, "kws_setup", language);
63+
64+
/* Setup VAD module and save returned work id */
65+
M5.Display.printf(">> Setup vad..\n");
66+
m5_module_llm::ApiVadSetupConfig_t vad_config;
67+
vad_config.input = {"sys.pcm", kws_work_id};
68+
vad_work_id = module_llm.vad.setup(vad_config, "vad_setup");
69+
70+
/* Setup Whisper module and save returned work id */
71+
M5.Display.printf(">> Setup whisper..\n");
72+
m5_module_llm::ApiWhisperSetupConfig_t whisper_config;
73+
whisper_config.input = {"sys.pcm", kws_work_id, vad_work_id};
74+
whisper_config.language = "en";
75+
// whisper_config.language = "zh";
76+
// whisper_config.language = "ja";
77+
whisper_work_id = module_llm.whisper.setup(whisper_config, "whisper_setup");
78+
79+
M5.Display.printf(">> Setup ok\n>> Say \"%s\" to wakeup\n", wake_up_keyword.c_str());
80+
}
81+
82+
void loop()
83+
{
84+
/* Update ModuleLLM */
85+
module_llm.update();
86+
87+
/* Handle module response messages */
88+
for (auto& msg : module_llm.msg.responseMsgList) {
89+
/* If KWS module message */
90+
if (msg.work_id == kws_work_id) {
91+
M5.Display.setTextColor(TFT_GREENYELLOW);
92+
M5.Display.printf(">> Keyword detected\n");
93+
}
94+
95+
/* If ASR module message */
96+
if (msg.work_id == whisper_work_id) {
97+
/* Check message object type */
98+
if (msg.object == "asr.utf-8") {
99+
/* Parse message json and get ASR result */
100+
JsonDocument doc;
101+
deserializeJson(doc, msg.raw_msg);
102+
String asr_result = doc["data"].as<String>();
103+
104+
M5.Display.setTextColor(TFT_YELLOW);
105+
M5.Display.printf(">> %s\n", asr_result.c_str());
106+
}
107+
}
108+
}
109+
110+
/* Clear handled messages */
111+
module_llm.msg.responseMsgList.clear();
112+
}

examples/SerialTextAssistant/SerialTextAssistant.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ void setup()
2525
CommSerialPort.begin(115200);
2626

2727
/* Init module serial port */
28-
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Basic
29-
// Serial2.begin(115200, SERIAL_8N1, 13, 14); // Core2
30-
// Serial2.begin(115200, SERIAL_8N1, 18, 17); // CoreS3
28+
// int rxd = 16, txd = 17; // Basic
29+
// int rxd = 13, txd = 14; // Core2
30+
// int rxd = 18, txd = 17; // CoreS3
31+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
32+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
33+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
3134

3235
/* Init module */
3336
module_llm.begin(&Serial2);

examples/TTS/TTS.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@ void setup()
2222
// language = "zh_CN";
2323

2424
/* Init module serial port */
25-
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Basic
26-
// Serial2.begin(115200, SERIAL_8N1, 13, 14); // Core2
27-
// Serial2.begin(115200, SERIAL_8N1, 18, 17); // CoreS3
25+
// int rxd = 16, txd = 17; // Basic
26+
// int rxd = 13, txd = 14; // Core2
27+
// int rxd = 18, txd = 17; // CoreS3
28+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
29+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
30+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
2831

2932
/* Init module */
3033
module_llm.begin(&Serial2);

examples/TextAssistant/TextAssistant.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ void setup()
1717
M5.Display.setTextScroll(true);
1818

1919
/* Init module serial port */
20-
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Basic
21-
// Serial2.begin(115200, SERIAL_8N1, 13, 14); // Core2
22-
// Serial2.begin(115200, SERIAL_8N1, 18, 17); // CoreS3
20+
// int rxd = 16, txd = 17; // Basic
21+
// int rxd = 13, txd = 14; // Core2
22+
// int rxd = 18, txd = 17; // CoreS3
23+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
24+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
25+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
2326

2427
/* Init module */
2528
module_llm.begin(&Serial2);

examples/VoiceAssistant/VoiceAssistant.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@ void setup()
4242
M5.Display.setTextScroll(true);
4343

4444
/* Init module serial port */
45-
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Basic
46-
// Serial2.begin(115200, SERIAL_8N1, 13, 14); // Core2
47-
// Serial2.begin(115200, SERIAL_8N1, 18, 17); // CoreS3
45+
// int rxd = 16, txd = 17; // Basic
46+
// int rxd = 13, txd = 14; // Core2
47+
// int rxd = 18, txd = 17; // CoreS3
48+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
49+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
50+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
4851

4952
/* Init module */
5053
module_llm.begin(&Serial2);

examples/YOLO/YOLO.ino

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@ void setup()
2828
M5.Display.setTextScroll(true);
2929

3030
/* Init module serial port */
31-
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Basic
32-
// Serial2.begin(115200, SERIAL_8N1, 13, 14); // Core2
33-
// Serial2.begin(115200, SERIAL_8N1, 18, 17); // CoreS3
31+
// int rxd = 16, txd = 17; // Basic
32+
// int rxd = 13, txd = 14; // Core2
33+
// int rxd = 18, txd = 17; // CoreS3
34+
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
35+
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
36+
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
3437

3538
/* Init module */
3639
module_llm.begin(&Serial2);
@@ -119,5 +122,8 @@ void loop()
119122
}
120123

121124
/* Clear handled messages */
125+
module_llm.msg.clearMsg("yolo_setup");
122126
module_llm.msg.responseMsgList.clear();
127+
128+
usleep(500000);
123129
}

library.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"M5GFX": "*",
1515
"ArduinoJson": "*"
1616
},
17-
"version": "1.3.0",
17+
"version": "1.5.0",
1818
"frameworks": "arduino",
1919
"platforms": "espressif32"
20-
}
20+
}

0 commit comments

Comments
 (0)