Cuprins:
- Pasul 1: De ce avem nevoie?
- Pasul 2: Conexiuni hardware
- Pasul 3: Software Python
- Pasul 4: Software-ul microcontrolerului
- Pasul 5: Concluzie
Video: PIC MCU și Python Serial Communication: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Buna baieti! În acest proiect, voi încerca să explic experimentele mele pe PIC MCU și comunicare serială Python. Pe internet, există multe tutoriale și videoclipuri despre cum să comunicați cu PIC MCU prin terminal virtual, ceea ce este foarte util. Cu toate acestea, în proiectul meu principal una dintre cerințe este să stabilesc o comunicare serială între PIC MCU și Python, pe care nu am putut să o găsesc. Deci sa începem:)
Pasul 1: De ce avem nevoie?
Deci, în primul rând să vedem de ce avem nevoie. În ceea ce privește hardware-ul:
- Sigur, PIC MCU care este în cazul meu PIC16f877a (Nu aveți nevoie de placa respectivă. Acest lucru este pentru a simplifica unele conexiuni murdare)
- Convertor USB la TTL pentru a comunica cu PIC MCU prin port USB utilizând pinii TX și RX.
- Programator MCU, care este în cazul meu programator K150, dar puteți folosi PicKit 2, 3 sau orice altceva.
- Și în cele din urmă un computer:)
În ceea ce privește software-ul:
- Un IDE pentru a scrie codul Python, care este în cazul meu Pycharm, dar puteți utiliza și IDE Python obișnuit.
- Un mediu pentru programarea MCU, care este în cazul meu MPLAB X IDE cu compilator CCS C.
Pasul 2: Conexiuni hardware
În imagine sunt prezentate conexiunile hardware atașate, care sunt între PIC MCU și convertorul USB TTL după cum urmează:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Nu este nevoie să conectați pinul VCC al convertorului USB TTL (cu toate acestea, dacă doriți, puteți face). Aceste 3 conexiuni sunt destul de suficiente.
Pasul 3: Software Python
Să începem să scriem software pentru partea Python care va fi transmițător în cazul nostru, deoarece va trimite șirul către MCU.
import serial #import serial librarydata = '24' #data pe care le vom trimite date = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #connect to the port ser.write (a.encode ()) #transmite datele
În primul rând biblioteca importată este importată pentru a-și folosi viitorul. Vrem să trimitem un exemplu de șir de date pentru a confirma în codul MCU că le-am acceptat. Vreau să remarc aici un lucru. Acesta este motivul pentru care am adăugat „\ 0” la șir. Acest lucru se datorează faptului că, pe partea MCU, este imposibil să citiți șirul în totalitate. Se citește caracter cu caracter. Deci, vrem să cunoaștem sfârșitul șirului pentru a nu mai citi. Deci, adăugăm „\ 0” la șirul care indică sfârșitul șirului. Apoi ne conectăm la portul care este conectat la MCU. Puteți determina acel port căutând în „Device Manager”. Deci, aveți grijă să vă aflați pe același port. La urma urmei, trimitem datele către MCU. „.encode ()” ar trebui adăugat la datele șirului pentru a putea fi trimise către receptor.
Pasul 4: Software-ul microcontrolerului
Deci, să vedem codul nostru pentru MCU. În primul rând vreau să vă arăt fișierul „config.h” din interior, care nu este obligatoriu, dar l-am făcut pentru simplitate. Aici trebuie doar să schimbați frecvența MCU-ului dvs.
#ifndef CONFIG_H # definește CONFIG_H
#include
#device ADC = 16
#FUSES NOWDT // Fără cronometru pentru câini de supraveghere
# FUSES NOBROWNOUT // Nu se resetează defecțiunea # FUSES NOLVP // Fără programare de joasă tensiune, B3 (PIC16) sau B5 (PIC18) utilizate pentru I / O
# întârziere de utilizare (cristal = 6000000)
Acum să vedem codul principal:
#include
#include
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paritate = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; tampon char [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 (nul) {
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); }}
La început includem biblioteca de șiruri, care ne va fi de ajutor în operațiile de șiruri, care în cazul nostru este operația de comparare a șirurilor (strcmp). Deci, scopul nostru în acest cod este să pornim ledul conectat la pinul D0 dacă valoarea transmisă este aceeași cu valoarea dată, care este "cmp_" egală cu "24".
În primul rând, activăm întreruperea „rda”, care va provoca întreruperea la transmiterea datelor.
În al doilea rând, să ne uităm în interiorul ISR (rutină de serviciu de întrerupere) care se numește „serial_communication_interrupt”. În interior dezactivăm mai întâi semnalul de întrerupere pentru a citi valoarea primită și pentru a provoca întreruperea în continuare. După aceea, citim șirul caracter cu caracter până când ajungem la „\ 0”. În timp ce citim șirul din interior, scriem și fiecare caracter în buffer pentru a obține șirul primit.
La sfârșit, intrăm din nou înăuntru. Aici comparăm șirul tampon care este primit șir și șir cmp_ pentru a vedea dacă obținem șirul corect. Dacă sunt egale, atunci pornesc ledul, altfel opresc. *
* În cod am făcut inversare, deoarece placa mea inversează valorile pinului portului D. În codul dvs. schimbați-l în:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
În cele din urmă, compilați-l și încărcați-l pe MCU și apoi rulați codul în Python. Ar trebui să vedeți ledul pornit.
Pasul 5: Concluzie
Am terminat cu succes o sarcină. Sper că vă va fi de folos. Dacă aveți vreo întrebare, vă rugăm să nu ezitați să întrebați:) Până la următorul proiect.
Recomandat:
USB la serial TTL: 3 pași
USB la Serial TTL: Pentru unele dintre proiectele mele PIC am nevoie de o interfață serial (RS232) pentru a imprima unele mesaje pe ecranul computerului meu. Am încă un computer desktop care are o interfață RS232, dar în prezent majoritatea computerelor au în schimb o interfață USB. Puteți cumpăra dev
Cum să programați PIC MCU cu programatorul PICkit folosind o panou de calcul: 3 pași
Cum să programați PIC MCU cu programatorul PICkit folosind o placă de calcul: nu aveți nevoie de instrumente scumpe și sofisticate pentru a vă juca cu microcontrolere PIC (sau cu orice alt). Tot ce aveți nevoie este o placă de testare în care vă testați circuitul și programarea. Desigur, este necesar un fel de programator și IDE. În această instrucțiune
STM32F4 Discovery Board și Python USART Communication (STM32CubeMx): 5 pași
STM32F4 Discovery Board și Python USART Communication (STM32CubeMx): Bună! În acest tutorial vom încerca să stabilim comunicarea USART între STM32F4 ARM MCU și Python (poate fi înlocuită cu orice altă limbă). Deci sa începem:)
ESP8266 și Python Communication pentru Noobs: 6 pași
Comunicare ESP8266 și Python pentru Noobs: Acest ghid vă permite să obțineți orice date de la ESP8266 și să le controlați pe Python fără comenzi AT. Pentru începători, majoritatea ghidurilor despre utilizarea ESP8266 sunt dificile, deoarece vor să blocați „AT COMMANDS”În cip, care este: Deșeuri inutile
HC-08 Bluetooth UART Communication Module V2.4 Ghidul utilizatorului: 9 pași
HC-08 Bluetooth UART Communication Module V2.4 Ghidul utilizatorului: Introducere produs Modem Bluetooth - Modul minim de trecere HC08 este un modul de transmisie de date de nouă generație bazat pe protocolul Bluetooth Specification V4.0 BLE. Banda de frecvență fără fir este de 2,4 GHz ISM cu metoda de modulare GFSK. Th