You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/hi/6-consumer/lessons/3-spoken-feedback/wio-terminal-set-timer.md

17 KiB

टाइमर सेट करें - Wio Terminal

इस पाठ के इस भाग में, आप अपने सर्वरलेस कोड को कॉल करेंगे ताकि स्पीच को समझा जा सके और परिणामों के आधार पर अपने Wio Terminal पर एक टाइमर सेट कर सकें।

टाइमर सेट करें

स्पीच टू टेक्स्ट कॉल से प्राप्त टेक्स्ट को आपके सर्वरलेस कोड में भेजा जाना चाहिए ताकि LUIS द्वारा इसे प्रोसेस किया जा सके और टाइमर के लिए सेकंड की संख्या प्राप्त की जा सके। इस सेकंड की संख्या का उपयोग टाइमर सेट करने के लिए किया जा सकता है।

माइक्रोकंट्रोलर्स में Arduino में मूल रूप से मल्टीपल थ्रेड्स का समर्थन नहीं होता है, इसलिए यहां कोई मानक टाइमर क्लास नहीं होती जैसे कि आप Python या अन्य उच्च-स्तरीय भाषाओं में कोडिंग करते समय पाते हैं। इसके बजाय, आप टाइमर लाइब्रेरीज़ का उपयोग कर सकते हैं जो loop फंक्शन में बीते हुए समय को मापकर काम करती हैं और समय समाप्त होने पर फंक्शन को कॉल करती हैं।

कार्य - टेक्स्ट को सर्वरलेस फंक्शन में भेजें

  1. यदि smart-timer प्रोजेक्ट पहले से VS Code में खुला नहीं है, तो इसे खोलें।

  2. config.h हेडर फाइल खोलें और अपनी फंक्शन ऐप के लिए URL जोड़ें:

    const char *TEXT_TO_TIMER_FUNCTION_URL = "<URL>";
    

    <URL> को अपनी फंक्शन ऐप के URL से बदलें, जो आपने पिछले पाठ के अंतिम चरण में प्राप्त किया था, और जो आपके लोकल मशीन के IP एड्रेस की ओर इशारा करता है।

  3. src फोल्डर में एक नई फाइल बनाएं जिसका नाम language_understanding.h हो। इसका उपयोग एक क्लास को परिभाषित करने के लिए किया जाएगा जो पहचानी गई स्पीच को आपकी फंक्शन ऐप में सेकंड में बदलने के लिए भेजेगी।

  4. इस फाइल के शीर्ष पर निम्नलिखित जोड़ें:

    #pragma once
    
    #include <Arduino.h>
    #include <ArduinoJson.h>
    #include <HTTPClient.h>
    #include <WiFiClient.h>
    
    #include "config.h"
    

    इसमें कुछ आवश्यक हेडर फाइलें शामिल हैं।

  5. LanguageUnderstanding नामक एक क्लास परिभाषित करें और इस क्लास का एक इंस्टेंस घोषित करें:

    class LanguageUnderstanding
    {
    public:
    private:
    };
    
    LanguageUnderstanding languageUnderstanding;
    
  6. अपनी फंक्शन ऐप को कॉल करने के लिए, एक WiFi क्लाइंट घोषित करें। क्लास के private सेक्शन में निम्नलिखित जोड़ें:

    WiFiClient _client;
    
  7. public सेक्शन में, GetTimerDuration नामक एक मेथड घोषित करें ताकि फंक्शन ऐप को कॉल किया जा सके:

    int GetTimerDuration(String text)
    {
    }
    
  8. GetTimerDuration मेथड में, फंक्शन ऐप को भेजे जाने वाले JSON को बनाने के लिए निम्नलिखित कोड जोड़ें:

    DynamicJsonDocument doc(1024);
    doc["text"] = text;
    
    String body;
    serializeJson(doc, body);
    

    यह GetTimerDuration मेथड को पास किए गए टेक्स्ट को निम्नलिखित JSON में बदलता है:

    {
        "text" : "<text>"
    }
    

    जहां <text> वह टेक्स्ट है जो फंक्शन को पास किया गया है।

  9. इसके नीचे, फंक्शन ऐप कॉल करने के लिए निम्नलिखित कोड जोड़ें:

    HTTPClient httpClient;
    httpClient.begin(_client, TEXT_TO_TIMER_FUNCTION_URL);
    
    int httpResponseCode = httpClient.POST(body);
    

    यह फंक्शन ऐप को एक POST अनुरोध भेजता है, JSON बॉडी पास करता है और प्रतिक्रिया कोड प्राप्त करता है।

  10. इसके नीचे निम्नलिखित कोड जोड़ें:

    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 पर सेट की जाती है।

  11. इस मेथड के अंत में निम्नलिखित कोड जोड़ें ताकि HTTP कनेक्शन बंद हो जाए और सेकंड की संख्या लौटाई जा सके:

    httpClient.end();
    
    return seconds;
    
  12. main.cpp फाइल में इस नए हेडर को शामिल करें:

    #include "speech_to_text.h"
    
  13. processAudio फंक्शन के अंत में, GetTimerDuration मेथड को कॉल करें ताकि टाइमर की अवधि प्राप्त की जा सके:

    int total_seconds = languageUnderstanding.GetTimerDuration(text);
    

    यह SpeechToText क्लास से कॉल के टेक्स्ट को टाइमर के सेकंड की संख्या में बदलता है।

कार्य - टाइमर सेट करें

सेकंड की संख्या का उपयोग टाइमर सेट करने के लिए किया जा सकता है।

  1. platformio.ini फाइल में निम्नलिखित लाइब्रेरी डिपेंडेंसी जोड़ें ताकि टाइमर सेट करने के लिए एक लाइब्रेरी जोड़ी जा सके:

    contrem/arduino-timer @ 2.3.0
    
  2. main.cpp फाइल में इस लाइब्रेरी के लिए एक इनक्लूड डायरेक्टिव जोड़ें:

    #include <arduino-timer.h>
    
  3. processAudio फंक्शन के ऊपर निम्नलिखित कोड जोड़ें:

    auto timer = timer_create_default();
    

    यह कोड timer नामक एक टाइमर घोषित करता है।

  4. इसके नीचे निम्नलिखित कोड जोड़ें:

    void say(String text)
    {
        Serial.print("Saying ");
        Serial.println(text);
    }
    

    यह say फंक्शन अंततः टेक्स्ट को स्पीच में बदल देगा, लेकिन फिलहाल यह पास किए गए टेक्स्ट को केवल सीरियल मॉनिटर पर लिखेगा।

  5. say फंक्शन के नीचे निम्नलिखित कोड जोड़ें:

    bool timerExpired(void *announcement)
    {
        say((char *)announcement);
        return false;
    }
    

    यह एक कॉलबैक फंक्शन है जो तब कॉल किया जाएगा जब टाइमर समाप्त हो जाएगा। इसे एक संदेश पास किया जाता है जिसे टाइमर समाप्त होने पर कहा जाएगा। टाइमर दोहराए जा सकते हैं, और इसे इस कॉलबैक के रिटर्न वैल्यू द्वारा नियंत्रित किया जा सकता है - यह false लौटाता है, ताकि टाइमर फिर से न चले।

  6. processAudio फंक्शन के अंत में निम्नलिखित कोड जोड़ें:

    if (total_seconds == 0)
    {
        return;
    }
    
    int minutes = total_seconds / 60;
    int seconds = total_seconds % 60;
    

    यह कोड कुल सेकंड की संख्या की जांच करता है, और यदि यह 0 है, तो फंक्शन कॉल से लौट आता है ताकि कोई टाइमर सेट न हो। फिर यह कुल सेकंड की संख्या को मिनट और सेकंड में बदलता है।

  7. इस कोड के नीचे, टाइमर शुरू होने पर कहने के लिए एक संदेश बनाने के लिए निम्नलिखित जोड़ें:

    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.";
    
  8. इसके नीचे, टाइमर समाप्त होने पर कहने के लिए एक समान संदेश बनाने के लिए कोड जोड़ें:

    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.";
    
  9. इसके बाद, टाइमर शुरू होने का संदेश कहें:

    say(begin_message);
    
  10. इस फंक्शन के अंत में, टाइमर शुरू करें:

    timer.in(total_seconds * 1000, timerExpired, (void *)(end_message.c_str()));
    

    यह टाइमर को ट्रिगर करता है। टाइमर को मिलीसेकंड में सेट किया जाता है, इसलिए कुल सेकंड की संख्या को 1,000 से गुणा किया जाता है ताकि इसे मिलीसेकंड में बदला जा सके। timerExpired फंक्शन को कॉलबैक के रूप में पास किया जाता है, और end_message को एक आर्ग्युमेंट के रूप में पास किया जाता है ताकि इसे कॉलबैक में पास किया जा सके। यह कॉलबैक केवल void * आर्ग्युमेंट लेता है, इसलिए स्ट्रिंग को उपयुक्त रूप से बदला जाता है।

  11. अंत में, टाइमर को टिक करने की आवश्यकता होती है, और यह loop फंक्शन में किया जाता है। loop फंक्शन के अंत में निम्नलिखित कोड जोड़ें:

    timer.tick();
    
  12. इस कोड को बनाएं, इसे अपने 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 का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।