2023-05-03 05:56:48 +02:00
|
|
|
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
|
2023-05-13 17:20:24 +02:00
|
|
|
# @project: Blender-EduTech - Tutoriel 3 : Labyrinthe à bille - Interfacer avec une carte Arduino par le protocole Firmata
|
2023-05-03 05:56:48 +02:00
|
|
|
# @lang: fr
|
|
|
|
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
|
|
|
# @copyright: Copyright (C) 2023 Philippe Roy
|
|
|
|
# @license: GNU GPL
|
|
|
|
#
|
|
|
|
# Détection automatique de la carte Arduino ou microbit
|
|
|
|
#
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Communication avec la carte Arduino
|
|
|
|
###############################################################################
|
|
|
|
|
2023-05-07 00:48:16 +02:00
|
|
|
# Recherche automatique du port (microbit, Arduino Uno et Arduino Mega)
|
2023-05-03 05:56:48 +02:00
|
|
|
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
|
2023-05-09 20:40:02 +02:00
|
|
|
if com.vid == carte_dict['microbit'][0] and com.pid == carte_dict['microbit'][1]:
|
2023-05-03 05:56:48 +02:00
|
|
|
return [com.device,"micro:bit"]
|
|
|
|
for com in comports(): # Arduino Uno
|
2023-05-09 20:40:02 +02:00
|
|
|
if com.vid == carte_dict['uno'][0] and com.pid == carte_dict['uno'][1]:
|
2023-05-03 05:56:48 +02:00
|
|
|
return [com.device,"Arduino Uno"]
|
|
|
|
for com in comports(): # Arduino Mega
|
2023-05-09 20:40:02 +02:00
|
|
|
if com.vid == carte_dict['mega'][0] and com.pid == carte_dict['mega'][1]:
|
2023-05-03 05:56:48 +02:00
|
|
|
return [com.device,"Arduino Mega"]
|
|
|
|
return [None,""]
|
|
|
|
|
2023-05-07 00:48:16 +02:00
|
|
|
# Établir la communication avec la carte avec le protocol Firmata
|
2023-05-03 05:56:48 +02:00
|
|
|
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
|