18 KiB
ಟೈಮರ್ ಸೆಟ್ ಮಾಡಿ - Wio ಟರ್ಮಿನಲ್
ಪಾಠದ ಈ ಭಾಗದಲ್ಲಿ, ನೀವು ಮಾತನಾಡಿದ ಮಾತನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ನಿಮ್ಮ ಸರ್ವರ್ಲೆಸ್ ಕೋಡ್ ಅನ್ನು ಕರೆಮಾಡುತ್ತೀರಿ ಮತ್ತು ಫಲಿತಾಂಶಗಳ ಆಧಾರದ ಮೇಲೆ ನಿಮ್ಮ Wio ಟರ್ಮಿನಲ್ನಲ್ಲಿ ಟೈಮರ್ ಅನ್ನು ಸೆಟ್ ಮಾಡುತ್ತೀರಿ.
ಟೈಮರ್ ಸೆಟ್ ಮಾಡುವುದು
Speech to text ಕರೆಮಾಡಿ ಬಂದ ಪಠ್ಯವನ್ನು ನಿಮ್ಮ ಸರ್ವರ್ಲೆಸ್ ಕೋಡ್ಗೆ ಕಳುಹಿಸುವ ಅಗತ್ಯವಿದೆ, ಅದನ್ನು LUIS ಮೂಲಕ ಪ್ರಕ್ರಿಯೆ ಮಾಡಿ, ಟೈಮರ್ನ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತವೆ. ಈ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಟೈಮರ್ ಅನ್ನು ಸೆಟ್ ಮಾಡಲು ಬಳಸಬಹುದು.
ಮೈಕ್ರೋಕಂಟ್ರೋಲರ್ಗಳು ಮೂಲತಃ Arduino ನಲ್ಲಿ ಬಹು-ಥ್ರೆಡ್ಗಳನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ Python ಅಥವಾ ಇತರ ಮೇಲ್ಅಂಗೀಕೃತ ಭಾಷೆಗಳಂತೆಯೇ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಟೈಮರ್ ಕ್ಲಾಸ್ಗಳು ಇರುವುದಿಲ್ಲ. ಬದಲಾಗಿ ನೀವು loop ಫಂಕ್ಷನ್ನಲ್ಲಿ ಕಳೆದ ಸಮಯವನ್ನು ಅಳೆಯುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಟೈಮರ್ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿ, ಸಮಯ ಮುಗಿದಾಗ ಕಾರ್ಯಗಳನ್ನು ಕರೆ ಮಾಡಬಹುದು.
ಕಾರ್ಯ - ಪಠ್ಯವನ್ನು ಸರ್ವರ್ಲೆಸ್ ಫಂಕ್ಷನ್ಗೆ ಕಳುಹಿಸಿ
-
ನೀವು
smart-timerಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು VS ಕೋಡ್ನಲ್ಲಿ ಈಗಾಗಲೇ ತೆರೆಯದಿದ್ದರೆ ತೆರೆಯಿರಿ. -
config.hಹೆಡರ್ ಫೈಲ್ ತೆರೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ಫಂಕ್ಷನ್ ಆ್ಯಪ್ URL ಅನ್ನು ಸೇರಿಸಿ:const char *TEXT_TO_TIMER_FUNCTION_URL = "<URL>";<URL>ಅನ್ನು ನಿಮ್ಮ ಫಂಕ್ಷನ್ ಆ್ಯಪ್ನ URL ರಿಂದ ಬದಲಾಯಿಸಿ, ಇದು ಕಳೆದ ಪಾಠದ ಕೊನೆಯ ಹಂತದಲ್ಲಿ ಪಡೆದಿದ್ದು, ನಿಮ್ಮ ಲೋಕಲ್ ಮಷಿನ್ನ IP ವಿಳಾಸವನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಅದು ಫಂಕ್ಷನ್ ಆ್ಯಪ್ ಚಾಲನೆ ಮಾಡುತ್ತಿದೆ. -
srcಫೋಲ್ಡರ್ ನಲ್ಲಿlanguage_understanding.hಎಂಬ ಹೊಸ ಫೈಲ್ ಸೃಷ್ಟಿಸಿ. ಇದು ಗುರುತಿಸಿದ ಮಾತನಾಡುವ ಪಠ್ಯವನ್ನು ಸೆಕೆಂಡುಗಳಿಗೆ ಪರಿವರ್ತಿಸಲು LUIS ಬಳಸಿ ನಿಮ್ಮ ಫಂಕ್ಷನ್ ಆ್ಯಪ್ಗೆ ಕಳುಹಿಸಲು ವರ್ಗವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. -
ಈ ಫೈಲ್ನ ಟಾಪ್ಗೆ ಕೆಳಗಿನ ವಿಷಯವನ್ನು ಸೇರಿಸಿ:
#pragma once #include <Arduino.h> #include <ArduinoJson.h> #include <HTTPClient.h> #include <WiFiClient.h> #include "config.h"ಇದು ಕೆಲವು ಅಗತ್ಯ ಹೆಡರ್ ಫೈಲ್ಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ.
-
LanguageUnderstandingಎಂಬ ವರ್ಗವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ ಮತ್ತು ಈ ವರ್ಗದ ಒಂದು ಉದಾಹರಣೆಯನ್ನು ಘೋಷಿಸಿ:class LanguageUnderstanding { public: private: }; LanguageUnderstanding languageUnderstanding; -
ನಿಮ್ಮ ಫಂಕ್ಷನ್ ಆ್ಯಪ್ ಅನ್ನು ಕರೆಮಾಡಲು WiFi ಕ್ಲೈಂಟ್ ಅನ್ನು ಘೋಷಿಸುವ ಅಗತ್ಯವಿದೆ. ವರ್ಗದ
privateವಿಭಾಗದಲ್ಲಿ ಕೆಳಗಿನುದನ್ನು ಸೇರಿಸಿ:WiFiClient _client; -
publicವಿಭಾಗದಲ್ಲಿ, ಫಂಕ್ಷನ್ ಆ್ಯಪ್ ಅನ್ನು ಕರೆಮಾಡಲುGetTimerDurationಎಂಬ ವಿಧಾನವನ್ನು ಘೋಷಿಸಿ:int GetTimerDuration(String text) { } -
GetTimerDurationವಿಧಾನದಲ್ಲಿ, ಫಂಕ್ಷನ್ ಆ್ಯಪ್ಗೆ ಕಳುಹಿಸುವ JSON ಅನ್ನು ನಿರ್ಮಿಸಲು ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಸೇರಿಸಿ:DynamicJsonDocument doc(1024); doc["text"] = text; String body; serializeJson(doc, body);ಇದು
GetTimerDurationವಿಧಾನಕ್ಕೆ ಪಠ್ಯವನ್ನು JSON ರಚನೆಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ:{ "text" : "<text>" }ಇಲ್ಲಿ
<text>ಎಂಬುದು ಫಂಕ್ಷನ್ಗೆ ಕಳುಹಿಸುವ ಪಠ್ಯ. -
ಇದರ ಕೆಳಗೆ, ಫಂಕ್ಷನ್ ಆ್ಯಪ್ ಕರೆ ಮಾಡಲು ಈ ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:
HTTPClient httpClient; httpClient.begin(_client, TEXT_TO_TIMER_FUNCTION_URL); int httpResponseCode = httpClient.POST(body);ಇದು functions ಆ್ಯಪ್ಗೆ POST ವಿನಂತಿ ಮಾಡುತ್ತದೆ, JSON ದೇಹವನ್ನು ಕಳುಹಿಸಿ ಪ್ರತಿಕ್ರિયા ಕೋಡ್ ಪಡೆಯುತ್ತದೆ.
-
ಇದರ ಕೆಳಗೆ ಈ ಕೋಡ್ ಅನ್ನು ಸೇರಿಸಿ:
int seconds = 0; if (httpResponseCode == 200) { String result = httpClient.getString(); Serial.println(result); DynamicJsonDocument doc(1024); deserializeJson(doc, result.c_str()); JsonObject obj = doc.as<JsonObject>(); seconds = obj["seconds"].as<int>(); } else { Serial.print("Failed to understand text - error "); Serial.println(httpResponseCode); }ಇದು ಪ್ರತಿಕ್ರಿಯಾ ಕೋಡ್ ಪರಿಶೀಲಿಸುತ್ತದೆ. 200 (ಯಶಸ್ವೀ) ಆಗಿದ್ದರೆ, ಪ್ರತಿಕ್ರಿಯಾ ದೇಹದಿಂದ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆ ಪಡೆಯಲಾಗುತ್ತದೆ. ಇಲ್ಲದಿದ್ದಲ್ಲಿ ದೋಷವನ್ನು ಸೀರಿಯಲ್ ಮೊಂಡಿಟರ್ ಗೆ ಕಳುಹಿಸುತ್ತದೆ ಮತ್ತು ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆ 0 ಆಗಿರುತ್ತದೆ.
-
ಈ ವಿಧಾನದ ಕೊನೆಯಲ್ಲಿ HTTP ಸಂಪರ್ಕವನ್ನು ಮುಚ್ಚಲು ಮತ್ತು ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯನ್ನು ವಾಪಸು ನೀಡಲು ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:
httpClient.end(); return seconds; -
main.cppಫೈಲ್ನಲ್ಲಿ ಈ ಹೊಸ ಹೆಡರ್ ಅನ್ನು ಸೇರಿಸಿ:#include "speech_to_text.h" -
processAudioವಿಧಾನದ ಕೊನೆಯಲ್ಲಿ,GetTimerDurationವಿಧಾನವನ್ನು ಕರೆ ಮಾಡಿ ಟೈಮರ್ ಅವಧಿಯನ್ನು ಪಡೆಯಿರಿ:int total_seconds = languageUnderstanding.GetTimerDuration(text);ಇದು
SpeechToTextವರ್ಗದಿಂದ ಬಂದ ಪಠ್ಯವನ್ನು ಟೈಮರ್ ಅವಧಿಗೆ ಅಗತ್ಯವಾದ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.
ಕಾರ್ಯ - ಟೈಮರ್ ಸೆಟ್ ಮಾಡುವುದು
ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಟೈಮರ್ ಸೆಟ್ ಮಾಡಲು ಬಳಸಬಹುದು.
-
platformio.iniಫೈಲ್ಗೆ ಕೆಳಗಿನ ಲೈಬ್ರರಿ ಅವಲಂಬನೆಯನ್ನು ಸೇರಿಸಿ ಟೈಮರ್ ಸೆಟ್ ಮಾಡಲು ಲೈಬ್ರರಿ ಸೇರಿಸಲು:contrem/arduino-timer @ 2.3.0 -
ಈ ಲೈಬ್ರರಿಗೆ
main.cppಫೈಲ್ನಲ್ಲಿ include ನಿರ್ದೇಶನವನ್ನು ಸೇರಿಸಿ:#include <arduino-timer.h> -
processAudioವಿಧಾನದ ಮೇಲ್ಮೈಯಲ್ಲಿ ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:auto timer = timer_create_default();ಈ ಕೋಡ್
timerಎಂಬ ಟೈಮರ್ ಅನ್ನು ಘೋಷಿಸುತ್ತದೆ. -
ಇದರ ಕೆಳಗೆ, ಈ ಕೋಡ್ ಸೇರಿಸಿ:
void say(String text) { Serial.print("Saying "); Serial.println(text); }ಈ
sayಫಂಕ್ಷನ್ ಅಂತಿಮವಾಗಿ ಪಠ್ಯವನ್ನು ಮಾತನಾಡುವ್ಯವಸ್ಥೆಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಆದರೆ ಈಗಿಗೆ ಇದನ್ನು ಸೀರಿಯಲ್ ಮೊಂಡಿಟರ್ ಗೆ ಪಠ್ಯವನ್ನು ಬರೆಯುತ್ತದೆ. -
sayಫಂಕ್ಷನ್ ಕೆಳಗೆ, ಈ ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:bool timerExpired(void *announcement) { say((char *)announcement); return false; }ಇದು ಟೈಮರ್ ಅವಧಿ ಮುಗಿದಾಗ ಕರೆಮಾಡಲಾಗುವ ಕಾರ್-ಬ್ಯಾಕ್ ಫಂಕ್ಷನ್. ಟೈಮರ್ ಸಮಯ ಮುಗಿದಾಗ ಹೇಳಬೇಕಾದ ಸಂದೇಶವನ್ನು ಪರಿಷ್ಕರಿಸಲಾಗುತ್ತದೆ. ಟೈಮರ್ಗಳು ಪುನರಾವರ್ತಿಸಬಹುದಾಗಿವೆ ಮತ್ತು ಈ ಕಾರ್ಯಾಚರಣೆ ಕಾರ್-ಬ್ಯಾಕ್ ಪ್ರತಿಕ್ರಿಯೆಯಿಂದ ನಿಯಂತ್ರಿಸಲ್ಪಡುತ್ತದೆ — ಇದು
falseಅನ್ನು ವಾಪಸು ನೀಡುತ್ತದೆ, ಟೈಮರ್ ಮತ್ತೆ ಚಾಲನೆ ಆಗಬಾರದಂತೆ ಸೂಚಿಸಲು. -
processAudioವಿಧಾನದ ಕೊನೆಯಲ್ಲಿ ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:if (total_seconds == 0) { return; } int minutes = total_seconds / 60; int seconds = total_seconds % 60;ಈ ಕೋಡ್ ಒಟ್ಟು ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ, 0 ಇದ್ದರೆ ಕಾರ್ಯಾಚರಣೆ ಹಿಂತಿರುಗುತ್ತದೆ ಹಾಗಾಗಿ ಯಾವುದೇ ಟೈಮರ್ ಸೆಟ್ ಆಗುವುದಿಲ್ಲ. ನಂತರ ಒಟ್ಟು ಸೆಕೆಂಡುಗಳನ್ನು ನಿಮಿಷಗಳು ಮತ್ತು ಸೆಕೆಂಡುಗಳಿಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.
-
ಈ ಕೋಡ್ ಕೆಳಗೆ, ಟೈಮರ್ ಆರಂಭಿಸಿದಾಗ ಹೇಳಬೇಕಾದ ಸಂದೇಶವನ್ನು ರಚಿಸಲು ಈ ಮುಂದಿನ ಕೋಡ್ ಸೇರಿಸಿ:
String begin_message; if (minutes > 0) { begin_message += minutes; begin_message += " minute "; } if (seconds > 0) { begin_message += seconds; begin_message += " second "; } begin_message += "timer started."; -
ಇದರ ಕೆಳಗೆ, ಟೈಮರ್ ಅವಧಿ ಮುಗಿದಾಗ ಹೇಳಬೇಕಾದ ಸಂದೇಶದ ಹೋಲಿಸಿದ ಕೋಡ್ ಸೇರಿಸಿ:
String end_message("Times up on your "); if (minutes > 0) { end_message += minutes; end_message += " minute "; } if (seconds > 0) { end_message += seconds; end_message += " second "; } end_message += "timer."; -
ಇದರ ನಂತರ, ಟೈಮರ್ ಪ್ರಾರಂಭ ಸಂದೇಶವನ್ನು ಹೇಳಿ:
say(begin_message); -
ಈ ಕಾರ್ಯಾಚರಣೆಯ ಕೊನೆಯಲ್ಲಿ, ಟೈಮರ್ ಪ್ರಾರಂಭಿಸಿ:
timer.in(total_seconds * 1000, timerExpired, (void *)(end_message.c_str()));ಇದರಿಂದ ಟೈಮರ್ ಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ. ಟೈಮರ್ ಮಿಲಿಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸೆಟ್ ಆಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಒಟ್ಟು ಸೆಕೆಂಡುಗಳನ್ನು 1,000 ರೊಂದಿಗೆ ಗುಣಿಸಬೇಕು ಮಿಲಿಸೆಕೆಂಡುಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು.
timerExpiredಫಂಕ್ಷನ್ ಕಾರ್-ಬ್ಯಾಕ್ ಆಗಿ ಪಾಸ್ ಆಗುತ್ತದೆ ಮತ್ತುend_messageಕಾರ್-ಬ್ಯಾಕ್ಗೆ_ARGUMENTS_ ಆಗಿ ಪಾಸ್ ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಕಾರ್-ಬ್ಯಾಕ್ ವೈ_void*_Argument ಗೆ ಮಾತ್ರ ಸ್ವೀಕಾರ, ಆದ್ದರಿಂದ ಸ್ಟ್ರಿಂಗ್ ಸರಿಯಾಗಿ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ. -
ಕೊನೆಗೆ, ಟೈಮರ್ ಅನ್ನು ಟಿಕ್ ಮಾಡಬೇಕು, ಮತ್ತು ಇದು
loopಫಂಕ್ಷನ್ನಲ್ಲಿ ಮಾಡಲಾಗುತ್ತದೆ.loopಫಂಕ್ಷನ್ ಕೆಳಗೆ ಈ ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:timer.tick(); -
ಈ ಕೋಡ್ ಅನ್ನು ನಿರ್ಮಿಸಿ, ನಿಮ್ಮ Wio ಟರ್ಮಿನಲ್ಗೆ ಅಪ್ಲೋಡ್ ಮಾಡಿ ಮತ್ತು ಸೀರಿಯಲ್ ಮೊಂಡಿಟರ್ ಮೂಲಕ ಪರೀಕ್ಷಿಸಿ. ಸೀರಿಯಲ್ ಮೊಂಡಿಟರ್ನಲ್ಲಿ
Readyಅನ್ನು ನೋಡಿದ ನಂತರ C ಬಟನ್ (ಎಡ ಬದಿ, ಪವರ್ ಸ್ವಿಚ್ಗೆ ಅಕ್ಕಟ್ಟಾಗಿ) ಒತ್ತಿ ಮತ್ತು ಮಾತಾಡಿ. 4 ಸೆಕೆಂಡುಗಳ ಆಡಿಯೋ ಹಿಡಿಯೋದು, ಪಠ್ಯಕ್ಕೆ ಪರಿವರ್ತಿಸಲಾಗುವುದು, ನಂತರ ನಿಮ್ಮ ಫಂಕ್ಷನ್ ಆ್ಯಪ್ಗೆ ಕಳುಹಿಸಲಾಗುವುದು ಮತ್ತು ಟೈಮರ್ ಸೆಟ್ ಆಗುವುದು. ನಿಮ್ಮ ಫಂಕ್ಶನ್ ಆ್ಯಪ್ ಸ್ಥಳೀಯವಾಗಿ ಚಲಿಸುತ್ತಿರುವುದಾಗಿ ಖಚಿತಪಡಿಸಿಕೊಂಡಿರಿ.ನೀವು ಟೈಮರ್ ಪ್ರಾರಂಭವಾಗುವಾಗ ಮತ್ತು ಮುಗಿಯುವಾಗ ನೋಡಬಹುದು.
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1101 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Connecting to WiFi.. Connected! Got access token. Ready. Starting recording... Finished recording Sending speech... Speech sent! {"RecognitionStatus":"Success","DisplayText":"Set a 2 minute and 27 second timer.","Offset":4700000,"Duration":35300000} Set a 2 minute and 27 second timer. {"seconds": 147} 2 minute 27 second timer started. Times up on your 2 minute 27 second timer.
💁 ಈ ಕೋಡ್ ಅನ್ನು code-timer/wio-terminal ಫೋಲ್ಡರ್ನಲ್ಲಿ ಕಂಡುಹಿಡಿಯಬಹುದು.
😀 ನಿಮ್ಮ ಟೈಮರ್ ಪ್ರೋಗ್ರಾಂ ಯಶಸ್ವಿಯಾಗಿದೆ!
ತಡೆಬಿಡುವಿಕೆ:
ಈ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು AI ಅನುವಾದ ಸೇವೆಯಾದ Co-op Translator ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯನ್ನು ಸಾಧಿಸಲು ಪ್ರಯತ್ನಿಸುವುದಾದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪು ಮಾಹಿತಿ ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿನ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತೆ. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಸಲಹೆ ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದದ ಬಳಕೆಯಿಂದ ಉಂಟಾದ ಯಾವುದೇ ದುರ್ಬೋಧನೆಗಳಿಗೆ ಅಥವಾ ತಾಲ್ಮೆಯ ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗಿರುವುದಿಲ್ಲ.