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)