2015-05-14 31 views
1

我想在我的房間手冊中遠程控制插座,而無需在樹莓派上添加額外的庫。我想使用C語言的UART接口。插座有433 Mhz接收器,我使用433 Mhz發射器。在其他庫中輸入如下內容:send 11111 1 1.(套接字代碼,套接字號,條件)。但是如何在C中用write()函數格式化這個命令? 10是用於字符的數量。我使用下面的代碼。我通過minicom測試了輸出,效果很好。但是,接收器現在如何知道它已經被滿足了?C RbPi UART遠程控制插座

#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <errno.h> 
#include <termios.h> 

int main(int argc, char ** argv) { 
    int fd; 
    // Open the Port. We want read/write, no "controlling tty" status, and open i$ 
    fd = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY); 
    if (fd == -1) { 
    perror("open_port: Unable to open /dev/ttyAMA0 - "); 
    return(-1); 
    } 

    // Turn off blocking for reads, use (fd, F_SETFL, FNDELAY) if you want that 
    fcntl(fd, F_SETFL, 0); 

// Write to the port 
    int n = write(fd,"11111 1 1",10); 
    if (n < 0) { 
    perror("Write failed - "); 
    return -1; 
    } 

    // Don't forget to clean up 
    close(fd); 
    return 0; 
} 
+0

我猜想:該協議提供了一個你必須把奴隸地址的地方。或者通訊是1-> 1(如RS232),只允許1個從站。 – LPs

+0

那麼我會假設每個套接字都有不同的代碼,對吧? – immibis

+0

是的主代碼是11111和套接字代碼從A到E,所以A是1我認爲。然後條件1爲「開」。 – Sven

回答

0

我是否正確:通過UART發送命令通過無線電發送器發送消息。嗅探UART輸出證明你的代碼正確,TX線路發送你想要它在軟件中發送的內容,實際的問題是「rx模塊如何獲取該消息/如何讓rx模塊獲得它?」

如果是這樣,主要問題是您實際使用哪種無線電TX/RX或TRX(我的意思是芯片/模塊代碼,如CC1120,NRF2401等)?有很多433MHz的無線電模塊可供選擇,我想先諮詢他們的數據表,或者至少在這裏發佈產品編號是正確的選擇。

+0

是的。我測試了從計算機引腳到TX的輸出,但沒有從TX的天線到RX ..我不知道如何發送它(以字符串或單個字符,空格或不加..)我使用這種類型的TX:http://goo.gl/HP5PEc。這些插座是433,92 MHz的普通遠程插座,它們都具有相同的代碼,我可以改變,遙控器也有這個代碼,所以插座知道它已經接通,並且它們有一個插座編號A到E.所以第一個套接字將如下所示:11111(代碼爲所有套接字)+ 1(A = 1作爲數字1)和1(作用)。 – Sven

+0

這是rx插座:http://goo.gl/aJhmLF – Sven

+0

當我接通TX並將數據發送給它時,它會立即傳輸它嗎?只是爲了確保它會被傳輸。 – Sven