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
4.现在可以互相通信了。下一步测试传输的速率和音乐的传输。
BEFORE:
之前我从来没有想过树莓派可以直接控制一个IO口的电平高低,一直认为这个是一个电脑,不应该有从CPU引出来的口,真是太天真了。
瞬间觉得树莓派有搞头,这比单片机高端多了。
接下来就是看怎么设计程序
有朋友说PYTHON比C好用很多,之前有用过C和汇编,一年前在瑞典看了下PYTHON的入门书籍。
先学下怎么用C编,然后尝试下用PYTHON吧
NRF24L01模块介绍
http://baike.baidu.com/view/3325625.htm
NRF24L01资料
http://wenku.baidu.com/view/6d813462f5335a8102d220b7.html
树莓派GPIO
http://www.link888.cn/read-547.html