import pyfirmata # Protocole Firmata import serial # Liaison série from serial.tools.list_ports import comports # Détection du port automatique ############################################################################### # labyrinthe_carte.py # @title: Détection automatique de la carte Arduino ou microbit # @project: Blender-EduTech - Tutoriels 3, 4 et 5 : Labyrinthe à bille - Interfacer avec une carte Arduino/microbit # @lang: fr # @authors: Philippe Roy # @copyright: Copyright (C) 2023 Philippe Roy # @license: GNU GPL # # Détection automatique de la carte Arduino ou microbit # ############################################################################### ############################################################################### # Communication avec la carte Arduino ############################################################################### # Recherche automatique du port (microbit, Arduino Uno et Arduino Mega) def autoget_port(): # USB Vendor ID, USB Product ID carte_dict={'microbit' :[3368, 516], 'uno' :[9025, 67], 'mega' :[9025, 66]} for com in comports(): # micro:bit if com.vid == carte_dict["microbit"][0] and com.pid == carte_dict["microbit"][1]: return [com.device,"micro:bit"] for com in comports(): # Arduino Uno if com.vid == carte_dict["uno"][0] and com.pid == carte_dict["uno"][1]: return [com.device,"Arduino Uno"] for com in comports(): # Arduino Mega if com.vid == carte_dict["mega"][0] and com.pid == carte_dict["mega"][1]: return [com.device,"Arduino Mega"] return [None,""] # Établir la communication avec la carte avec le protocol Firmata def init_firmata(): [port, carte_name] =autoget_port() if port is None: print("Communication avec Carte Arduino impossible") return None else: try: carte = pyfirmata.Arduino(port) print("Communication avec Carte Arduino établie sur "+port+" avec le protocole Firmata") return carte except: print("Communication avec Carte Arduino impossible") return None # Établir la communication avec la carte avec la liaison série avec une vitesse def init_serial(speed=115200): [port, carte_name] =autoget_port() if port is None: print("Communication avec Carte Arduino/microbit impossible") return None else: try: carte = serial.Serial(port,speed) print("Communication avec Carte Arduino/microbit établie sur "+port+" à la vitesse "+speed+"bauds") return carte except: print("Communication avec Carte Arduino/microbit impossible") return None