Table des matières:

PIC MCU et communication série Python : 5 étapes
PIC MCU et communication série Python : 5 étapes

Vidéo: PIC MCU et communication série Python : 5 étapes

Vidéo: PIC MCU et communication série Python : 5 étapes
Vidéo: Python serial port communication using PySerial #iot 2024, Novembre
Anonim
PIC MCU et communication série Python
PIC MCU et communication série Python
MCU PIC et communication série Python
MCU PIC et communication série Python

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 ?

De quoi avons nous besoin?
De quoi avons nous besoin?
De quoi avons nous besoin?
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

Connexions matérielles
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é: