17 KiB
टाइमर सेट करें - Wio Terminal
इस पाठ के इस भाग में, आप अपने सर्वरलेस कोड को कॉल करेंगे ताकि स्पीच को समझा जा सके और परिणामों के आधार पर अपने Wio Terminal पर एक टाइमर सेट कर सकें।
टाइमर सेट करें
स्पीच टू टेक्स्ट कॉल से प्राप्त टेक्स्ट को आपके सर्वरलेस कोड में भेजा जाना चाहिए ताकि LUIS द्वारा इसे प्रोसेस किया जा सके और टाइमर के लिए सेकंड की संख्या प्राप्त की जा सके। इस सेकंड की संख्या का उपयोग टाइमर सेट करने के लिए किया जा सकता है।
माइक्रोकंट्रोलर्स में Arduino में मूल रूप से मल्टीपल थ्रेड्स का समर्थन नहीं होता है, इसलिए यहां कोई मानक टाइमर क्लास नहीं होती जैसे कि आप Python या अन्य उच्च-स्तरीय भाषाओं में कोडिंग करते समय पाते हैं। इसके बजाय, आप टाइमर लाइब्रेरीज़ का उपयोग कर सकते हैं जो loop
फंक्शन में बीते हुए समय को मापकर काम करती हैं और समय समाप्त होने पर फंक्शन को कॉल करती हैं।
कार्य - टेक्स्ट को सर्वरलेस फंक्शन में भेजें
-
यदि
smart-timer
प्रोजेक्ट पहले से VS Code में खुला नहीं है, तो इसे खोलें। -
config.h
हेडर फाइल खोलें और अपनी फंक्शन ऐप के लिए URL जोड़ें:const char *TEXT_TO_TIMER_FUNCTION_URL = "<URL>";
<URL>
को अपनी फंक्शन ऐप के URL से बदलें, जो आपने पिछले पाठ के अंतिम चरण में प्राप्त किया था, और जो आपके लोकल मशीन के IP एड्रेस की ओर इशारा करता है। -
src
फोल्डर में एक नई फाइल बनाएं जिसका नामlanguage_understanding.h
हो। इसका उपयोग एक क्लास को परिभाषित करने के लिए किया जाएगा जो पहचानी गई स्पीच को आपकी फंक्शन ऐप में सेकंड में बदलने के लिए भेजेगी। -
इस फाइल के शीर्ष पर निम्नलिखित जोड़ें:
#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);
यह फंक्शन ऐप को एक 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 <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
को एक आर्ग्युमेंट के रूप में पास किया जाता है ताकि इसे कॉलबैक में पास किया जा सके। यह कॉलबैक केवलvoid *
आर्ग्युमेंट लेता है, इसलिए स्ट्रिंग को उपयुक्त रूप से बदला जाता है। -
अंत में, टाइमर को टिक करने की आवश्यकता होती है, और यह
loop
फंक्शन में किया जाता है।loop
फंक्शन के अंत में निम्नलिखित कोड जोड़ें:timer.tick();
-
इस कोड को बनाएं, इसे अपने Wio Terminal पर अपलोड करें और इसे सीरियल मॉनिटर के माध्यम से टेस्ट करें। जैसे ही आप सीरियल मॉनिटर में
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 का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।