gpt4 book ai didi

python - RFM69 radio 收发器 : Arduino is not registering acknowledgement for transmission sent by Raspberry Pi

转载 作者:行者123 更新时间:2023-11-30 04:58:18 26 4
gpt4 key购买 nike

我正在构建一个系统,其中带有 RFM69 radio 芯片的 Arduino Uno 将数据传输到运行 Python 脚本的 Raspberry Pi。

我正在为这两个脚本使用 RFM69 库:

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 库正确通信存在问题,但是,推断原因超出了我的理解水平。

最佳答案

问题源于硬件兼容性。使用的 RFM69 HCW radio 模块需要消耗至少 40mA 的功率,而 RaspberryPi 3b+ 上的单个 GPIO 引脚只能安全提供 16mA。

这意味着 radio 芯片可以传输,但只能以非常低的功率传输,这意味着范围小于 1 厘米。

要解决此问题,可以为您的 Raspberry Pi 制作一顶带有连接到 5V 引脚的稳压器的帽子。这增加了 radio 芯片可以吸收的功率,同时保持安全的电压供应水平。使用 LM1117 3.3V 稳压器的上述帽子的电路图如下所示:

LM1117 3.3V Voltage Regulator

关于python - RFM69 radio 收发器 : Arduino is not registering acknowledgement for transmission sent by Raspberry Pi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51727482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com