0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

科技观察员 来源:circuitdigest 作者:萨达姆 2023-01-25 15:45 次阅读

今天我们在这里有一个有趣的项目,我们将 使用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设施。

GSM模块-SIM900A

现在为了使用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服务器以通过或失败字符串进行响应

sparkfun 记录使用 GPRS GSM 和 arduino 发送的数据

使用GPRS GSM和arduino将数据发送到Sparkfun

工作说明:

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

使用GPRS GSM和arduino框图将数据发送到网络服务器

使用GPRS GSM和arduino将数据发送到网络服务器

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

4x4 键盘矩阵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,以通过串行监视器获取响应数据。

使用GPRS GSM和Arduino电路图将数据发送到网络服务器

编程说明:

这个项目的编程部分对于初学者来说有点复杂,但通过做一点练习和注意,你可以理解它。在此代码中,我们使用键盘库来连接用于输入数字的简单键盘。对于输入字母表,我们使用相同的库和键盘,但使用了另一个功能来使其成为字母数字键盘。意味着我们已经使每个键都具有多功能性,并且只需使用 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服务器上发送任何数据,以便从世界任何地方进行监控。

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

    关注

    11

    文章

    6869

    浏览量

    81564
  • GPRS
    +关注

    关注

    21

    文章

    931

    浏览量

    128114
  • Arduino
    +关注

    关注

    180

    文章

    6333

    浏览量

    183489
收藏 人收藏

    评论

    相关推荐

    串口无法通过GSM发送数据服务器

    数据发送到服务器现在的情况是上面的一个串口可以发送数据到上位机下面的一个串口通过测试可以数据发送到PC的串口助手上同时GSM单独测试的时候也是可以发送数据服务器但是 如果
    发表于 08-25 09:18

    求助!!!如何单片的数据通过gprs模块发送到上位机上

    单片机的数据通过gprs模块发送到上位机上,谁能帮忙,万分感谢!!
    发表于 03-07 16:50

    请问SIM900a模块怎么数据打包通过GPRS发送到TCP服务器

    发送一个字符串到TCP服务器,sim900a内嵌TCP/IP协议,在这里已经数据打包好了是吧?那通过GPRS发送,还需要再次打包吗?按照什么协议打包的?我知道,数据由用户的手机到因特网要
    发表于 02-15 06:36

    请问GPRS把采集数据发送到PC端那IP使用的是IPV4吗?

    GPRS采集数据发送到PC端(学校局域网),IP使用的是IPV4还是外网IP?花生壳绑定的是哪个?我使用的模块 UDP下提示发送成功,但是服务器端就是收不到数据,而用TCP根本就发送不成功,求大神们帮忙解决,问题出在哪,什么原因,O(∩_∩)O谢
    发表于 02-25 06:35

    如何stm32的数据通过WiFi发送到yeelink服务器上?

    数据通过WiFi发送到yeelink服务器上,所以想请教一下,如果走通这一个数据流?可以参考一些什么样的资料呢?该从哪里看起呢?
    发表于 06-10 21:47

    如何串行数据存储到数组以发送到服务器

    串行数据存储到一个数组,然后所有数组转换为一个字符串,然后将其发送到服务器。但我不断收到“非类类型”错误我正在排队的神一次响应一个字节。任何建议表示赞赏!代码:全选#include int
    发表于 02-22 08:38

    如何文件内容从Arduino无线发送到计算机?

    数据。两个设备都连接到一个公共路由。 目标。我需要的是一种
    发表于 05-04 06:47

    如何.txt 大文件发送到HTTP服务器

    .txt 大文件发送到 HTTP 服务器,可以通过 ESP8266 12F SPIFFS 1MB 文件发送到上传 HTTP 服务器。我的要求是仅通过网站 [Internet] 在 HTTP
    发表于 05-19 09:00

    Arduino传感数据发送到MySQL服务器

    Arduino传感数据发送到MySQL服务器.zip》资料免费下载
    发表于 10-27 10:13 3次下载
    <b>Arduino</b><b>将</b>传感<b>器</b><b>数据</b><b>发送到</b>MySQL<b>服务器</b>

    Arduino通过串行将温度发送到网络

    Arduino通过串行将温度发送到网络.zip》资料免费下载
    发表于 11-23 09:15 0次下载
    <b>Arduino</b>通过串行将温度<b>发送到</b>网络

    使用ESP 01DHT11测量的温度和湿度数据发送到服务器

    DHT11测量的温度和湿度数据发送到服务器.zip》资料免费下载
    发表于 01-03 11:12 0次下载
    使用ESP 01<b>将</b>DHT11测量的温度和湿度<b>数据</b><b>发送到</b><b>服务器</b>

    数据发送到云端开源硬件

    数据发送到云端开源硬件.zip》资料免费下载
    发表于 01-31 14:25 0次下载
    <b>将</b><b>数据</b><b>发送到</b>云端开源硬件

    个人计算大量数据发送到并存储在云计算的大型服务器中?

    大量数据发送到并存储在大型服务器场中,这些服务器场主要由Google、Amazon、Microsoft和IBM所有。为了使用云数据,必须对其进行访问、处理和分析,然后
    的头像 发表于 09-02 17:44 3149次阅读

    如何设置Arduino IoT消息发送到云板显示

    向您展示如何设置 Arduino IoT 消息发送到云板显示(LCD)。
    的头像 发表于 05-06 15:58 1516次阅读
    如何设置<b>Arduino</b> IoT<b>将</b>消息<b>发送到</b>云板显示<b>器</b>

    数据是怎么样保证准确的从客户端发送到服务器

    数据是怎么样保证准确的从客户端发送到服务器端的?中间涉及到了哪些理论?
    的头像 发表于 07-01 10:09 1090次阅读