Table des matières:
- Étape 1: De quoi avons-nous besoin ?
- Étape 2: Connexions matérielles
- Étape 3: Logiciel Python
- Étape 4: Logiciel du microcontrôleur
- Étape 5: Conclusion
Vidéo: PIC MCU et communication série Python : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Bonjour gars! Dans ce projet, je vais essayer d'expliquer mes expériences sur la communication série PIC MCU et Python. Sur Internet, il existe de nombreux tutoriels et vidéos sur la façon de communiquer avec PIC MCU via un terminal virtuel, ce qui est très utile. Cependant, dans mon projet principal, l'une des exigences est d'établir une communication série entre PIC MCU et Python, ce que je n'ai pas pu trouver de bon tutoriel. Alors, commençons:)
Étape 1: De quoi avons-nous besoin ?
Alors, tout d'abord, voyons ce dont nous avons besoin. Au niveau du matériel:
- Sûrement, PIC MCU qui est dans mon cas PIC16f877a (Vous n'avez pas besoin de cette carte. C'est afin de simplifier certaines connexions sales)
- Convertisseur USB vers TTL afin de communiquer avec PIC MCU via le port USB en utilisant les broches TX et RX.
- Programmeur MCU qui est dans mon cas le programmeur K150, mais vous pouvez utiliser PicKit 2, 3 ou autre chose.
- Et enfin un ordinateur:)
Au niveau du logiciel:
- Un IDE pour écrire du code python qui est dans mon cas Pycharm, mais vous pouvez également utiliser un IDE Python standard.
- Un environnement pour programmer le MCU qui est dans mon cas MPLAB X IDE avec compilateur CCS C.
Étape 2: Connexions matérielles
Dans l'image ci-jointe, les connexions matérielles sont indiquées entre le MCU PIC et le convertisseur USB TTL comme ci-dessous:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Vous n'avez pas besoin de connecter la broche VCC du convertisseur USB TTL (cependant, si vous le souhaitez, vous pouvez le faire). Ces 3 connexions suffisent amplement.
Étape 3: Logiciel Python
Commençons à écrire un logiciel pour le côté Python qui sera émetteur dans notre cas, car il enverra la chaîne au MCU.
import serial #import serial librarydata = '24' #data que nous enverrons data = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) #connect to the port ser.write(a.encode()) #envoyer les données
Tout d'abord, la bibliothèque série est importée afin d'utiliser son avenir. Nous voulons envoyer un exemple de chaîne de données afin de confirmer dans le code MCU que nous l'avons accepté. Je veux ici noter une chose. C'est pourquoi nous avons ajouté '\0' à la chaîne. En effet, côté MCU, il est impossible de lire totalement la chaîne. Il se lit caractère par caractère. Donc, nous voulons connaître la fin de la chaîne afin d'arrêter la lecture. Ainsi, nous ajoutons '\0' à la chaîne qui indique la fin de la chaîne. Ensuite, nous nous connectons au port qui est connecté au MCU. Vous pouvez déterminer ce port en recherchant dans « Gestionnaire de périphériques ». Attention donc à être sur le même port. Après tout, nous envoyons les données au MCU. ".encode()" doit être ajouté aux données de chaîne afin de pouvoir l'envoyer au destinataire.
Étape 4: Logiciel du microcontrôleur
Voyons donc notre code pour MCU. Tout d'abord, je veux vous montrer le fichier "config.h" à l'intérieur qui n'est pas requis, mais je l'ai fait pour plus de simplicité. Ici, changez simplement la fréquence de votre MCU.
#ifndef CONFIG_H#define CONFIG_H
#comprendre
#dispositif ADC=16
#FUSES NOWDT //Pas de minuteur de chien de garde
#FUSES NOBROWNOUT //Pas de réinitialisation de baisse de tension #FUSES NOLVP //Pas de programme basse tension, B3(PIC16) ou B5(PIC18) utilisé pour les E/S
#use delay(cristal=6000000)
Voyons maintenant le code principal:
#comprendre
#comprendre
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#define LED_RED PIN_D0
entrée char; car cmp_="24"; tampon de caractères[3];
#int_rda
void serial_communication_interrupt() { disable_interrupts(int_rda); entier non signé i = 0; inp = getc(); putc(inp); while(inp != '\0') { buffer = inp; inp = getc(); putc(inp); je++; } }
vide principal (vide) {
set_tris_d(0x00); sortie_d(0xFF); enable_interrupts(GLOBAL); while(1) { enable_interrupts(int_rda); if(strcmp(buffer, cmp_) == 0) output_low(LED_RED); sinon output_high(LED_RED); } }
Au début, nous incluons une bibliothèque de chaînes qui nous sera utile dans les opérations de chaîne qui, dans notre cas, est une opération de comparaison de chaînes (strcmp). Donc, notre but dans ce code est d'allumer la led connectée à la broche D0 si la valeur transmise est la même que notre valeur donnée qui est "cmp_" égale à "24".
Tout d'abord, nous activons l'interruption "rda" qui provoquera une interruption lors de la transmission des données.
Deuxièmement, regardons à l'intérieur de l'ISR (routine de service d'interruption) qui s'appelle "serial_communication_interrupt". À l'intérieur, nous désactivons d'abord l'indicateur d'interruption afin de lire la valeur reçue et de provoquer une interruption supplémentaire. Après cela, nous lisons la chaîne caractère par caractère jusqu'à atteindre '\0'. Lors de la lecture à l'intérieur de la chaîne, nous écrivons également chaque caractère dans le tampon afin d'obtenir la chaîne reçue.
À la fin, nous rentrons à nouveau à l'intérieur. Ici, nous comparons notre chaîne de tampon qui est la chaîne reçue et la chaîne cmp_ afin de voir si nous obtenons correctement la chaîne. S'ils sont égaux, j'allume la led, sinon je l'éteins.*
* Dans le code, j'ai inversé car ma carte inverse les valeurs des broches du port D. Dans votre code, remplacez-le par:
if(strcmp(buffer, cmp_) == 0) output_high(LED_RED);else output_low(LED_RED);
Enfin, compilez-le et téléchargez-le sur votre MCU, puis exécutez le code en Python. Vous devriez voir la led s'allumer.
Étape 5: Conclusion
Nous avons terminé une tâche avec succès. J'espère qu'il vous sera utile. Si vous avez des questions, n'hésitez pas à demander:) Jusqu'au prochain projet.
Conseillé:
Communication série Arduino : 5 étapes
Communication série Arduino : de nombreux projets Arduino reposent sur la transmission de données entre plusieurs Arduinos. Que vous soyez un amateur qui construit une voiture RC, un avion RC ou conçoive une station météo avec un affichage à distance, vous aurez besoin de savoir de manière fiable transfert série
Communication série Arduino et Python - Affichage du clavier : 4 étapes
Arduino et Python Serial Communication - Keypad Display : Ce projet est conçu pour les utilisateurs de Mac mais il peut également être implémenté pour Linux et Windows, la seule étape qui devrait être différente est l'installation
Communication série sans fil avec Bluefruit : 4 étapes
Communication série sans fil à l'aide de Bluefruit : Voici un guide simple, étape par étape, pour remplacer vos fils par une connexion Bluetooth à faible consommation d'énergie : Il m'a fallu un certain temps pour comprendre cela, car il n'y a pratiquement aucune documentation sur le fait de le faire avec une technologie Bluetooth à faible consommation d'énergie moderne telle comme le Bluefruit
SmartMirror basé sur le Web utilisant la communication série : 6 étapes
SmartMirror basé sur le Web utilisant la communication série : cette instructable est livrée avec tout le code prêt à l'emploi. Le développement a été très compliqué mais une fois configuré, c'est vraiment facile à personnaliser. Jetez un coup d'œil et profitez-en
Communication série avec ARM Cortex-M4 : 4 étapes
Communication série à l'aide d'ARM Cortex-M4 : il s'agit d'un projet basé sur une maquette qui utilise ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) pour la communication série à l'aide d'un terminal virtuel. La sortie peut être obtenue sur un écran LCD 16x2 et l'entrée pour la communication série peut être donnée en série Mo