Un grand merci aux membres du forum

Bonjour à tous,

Je découvre linux et c'est d'ailleurs un sujet sur le forum où en gros chacun vantait les mérites d'un système d'exploitation plutôt qu'un autre qui m'a conduit à m'y mettre !
Je viens de m'apercevoir que Python 3.10.9 était installé sur ma distribution Manjaro.
Je peux même programmer avec le terminal, c'est d'ailleurs ce que j'ai commencé à faire. Pour l'instant c'est pas trop compliqué !
Voilà je suis comme un gamin qui vient de découvrir un nouveau jouet avec toutes les joies que cela implique pour moi ...

Et tout ça c'est grâce au forum, aux échanges et aux compétences de chacun.
Donc j'en profite pour vous exprimer toute ma gratitude.
Cela peut paraître ridicule, ce n'est pas le genre de message que l'on s'attend à lire mais je tenais quand même à vous remercier pour le partage de vos connaissances.
Partage bénévole qui se fait sans retour !

Bonne journée.

Tu n'as plus qu'à installer py-serial pour que ton PC et ton ARDUINO communiquent en série :wink:

Bonjour @hbachetti,
C'est installé.
Sur internet j'ai trouvé un exemple de communication entre carte arduino et PC : lien
Il m'a fallu faire deux corrections sur le programme ou script Python :

  • ligne 44 au lieu de arduino = serial.Serial(ports[portChoisi - 1].device, baud, timeout=1) ==> lire : arduino = serial.Serial(ports[int(portChoisi) - 1].device, baud, timeout=1) ;
  • ligne 52 au lieu de print data lire ==> print (data).

j'ai utilisé Mousepad pour créer le script python (si c'est comme ça que l'on doit dire) ou alors un programme python.

Sur une arduino UNO j'ai téléversé ce code (trouvé sur le site de l'exemple) :

/*
Communication série par USB entre Arduino et PC.
electroniqueamateur.blogspot.com
http://electroniqueamateur.blogspot.com/2014/11/utiliser-le-moniteur-serie-de-lide.html
*/

int compteur = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  compteur++;
  Serial.print("Valeur du compteur: ");
  Serial.println(compteur);
  delay(500);
}


J'ai donc créé un fichier avec Mousepad qui se nomme pyserial.py :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
Reception des données émise par un Arduino branché
à un port USB.
'''

import serial
import serial.tools.list_ports

print("Recherche d'un port serie...")

ports = serial.tools.list_ports.comports(include_links=False)

if (len(ports) != 0): # on a trouvé au moins un port actif

    if (len(ports) > 1):     # affichage du nombre de ports trouvés
        print (str(len(ports)) + " ports actifs ont ete trouves:") 
    else:
        print ("1 port actif a ete trouve:")

    ligne = 1

    for port in ports :  # affichage du nom de chaque port
        print(str(ligne) + ' : ' + port.device)
        ligne = ligne + 1

    portChoisi = input('Ecrivez le numero du port desire:')

    print('1: 9600   2: 38400    3: 115200')

    baud = input('Ecrivez le baud rate desire:')

    if (baud == 1):
        baud = 9600
    if (baud == 2):
        baud = 38400
    if (baud == 3):
        baud = 115200

    # on établit la communication série
    arduino = serial.Serial(ports[int(portChoisi) - 1].device, baud, timeout=1)
    
    print('Connexion a ' + arduino.name + ' a un baud rate de ' + str(baud))

    # si on reçoit un message, on l'affiche
    while True:
        data = arduino.readline()[:-2]
        if data:
            print (data)

else: # on n'a pas trouvé de port actif
    print("Aucun port actif n'a ete trouve")

Depuis le terminal je tape python /home/philippe/Documents/pyserial.py et le programme se déroule normalement. Il finit par me donner quelques valeurs de la variable compteur du programme arduino et ça commence à "merdouiller" :grinning:

Voilà c'est pas parfait mais j'ai appris encore beaucoup aujourd'hui.
Merci.

Le code devait être écrit pour Python 2.x et pas 3.x comme ta version. Avec Python 3, le print prend des parenthèses.

Merci @lesept pour l'information. Voilà une explication utile.
Je comprends également qu'avec Python les types des variables sont déduits mais qu'on peut les caster si nécessaire (erreur ligne 44)
Bonne soirée.

C'est pas vraiment un cast. Un indice de tableau est forcément un entier, mais une variable en Python est toujours un float, avec la plus grande précision possible.
Par exemple :

a=7.9999999999999999156413

a
Out[17]: 8.0

Là, tu prends la partie entière (même si le nombre est un nombre entier, il est représenté comme un flottant) pour que l'indice du tableau soit compris comme un entier.

Merci,
Il va falloir que je creuse tout ça :wink:

Je te le fais en plus propre :

a=7.9999999999999999156413

print(a)
8.0

print(int(a))
8

Merci @lesept j'ai bien compris.
Au départ je pensais qu'avec :

portChoisi = input('Ecrivez le numero du port desire:')

portChoisi était de type str.

Du coup je pensais qu'il fallait changer le type en int pour effectuer un calcul sur la variable.
arduino = serial.Serial(ports[int(portChoisi) - 1].device, baud, timeout=1)
Je précise que j'ai effectué cette "correction " suite à une erreur signalée par le compilateur.

Bonne soirée

EDIT 1 FOIS

Oui tu as raison, c'est bien un str. Mais ça marche tout pareil...

portChoisi = input('Ecrivez le numero du port desire:')

Ecrivez le numero du port desire:12

print(portChoisi)
Out[22]: '12'

print(int(portChoisi))
12

Merci @lesept
J'ai édité mon post 9.

Bonjour @lesept,

Voici un exemple en ligne de commande :

Python 3.10.9 (main, Dec 19 2022, 17:35:49) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> portChoisi = input('Ecrivez le numero du port desire:')
Ecrivez le numero du port desire:1
>>> portChoisi = portChoisi + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> portChoisi = int(portChoisi)+1
>>> portChoisi
2
>>> type (portChoisi)
<class 'int'>
>>> portChoisi = input('Ecrivez le numero du port desire:')
Ecrivez le numero du port desire:1
>>> type (portChoisi)
<class 'str'>
>>> 

Du coup on voit bien que portChoisi est de type str avec : portChoisi = input('Ecrivez le numero du port desire:') mais pour faire des calculs il faut changer de type : portChoisi = int(portChoisi)+1

Bonne journée.

Bonjour,
Pour ceux qui sont intéressés par Python :
openclassrooms

Bonne journée.