如何使用Arduino和GPRS将数据发送到SparkFun服务器

描述

今天我们在这里有一个有趣的项目,我们将 使用Arduino和GPRS将数据发送到SparkFun服务器 。这是一个基于物联网的项目,我们将使用 GPRS, 存在于 GSM 模块 SIM900A 板上, 将一些数据发送到互联网上的网络服务.

在这个项目中,我们将简单地使用4x4字母数字键盘输入一些文本,并使用Arduino和GPRS将其发送到SparkFun网站,从那里您可以通过互联网从任何地方看到这些数据。在这里,我们还附加了一个16x2 LCD以在本地查看数据。这种数据发送技术在物联网项目中非常有用,您希望从世界任何地方监控事物,例如监控温度和湿度,监控车辆位置,监控心跳监控空气污染水平等。

所需组件:

  1. 阿杜伊诺
  2. GSM模块SIM900A
  3. 16x2 液晶显示器
  4. 4x4 矩阵键盘
  5. 面包板或印刷电路板
  6. 连接跳线
  7. 电源 12v
  8. SIM卡

在GSM模块中使用GPRS:

在这里,我们使用带有SIM卡的普通GSM模块进行GPRS连接。在这个项目中,GPRS负责将数据发送到Sparkfun服务器。以前我们做过很多项目,使用 Wi-Fi 模块 ESP8266 通过互联网将数据发送到不同的服务器。但这次我们使用了GPRS。

GPRS代表通用分组无线电服务,它是一种基于分组的无线通信服务,其数据速率为56-114kbps,并提供与互联网的连接。

对于GPRS,我们不需要购买任何特殊的模块或硬件,因为GSM已经内置了GPRS设施。

服务器

现在为了使用GPRS将数据发送到服务器,首先我们需要初始化GSM模块。

初始化 GSM 的命令:

AT :- this command is used to check whether GSM module is responding or not.

AT+CPIN? :- this command is used to check whether SIM card is inserted in GSM Module or not.
ATE0 :- is used for disabling echo

ATE1 :- is used for enabling echo

用于初始化 GPRS 互联网连接的命令:

AT+CIPSHUT :- to close TCP Port Explicitly means disconnect connection if any

AT+CGATT? :- Checking SIM card has internet connection or not

AT+CSTT = "APN","userName","Pass" :- connect to internet

(ex; AT+CSTT="airtelgprs.com","","")

AT+CIICR :- bring up with the wireless network. Checking SIM card has data pack or balance

AT+CIFSR :- get IP (sometimes without this command GSM do not work so use this command)

AT+CIPSTART = ”TCP”,”SERVER IP”,”PORT” :- is used for creating TCP connection with the server that we provide in place of SERVER IP

AT+CIPSEND :- this command is used for sending data to the server. After input, this command server asks for data.

输入数据后,我们将 26 发送到服务器。如果一切正常,则数据将成功发布到服务器, SparkFun服务器以通过或失败字符串进行响应

服务器

服务器

工作说明:

从GSM模块的GPRS发送数据的过程很容易。在这个项目中,我们将通过使用键盘键入来向服务器发送一些字符串或单词。LCD上将出现相同的字符串或单词,然后按D/OK将输入字符串发送到服务器。在这里,我们创建了一个字母数字键盘,用于将字符或数值输入Arduino或LCD。C/clear被编程为退格键。

服务器

服务器

字母数字是一种使用相同的 4x4 矩阵 Kepad 键盘输入数字和字母的方法。在这里,我们为Arduino编写了相同的4x4键盘以接受字母表。检查文章末尾的完整代码。

服务器服务器

电路说明:

为了 将数据发送到SparkFun Server ,我们需要将键盘和GSM模块连接到Arduino。在这个项目中,我们使用Arduino从键盘获取输入字符串,并将命令发送到GSM / GPRS模块。GSM/GPRS用于与互联网通信,以便将数据发送到Sparkfun服务器。GSM模块的Rx和Tx引脚分别与Arduino的引脚D3和D2直接连接(Arduino和GSM的接地必须相互连接)。16x2 LCD 用于显示输入字符串以及显示欢迎消息和数据发送状态。此 16x2 LCD 的引脚(即 Rs、en、d4、d5、d6 和 d7)分别与 Arduino 的引脚编号 14、15、16、17、18 和 19 连接。4x4键盘用于Arduino的输入字符串,其行引脚R1,R2,R3,R4直接链接到Arduino的引脚编号11,10,9,8,键盘C1,C2,C3的Colum引脚与Arduino的引脚编号7,6,5,4链接。

在这里,我们还将GSM Tx引脚连接到Arduino的Tx,以通过串行监视器获取响应数据。

服务器

编程说明:

这个项目的编程部分对于初学者来说有点复杂,但通过做一点练习和注意,你可以理解它。在此代码中,我们使用键盘库来连接用于输入数字的简单键盘。对于输入字母表,我们使用相同的库和键盘,但使用了另一个功能来使其成为字母数字键盘。意味着我们已经使每个键都具有多功能性,并且只需使用 10 个键即可输入所有字符和整数。

如果我们按键 2 (ABC2),它将显示“A”,如果我们再次按下它,那么它将用“B”替换“A”,如果我们再次按下它,那么它将在 LCD 中的同一位置显示“C”。如果我们在按下某个键后等待一段时间,光标将自动移动到LCD中的下一个位置。现在我们可以输入下一个字符或数字。相同的过程应用于其他键。它的工作原理与旧手机中的键盘相同。

下面我们包含了 Keypad.h 库并为键定义数组矩阵:

#include                // keypad library for interfacing keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
int x=0;
int y=0;
int n=0;
int minValue=0;
int maxValue=0;
char keyPress=0;
int keyPressTime=100;
String msg="";

char hexaKeys[ROWS][COLS] = 
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad

给定的 void getkey 函数用于输入字母表

void getkey(int minValue, int maxValue, char keyPress)
{
   int ch=minValue;
   int pressed=1;
   char key=keyPress;
   lcd.noBlink();
   for(int i=0;iif(key==keyPress)
      {
         lcd.setCursor(x,y);
         lcd.print(alpha[ch]);
         ch++;
         if(ch>maxValue)
         ch=minValue;
         i=0;   
      }
      ....
      .....

下面的 void initGSM( ) 和 void initGPRS() 函数用于初始化 GSM 模块和 GPRS

void initGSM()
{
  connectGSM("AT","OK");
  connectGSM("ATE1","OK");
  connectGSM("AT+CPIN?","READY");
}
void initGPRS()
{
  connectGSM("AT+CIPSHUT","OK");
  connectGSM("AT+CGATT=1","OK");
  connectGSM("AT+CSTT=\\"airtelgprs.com\\",\\"\\",\\"\\"","OK");
  connectGSM("AT+CIICR","OK");
  delay(1000);
  Serial1.println("AT+CIFSR");
  delay(1000);
}

下面的部分代码用于创建 URL 并通过 URL 将数据发送到服务器。

else if(key == 'D')
    {
      lcd.clear();
      lcd.noBlink();
      lcd.print("Sending Data");
      lcd.setCursor(0,1);
      lcd.print("To Server");
      url="GET /input/";
      url+=publicKey;
      url+="?private_key=";
      url+=pvtKey;
      url+="&log=";
      url+=msg;
      url+=" HTTP/1.0\\r\\n\\r\\n";
      String svr=Start+","+ip+","+port;
      delay(1000);
      connectGSM(svr,"CONNECT");
      delay(1000);
      int len = url.length();
      String str="";
      str=SendCmd+len;
      sendToServer(str);

因此,这就是我们如何通过GPRS在SparkFun服务器上发送任何数据,以便从世界任何地方进行监控。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分