- โมดูล RF nRF24L01
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม Raspberry Pi เพื่อส่งข้อความโดยใช้ nRF24l01
- การเขียนโปรแกรม Arduino UNO เพื่อรับข้อความโดยใช้ nRF24l01
นักออกแบบใช้ระบบสื่อสารไร้สายจำนวนมากเช่น Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 โมดูล Wi-Fi, โมดูล RF 433MHz, Lora, nRF เป็นต้นและการเลือกสื่อขึ้นอยู่กับประเภทของแอปพลิเคชันที่ใช้ในหมู่ ทุกคนสื่อไร้สายที่เป็นที่นิยมสำหรับการสื่อสารเครือข่ายท้องถิ่นเป็นnRF24L01โมดูลเหล่านี้ทำงานบน 2.4GHz (แถบ ISM) โดยมีอัตราการส่งข้อมูลตั้งแต่ 250Kbps ถึง 2Mbps ซึ่งถูกกฎหมายในหลายประเทศและสามารถใช้ในอุตสาหกรรมและการแพทย์ นอกจากนี้ยังอ้างว่าด้วยเสาอากาศที่เหมาะสมโมดูลเหล่านี้สามารถส่งและรับสัญญาณได้ถึงระยะ 100 เมตรระหว่างกัน ก่อนหน้านี้เราใช้ nRF24L01 กับ Arduino เพื่อควบคุมเซอร์โวมอเตอร์และสร้างห้องแชท
ในที่นี้เราจะใช้โมดูล RF Transceiver nRF24L01 - 2.4GHz กับ Arduino UNO และ Raspberry Piเพื่อสร้างการสื่อสารไร้สายระหว่างกัน Raspberry pi จะทำหน้าที่เป็นตัวส่งและ Arduino Uno จะฟัง Raspberry Pi และพิมพ์ข้อความที่ Raspberry Pi ส่งโดยใช้ nRF24L01 บนจอ LCD 16x2 nRF24L01 ยังมีความสามารถ BLE ในตัวและยังสามารถสื่อสารแบบไร้สายโดยใช้ BLE
บทช่วยสอนแบ่งออกเป็นสองส่วน ส่วนแรกจะรวมถึงการเชื่อมต่อของ nRF24L01 กับ Arduino จะทำหน้าที่เป็นตัวรับและส่วนที่สองจะรวมถึงการเชื่อมต่อของ nRF24L01 กับราสเบอร์รี่ Pi เพื่อทำหน้าที่เป็นเครื่องส่งสัญญาณ โค้ดที่สมบูรณ์สำหรับทั้งสองส่วนพร้อมวิดีโอการทำงานจะแนบมาในตอนท้ายของบทช่วยสอนนี้
โมดูล RF nRF24L01
โมดูล nRF24L01 มี โมดูลรับส่งสัญญาณความหมายแต่ละโมดูลทั้งสามารถส่งและรับข้อมูล แต่เนื่องจากพวกเขามี half-duplex พวกเขาทั้งสองสามารถส่งหรือรับข้อมูลได้ตลอดเวลา โมดูลนี้มี IC nRF24L01 ทั่วไปจากสารกึ่งตัวนำนอร์ดิกซึ่งมีหน้าที่ในการส่งและรับข้อมูล IC สื่อสารโดยใช้โปรโตคอล SPI และด้วยเหตุนี้จึงสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์ใด ๆ ได้อย่างง่ายดาย Arduino ง่ายขึ้นมากเนื่องจากมีไลบรารีพร้อมใช้งาน พินเอาต์ ของโมดูล nRF24L01 มาตรฐาน แสดงไว้ด้านล่าง
โมดูลมีแรงดันไฟฟ้าตั้งแต่1.9V ถึง 3.6V (โดยทั่วไปคือ 3.3V) และใช้กระแสไฟฟ้าน้อยกว่าเพียง 12mA ในระหว่างการทำงานปกติซึ่งทำให้แบตเตอรี่มีประสิทธิภาพและด้วยเหตุนี้จึงสามารถทำงานบนเซลล์เหรียญได้ แม้ว่าแรงดันไฟฟ้าที่ใช้งานคือ 3.3V หมุดส่วนใหญ่จะทนต่อ 5V ได้และด้วยเหตุนี้จึงสามารถเชื่อมต่อโดยตรงกับไมโครคอนโทรลเลอร์ 5V เช่น Arduino ข้อดีอีกอย่างของการใช้โมดูลเหล่านี้คือแต่ละโมดูลมี 6 Pipelines ความหมายแต่ละโมดูลสามารถสื่อสารกับโมดูลอื่น ๆ อีก 6 โมดูลเพื่อส่งหรือรับข้อมูล สิ่งนี้ทำให้โมดูลเหมาะสำหรับการสร้างเครือข่ายแบบดาวหรือแบบตาข่ายในแอปพลิเคชัน IoT นอกจากนี้ยังมีช่วงที่อยู่ที่กว้างถึง 125 ID ที่ไม่ซ้ำกันดังนั้นในพื้นที่ปิดเราสามารถใช้ 125 โมดูลเหล่านี้ได้โดยไม่รบกวนซึ่งกันและกัน
แผนภูมิวงจรรวม
nRF24L01 กับ Arduino:
แผนภาพวงจรสำหรับเชื่อมต่อ nRF24L01 กับ Arduino นั้นง่ายและไม่มีส่วนประกอบมากนัก nRF24l01 จะถูกเชื่อมต่อกันด้วยอินเตอร์เฟซ SPIและจอแอลซีดี 16x2 มีการเชื่อมต่อกับโปรโตคอล I2C ซึ่งใช้เพียงสองสาย
nRF24L01 พร้อม Raspberry Pi:
แผนภาพวงจรสำหรับเชื่อมต่อ nRF24L01 กับ Raspberry Pi นั้นง่ายมากและมีเพียงอินเทอร์เฟซ SPI เท่านั้นที่ใช้เพื่อเชื่อมต่อ Raspberry Pi และ nRF24l01
การเขียนโปรแกรม Raspberry Pi เพื่อส่งข้อความโดยใช้ nRF24l01
การเขียนโปรแกรม Raspberry Pi จะทำโดยใช้ Python3 คุณยังสามารถใช้ C / C ++ เป็น Arduino แต่มีไลบรารีสำหรับ nRF24l01 ใน python อยู่แล้วซึ่งสามารถดาวน์โหลดได้จากหน้า github โปรดทราบว่าโปรแกรม python และไลบรารีควรอยู่ในโฟลเดอร์เดียวกันมิฉะนั้นโปรแกรม python จะไม่สามารถค้นหาไลบรารีได้ หลังจากดาวน์โหลดไลบรารีแล้วให้แยกและสร้างโฟลเดอร์ที่จะจัดเก็บโปรแกรมและไฟล์ไลบรารีทั้งหมด เมื่อติดตั้งไลบรารีเสร็จแล้วให้เริ่มเขียนโปรแกรม โปรแกรมเริ่มต้นด้วยการรวมไลบรารีซึ่งจะใช้ในรหัสเช่นไลบรารี GPIOนำเข้าเพื่อเข้าถึง Raspberry Pi GPIOและ เวลานำเข้า สำหรับการเข้าถึงฟังก์ชันที่เกี่ยวข้องกับเวลา หากคุณยังใหม่กับ Raspberry Pi ให้ถอยกลับไปเริ่มต้นกับ Raspberry pi
นำเข้า RPi.GPIO เป็น spidev นำเข้าเวลา นำเข้า GPIO จาก lib_nrf24 นำเข้า NRF24
ตั้งค่าโหมด GPIO ใน " Broadcom SOC channel" ซึ่งหมายความว่าคุณกำลังอ้างถึงพินโดยหมายเลข "Broadcom SOC channel" ซึ่งเป็นตัวเลขหลัง "GPIO" (เช่น GPIO01, GPIO02 …) นี่ไม่ใช่หมายเลขคณะกรรมการ
GPIO.setmode (GPIO.BCM)
ต่อไปเราจะตั้งค่าที่อยู่ในท่อที่อยู่นี้มีความสำคัญในการสื่อสารกับเครื่องรับ Arduino ที่อยู่จะอยู่ในรหัสฐานสิบหก
ท่อ =,]
เริ่มวิทยุโดยใช้ GPIO08 เป็น CE และ GPIO25 เป็นพิน CSN
วิทยุเริ่มต้น (0, 25)
กำหนดขนาดเพย์โหลดเป็น 32 บิตที่อยู่ช่องเป็น 76 อัตราข้อมูล 1 mbps และระดับพลังงานต่ำสุด
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
เปิดท่อเพื่อเริ่มเขียนข้อมูลและพิมพ์รายละเอียดพื้นฐานของ nRF24l01
radio.openWritingPipe (ท่อ) radio.printDetails ()
เตรียมข้อความในรูปแบบสตริง ข้อความนี้จะส่งไปยัง Arduino UNO
sendMessage = list ("Hi..Arduino UNO") ในขณะที่ len (sendMessage) <32: sendMessage.append (0)
เริ่มเขียนไปยังวิทยุและเขียนสตริงทั้งหมดต่อไปจนกว่าวิทยุจะพร้อมใช้งาน นอกจากนี้ให้จดบันทึกเวลาและพิมพ์คำสั่งแก้ไขข้อบกพร่องของการส่งข้อความ
ในขณะที่ True: start = time.time () radio.write (sendMessage) พิมพ์ ("ส่งข้อความ: {}". format (sendMessage)) ส่ง radio.startListening ()
หากสตริงเสร็จสมบูรณ์และไปป์ถูกปิดให้พิมพ์ข้อความดีบักว่าหมดเวลา
ในขณะที่ไม่ radio.available (0): time.sleep (1/100) ถ้า time.time () - เริ่มต้น> 2: การพิมพ์ ("หมดเวลา.") ข้อผิดพลาด # พิมพ์ถ้าวิทยุถอดออกหรือไม่ทำงานอีกต่อไป ทำลาย
หยุดฟังวิทยุและปิดการสื่อสารและเริ่มการสื่อสารใหม่หลังจาก 3 วินาทีเพื่อส่งข้อความอื่น
radio.stopListening () # close radio time.sleep (3) # ให้ดีเลย์ 3 วินาที
โปรแกรม Raspberry นั้นเข้าใจง่ายหากคุณรู้พื้นฐานของ python โปรแกรม Python ที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอน
การเรียกใช้โปรแกรม Python ใน Raspberry Pi:
การใช้งานโปรแกรมทำได้ง่ายมากหลังจากทำตามขั้นตอนด้านล่าง:
- บันทึกไฟล์ Python Program และ Library ไว้ในโฟลเดอร์เดียวกัน
- ชื่อไฟล์โปรแกรมของฉันสำหรับ Sender คือ nrfsend.py และทุกไฟล์ก็อยู่ในโฟลเดอร์เดียวกัน
- ไปที่ Command Terminal ของ Raspberry Pi และค้นหาไฟล์โปรแกรม python โดยใช้คำสั่ง“ cd”
- จากนั้นเปิดโฟลเดอร์และเขียนคำสั่ง“ sudo python3 your_program.py ” แล้วกด Enter คุณจะสามารถดูรายละเอียดพื้นฐานของ nRf24 และวิทยุจะเริ่มส่งข้อความทุก ๆ 3 วินาที การดีบักข้อความจะแสดงขึ้นหลังจากการส่งเสร็จสิ้นด้วยอักขระทั้งหมดที่ส่ง
ตอนนี้เราจะเห็นโปรแกรมเดียวกันกับตัวรับสัญญาณใน Arduino UNO
การเขียนโปรแกรม Arduino UNO เพื่อรับข้อความโดยใช้ nRF24l01
การเขียนโปรแกรม Arduino UNO คล้ายกับการเขียนโปรแกรม Raspberry Pi เราจะทำตามวิธีการที่คล้ายกัน แต่ใช้ภาษาและขั้นตอนการเขียนโปรแกรมที่แตกต่างกัน ขั้นตอนจะรวมถึงส่วนการอ่านของ nRF24l01 ไลบรารีสำหรับ nRF24l01 สำหรับ Arduino สามารถดาวน์โหลดได้จากหน้า github เริ่มต้นด้วยการรวมไลบรารีที่จำเป็น เราใช้ LCD 16x2 โดยใช้ I2C Shield ดังนั้นให้รวมไลบรารี Wire.h และ nRF24l01 เชื่อมต่อกับ SPI ดังนั้นให้รวมไลบรารี SPI
# รวม
รวมไลบรารี RF24 และ LCD สำหรับการเข้าถึงฟังก์ชัน RF24 และ LCD
# รวม
ที่อยู่ LCD สำหรับ I2C คือ 27 และเป็น LCD 16x2 ดังนั้นให้เขียนสิ่งนี้ลงในฟังก์ชัน
LiquidCrystal_I2C จอแอลซีดี (0x27, 16, 2);
RF24 เชื่อมต่อกับหมุด SPI มาตรฐานพร้อมกับ CE ในพิน 9 และ CSN ในพิน 10
วิทยุ RF24 (9, 10);
สตาร์ทวิทยุตั้งระดับพลังงานและตั้งช่องเป็น 76 และตั้งค่าที่อยู่ท่อเช่นเดียวกับ Raspberry Pi และเปิดท่อเพื่ออ่าน
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t ไปป์ = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, ท่อ);
เริ่มต้นการสื่อสาร I2C และเริ่มต้นการแสดงผล LCD
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("พร้อมรับ");
เริ่มฟังวิทยุสำหรับข้อความขาเข้าและตั้งค่าความยาวข้อความเป็น 32 ไบต์
radio.startListening (); ถ่าน receivedMessage = {0}
หากติดวิทยุแล้วให้เริ่มอ่านข้อความและบันทึก พิมพ์ข้อความไปยังจอภาพแบบอนุกรมและพิมพ์ไปยังจอแสดงผลจนกว่าข้อความถัดไปจะมาถึง หยุดวิทยุเพื่อฟังและลองใหม่หลังจากช่วงเวลาหนึ่ง นี่คือ 10 ไมโครวินาที
ถ้า (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("การปิดวิทยุ"); radio.stopListening (); สตริง stringMessage (receivedMessage); lcd.clear (); ล่าช้า (1,000); lcd.print (stringMessage); }
อัปโหลดรหัสที่สมบูรณ์ที่ให้ไว้ในตอนท้ายไปที่ Arduino UNO และรอให้ได้รับข้อความ
เสร็จสิ้นบทช่วยสอนที่สมบูรณ์เกี่ยวกับการส่งข้อความโดยใช้ Raspberry Pi & nRf24l01 และรับโดยใช้ Arduino UNO & nRF24l01 ข้อความจะถูกพิมพ์ไปยังจอ LCD 16x2 ที่อยู่ไปป์มีความสำคัญมากทั้งใน Arduino UNO และ Raspberry Pi หากคุณประสบปัญหาใด ๆ ในขณะที่ทำโครงการนี้โปรดแสดงความคิดเห็นด้านล่างหรือไปที่ฟอรัมสำหรับการอภิปรายโดยละเอียด
ตรวจสอบวิดีโอสาธิตด้านล่างด้วย