Comment faire communiquer Arduino et Python?

Comment faire communiquer Arduino et Python?

Données Arduino vers python

Jusqu’à présent, nous avons programmé Arduino en utilisant l’IDE Arduino et nous avons utilisé le Serial Monitor et le Serial Plotter de l’IDE pour afficher les signaux de Arduino. Le Serial Monitor et le Plotter sont assez limités dans leurs capacités, et nous aimerions avoir un contrôle beaucoup plus riche de l’Arduino.

Dans les prochaines leçons, nous apprendrons à contrôler Arduino en utilisant des outils basés sur Python. À terme, nous construirons des panneaux de contrôle basés sur un navigateur pour les appareils que vous construisez. Pour l’instant, nous allons apprendre à envoyer une instruction à Arduino depuis Python et à faire en sorte qu’elle réponde.

Nous allons commencer par construire un circuit avec un contrôle tactile. En d’autres termes, vous contrôlez le circuit à l’aide d’une bascule physique et d’un bouton physique. Nous passerons ensuite au contrôle électronique à partir de votre navigateur.

Notez que les interrupteurs à bascule à trois broches dont nous disposons ne ressemblent pas à celui représenté sur le schéma, mais plutôt à cette pièce. Le bouton-poussoir du schéma est l’un des boutons-poussoirs à deux broches que nous avons au laboratoire.

Pour l’instant, vous pouvez ignorer la LED2 (celle qui se trouve vers le haut du schéma). C’est la LED que nous allons contrôler avec les boutons du navigateur. La LED1 (celle vers la droite du schéma) est sous contrôle tactile.

Communication Python usb

Dans setup(), la fonction Serial.begin(9600) définit le débit en bauds pour la communication de données en série. Dans cet exemple, une vitesse de 9600 bauds est utilisée. D’autres valeurs peuvent être lues ici : Fonction Arduino Serial.begin()

Dans loop(), le premier message que nous souhaitons envoyer est “Hello World !”. Ce message est transmis en utilisant Serial.println(“Hello World !”) car il enverra cette chaîne au port série au format ASCII. À la fin du message, on trouve le caractère Carriage Return (CR, \r) et Newline (\n). De plus, un délai de 100 millisecondes est utilisé chaque fois que le programme imprime sur le port série.

  Commande vocale avec arduino

Tout d’abord, le paquetage pyserial doit être importé. Pour plus d’informations sur l’installation de pyserial dans l’environnement Windows, veuillez consulter cette instruction : Installation de Python et pyserial. Ensuite, nous initialisons le port série avec le numéro de port COM et le débit en bauds. Le débit en bauds doit être le même que celui utilisé dans le sketch Arduino.

Le message reçu sera imprimé dans la boucle while en utilisant la fonction readline(). Un délai de 100 millisecondes est également utilisé ici, comme dans le sketch Arduino. Veuillez noter que la fonction pyserial readline() requiert un timeout lors de l’ouverture d’un port série (documentation pyserial : PySerial ReadLine).

Python arduino communication série

Python est utilisé dans de nombreuses applications, notamment la science des données, l’apprentissage automatique et le développement Web. Un autre domaine dans lequel nous pouvons utiliser Python est le contrôle du matériel externe. Qu’est-ce que j’entends par matériel externe ? Une pièce de matériel externe peut être une lumière ou un capteur. Le matériel externe comprend les multimètres ou les analyseurs spectraux. Je considère comme matériel externe tout ce qui est connecté à un ordinateur et qui ne l’est pas habituellement. Il ne s’agit donc pas d’un clavier, d’une souris, d’un casque, d’une webcam, d’une clé USB, mais de choses comme des moteurs, des réseaux de lumières, des solénoïdes, des actionneurs linéaires, des capteurs de pression, etc. Dans ce post, nous allons passer en revue comment utiliser Python pour contrôler une LED qui est connectée à un Arduino. Python fonctionnant sur un ordinateur allumera et éteindra la LED de l’Arduino.

  Comment faire tourner un moteur brushless?

Pour commencer un nouveau projet Python, la meilleure pratique consiste à créer un nouvel environnement virtuel. J’ai installé la distribution Anaconda de Python sur ma machine Windows 10. Lorsque vous installez Anaconda, il est livré avec le très utile Anaconda Prompt. L’utilisation de l’invite Anaconda est un peu comme l’utilisation du terminal sur un MacOS ou un Linux. Pour lancer Anaconda Prompt sous Windows 10, cliquez sur le bouton Démarrer de Windows en bas à gauche et sélectionnez Anaconda Prompt.

Pyserial

Après être devenu compétent avec Arduino, je me suis retrouvé piégé dans son environnement de développement (IDE). J’avais besoin d’échapper à la simplicité du port série et de transformer la plateforme en un outil d’ingénierie utilisable. J’ai essayé d’enregistrer sur des cartes SD, mais j’ai décidé que l’ajout de matériel supplémentaire était superflu ; j’ai essayé Bluetooth et WiFi, mais là encore, à moins d’applications spécifiques de l’Internet des objets, j’ai trouvé que c’était des moyens détournés d’obtenir ce que je voulais : un simple système d’enregistrement de données. Je suis finalement arrivé à la bibliothèque pySerial de Python, qui lit directement à partir du port série et constitue une solution complète à ma situation difficile.  L’utilisation de pySerial est beaucoup plus facile que l’on pourrait le croire, car l’implémentation la plus fondamentale consiste en seulement trois lignes de code :

Ces trois lignes simples lisent une seule ligne de données à partir du port série. Dans le cas de Raspberry Pi, le port série (sur mon Arduino) est situé sur ‘/dev/ttyACM0′. Vous pouvez aussi trouver le vôtre à cet endroit, ou à un incrément entier (ttyACM1, ttyACM2, etc.), ou peut-être à une adresse complètement différente. Vérifiez le port série de votre Arduino IDE pour connaître l’emplacement exact.  Après avoir réussi à lire une ligne de votre Arduino, vérifiez qu’elle est dans le format désiré.  J’ai choisi d’imprimer et de lire une seule ligne, mais vous pouvez préférer des formats séparés par des virgules ou des formats similaires. Le code ci-dessus n’est pas particulièrement intéressant, mais il permet de vérifier que pySerial fonctionne et que vous analysez correctement les données de votre port série.  Une fois la méthode ci-dessus comprise, nous pouvons passer aux boucles et à l’enregistrement des données en temps réel.

  Commande moteur brushless arduino