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

本帖最后由 何处不江南 于 2016-1-7 17:49 编辑

鉴于投票结果,大家都比较喜欢模块的教程。技术宅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的一个缺点,反应比较慢(没有测试这个延时的最小值,需要很快速度的童鞋可以自己改下延时速度测试下极限速度)
如果喜欢观看类似科技新奇事物,以及了解创客圈最新资讯,或者您对Arduino有所耳闻,可以关注我们微信公众号,一定会带给您最新的资讯,最实用的教程,以及创客最新的玩意。

QQ截图20151111152829.png (33 KB, 下载次数: 0)

下载附件

保存到相册

2016-1-7 17:41 上传

标签: Arduino教程