Pour commander un bateau équipé d’une carte ESP32, de relais et d’une pompe à eau par Wifi, vous pouvez suivre les étapes suivantes :
Dans ce tutoriel, on va commander un petit bateau équipé de la carte ESP32 par l’intermédiaire du réseau Wifi.
C’est pour cela, on va créer deux programmes micropython pour la carte ESP32
La carte ESP32
La carte ESP32 est une carte de développement basée sur le microcontrôleur ESP32 d’Espressif Systems. L’ESP32 est un microcontrôleur Wi-Fi et Bluetooth à double cœur et à faible consommation d’énergie, qui est largement utilisé pour les applications de l’Internet des objets (IoT) et les projets de développement électronique.
La carte ESP32 offre une grande flexibilité et une large gamme de fonctionnalités, notamment une connectivité sans fil Wi-Fi et Bluetooth, des broches d’entrée/sortie (E/S) pour la connexion de capteurs et d’actionneurs, un port USB pour la programmation et le débogage, et une mémoire flash pour le stockage de programmes.
De plus, la carte ESP32 est compatible avec de nombreux environnements de développement, y compris l’IDE Arduino, Micropython, et d’autres outils de développement populaires. Cela facilite grandement la programmation et le développement de projets utilisant la carte ESP32.
En résumé, la carte ESP32 est une carte de développement puissante et polyvalente qui peut être utilisée pour une grande variété de projets IoT et électroniques.
pompe à eau de 5V
Une pompe à eau de 5 V est une pompe électrique qui utilise un moteur électrique alimenté par une tension de 5 V pour pomper des liquides à travers un tuyau. Elle est souvent utilisée dans les applications de refroidissement, de transfert de liquides et de systèmes de distribution d’eau.
Relais
Un relais est un interrupteur électrique qui est utilisé pour mettre un circuit sous ou hors tension. Il est souvent utilisé pour contrôler un circuit à haute puissance avec un signal à faible puissance, comme un interrupteur ou un signal de commande informatique. Les relais sont utilisés dans une grande variété d’applications, notamment les systèmes de commande industrielle. Ils peuvent être utilisés pour contrôler des moteurs, des lumières et d’autres charges électriques. Certains relais sont conçus pour commuter rapidement un circuit sous et hors tension, tandis que d’autres sont conçus pour un contrôle plus précis et peuvent être utilisés pour moduler le courant qui traverse un circuit.
Servomoteur
Un servomoteur est un type de moteur électrique qui permet de contrôler avec précision la position angulaire d’un axe. Les servomoteurs sont couramment utilisés dans les applications de modélisme, de robotique, d’automatisation industrielle et d’autres applications nécessitant un contrôle de position précis.
Le servomoteur de contrôler avec précision l’orientation d’un objet ou d’un dispositif. Il est généralement utilisé dans les applications où une orientation précise est requise, telles que les caméras, les antennes, les robots, les systèmes de suivi solaire, etc.
Module d’alimentation 3.3V/5V
Une module d’alimentation 3.3V/5V est un composant électronique qui permet de fournir une alimentation électrique stable à une charge qui nécessite une tension de 3.3V ou de 5V. Ce type de module est généralement utilisé dans les projets électroniques tels que les microcontrôleurs, les capteurs, les modules de communication sans fil, etc.
petit bateau
Batterie de 9V
Une batterie de 9 volts est une pile qui fournit une tension de sortie de 9 volts. Elles sont souvent utilisées dans les appareils électroniques portables tels que les radiodiffuseurs, les jouets et les outils électroniques. Elles sont également couramment utilisées dans les applications de bricolage et de loisir, telles que les circuits électroniques et les projets de robotique.
Fils de connexion
Les fils de connexion sont des fils conducteurs utilisés pour connecter des composants électroniques, tels que des capteurs, des boutons, des LEDs, des moteurs, des afficheurs, des cartes Arduino, des Raspberry Pi, des shields et d’autres dispositifs électroniques.
Plaque d’essai
Une plaque d’essai (aussi appelée breadboard en anglais) est un outil couramment utilisé en électronique pour le prototypage de circuits électroniques. C’est une plaque en plastique ou en métal qui comporte de nombreux trous pour insérer des composants électroniques, tels que des résistances, des condensateurs, des transistors, des LEDs, des boutons, des fils de connexion et d’autres composants.
Les plaques d’essai sont conçues pour faciliter la connexion des composants électroniques en utilisant des fils de connexion courts et des broches de connexion qui sont généralement réparties en groupes de cinq. Les plaques d’essai ont généralement deux rangées de trous, avec chaque rangée étant connectée électriquement dans une configuration parallèle, ce qui permet de connecter facilement des composants en utilisant des fils de connexion sans avoir besoin de soudures.
Les plaques d’essai sont largement utilisées pour les projets de prototypage électronique car elles permettent aux utilisateurs de tester rapidement et facilement des circuits sans avoir à souder les composants sur une carte de circuit imprimé (PCB). Les plaques d’essai sont également réutilisables et peuvent être facilement modifiées en ajoutant ou en supprimant des composants pour tester différentes configurations de circuit.
Pour le servomoteur :
Pour le relais:
Pour la pompe à eau : On connecte la borne (-) à la broche GND de la carte ESP32.
Voici 3 programmes micropython qui permet de connecter la carte ESP32 au smartphone par l’intermédiaire du réseau wifi et de recevoir un message contenant l’ordre de commandement du bateau.
boot.py:
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 |
# Complete project details at https://RandomNerdTutorials.com import machine try: import usocket as socket except: import socket from machine import Pin import network from servo import Servo import esp esp.osdebug(None) import gc gc.collect() ssid = '*************' # pour la connexion de la carte ESP32 au réseau wifi password = '*************' station = network.WLAN(network.STA_IF) station.active(True) station.connect(ssid, password) while station.isconnected() == False: pass print('Connection successful') print(station.ifconfig()) pompe = Pin(2, Pin.OUT) servo_pin = machine.Pin(23) my_servo = Servo(servo_pin) |
main.py:
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 |
# Complete project details at https://RandomNerdTutorials.com def web_page(): if pompe.value() == 1: gpio_state="ON" else: gpio_state="OFF" html = """<html><head> <title>ESP Web Server</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="data:,"> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;} h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 30px; text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;} .button2{background-color: red;}</style></head><body> <h1>ESP Web Server</h1> <p>GPIO state: <strong>""" + gpio_state + """</strong></p><p><a href="/?pompe=on"><button class="button">Avant</button></a></p> <table><tr><td><p><a href="/?pompe=gauche"><button class="button">Gauche</button></a></p></td><td><p><a href="/?pompe=off"><button class="button button2">Stop</button></a></p></td> <td><p><a href="/?pompe=droite"><button class="button">Droite</button></a></p></td> </tr></table></body></html>""" return html s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('', 80)) s.listen(5) while True: conn, addr = s.accept() print('Got a connection from %s' % str(addr)) request = conn.recv(1024) request = str(request) print('Content = %s' % request) pompe_on = request.find('/?pompe=on') pompe_off = request.find('/?pompe=off') pompe_droite = request.find('/?pompe=droite') pompe_gauche = request.find('/?pompe=gauche') if pompe_on == 6: print('LED ON') pompe.value(1) my_servo.write_angle(90) if pompe_off == 6: print('LED OFF') pompe.value(0) if pompe_droite == 6: print('LED ON') pompe.value(1) my_servo.write_angle(45) if pompe_gauche == 6: print('LED ON') pompe.value(1) my_servo.write_angle(135) response = web_page() conn.send('HTTP/1.1 200 OK\n') conn.send('Content-Type: text/html\n') conn.send('Connection: close\n\n') conn.sendall(response) conn.close() |
servo.py:
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 |
from machine import PWM import math # originally by Radomir Dopieralski http://sheep.art.pl # from https://bitbucket.org/thesheep/micropython-servo class Servo: """ A simple class for controlling hobby servos. Args: pin (machine.Pin): The pin where servo is connected. Must support PWM. freq (int): The frequency of the signal, in hertz. min_us (int): The minimum signal length supported by the servo. max_us (int): The maximum signal length supported by the servo. angle (int): The angle between the minimum and maximum positions. """ def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180): self.min_us = min_us self.max_us = max_us self.us = 0 self.freq = freq self.angle = angle self.pwm = PWM(pin, freq=freq, duty=0) def write_us(self, us): """Set the signal to be ``us`` microseconds long. Zero disables it.""" if us == 0: self.pwm.duty(0) return us = min(self.max_us, max(self.min_us, us)) duty = us * 1024 * self.freq // 1000000 self.pwm.duty(duty) def write_angle(self, degrees=None, radians=None): """Move to the specified angle in ``degrees`` or ``radians``.""" if degrees is None: degrees = math.degrees(radians) degrees = degrees % 360 total_range = self.max_us - self.min_us us = self.min_us + total_range * degrees // self.angle self.write_us(us) |