使用 GSM 从 Raspberry Pi 发送消息的 C++ 代码

问题描述 投票:0回答:1

我刚刚将 Raspberry Pi 与 SM5100B GSM 连接起来。我想测试它在我的手机中发送一条简单的消息。我可以使用像 CutecomMinicom 这样的模拟器来做到这一点(因为我有一个 Raspbian Linux 版本)。但是 C++ 中是否有任何代码可以完成这项工作?我不使用 Arduino,只使用 SM5100B。这段代码我写到现在当然还不能用:

 #include <stdio.h>   // Standard input / output functions
 #include <string.h>  // String function definitions
 #include <unistd.h>  // UNIX standard function definitions
 #include <fcntl.h>   // File control definitions
 #include <errno.h>   // Error number definitions
 #include <termios.h> // POSIX terminal control definitionss
 #include <time.h>    // Time calls


int open_port(void)
{
    int fd; // File description for the serial port
    fd = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY);
    if(fd == -1) // if open is unsucessful
    {
        //perror("open_port: Unable to open /dev/ttyAMA0 - ");
        printf("open_port: Unable to open /dev/ttyAMA0. \n");
    }
    else
    {
        fcntl(fd, F_SETFL, 0);
        printf("port is open.\n");
    }
    return(fd);
} //open_port

int configure_port(int fd)  // Configure the port
{
    struct termios port_settings;       // Structure to store the port settings in
    cfsetispeed(&port_settings, B9600); // Set baud rates
    cfsetospeed(&port_settings, B9600);
    port_settings.c_cflag &= ~PARENB;   // Set no parity, stop bits, data bits
    port_settings.c_cflag &= ~CSTOPB;
    port_settings.c_cflag &= ~CSIZE;
    port_settings.c_cflag |= CS8;
    tcsetattr(fd, TCSANOW, &port_settings);  // Apply the settings to the port

    return(fd);
} //configure_port

int query_modem(int fd)  // Query modem with an AT command
{
    char n;
    fd_set rdfs;
    struct timeval timeout;

    // Initialise the timeout structure
    timeout.tv_sec = 10; // Ten second timeout
    timeout.tv_usec = 0;

    unsigned char send_bytes[]  = "AT+CMGF=1";
    unsigned char send_bytes1[] = "AT+CMGS=\"603*****\"";
    unsigned char send_bytes3[] = "TEST";

    //puts(send_bytes);
    write(fd, send_bytes, 13);  // Send data
    write(fd, send_bytes1, 13);
    write(fd, send_bytes3, 13);
    //printf("Wrote the bytes. \n");

    // Do the select
    n = select(fd + 1, &rdfs, NULL, NULL, &timeout);

    // Check if an error has occured
    if(n < 0)
    {
        perror("select failed\n");
    }
    else if (n == 0)
    {
        puts("Timeout!");
    }
    else
    {
        printf("\nBytes detected on the port!\n");
    }
    return 0;
} //query_modem

int main(void)
{
    int fd = open_port();
    configure_port(fd);
    query_modem(fd);
    return(0);
} //main
c++ sms raspberry-pi gsm
1个回答
0
投票

打开相关的串口(/dev/ttySx,其中x很可能是一个数字),使用write或fwrite写入端口,关闭端口,退出程序。

© www.soinside.com 2019 - 2024. All rights reserved.