python - RFM69 无线电收发器:Arduino 未注册 Raspberry Pi 发送的传输确认
问题描述
我正在构建一个系统,其中带有 RFM69 无线电芯片的 Arduino Uno 将数据传输到在 Python 中运行脚本的 Raspberry Pi。
我对这两个脚本都使用了 RFM69 库:
- Arduino: https ://github.com/LowPowerLab/RFM69
- Python:http ://rpi-rfm69.readthedocs.io/en/latest/api.html
Raspberry Pi 成功接收到数据包,并显示它也向发送器发送了一个确认(ACK)。但是,被发送节点没有收到这个 ACK。值得注意的是,当这是使用 2 块 Arduino 板实现时,它可以工作,所以它似乎不是硬件问题。
基于树莓派的接收器代码如下:
def receive_loop():
tick = 0
retry_window = 0.5
while True:
radio.begin_receive()
# If no packet received, wait retry_window seconds, then retry.
time_start = time.time()
while radio.has_received_packet == False:
if time.time() >= (time_start + retry_window):
return
for packet in radio.get_packets():
radio_info = packet.to_dict()
if radio_info['sender'] > 0:
tick += 1
print("Received from node: ", radio_info)
print("Receive cycle: " + str(tick))
return
with Radio(FREQ_433MHZ, my_node_id, network_id, isHighPower=False, promiscuousMode=True, auto_acknowledge=True) as radio:
receive_loop()
处理数据传输的 Arduino 代码片段如下:
bool loop_var = true;
int tock = 0;
while (loop_var == true) {
if (radio.sendWithRetry(TONODEID, RF_payload, sizeof(RF_payload)+1)) {
Serial.print("\nMessage sent.\n___\n\n");
loop_var = false;
}
else {
if (tock == 0) {
Serial.print("\nNo ACK received, retrying...\n\n");
tock++;
}
}
}
我的假设是 RFM69 库的两个版本的通信正常存在问题,但是,推断原因超出了我的理解水平。
解决方案
推荐阅读
- php - 如果没有选中选项,则隐藏选项卡
- cloudkit - CloudKit rtfd 读取
- openssl - virtuoso开源安装问题
- c# - C# System.ComponentModel.Win32Exception (0x80004005):没有足够的存储空间来处理这个命令
- javascript - 在 Chrome 中加载页面时,如何捕获所有网络请求和完整响应数据?
- java - JavaFX如何从其他阶段控制器访问控制器?
- python - python的Shebang线根本不起作用
- javascript - Sequelize - 是否有双向关联?
- c - VS2015 C 调试问题:断点当前不会被命中。没有可执行代码与此行相关联
- spring - Spring 5.1 中的测试失败