Мазмұны:
- 1 -қадам: бізге не қажет?
- 2 -қадам: Аппараттық қосылулар
- 3 -қадам: Python бағдарламасы
- 4 -қадам: Микроконтроллер бағдарламалық жасақтамасы
- 5 -қадам: Қорытынды
Бейне: PIC MCU және Python сериялық байланысы: 5 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
Сәлем, жігіттер! Бұл жобада мен PIC MCU мен Python сериялық байланысы бойынша эксперименттерімді түсіндіруге тырысамын. Интернетте PIC MCU -мен виртуалды терминал арқылы байланысу туралы көптеген оқулықтар мен бейнелер бар, бұл өте пайдалы. Дегенмен, менің негізгі жобамда талаптардың бірі - PIC MCU мен Python арасында сериялық байланыс орнату, мен оны жақсы оқулық таба алмадым. Сонымен, бастайық:)
1 -қадам: бізге не қажет?
Сонымен, алдымен бізге не қажет екенін көрейік. Аппараттық құралдар бойынша:
- Әрине, менің жағдайда PIC16f877a болып табылатын PIC MCU (Сізге бұл тақта қажет емес. Бұл кейбір лас қосылымдарды жеңілдету үшін).
- TX және RX түйреуіштері арқылы USB порты арқылы PIC MCU -мен байланысу үшін USB - TTL түрлендіргіші.
- Менің жағдайда K150 бағдарламашысы болып табылатын MCU бағдарламашысы, бірақ сіз PicKit 2, 3 немесе басқа нәрсені пайдалана аласыз.
- Соңында компьютер:)
Бағдарламалық қамтамасыз ету тұрғысынан:
- Pycharm менің жағдайда Python кодын жазу үшін IDE, бірақ сіз кәдімгі Python IDE -ді де пайдалана аласыз.
- CCU C компиляторы бар MPLAB X IDE болып табылатын MCU бағдарламалау ортасы.
2 -қадам: Аппараттық қосылулар
Суретте PIC MCU мен USB TTL түрлендіргіші арасындағы аппараттық қосылымдар берілген:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Сізге USB TTL түрлендіргішінің VCC түйреуішін қосудың қажеті жоқ (егер қаласаңыз, жасай аласыз). Бұл 3 байланыс жеткілікті.
3 -қадам: Python бағдарламасы
Python үшін бағдарламалық қамтамасыз етуді жазуды бастайық, ол біздің жағдайда таратушы болады, себебі ол жолды MCU -ға жібереді.
import serial serial #import serial librarydata = '24' #біз жіберетін деректер = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #портқа қосылу ser.write (a.encode ()) #деректерді жіберу
Біріншіден, сериялық кітапхана өзінің болашағын пайдалану үшін импортталады. Біз MCU кодымен оны қабылдағанымызды растау үшін мысал жолының деректерін жібергіміз келеді. Мен мұнда бір нәрсені атап өткім келеді. Сондықтан біз жолға '\ 0' қостық. Себебі, MCU жағында жолды толық оқу мүмкін емес. Бұл кейіпкерге байланысты оқылады. Сонымен, біз оқуды тоқтату үшін жолдың соңын білгіміз келеді. Сонымен, жолдың соңын көрсететін жолға '\ 0' қосамыз. Содан кейін біз MCU -ға қосылған портқа қосыламыз. Сіз бұл құрылғыны «Құрылғы менеджерінен» іздеу арқылы анықтай аласыз. Сонымен, сіз бір портта болғаныңызға мұқият болыңыз. Ақыр соңында, біз деректерді MCU -ге жібереміз. «.encode ()» қабылдағышқа жіберу үшін жол деректеріне қосылуы керек.
4 -қадам: Микроконтроллер бағдарламалық жасақтамасы
Сонымен, MCU кодын көрейік. Ең алдымен мен сізге қажет емес «config.h» файлын көрсеткім келеді, бірақ мен оны қарапайымдылық үшін жасадым. Мұнда MCU жиілігін өзгертіңіз.
#ifndef CONFIG_H#CONFIG_H анықтаңыз
#қосу
#құрылғы ADC = 16
#FUSES NOWDT // Watch Dog Timer жоқ
#FUSES NOBROWNOUT // Қоңырауды қалпына келтіру жоқ #FUSES NOLVP // Төмен кернеуді енгізу жоқ, енгізу/шығару үшін B3 (PIC16) немесе B5 (PIC18) қолданылмайды
#пайдалану кідірісі (кристалл = 6000000)
Енді негізгі кодты қарастырайық:
#қосу
#қосу
#rs232 пайдалану (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)
#LED_RED PIN_D0 анықтаңыз
char inp; char cmp _ = «24»; char буфері [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); белгісіз int i = 0; inp = getc (); putc (кіріс); while (inp! = '\ 0') {буфер = inp; inp = getc (); putc (кіріс); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (буфер, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
Басында біз жолдық кітапхананы қосамыз, ол бізге жолдық операцияларда көмектеседі, бұл біздің жағдайда жолды салыстыру операциясы (strcmp). Сонымен, бұл кодтағы біздің мақсатымыз - егер D0 түйреуішіне қосылған сымды қосу, егер берілген мән біздің «cmp_» «24» мәніне тең болса.
Ең алдымен, біз «rda» үзілісін қосамыз, бұл деректер жіберілген кезде үзіліс тудырады.
Екіншіден, «serial_communication_interrupt» деп аталатын ISR (үзіліс қызметі) режимін қарастырайық. Ішінде біз алдымен алынған мәнді оқу үшін үзіліс жалаушасын өшіреміз және одан әрі үзіліс тудырамыз. Осыдан кейін біз жолдың таңбасын '\ 0' мәніне жеткенше оқимыз. Ішкі жолды оқу кезінде біз алынған жолды алу үшін буферге әр таңбаны жазамыз.
Соңында, біз қайтадан ішке кіреміз. Мұнда біз жолды дұрыс алғанымызды білу үшін string және cmp_ жолын алған буферлік жолды салыстырамыз. Егер олар тең болса, онда мен светодиодты қосамын, әйтпесе өшіремін*.
*Кодта мен керісінше болдым, себебі менің тақтам D портының мәндерін өзгертеді. Сіздің кодыңызда оны өзгертіңіз:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); else output_low (LED_RED);
Соңында, оны құрастырып, MCU -ге жүктеңіз, содан кейін Python -да кодты іске қосыңыз. Сіз жарықдиодты қосуды көруіңіз керек.
5 -қадам: Қорытынды
Біз бір тапсырманы сәтті аяқтадық. Сізге пайдалы болады деп үміттенемін. Егер сізде сұрақтар болса, тартынбаңыз:) Келесі жобаға дейін.
Ұсынылған:
Arduino сериялық байланысы: 5 қадам
Arduino сериялы байланысы: Көптеген Arduino жобалары бірнеше Arduino арасында деректерді жіберуге сүйенеді. Сіз әуесқой болсаңыз да, RC автокөлігін, RC ұшағын немесе дисплейі бар метеорологиялық станцияны жобаласаңыз да, сіз қалай сенімді жұмыс істеу керектігін білуіңіз керек. тасымалдау сериясы
Arduino және Python сериялық байланысы - пернетақта дисплейі: 4 қадам
Arduino және Python сериялық байланысы - пернетақта дисплейі: Бұл жоба mac пайдаланушыларына арналған, бірақ оны Linux пен Windows үшін де қолдануға болады, тек басқаша болуы керек - орнату
ESP8266 және Python байланысы Noobs үшін: 6 қадам
ESP8266 және Python Communication Noobs үшін: Бұл нұсқаулық ESP8266 -дан кез келген деректерді алуға және оны AT пәрменінсіз python арқылы басқаруға мүмкіндік береді. Жаңадан бастаушылар үшін ESP8266 -ды қолдану туралы нұсқаулықтардың көпшілігі қиын, себебі олар «AT COMMANDS »Чипіне енгізіңіз, ол: қажетсіз ысырап
{USB арқылы} РЖ сериялық деректер байланысы: 3 қадам
RF сериялық деректер сілтемесі {USB арқылы}: TECGRAF DOC USB арқылы арзан RF модулінің көмегімен деректерді қалай жіберуге болады. Схема USB портынан энергия алады (100 мА беруі мүмкін, ал кейбір бағдарламалау кезінде 500 мА дейін жетуі мүмкін) Материалдар тізімі: 1 - Бір жұп РЖ модулі (Laipac RLP/TL сияқты
Accesspoint - екі ESP8266 MCU арасындағы станция байланысы: 3 қадам
Accesspoint - екі ESP8266 MCU арасындағы станция байланысы: Сәлеметсіздер ме! Мен алдыңғы нұсқаулықта үйдегі WiFi маршрутизаторы арқылы екі ESP8266 MCU арасындағы WiFi байланысын жасадым. Мен түсініктемелерден көргенімдей, маршрутизатор ауқымынан алыс ESP8266 MCU пайдаланғысы келетін жасаушылар бар. Міне, бар