Arduino, Raspberry Pi 3 и RF 24

Тема в разделе "Raspberry Pi", создана пользователем Fedkin, 10 ноя 2019.

  1. Fedkin

    Fedkin Нуб

    Всем доброго времени суток, имею стандартный Arduino uno(приемник), Raspberry Pi 3(передатчик) и RF 24 между ними. Мне удалось запустить всю эту систему, но если бы все было так хорошо я бы сейчас не писал на этот форум. Сигнал который отсылает малинка не изменяется по ходу изменения программы, то есть когда я включаю скрипт на малинке функция write отправляет только первое значение отправляемой переменной. Возможно кто-то встречался с такой проблемой.
    Код для малинки:
    Код (Python):
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BCM)
    from lib_nrf24 import NRF24
    import time
    import spidev


    #Объявление кнопак
    button1 = 17
    button2 = 27
    GPIO.setup(button1, GPIO.IN)
    GPIO.setup(button2, GPIO.IN)

    pipes = [[0xF0, 0xF0, 0xF0, 0xF0, 0xE1], [0xf0, 0xf0, 0xf0, 0xf0, 0xe1]]

    radio = NRF24(GPIO, spidev.SpiDev())
    radio.begin(0,21)
    radio.setRetries(15,15)
    radio.setPayloadSize(32)
    radio.setChannel(0x76)

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


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



    while True:  
        subBuf1 = int(GPIO.input(button1))
        subBuf2 = int(GPIO.input(button2))
        buf = [subBuf1,subBuf2]

        # send a packet to receiver
        radio.write(buf)
        print ("Sent:"),
        print (buf)

    Код для Ардуино:
    Код (C++):

    #include <SPI.h>                                          // Подключаем библиотеку  для работы с шиной SPI
    #include <nRF24L01.h>                                     // Подключаем файл настроек из библиотеки RF24
    #include <RF24.h>                                         // Подключаем библиотеку  для работы с nRF24L01+                                    
    #define GREEN 6
    #define RED 7
    RF24           radio(9, 10);                              // Создаём объект radio   для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
    char            data[5] ;                                   // Создаём массив для приёма данных
    uint8_t  RPi [2];
    const uint8_t leds[]  = {GREEN,RED};

    void setup(){
        Serial.begin(9600);                    
        radio.begin();                                        // Инициируем работу nRF24L01+
        radio.setChannel(0x76);                                  // Указываем канал приёма данных (от 0 до 127), 5 - значит приём данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
        radio.setDataRate     (RF24_1MBPS);                   // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
        radio.setPALevel      (RF24_PA_HIGH);                 // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
        radio.openReadingPipe (6, 0xF0F0F0F0E1LL);            // Открываем 1 трубу с идентификатором 0x1234567890 для приема данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора)
        radio.startListening  ();                             // Включаем приемник, начинаем прослушивать открытую трубу
    //  radio.stopListening   ();                             // Выключаем приёмник, если потребуется передать данные
        for (size_t i = 0; i < sizeof(leds);i++)
        {
          pinMode(OUTPUT,leds[i]);
        }
    }

    void loop(){
        if(radio.available()){                                // Если в буфере имеются принятые данные      
           radio.read(&RPi,sizeof(RPi));
         
               for(size_t i = 0; i < sizeof(leds);i++)
               {
                 Serial.print(RPi[i]);
                 digitalWrite(leds[i],RPi[i]);
               }
               Serial.println();    
           
        }
    }
     
  2. parovoZZ

    parovoZZ Гуру

    отправляешь integer, а принимаешь uint8_t. Надо придти к чему-то одному.
     
  3. Fedkin

    Fedkin Нуб

    Спасибо что заметили, но проблему решить это не помогло.