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 - Tutoriel 3 : Labyrinthe à bille - Interfacer avec une carte Arduino par le protocole Firmata # @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