如何在 C++ 中使用 Raspberry pi3 与 sim800c 通信
How to communicate with sim800c using Raspberry pi 3 in c++
我的最终目标是尝试使用 c++ 程序中的 sim800c 将存储在我的 Raspberry pi 3 上的一些简单数据发送到外部 server/website。我相信最简单的方法是将 "AT commands" 发送到 sim/modem 但是我正在努力做到这一点。我无法弄清楚我实际上应该如何发出 AT 命令或如何检查它们是否正常工作。出于测试目的,我编写了一些代码,一旦我完成这项工作,应该会向 phone 号码发送短信,应该相当直接地找出与服务器通信的 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
可能存在 config/settings 问题
- 我连接错误
- sim/module 不工作
我只是不确定如何解决 testing/finding 导致问题的原因。如果我可以让我的代码在执行 "serialPuts" 之后输出 AT 命令的响应,这可能会帮助我弄清楚发生了什么,但我并没有那么幸运。或者,如果有人知道为什么这些命令似乎不起作用,或者可以为我提供一些方法来 debug/test 它们,那就太好了。
问题原来只是一个简单的接线错误。
我已经将 sim 模块的 txd 引脚连接到树莓派上的 txd 引脚,因为我的印象是你只需要匹配引脚但是我没有 think/realize txd 引脚需要转到 rxd 引脚。改变这些让我看到从模块返回的命令和响应。
为了让 gprs 正常工作,我还需要暂时将 pwr 引脚设置为先低后高。
我的最终目标是尝试使用 c++ 程序中的 sim800c 将存储在我的 Raspberry pi 3 上的一些简单数据发送到外部 server/website。我相信最简单的方法是将 "AT commands" 发送到 sim/modem 但是我正在努力做到这一点。我无法弄清楚我实际上应该如何发出 AT 命令或如何检查它们是否正常工作。出于测试目的,我编写了一些代码,一旦我完成这项工作,应该会向 phone 号码发送短信,应该相当直接地找出与服务器通信的 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 可能存在 config/settings 问题
- 我连接错误
- sim/module 不工作
我只是不确定如何解决 testing/finding 导致问题的原因。如果我可以让我的代码在执行 "serialPuts" 之后输出 AT 命令的响应,这可能会帮助我弄清楚发生了什么,但我并没有那么幸运。或者,如果有人知道为什么这些命令似乎不起作用,或者可以为我提供一些方法来 debug/test 它们,那就太好了。
问题原来只是一个简单的接线错误。
我已经将 sim 模块的 txd 引脚连接到树莓派上的 txd 引脚,因为我的印象是你只需要匹配引脚但是我没有 think/realize txd 引脚需要转到 rxd 引脚。改变这些让我看到从模块返回的命令和响应。 为了让 gprs 正常工作,我还需要暂时将 pwr 引脚设置为先低后高。