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

news/2024/4/27 19:11:54/文章来源:https://blog.csdn.net/qq_42250136/article/details/127500329

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

    • 一、前言
    • 二、硬件要求
    • 三、参数基础
    • 四、原理剖析
    • 五、透传思路
    • 六、程序概要
    • 七、arduino使用接线
    • 八、成果展示

一、前言

无线透传市面上较为常见的是基于蓝牙、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);                //发送指令,发送随机数valuewhile(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);
}

然后是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() );}
}

七、arduino使用接线

线路连接:
RF24L01: VCC 3.3V
GND GND
CE D8
IRQ –
CSN D7
SCK D13
MOSI D11
MISO D12

  OLED显示(IIC):  VCC        3.3VGND        GNDSCL        A5SDA        A4

在这里插入图片描述

八、成果展示

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_218685.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python第七章作业

实例一: class Geese: 大雁类 def __init__(self,beak,wing,claw): print("我是大雁类!我有以下特征:") print(beak) print(wing) print(claw) def fly(self,state): print(state)**********调用方法**********beak_…

MyBatis中的reflection包(一)ObjectFactory,PropertyTokenizer, Invoker, Reflector

内容概要 reflection是MyBatis关于反射的工具包&#xff0c;是实现其它功能的基石之一。这里我不准备贴上源码然而逐行解释&#xff0c;而是从需求分析的角度来复现。 ObjectFactory 现在有这样的需求&#xff1a;给你一个Class对象&#xff0c;要求你创建它的实例&#xff…

Kong自动注册kong-spring-boot-stater

前言 kong-spring-boot-stater框架是为了解决SpringBoot项目和kong网关的自动注册&#xff0c;虽然Kong网关有提供可视化管理后台的操作界面&#xff0c;但是在多服务、多环境的时候在管理后台挨个配置每个服务节点是比较麻烦的&#xff0c;所以这也是kong-spring-boot-stater…

图形写稿基础,含teaser figure的特殊排版方法

写在前面&#xff1a;这是第一次投稿后针对论文写作部分的总结。需要注意的是&#xff1a;老师提了意见&#xff0c;一定要快速改&#xff0c;否则会很恼人。 1. 图片展示 构图要美观&#xff0c;保证横平竖直&#xff1b;图片中文字保证和文章正文中文字一样大小&#xff1b;…

VUE |“ 登录页面”的权限以及接口问题

目录 一、功能需求 二、前提准备 三、具体实现 一、功能需求 今天写到项目的登录页面&#xff0c;我这边是没有后台数据接口的&#xff0c;所以我们用了Mock模拟了一个假的数据&#xff0c;那么我们应该怎么实现呢&#xff1f;我们先来看一下功能需要。 当我们退出登录…

系分 - 系统可靠性分析与设计

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 系分 - 系统可靠性分析与设计 考点摘要 可靠性相关基本概念&#xff08;★&#xff09;系统可靠性分析&#xff08;★★&#xff09;软件可靠性设计&#xff08;★★&#xff09; 系统故障类型 系统故障是指由…

09代码

实例1 def division():print(\n==========分苹果了===========\n)apple=int(input(请输入苹果的个数))children=int(input(请输入来了多少个小朋友))result=apple//childrenremain=apple-result*childrenif remain>0:print(apple,个苹果,平均分给,children,个小朋友,每人分…

网络爬虫及openyxl模块

网络爬虫及openyxl模块 一、第三方模块简介 1.第三方模块的用处python之所以在这么多的编程语言中脱颖而出的优点是有众多的第三方库函数,可以更高效率的实现开发2.第三方模块的使用 1.第三方模块必须下载才能使用格式:pip install 模块名 -i 源地址清华大学 :https://pypi.…

【cuda编程】CUDA的运行方式以及grid、block结构关系

文章目录1. CUDA基础知识1.1 程序基本运行顺序1.2 grid与block1.3 dim类型定义2. CUDA的第一个程序3. CUDA线程的组织结构——grid与block关系1. CUDA基础知识 1.1 程序基本运行顺序 一般来说&#xff0c;一个cpugpu的程序运行如下所示&#xff1a; 1.2 grid与block 从GPU至…

网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理

JavaEE传送门JavaEE 网络原理——No.2 传输层_TCP的连接管理 网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制 目录延迟应答捎带应答面向字节流粘包问题TCP 中的异常处理(连接异常)TCP 和 UDP 的应用场景延迟应答 一种提高传输效率的机制, 又是基于流量控制, 来引…

调度线程池ScheduledThreadPoolExecutor源码解析

实现机制分析 我们先思考下&#xff0c;如果让大家去实现ScheduledThreadPoolExecutor可以周期性执行任务的功能&#xff0c;需要考虑哪些方面呢&#xff1f; ScheduledThreadPoolExecutor的整体实现思路是什么呢&#xff1f; 答&#xff1a; 我们是不是可以继承线程池类&am…

docker快速安装redis

一.背景 开发环境中&#xff0c;经常需要redis本地环境&#xff0c;方便开发。准备在本机的虚拟机里面准备一个redis环境。 二.版本信息 操作系统&#xff1a;Windows 10 家庭版 Oracle VM VirtualBox&#xff1a;版本 6.0.10 r132072 (Qt5.6.2) Ubuntu:16.04.6-desktop-a…

STM32CubeMX学习笔记(44)——USB接口使用(HID按键)

一、USB简介 USB&#xff08;Universal Serial BUS&#xff09;通用串行总线&#xff0c;是一个外部总线标准&#xff0c;用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、…

淘宝十年技术思考与总结,让人惊叹的进化脱变,最终确认版已发布

看了淘宝在将近10年时间里技术的革新&#xff0c;我对技术与业务有了更近一步的认识。 任何技术都是从小做起&#xff0c;一步步做起来的。如果你让04年的淘宝去做一个能承受10亿次访问的网站&#xff0c;马云那时候肯定会伤透脑筋&#xff0c;即使做半年都做不出来。但现在&a…

Java实现邮件发送

这里我们以QQ邮箱为例。 一、导入依赖:<dependencies><!-- https://mvnrepository.com/artifact/javax.activation/activation --><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><versio…

联邦学习:联邦异构知识图谱划分

在联邦场景下,C个知识图谱位于不同的客户端上。知识图谱拥的实体集合之间可能会存在重叠,而其关系集合和元组集合之间则不会重叠。我们联系一下现实场景看这是合理的,比如在不同客户端对应不同银行的情况下,由于不同银行都有着自己的业务流程,所以关系集合不重叠。本文我们…

如何给PDF文件添加水印?PDF免费添加水印教程来了

有时候&#xff0c;为了不让别人盗用我们PDF文件里面的内容或图片&#xff0c;或者是出于宣传产品的目的&#xff0c;我们经常会需要给自己的PDF文件添加各种类型的水印&#xff0c;那你们知道如何给PDF文件添加水印吗&#xff1f;下面我们就来看看如何给PDF文件添加水印&#…

瞄准五金行业采购痛难点,智慧采购管理系统实现业务流程数据化,提高采购效率

五金行业采购一直是传统企业采购的软肋和头痛环节&#xff0c;无论从人力成本&#xff0c;物料成本&#xff0c;财务监管成本&#xff0c;物流成本等都存在一个整合服务需求&#xff0c;同时&#xff0c;传统五金行业采购难的问题&#xff0c;也一直制约着行业发展&#xff0c;…

股指期货高手陈(股指期货第一人)

​ 什么是股指期货&#xff0c;怎么玩&#xff1f;请教高手&#xff01; 股指期货&#xff08;Stock Index Futures&#xff0c;即股票价格指数期货&#xff0c;也可称为股价指数期货&#xff09;&#xff0c;是指以股价指数为标的资产的标准化期货合约。双方约定在未来某个特…

RK3399应用开发 | 移植libdrm到rk3399开发板(2.4.113)

一、下载源码 下载地址:https://dri.freedesktop.org/libdrm/。 这里我下载最新的2.4.113版本: wget https://dri.freedesktop.org/libdrm/libdrm-2.4.113.tar.xz解压: xz -d libdrm-2.4.113.tar.xz tar -xf libdrm-2.4.113.tar二、编译环境安装 1. 更新python ubuntu安…