L’objectif de ce projet est de réaliser un système de contrôle sans fil d’un servomoteur à l’aide d’un ESP32, d’une connexion Bluetooth et d’une application mobile développée avec MIT App Inventor.
L’utilisateur peut modifier l’angle du servomoteur directement depuis son smartphone. La valeur sélectionnée est transmise sans fil à l’ESP32, qui la traite et commande le servomoteur avec précision.
Fonctionnement du projet

Le fonctionnement du système se déroule comme suit :
L’utilisateur déplace le Slider de l’application mobile pour sélectionner un angle, par exemple 44°.
L’application mobile transforme cette valeur en message Bluetooth et l’envoie à la carte ESP32.
La carte ESP32 reçoit et analyse le message reçu.
La valeur de l’angle est convertie en nombre entier.
La carte ESP32 commande le servomoteur afin qu’il se positionne à l’angle sélectionné.
Ainsi, l’utilisateur peut contrôler la position du servomoteur à distance et en temps réel depuis son smartphone grâce à la communication Bluetooth.
1- Carte ESP32

L’ESP32 constitue l’unité de commande principale du projet. Grâce à son module Bluetooth intégré, il reçoit les données envoyées par l’application mobile. Le programme MicroPython traite ensuite le message reçu, extrait la valeur de l’angle et la convertit en nombre afin de commander correctement le servomoteur.
2- Servomoteur SG90

Le servomoteur est l’élément qui réalise le mouvement mécanique. Après avoir reçu la commande de l’ESP32, il se positionne à l’angle demandé par l’utilisateur. Le système permet ainsi de contrôler sa position à distance, de manière précise et en temps réel.
3- Câbles de Connexion (Jumper Wires)

Les fils de connexion permettent de relier les différents composants entre eux.
4. Plaque d'essai

La plaque d’essai (breadboard) permet de réaliser des montages électroniques sans soudure.

1- Connectez le fil de signal du servomoteur (souvent jaune ou orange) à une broche GPIO23 de la carte ESP32.
2- Connectez le fil d'alimentation (VCC) du servomoteur (généralement rouge) au 5V de la carte ESP32.
3- Connectez le fil de masse (GND) du servomoteur (souvent noir ou marron) à une broche GND de la carte ESP32.
Ce programme permet de contrôler à distance un servomoteur connecté à un ESP32 à l’aide d’un smartphone via une communication Bluetooth Low Energy (BLE).
On doit importer :
- la bibliothèque Servo pour contrôler le servomoteur.
- les deux bibliothèques :ble_uart_peripheral.py et ble_advertising.py pour la communication Bluetooth
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# ============================================================ # Importation des bibliothèques nécessaires # ============================================================ # Importation des fonctions nécessaires pour la communication UART, # la gestion des broches GPIO et la génération de signaux PWM from machine import UART from machine import Pin, PWM # Importation de la classe Servo permettant de contrôler le servomoteur from servo import Servo # Importation de la fonction sleep permettant de créer des temporisations from time import sleep # Importation du module Bluetooth Low Energy (BLE) import bluetooth # Importation du service UART permettant d'échanger des données # entre l'ESP32 et le smartphone via Bluetooth BLE from ble_uart_peripheral import BLEUART # Importation des bibliothèques de gestion du temps import time import utime # ============================================================ # Configuration du servomoteur # ============================================================ # Création d'un objet Servo connecté à la broche GPIO 23 de l'ESP32 # Modifier pin=23 selon la broche utilisée pour connecter le servomoteur servo_motor = Servo(pin=23) # Positionnement initial du servomoteur à l'angle 0° servo_motor.move(0) # ============================================================ # Configuration de la communication Bluetooth Low Energy (BLE) # ============================================================ # Initialisation du contrôleur Bluetooth de l'ESP32 ble = bluetooth.BLE() # Création d'une interface UART virtuelle via Bluetooth BLE # Cette interface permet de recevoir les commandes envoyées # par l'application mobile uart = BLEUART(ble) # ============================================================ # Fonction exécutée lors de la réception d'une donnée Bluetooth # ============================================================ def on_rx(): # Lecture des données reçues par Bluetooth # Les données sont reçues sous forme d'octets uart_in = uart.read() # Conversion des octets reçus en chaîne de caractères # 'ignore' ignore les caractères invalides # strip() supprime les espaces et les retours à la ligne message = uart_in.decode('utf-8', 'ignore').strip() # Conservation uniquement de la partie du message située # avant le caractère '#' # # Exemple : # Message reçu : "44.0#" # Résultat : "44.0" message = message[0:message.find('#')] # Extraction des chiffres et du point décimal # # Exemple : # "44.0" devient "44.0" angle = ''.join(c for c in message if c.isdigit() or c == '.') # Conversion de la valeur en nombre réel puis en entier # et déplacement du servomoteur vers l'angle demandé servo_motor.move(int(float(angle))) # ============================================================ # Enregistrement de la fonction de réception Bluetooth # ============================================================ # La fonction on_rx() est appelée automatiquement # chaque fois qu'une nouvelle donnée Bluetooth est reçue uart.irq(handler=on_rx) # ============================================================ # Fermeture de la communication BLE UART # ============================================================ uart.close() |
Explication du programme :
Au démarrage, le programme configure le servomoteur connecté à la broche GPIO 23 et le positionne à l’angle initial de 0°. Ensuite, il initialise la communication Bluetooth BLE de l’ESP32 et met en place un service UART virtuel permettant l’échange de données avec l’application mobile.
Lorsqu’une nouvelle valeur est envoyée par le smartphone, la fonction on_rx() est automatiquement exécutée. Elle lit le message reçu, le convertit en chaîne de caractères et extrait la valeur de l’angle située avant le caractère #. La valeur obtenue est ensuite convertie en nombre entier.
Enfin, l’ESP32 utilise cette valeur pour commander le servomoteur. Celui-ci se positionne alors à l’angle demandé par l’utilisateur. Ainsi, le programme assure la communication entre l’application mobile, le Bluetooth de l’ESP32 et le servomoteur, permettant un contrôle sans fil et en temps réel.

Cette application mobile, développée avec MIT App Inventor, permet de contrôler à distance un servomoteur connecté à un ESP32 via Bluetooth BLE.
En haut de l’interface, les boutons Scanner, Stop, Connect et Disconnect permettent de gérer la connexion Bluetooth. Le bouton Scanner recherche les périphériques Bluetooth disponibles, tandis que les boutons Connect et Disconnect permettent respectivement d’établir ou de terminer la connexion avec l’ESP32.
La partie centrale de l’application affiche le titre « Control Servo motor » ainsi qu’une image représentant le servomoteur contrôlé. Cette interface permet à l’utilisateur d’identifier facilement le dispositif commandé.
L’angle actuel du servomoteur est affiché dans la zone « Angle : 0° ». Lorsque l’utilisateur déplace le Slider, la valeur de l’angle est modifiée et affichée dynamiquement dans l’application. Le Slider permet ainsi de sélectionner l’angle souhaité, généralement entre 0° et 180°.
La valeur sélectionnée est ensuite envoyée par Bluetooth à l’ESP32. Celui-ci reçoit la commande, la traite avec un programme MicroPython et commande le servomoteur afin qu’il se positionne à l’angle choisi.
Ainsi, cette application offre une interface simple et intuitive permettant de contrôler la position du servomoteur sans fil et en temps réel à partir d’un smartphone.
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info