【问题标题】:How to communicate with sim800c using Raspberry pi 3 in c++如何在 C++ 中使用 Raspberry pi 3 与 sim800c 通信
【发布时间】:2019-03-07 18:58:03
【问题描述】:

我的最终目标是尝试使用来自 c++ 程序的 sim800c 将存储在我的 Raspberry pi 3 上的一些简单数据发送到外部服务器/网站。我相信最简单的方法是向 sim/modem 发出“AT 命令”,但我正在努力做到这一点。我无法弄清楚我实际上应该如何发出 AT 命令或如何检查它们是否在工作。出于测试目的,我编写了一些代码,一旦我完成这项工作,它应该会向电话号码发送一条短信,它应该相当直接地找出与服务器通信的 AT 命令。

下面是我如何将所有东西连接起来的图像,我相当确信它是正确的。

https://i.imgur.com/zysmNXE.jpg

以下是我使用各种指南编写的基本 c++ 代码,它可以在终端中编译和运行,但是我没有从 AT 命令得到任何响应,更重要的是,据我所知它们实际上并没有被执行.我尝试将假号码更改为我的个人号码,但没有任何作用。

#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main ()
{  

    int connection;

    printf("Opening connection \n");
    connection = serialOpen("/dev/ttyAMA0", 9600);
    delay(1000);
    printf("Connection:  %d\n", connection);
    printf("\n");

    //Set gsm to text mode
    serialPuts(connection,"AT+CMGF \r\n");
    delay(1000);

    //Number that the message should be sent to
    serialPuts(connection,"AT+CMGS=\"12345678900\"\r\n");
    delay(1000);

    //The message
    serialPuts(connection,"Hello World");
    delay(1000);

    //Print ctrl+x
    serialPuts(connection,"\x1A");

    delay(1000);

    printf("Done \n");

    return 0 ;
}

据我所知,它不起作用的可能原因有 3 个;

  • pi 可能存在配置/设置问题
  • 我接线错误
  • sim/模块不工作

我只是不确定如何测试/找出导致问题的原因。如果我可以让我的代码在执行“serialPuts”之后输出 AT 命令的响应,这可能会帮助我弄清楚发生了什么,但我并没有那么幸运。或者,如果有人知道为什么这些命令似乎不起作用,或者可以为我提供一些调试/测试它们的方法,那就太好了。

【问题讨论】:

  • 您不想自己重新发明这个轮子——您描述的任务涉及多个相当复杂的协议堆栈:基于 TCP 的 Web 服务基于 IP(SLIP 或 PPP)。幸运的是,RPi 运行 Linux,并且所有必要的部分都已经存在。
  • 我不熟悉那个设备或 API,但必须有一个 serialGets() 可以用来回读回复。

标签: c++ raspberry-pi uart at-command sim800


【解决方案1】:

这个问题原来只是一个简单的接线错误。

我已将 sim 模块的 txd 引脚连接到树莓派上的 txd 引脚,因为我的印象是您只需要匹配引脚,但我不认为/意识到 txd 引脚需要转到rxd 引脚代替。改变这些让我看到从模块返回的命令和响应。 为了真正让 gprs 工作,我还需要暂时将 pwr 引脚设置为低电平然后高电平。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多