使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+

關於library

目前主流有https://github.com/maniacbug/RF24https://github.com/TMRh20/RF24這兩個。

其中TMRh20大大做的這個還可支援linux(Raspberry pi),支援度較廣。不過本篇文章選用maniacbug大大的library。

mega2560連接nRF24L01

以下是nRF24L01 模組的照片與pinout。

從左上開始,右下結束。

1.GND 2.VDD(3.6V以下)
3.CE 4.CSN
5.SCLK 6.MOSI
7.MISO 8.IRQ

Mega2560部份,我們不需要接IRQ,因為library沒有實做,讀者有興趣可以修改library中關於nRF24L01一個名叫config的暫存器,將mask中斷的部份歸零。

Mega2560的部份需要其上頭內建的SPI BUS,才能使用這個函式庫(TMRh20的library有提供Software SPI應用)。以下是Mega2560的SPI接腳對應。

SCK要接nRF24L01的SCLK,MOSI接MOSI,MISO接MISO,CE和CSN可自行定義腳位。

程式碼部份直接利用官往提供的example來做測試。
http://maniacbug.github.io/RF24/GettingStarted_8pde-example.html
原始碼中RF24物件建構子這行

RF24 radio(9,10);

9表示CE接腳,10表示CSN接腳。

程式運行時可以開啟Serial port monitor來觀察其運作,其中他在radio.printDetails();部份印出的細節可以多留意,尤其是收發兩端的address,在TX_ADDR那項兩邊要不同。接下來就可開心的看著她發送了。

連不上的一些解法

地址錯誤

兩邊的地址要可對到,一邊RX_ADDR要為另一邊TX_ADDR,這樣才可收到。

雜訊

有些nRF24L01模組的電源供應沒有電容濾波,可以自行用電容跨接GND和VCC兩端,建議選擇10uF到50uF的電容,另外模組的GND要和Ardunio的GND共地(從Ardunio直接拉GND是好選擇)。

傳輸速率過快

example預設為2Mbps,可自行降為1Mbps,有機會收到較佳的訊號。

comments powered by Disqus