Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Communication entre deux nRF24l01+



  1. #1
    blacksword

    Communication entre deux nRF24l01+


    ------

    Bonjour à tous,

    je viens chercher un peu d'aide car après de longues heures d'essai, je n'arrive toujours pas à faire communiquer deux modules nRF24l01+ (achetés sur eBay).
    J'ai donc deux modules, chacun relié à un STM32. J'ai trouvé une librairie sur internet (je la met en PJ) qui permet de les interfacer avec ces µC. La liaison SPI est géré en soft et pas en hard mais elle à l'air de marcher correctement car j'arrive à lire et écrire sans problème dans les différents registres.

    Le STM32 en TX possède un écran graphique ce qui me permet d'afficher en permanence tous les registres qui m'intéressent. Celui en RX possède un écran LCD alphanumérique 16x2, j'affiche donc 2 registres en même temps.

    Sur le récepteur, je teste le bit RPD qui indique la détection d'une porteuse sur le même canal RF que lui et ce bit passe de 0 à 1 après l'allumage, ce qui est déjà bon signe.

    Je vous met le code pour l'émetteur :
    Code:
    int main(void) {
    
    	LCD_Initialization();
    	LCD_Clear(Black);
    
    	GUI_Text(10,10,"Set TX Mode...",Green,Black);
    	init_io();
    	TX_Mode();
    	GUI_Text(150,10,"Set",Green,Black);
    
    	while(1) {
    		CE(0);
    		c=SPI_Read(READ_REG + EN_AA);
    		printByte(c,10,30);
    		c=SPI_Read(READ_REG + EN_RXADDR);
    		printByte(c,10,50);
    		c=SPI_Read(READ_REG + SETUP_RETR);
    		printByte(c,10,70);
    		c=SPI_Read(READ_REG + RF_CH);
    		printByte(c,10,90);
    		c=SPI_Read(READ_REG + RF_SETUP);
    		printByte(c,10,110);
    		c=SPI_Read(READ_REG + CONFIG);
    		printByte(c,10,130);
    		c=SPI_Read(READ_REG + FIFO_STATUS);
    		printByte(c,10,150);
    
    		*tx_buf=65;
    
    		c=SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
    
    		printByte(c,10,170);
    
    		if(((c>>TX_DS)&0x01)==1) {
    			GUI_Text(10,190,"Sent",Green,Black);
    		}
    		CE(1);
    	}
    
    	return 0;
    }
    et ici le code du récepteur :
    Code:
    int main(void) {
    	GPIO_Configuration();
    
    	GPIO_SetBits(GPIOA,GPIO_Pin_12);
    
    	LCD_Init();
    	LCD_Clear();
    	LCD_Goto(1,1);
    	LCD_Print("Hello World");
    
    	init_io();
    	RX_Mode();
    
    	uint8_t c=0,f,sta,flag;
    	char s[17],s2[17];
    
    	while(c==0) {
    		CE(0);
    		c=SPI_Read(READ_REG + CD);
    		CE(1);
    
    		sprintf(s,"RPD = %03u",c);
    		LCD_Goto(1,2);
    		LCD_Print(s);
    
    	}
    
    	delay_ms(2000);
    
    	while(1) {
    
    		CE(0);
    		sta=SPI_Read(READ_REG+STATUS);	// read register STATUS's value
    		f=SPI_Read(READ_REG+FIFO_STATUS);
    		CE(1);
    
    		sprintf(s2,"FIFO = %3d      ",f);
    		sprintf(s,"STATUS = %3d    ",sta);
    
    		LCD_Goto(1,1);
    		LCD_Print(s2);
    		LCD_Goto(1,2);
    		LCD_Print(s);
    
    		if((sta>>RX_DR)&0x01) {				// if receive data ready (RX_DR) interrupt
    			CE(0);
    			SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
    			CE(1);
    			flag=1;
    		}
    
    		if(flag) {		// finish received
    			flag=0;		//	set flag=0
    
    			sprintf(s,"RX = %3d %3d    ",rx_buf[0],rx_buf[1]);
    
    			LCD_Clear();
    			LCD_Goto(1,1);
    			LCD_Print("Data received");
    			LCD_Goto(1,2);
    			LCD_Print(s);
    
    			while(1);
    
    		}
    	}
    
    	return 0;
    }
    Pour info, sur l'émetteur, il est affiché dans l'ordre : 1,1,26,40,7,14,33,31 et sur le récepteur il est indiqué : FIFO = 17 et STATUS = 14.

    Merci d'avance pour votre aide

    nRF24l01.zip

    -----

  2. #2
    blacksword

    Re : Communication entre deux nRF24l01+

    bon je me permet un petit up. Même si vous avez déjà utilisé ces modules avec d'autres µC faites moi part de vos remarques

Discussions similaires

  1. communication entre deux modules XBee
    Par draonix dans le forum Électronique
    Réponses: 16
    Dernier message: 29/03/2013, 17h03
  2. communication rs232 entre deux microcontroleurs
    Par ramzi008 dans le forum Électronique
    Réponses: 0
    Dernier message: 29/04/2011, 15h57
  3. communication i2c entre deux pics
    Par frednico56 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/11/2007, 22h56
  4. communication entre deux radios
    Par gifelix dans le forum Électronique
    Réponses: 1
    Dernier message: 25/07/2007, 15h57
  5. Communication entre deux réseaux?
    Par mastronic dans le forum Internet - Réseau - Sécurité générale
    Réponses: 9
    Dernier message: 07/02/2007, 16h50
Découvrez nos comparatifs produits sur l'informatique et les technologies.