Arduino et Discord pouvant être programmé en Python, il est assez simple d’utiliser les commandes Python pour interagir avec la carte Arduino pour :
- allumer ou éteindre une led
- demander une mesure
- activer un moteur
- régler une led RGB
- …
Du côté Discord, que faire ?
Il vous faut :
- un compte Discord
- un serveur Discord
- un bot dédié
Tout ceci est expliqué dans la page Programmer un bot Discord en Python.
Du côté Python et Arduino, que faire ?
Il vous faut :
- une carte Arduino avec le FirmataExpress
- sur Python les paquets Discord et Pymata4
Tout ceci est expliqué dans la page Installation de Pymata4.
Exemple : allumer et éteindre une led
Lorsque le script suivant est exécuté, la communication avec Arduino est activé et le bot lancé.
Les commandes possibles sont :
- !allumer : allumer la led
- !eteindre : éteindre la led
- !quitter : terminer la communication avec Arduino et déconecter le du serveur Discord
- !purger : effacer tous les messages du salon (attention !)
import discord from discord.ext import commands import sys from pymata4 import pymata4 import time with open("token.txt","r",encoding="utf-8") as fichier : token= fichier.readline() bot = commands.Bot(command_prefix="!") ########################################################################## # à la connexion ########################################################################## @bot.event async def on_ready(): channel = discord.utils.get(bot.get_all_channels(), name="général") #remplacer "général" par le nom du salon await bot.get_channel(channel.id).send("Bonjour à tous !") print(f"{bot.user.name} est prêt.") ########################################################################## # en cas d'erreur ########################################################################## @bot.event async def on_command_error(ctx,error): if isinstance(error,commands.CommandNotFound): await ctx.reply("Vérifier votre commande.") else : raise error ########################################################################## # allumer ########################################################################## @bot.command(name="allumer") async def allumer(ctx): reponse="Led allumé." await ctx.reply(reponse) carte.digital_write(Led_bleue, 1) print(f"Réponse à message {ctx.message.id} : {reponse}") ########################################################################## # eteindre ########################################################################## @bot.command(name="eteindre") async def eteindre(ctx): reponse="Led éteinte." await ctx.reply(reponse) carte.digital_write(Led_bleue, 0) print(f"Réponse à message {ctx.message.id} : {reponse}") ########################################################################## # exit ########################################################################## @bot.command(name="quitter") async def quitter(ctx): reponse="Bot déconnecté. Bye Bye !" await ctx.reply(reponse) await bot.close() carte.shutdown() print(f"Réponse à message {ctx.message.id} : {reponse}") print("--------------- Fin --------------") ########################################################################## # Supprimer tous les messages : !purger ########################################################################## @bot.command(name="purger") async def purge(ctx): await ctx.channel.purge() ########################################################################## ########################################################################## ########################################################################## # Initialisations de Pymata et exécution du bot ########################################################################## ########################################################################## ########################################################################## carte = pymata4.Pymata4() print("--------------- Début --------------") # Constantes Led_bleue = 13 # Led carte.set_pin_mode_digital_output(Led_bleue) time.sleep(1) with open("token.txt","r",encoding="utf-8") as fichier : token= fichier.readline() bot.run(token)