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

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

Запланировано Прикреплена Закрыта Перенесена Raspberry Pi
17 Сообщения 1 Posters 359 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • 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
                      • Категории
                      • Главная
                      • Документация
                      • Последние
                      • Пользователи