树莓派 GPIO 的 NRF24L01 应用 (ING)

时间:2024-05-19 10:02:41

NEW:

NRF24L01

今天终于调试成功,使用1个树莓派的两个SPI接口控制了两个NRF24L01模块,使得其互相传数据

具体过程

1.wiringPi 下载 

  SPI接口需要加载

gpio load spi

2.自己编写nrf24l01.c 控制

#include <nrf2401.h>

    int length;
    char data[32];

void main()
{
       wiringPiSPISetup(0,3000000);    //3Mb/s
    wiringPiSPISetup(1,3000000);
    
    wiringPiSetup();
    pinMode(0,OUTPUT);
    digitalWrite(0,HIGH);
    pinMode(1,OUTPUT);
    digitalWrite(1,LOW);
    delay(1);

    printf("     Command    Data\r\n");

     nrf2401_command(1,W_REGISTER|CONFIG,(1<<EN_CRC)|(1<<PWR_UP)|(1<<PRIM_RX));
    nrf2401_command(0,W_REGISTER|CONFIG,(1<<EN_CRC)|(1<<PWR_UP));

      nrf2401_command(1,W_REGISTER|RX_PW_P0,32);
 
    data[0]=W_TX_PAYLOAD;
    data[1]=0xfe;
    data[2]=0xdc;
    data[3]=0xba;
    data[4]=0x98;      
    wiringPiSPIDataRW(0,data,33);

    
    digitalWrite(1,HIGH);
    delay(1);



//    nrf2401_command(0,W_REGISTER|RX_PW_P0,0xA0);

    digitalWrite(0,HIGH);

//    delay(20);
//     digitalWrite(0,LOW);
//     delay(1000);

    nrf2401_command(0,R_REGISTER|FIFO_STATUS,0);
    nrf2401_command(1,R_REGISTER|FIFO_STATUS,0);

}



 void nrf2401_command(__u8 channel,__u8 command,__u8 command_data)
 {
     data[0]=command;
    if(command_data)
        data[1]=command_data;
    printf("TX_DATA    %8d%8d%8d%8d\r\n",data[0],data[1]);
    if(command_data)
        wiringPiSPIDataRW(channel,data,2);
    else
        wiringPiSPIDataRW(channel,data,1);
    printf("RX_DATA    %8d%8d%8d%8d\r\n",data[0],data[1]);
 }
//  nrf24l01.h


#include <stdio.h> #include <stdint.h> #include <wiringPiSPI.h> #include "wiringPi.h" #include <nRF24L01.h> #include <linux/types.h> void nrf2401_command(__u8 channel,__u8 command,__u8 command_data);

 

实话说,自己一开始死活没办法通信,最后无奈找了个范例一点点的抄,然后一点点的删除,发现,NRF24L01配置上,RX_PW_P0必须要和TW_TX_PAYLOAD的长度一样才可以接收到数据,感觉好坑啊。

但是最原始的程序有时候感觉没有发射,原因在哪里不知道。

3.接口完全可以使用树莓派自带的SPI总线

CE1 CE0两个分别控制两个SPI接口的芯片,然后我用的是GPIO0,GPIO1连接CE

树莓派 GPIO 的 NRF24L01 应用 (ING)

树莓派 GPIO 的 NRF24L01 应用 (ING)

4.现在可以互相通信了。下一步测试传输的速率和音乐的传输。

 

 

 

BEFORE:

之前我从来没有想过树莓派可以直接控制一个IO口的电平高低,一直认为这个是一个电脑,不应该有从CPU引出来的口,真是太天真了。

瞬间觉得树莓派有搞头,这比单片机高端多了。

接下来就是看怎么设计程序

 

有朋友说PYTHON比C好用很多,之前有用过C和汇编,一年前在瑞典看了下PYTHON的入门书籍。

先学下怎么用C编,然后尝试下用PYTHON吧

 

NR​F​2​4​L​0​1​模块介绍

http://baike.baidu.com/view/3325625.htm

N​R​F​2​4​L​0​1​资料

http://wenku.baidu.com/view/6d813462f5335a8102d220b7.html

树莓派GPIO

http://www.link888.cn/read-547.html