สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
สวัสดีทุกคน! ในโครงการนี้ ฉันจะพยายามอธิบายการทดลองของฉันเกี่ยวกับ PIC MCU และการสื่อสารแบบอนุกรม Python ทางอินเทอร์เน็ตมีบทช่วยสอนและวิดีโอมากมายเกี่ยวกับวิธีการสื่อสารกับ PIC MCU ผ่านเทอร์มินัลเสมือนซึ่งมีประโยชน์มาก อย่างไรก็ตาม ในโครงการหลักของฉัน หนึ่งในข้อกำหนดคือการสร้างการสื่อสารแบบอนุกรมระหว่าง PIC MCU และ Python ซึ่งฉันไม่สามารถหาบทช่วยสอนที่ดีได้ เอาล่ะ มาเริ่มกันเลย:)
ขั้นตอนที่ 1: เราต้องการอะไร
ก่อนอื่นเรามาดูกันว่าเราต้องการอะไร ในแง่ของฮาร์ดแวร์:
- แน่นอน PIC MCU ซึ่งในกรณีของฉันคือ PIC16f877a (คุณไม่จำเป็นต้องใช้บอร์ดนั้นเพื่อทำให้การเชื่อมต่อสกปรกง่ายขึ้น)
- ตัวแปลง USB เป็น TTL เพื่อสื่อสารกับ PIC MCU ผ่านพอร์ต USB โดยใช้พิน TX และ RX
- โปรแกรมเมอร์ MCU ซึ่งในกรณีของฉัน โปรแกรมเมอร์ K150 แต่คุณสามารถใช้ PicKit 2, 3 หรืออย่างอื่นได้
- และในที่สุดคอมพิวเตอร์:)
ในแง่ของซอฟต์แวร์:
- IDE เพื่อเขียนโค้ด python ซึ่งในกรณีของฉันคือ Pycharm แต่คุณสามารถใช้ Python IDE ปกติได้เช่นกัน
- สภาพแวดล้อมสำหรับการเขียนโปรแกรม MCU ซึ่งในกรณีของฉัน MPLAB X IDE พร้อมคอมไพเลอร์ CCS C
ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์
ในภาพที่แนบมาการเชื่อมต่อฮาร์ดแวร์จะได้รับซึ่งอยู่ระหว่างตัวแปลง PIC MCU และ USB TTL ดังต่อไปนี้:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
คุณไม่จำเป็นต้องเชื่อมต่อพิน VCC ของตัวแปลง USB TTL (แต่ถ้าคุณต้องการ คุณสามารถทำได้) การเชื่อมต่อ 3 อย่างนี้ค่อนข้างเพียงพอ
ขั้นตอนที่ 3: ซอฟต์แวร์ Python
เรามาเริ่มเขียนซอฟต์แวร์สำหรับฝั่ง Python ซึ่งจะเป็นเครื่องส่งในกรณีของเรา เพราะมันจะส่งสตริงไปที่ MCU
import serial #import serial librarydata = '24' #data ที่เราจะส่งข้อมูล = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) #connect to the port 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 //ไม่มีตัวจับเวลาการดูสุนัข
#FUSES NOBROWNOUT //ไม่มีการรีเซ็ตไฟตก #FUSES NOLVP //ไม่มี prgming แรงดันไฟต่ำ, B3(PIC16) หรือ B5(PIC18) ที่ใช้สำหรับ I/O
#ใช้ดีเลย์(คริสตัล=6000000)
ตอนนี้เรามาดูรหัสหลัก:
#รวม
#รวม
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#define LED_RED PIN_D0
ถ่าน inp; ถ่าน cmp_="24"; ถ่านบัฟเฟอร์[3];
#int_rda
เป็นโมฆะ serial_communication_interrupt () { disable_interrupts (int_rda); int ที่ไม่ได้ลงชื่อ i = 0; inp = getc(); พัต (inp); ในขณะที่ (inp != '\0') { บัฟเฟอร์ = inp; inp = getc(); พัต (inp); ผม++; } }
โมฆะหลัก (เป็นโมฆะ) {
set_tris_d(0x00); output_d(0xFF); enable_interrupts(GLOBAL); ในขณะที่ (1) { enable_interrupts (int_rda); if(strcmp(บัฟเฟอร์, cmp_) == 0) output_low(LED_RED); อื่น output_high (LED_RED); } }
ในตอนเริ่มต้น เราจะรวมไลบรารีสตริงซึ่งเราจะเป็นประโยชน์ในการดำเนินการสตริง ซึ่งในกรณีของเราคือการดำเนินการเปรียบเทียบสตริง (strcmp) ดังนั้น จุดประสงค์ของเราในรหัสนี้คือการเปิดไฟ LED ที่เชื่อมต่อกับพิน D0 หากค่าที่ส่งนั้นเหมือนกับค่าที่เราให้ไว้ซึ่งก็คือ "cmp_" เท่ากับ "24"
ก่อนอื่นเราเปิดใช้งาน "rda" ขัดจังหวะซึ่งจะทำให้เกิดการขัดจังหวะเมื่อมีการส่งข้อมูล
ประการที่สอง มาดูภายใน ISR (รูทีนบริการขัดจังหวะ) ซึ่งเรียกว่า "serial_communication_interrupt" ภายในก่อนอื่นเราปิดใช้งานการตั้งค่าสถานะขัดจังหวะเพื่ออ่านค่าที่ได้รับและทำให้เกิดการขัดจังหวะต่อไป หลังจากนั้นเราอ่านอักขระสตริงทีละอักขระจนถึง '\0' ในขณะที่อ่านภายในสตริง เรายังเขียนอักขระแต่ละตัวลงในบัฟเฟอร์เพื่อรับสตริงที่ได้รับ
ในตอนท้ายเราเข้ามาอีกครั้งในขณะที่ ที่นี่เราเปรียบเทียบสตริงบัฟเฟอร์ซึ่งได้รับสตริงและสตริง cmp_ เพื่อดูว่าเราได้รับสตริงอย่างถูกต้องหรือไม่ หากเท่ากันฉันจะเปิดไฟ LED ไม่เช่นนั้นให้ปิด*
*ในรหัสฉันย้อนกลับเพราะบอร์ดของฉันกลับค่าพินพอร์ต D ในรหัสของคุณเปลี่ยนเป็น:
if(strcmp(บัฟเฟอร์, cmp_) == 0) output_high(LED_RED);else output_low(LED_RED);
สุดท้าย คอมไพล์และอัปโหลดไปยัง MCU ของคุณ จากนั้นรันโค้ดใน Python คุณควรเห็นไฟ LED เปิดอยู่
ขั้นตอนที่ 5: บทสรุป
เราทำสำเร็จไปหนึ่งงานแล้ว ฉันหวังว่ามันจะเป็นประโยชน์สำหรับคุณ หากคุณมีคำถามใด ๆ โปรดอย่าลังเลที่จะถาม:) จนถึงโครงการต่อไป
แนะนำ:
Node Mcu Indian Car Central Lock พร้อม Rfid และ Blynk Timer Unlock: 9 ขั้นตอน
Node Mcu Indian Car Central Lock พร้อม Rfid และ Blynk Timer Unlock: ฉันกำลังแสดงให้คุณเห็นวันนี้รถสไตล์อินเดียล็อคกลางอัตโนมัติเต็มรูปแบบพร้อมแท็ก rfid blynk wifi ควบคุมและปลดล็อคเวลานอกจากนี้ยังมีคุณสมบัติทั้งหมดของเซ็นทรัลล็อคปกติ รถคันนี้ เซ็นทรัลล็อค WORKS OFFLINE ACTIVATION ต้องการ NETWORK LOCKS AN
MCU เข้าถึงบริการอินเทอร์เน็ตผ่าน IFTTT – Ameba Arduino: 3 ขั้นตอน
MCU การเข้าถึงบริการอินเทอร์เน็ตผ่าน IFTTT – Ameba Arduino: การเข้าถึงบริการอินเทอร์เน็ตเป็นงานที่ง่ายสำหรับอุปกรณ์อัจฉริยะ เช่น โทรศัพท์ Android แท็บเล็ต หรือพีซี แต่ไมโครคอนโทรลเลอร์มักต้องการการเชื่อมต่อและการประมวลผลที่ดีกว่า อย่างไรก็ตาม เราอาจถ่ายส่วนที่หนักของ
การควบคุม NODE MCU-LED (ระบบอัตโนมัติภายในบ้านอย่างง่าย): 5 ขั้นตอน
การควบคุม NODE MCU-LED (ระบบอัตโนมัติในบ้านอย่างง่าย): สวัสดีทุกคน ในคำแนะนำนี้ ให้เรามาดูวิธีควบคุมหลอดไฟ LED โดยใช้สมาร์ทโฟนของคุณ เราจะใช้ Node-MCU สำหรับโครงการนี้ โปรดดูลิงก์ด้านล่างเพื่อติดตั้ง Node MCU ไลบรารี่ (ไลบรารี ESP) ใน Arduino IDE.NODE MCU-BASICS ของคุณ{Follow Ste
การตรวจสอบอุณหภูมิและความชื้นโดยใช้ NODE MCU และ BLYNK: 5 ขั้นตอน
การตรวจสอบอุณหภูมิและความชื้นโดยใช้ NODE MCU และ BLYNK: สวัสดีทุกคนในคำแนะนำนี้ ให้เราเรียนรู้วิธีรับอุณหภูมิและความชื้นของบรรยากาศโดยใช้เซ็นเซอร์ DHT11-Temperature และ Humidity โดยใช้แอป Node MCU และ BLYNK
วิธีตั้งโปรแกรม PIC MCU ด้วยโปรแกรมเมอร์ PICkit โดยใช้เขียงหั่นขนม: 3 ขั้นตอน
วิธีการตั้งโปรแกรม PIC MCU ด้วย PICkit โปรแกรมเมอร์โดยใช้เขียงหั่นขนม: คุณไม่จำเป็นต้องใช้เครื่องมือที่มีราคาแพงและซับซ้อนในการเล่นกับไมโครคอนโทรลเลอร์ PIC (หรืออื่น ๆ ) สิ่งที่คุณต้องมีคือเขียงหั่นขนมที่คุณทดสอบวงจรและการเขียนโปรแกรมของคุณ แน่นอนว่าจำเป็นต้องมีโปรแกรมเมอร์และ IDE ในคำสั่งสอนนี้