Mundarija:
- 1 -qadam: Bizga nima kerak?
- 2 -qadam: Uskuna ulanishlari
- 3 -qadam: Python dasturi
- 4 -qadam: Mikrokontroller dasturi
- 5 -qadam: Xulosa
Video: PIC MCU va Python ketma -ket aloqasi: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Salom bolalar! Ushbu loyihada men PIC MCU va Python ketma -ket aloqasi bo'yicha tajribalarimni tushuntirishga harakat qilaman. Internetda PIC MCU bilan virtual terminal orqali qanday bog'lanish bo'yicha ko'plab darsliklar va videolar mavjud, bu juda foydali. Ammo, mening asosiy loyihamda talablardan biri - PIC MCU va Python o'rtasida ketma -ket aloqa o'rnatish, lekin men yaxshi darslik topa olmadim. Shunday qilib, boshlaylik:)
1 -qadam: Bizga nima kerak?
Shunday qilib, birinchi navbatda, bizga nima kerakligini ko'rib chiqaylik. Uskuna jihatidan:
- Albatta, mening holatimda PIC16f877a bo'lgan PIC MCU (Sizga bu karta kerak emas. Bu ba'zi iflos ulanishlarni soddalashtirish uchun).
- TX va RX pinlari yordamida USB port orqali PIC MCU bilan bog'lanish uchun USB - TTL konvertori.
- Mening holatimda K150 dasturchisi bo'lgan MCU dasturchisi, lekin siz PicKit 2, 3 yoki boshqa narsalarni ishlatishingiz mumkin.
- Va nihoyat kompyuter:)
Dasturiy ta'minot nuqtai nazaridan:
- Pycharm misolida python kodini yozish uchun IDE, lekin siz oddiy Python IDE -dan ham foydalanishingiz mumkin.
- MCSni CCS C kompilyatori bilan MPLAB X IDE dasturlash uchun muhit.
2 -qadam: Uskuna ulanishlari
Rasmda PIC MCU va USB TTL konvertorlari orasidagi apparat ulanishlari ko'rsatilgan:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
USB TTL konvertorining VCC pinini ulash shart emas (Agar xohlasangiz, buni qilishingiz mumkin). Bu 3 ta ulanish etarli.
3 -qadam: Python dasturi
Python tomoni uchun dasturni yozishni boshlaylik, u bizning holatimizda uzatuvchi bo'ladi, chunki u mag'lubiyatni MCUga yuboradi.
import serial #import serial librarydata = '24' #data, biz ma'lumotlarni yuboramiz = a+'\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #portga ulanish ser.write (a.encode ()) #ma'lumotlarni yuborish
Birinchidan, kelajagidan foydalanish uchun ketma -ket kutubxona import qilinadi. Biz MCU kodida uni qabul qilganimizni tasdiqlash uchun misolli ma'lumotlarni yuborishni xohlaymiz. Men bu erda bir narsani ta'kidlamoqchiman. Shuning uchun biz qatorga '\ 0' qo'shdik. Buning sababi, MCU tomonida satrni to'liq o'qish mumkin emas. Bu belgi bo'yicha o'qiladi. Shunday qilib, biz o'qishni to'xtatish uchun satrning oxirini bilishni xohlaymiz. Shunday qilib, biz satrning oxirini bildiruvchi '\ 0' ni qo'shamiz. Keyin biz MCUga ulangan portga ulanamiz. Siz ushbu portni "Qurilma menejeri" bo'limida topishingiz mumkin. Shunday qilib, siz bitta portda ekanligingizga ehtiyot bo'ling. Axir biz ma'lumotlarni MCUga yuboramiz. Qabul qiluvchiga yuborish uchun ".encode ()" satr ma'lumotlariga qo'shilishi kerak.
4 -qadam: Mikrokontroller dasturi
Shunday qilib, keling MCU kodimizni ko'rib chiqaylik. Birinchidan, men sizga "config.h" faylini ko'rsatishni xohlayman, lekin u oddiy emas. Bu erda MCU chastotasini o'zgartiring.
#ifndef CONFIG_H#CONFIG_H ni aniqlang
#qo'shing
#qurilma ADC = 16
#FUSES NOWDT // Watch Dog Timer yo'q
#FUSES NOBROWNOUT // Brownout reset yo'q #FUSES NOLVP // Past kuchlanishli prgming, B3 (PIC16) yoki B5 (PIC18) kirish/chiqish uchun ishlatilmadi
#foydalanish kechikishi (billur = 6000000)
Endi asosiy kodni ko'rib chiqaylik:
#qo'shing
#qo'shing
#rs232 dan foydalaning (baud = 9600, xmit = pin_C6, rcv = pin_C7, parite = N, stop = 1)
#LED_RED PIN_D0 ni aniqlang
char inp; char cmp _ = "24"; char bufer [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); imzosiz int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {bufer = inp; inp = getc (); putc (inp); i ++; }}
void asosiy (void) {
set_tris_d (0x00); chiqish_d (0xFF); enable_interrupts (GLOBAL); while (1) {enable_interrupts (int_rda); if (strcmp (bufer, cmp_) == 0) output_low (LED_RED); boshqa output_high (LED_RED); }}
Boshida biz magistrallar kutubxonasini o'z ichiga olamiz, bu bizni mag'lubiyatli operatsiyalarda yordam beradi, bu bizning holatimizda string solishtirish (strcmp). Shunday qilib, bizning ushbu koddagi maqsadimiz - uzatilgan qiymat "cmp_" "24" ga teng bo'lgan qiymat bilan bir xil bo'lsa, D0 piniga ulangan svetodiodni yoqish.
Birinchidan, biz uzatish "rda" ni ishga tushiramiz, bu ma'lumotlar uzatilganda uzilishga olib keladi.
Ikkinchidan, keling, "serial_communication_interrupt" deb nomlangan ISR (uzilish xizmat ko'rsatish tartibi) ni ko'rib chiqaylik. Qabul qilingan qiymatni o'qish va keyingi uzilishni keltirib chiqarish uchun biz birinchi navbatda uzilish bayrog'ini o'chirib qo'yamiz. Shundan so'ng, biz "\ 0" ga yetguncha satrni belgi bo'yicha o'qiymiz. Ichki satrni o'qiyotganda, biz qabul qilingan satrni olish uchun har bir charni buferga yozamiz.
Oxir -oqibat, biz yana ichkariga kiramiz. Bu erda biz mag'lubiyatni to'g'ri qabul qilganimizni bilish uchun string va cmp_ stringni olgan tampon satrimizni solishtiramiz. Agar ular teng bo'lsa, men chiroqni yoqaman, aks holda o'chirib qo'yaman.
*Kodda men teskari qildim, chunki mening taxtam D port pin qiymatlarini o'zgartiradi. Kodingizda uni o'zgartiring:
if (strcmp (bufer, cmp_) == 0) output_high (LED_RED); boshqa output_low (LED_RED);
Nihoyat, uni kompilyatsiya qiling va MCU -ga yuklang, keyin Python -da kodni ishga tushiring. Ledning yoqilishini ko'rishingiz kerak.
5 -qadam: Xulosa
Biz bitta vazifani muvaffaqiyatli yakunladik. Umid qilamanki, bu siz uchun foydali bo'ladi. Agar sizda biron bir savol bo'lsa, ikkilanmasdan so'rang:) Keyingi loyihaga qadar.
Tavsiya:
SmartHome simsiz aloqasi: MQTT -ning haddan tashqari asoslari: 3 qadam
SmartHome simsiz aloqasi: MQTT -ning eng asosiy asoslari: MQTT asoslari: ** Men "Uy avtomatizatsiyasi" turkumini tayyorlamoqchiman, men kelajakda qilgan hamma narsani o'rganish uchun qilgan qadamlarni bosib o'taman. Bu ko'rsatma MQTT -ni kelgusidagi ko'rsatmalarimdan foydalanish uchun qanday sozlash bo'yicha asosiy ma'lumotlar. Qanday
MPU 6050 Gyro, Arduino bilan akselerometr aloqasi (Atmega328p): 5 qadam
MPU 6050 Gyro, Arduino bilan akselerometr aloqasi (Atmega328p): MPU6050 IMU 3 o'qli akselerometr va bitta o'qga o'rnatilgan 3 o'qli giroskopga ega. X, Y va Z o'qlari. Gyroskopning natijalari
NoSP uchun ESP8266 va Python aloqasi: 6 qadam
ESP8266 va "Noobs" uchun Python aloqasi: Bu qo'llanma sizga ESP8266 -dan istalgan ma'lumotni olish va uni AT buyrug'isiz python orqali boshqarish imkonini beradi. Yangi boshlanuvchilar uchun ESP8266 -dan foydalanish bo'yicha qo'llanmalarning ko'pchiligi qiyin, chunki ular "AT COMMANDS" "Chipga kiriting, bu: keraksiz chiqindilar
PIR senorining Pic Microocntroller bilan o'zaro aloqasi: 5 qadam
PIC senorining Pic Microocntroller bilan o'zaro aloqasi: PIR sensori pic mikrokontroller bilan o'zaro bog'langan va asta -sekin ko'rsatma
Kirish nuqtasi - ikkita ESP8266 MCU o'rtasida stansiya aloqasi: 3 qadam
Kirish nuqtasi - ikkita ESP8266 MCU o'rtasida stansiya aloqasi: Salom ishlab chiqaruvchilar! Oldingi ko'rsatmomda men uydagi WiFi router orqali ikkita ESP8266 MCU o'rtasida WiFi aloqasini o'rnatdim. Sharhlardan ko'rganimdek, ESP8266 MCU -ni yo'riqnoma diapazonidan uzoqda foydalanmoqchi bo'lgan ishlab chiqaruvchilar bor. Mana, bar