Nuova sezione libri disponibile!

Accendere led con Arduino e Telegram

Ludovico Russo

lettura in 4 minuti

A poche ore dal corso che ho tenuto ieri al mio vecchio Liceo, già iniziano ad nascere progetti interessanti dei partecipanti. Alcuni ragazzi, in particolare, mi hanno stupito, in quanto in pochissimo tempo e con poco supporto sono riusciti a realizzare un bot telegram in grado di mandare comandi ad Arduino.

Ho chiesto loro di scrivere questo breve tutorial per realizzare il progetto.

Tutorial: realizzare un bot telegram per controllare Arduino

Ormai sono veramente tanti i progetti realizzati con Arduino, e una delle cose a mio giudizio più interessanti è la possibilità di attivare Arduino a distanza tramite dispositivi mobili. Così, in occasione di un corso tenuto al liceo G. Stampacchia di Tricase da Ludovico Russo, ho iniziato a programmare un bot su Telegram che facesse accendere o spegnere vari led ad Arduino, perfezionandolo poi a casa.

Il risultato che ho ottenuto mi ha molto soddisfatto, anche perchè sono riuscito a rimediare a delle piccole imperfezioni che avevo riscontrato all'inizio e che non mi piacevano. Scriverò quindi questo tutorial per spiegarvi di preciso cosa e come ho fatto.

1. Cosa serve

  • Arduino UNO
  • cavo USB per Arduino
  • breadboard
  • 4 LED di colori diversi (blu, rosso, giallo, verde)
  • 4 resistenze da 330Ω
  • 5 jumper
  • l'IDE Arduino, scaricabile da qui
  • la piattaforma Anaconda, scaricabile da qui
  • il firmware nanpy di Ludovico, scaricabile da qui
  • l'app Telegram

2. Come collegare le varie componenti

Lo schema per collegare tutte le componenti ad Arduino è il seguente: alt text

3. Come preparare Arduino

Basta aprire il file nanpy-firmware-master/Nanpy/Nanpy.ino dalla cartella del firmware nanpy con l'IDE Arduino e caricarlo su Arduino UNO.

4. Come creare il bot di Telegram

Questa fase si divide in due parti: la prima va fatta dal dispositivo su cui c'è installata l'app di Telegram, la seconda dal computer su cui si è installato Anaconda.

4.1 Da dispositivo

Bisogna cercare su Telegram il bot BotFather e avviarlo.

Tramite il comando /newbot si avvierà la procedura di creazione che consiste nel dare un nome ed uno username (quest'ultimo deve essere univoco) al bot. BotFather invierà quindi un codice, detto token, che noi potremmo in seguito usare per modificare il bot stesso.

4.2 Da computer

Aprire Anaconda Navigator (che non useremo direttamente) e Spyder, su cui scriveremo il codice vero e proprio. Se è la prima volta che si usa Spyder, bisogna installare la libreria nanpy. Per fare ciò è sufficiente inserire nella IPython console (in basso a destra) il codice

! pip install telepot nanpy

Una volta installata, viene la parte di vera e propria programmazione (in Python). Bisogna infatti scrivere nell'editor principale di Spyder il codice che detta il comportamento del bot. nel nostro caso il codice è questo:

import telepot
import time
from nanpy import ArduinoApi, SerialManager
from telepot.namedtuple import InlineKeyboardMarkup, InlineKeyboardButton


connection = SerialManager(device='COM3') #eventualmente cambiare la porta COM3
a = ArduinoApi(connection=connection)     #con quella effettivamente usata
a.pinMode(12, a.OUTPUT)
a.pinMode(11, a.OUTPUT)
a.pinMode(10, a.OUTPUT)
a.pinMode(9, a.OUTPUT)

def on_chat_message(msg): #crea la tastiera personalizzata
    content_type, chat_type, chat_id = telepot.glance(msg)

    keyboard = InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text="Blu", callback_data='/blu'), InlineKeyboardButton(text="Rosso", callback_data='/rosso')],
                                     [InlineKeyboardButton(text="Verde", callback_data='/verde'), InlineKeyboardButton(text="Giallo", callback_data='/giallo')]])

    bot.sendMessage(chat_id, 'Premi un pulsante per cambiare lo stato del led corrispondente', reply_markup=keyboard)


def on_callback_query(msg): #aziona i vari LED in base al pulsante toccato
    query_id, from_id, query_data = telepot.glance(msg, flavor='callback_query')
    print('Callback Query:', query_id, from_id, query_data)

    if query_data == '/blu':
         if a.digitalRead(12)==0:
                a.digitalWrite(12, 1)
                bot.answerCallbackQuery(query_id, text='Blu acceso')
         else:
                    a.digitalWrite(12, 0)
                    bot.answerCallbackQuery(query_id, text='Blu spento')
    elif query_data == '/rosso':
                        if a.digitalRead(11)==0:
                            a.digitalWrite(11, 1)
                            bot.answerCallbackQuery(query_id, text='Rosso acceso')
                        else:
                            a.digitalWrite(11, 0)
                            bot.answerCallbackQuery(query_id, text='Rosso spento')

    elif query_data == '/verde':
            if a.digitalRead(10)==0:
                a.digitalWrite(10, 1)
                bot.answerCallbackQuery(query_id, text='Verde acceso')
            else:
                a.digitalWrite(10, 0)
                bot.answerCallbackQuery(query_id, text='Verde spento')

    elif query_data == '/giallo':
            if a.digitalRead(9)==0:
                a.digitalWrite(9, 1)
                bot.answerCallbackQuery(query_id, text='Giallo acceso')
            else:
                a.digitalWrite(9, 0)
                bot.answerCallbackQuery(query_id, text='Giallo spento')


bot=telepot.Bot('*inserire il token del proprio bot*')
bot.message_loop({'chat': on_chat_message,
                  'callback_query': on_callback_query})
print ('Listening ...')

while 1:
    time.sleep(10)

A questo punto bisogna eseguire il file e, se tutto è andato bene, il bot di Telegram farà accendere e spegnere i LED che vogliamo notificandoci di volta in volta cosa è successo con l'ultima azione.

Ecco un esempio di chat il con bot

chat con il bot

Autori

  • Matteo Protopapa
  • Giuseppe Galilei
  • Gianvito Marzo

Ti è piaciuto questo post?

Registrati alla newsletter per rimanere sempre aggiornato!

Ci tengo alla tua privacy. Leggi di più sulla mia Privacy Policy.

Ti potrebbe anche interessare

HB Cloud Tutorial #1 - Uso dei Led
Iniziamo ad utilizzare la piattaforma di Cloud Robotics
HB Cloud Tutorial #2 - Uso dei Bottoni
Rieccomi con il secondo tutorial legato all'uso dei bottoni per il robot **DotBot-ROS**. In questo tutorial, vedremo come configurare ed utilizzare in Python un bottone attaccato ad un pin GPIO del Raspberry Pi 3.
HB Cloud Tutorial #3 - I Motori
I Motori sono una delle parti essenziali dei robot. In questo tutorial, vederemo come è possibile in modo semplice ed intuitivo implementare un programma in Python che controlla i motori in base a comandi inviati via Wifi al Robot.
Inviare Goals alla Navigation Stack - versione nodo ROS Python
Inviare un goal all ROS navigation stack utilizzando un nodo Python
Controllare siBOT dalla piattaforma HBR
Come controllare il manipolatore siBOT utilizzando la piattaforma HBR
Sviluppare un rilevatore di fiamma con la visione artificiale
Sviluppare un rilevatore di fiamma con la visione artificiale
Scriviamo un Blog in Python e Flask
Tutorial su come implementare, a partire da zero, un blog personale utilizzando Python e Flask! Prima parte!
Un laboratorio di Fisica con Arduino e Python
Primi esperimenti con Arduino e Python per realizzare un semplice laboratorio di fisica sfruttando la potenza di Python e la versatilità di Arduino
Un IDE web Arduino sviluppato in Python e Flask
Un mio progetto dell'estate del 2015 che permette di programmare Arduino da un'interfaccia Web esposta da un Raspberry Pi
Canopy: una Pythonica alternativa a Matlab
Presento questo interessante tool python che può essere considerato una buona alternativa a Matlab per l'analisi dei dati!
Spyder, un'altra alternativa in Python a Matlab
Una velocissima prova del tool interattivo Spyder per l'analisi scientifica in Python
Simuliamo il moto parabolico in Python e Spyder
Un piccolo tutorial per iniziare ad utilizzare Spyder con Python
Python + Arduino = Nanpy
Programmare Arduino in Python con Nanpy
Utilizzo di Nanpy con il sensore di temperatura/umidità della famiglia DHT
Come utilizzare Nanpy col sensore DHT di temperatura e Umidità
Pasqua al Liceo Stampacchia di Tricase: Corsi di Arduino e Stampa 3D
In occasione delle vacanze di Pasqua 2017, il Liceo G. Stampacchia organizza due corsi tenuti da me su Arduino e stampa 3D.
Implementiamo un bot Telegram con Python
Una semplice guida per iniziare a muovere i primi passi nello sviluppo di chatbot Telegram con Python
Pillole di Python: pyscreenshot
Una semplice tutorial che mostra il funzionamento della libreria pyscreenshot
Sviluppiamo un'app in Electron per controllare la scheda Arduino - parte 2
In questo tutorial, vediamo come sviluppare un oscilloscopio con Node.js, Electron e Typescript
Laboratorio di Robotica al Liceo Stampacchia
Aperte le iscrizioni al corso "Laboratorio di Robotica" presso il Liceo G. Stampacchia di Tricase
Python Decorators
Introduzione ai decoratori in Python
TDD con Flask e PyTest per lo sviluppo di API REST. Parte 1
Tutorial su come usare il Test Driver Development (TDD) con Flask e PyTest per sviluppare delle semplici API REST
Implementiamo un bot Telegram con Python - I Comandi
Vediamo come gestire i comandi del nostro bot in Telegram
4 (+1) Libri su Python (in Inglese) da cui imparare
Una lista di libri su Python (in Inglese) da cui ho imparato a programmare
Virtualenv: gestiamo meglio le dipendenze in Python
A cosa servono e come si utilizzano i virtualenv Python
Leggere i codici a barre con OpenCV e zbar in Python
Come usare Python per leggere i codici a barre degli alimenti e ricavarne alcune informazioni utili
TDD con Flask e PyTest per lo sviluppo di API REST. Parte 2
Tutorial su come usare il Test Driver Development (TDD) con Flask e PyTest per sviluppare delle semplici API REST
Sviluppiamo un bot Telegram che legge i codici a barre degli alimenti
Implementiamo un bot Telegram in grado di leggere ed analizzare le immagini per la lettura ed interpretazione dei codici a barre
TDD con Flask e PyTest per lo sviluppo di API REST. Parte 3
Tutorial su come usare il Test Driver Development (TDD) con Flask e PyTest per sviluppare delle semplici API REST
Divertiamoci sviluppando UI da terminale con ASCIIMATICS
Le UI da terminale fanno molto anni '80, però sono sempre diventerti da implementare. Oggi vi voglio introdurre ad una semplice libreria per creare questo tipo di applicazione.
Sviluppiamo un Robot con tecnologie Open Source
Inizio una serie di videoguide, in cui voglio introdurvi al mondo della robotica di servizio in modo pratico, facendo vedere come è possibilile, sfruttando tecnologie completamente Open Source, quali Arduino, Raspberry Pi, ROS e Docker, costruire un piccolo robot di Servizio.
Parliamo come GMaps: come creare file audio con gtts (Google Text to Speech) in Python
gtts è una libreria in Python per sfruttare le API di Google Text to Speech per generare file audio dal testo
Robot Open Source - Introduzione a Docker
È disponibile il video "Introduzione a Docker".
I chatbot possono Parlare? Sviluppiamo un bot telegram che manda messaggi vocali
Usiamo le API di sintesi vocale di google per creare un bot in grado di mandare messaggi vocali
Robot Open Source - Docker e Raspberry
È disponibile il video "Docker e Raspberry".
Un bot telegram che invia messaggi al verificarsi di eventi sui GPIO del Raspberry Pi
Mandare un messaggio tramite telegram quando il un GPIO del Raspberry cambia stato è possibile, ecco come!