一、前言
無線透?jìng)魇忻嫔陷^為常見的是基于藍(lán)牙、esp的多種透?jìng)髂K,今天介紹的則是用NRF24L01芯片構(gòu)成的電路。(nRF24L01是由NORDIC生產(chǎn)的工作在2.4GHz~2.5GHz的ISM 頻段的單片無線收發(fā)器芯片)
整個(gè)模塊的使用更加專業(yè),傳輸?shù)木嚯x也更加遠(yuǎn),工業(yè)級(jí)的水準(zhǔn)要求,更是保證了數(shù)據(jù)傳輸?shù)姆€(wěn)定和信息的抗干擾能力。
二、硬件要求
GT-24模塊是一款2.4GHz,100mW,高速(最高空中速率可達(dá)到2Mbps),高穩(wěn)定性,工業(yè)級(jí)的無線收發(fā)一體數(shù)傳模塊。模塊自帶高性能PCB天線,精確阻抗匹配。
此外還內(nèi)置RFX2401功放芯片,內(nèi)建LNA,接收靈敏度提高10dBm,工作2.4GHz~2.5GHz的ISM頻段。該模塊發(fā)射功率足,頻譜特性好,諧波小,頻道串?dāng)_小,體積超小,全部村田原裝料,工業(yè)級(jí)標(biāo)準(zhǔn)的典范。
OLED屬于一種電流型的有機(jī)發(fā)光器件,這里作為試驗(yàn)顯示作用。因?yàn)槠滹@示的特殊性,對(duì)于arduino更多的是U8g2庫文件的編寫以及調(diào)用。
三、參數(shù)基礎(chǔ)
GT-24
射頻方案 nRF24L01P
模塊尺寸 30.3×14.5mm
工作頻段 2.4GHz ~ 2.525GHz
生產(chǎn)工藝 無鉛環(huán)保工藝
接口方式 181.27mm/242.54mm
供電電壓 2.0-3.6VDC
通信電平 0.7VCC 3.3V32 字節(jié)
實(shí)測(cè)距離 1000m
發(fā)射功率 4 級(jí)可調(diào) 最大20dBm
空中速率 250k ~ 2Mbps
關(guān)斷電流 約 30uA
發(fā)射電流 約 90mA
接收電流 約20mA
天線形式 PCB 天線/ipex 座子天線
通信接口 SPI
發(fā)射長(zhǎng)度 單個(gè)數(shù)據(jù)包 1
接收長(zhǎng)度 單個(gè)數(shù)據(jù)包 1~32 字節(jié)
RSSI支持 不支持
接收靈敏度 -94dBm@250kbp
工作溫度 -40 ~ +85℃
工作濕度 10% ~ 90%
儲(chǔ)存溫度 -40 ~ +125℃
oled顯示屏
大?。?0.96寸
分辨率:12864
寬電壓:3.3-5v
體積:27mm27mm*2mm
溫度范圍:-30℃-70℃
使用壽命:≥16000小時(shí)
支持協(xié)議:iic
四、原理剖析
主芯片nRF24L01內(nèi)置基帶協(xié)議引擎 (增強(qiáng)型ShockBurst),設(shè)計(jì)用于超低功耗無線應(yīng)用。MCU(微控制器)和 利用nRF24L01設(shè)計(jì)無線電系統(tǒng)只需極少的外部無源元件。nRF24L01通過串行外設(shè)接口(SPI)進(jìn)行配置和操作。)通過該接口,寄存器映射是可用的。寄存器映射包含nRF24L01中的所有配置寄存器 并且在芯片的所有操作模式下都是可訪問的。
模塊為 nRF24L01P+PA+LNA,其驅(qū)動(dòng)方式完全等同于 nRF24L01P,可以完全遵照 nRF24L01P 芯片手冊(cè)進(jìn)行操作。
①CE 引腳和LNA 使能引腳相連接,當(dāng) CE=1 時(shí),LNA 被打開,當(dāng) CE=0 時(shí),LNA 被關(guān)閉。 此操作個(gè) nRF24L01 的收發(fā)模式是完全吻合的,完全不用去管LNA。
②CE 可以長(zhǎng)期接高電平,但是模塊寫寄存器時(shí)必須首先設(shè)置為 POWER DOWN 掉電模式,建議連接 CE 到單片機(jī) IO 口。IRQ 可不接,可采用 SPI 查詢方式來獲取中斷狀態(tài)。但是建議使用單片機(jī)外部中斷。
③模塊的 CE 引腳時(shí)序操作可采用 nRF24L01 的手冊(cè)要求,高電平時(shí)間大于 10us 就行。
oled使用相關(guān)的U8g2庫,選擇合適的分辨率和尺寸,進(jìn)行顯示字符。
五、透?jìng)魉悸?/h2>
通過兩塊同樣的模塊進(jìn)行收發(fā),由開發(fā)板進(jìn)行編碼程序和解碼程序,期間注意幾個(gè)要點(diǎn):
①發(fā)射、接收,都需要在視野開闊和盡量少干擾、甚至無干擾的環(huán)境狀態(tài)下,這樣信號(hào)才能傳輸?shù)母€(wěn)定、完整和遠(yuǎn)。
②通道一致,編解碼的時(shí)候,需要注意的是發(fā)射和接收地址區(qū)分開,但是所使用的通道必須一致,頻段一致,才能正常收發(fā)。
六、程序概要
下面展示本次所需要的程序代碼,首先是tx,發(fā)送使用:
#include < U8glib.h >
#include < SPI.h >
#include < Mirf.h >
#include < nRF24L01.h >
#include < MirfHardwareSpiDriver.h >
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);//引用庫文件,128?64就是對(duì)oled的分辨率進(jìn)行設(shè)置
char str1[]="youxindianzi";
char str2[]="Send of number:";
uint8_t convert[6]={0}; //定義所占用的字節(jié)數(shù)
uint8_t all,one;
uint32_t oled_liang(uint8_t a,uint8_t b)
{
uint32_t m=1;
while(b--)m*=a;
return m; //遞歸函數(shù)調(diào)用
}
void show_liang(uint8_t* Tx_str,uint8_t lon,uint8_t rw)
{
uint8_t c,type;
uint8_t EN=0;
for(c=0;c< rw;c++)
{
type=(lon/oled_liang(10,rw-c-1))%10;
*Tx_str = type+0x30;
Tx_str++;
}
} //把16進(jìn)制數(shù)組轉(zhuǎn)換為字符
void u8g_transfer(void) {
u8g.setFont(u8g_font_6x10);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
} //調(diào)用庫函數(shù)指令
void setup()
{
u8g_transfer();//初始化字體,屏幕參數(shù)
u8g.firstPage();
do {
u8g.drawStr(30,0,(char *)str1); //調(diào)用行列,屏幕顯示字體
u8g.drawStr(0,10,(char *)str2); //調(diào)用行列,屏幕顯示字體
}
while( u8g.nextPage() ); //循環(huán)空格填補(bǔ)
Mirf.spi = &MirfHardwareSpi; //調(diào)用spi協(xié)議
Mirf.init(); //初始化
Mirf.setRADDR((byte *)"ABCDE"); //設(shè)置自己的地址(發(fā)送端地址),使用5個(gè)字符
Mirf.payload = sizeof(one); //返回上面的定義變量的字節(jié)數(shù)
Mirf.channel = 90; //設(shè)置所用信道
Mirf.config();
}
void loop()
{
Mirf.setTADDR((byte *)"ABCDE"); //設(shè)置接收端地址
one = random(255); //0-255的隨機(jī)數(shù)
Mirf.send((byte *)&one); //發(fā)送指令,發(fā)送隨機(jī)數(shù)value
while(Mirf.isSending()) delay(1); //直到發(fā)送成功,退出循環(huán)
show_liang(convert,all,3);
u8g.firstPage();
do {
u8g.drawStr(30,0,(char *)str1); //繼續(xù)調(diào)用行列,屏幕顯示字體
u8g.drawStr(0,10,(char *)str2); //繼續(xù)調(diào)用行列,屏幕顯示字體
u8g.drawStr(100,10,convert); //增加顯示上面定義的字節(jié)數(shù)
}
while( u8g.nextPage() );
all++;
delay(1000);
}
然后是rx,接收使用:
#include < U8glib.h >
#include < SPI.h >
#include < Mirf.h >
#include < nRF24L01.h >
#include < MirfHardwareSpiDriver.h >
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
char str1[]="youxindianzi";
char str2[]="accepting of data:";
uint8_t convert[6]={0}; //定義所占用的字節(jié)數(shù)
uint8_t all,one;
uint32_t oled_liang(uint8_t a,uint8_t b)
{
uint32_t m=1;
while(b--)m*=a;
return m;
} //遞歸函數(shù)調(diào)用
void show_liang(uint8_t* Tx_str,uint8_t lon,uint8_t rw)
{
uint8_t c,type;
uint8_t EN=0;
for(c=0;c< rw;c++)
{
type=(lon/oled_liang(10,rw-c-1))%10;
*Tx_str = type+0x30;
Tx_str++;
}
} //把16進(jìn)制數(shù)組轉(zhuǎn)換為字符
void u8g_prepare(void) {
u8g.setFont(u8g_font_6x10);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
} //調(diào)用庫函數(shù)指令
void setup()
{
u8g_prepare();//初始化字體,屏幕參數(shù)
u8g.firstPage();
do {
u8g.drawStr(30,0,(char *)str1); //調(diào)用行列,屏幕顯示字體
u8g.drawStr(0,10,(char *)str2); //調(diào)用行列,屏幕顯示字體
}
while( u8g.nextPage() ); //循環(huán)空格填補(bǔ)
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"ABCDE"); //設(shè)置自己的地址(發(fā)送端地址),使用5個(gè)字符
Mirf.payload = sizeof(one); //返回上面的定義變量的字節(jié)數(shù)
Mirf.channel = 90; //設(shè)置所用信道
Mirf.config();
}
void loop()
{
if(Mirf.dataReady()) {
Mirf.getData((byte *) &one);
show_liang(convert,one,3); //當(dāng)接收到信息,便從oled顯示輸出接收到的數(shù)據(jù)
Serial.begin(9600);
Serial.println("arrive");//當(dāng)接收到信息,便從串口顯示arrive,表示響應(yīng)
u8g.firstPage();
do {
u8g.drawStr(100,10,convert);
}
while( u8g.nextPage() );
}
}
七、arduino使用接線
線路連接:
RF24L01: VCC 3.3V
GND GND
CE D8
IRQ --
CSN D7
SCK D13
MOSI D11
MISO D12
OLED顯示(IIC): VCC 3.3V
GND GND
SCL A5
SDA A4

八、成果展示


審核編輯 黃宇
-
可視化
+關(guān)注
關(guān)注
1文章
1344瀏覽量
22712 -
Arduino
+關(guān)注
關(guān)注
190文章
6525瀏覽量
196591 -
無線透?jìng)?/span>
+關(guān)注
關(guān)注
0文章
9瀏覽量
2064
發(fā)布評(píng)論請(qǐng)先 登錄
工業(yè)數(shù)字孿生:圖撲可視化技術(shù)架構(gòu)與行業(yè)應(yīng)用解析
工業(yè)物聯(lián)網(wǎng)可視化平臺(tái)是什么?有什么功能?
工業(yè)可視化平臺(tái)是什么
光伏電站可視化的實(shí)現(xiàn)
如何使用協(xié)議分析儀進(jìn)行數(shù)據(jù)分析與可視化
工業(yè)設(shè)備可視化管理系統(tǒng)是什么
工業(yè)設(shè)備數(shù)據(jù)集中監(jiān)控可視化管理平臺(tái)是什么
VirtualLab Fusion應(yīng)用:3D系統(tǒng)可視化
可視化組態(tài)物聯(lián)網(wǎng)平臺(tái)是什么
可視化組態(tài)數(shù)據(jù)管理平臺(tái)是什么
工業(yè)數(shù)據(jù)采集形成可視化數(shù)據(jù)看板解決方案
工業(yè)可視化監(jiān)控平臺(tái)可以接入哪些設(shè)備數(shù)據(jù)
Arduino UNO 可視化GT-24工業(yè)級(jí)無線透?jìng)?/h1>
評(píng)論