如何使用GPRS/GPS/GSM模块---GPRS使用

2016-01-071.9万
AI 快速预览详细 收起
本文介绍了如何使用DFRobot的3合1 GPRS/GPS/GSM模块进行数据传输。首先,通过硬件连接和串口助手测试,确保模块正常工作。接着,使用AT指令设置APN、激活移动场景、建立TCP连接并发送数据。最后,通过Arduino程序实现自动化数据传输,并展示了数据上传到yeelink服务器的过程。
鉴于投票结果,大家都比较喜欢模块的教程。技术宅Roy将会寻找受众比较广,又问题较多的模块给大家带来使用教程。希望大家在本微信找到自己有用的信息,多谢支持。

先上个图:
如何使用GPRS/GPS/GSM模块---GPRS使用图5
这个模块为DFRobot出的一款3合1模块,融合了GPS/GPRS/GSM。

该模块几乎包含了一个手机所拥有的所有基本功能:无线上网,发短信,打电话,GPS定位。

正因为功能繁多所以让各位拥有着又爱又狠,原因是要使用他需要了解比较多的东西。
关于GPS部分其实前面已经发了好几篇文章来阐述如何使用了,这次主要讲讲GPRS的使用。活用GPRS,可以让此模块上的GPS模块真正变的有意义,脱离了电脑,使用无线网络的GPS模块才具有实用价值。

GPRS也就是一般理解上的手机无线网,是介于2G和3G之间的技术,传输速度较慢,最快为100多Kbps适合于少量的数据传输。优点在于有电话信号就能连上网络,适应面非常广。

和GPS一样,在该模块上使用GPRS功能同样是使用AT指令。(注意模块耗电较大需要外部供电),该例程通过GPRS连接了我私人的阿里云服务器,随意发送了点数据,便于观察数据发送的特点哈。

一、使用串口助手测试,步骤如下:
1、硬件连接
扩展板接到主控板UNO,SIM卡插好。
USB线、外接电源接好。
2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。
  1.    void setup() {    //设置引脚为输出模式    pinMode(3,OUTPUT);    pinMode(4,OUTPUT);    pinMode(5,OUTPUT);    //GSM开机时序     
  2. digitalWrite(5,HIGH);   
  3. delay(1500);   
  4. digitalWrite(5,LOW);  
  5. }
  6. void loop()     {   
  7. digitalWrite(3,LOW);//使能GSM的TX、RX   
  8. digitalWrite(4,HIGH);//关闭GPS的TX、RX
复制代码


3、打开串口助手软件
S1按键拨到Comm端,S2按键拨到USB端。
Uart Select串口选择开关拨到中间。
打开串口助手软件,默认波特率为9600bps,勾选发送新行。此时STAT灯亮,模块启动,如果没有启动可以按下RST复位键,重新开启。

4、上传数据
步骤:
AT 同步
AT+CSTT 设置APN
AT+CIICR 激活移动场景
AT+CIFSR 获得本地IP地址
AT+CIPSTART="TCP","xxx.xxx.xxx.xxx",8081 建立TCP连接
AT+CIPSEND 发送数据
出现“>” ,发送下面数据
{"method": "update","gatewayNo": "02","userkey": "5d3eeec03bc747d7a23ab7d99c9340ea"}&^!()
输入完后按‘ctrl+z’即可
AT+CIPSEND 发送数据
出现“>” ,发送下面数据
{"method": "upload","data":[{"Name":"T1","Value":"25"}]}&^!
输入完后按‘ctrl+z’即可
如何使用GPRS/GPS/GSM模块---GPRS使用图4
于是在我的服务器上就收到了以下的数据。
如何使用GPRS/GPS/GSM模块---GPRS使用图3

用串口助手毕竟只能测试,我们可不能忘记了我们的目的所以我们必须编写Arduino上的指令来发送数据。同样我们需要一个接收数据的服务器,这次除了自己的服务器测试,我还把数据同样传到了我们的老朋友yeelink上。

二、Arduino程序。

1、硬件连接
扩展板接到主控板UNO,SIM卡插好。
USB线、外接电源接好。

2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。

  1. // for yeelink api
  2. #define APIKEY         "59a4ea38a9909344b0ebfaff59exxxxx" // replace your yeelink api key here
  3. //replace the device ID and sensor ID for temperature sensor.
  4. #define device_id       341588 // replace your device ID
  5. #define sensor_id       381410 // replace your sensor ID
  6.    void setup()
  7. {
  8.    //设置引脚为输出模式
  9.    pinMode(3,OUTPUT);
  10.    pinMode(4,OUTPUT);
  11.    pinMode(5,OUTPUT);
  12.    
  13.    digitalWrite(5,HIGH);
  14.    delay(1500);
  15.    digitalWrite(5,LOW);
  16.    
  17.    digitalWrite(3,LOW);//使能GSM的TX、RX
  18.    digitalWrite(4,HIGH);//关闭GPS的TX、RX
  19.     //设置波特率
  20.     Serial.begin(9600);
  21.     //等待call ready
  22.     delay(5000);
  23.     delay(5000);
  24.     delay(5000);
  25. }
  26. unsigned long time = 0;
  27. void loop()   
  28. {
  29.     //发送AT命令同步
  30.     Serial.println("AT");  
  31.     delay(2000);
  32.     Serial.println("AT");  
  33.     delay(5000);  
  34.    while(1)
  35.    {
  36.        Serial.println("AT+CIPSTART="TCP","api.yeelink.net",80");
  37.        delay(5000);
  38.        Serial.println("AT+CIPSEND");
  39.        delay(2000);
  40.         String cmd;
  41.         String thisData = String(analogRead(A0));         
  42.         time = millis();      
  43.         cmd = "POST /v1.1/device/";
  44.        cmd += String(device_id);
  45.         cmd += "/sensor/";
  46.         cmd += String(sensor_id);
  47.        cmd += "/datapoints";
  48.        cmd += " HTTP/1.1\r\n";
  49.        cmd += "Host: api.yeelink.net\r\n";
  50.        cmd += "Accept: *";
  51.        cmd += "/";
  52.        cmd += "*\r\n";
  53.        cmd += "U-ApiKey: ";
  54.        cmd += APIKEY;
  55.        cmd += "\r\n";
  56.        cmd += "Content-Length: ";
  57.        int thisLength = 10 + thisData.length();
  58.        cmd += String(thisLength);
  59.        cmd += "\r\n";
  60.        cmd += "Content-Type: application/x-www-form-urlencoded\r\n";
  61.        cmd += "Connection: close\r\n";
  62.        cmd += "\r\n";
  63.        cmd += "{"value":";
  64.        cmd += thisData;
  65.        cmd += "}\r\n";
  66.        Serial.print(cmd);
  67.        delay(2000);
  68.        Serial.write(26);
  69.        delay(5000);
  70.        Serial.println("AT+CIPCLOSE");
  71.        delay(2000);
  72.    }
  73. }
复制代码


再把S1拨回来。
下图为传到我自己服务器收到的数据
如何使用GPRS/GPS/GSM模块---GPRS使用图2

下图为yeelink收到数据后的显示
如何使用GPRS/GPS/GSM模块---GPRS使用图1
可以看到每条指令之间都有很长的延时,这也是GPRS的一个缺点,反应比较慢(没有测试这个延时的最小值,需要很快速度的童鞋可以自己改下延时速度测试下极限速度)


liudaosixway

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
-nUzdgTI
-nUzdgTI
这个模块叫啥
丄帝De咗臂
丄帝De咗臂
我也有这个模块,可惜还没用起来,感谢LZ这下有教程了
dsweiliang
dsweiliang
感谢分享
kevinzhang19701
kevinzhang19701
:handshake有意思,有借鉴。
kevinzhang19701
kevinzhang19701回复何处不江南
貌似大力在推DFRobot Bluno M3
何处不江南
何处不江南
作者
回复kevinzhang19701
不知道最近什么板子最火啊?
- 没有更多了 -