何处不江南 发表于 2016-1-7 17:41:57

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

鉴于投票结果,大家都比较喜欢模块的教程。技术宅Roy将会寻找受众比较广,又问题较多的模块给大家带来使用教程。希望大家在本微信找到自己有用的信息,多谢支持。

先上个图:
这个模块为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端,下载下面程序。   void setup() {    //设置引脚为输出模式    pinMode(3,OUTPUT);    pinMode(4,OUTPUT);    pinMode(5,OUTPUT);    //GSM开机时序   
digitalWrite(5,HIGH);   
delay(1500);   
digitalWrite(5,LOW);
}
void loop()   {   
digitalWrite(3,LOW);//使能GSM的TX、RX   
digitalWrite(4,HIGH);//关闭GPS的TX、RX

3、打开串口助手软件S1按键拨到Comm端,S2按键拨到USB端。Uart Select串口选择开关拨到中间。打开串口助手软件,默认波特率为9600bps,勾选发送新行。此时STAT灯亮,模块启动,如果没有启动可以按下RST复位键,重新开启。
4、上传数据步骤:AT 同步AT+CSTT 设置APNAT+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’即可
于是在我的服务器上就收到了以下的数据。
用串口助手毕竟只能测试,我们可不能忘记了我们的目的所以我们必须编写Arduino上的指令来发送数据。同样我们需要一个接收数据的服务器,这次除了自己的服务器测试,我还把数据同样传到了我们的老朋友yeelink上。
二、Arduino程序。
1、硬件连接扩展板接到主控板UNO,SIM卡插好。USB线、外接电源接好。
2、下载程序扩展板S1开关拨到Prog端,下载下面程序。
// for yeelink api
#define APIKEY         "59a4ea38a9909344b0ebfaff59exxxxx" // replace your yeelink api key here
//replace the device ID and sensor ID for temperature sensor.
#define device_id       341588 // replace your device ID
#define sensor_id       381410 // replace your sensor ID
   void setup()
{
   //设置引脚为输出模式
   pinMode(3,OUTPUT);
   pinMode(4,OUTPUT);
   pinMode(5,OUTPUT);
   
   digitalWrite(5,HIGH);
   delay(1500);
   digitalWrite(5,LOW);
   
   digitalWrite(3,LOW);//使能GSM的TX、RX
   digitalWrite(4,HIGH);//关闭GPS的TX、RX
    //设置波特率
    Serial.begin(9600);
    //等待call ready
    delay(5000);
    delay(5000);
    delay(5000);
}
unsigned long time = 0;

void loop()   
{
    //发送AT命令同步
    Serial.println("AT");
    delay(2000);
    Serial.println("AT");
    delay(5000);
   while(1)
   {
       Serial.println("AT+CIPSTART=\"TCP\",\"api.yeelink.net\",80");
       delay(5000);
       Serial.println("AT+CIPSEND");
       delay(2000);
      String cmd;
      String thisData = String(analogRead(A0));         
      time = millis();      
      cmd = "POST /v1.1/device/";
       cmd += String(device_id);
      cmd += "/sensor/";
      cmd += String(sensor_id);
       cmd += "/datapoints";
       cmd += " HTTP/1.1\r\n";
       cmd += "Host: api.yeelink.net\r\n";
       cmd += "Accept: *";
       cmd += "/";
       cmd += "*\r\n";
       cmd += "U-ApiKey: ";
       cmd += APIKEY;
       cmd += "\r\n";
       cmd += "Content-Length: ";
       int thisLength = 10 + thisData.length();
       cmd += String(thisLength);
       cmd += "\r\n";
       cmd += "Content-Type: application/x-www-form-urlencoded\r\n";
       cmd += "Connection: close\r\n";
       cmd += "\r\n";
       cmd += "{\"value\":";
       cmd += thisData;
       cmd += "}\r\n";
       Serial.print(cmd);
       delay(2000);
       Serial.write(26);
       delay(5000);
       Serial.println("AT+CIPCLOSE");
       delay(2000);
   }
}

再把S1拨回来。下图为传到我自己服务器收到的数据
下图为yeelink收到数据后的显示可以看到每条指令之间都有很长的延时,这也是GPRS的一个缺点,反应比较慢(没有测试这个延时的最小值,需要很快速度的童鞋可以自己改下延时速度测试下极限速度)

liudaosixway

kevinzhang19701 发表于 2016-1-7 21:16:13

:handshake有意思,有借鉴。

dsweiliang 发表于 2016-1-8 10:59:18

感谢分享

何处不江南 发表于 2016-1-8 12:42:52

kevinzhang19701 发表于 2016-1-7 21:16
有意思,有借鉴。

不知道最近什么板子最火啊?

kevinzhang19701 发表于 2016-1-8 12:45:43

何处不江南 发表于 2016-1-8 12:42
不知道最近什么板子最火啊?

貌似大力在推DFRobot Bluno M3

丄帝De咗臂 发表于 2016-1-10 18:06:19

我也有这个模块,可惜还没用起来,感谢LZ这下有教程了

-nUzdgTI 发表于 2021-3-9 16:43:28

这个模块叫啥
页: [1]
查看完整版本: 如何使用GPRS/GPS/GSM模块---GPRS使用