【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚
NRF24L01
是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。


NRF24L01无线模块接口说明
(1) VCC 脚接电压范围为 1.9V~3.6V 之间,不能在这个区间之外,超过 3.6V 将会烧毁模块。推荐电压 3.3V 左右。
(2) 除电源 VCC 和接地端,其余脚都可以直接和普通的 5V 单片机 IO口直接相连,无需电平转换。当然对 3V 左右的单片机更加适用了。
(3) 硬件上面没有 SPI 的单片机也可以控制本模块,用普通单片机 IO口模拟 SPI 不需要单片机真正的串口介入,只需要普通的单片机 IO 口就可以了,当然用串口也可以了。
NRF24L01无线模块的特点
低应用成本:NRF24L01集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等,NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
便于开发:由于链路层完全集成在模块上,非常便于开发。自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制自动存储未收到应答信号的数据包自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程载波检测—固定频率检测内置硬件CRC检错和点对多点通信地址控制数据包传输错误计数器及载波检测功能可用于跳频设置可同时设置六路接收通道地址,可有选择性的打开接收通道标准插针Dip2.54MM间距接口,便于嵌入式应用。
实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚
接线示意图
Arduino实验开源代码
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚 1、安装“Mirf”库(下载链接 https://github.com/aaronds/arduino-nrf24l01) 安装“rf24”库(下载链接 https://github.com/nRF24/RF24) 2、项目测试 :NRF24L01最简单测试之Client 示例代码 3、模块接线 Arduino uno --- nRF24L01 3.3V --- VCC:模块供电引脚 GND --- GND:模块接地引脚 D7 --- CSN:接收端选择引脚 D8 --- CE:发射/接受状态选择引脚 D11 --- MOSI :控制端输出,接收端输入引脚 D13 --- SCK:时钟信号 D12 --- MISO:控制端输入,接收端输出引脚 *IRQ引脚在本例中不需要接 */ #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> void setup(){ Serial.begin(9600); /* * Setup pins / SPI. */ /* To change CE / CSN Pins: * * Mirf.csnPin = 9; * Mirf.cePin = 7; */ /* Mirf.cePin = 7; Mirf.csnPin = 8; */ Mirf.spi = &MirfHardwareSpi; Mirf.init(); /* * Configure reciving address. */ Mirf.setRADDR(( byte *) "clie1" ); /* * Set the payload length to sizeof(unsigned long) the * return type of millis(). * * NB: payload on client and server must be the same. */ Mirf.payload = sizeof (unsigned long ); /* * Write channel and payload config then power up reciver. */ /* * To change channel: * * Mirf.channel = 10; * * NB: Make sure channel is legal in your area. */ Mirf.config(); Serial.println( "Beginning ... " ); } void loop(){ unsigned long time = millis(); Mirf.setTADDR(( byte *) "serv1" ); Mirf.send(( byte *)&time); while (Mirf.isSending()){ } Serial.println( "Finished sending" ); delay(10); while (!Mirf.dataReady()){ //Serial.println("Waiting"); if ( ( millis() - time ) > 1000 ) { Serial.println( "Timeout on response from server!" ); return ; } } Mirf.getData(( byte *) &time); Serial.print( "Ping: " ); Serial.println((millis() - time)); delay(1000); } |
实验串口返回情况
Arduino实验开源代码之二
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚 1、安装“Mirf”库(下载链接 https://github.com/aaronds/arduino-nrf24l01) 安装“rf24”库(下载链接 https://github.com/nRF24/RF24) 2、项目测试 :NRF24L01最简单测试之Server示例代码 3、模块接线 Arduino uno --- nRF24L01 3.3V --- VCC:模块供电引脚 GND --- GND:模块接地引脚 D7 --- CSN:接收端选择引脚 D8 --- CE:发射/接受状态选择引脚 D11 --- MOSI :控制端输出,接收端输入引脚 D13 --- SCK:时钟信号 D12 --- MISO:控制端输入,接收端输出引脚 *IRQ引脚在本例中不需要接 */ #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> void setup(){ Serial.begin(9600); /* * Set the SPI Driver. */ Mirf.spi = &MirfHardwareSpi; /* * Setup pins / SPI. */ Mirf.init(); /* * Configure reciving address. */ Mirf.setRADDR(( byte *) "serv1" ); /* * Set the payload length to sizeof(unsigned long) the * return type of millis(). * * NB: payload on client and server must be the same. */ Mirf.payload = sizeof (unsigned long ); /* * Write channel and payload config then power up reciver. */ Mirf.config(); Serial.println( "Listening..." ); } void loop(){ /* * A buffer to store the data. */ byte data[Mirf.payload]; /* * If a packet has been recived. * * isSending also restores listening mode when it * transitions from true to false. */ if (!Mirf.isSending() && Mirf.dataReady()){ Serial.println( "Got packet" ); /* * Get load the packet into the buffer. */ Mirf.getData(data); /* * Set the send address. */ Mirf.setTADDR(( byte *) "clie1" ); /* * Send the data back to the client. */ Mirf.send(data); /* * Wait untill sending has finished * * NB: isSending returns the chip to receving after returning true. */ Serial.println( "Reply sent." ); } } |
实验串口返回情况
实验场景图
实验开源仿真编程(Linkboy V4.62)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2020-06-17 【雕爷学编程】Arduino动手做(66)---SR501热释电红外模块