Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Raspberry Pi
  3. Помогите подключить nRF24l01+

Помогите подключить nRF24l01+

Запланировано Прикреплена Закрыта Перенесена Raspberry Pi
17 Сообщения 1 Posters 359 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано pi
    #4

    В /dev вижу два устройства:

    spidev0.0
    spidev0.1
    

    Пытаюсь выполнить эту часть:

    git clone github.com/stanleyseow/RF24.git
    cd RF24
    cd librf24-rpi/librf24
    make
    sudo make install
    
    
    pi@MediaServer:~ $ sudo git clone https://github.com/stanleyseow/RF24.git
    Cloning into 'RF24'...
    remote: Counting objects: 2777, done.
    remote: Total 2777 (delta 0), reused 0 (delta 0), pack-reused 2777
    Receiving objects: 100% (2777/2777), 1.16 MiB | 626.00 KiB/s, done.
    Resolving deltas: 100% (1757/1757), done.
    Checking connectivity... done.
    pi@MediaServer:~ $ cd RF24
    pi@MediaServer:~/RF24 $ cd librf24-rpi/librf24
    -bash: cd: librf24-rpi/librf24: Нет такого файла или каталога
    pi@MediaServer:~/RF24 $ ls
    Doxyfile            FAQ           printf.h       RF24.cpp  tests
    doxygen-custom.css  keywords.txt  README.md      RF24.h    wikidoc.xslt
    examples            nRF24L01.h    RF24_config.h  RPi
    pi@MediaServer:~/RF24 $ cd RPi
    pi@MediaServer:~/RF24/RPi $ ls
    readme.md  RF24
    pi@MediaServer:~/RF24/RPi $ cd RF24
    pi@MediaServer:~/RF24/RPi/RF24 $ ls
    bcm2835.c  examples  nRF24L01.h  RF24_config.h  RF24.h
    bcm2835.h  Makefile  readme.md   RF24.cpp
    pi@MediaServer:~/RF24/RPi/RF24 $ sudo make
    g++ -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -c RF24.cpp
    gcc -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -c bcm2835.c
    g++ -shared -Wl,-soname,librf24-bcm.so.1 -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -o librf24-bcm.so.1.0 RF24.o bcm2835.o
    pi@MediaServer:~/RF24/RPi/RF24 $
    

    В общем, структура хранения поменялась, но насколько понимаю, библиотеку я скомпиллировал.

    Создаю файл, поменяв путь до библиотеки:

    #include <cstdlib>
    #include <iostream>
    #include "/home/pi/RF24/RPi/RF24/RF24.h"
    #include <fstream>
    using namespace std;
    
    // spi device, spi speed, ce gpio pin
    RF24 radio("/dev/spidev0.0",80000000,25);
    
    void setup(void)
    {
    // init radio for reading
    radio.begin();
    radio.enableDynamicPayloads();
    radio.setAutoAck(1);
    radio.setRetries(15,15);
    radio.setDataRate(RF24_1MBPS);
    radio.setPALevel(RF24_PA_MAX);
    radio.setChannel(76);
    radio.setCRCLength(RF24_CRC_16);
    radio.openReadingPipe(1,0xF0F0F0F0E1LL);
    radio.startListening();
    }
    
    void loop(void)
    {
    char receivePayload[64];
    while (radio.available())
    {
    uint8_t len = radio.getDynamicPayloadSize();
    radio.read(receivePayload, len);
    
    // Костыль для создания промежуточного файла.
    ofstream out("/dev/nrf24");
    out << receivePayload << "\n";
    out.close ();
    //cout<<"\n Data="<<receivePayload;
    
    delay(200);
    }
    }
    
    int main(int argc, char** argv)
    {
    cout << "Driver initialized, please check values of /dev/nrf24" << endl;
    setup();
    while(1)
    loop();
    
    return 0;
    }
    
    

    Компиллирую и получаю:

    pi@MediaServer:~/MyProg $ sudo g++ -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -L../librf24/  -lrf24 arcon.c -o rpi
    In file included from /home/pi/RF24/RPi/RF24/RF24.h:23:0,
                     from arcon.c:3:
    /usr/include/c++/4.9/bits/fstream.tcc: In member function ‘virtual std::basic_filebuf&lt;_CharT, _Traits&gt;::int_type std::basic_filebuf&lt;_CharT, _Traits&gt;::underflow()’:
    /home/pi/RF24/RPi/RF24/RF24_config.h:33:18: error: expected unqualified-id before ‘(’ token
     #define min(a,b) (a&lt;b?a:b)
                      ^
    /usr/include/c++/4.9/bits/fstream.tcc: In member function ‘virtual std::streamsize std::basic_filebuf&lt;_CharT, _Traits&gt;::xsputn(const _CharT*, std::streamsize)’:
    /home/pi/RF24/RPi/RF24/RF24_config.h:33:18: error: expected unqualified-id before ‘(’ token
     #define min(a,b) (a&lt;b?a:b)
                      ^
    arcon.c: At global scope:
    arcon.c:8:40: error: invalid conversion from ‘const char*’ to ‘uint8_t {aka unsigned char}’ [-fpermissive]
     RF24 radio(&quot;/dev/spidev0.0&quot;,80000000,25);
                                            ^
    In file included from arcon.c:3:0:
    /home/pi/RF24/RPi/RF24/RF24.h:254:3: note: initializing argument 1 of ‘RF24::RF24(uint8_t, uint8_t, uint32_t)’
       RF24(uint8_t _cepin, uint8_t _cspin, uint32_t spispeed );
       ^
    arcon.c:8:40: warning: large integer implicitly truncated to unsigned type [-Woverflow]
     RF24 radio(&quot;/dev/spidev0.0&quot;,80000000,25);
    
    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано pi
      #5

      Похоже изменились исходники немного, у меня тоже не собирается. Вобщем что я делал.
      Твой исходник я сохранил c именем testrf24 в папку RF24/RPi/RF24/examples, тамже поправил файл Makefile:

      PROGRAMS = gettingstarted gettingstarted_call_response transfer pingpair_dyn testrf24
      

      Теперь командой make в этой папке будут компилироваться все примеры и этот исходник тоже.

      /home/pi/RF24/RPi/RF24/RF24_config.h:33:18: error: expected unqualified-id before ‘(’ token
      #define min(a,b) (a<b?a:b)
      

      Чтобы исправить эту ошибку нужно изменить файл /RF24/RPi/RF24/RF24_config.h (закомментировать эти define):// GCC a Arduino Missing

      //#define max(a,b) (a&gt;b?a:b)
      //#define min(a,b) (a&lt;b?a:b)
      //#define _BV(x) (1&lt;&lt;(x))
      //#define pgm_read_word(p) (*(p))
      //#define pgm_read_byte(p) (*(p))
      

      Во-первых, я думаю такие макросы/функции и так уже определены, во-вторых упоминается Arduino, а у нас малина. Но все равно нужно сохранить исходный файл и помнить что-где менялось.

      Теперь ошибка осталась такая:

      pi@raspberrypi:~/nrf24l01/RF24/RPi/RF24/examples $ make
      g++ -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -Wall -I../ -lrf24-bcm testrf24.cpp -o testrf24
      testrf24.cpp:8:39: error: invalid conversion from ‘const char*’ to ‘uint8_t {aka unsigned char}’ [-fpermissive]
       RF24 radio(&quot;/dev/spidev0.0&quot;,8000000,25);
                                             ^
      In file included from testrf24.cpp:3:0:
      ../RF24.h:254:3: note: initializing argument 1 of ‘RF24::RF24(uint8_t, uint8_t, uint32_t)’
         RF24(uint8_t _cepin, uint8_t _cspin, uint32_t spispeed );
         ^
      testrf24.cpp:8:39: warning: large integer implicitly truncated to unsigned type [-Woverflow]
       RF24 radio(&quot;/dev/spidev0.0&quot;,8000000,25);
                                             ^
      Makefile:28: recipe for target 'testrf24' failed
      make: *** [testrf24] Error 1
      

      Если посмтреть файл /RF24/RPi/RF24/RF24.h, то там уже нет такого RF24 radio("/dev/spidev0.0",8000000,25) конструктора, а есть только такие:

      /**
         * Constructor
         *
         * Creates a new instance of this driver.  Before using, you create an instance
         * and send in the unique pins that this chip is connected to.
         *
         * @param _cepin The pin attached to Chip Enable on the RF module
         * @param _cspin The pin attached to Chip Select
         */
        RF24(uint8_t _cepin, uint8_t _cspin);
        RF24(uint8_t _cepin, uint8_t _cspin, uint32_t spispeed );
      

      Отличие в том, что в твоем исходнике, что бы создать объект класса RF24, вызывается конструктор этого класса, в который передается имя устройства, скорость и номер пина CE. А в исходниках этой библиотеки есть конструкторы которые принимают в качестве параметров номер пина CE, номер пина СS и скорость. Типы и смысл параметров разные.
      Как заставить работать твой исходник пока не придумал, не сталкивался пока с SPI (интерфейс по которому этот модуль подключается к малине). Думаю можно попробовать заменить

      RF24 radio("/dev/spidev0.0",8000000,25)
      

      на

      RF24 radio(<номер CE пина (25?)>,<номер CS пина>,8000000)
      

      или точнее на (из примера transfer.cpp)

      RF24 radio(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);
      

      Номера пинов будут зависеть, наверно, от того к каким пинам подключен модуль на малине. И лучше использовать константы.
      Позже посмотрю как там в примерах работают с этим классом.

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано pi
        #6

        Спасибо за подробный ответ!
        Приведенные выше ошибки пропали, появилась новая:

        pi@MediaServer:~/MyProg $ sudo g++ -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -L /home/pi/RF24/RPi/RF24  -lrf24 arcon.c -o rpi
        /usr/bin/ld: cannot find -lrf24
        collect2: error: ld returned 1 exit status
        

        Понятия не имею что такое lrf24…

        Без этого параметра валится куча ошибок:

        pi@MediaServer:~/MyProg $ sudo g++ -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -L /home/pi/RF24/RPi/RF24 arcon.c -o rpi
        /tmp/ccuf7ZZm.o: In function `setup()':
        arcon.c:(.text+0xc): undefined reference to `RF24::begin()'
        arcon.c:(.text+0x14): undefined reference to `RF24::enableDynamicPayloads()'
        arcon.c:(.text+0x20): undefined reference to `RF24::setAutoAck(bool)'
        arcon.c:(.text+0x30): undefined reference to `RF24::setRetries(unsigned char, unsigned char)'
        arcon.c:(.text+0x3c): undefined reference to `RF24::setDataRate(rf24_datarate_e)'
        arcon.c:(.text+0x48): undefined reference to `RF24::setPALevel(unsigned char)'
        arcon.c:(.text+0x54): undefined reference to `RF24::setChannel(unsigned char)'
        arcon.c:(.text+0x60): undefined reference to `RF24::setCRCLength(rf24_crclength_e)'
        arcon.c:(.text+0x74): undefined reference to `RF24::openReadingPipe(unsigned char, unsigned long long)'
        arcon.c:(.text+0x80): undefined reference to `RF24::startListening()'
        /tmp/ccuf7ZZm.o: In function `loop()':
        arcon.c:(.text+0xf4): undefined reference to `bcm2835_delay'
        arcon.c:(.text+0x14c): undefined reference to `RF24::available()'
        arcon.c:(.text+0x15c): undefined reference to `RF24::getDynamicPayloadSize()'
        arcon.c:(.text+0x16c): undefined reference to `RF24::read(void*, unsigned char)'
        /tmp/ccuf7ZZm.o: In function `_GLOBAL__sub_I_radio':
        arcon.c:(.text.startup+0x60): undefined reference to `RF24::RF24(unsigned char, unsigned char, unsigned int)'
        collect2: error: ld returned 1 exit status
        
        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано pi
          #7

          Понятия не имею что такое lrf24…
          Это подсказка линковщику ld (вызывается компилятором g++) что часть функций, которые описаны в RF24.h находится в динамической библиотеке lrf4. На самом деле она называется lrf24-bcm…
          Если ты при установке библиотеки RF24 выполнял make install то в '/usr/local/lib' у тебя должно быть примерно так (должны быть скомпилированная библиотека и симлинки на неё):

          pi@raspberrypi:~/nrf24l01/RF24/RPi/RF24/examples $ ls -l /usr/local/lib
          total 44
          lrwxrwxrwx 1 root staff 33 May 19 19:46 librf24-bcm.so -> /usr/local/lib/librf24-bcm.so.1.0
          lrwxrwxrwx 1 root staff 33 May 19 19:46 librf24-bcm.so.1 -> /usr/local/lib/librf24-bcm.so.1.0
          -rwxr-xr-x 1 root staff 40792 May 19 19:46 librf24-bcm.so.1.0
          drwxrwsr-x 4 root staff 4096 Mar 18 11:13 python2.7и в '/usr/local/include' (должна быть папка RF24 с заголовчными файлами)ls -l /usr/local/include/
          total 4
          drwxr-sr-x 2 root staff 4096 May 19 19:46 RF24
          

          Теперь о компиляции.

          pi@MediaServer:~/MyProg $ sudo g++ -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -L /home/pi/RF24/RPi/RF24 -lrf24 arcon.c -o rpi
          /usr/bin/ld: cannot find -lrf24
          collect2: error: ld returned 1 exit status
          

          Во-первых, sudo не нужен.
          Во-вторых -L /home/pi/RF24/RPi/RF24 вроде должен сообщать линковщику где искать библиотеки. Поскольку у меня (и у тебя скорее всего тоже) библиотека установлена командойmake installто библиотека уже будет в папке /usr/loca/lib, про которую линковщик и так в курсе, поэтому этот параметр можно убрать.
          -lrf24нужно заменить на -lrf24-bcmтак как имя у библиотеки изменилось.

          Далее

          #include "/home/pi/RF24/RPi/RF24/RF24.h"
          

          должен указвать на RF24.h c закомментированными define'ами.
          Я изменил это на #include <RF24.h> и добавил параметр-I../

          В итоге такой код (файл находится в папке /home/pi/nrf24l01/RF24/RPi/RF24/examples)

          pi@raspberrypi:~/nrf24l01/RF24/RPi/RF24/examples $ cat testrf24.cpp
          #include <cstdlib>
          #include <iostream>
          #include "RF24.h"
          #include <fstream>
          using namespace std;
          
          // spi device, spi speed, ce gpio pin
          //RF24 radio("/dev/spidev0.0",8000000,25);
          RF24 radio(12,13,25);//значения просто для примера, чтобы компилятор не ругался.
          
          void setup(void)
          {
          // init radio for reading
          radio.begin();
          radio.enableDynamicPayloads();
          radio.setAutoAck(1);
          radio.setRetries(15,15);
          radio.setDataRate(RF24_1MBPS);
          radio.setPALevel(RF24_PA_MAX);
          radio.setChannel(76);
          radio.setCRCLength(RF24_CRC_16);
          radio.openReadingPipe(1,0xF0F0F0F0E1LL);
          radio.startListening();
          }
          
          void loop(void)
          {
          char receivePayload[64];
          while (radio.available())
          {
          uint8_t len = radio.getDynamicPayloadSize();
          radio.read(receivePayload, len);
          // Костыль для создания промежуточного файла.
          ofstream out("/dev/nrf24");
          out << receivePayload << "\n";
          out.close ();
          //cout<<"\n Data="<<receivePayload;
          delay(200);
          }
          }
          
          int main(int argc, char** argv)
          {
          cout << "Driver initialized, please check values of /dev/nrf24" << endl;
          setup();
          while(1)
          loop();
          
          return 0;
          }
          

          компилируется такой командой

          g++ -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -I../ -lrf24-bcm testrf24.cpp -o rpi
          
          1 ответ Последний ответ
          0
          • piP Не в сети
            piP Не в сети
            pi
            написал в отредактировано
            #8

            Большое спасибо, прога компиллируется!
            Связать устройства пока не смог, буду мучать их дальше.

            1 ответ Последний ответ
            0
            • piP Не в сети
              piP Не в сети
              pi
              написал в отредактировано
              #9

              Мне тоже скоро должны прийти такие модули. Когда придут буду разбираться с подключением и настройкой. Думаю совместно сможем заставить их работать.

              1 ответ Последний ответ
              0
              • piP Не в сети
                piP Не в сети
                pi
                написал в отредактировано pi
                #10

                fort (2016-05-30 17:29:17):Мне тоже скоро должны прийти такие модули. Когда придут буду разбираться с подключением и настройкой. Думаю совместно сможем заставить их работать.

                Отлично, а то я что-то застопорился. С ардуино, вроде проблем не должно быть — модуль выдает о себе инфу, значит работает. Что-то, видимо, на стороне Raspnerry.

                1 ответ Последний ответ
                0
                • piP Не в сети
                  piP Не в сети
                  pi
                  написал в отредактировано pi
                  #11

                  Добрый день.
                  Подскажите, как увидеть все данные, идущие по каналу?
                  Нужно записывать данные, передаваемые китайским ваттметром, но не знаю параметров передачи (канал, размер payload, адрес). В пример приёма добавил цикл с перебором каналов, но ничего не получаю.

                  #include #include #include <RF24/RF24.h>
                  
                  using namespace std;
                  
                  // gpio pins, spi speed
                  RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);
                  
                  int main(int argc, char** argv)
                  {
                  char receivePayload[16];
                  uint8_t pipe_num=0;
                  
                  radio.begin();
                  radio.setPALevel(RF24_PA_MAX);
                  radio.setDataRate(RF24_1MBPS);
                  radio.setCRCLength(RF24_CRC_16);
                  radio.setRetries(15, 15);
                  radio.setAutoAck(1);
                  
                  for( int i=0; i<126; i++){
                  radio.setChannel(i);
                  radio.enableDynamicPayloads();
                  // radio.setPayloadSize(32);
                  radio.openReadingPipe(0,0xE8E8F0F0E2LL);
                  radio.openReadingPipe(1,0xC1C2C2C2C2LL);
                  radio.openReadingPipe(2,0xC1C2C2C2C3LL);
                  radio.openReadingPipe(3,0xC1C2C2C2C4LL);
                  radio.openReadingPipe(4,0xC1C2C2C2C5LL);
                  radio.openReadingPipe(5,0xC1C2C2C2C6LL);
                  
                  radio.startListening();
                  printf(«Start channel %i \n»,i);
                  
                  for(int k=0; k<300000;k++) {
                  while (radio.available(&pipe_num))
                  {
                  // Clear measurement values
                  memset(receivePayload,0,sizeof(receivePayload));
                  
                  // radio.read(&receivePayload, sizeof(receivePayload));
                  uint8_t len = radio.getDynamicPayloadSize();
                  radio.read(receivePayload, len);
                  printf(«pipe %d: %s\n», pipe_num, receivePayload);
                  }
                  }
                  radio.stopListening();
                  }
                  
                  return 0;
                  }
                  
                  1 ответ Последний ответ
                  0
                  • piP Не в сети
                    piP Не в сети
                    pi
                    написал в отредактировано pi
                    #12

                    Еще один вопрос.

                    Включаю через raspi-config SPI, в его текстовом GUI получаю сообщение:
                    The SPI interface is enabled
                    Выхожу из raspi-config
                    В консоли вижу:

                    /usr/bin/raspi-config: 597: /usr/bin/raspi-config: dtparam: not found
                    

                    Означает ли это, что SPI не включился и дальше пытаться работать с nRF24l01+ смысла нет?
                    Как проверить работоспособность SPI?

                    1 ответ Последний ответ
                    0
                    • piP Не в сети
                      piP Не в сети
                      pi
                      написал в отредактировано pi
                      #13

                      raspi-config, по-моему, при включении SPI просто правит файл /boot/config.txt. Как написано здесь достаточно просто добавить/раскомментировать

                      dtparam=spi=on
                      

                      Насколько я понял, при включении SPI после перезагрузки в каталоге /dev/ должны появиться уcтройства spidev0.0 и spidev1.1.
                      Также при наличии подключенного устройства в выводе dmesg должно быть что-то про SPI. Проверить можно так

                      dmesg | grep -i spi
                      

                      У меня на моей малине B+ через SPI не заработал считыватель MFRC522, хотя с ардуиной он работает. Возможно для работы SPI нужно еще что-то докрутить.

                      1 ответ Последний ответ
                      0
                      • piP Не в сети
                        piP Не в сети
                        pi
                        написал в отредактировано
                        #14

                        завелось!) еще раз спасибо.

                        Почему не работало.

                        1. Изначально последовал одному из советов и припаял на радиомодуль электролит на 1 мкФ (в других туториалах советовали больше). Также понятия не имел, что у конденсаторов может быть полярность.) Поэтому на одном из модулей он стоял неправильно. Был ли причиной конденсатор 1мкФ не знаю, но полярность — однозначно сыграла роль.
                        2. Установил правильно конденсаторы на 4,7 мкФ. Проще всего оказалось воткнуть вот так

                        И заработало.

                        1 ответ Последний ответ
                        0
                        • piP Не в сети
                          piP Не в сети
                          pi
                          написал в отредактировано pi
                          #15

                          Вот и хорошо.
                          Мне вот только пришли оми модули, решил проверить их работу.
                          Моя система — Rpi B+:

                          uname -a
                          Linux raspberrypi 4.4.9+ #884 Fri May 6 17:25:37 BST 2016 armv6l GNU/Linux
                          

                          Сначала ставим библиотеку как описано здесь.

                          Папки examples_rpi у меня не оказалось, зато есть examples_linx. Переходим в неё и компилируем примеры.

                          pi@raspberrypi ~/RF24/examples_linux $ make
                          arm-linux-gnueabihf-g++ -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -Ofast -Wall -pthread  -I/usr/local/include/RF24/.. -I.. -L/usr/local/lib gettingstarted_call_response.cpp -lrf24 -o gettingstarted_call_response
                          arm-linux-gnueabihf-g++ -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -Ofast -Wall -pthread  -I/usr/local/include/RF24/.. -I.. -L/usr/local/lib pingpair_dyn.cpp -lrf24 -o pingpair_dyn
                          pingpair_dyn.cpp: In function ‘int main(int, char**)’:
                          pingpair_dyn.cpp:201:42: warning: ‘len’ may be used uninitialized in this function [-Wmaybe-uninitialized]
                                 radio.write( receive_payload, len );
                                                                    ^
                          pi@raspberrypi ~/RF24/examples_linux $ sudo ./transfer
                          

                          Примеры скомпилировались, но не работают:

                          pi@raspberrypi ~/RF24/examples_linux $ sudo ./gettingstarted
                          RF24/examples/GettingStarted/
                          ================ SPI Configuration ================
                          CSN Pin          = CE0 (PI Hardware Driven)
                          CE Pin           = Custom GPIO22
                          Clock Speed      = 8 Mhz
                          ================ NRF Configuration ================
                          STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
                          RX_ADDR_P0-1     = 0x544d52687c 0xabcdabcd71
                          RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
                          TX_ADDR          = 0x544d52687c
                          RX_PW_P0-6       = 0x20 0x20 0x00 0x00 0x00 0x00
                          EN_AA            = 0x3f
                          EN_RXADDR        = 0x03
                          RF_CH            = 0x4c
                          RF_SETUP         = 0x07
                          CONFIG           = 0x0e
                          DYNPD/FEATURE    = 0x00 0x00
                          Data Rate        = 1MBPS
                          Model            = nRF24L01+
                          CRC Length       = 16 bits
                          PA Power         = PA_MAX
                          
                           ************ Role Setup ***********
                          Choose a role: Enter 0 for pong_back, 1 for ping_out (CTRL+C to exit)
                          &gt;1
                          Role: Ping Out, starting transmission
                          
                          Now sending...
                          RF24 HARDWARE FAIL: Radio not responding, verify pin connections, wiring, etc.
                          RF24 HARDWARE FAIL: Radio not responding, verify pin connections, wiring, etc.
                          RF24 HARDWARE FAIL: Radio not responding, verify pin connections, wiring, etc.
                           Правим файл gettingstarted.cpp меняем строчку:
                          RF24 radio(22,0);на 
                          RF24 radio(25,0); и файл transfer.cpp меняем строчку:
                          RF24 radio(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); на RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ); поскольку у меня пин CE модуля подключен к 22 пину малины (он же GPIO25).
                          Теперь запускаем пример снова:
                          pi@raspberrypi ~/RF24/examples_linux $ sudo ./transfer
                          RF24/examples/Transfer/
                          ================ SPI Configuration ================
                          CSN Pin          = CE0 (PI Hardware Driven)
                          CE Pin           = Custom GPIO25
                          Clock Speed      = 8 Mhz
                          ================ NRF Configuration ================
                          STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
                          RX_ADDR_P0-1     = 0x544d52687c 0xabcdabcd71
                          RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
                          TX_ADDR          = 0x544d52687c
                          RX_PW_P0-6       = 0x20 0x20 0x00 0x00 0x00 0x00
                          EN_AA            = 0x3f
                          EN_RXADDR        = 0x03
                          RF_CH            = 0x01
                          RF_SETUP         = 0x07
                          CONFIG           = 0x0a
                          DYNPD/FEATURE    = 0x00 0x00
                          Data Rate        = 1MBPS
                          Model            = nRF24L01+
                          CRC Length       = 8 bits
                          PA Power         = PA_MAX
                          
                           ************ Role Setup ***********
                          Choose a role: Enter 0 for receiver, 1 for transmitter (CTRL+C to exit)
                          &gt;1
                          Role: Ping Out, starting transmission
                          
                          Initiating Basic Data Transfer
                          

                          На арудине получаем:

                          Payload Count: 0
                          Rate: 0.00
                          Payload Count: 0
                          Rate: 2.40
                          Payload Count: 75
                          Rate: 13.44
                          Payload Count: 420
                          Rate: 13.34
                          Payload Count: 417
                          Rate: 13.15
                          Payload Count: 411
                          

                          Для ардуины библотека ставилась через «Управление библиотеками», использовался пример Transfer.
                          Что важно, в обоих примерах (в малине и на ардуине) используются идентичные настройки (номера каналов, адреса скорость) и есть возможность переключения режима работы приёмник/передатчик.

                          1 ответ Последний ответ
                          0
                          • piP Не в сети
                            piP Не в сети
                            pi
                            написал в отредактировано
                            #16

                            P.S. На малине пример запускать надо от рута, иначе (как писали выше) получим segmentation fault.
                            P.P.S. С ардуиной модуль заработал без конденсатора. Возможно пока используюся малые скорости и низкая мощность его отсутствие не сказывается.
                            Схема подключения к ардуине (правда у меня не исползуется другой контакт, который в одном ряду с питанием, вроде IRQ) —
                            Схема подключения к малиен —

                            1 ответ Последний ответ
                            0
                            • piP Не в сети
                              piP Не в сети
                              pi
                              написал в отредактировано pi
                              #17

                              А не сталкивались со 100% загрузкой процессора?
                              Насколько я понимаю, это из-за цикла в loop:

                              while (radio.available())
                                  {
                              ...
                                  }
                              

                              видимо, цикл прогоняется на максимальной скорости, поэтому загрузка 100%.
                              Поставил в начало цикла

                              sleep (15);
                              

                              Теперь загрузка 0, данные пока не пропадали, но как-то на душе не спокойно. Может правильней как-то, например, все, что в loop вложить в цикл, ждущий активности на gpio? Если да, то как это организовать?

                              1 ответ Последний ответ
                              0

                              • Войти

                              • Нет учётной записи? Зарегистрироваться

                              • Login or register to search.
                              • Первое сообщение
                                Последнее сообщение
                              0
                              • Категории
                              • Главная
                              • Документация
                              • Последние
                              • Пользователи