Всем добрый день! У меня возникла проблема: не получается соединить ардуину и малинку. Я новичок, и как понял из множества интернет статей, первым делом надо проверить работает ли 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
Для начала убедитесь, что у вас всё правильно на аппаратном уровне. Эти радиомодули кошмарно привередливы. http://forum.amperka.ru/threads/nrf24l01-побеждаем-модуль.3205/
Чтобы с этим не мучиться я использовал дополнительную плату питания для этого модуля. У нее входное напряжение 5В, а выходное строго 3.3В
Допмодуль для чего? Не надо его. У меня Малина прекрасно общается с любым МК через nRF24. Код для неё выкладывал в теме, ссылка на которую приведена выше. Смотреть с конца.