Arduino UNO Q - Bot Telegram

Voulez-vous contrôler votre Arduino UNO Q depuis n'importe où avec Telegram ? Ce tutoriel vous montre comment créer un Bot Telegram qui s'exécute côté Linux de l'Arduino UNO Q (Debian) et répond à des commandes fixes comme /toggle_led ou /status — sans IA ni service cloud requis.

Dans ce tutoriel, vous apprendrez :

Bot Telegram Arduino UNO Q

Matériel Requis

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Recommandé: Shield à bornier à vis pour Arduino Uno
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommandé: Shield plaque d'essai pour Arduino Uno
1×Recommandé: Boîtier pour Arduino Uno
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Arduino Uno

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Comment Ça Fonctionne

L'Arduino UNO Q combine deux processeurs :

  • MCU STM32 — exécute votre sketch Arduino. Il contrôle le matériel (LEDs, relais, capteurs, etc.) en temps réel.
  • MPU Qualcomm — exécute Debian Linux complet. Il se connecte au Wi-Fi et peut exécuter un script Python qui communique avec Telegram.

Les deux processeurs communiquent via le Bridge. Le MCU expose les fonctions matérielles via Bridge, et le script Python côté Linux appelle ces fonctions lorsqu'une commande Telegram arrive.

Voici le flux pour chaque message utilisateur :

  1. L'utilisateur envoie une commande au bot Telegram : /toggle_led
  2. Le script Python exécuté côté Linux de l'Arduino UNO Q interroge l'API Telegram, reçoit le message et analyse la commande
  3. Le script Python appelle Bridge.call("toggle_led", "") pour atteindre le MCU
  4. Le MCU (STM32) bascule la LED et retourne le résultat via Bridge
  5. Le script Python envoie la réponse à l'utilisateur via Telegram : LED is now ON

※ Note:

Le script Python utilise le long polling — il demande répétitivement à Telegram "y a-t-il de nouveaux messages ?". Cela fonctionne sans adresse IP publique ni redirection de port, donc il s'exécute sur n'importe quel réseau.

Fonctionnalité Détails
Style de commande Commandes fixes (ex. /toggle_led, /status)
Nécessite un modèle IA Non
Canal de messagerie Telegram uniquement
S'exécute sur Côté Linux de l'Arduino UNO Q (Debian)
Nécessite une IP publique Non (utilise le polling)

※ Note:

Si vous souhaitez un contrôle en langage naturel ("allume la LED", "quel est le statut ?") sur plusieurs canaux (Telegram, WhatsApp, Discord, et plus), consultez le tutoriel Arduino UNO Q - OpenClaw à la place.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Étape 1 — Créer un Bot Telegram avec BotFather

BotFather est le bot Telegram officiel qui crée et gère les autres bots. Vous l'utiliserez pour obtenir un token de bot — la clé que votre script Python utilise pour envoyer et recevoir des messages.

  • Ouvrez Telegram et recherchez @BotFather, ou ouvrez ce lien : t.me/BotFather
  • Démarrez une conversation et envoyez :
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.
BotFather

BotFather

bot
Today
/newbot
10:15 AM ✓✓
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
10:16 AM
  • Envoyez un nom d'affichage pour votre bot (cela peut être n'importe quoi) :
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.
BotFather

BotFather

bot
Today
My Arduino UNO Q
10:15 AM ✓✓
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
10:16 AM
  • Envoyez un nom d'utilisateur se terminant par bot (doit être unique dans tout Telegram) :
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.
BotFather

BotFather

bot
Today
my_arduino_uno_q_bot
10:15 AM ✓✓
Done! Congratulations on your new bot. You will find it at t.me/my_arduino_uno_q_bot. You can now add a description, about section and profile picture for your bot... Use this token to access the HTTP API: 1234567890:ABCDefGhIJKlmNoPQRsTUVwXYZ1234567890 Keep your token secure and store it safely, it can be used by anyone to control your bot.
10:16 AM
  • Copiez le token du bot — il ressemble à ceci :
1234567890:ABCDefGhIJKlmNoPQRsTUVwXYZ1234567890

※ Note:

Gardez votre token de bot secret. Quiconque le possède peut envoyer et recevoir des messages via votre bot.

Étape 2 — Code Arduino UNO Q

Code MCU

Le sketch MCU expose les fonctions de contrôle matériel via Bridge. Le script Python côté Linux appelle ces fonctions lorsqu'une commande Telegram arrive.

/* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-q/arduino-uno-q-telegram-bot */ #include "Arduino_RouterBridge.h" // LED_BUILTIN is LED3 on the board, lights up RED, active LOW // LOW = ON, HIGH = OFF bool ledState = false; unsigned long startMs = 0; String toggle_led(String arg) { ledState = !ledState; digitalWrite(LED_BUILTIN, ledState ? LOW : HIGH); Monitor.println(ledState ? "LED turned ON" : "LED turned OFF"); return ledState ? "ON" : "OFF"; } String led_on(String arg) { ledState = true; digitalWrite(LED_BUILTIN, LOW); Monitor.println("LED turned ON"); return "ON"; } String led_off(String arg) { ledState = false; digitalWrite(LED_BUILTIN, HIGH); Monitor.println("LED turned OFF"); return "OFF"; } String get_status(String arg) { unsigned long uptime = (millis() - startMs) / 1000; String status = "MCU is running. Uptime: " + String(uptime) + "s. LED: "; status += ledState ? "ON" : "OFF"; Monitor.println("Status requested: " + status); return status; } void setup() { Monitor.begin(); Bridge.begin(); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // Start with LED off (active LOW) startMs = millis(); Bridge.provide_safe("toggle_led", toggle_led); Bridge.provide_safe("led_on", led_on); Bridge.provide_safe("led_off", led_off); Bridge.provide_safe("get_status", get_status); Monitor.println("Telegram Bot Bridge ready"); } void loop() { }

Code Python

Le script Python s'exécute côté Linux de l'Arduino UNO Q. Il interroge l'API Telegram pour les nouveaux messages, analyse les commandes, appelle le MCU via Bridge et envoie les réponses.

/* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-q/arduino-uno-q-telegram-bot */ from arduino.app_utils import * import urllib.request import urllib.parse import json import time # ── Configuration ──────────────────────────────────────────────────────────── BOT_TOKEN = "YOUR_BOT_TOKEN" # Replace with the token from BotFather # ───────────────────────────────────────────────────────────────────────────── TELEGRAM_API = "https://api.telegram.org/bot" + BOT_TOKEN HELP_TEXT = ( "Available commands:\n" "/toggle_led - Toggle the LED\n" "/led_on - Turn LED on\n" "/led_off - Turn LED off\n" "/status - Get MCU status\n" "/help - Show this message" ) def telegram_get(method, params=None): url = TELEGRAM_API + "/" + method if params: url += "?" + urllib.parse.urlencode(params) with urllib.request.urlopen(url, timeout=30) as resp: return json.loads(resp.read().decode()) def telegram_post(method, data): url = TELEGRAM_API + "/" + method payload = json.dumps(data).encode() req = urllib.request.Request( url, data=payload, headers={"Content-Type": "application/json"} ) with urllib.request.urlopen(req, timeout=10) as resp: return json.loads(resp.read().decode()) def send_message(chat_id, text): telegram_post("sendMessage", {"chat_id": chat_id, "text": text}) def handle_command(chat_id, command): if command == "/toggle_led": state = Bridge.call("toggle_led", "") reply = "LED is now " + state elif command == "/led_on": Bridge.call("led_on", "") reply = "LED is now ON" elif command == "/led_off": Bridge.call("led_off", "") reply = "LED is now OFF" elif command == "/status": reply = Bridge.call("get_status", "") elif command == "/help" or command == "/start": reply = HELP_TEXT else: reply = "Unknown command. Send /help for a list of commands." print(command + " from chat " + str(chat_id) + " -> " + reply) send_message(chat_id, reply) def main(): print("Telegram bot started. Waiting for commands...") offset = None while True: try: params = {"timeout": 20, "allowed_updates": ["message"]} if offset is not None: params["offset"] = offset result = telegram_get("getUpdates", params) for update in result.get("result", []): offset = update["update_id"] + 1 msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() # Strip bot username suffix (e.g. /toggle_led@my_bot) command = text.split("@")[0].lower() handle_command(chat_id, command) except Exception as e: print("Error: " + str(e)) time.sleep(5) main()

Étapes Rapides

Première utilisation d'Arduino UNO Q ? Suivez le tutoriel Démarrer avec Arduino UNO Q pour préparer votre environnement de développement avant de continuer.

  • Connecter : Branchez l'Arduino UNO Q à votre ordinateur avec un câble USB-C.
  • Ouvrir Arduino App Lab : Lancez Arduino App Lab et attendez qu'il détecte votre Arduino UNO Q. Cela peut prendre quelques minutes au premier lancement.
  • Créer une nouvelle application : Cliquez sur le bouton Créer une nouvelle application.
Créer une nouvelle application dans Arduino App Lab sur Arduino UNO Q
  • Nommez l'application : TelegramBot
  • Cliquez sur Créer pour confirmer.
  • Vous verrez un ensemble de dossiers et fichiers générés dans votre nouvelle application.
  • Coller le sketch MCU : Ouvrez sketch/sketch.ino et remplacez son contenu par le code MCU ci-dessus.
  • Coller le script Python : Ouvrez python/main.py. Sélectionnez tout le contenu existant et supprimez-le, puis collez le code Python ci-dessus. Le code de modèle par défaut doit être entièrement remplacé — ne l'ajoutez pas.
  • Définir vos identifiants : Dans le code Python, remplacez BOT_TOKEN par le token de bot copié depuis BotFather.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    Add sketch library in Arduino App Lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • Téléverser : Cliquez sur le bouton Exécuter dans Arduino App Lab pour compiler et téléverser vers le STM32, puis démarrer le script Python.
    Cliquez sur le bouton Exécuter dans Arduino App Lab sur Arduino UNO Q
    • Conseil Pro : Gardez Arduino App Lab ouvert en arrière-plan. Le script Python doit être en cours d'exécution pour que les commandes Telegram atteignent le MCU.

    Sortie de la Console App Lab

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    [2026-05-08 10:00:01] Telegram Bot Bridge ready [2026-05-08 10:00:04] LED turned ON [2026-05-08 10:00:09] Status requested: MCU is running. LED: ON [2026-05-08 10:00:15] LED turned OFF
    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-05-08 10:00:01] Telegram bot started. Waiting for commands... [2026-05-08 10:00:04] /toggle_led from chat 987654321 -> LED is now ON [2026-05-08 10:00:09] /status from chat 987654321 -> MCU is running. LED: ON [2026-05-08 10:00:15] /toggle_led from chat 987654321 -> LED is now OFF

    Commandes Disponibles

    Une fois le bot en cours d'exécution, envoyez ces commandes à votre bot dans Telegram :

    Commande Ce qu'elle fait
    /toggle_led Bascule la LED intégrée ON ou OFF et répond avec le nouvel état
    /led_on Allume la LED
    /led_off Éteint la LED
    /status Retourne le statut MCU actuel (uptime et état de la LED)
    /help Liste toutes les commandes disponibles

    Testez-Le

    Assurez-vous que le sketch MCU Bridge est téléversé et que le script Python est en cours d'exécution dans Arduino App Lab. Ensuite, ouvrez Telegram, trouvez votre bot par son nom d'utilisateur et envoyez des commandes :

    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /toggle_led
    10:15 AM ✓✓
    LED is now ON
    10:16 AM
    /status
    10:17 AM ✓✓
    MCU is running. LED: ON
    10:18 AM
    /toggle_led
    10:19 AM ✓✓
    LED is now OFF
    10:20 AM
    /help
    10:21 AM ✓✓
    Available commands: /toggle_led - Toggle the LED /led_on - Turn LED on /led_off - Turn LED off /status - Get MCU status /help - Show this message
    10:22 AM

    Si le bot ne répond pas, vérifiez que :

    • Arduino App Lab est ouvert et le script Python est en cours d'exécution
    • L'Arduino UNO Q est connecté au Wi-Fi
    • BOT_TOKEN est correctement défini dans le code Python
    • Vous envoyez des messages depuis le compte Telegram dont vous avez défini l'identifiant de chat

    Étendre le Bot

    Pour ajouter plus de contrôles matériels, suivez ces étapes :

    • Côté MCU : Ajoutez un nouvel appel Bridge.provide_safe() dans le sketch MCU pour la nouvelle fonction.
    • Côté Python : Ajoutez un nouveau bloc elif command == "/votre_commande": dans le script Python, appelez Bridge.call("votre_fonction", ""), et envoyez la réponse.

    Exemple : pour ajouter une commande de contrôle de relais, exposez toggle_relay sur le MCU, puis ajoutez ceci au script Python :

    elif command == "/toggle_relay": result = bridge.call("toggle_relay", "") bot.send_message(chat_id, result)

    Puis ajoutez /toggle_relay — Basculer le relais au texte de réponse /help.

    Idées de Projets

    Vous pouvez l'étendre à n'importe quel matériel connecté au MCU de l'Arduino UNO Q :

    • Contrôle de bandeau LED à distance : Envoyez /led_on et /led_off pour basculer l'éclairage décoratif depuis n'importe où
    • Tableau de bord de capteurs : Utilisez /status pour obtenir les lectures de température, d'humidité ou de capteur de mouvement à la demande
    • Contrôle de porte ou portail : Envoyez /unlock pour déclencher un relais qui ouvre une serrure électromagnétique
    • Système d'alerte : Combinez le polling avec des vérifications périodiques du statut MCU pour vous envoyer un message Telegram lorsqu'un seuil est dépassé (ex. : température trop élevée)
    • Panneau de commande multi-commandes : Ajoutez des commandes pour plusieurs appareils et contrôlez tout votre laboratoire depuis un seul chat Telegram

    Défiez-Vous

    Prêt à aller plus loin ?

    • Facile : Ajoutez une commande /blink qui fait clignoter la LED trois fois et répond "Terminé !" lorsque c'est fini.
    • Moyen : Ajoutez une vérification de mot de passe — le bot répond uniquement aux commandes commençant par un mot-clé secret (ex. /abc123 toggle_led), de sorte que même si quelqu'un connaît le nom d'utilisateur de votre bot, il ne peut pas contrôler le matériel sans le mot de passe.
    • Avancé : Connectez un capteur de température au MCU, exposez-le via Bridge, ajoutez une commande /temperature, et configurez le bot pour vous envoyer une alerte automatique si la température dépasse un seuil défini.

    ※ NOS MESSAGES

    • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !