Module Python¶
Installation¶
Pour installer ce module, vous pouvez utiliser la commande
python3.14 -m pip install x.phs1903@2
Ou pour installer le module dans un nouvel environnement virtuel,
python3.14 -m pipenv install xphs1903@2
Utilisation¶
Ce module assume que son compagnon Arduino a aussi été installé.
Une fois le programme Arduino inclut en exemple compilé et téléchargé,
vous pouvez lancer le programme demo.py ainsi:
python3.14 -m xphs1903
Pour l’inclure à votre projet, utilisez l’énoncé import xphs1903 normal
de Python.
Implémentation¶
Fonctionnalités de base.
- class xphs1903.outils.FilCopie(orig: Queue, *args: __annotationlib_name_1__ | Callable)[source]¶
This constructor should always be called with keyword arguments. Arguments are:
group should be None; reserved for future extension when a ThreadGroup class is implemented.
target is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called.
name is the thread name. By default, a unique name is constructed of the form « Thread-N » where N is a small decimal number.
args is a list or tuple of arguments for the target invocation. Defaults to ().
kwargs is a dictionary of keyword arguments for the target invocation. Defaults to {}.
context is the contextvars.Context value to use for the thread. The default value is None, which means to check sys.flags.thread_inherit_context. If that flag is true, use a copy of the context of the caller. If false, use an empty context. To explicitly start with an empty context, pass a new instance of contextvars.Context(). To explicitly start with a copy of the current context, pass the value from contextvars.copy_context().
If a subclass overrides the constructor, it must make sure to invoke the base class constructor (Thread.__init__()) before doing anything else to the thread.
- Paramètres:
orig (Queue)
args (__annotationlib_name_1__ | Callable)
- join()[source]¶
Wait until the thread terminates.
This blocks the calling thread until the thread whose join() method is called terminates – either normally or through an unhandled exception or until the optional timeout occurs.
When the timeout argument is present and not None, it should be a floating-point number specifying a timeout for the operation in seconds (or fractions thereof). As join() always returns None, you must call is_alive() after join() to decide whether a timeout happened – if the thread is still alive, the join() call timed out.
When the timeout argument is not present or None, the operation will block until the thread terminates.
A thread can be join()ed many times.
join() raises a RuntimeError if an attempt is made to join the current thread as that would cause a deadlock. It is also an error to join() a thread before it has been started and attempts to do so raises the same exception.
- run()[source]¶
Method representing the thread’s activity.
You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.
- xphs1903.outils.paires(x: iter, n: int = 2)[source]¶
Retourne des tranches de x de taille n.
# Source - https://stackoverflow.com/a/1335618 # Posted by Nadia Alramli, modified by community. See post “Timeline” for change history # Retrieved 2026-05-14, License - CC BY-SA 2.5
list_of_slices = zip(*(iter(the_list),) * slice_size)
- Paramètres:
x (iter)
n (int)
Définitions de base pour les autres modules du paquet xphs1903.
- class xphs1903.outils.definitions.ObjetImmuable(cls: type, *args: GenericArgsType, **kargs: GenericKArgsType)[source]¶
Capsule pour rendre la modification d’un objet peu praticable.
Encapsule un objet pour rendre sa modification impraticable.
C’est une classe de convenance pour plus facilement gérer des objets dont certains paramètres ne devraient pas être modifiés sans grande considération. Le cas d’utilisation précis qui a mené à la création de la classe est celui des lignes de communication série, qui une fois créées, ne devraient pas voir leurs paramètres modifiés sans un changement équivalent pour l’interlocuteur. La solution simple est d’empêcher toute modification après l’initialisation.
- Paramètres:
cls (type)
args (GenericArgsType)
kargs (GenericKArgsType)
- xphs1903.outils.definitions.estimmuable(obj: ObjetImmuable) bool[source]¶
Retourne si un objet est actuellement immuable.
- Renvoie:
Si un objet est actuellement immuable
- Paramètres:
obj (ObjetImmuable)
- Type renvoyé:
- xphs1903.outils.definitions.immuable(cls: type) type[source]¶
Retourne une usine d’une version immuable d’un type.
Exceptions et erreurs du module xphs1903.
- exception xphs1903.outils.exceptions.AppareilInexistantOuInvalideError(appareil: str, _type: type)[source]¶
Erreur de base du module xphs1903.
- exception xphs1903.outils.exceptions.AttributNonModifiableError(obj: ObjetImmuable, attr: str)[source]¶
Erreur indiquant un accès non-autorisé à un objet immuable.
- Paramètres:
obj (ObjetImmuable)
attr (str)
- Type renvoyé:
None
- obj¶
l’objet immuable
- attr¶
l’attribut
Erreur indiquant un accès non-autorisé à un objet immuable.
- exception xphs1903.outils.exceptions.AttributePHS1903Error(msg: str)[source]¶
Erreur de base du module xphs1903.
- Paramètres:
msg (str)
- Type renvoyé:
None
- exception xphs1903.outils.exceptions.AucunDatumError(args: tuple[Any], kargs: dict[str, Any])[source]¶
Erreur de base du module xphs1903.
- exception xphs1903.outils.exceptions.BasePHS1903Error(msg: str)[source]¶
Erreur de base du module xphs1903.
Erreur de base du module xphs1903.
- Paramètres:
msg (str)
- Type renvoyé:
None
- exception xphs1903.outils.exceptions.ChoixInvalideError(selection: int, choix_possibles: list[int])[source]¶
Erreur indiquant un choix invalide.
- sel¶
sélection invalide
- choix¶
liste des options valides
Erreur indiquant un choix invalide.
- exception xphs1903.outils.exceptions.ItemNonModifiableError(obj: ObjetImmuable, key: str)[source]¶
Erreur indiquant un accès non-autorisé à un objet immuable.
- Paramètres:
obj (ObjetImmuable)
key (str)
- Type renvoyé:
None
- obj¶
l’objet immuable
- key¶
clé
Erreur indiquant un accès non-autorisé à un objet immuable.
- exception xphs1903.outils.exceptions.KeyPHS1903Error(msg: str)[source]¶
Erreur de base du module xphs1903.
- Paramètres:
msg (str)
- Type renvoyé:
None
- exception xphs1903.outils.exceptions.ObjetImmuableError(obj: ObjetImmuable)[source]¶
Erreur indiquant un accès non-autorisé à un objet immuable.
- Paramètres:
obj (ObjetImmuable)
- Type renvoyé:
None
- obj¶
l’objet immuable lié à l’erreur
Décrit l’erreur impliquant obj.
- exception xphs1903.outils.exceptions.PasUnNombreEntierError(selection: str)[source]¶
Erreur indiquant qu” une valeur n’est pas un nombre entier.
- Paramètres:
selection (str)
- Type renvoyé:
None
- sel¶
sélection invalide
Erreur indiquant qu” une valeur n’est pas un nombre entier.
- exception xphs1903.outils.exceptions.RuntimePHS1903Error(msg: str)[source]¶
Erreur de base du module xphs1903.
- Paramètres:
msg (str)
- Type renvoyé:
None
- exception xphs1903.outils.exceptions.StopLigneDeCommande(commandes: Queue, resultats: Queue)[source]¶
Erreur de base du module xphs1903.
- Paramètres:
commandes (Queue)
resultats (Queue)
- exception xphs1903.outils.exceptions.TypePHS1903Error(msg: str)[source]¶
Erreur de base du module xphs1903.
- Paramètres:
msg (str)
- Type renvoyé:
None
- exception xphs1903.outils.exceptions.ValuePHS1903Error(msg: str)[source]¶
Erreur de base du module xphs1903.
- Paramètres:
msg (str)
- Type renvoyé:
None
Outils de communication par ligne série.
- class xphs1903.outils.serie.Commande(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, Any]=<function Commande.<lambda>>)[source]¶
Décrit une commande à envoyer sur la ligne série.
- Paramètres:
- xphs1903.outils.serie.CommandeNulle: Final[Commande] = <<class 'xphs1903.outils.serie.Commande'> None (nulle)>¶
Commande pour terminer une communication ou un message.
- class xphs1903.outils.serie.Commandeln(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: Final[__annotationlib_name_1__] = b'\n', conv: Callable[__annotationlib_name_1__, Any]=<function Commande.<lambda>>)[source]¶
Commande attendant une ligne comme réponse.
- Paramètres:
- class xphs1903.outils.serie.DemandeDonnées(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: Final[__annotationlib_name_1__] = b'\n', conv: Callable[__annotationlib_name_1__, Datum]=<function grapheurserie_à_pandasserie>)[source]¶
Commande compatible avec le traceur série Arduino.
- Paramètres:
- conv() Datum¶
Converti les envois de données Arduino en données Pandas.
Le traceur série Arduino accepte la syntaxe spéciale
x:1234 y:235 z:13513
pour afficher plusieurs courbes. Cette fonction permet au programme Python d’accepter la même syntaxe.
- Returns
Datum(valeurs, noms): une série Pandas avec les valeurs reçues
- Paramètres:
data (bytes)
- Type renvoyé:
Datum
- class xphs1903.outils.serie.DemandeOctet(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, __annotationlib_name_2__]=<built-in method from_bytes of type object>)[source]¶
Commande convertissant les octets en entier sans autre traitement.
- Paramètres:
- classmethod conv(bytes, byteorder='big', *, signed=False)¶
Return the integer represented by the given array of bytes.
- bytes
Holds the array of bytes to convert. The argument must either support the buffer protocol or be an iterable object producing bytes. Bytes and bytearray are examples of built-in objects that support the buffer protocol.
- byteorder
The byte order used to represent the integer. If byteorder is “big”, the most significant byte is at the beginning of the byte array. If byteorder is “little”, the most significant byte is at the end of the byte array. To request the native byte order of the host system, use sys.byteorder as the byte order value. Default is to use “big”.
- signed
Indicates whether two’s complement is used to represent the integer.
- class xphs1903.outils.serie.FilAnnonce(appareil: LigneSérieImmuable | ListPortInfo | str, commandes: FileCommandes | None = None)[source]¶
Initialise un fil d’exécution pour la ligne série.
- Raises
AppareilInexistantOuInvalideError: si l’appareil n’est pas joignable
- Paramètres:
appareil (LigneSérieImmuable)
commandes (FileCommandes)
- class xphs1903.outils.serie.FilAppelReponse(appareil: LigneSérieImmuable | ListPortInfo | str, commandes: FileCommandes | None = None, resultats: FileRéponses | None = None)[source]¶
Fil d’exécution pour la communication série.
Initialise un fil d’exécution pour la ligne série.
- Raises
AppareilInexistantOuInvalideError: si l’appareil n’est pas joignable
- Paramètres:
appareil (LigneSérieImmuable)
commandes (FileCommandes)
resultats (FileRéponses)
- join(timeout: float | None = 2.0) None[source]¶
Vide les files et ferme le fil.
- Paramètres:
timeout (float | None)
- Type renvoyé:
None
- read() str[source]¶
Retourne le dernier résultat reçu.
- Returns
str(self): le dernier résultat reçu
- Type renvoyé:
- receive(com: Commande) Réponse[source]¶
Reçoit une réponse de l’appareil.
- Returns
res: la réponse reçue
- class xphs1903.outils.serie.FilEcoute(appareil: LigneSérieImmuable | ListPortInfo | str, resultats: FileRéponses | None = None)[source]¶
Initialise un fil d’exécution pour la ligne série.
- Raises
AppareilInexistantOuInvalideError: si l’appareil n’est pas joignable
- Paramètres:
appareil (LigneSérieImmuable)
resultats (FileRéponses)
- class xphs1903.outils.serie.FileCommandes(item_type: type[Commande] = <class 'xphs1903.outils.serie.Commande'>)[source]¶
File (queue) contenant des commandes à envoyer.
File (queue) contenant des commandes à envoyer.
- Raises
ValuePHS1903Error: si item_type n’est pas un héritier de Commande
- put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, Any]=<function FileCommandes.<lambda>>) Commande[source]¶
Ajoute un nouvel élément à la file.
- Returns
nouv: nouvelle commande ajoutée à la file
- class xphs1903.outils.serie.FileCommandesNulles(item_type: type[Commande] = <class 'xphs1903.outils.serie.Commande'>)[source]¶
File (queue) contenant des commandes à envoyer.
- Raises
ValuePHS1903Error: si item_type n’est pas un héritier de Commande
- class xphs1903.outils.serie.FileCommandesln[source]¶
File contenant des Commandeln à envoyer.
File contenant des Commandeln à envoyer.
- put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = b'\n', conv: Callable[__annotationlib_name_1__, Any]=<function FileCommandesln.<lambda>>) Commandeln[source]¶
Ajoute une nouvelle Commandeln à la file.
- Returns
Commandeln: la nouvelle commande
- class xphs1903.outils.serie.FileDemandesDonnées[source]¶
File contenant des DemandeDonnées.
Initialise une file contenant des instances DemandeDonnées.
- put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = b'\n', conv: Callable[__annotationlib_name_1__, Any]=<function grapheurserie_à_pandasserie>) DemandeDonnées[source]¶
Ajoute une nouvelle DemandeDonnées à la file.
- Returns
DemandeDonnées: la nouvelle commande
- class xphs1903.outils.serie.FileDemandesOctets[source]¶
File contenant des commandes à envoyer.
File contenant des commandes à envoyer.
- put(name: str, description: str = '', cmd: bytes | None = None, rep_size: int | None = None, end: bytes | None = None, conv: Callable[__annotationlib_name_1__, Any]=<built-in method from_bytes of type object>) DemandeOctet[source]¶
Ajoute une nouvelle DemandeOctet à la liste.
- Returns
DemandeOctet: la nouvelle demande
- class xphs1903.outils.serie.FileRéponses(item_type: type[Réponse] = <class 'xphs1903.outils.serie.Réponse'>)[source]¶
File de Réponses.
Initialise une file contenant des instances de Réponse.
- Raises
ValuePHS1903Error: si item_type n’hérite pas de Réponse
- class xphs1903.outils.serie.FileRéponsesNulles(item_type: type[Réponse] = <class 'xphs1903.outils.serie.Réponse'>)[source]¶
Initialise une file contenant des instances de Réponse.
- Raises
ValuePHS1903Error: si item_type n’hérite pas de Réponse
- class xphs1903.outils.serie.LigneSérieImmuable(port: str | None, baudrate: int = 9600, bytesize: int = 8, timeout: float = 2.0, **kargs: GenericKArgsType)[source]¶
Ligne série immuable après l’initialisation.
Ligne série immuable après l’initialisation.
- Paramètres:
- classmethod comports(*, choice: bool = False, cond: Callable[ListPortInfo, __annotationlib_name_1__]=<class 'bool'>, order: Callable[ListPortInfo, __annotationlib_name_1__]=<function LigneSérieImmuable.<lambda>>) list[str] | str[source]¶
Liste les ports série disponibles.
Liste les ports série disponibles, ou, dans un environnement interactif, avec la condition
:var:choice == :bool:True,demande une entrée à l’utilisateur.
- Arguments
choice: False pour obtenir la liste complète des ports disponibles cond: condition que les ports doivent satisfaire
- Returns
ports: liste des ports série disponibles ports[sel]: port sélectionné par l’utilisateur
- Raises
PasUnNombreEntierError: si la sélection n’est pas un entier ChoixInvalideError: si la sélection de l’utilisateur est invalide3
- read(*, n: int | None = None, d: bytes | None = None) bytes[source]¶
Lis une série d’octets de la ligne série.
- Arguments
n: nombre d’octets à lire d: délimiteur de fin de lecture
- Returns
msg: message lu en octets
- write(msg: str | bytes, encoding: str = 'utf-8') int[source]¶
Envoie une série d’octets sur la ligne série.
- Arguments
- msg: message à envoyer. Si isinstance(msg, str), il sera converti
selon la valeur d’encoding
encoding: encodage à utiliser pour les conversions de str à bytes
- Returns
n: nombre d’octets écrits
- class xphs1903.outils.serie.Réponse(cmd: Commande, rep: bytes, res: Any)[source]¶
Décrit une réponse reçue sur la ligne série.
- xphs1903.outils.serie.grapheurserie_à_pandasserie(data: bytes) Datum[source]¶
Converti les envois de données Arduino en données Pandas.
Le traceur série Arduino accepte la syntaxe spéciale
x:1234 y:235 z:13513
pour afficher plusieurs courbes. Cette fonction permet au programme Python d’accepter la même syntaxe.
- Returns
Datum(valeurs, noms): une série Pandas avec les valeurs reçues
- Paramètres:
data (bytes)
- Type renvoyé:
Datum