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