Accendere led con Arduino e Telegram

Pubblicato il - lettura in 4 min
Ludus Russo

Ludus Russo

Un maker, un robotico, un Roker!

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
Ludus Russo

Ludus Russo

Un maker, un robotico, un Roker!

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora