Код повторно не отправляет то, что я хочу

#python #c #arduino #raspberry-pi3

#python #c #arduino #raspberry-pi3

Вопрос:

Я пытался создать проект о NRF24L01 и подключить его к arduino и raspberry pi. Затем я написал код. Он не ответил. Итак, я взял это с веб-сайта, и это сработало. Тем не менее, он отправлял сообщение один раз. Но код там был написан для непрерывной отправки. Итак, я решил вставить последовательную строку в код Arduino, чтобы выяснить, что я делал неправильно. И, как и ожидалось, последовательная строка напечатала «A» один раз. Но я поместил это в цикл! Итак, ребята, у вас есть представление о том, что я делаю неправильно?

Код arduino показан ниже:

 //These libraries are fully downloaded.
#include<SPI.h>
#include<RF24.h>

// ce, csn pins, connected properly.
RF24 radio(9, 10) ;
//Here, I set up the stuff needed for the Transciever.
void setup(void){
  radio.begin() ;
  radio.setPALevel(RF24_PA_MAX) ;
  radio.setChannel(0x76) ;
  radio.openWritingPipe(0xF0F0F0F0E1LL) ;
  radio.enableDynamicPayloads() ;
  radio.powerUp() ;
  Serial.begin(9600);

}
void loop(void){
  const char text[] = "Hello World!" ;
  Serial.println("A");
  radio.write(amp;text, sizeof(text)) ;
  delay(1000) ;
  //s
 }
  

И код RPI3 показан ниже:

 #The libraries are downloaded.
import RPi.GPIO as GPIO
from lib_nrf24 import NRF24
import time
import spidev

GPIO.setmode(GPIO.BCM)

pipes = [[0xE8, 0xE8, 0xF0, 0xF0, 0xE1], [0xF0, 0xF0, 0xF0, 0xF0, 0xE1]]

radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0, 17)

radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()

radio.openReadingPipe(1, pipes[1])
radio.printDetails()
radio.startListening()
try:
 while(1):
     # ackPL = [1]
     while not radio.available(0):
         time.sleep(1 / 100)
     receivedMessage = []
     radio.read(receivedMessage, radio.getDynamicPayloadSize())
     print("Received: {}".format(receivedMessage))

     print("Translating the receivedMessage into unicode characters")
     string = ""
     for n in receivedMessage:
         # Decode into standard unicode set
         if (n >= 32 and n <= 126):
             string  = chr(n)
     print("Out received message decodes to: {}".format(string))
except KeyboardInterrupt:
    GPIO.cleanup() 
  

Итак, вы видите какую-либо проблему в моем коде? Мне действительно нужно это решить.
Вот ссылка, по которой я их взял:
https://www.google.com.tr/url?sa=tamp;rct=jamp;q=amp;esrc=samp;source=webamp;cd=11amp;cad=rjaamp;uact=8amp;ved=2ahUKEwi-vPCDxo7hAhUKyaYKHZP9DQ8QFjAKegQIAxABamp;url=http://thezanshow.com/electronics-tutorials/raspberry-pi/tutorial-34-35amp;usg=AOvVaw26oek-_CM80ujzcc_PBk0N

И вот скриншот терминала, когда я запускаю код: изображение

Комментарии:

1. Кажется вероятным, что radio.write() не возвращает… Я бы взглянул на этот код и проверил, что в нем происходит.

2. Не могли бы вы, пожалуйста, написать, какой код я должен проверить?

3. Это было бы легко протестировать. Добавьте другой Serial.println("B"); и посмотрите, выполняется ли он после записи по радио. И после этого я бы объявил свою статическую переменную вне цикла, в Arduino недостаточно памяти, вы не хотите ее заполнять. Это также может быть проблемой с питанием, известно, что Arduino периодически зависает / выходит из строя, если энергопотребление становится чрезмерным. Радио-материал, как правило, высасывает сок как сумасшедший. На сколько ампер рассчитан ваш источник питания?

4. Он не записывает данные в порт. Теперь, что мне делать?

5. Спасибо, сэр, но когда я пытаюсь это сделать, он говорит, что я не объявил, что такое «текст».

Ответ №1:

В документации модуля RF24 говорится, что функция записи блокируется до успешного подтверждения получателем: Описание функции записи поэтому я предполагаю, что вы не отправляете никакого подтверждения обратно из своего RPI. Я рекомендую внимательно прочитать документацию и выбрать один из других методов записи. Также взгляните на документацию по Python для lib_nrf24