Taula de continguts:
- Pas 1: què necessitem?
- Pas 2: connexions de maquinari
- Pas 3: programari Python
- Pas 4: programari de microcontrolador
- Pas 5: Conclusió
Vídeo: MCU PIC i comunicació serial Python: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Hola nois! En aquest projecte intentaré explicar els meus experiments sobre la comunicació serial PIC MCU i Python. A Internet, hi ha molts tutorials i vídeos sobre com comunicar-se amb PIC MCU mitjançant terminal virtual, cosa que és molt útil. Tanmateix, en el meu projecte principal, un dels requisits és establir una comunicació en sèrie entre PIC MCU i Python, cosa que no he pogut trobar amb un bon tutorial. Comencem, doncs,:)
Pas 1: què necessitem?
Per tant, primer de tot, vegem què necessitem. Pel que fa al maquinari:
- Segurament, PIC MCU que és en el meu cas PIC16f877a (no necessiteu aquesta placa. Això és per simplificar algunes connexions brutes)
- Convertidor d'USB a TTL per comunicar-se amb PIC MCU a través del port USB mitjançant l'ús de pins TX i RX.
- Programador MCU que és en el meu cas programador K150, però podeu utilitzar PicKit 2, 3 o qualsevol altra cosa.
- I finalment un ordinador:)
Pel que fa al programari:
- Un IDE per escriure codi Python que és en el meu cas Pycharm, però també podeu utilitzar un IDE Python normal.
- Un entorn per programar l'MCU que és en el meu cas MPLAB X IDE amb compilador CCS C.
Pas 2: connexions de maquinari
A la imatge es mostren les connexions de maquinari adjuntes que es troben entre el PIC MCU i el convertidor USB TTL com es mostra a continuació:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
No cal que connecteu el pin VCC del convertidor USB TTL (però, si voleu, podeu fer-ho). Aquestes 3 connexions són suficients.
Pas 3: programari Python
Comencem a escriure programari per al costat de Python que serà transmissor en el nostre cas, perquè enviarà la cadena a la MCU.
import serial #import serial librarydata = '24' #data que enviarem data = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) #envia les dades
En primer lloc, s’importa la biblioteca en sèrie per tal d’utilitzar el seu futur. Volem enviar un exemple de dades de cadenes per confirmar al codi MCU que les hem acceptat. Aquí vull assenyalar una cosa. És per això que hem afegit "\ 0" a la cadena. Això es deu al fet que, al costat de la MCU, és impossible llegir la cadena totalment. Es llegeix caràcter a personatge. Per tant, volem conèixer el final de la cadena per deixar de llegir. Per tant, afegim '\ 0' a la cadena que indica el final de la cadena. A continuació, ens connectem al port que està connectat a la MCU. Podeu determinar aquest port cercant al Gestor de dispositius. Per tant, aneu amb compte que esteu al mateix port. Al cap i a la fi, enviem les dades a la MCU. S'ha d'afegir ".encode ()" a les dades de la cadena per poder enviar-les al receptor.
Pas 4: programari de microcontrolador
Per tant, vegem el nostre codi per a MCU. Primer de tot, vull mostrar-vos el fitxer "config.h" que no és obligatori, però ho he fet per simplicitat. Aquí només heu de canviar la freqüència de la vostra MCU.
#ifndef CONFIG_H # defineix CONFIG_H
#incloure
#device ADC = 16
#FUSES NOWDT // Sense temporitzador de gossos vigilants
#FUSES NOBROWNOUT // No es restableix l’enfosquiment #FUSES NOLVP // No hi ha programació de baixa tensió, B3 (PIC16) o B5 (PIC18) utilitzats per a E / S
# retard d'ús (cristall = 6000000)
Ara vegem el codi principal:
#incloure
#incloure
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; buff buffer [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); unsigned int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
void main (buit) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Al principi incloem una biblioteca de cadenes que ens serà útil en operacions de cadenes, que en el nostre cas són operacions de comparació de cadenes (strcmp). Per tant, el nostre propòsit en aquest codi és encendre el led connectat al pin D0 si el valor transmès és el mateix que el nostre valor donat que és "cmp_" igual a "24".
En primer lloc, activem la interrupció "rda", que provocarà una interrupció quan es transmetin dades.
En segon lloc, mirem dins de l'ISR (rutina de servei d'interrupció) que s'anomena "interrupció_comunicació_serial". Dins, desactivem primer el senyal d'interrupció per llegir el valor rebut i provocar una interrupció addicional. Després d'això, llegim la cadena caràcter per caràcter fins arribar a "\ 0". Mentre llegim la cadena interior, també escrivim cada caràcter al buffer per obtenir la cadena rebuda.
Al final, tornem a entrar mentre. Aquí comparem la nostra cadena de memòria intermèdia, que és la cadena rebuda i la cadena cmp_, per veure si obtenim la cadena correctament. Si són iguals, encenc el led, en cas contrari ho apago. *
* En el codi he realitzat inversions perquè la meva placa inverteix els valors del pin del port D. Al vostre codi, canvieu-lo per:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Finalment, compileu-lo i pengeu-lo a la vostra MCU i, a continuació, executeu codi a Python. Hauríeu de veure encendre el led.
Pas 5: Conclusió
Hem acabat una tasca amb èxit. Espero que us sigui útil. Si teniu alguna pregunta, no dubteu a fer-ho:) Fins al proper projecte.
Recomanat:
Comunicació sense fils SmartHome: els fonaments extrems de MQTT: 3 passos
Comunicació sense fils SmartHome: els conceptes bàsics extrems de MQTT: Fonaments bàsics de MQTT: ** Faré una sèrie de domòtica, aniré seguint els passos que vaig fer per aprendre tot el que he fet en el futur. Aquest instructable és la base sobre com configurar MQTT per utilitzar-lo en els meus futurs instructables. Vaja
Cotxe de control remot amb mòdul de comunicació NRF24L01 PA LNA: 5 passos
Cotxe de control remot amb el mòdul de comunicació PA LNA NRF24L01: en aquest tema, ens agradaria compartir informació sobre com fer un cotxe de control remot amb el mòdul PA LNA NRF24L01. En realitat, hi ha diversos mòduls de ràdio, com ara els mòduls de ràdio 433MHz, HC12, HC05 i LoRa. Però al nostre parer, el mod NRF24L01
Comunicació sèrie Arduino i Python: pantalla del teclat: 4 passos
Arduino and Python Serial Communication - Keypad Display: Aquest projecte està dissenyat per a usuaris de Mac, però també es pot implementar per a Linux i Windows, l’únic pas que hauria de ser diferent és la instal·lació
Comunicació sense fils mitjançant mòduls RF de 433 MHz i microcontroladors Pic. Part 2: 4 passos (amb imatges)
Comunicació sense fils mitjançant mòduls RF de 433 MHz i microcontroladors Pic. Part 2: a la primera part d’aquest instructiu, vaig demostrar com programar un PIC12F1822 amb el compilador MPLAB IDE i XC8, per enviar una cadena senzilla sense fils mitjançant mòduls TX / RX 433 MHz barats. El mòdul receptor es va connectar mitjançant un USB a UART TTL. anunci per cable
Punt d'accés - Comunicació de l'estació entre dos MCU ESP8266: 3 passos
Punt d'accés - Comunicació de l'estació entre dos MCU ESP8266: Hola, fabricants. En la meva instrucció anterior vaig fer una comunicació WiFi entre dos MCU ESP8266 a través d'un enrutador WiFi domèstic. Com he vist als comentaris, hi ha fabricants que voldrien utilitzar MCU ESP8266 lluny del rang d’un enrutador. Així que aquí teniu un bar