Raspberry Pi3 + Arduino Nano + NRF24L01

Тема в разделе "Raspberry Pi", создана пользователем Atikin, 28 май 2019.

  1. Atikin

    Atikin Нуб

    Всем добрый день! У меня возникла проблема: не получается соединить ардуину и малинку. Я новичок, и как понял из множества интернет статей, первым делом надо проверить работает ли SPI. Я его включил и проверил функцией dev:
    Код (Python):
    pi@raspberrypi:~ $ ls /dev/
     
    Все видно на скриншоте "Безымянный"
    Таким способом у нас SPI включен или нет? Потом я пытался проверить другим способом: малина отсылает "Привет" и прекращает отсылать, когда сообщение пришло в ардуину. Но НИЧЕГО НЕ ПОЛУЧАЕТСЯ!! Помогите пожалуйста.
    Вот код малины(Отсылает "Привет")
    Код (Python):
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BCM)
    from lib_nrf24 import NRF24
    import time
    import spidev



    pipes = [[0xe7, 0xe7, 0xe7, 0xe7, 0xe7], [0xc2, 0xc2, 0xc2, 0xc2, 0xc2]]

    radio = NRF24(GPIO, spidev.SpiDev())
    radio.begin(0, 17)
    time.sleep(1)
    radio.setRetries(15,15)
    radio.setPayloadSize(32)
    radio.setChannel(0x60)

    radio.setDataRate(NRF24.BR_2MBPS)
    radio.setPALevel(NRF24.PA_MIN)
    radio.setAutoAck(True)
    radio.enableDynamicPayloads()
    radio.enableAckPayload()


    radio.openWritingPipe(pipes[1])
    radio.openReadingPipe(1, pipes[0])
    radio.printDetails()


    c=1
    while True:
        buf = ['H', 'E', 'L', 'O',c]
        c = (c + 1) & 255
        # send a packet to receiver
        radio.write(buf)
        print ("Sent:"),
        print (buf)
        # did it return with a payload?
        if radio.isAckPayloadAvailable():
            pl_buffer=[]
            radio.read(pl_buffer, radio.getDynamicPayloadSize())
            print ("Received back:"),
            print (pl_buffer)
        else:
            print ("Received: Ack only, no payload")
        time.sleep(10)
     
    Вот код ардуины(принимает сигнал)
    Код (C++):
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    #include "printf.h"

    //
    // Hardware configuration
    //

    // Set up nRF24L01 radio on SPI bus plus pins 7 & 8

    RF24 radio(9,10);

    //
    // Channel info
    //

    const uint8_t num_channels = 126;
    uint8_t values[num_channels];

    //
    // Setup
    //

    void setup(void)
    {
      //
      // Print preamble
      //

      Serial.begin(115200);
      printf_begin();
      Serial.println(F("\n\rRF24/examples/scanner/"));

      //
      // Setup and configure rf radio
      //

      radio.begin();
      radio.setAutoAck(false);

      // Get into standby mode
      radio.startListening();
      radio.stopListening();

      radio.printDetails();

      // Print out header, high then low digit
      int i = 0;
      while ( i < num_channels )
      {
        printf("%x",i>>4);
        ++i;
      }
      Serial.println();
      i = 0;
      while ( i < num_channels )
      {
        printf("%x",i&0xf);
        ++i;
      }
      Serial.println();
    }

    //
    // Loop
    //

    const int num_reps = 100;

    void loop(void)
    {
      // Clear measurement values
      memset(values,0,sizeof(values));

      // Scan all channels num_reps times
      int rep_counter = num_reps;
      while (rep_counter--)
      {
        int i = num_channels;
        while (i--)
        {
          // Select this channel
          radio.setChannel(i);

          // Listen for a little
          radio.startListening();
          delayMicroseconds(128);
          radio.stopListening();

          // Did we get a carrier?
          if ( radio.testCarrier() ){
            ++values[i];
          }
        }
      }

      // Print out channel measurements, clamped to a single hex digit
      int i = 0;
      while ( i < num_channels )
      {
        printf("%x",min(0xf,values[i]));
        ++i;
      }
      Serial.println();
    }

    // vim:ai:cin:sts=2 sw=2 ft=cpp
     

    Вложения:

  2. Atikin

    Atikin Нуб

    Чтобы с этим не мучиться я использовал дополнительную плату питания для этого модуля. У нее входное напряжение 5В, а выходное строго 3.3В[​IMG]
     
  3. parovoZZ

    parovoZZ Гуру

    Допмодуль для чего? Не надо его. У меня Малина прекрасно общается с любым МК через nRF24. Код для неё выкладывал в теме, ссылка на которую приведена выше. Смотреть с конца.
     
  4. Atikin

    Atikin Нуб

    Где? Я не нашел
     
  5. Atikin

    Atikin Нуб

    Помогите пожалуйста. Покажите рабочий пример