- ข้อกำหนด:
- การเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC สำหรับการสื่อสารบลูทู ธ :
- แผนภาพวงจรและการตั้งค่าฮาร์ดแวร์:
- การควบคุม LED โดยใช้ Bluetooth Mobile Application:
ในบทช่วยสอนนี้เราจะได้เรียนรู้วิธีสร้างโปรเจ็กต์ PIC แบบไร้สายโดยการเชื่อมต่อโมดูลบลูทู ธ (HC-06) ในบทช่วยสอนก่อนหน้านี้เราได้เรียนรู้วิธีใช้โมดูล USART ในไมโครคอนโทรลเลอร์ PIC และสร้างการสื่อสารระหว่าง PIC และคอมพิวเตอร์แล้ว หากคุณเป็นมือใหม่อย่างแท้จริงลองดูที่นี่เพื่อดูบทช่วยสอน PIC ทั้งหมดของเราซึ่งเราได้เริ่มต้นตั้งแต่เริ่มต้นเช่นการเรียนรู้ MPLAB และ XC8 การเชื่อมต่อ LED, LCD, การใช้ Timers, ADC, PWM เป็นต้น
ที่นี่เราได้ใช้เป็นที่นิยม โมดูลบลูทู ธ HC-06 การใช้โมดูลนี้เราสามารถรับและส่งข้อมูลแบบไร้สายจาก PIC MCU ของเราไปยังแอปพลิเคชันมือถือหรือคอมพิวเตอร์ การสื่อสารระหว่าง PIC และ HC-06 สร้างขึ้นโดยใช้โมดูล USART ที่มีอยู่ในไมโครคอนโทรลเลอร์ PIC คุณยังสามารถใช้ HC-05 เราทำงานในโหมด 8 บิตแบบอะซิงโครนัสเดียวกันอีกครั้ง แต่คราวนี้เราจะปรับเปลี่ยนโค้ดของเราเล็กน้อยเพื่อให้ทำงานกับโมดูลบลูทู ธ ดังนั้นการเรียนรู้การสอน UART ล่วงหน้าจึงเป็นข้อได้เปรียบเพิ่มเติมสำหรับโครงการนี้
ในการกวดวิชานี้เราจะสลับ LED โดยการส่งหรือปิดคำสั่งจากโทรศัพท์สมาร์ทของเรา เราจะใช้แอพพลิเคชั่น Android ที่เรียกว่าBluetooth Terminalซึ่งสามารถส่งและรับข้อมูลผ่านบลูทู ธ หากเราส่งถ่าน '1' จากแอปไฟจะเปิดขึ้นในบอร์ด PIC และเราจะได้รับการตอบรับกลับไปที่โทรศัพท์ว่าไฟถูกเปิดแล้ว ในทำนองเดียวกันเราสามารถส่ง '0' จากโทรศัพท์เพื่อปิดได้ ด้วยวิธีนี้เราสามารถควบคุมไฟ LED บนบอร์ด PIC ของเราคล้ายกับการสอน UART แต่ตอนนี้เป็นแบบไร้สาย โปรแกรมที่สมบูรณ์และวิดีโอโดยละเอียดจะได้รับในตอนท้ายของบทช่วยสอนนี้
แผนภาพบล็อกพื้นฐานสำหรับการตั้งค่าแสดงอยู่ด้านล่าง
ข้อกำหนด:
ฮาร์ดแวร์:
- PIC16F877A Perf Board
- โมดูลบลูทู ธ HC-05 หรือ HC-06
- คอมพิวเตอร์ (สำหรับการเขียนโปรแกรม)
- โทรศัพท์มือถือ
- โปรแกรมเมอร์ PICkit 3
ซอฟต์แวร์:
- MPLABX
- ช่องเสียบบลูทู ธ (แอปพลิเคชันมือถือ)
โมดูลบลูทู ธ HC-06:
บลูทู ธ สามารถทำงานในสองโหมดต่อไปนี้:
- โหมดคำสั่ง
- โหมดการทำงาน
ใน โหมดคำสั่ง เราจะสามารถกำหนดค่าคุณสมบัติบลูทู ธ เช่นชื่อสัญญาณบลูทู ธ รหัสผ่านอัตราการรับส่งข้อมูลการทำงานเป็นต้น โหมดการทำงาน คือ โหมด ที่เราจะสามารถส่งและรับข้อมูลระหว่างไมโครคอนโทรลเลอร์ PIC และโมดูลบลูทู ธ ดังนั้นในบทช่วยสอนนี้เราจะเล่นกับโหมดการทำงานเท่านั้น โหมดคำสั่งจะเหลือไว้ที่การตั้งค่าเริ่มต้น ชื่ออุปกรณ์จะเป็น HC-05 (ฉันใช้ HC-06) และรหัสผ่านจะเป็น 0000 หรือ 1234 และที่สำคัญที่สุดคืออัตราการส่งข้อมูลเริ่มต้นสำหรับโมดูลบลูทู ธ ทั้งหมดคือ 9600
โมดูลทำงานบนแหล่งจ่าย 5V และพินสัญญาณทำงานที่ 3.3V ดังนั้นจึงมีตัวควบคุม 3.3V อยู่ในโมดูล ดังนั้นเราไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้ จากหกพินจะใช้เพียงสี่พินในโหมดการทำงาน ตารางการเชื่อมต่อพินแสดงไว้ด้านล่าง
ส. เลขที่ |
ปักพินในบอร์ด HC-05 / HC-06 |
ชื่อพินใน MCU |
หมายเลขพินใน PIC |
1 |
Vcc |
Vdd |
31 เซนต์ขา |
2 |
Vcc |
Gnd |
32 ndพิน |
3 |
Tx |
RC6 / Tx / CK |
25 THขา |
4 |
Rx |
RC7 / Rx / DT |
26 THขา |
5 |
สถานะ |
NC |
NC |
6 |
EN (เปิดใช้งาน) |
NC |
NC |
ตรวจสอบโครงการอื่น ๆ ของเราเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลบลูทู ธ HC-05 กับไมโครคอนโทรลเลอร์อื่น ๆ:
- รถของเล่นที่ควบคุมด้วยบลูทู ธ โดยใช้ Arduino
- ระบบโฮมอัตโนมัติที่ควบคุมด้วยบลูทู ธ โดยใช้ 8051
- ไฟที่ควบคุมด้วยเสียงโดยใช้ Raspberry Pi
- สมาร์ทโฟนควบคุมวิทยุ FM โดยใช้ Arduino และการประมวลผล
- รถหุ่นยนต์ควบคุมโทรศัพท์มือถือโดยใช้ G-Sensor และ Arduino
การเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC สำหรับการสื่อสารบลูทู ธ:
เช่นเดียวกับโมดูลทั้งหมด (ADC, Timer, PWM) เราควรเริ่มต้นโมดูลบลูทู ธ ของเราด้วย เริ่มต้นจะคล้ายกับการเริ่มต้น UART แต่เราจำเป็นต้องทำการเปลี่ยนแปลงบางอย่างสำหรับบลูทู ธ ในการทำงานไม่มีที่ติกับเราPIC16F877A MCU มากำหนดบิตการกำหนดค่าและเริ่มต้นด้วยฟังก์ชันการเริ่มต้นบลูทู ธ
การเริ่มต้นบลูทู ธ:
โมดูลบลูทู ธ เกือบทั้งหมดในตลาดทำงานที่อัตราการรับส่งข้อมูลที่ 9600 เป็นสิ่งสำคัญมากที่จะต้องกำหนดอัตรารับส่งข้อมูลให้เหมือนกับโมดูลบลูทู ธ ที่ใช้อัตราการส่งข้อมูลที่นี่เราตั้งค่า SPBRG = 129 เนื่องจากเราทำงานที่ความถี่สัญญาณนาฬิกา 20Mhz ด้วย 9600 เป็นอัตรารับส่งข้อมูล ดังนั้นการเริ่มต้นข้างต้นจะใช้ได้เฉพาะกับโมดูลบลูทู ธ ที่ทำงานที่อัตรารับส่งข้อมูล 9600 นอกจากนี้ยังจำเป็นต้องเปิดใช้งาน BRGH บิตอัตรารับส่งข้อมูลความเร็วสูง ซึ่งจะช่วยในการกำหนดอัตราการส่งข้อมูลที่แม่นยำ
// ****** เริ่มต้นบลูทู ธ โดยใช้ USART ******** // โมฆะ Initialize_Bluetooth () {// ตั้งค่าพินของ RX และ TX // TRISC6 = 1; TRISC7 = 1; // กำหนดอัตราการรับส่งข้อมูลโดยใช้ตารางค้นหาในแผ่นข้อมูล (pg114) // BRGH = 1; // ใช้อัตราการส่งข้อมูลความเร็วสูงกับบลูทู ธ เสมอมิฉะนั้นจะไม่ทำงาน SPBRG = 129; // เปิด Asyc พอร์ตอนุกรม // SYNC = 0; SPEN = 1; // ตั้งค่าการรับและส่ง 8 บิต RX9 = 0; TX9 = 0; // เปิดใช้งานการส่งและการรับ // TXEN = 1; CREN = 1; // เปิดใช้งาน global และ ph ขัดจังหวะ // GIE = 1; PEIE = 1; // เปิดใช้งานการขัดจังหวะสำหรับ Tx และ Rx.// RCIE = 1; TXIE = 1; } // ___________ BT เริ่มต้น _____________ //
หากคุณมีโมดูล BT ที่ทำงานในอัตราการรับส่งข้อมูลที่แตกต่างกันคุณสามารถดูตารางค้นหาด้านล่างเพื่อดูค่าของคุณสำหรับ SPBRG
กำลังโหลดข้อมูลลงในบลูทู ธ:
เมื่อเริ่มต้นฟังก์ชันแล้วเรามีสามฟังก์ชันในโปรแกรมของเราเพื่อส่งและรับข้อมูลจากบลูทู ธ ซึ่งแตกต่างจาก UART เรามีบางสิ่งที่ต้องพิจารณาก่อนที่เราจะสามารถส่งหรือรับข้อมูลได้ โมดูลบลูทู ธ มีบัฟเฟอร์การส่งและรับอยู่ภายในข้อมูลที่ส่งไปจะถูกเก็บไว้ในบัฟเฟอร์ Tx ข้อมูลนี้จะไม่ถูกถ่ายทอด (ส่งทางอากาศ) เว้นแต่จะมีการส่งคืนแคร่ไปยังโมดูล ดังนั้นในการส่งข้อมูลเราต้องโหลดบัฟเฟอร์ Rx ของ BT แล้วออกอากาศโดยใช้การส่งคืนรถ
การทำงานข้างต้นสามารถทำได้อย่างง่ายดายโดยใช้ฟังก์ชันต่อไปนี้ ฟังก์ชั่นด้านล่างนี้สามารถนำมาใช้เมื่อเราต้องโหลดเพียงหนึ่งตัวเข้าไปในบัฟเฟอร์ Rx เราโหลดข้อมูลลงในทะเบียน TXREG และรอจนกว่าจะมีการประมวลผลโดยตรวจสอบแฟล็ก TXIF และ TRMT โดยใช้ while ลูป
// ฟังก์ชั่นโหลด Bluetooth Rx บัฟเฟอร์ที่มีหนึ่ง char.// โมฆะ BT_load_char (ถ่านไบต์) {TXREG = ไบต์; ในขณะที่ (! TXIF); ในขณะที่ (! TRMT); } // สิ้นสุดฟังก์ชัน //
ฟังก์ชันด้านล่างนี้ใช้เพื่อโหลดสตริงลงในบัฟเฟอร์ Rxของโมดูลบลูทู ธ สตริงจะถูกแบ่งออกเป็นตัวอักษรและตัวละครแต่ละตัวจะถูกส่งไป BT_load_char () ฟังก์ชั่น
// ฟังก์ชั่นโหลด Bluetooth Rx บัฟเฟอร์ด้วยสตริง // โมฆะ BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // สิ้นสุดฟังก์ชัน /
การแพร่ภาพข้อมูลผ่านบลูทู ธ:
จนถึงตอนนี้เราเพิ่งส่งข้อมูลไปยังบัฟเฟอร์ Rx ของโมดูล HC-05 ตอนนี้เราต้องสั่งให้ออกอากาศข้อมูลทางอากาศโดยใช้ฟังก์ชันนี้
// ฟังก์ชั่นในการถ่ายทอดข้อมูลจาก RX บัฟเฟอร์ // โมฆะ broadcast_BT () {TXREG = 13; __delay_ms (500); } // สิ้นสุดฟังก์ชัน //
ในฟังก์ชันนี้เราส่งค่า 13 ไปยังทะเบียน TXREG ค่า 13 นี้ไม่ใช่อะไรนอกจากทศนิยมที่เทียบเท่าสำหรับการขนส่ง (อ้างอิงแผนภูมิ ASCII) จากนั้นความล่าช้าเล็กน้อยจะถูกสร้างขึ้นเพื่อให้ผู้ออกอากาศเริ่มต้น
การอ่านข้อมูลจากบลูทู ธ:
คล้ายกับ UART ฟังก์ชันด้านล่างนี้ใช้เพื่ออ่านข้อมูลจากบลูทู ธ
// ฟังก์ชั่นรับถ่านจาก Rx.buffer ของ BT // ถ่าน BT_get_char (โมฆะ) {if (OERR) // ตรวจสอบ over run error {CREN = 0; CREN = 1; // รีเซ็ต CREN} if (RCIF == 1) // หากผู้ใช้ส่ง char ส่งคืน char (ค่า ASCII) {while (! RCIF); กลับ RCREG; } else // หากผู้ใช้ไม่ได้ส่งข้อความกลับ 0 กลับ 0; } // สิ้นสุดฟังก์ชัน /
หากผู้ใช้ส่งข้อมูลฟังก์ชันนี้จะส่งคืนข้อมูลนั้นซึ่งสามารถบันทึกในตัวแปรและประมวลผลได้ หากผู้ใช้ไม่ได้ส่งอะไรฟังก์ชันจะคืนค่าเป็นศูนย์
ฟังก์ชั่นหลัก:
เราได้ใช้ฟังก์ชันที่อธิบายข้างต้นทั้งหมดภายในหรือฟังก์ชันหลัก เราส่งข้อความแนะนำตัวจากนั้นรอให้ผู้ใช้ส่งค่าบางอย่างตามที่เราสลับไฟ LED สีแดงที่เชื่อมต่อกับพิน RB3 บนบอร์ด Perf ของเรา
โมฆะ main (โมฆะ) {// การประกาศตัวแปรขอบเขต // int get_value; // สิ้นสุดการประกาศตัวแปร // // I / O Declarations // TRISB3 = 0; // สิ้นสุดการประกาศ I / O // Initialize_Bluetooth (); // ให้เตรียมบลูทู ธ ของเราให้พร้อมสำหรับการดำเนินการ // แสดงข้อความแนะนำบางครั้งเมื่อเปิดเครื่อง // BT_load_string ("Bluetooth Initialized and Ready"); Broadcast_BT (); BT_load_string ("กด 1 เพื่อเปิด LED"); Broadcast_BT (); BT_load_string ("กด 0 เพื่อปิด LED"); Broadcast_BT (); // สิ้นสุดข้อความ // while (1) // The infinite lop {get_value = BT_get_char (); // อ่านถ่าน ได้รับทาง BT // หากเราได้รับ '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED ปิดอยู่"); Broadcast_BT (); } // ถ้าเราได้รับ '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED เปิดอยู่"); Broadcast_BT ();}}}
ตรวจสอบโปรแกรมฉบับเต็มในส่วนรหัสด้านล่าง
แผนภาพวงจรและการตั้งค่าฮาร์ดแวร์:
การเชื่อมต่อวงจรสำหรับโครงการนี้เป็นเรื่องง่ายมากเราก็ต้องใช้พลังงานขึ้นโมดูลบลูทู ธ และเชื่อมต่อไปยัง Tx 26 THขาของ PIC และ Rx กับ 25 THขาของ PIC ดังแสดงในแผนภาพวงจรด้านล่าง:
ตอนนี้ให้เราดำเนินการต่อไปยังฮาร์ดแวร์ เมื่อทำการเชื่อมต่อเสร็จแล้วควรมีลักษณะดังนี้
การควบคุม LED โดยใช้ Bluetooth Mobile Application:
ตอนนี้ให้เราเตรียมแอปพลิเคชัน Android ของเราให้พร้อม ดาวน์โหลดแอปพลิเคชันชื่อBluetooth Terminalจาก App store หรือใช้ลิงค์นี้ เมื่อดาวน์โหลดและติดตั้งแอปพลิเคชันแล้วให้เปิดบอร์ด PIC perf ที่เราใช้ตั้งแต่เริ่มต้น ไฟ LED ขนาดเล็กบนโมดูลบลูทู ธ ของคุณควรกะพริบเพื่อแสดงว่าเปิดอยู่และกำลังมองหาโทรศัพท์เพื่อสร้างการเชื่อมต่อ
ตอนนี้เข้าสู่การตั้งค่าบลูทู ธ ของโทรศัพท์ของคุณและค้นหาอุปกรณ์บลูทู ธ ใหม่คุณควรจะเห็นชื่อ HC-05 หรือ HC-06 ตามโมดูลของคุณ ฉันใช้ HC-06 ด้วยเหตุนี้โทรศัพท์ของฉันจึงแสดงหน้าจอต่อไปนี้ จากนั้นลองจับคู่กับมันและจะถามรหัสผ่าน ป้อนรหัสผ่านเป็น 1234 (สำหรับบางรหัสอาจเป็น 0000) แล้วคลิกตกลงตามที่แสดงด้านล่าง
หลังจากการจับคู่สำเร็จให้เปิดแอปพลิเคชัน Bluetooth Terminal ที่เราเพิ่งติดตั้ง เข้าสู่ตัวเลือกการตั้งค่าและเลือก “ เชื่อมต่ออุปกรณ์ - ปลอดภัย” ดังที่แสดงด้านล่าง นี่จะเป็นการเปิดกล่องป๊อปอัพที่อุปกรณ์ที่จับคู่ทั้งหมดของเราจะแสดงตามที่แสดงด้านล่าง เลือกโมดูล HC-05 หรือ HC-06
เมื่อสร้างการเชื่อมต่อแล้วไฟบนโมดูลบลูทู ธ ที่กะพริบจนถึงตอนนี้จะต้องคงที่เพื่อแสดงว่าเชื่อมต่อกับมือถือของคุณสำเร็จแล้ว และเราควรได้รับข้อความแนะนำตัวจากโปรแกรมของเราดังที่แสดงด้านล่าง
ตอนนี้กด '1' เพื่อเปิดไฟ LED และกด '0' เพื่อปิดไฟ การทำงานที่สมบูรณ์จะแสดงในวิดีโอหน้าจอมือถือของคุณจะมีลักษณะดังนี้ที่แสดงด้านล่าง
ดังนั้นเราจึงได้เรียนรู้วิธีการเชื่อมต่อโมดูลบลูทู ธ กับไมโครคอนโทรลเลอร์ PIC ของเราตอนนี้ด้วยความช่วยเหลือนี้เราสามารถทดลองใช้โครงการไร้สายได้ มีโปรเจ็กต์มากมายที่ใช้บลูทู ธ คุณสามารถทดลองใช้หรือคิดไอเดียของคุณเองและแบ่งปันในส่วนความคิดเห็น ตรวจสอบโครงการก่อนหน้าของเราด้วยแอพเทอร์มินัลบลูทู ธ และ HC-05 เช่นสมาร์ทโฟนควบคุมระบบอัตโนมัติภายในบ้านโดยใช้ Arduino และสมาร์ทโฟนล็อครหัสดิจิทัลที่ควบคุมโดยใช้ Arduino
หวังว่าบทช่วยสอนนี้จะช่วยคุณได้! หากคุณติดขัดบางอย่างกรุณาใช้ส่วนความคิดเห็น