发送端

import ustruct as struct
import utime
from machine import Pin, SoftSPI, ADC
from NRF24L01 import NRF24L01
import time
# 名称与引脚联系
# "miso": 17, "mosi": 16, "sck": 4, "csn": 2, "ce": 15
# 0xe1f0f0f0e1, 0xd2f0f0f0d2,两个地址
# 相当于两个电话号码,用于标记 nrf24l01,
# 两部手机通话只有知道对方的号码才可以互相拨打
# b 前缀表示该字符串是二进制数据,称为字节串
# 字节串的一个字符对应一个8位字节,可以表示从0-255之间的整数
# 如果要和常用字符串转化,可以这样:
# b"hello world".decode("utf-8")
pipes = (b"\xe1\xf0\xf0\xf0\xe1", b"\xd2\xf0\xf0\xf0\xd2")
def main():
# PS2
ps2_y = ADC(Pin(33)) # 设置33引脚为ADC数模转化引脚,用于转化ps2的y轴方向上的模拟值
ps2_y.atten(ADC.ATTN_11DB) # 配置测量量程为3.3V
ps2_x = ADC(Pin(32)) # 设置32引脚为ADC数模转化引脚,用于转化ps2的x轴方向上的模拟值
ps2_x.atten(ADC.ATTN_11DB) # 配置测量量程为3.3V
btn = Pin(25, Pin.IN, Pin.PULL_UP) # 配置ps2的按钮,可以配置成中断引脚,调用回调函数
# NRF24L01
csn = Pin(2, mode=Pin.OUT, value=1) # 设置csn,并拉高电平
ce = Pin(15, mode=Pin.OUT, value=0) # 设置ce,并拉低电平
spi = SoftSPI(sck=Pin(4), mosi=Pin(16), miso=Pin(17)) # 实例化类 SoftSPI
nrf = NRF24L01(spi, csn, ce, payload_size=4) # 实例化类 NRF24L01,并设置传播数据大小为4字节
nrf.open_tx_pipe(pipes[0]) # 开启nrf24l01的发送功能和要发送的地址(接收端的地址)
nrf.open_rx_pipe(1, pipes[1]) # 开启nrf24l01的数据接收功能和要接收地址(发送端的地址)
nrf.stop_listening() # 停止监听功能,本实例中不用接收另一个设备的数据
# 死循环
while True:
# 读取y轴模拟值
val_y = ps2_y.read()
# 读取x轴模拟值
val_x = ps2_x.read()
# 定义一个变量,为了检测是否有人控制ps2
# 如果有人控制ps2,则经过下面的循环后这个变量的值一定会变
# 反之就不变
move_num = -1
# 转动ps2的模拟值,判断ps2的移动方向和距离,试出来的
# 分别判断y轴和x轴两个方向
# 把move_num的值通过选择结构落在1,2,3,0这4个数字上
# 分别代表摇杆的4个方向
if val_y > 2000:
move_num = 0
elif val_y < 1600:
move_num = 1
if val_x > 2000:
move_num = 3
elif val_x < 1600:
move_num = 2
# 这里容易出错,为防止程序复位,采用try
if move_num != -1:
try:
# 10 表示经过一个while循环就发送多少个数据,比如move_num=0,就发送10个0
# 这里的数字可以调节ps2与操控设备的灵敏度(延迟),自己试一下,调成最好的结果
for i in range(10):
# 发送数据,打包发送 move_num,这里的字符串i不同与for循环的i,表示要发送的数据为4字节
# 若为"ii"则表示8字节
nrf.send(struct.pack("i", move_num))
# 控制台打印发送成功的消息
print("发送成功")
except OSError:
pass
main()
把上面的代码保存为main.py 放到esp32里

还有一个代码也一起放到esp32里,命名为NRF24L01.py
from micropytho

该代码示例展示了如何使用ESP32通过NRF24L01无线模块实现PS2手柄信号的捕获和传输。发送端读取PS2手柄的Y轴和X轴模拟值,根据值判断移动方向,并通过NRF24L01发送给接收端。接收端通过NRF24L01接收数据,解析后控制舵机转动。代码涉及ADC转换、SPI通信以及中断处理。
最低0.47元/天 解锁文章
3445





