• Arduino UNO 可视化GT-24工业级无线透传


    一、前言

    无线透传市面上较为常见的是基于蓝牙、esp的多种透传模块,今天介绍的则是用NRF24L01芯片构成的电路。(nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片)

    整个模块的使用更加专业,传输的距离也更加远,工业级的水准要求,更是保证了数据传输的稳定和信息的抗干扰能力。

    二、硬件要求

    GT-24模块是一款2.4GHz,100mW,高速(最高空中速率可达到2Mbps),高稳定性,工业级的无线收发一体数传模块。模块自带高性能PCB天线,精确阻抗匹配。

    此外还内置RFX2401功放芯片,内建LNA,接收灵敏度提高10dBm,工作2.4GHz~2.5GHz的ISM频段。该模块发射功率足,频谱特性好,谐波小,频道串扰小,体积超小,全部村田原装料,工业级标准的典范。
    请添加图片描述
    OLED属于一种电流型的有机发光器件,这里作为试验显示作用。因为其显示的特殊性,对于arduino更多的是U8g2库文件的编写以及调用。
    请添加图片描述

    三、参数基础

    GT-24
    射频方案 nRF24L01P
    模块尺寸 30.3×14.5mm
    工作频段 2.4GHz ~ 2.525GHz
    生产工艺 无铅环保工艺
    接口方式 181.27mm/242.54mm
    供电电压 2.0-3.6VDC
    通信电平 0.7VCC ~3.3V
    实测距离 1000m
    发射功率 4 级可调 最大20dBm
    空中速率 250k ~ 2Mbps
    关断电流 约 30uA
    发射电流 约 90mA
    接收电流 约20mA
    天线形式 PCB 天线/ipex 座子天线
    通信接口 SPI
    发射长度 单个数据包 1~32 字节
    接收长度 单个数据包 1~32 字节
    RSSI支持 不支持
    接收灵敏度 -94dBm@250kbp
    工作温度 -40 ~ +85℃
    工作湿度 10% ~ 90%
    储存温度 -40 ~ +125℃

    oled显示屏
    大小: 0.96寸
    分辨率:12864
    宽电压:3.3-5v
    体积:27mm
    27mm*2mm
    温度范围:-30℃-70℃
    使用寿命:≥16000小时
    支持协议:iic

    四、原理剖析

    主芯片nRF24L01内置基带协议引擎 (增强型ShockBurst),设计用于超低功耗无线应用。MCU(微控制器)和 利用nRF24L01设计无线电系统只需极少的外部无源元件。nRF24L01通过串行外设接口(SPI)进行配置和操作。)通过该接口,寄存器映射是可用的。寄存器映射包含nRF24L01中的所有配置寄存器 并且在芯片的所有操作模式下都是可访问的。
    在这里插入图片描述
    模块为 nRF24L01P+PA+LNA,其驱动方式完全等同于 nRF24L01P,可以完全遵照 nRF24L01P 芯片手册进行操作。
    ①CE 引脚和LNA 使能引脚相连接,当 CE=1 时,LNA 被打开,当 CE=0 时,LNA 被关闭。 此操作个 nRF24L01 的收发模式是完全吻合的,完全不用去管LNA。
    ②CE 可以长期接高电平,但是模块写寄存器时必须首先设置为 POWER DOWN 掉电模式,建议连接 CE 到单片机 IO 口。IRQ 可不接,可采用 SPI 查询方式来获取中断状态。但是建议使用单片机外部中断。
    ③模块的 CE 引脚时序操作可采用 nRF24L01 的手册要求,高电平时间大于 10us 就行。
    在这里插入图片描述
    oled使用相关的U8g2库,选择合适的分辨率和尺寸,进行显示字符。
    请添加图片描述

    五、透传思路

    通过两块同样的模块进行收发,由开发板进行编码程序和解码程序,期间注意几个要点:
    ①发射、接收,都需要在视野开阔和尽量少干扰、甚至无干扰的环境状态下,这样信号才能传输的更稳定、完整和远。
    ②通道一致,编解码的时候,需要注意的是发射和接收地址区分开,但是所使用的通道必须一致,频段一致,才能正常收发。
    在这里插入图片描述

    六、程序概要

    下面展示本次所需要的程序代码,首先是tx,发送使用:

    #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就是对oled的分辨率进行设置
    char str1[]="youxindianzi";
    char str2[]="Send of number:";
    uint8_t convert[6]={0}; //定义所占用的字节数
    uint8_t all,one;
    
    uint32_t oled_liang(uint8_t a,uint8_t b)
    {
      uint32_t m=1;  
      while(b--)m*=a;    
      return m;          //递归函数调用
    }
    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进制数组转换为字符
    void u8g_transfer(void) {
      u8g.setFont(u8g_font_6x10);
      u8g.setFontRefHeightExtendedText();
      u8g.setDefaultForegroundColor();
      u8g.setFontPosTop();
    }                           //调用库函数指令
    void setup()
    {
     u8g_transfer();//初始化字体,屏幕参数
      u8g.firstPage();  
        do {
          u8g.drawStr(30,0,(char *)str1);    //调用行列,屏幕显示字体 
          u8g.drawStr(0,10,(char *)str2);      //调用行列,屏幕显示字体 
       } 
        while( u8g.nextPage() );       //循环空格填补
        
        Mirf.spi = &MirfHardwareSpi;  //调用spi协议
        Mirf.init();                 //初始化
        Mirf.setRADDR((byte *)"ABCDE"); //设置自己的地址(发送端地址),使用5个字符
        Mirf.payload = sizeof(one);      //返回上面的定义变量的字节数
        Mirf.channel = 90;              //设置所用信道
        Mirf.config();
    }
     
    void loop()
    {
       Mirf.setTADDR((byte *)"ABCDE");           //设置接收端地址
     one = random(255);                      //0-255的随机数
      Mirf.send((byte *)&one);                //发送指令,发送随机数value
      while(Mirf.isSending()) delay(1);         //直到发送成功,退出循环
      
       show_liang(convert,all,3);
       u8g.firstPage();                     
        do {
          u8g.drawStr(30,0,(char *)str1);        //继续调用行列,屏幕显示字体 
          u8g.drawStr(0,10,(char *)str2);         //继续调用行列,屏幕显示字体 
          u8g.drawStr(100,10,convert);           //增加显示上面定义的字节数
          } 
        while( u8g.nextPage() );
        all++;
        delay(1000);
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    然后是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};  //定义所占用的字节数
    uint8_t all,one;
    
    
    uint32_t oled_liang(uint8_t a,uint8_t b)
    {
      uint32_t m=1;  
      while(b--)m*=a;    
      return m;
    }           //递归函数调用
    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进制数组转换为字符
                               
    void u8g_prepare(void) {
      u8g.setFont(u8g_font_6x10);
      u8g.setFontRefHeightExtendedText();
      u8g.setDefaultForegroundColor();
      u8g.setFontPosTop();
    }                               //调用库函数指令
    
    void setup()
    {
      u8g_prepare();//初始化字体,屏幕参数
      u8g.firstPage();  
        do {
          u8g.drawStr(30,0,(char *)str1);      //调用行列,屏幕显示字体 
          u8g.drawStr(0,10,(char *)str2);       //调用行列,屏幕显示字体   
       } 
        while( u8g.nextPage() );      //循环空格填补
        
        Mirf.spi = &MirfHardwareSpi;
        Mirf.init();
        Mirf.setRADDR((byte *)"ABCDE"); //设置自己的地址(发送端地址),使用5个字符
        Mirf.payload = sizeof(one);         //返回上面的定义变量的字节数
        Mirf.channel = 90;              //设置所用信道
        Mirf.config();
    }
     
    void loop()
    {
       if(Mirf.dataReady()) { 
        Mirf.getData((byte *) &one);
         show_liang(convert,one,3); //当接收到信息,便从oled显示输出接收到的数据
         Serial.begin(9600);               
          Serial.println("arrive");//当接收到信息,便从串口显示arrive,表示响应
        u8g.firstPage();  
        do {
              u8g.drawStr(100,10,convert);
           } 
        while( u8g.nextPage() );
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    七、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
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    八、成果展示

    请添加图片描述
    请添加图片描述

  • 相关阅读:
    HCIA-HarmonyOS Application Developer 课程大纲
    Android 9 自动恢复出厂设置问题(auto-recovery)
    直击产业落地 | 飞桨重磅推出业界首个模型选型工具
    2022-07-26
    一文搞定IDEA中SpringBoot项目环境的热部署
    AI 人工智能学习之聚类分析及算法(1)
    【Google】给两个已序数组,写一个函数求出第K小的数
    Vhr项目技术学习知识点总结
    【软考】系统集成项目管理工程师(九)项目成本管理
    K8S的安装kubernetes-dashboard服务起来了,访问不到解决
  • 原文地址:https://blog.csdn.net/qq_42250136/article/details/127500329