Tabla de contenido:
- Paso 1: ¿Qué necesitamos?
- Paso 2: Conexiones de hardware
- Paso 3: software Python
- Paso 4: software del microcontrolador
- Paso 5: Conclusión
Video: Comunicación serial PIC MCU y Python: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
¡Hola chicos! En este proyecto intentaré explicar mis experimentos sobre comunicación serial PIC MCU y Python. En Internet, hay muchos tutoriales y videos sobre cómo comunicarse con PIC MCU a través de un terminal virtual, lo cual es muy útil. Sin embargo, en mi proyecto principal, uno de los requisitos es establecer una comunicación en serie entre PIC MCU y Python, que no pude encontrar un buen tutorial. Entonces empecemos:)
Paso 1: ¿Qué necesitamos?
Entonces, primero que nada, veamos qué necesitamos. En términos de hardware:
- Seguramente, PIC MCU que es en mi caso PIC16f877a (No necesitas esa placa. Esto es para simplificar algunas conexiones sucias)
- Convertidor de USB a TTL para comunicarse con PIC MCU a través del puerto USB utilizando pines TX y RX.
- Programador MCU que es en mi caso programador K150, pero puedes usar PicKit 2, 3 o cualquier otra cosa.
- Y finalmente una computadora:)
En términos de software:
- Un IDE para escribir código Python, que en mi caso es Pycharm, pero también puedes usar el IDE normal de Python.
- Un entorno para programar la MCU que es en mi caso MPLAB X IDE con compilador CCS C.
Paso 2: Conexiones de hardware
En la imagen se dan las conexiones de hardware adjuntas que se encuentran entre PIC MCU y convertidor TTL USB como se muestra a continuación:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
TIERRA -------------- TIERRA
No necesita conectar el pin VCC del convertidor TTL USB (sin embargo, si lo desea, puede hacerlo). Estas 3 conexiones son suficientes.
Paso 3: software Python
Comencemos a escribir software para el lado de Python que será transmisor en nuestro caso, porque enviará la cadena a la MCU.
import serial #import serial librarydata = '24' #data que enviaremos data = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #conectar al puerto ser.write (a.encode ()) # enviar los datos
En primer lugar, se importa la biblioteca en serie para utilizar su futuro. Queremos enviar una cadena de datos de ejemplo para confirmar en el código MCU que la aceptamos. Quiero aquí señalar una cosa. Es por eso que agregamos '\ 0' a la cadena. Esto se debe a que, en el lado de la MCU, es imposible leer la cadena por completo. Se lee carácter a carácter. Entonces, queremos saber el final de la cadena para dejar de leer. Entonces, agregamos '\ 0' a la cadena que indica el final de la cadena. Luego nos conectamos al puerto que está conectado a la MCU. Puede determinar ese puerto buscando en 'Administrador de dispositivos'. Por lo tanto, tenga cuidado de estar en el mismo puerto. Después de todo, enviamos los datos a la MCU. Se debe agregar ".encode ()" a los datos de la cadena para poder enviarlos al receptor.
Paso 4: software del microcontrolador
Entonces, veamos nuestro código para MCU. En primer lugar, quiero mostrarles el archivo "config.h" que no es obligatorio, pero lo hice por simplicidad. Aquí solo cambia la frecuencia de tu MCU.
#ifndef CONFIG_H # define CONFIG_H
#incluir
#dispositivo ADC = 16
#FUSES NOWDT // Sin temporizador de perro guardián
#FUSES NOBROWNOUT // Sin reinicio por caída de tensión #FUSES NOLVP // Sin programación de baja tensión, B3 (PIC16) o B5 (PIC18) utilizado para E / S
#use delay (crystal = 6000000)
Ahora veamos el código principal:
#incluir
#incluir
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; tampón de carbón [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 (vacío) {
set_tris_d (0x00); salida_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (buffer, cmp_) == 0) salida_bajo (LED_RED); más salida_alta (LED_RED); }}
Al principio incluimos la biblioteca de cadenas que será útil en las operaciones de cadenas, que en nuestro caso es la operación de comparación de cadenas (strcmp). Entonces, nuestro propósito en este código es encender el led conectado al pin D0 si el valor transmitido es el mismo que nuestro valor dado que es "cmp_" igual a "24".
En primer lugar, habilitamos la interrupción "rda" que provocará una interrupción cuando se transmitan los datos.
En segundo lugar, veamos dentro de ISR (rutina de servicio de interrupción) que se llama "serial_communication_interrupt". En el interior, en primer lugar, deshabilitamos la bandera de interrupción para leer el valor recibido y causar más interrupciones. Después de eso leemos la cadena carácter a carácter hasta llegar a '\ 0'. Mientras leemos dentro de la cadena, también escribimos cada carácter en el búfer para obtener la cadena recibida.
Al final, volvemos a entrar mientras. Aquí comparamos nuestra cadena de búfer que es cadena recibida y cmp_ cadena para ver si obtenemos la cadena correctamente. Si son iguales, enciendo el led, de lo contrario, lo apago. *
* En el código, lo hice al revés porque mi placa invierte los valores de los pines del puerto D. En su código, cámbielo a:
if (strcmp (buffer, cmp_) == 0) salida_alta (LED_RED); si no salida_bajo (LED_RED);
Finalmente, compílelo y cárguelo en su MCU y luego ejecute el código en Python. Debería ver el led encenderse.
Paso 5: Conclusión
Hemos terminado una tarea con éxito. Espero que te sea de utilidad. Si tiene alguna pregunta, no dude en preguntar:) Hasta el próximo proyecto.
Recomendado:
Comunicación en serie Arduino y Python - Pantalla del teclado: 4 pasos
Comunicación en serie Arduino y Python - Pantalla del teclado: este proyecto está hecho para usuarios de Mac, pero también se puede implementar para Linux y Windows, el único paso que debería ser diferente es la instalación
Comunicación ESP8266 y Python para Noobs: 6 pasos
Comunicación ESP8266 y Python para Noobs: esta guía le permite obtener cualquier dato de ESP8266 y controlarlo sobre python sin comandos AT. Para los principiantes, la mayoría de las guías sobre el uso de ESP8266 es difícil, porque quieren que flashee "AT COMMANDS”En el chip, que es: Innecesario Wast
Comunicación inalámbrica con módulos RF de 433 MHz y microcontroladores Pic baratos. Parte 2: 4 pasos (con imágenes)
Comunicación inalámbrica con módulos RF de 433 MHz y microcontroladores Pic baratos. Parte 2: En la primera parte de este instructivo, demostré cómo programar un PIC12F1822 usando el compilador MPLAB IDE y XC8, para enviar una cadena simple de forma inalámbrica usando módulos baratos TX / RX 433MHz. El módulo receptor se conectó a través de un USB a UART TTL anuncio por cable
Launchpad - Comunicación Serial Con Matlab: 6 pasos
Launchpad - Comunicación Serial Con Matlab: Hola, bienvenido a este tutorial donde aprender á s a comunicar tu tarjeta LaunchPad TI Evaluation Kit con Matlab.En este tutorial se enfocar á a la conexión con la Tiva C y el usuario podr á migrar f á cilmente a una ta
Punto de acceso: comunicación de la estación entre dos MCU ESP8266: 3 pasos
Punto de acceso: comunicación de estación entre dos MCU ESP8266: ¡Hola, creadores! En mi instructable anterior hice una comunicación WiFi entre dos MCU ESP8266 a través de un enrutador WiFi doméstico. Como vi en los comentarios, hay fabricantes a los que les gustaría usar MCU ESP8266 lejos del alcance de un enrutador. Así que aquí hay un bar