Не удается заставить Raspberry Pi 4 и Arduino успешно общаться с помощью беспроводных модулей nRF24L01 + - PullRequest
0 голосов
/ 27 марта 2020

У меня возникли некоторые проблемы с тем, чтобы мои Raspberry Pi 4 и Arduino uno успешно общались с помощью беспроводных модулей nRF24L01 +.

Я пробовал несколько различных учебных пособий по YouTube, и уже в третий раз я возвращаюсь к этому проекту, но меня ждет неудача.

Для arduino я использую библиотеку TMRH20 RF24

Самым последним учебным пособием является one .

Код, используемый в учебнике для Arduino, является базовым c кодом только для передачи:

#include<RF24.h>

//ce,csn pins
RF24 radio(9,10);

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_MAX);
  radio.setChannel(0x76);
  radio.openWritingPipe(0xF0F0F0F0E1LL);
  radio.enableDynamicPayloads();
  radio.powerUp();

}

void loop() {
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  Serial.println("sent.. ");
  delay(1000);
}

Код, используемый в сценарии python на Raspberry Pi 4, - получение только:

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()

while True:
 while not radio.available(0):
  time.sleep(1/100)

 receivedMessage = []
 radio.read(receivedMessage, radio.getDynamicPayloadSize())
 print("Received: {}".format(receivedMessage))
 print("Translating our received message into unicode characters...")
 string = ""

 for n in receivedMessage:
  if (n >= 32 and n <= 126):
   string += chr(n)
 print("Our received message decodes to: {}".format(string))

Обе программы компилируются.

Подробности, выводимые терминалом RPi (из-за radio.printDetails ()):

/home/pi/nrf24/lib_nrf24.py:377: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  self.GPIO.setup(self.ce_pin, self.GPIO.OUT)
STATUS   = 0x03 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=1 TX_FULL=1
RX_ADDR_P0-1     = 0xfdf9f9f9f9 0xfefefefef8
RX_ADDR_P2-5     = 0xf0 0xf1 0xf1 0xf1
TX_ADDR          = 0xfdf9f9f9f9
RX_PW_P0-6       = 0x00 0x08 0x00 0x00 0x00 0x00
EN_AA            = 0x0f
EN_RXADDR        = 0x00
RF_CH            = 0x1d
RF_SETUP         = 0x00
CONFIG           = 0x03
DYNPD/FEATURE    = 0x03 0x01
Data Rate        = 1MBPS
Model            = nRF24L01
CRC Length       = Disabled
PA Power         = PA_MIN

Я вполне уверен, что связь между RPi и радио происходит, как когда Я отключаю радио и снова запускаю сценарий python, шестнадцатеричные значения, показанные выше всех go до 0.

Я заметил, что в учебнике YouTube RX_P_NO отличается, как и значение TX_FULL. Кроме того, адреса RX и TX не совпадают с адресами, введенными в сценарий python.

У меня был рад ios, который раньше общался с помощью двух Arduino Uno. Я думаю, что моя неопытность с python мешает мне здесь.

Любая помощь приветствуется.

Редактировать: В учебнике скрипт python выводит строку каждую секунду. Мой скрипт выводит пустые строки несколько сотен раз в секунду. Возможно, в коде python произошла ошибка, так как он должен ждать в течение времени l oop, пока данные не станут доступны. Если нет, то это может быть проблема с функцией radio.available ().

1 Ответ

1 голос
/ 03 апреля 2020

Предупреждение, которое вы получаете, вероятно, связано с вашими проблемами.

Вывод printDetails () указывает на проблему связи между RPi и радио. Например, RF_CH показывает как 0x1d, когда оно должно быть 0x76. Это указывает на проблему с проводкой или конфигурацией.

Мое лучшее предложение - использовать оболочку TMRh20 RF24 Python для RPi. Таким образом, вы используете активно поддерживаемую библиотеку, кодовая база точно такая же от Arduino до RPi, и она включает в себя известные рабочие примеры. См. http://tmrh20.github.io/RF24/Python.html

Примечание. Сначала необходимо собрать библиотеку C ++, так как это оболочка Python для библиотеки C ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...