鉴于投票结果,大家都比较喜欢模块的教程。技术宅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 设置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’即可
于是在我的服务器上就收到了以下的数据。
用串口助手毕竟只能测试,我们可不能忘记了我们的目的所以我们必须编写 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的一个缺点,反应比较慢(没有测试这个延时的最小值,需要很快速度的童鞋可以自己改下延时速度测试下极限速度)
|