2015-05-14 59 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