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/it/6-consumer/lessons/3-spoken-feedback/single-board-computer-set-t...

6.4 KiB

Imposta un timer - Hardware IoT virtuale e Raspberry Pi

In questa parte della lezione, chiamerai il tuo codice serverless per comprendere il discorso e impostare un timer sul tuo dispositivo IoT virtuale o Raspberry Pi in base ai risultati.

Imposta un timer

Il testo che viene restituito dalla chiamata di riconoscimento vocale deve essere inviato al tuo codice serverless per essere elaborato da LUIS, ottenendo così il numero di secondi per il timer. Questo numero di secondi può essere utilizzato per impostare un timer.

I timer possono essere impostati utilizzando la classe threading.Timer di Python. Questa classe accetta un tempo di ritardo e una funzione, ed esegue la funzione dopo il tempo di ritardo.

Attività - invia il testo alla funzione serverless

  1. Apri il progetto smart-timer in VS Code e assicurati che l'ambiente virtuale sia caricato nel terminale se stai utilizzando un dispositivo IoT virtuale.

  2. Sopra la funzione process_text, dichiara una funzione chiamata get_timer_time per chiamare l'endpoint REST che hai creato:

    def get_timer_time(text):
    
  3. Aggiungi il seguente codice a questa funzione per definire l'URL da chiamare:

    url = '<URL>'
    

    Sostituisci <URL> con l'URL del tuo endpoint REST che hai costruito nella lezione precedente, sia sul tuo computer che nel cloud.

  4. Aggiungi il seguente codice per impostare il testo come una proprietà passata come JSON alla chiamata:

    body = {
        'text': text
    }
    
    response = requests.post(url, json=body)
    
  5. Sotto questo, recupera i seconds dal payload della risposta, restituendo 0 se la chiamata non è riuscita:

    if response.status_code != 200:
        return 0
    
    payload = response.json()
    return payload['seconds']
    

    Le chiamate HTTP riuscite restituiscono un codice di stato nella gamma 200, e il tuo codice serverless restituisce 200 se il testo è stato elaborato e riconosciuto come intento di impostazione del timer.

Attività - imposta un timer su un thread in background

  1. Aggiungi la seguente istruzione di importazione all'inizio del file per importare la libreria Python threading:

    import threading
    
  2. Sopra la funzione process_text, aggiungi una funzione per pronunciare una risposta. Per ora, questa scriverà semplicemente sulla console, ma più avanti in questa lezione pronuncerà il testo.

    def say(text):
        print(text)
    
  3. Sotto questa, aggiungi una funzione che verrà chiamata da un timer per annunciare che il timer è terminato:

    def announce_timer(minutes, seconds):
        announcement = 'Times up on your '
        if minutes > 0:
            announcement += f'{minutes} minute '
        if seconds > 0:
            announcement += f'{seconds} second '
        announcement += 'timer.'
        say(announcement)
    

    Questa funzione prende il numero di minuti e secondi del timer e costruisce una frase per dire che il timer è terminato. Controlla il numero di minuti e secondi e include solo ciascuna unità di tempo se ha un valore. Ad esempio, se il numero di minuti è 0, vengono inclusi solo i secondi nel messaggio. Questa frase viene quindi inviata alla funzione say.

  4. Sotto questa, aggiungi la seguente funzione create_timer per creare un timer:

    def create_timer(total_seconds):
        minutes, seconds = divmod(total_seconds, 60)
        threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
    

    Questa funzione prende il numero totale di secondi per il timer che verrà inviato nel comando e lo converte in minuti e secondi. Quindi crea e avvia un oggetto timer utilizzando il numero totale di secondi, passando la funzione announce_timer e una lista contenente i minuti e i secondi. Quando il timer scade, chiamerà la funzione announce_timer e passerà il contenuto di questa lista come parametri: quindi il primo elemento della lista viene passato come parametro minutes e il secondo elemento come parametro seconds.

  5. Alla fine della funzione create_timer, aggiungi del codice per costruire un messaggio da pronunciare all'utente per annunciare che il timer sta iniziando:

    announcement = ''
    if minutes > 0:
        announcement += f'{minutes} minute '
    if seconds > 0:
        announcement += f'{seconds} second '    
    announcement += 'timer started.'
    say(announcement)
    

    Anche in questo caso, include solo l'unità di tempo che ha un valore. Questa frase viene quindi inviata alla funzione say.

  6. Aggiungi il seguente codice alla fine della funzione process_text per ottenere il tempo per il timer dal testo, quindi crea il timer:

    seconds = get_timer_time(text)
    if seconds > 0:
        create_timer(seconds)
    

    Il timer viene creato solo se il numero di secondi è maggiore di 0.

  7. Esegui l'app e assicurati che l'applicazione della funzione sia in esecuzione. Imposta alcuni timer e l'output mostrerà che il timer è stato impostato e poi mostrerà quando scade:

    pi@raspberrypi:~/smart-timer $ python3 app.py 
    Set a two minute 27 second timer.
    2 minute 27 second timer started.
    Times up on your 2 minute 27 second timer.
    

💁 Puoi trovare questo codice nella cartella code-timer/pi o code-timer/virtual-iot-device.

😀 Il tuo programma timer è stato un successo!

Disclaimer:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.