沧海笑 发表于 2017-2-3 23:48:28

【DFRobot SIM808板卡测试报告】之二《一键短信发送GPS位置》

【时间】2016-春节期间,这也是我本次申请评测的一个核心玩法。【硬件】1、DFRobot SIM808板卡 1块(来自DF评测)2、arduino UNO          1块3、按钮   1只 (包括10K下拉电阻一只)4、LED一只(含220欧姆限流电阻)5、面包板、杜邦线   若干6、供电:9V电池一只 (放入一只透明PVC盒)硬件接线:(1)SIM808板卡与UNO叠装,外加9V独立电源。(2)D4作为按键输入,加10K欧姆下拉电阻(3)D13作为显示GPS数据读取状态的LED,加220欧姆限流电阻

【软件】1、arduino IDE 1.6.132、github下载并安装DFSIM808的库   https://github.com/DFRobot/DFRobot_SIM808
【基本想法】


【代码】/*
### Get GPS data
1. This example is used to test SIM808 GPS/GPRS/GSM Shield's reading GPS data.
2. Open the SIM808_GetGPS example or copy these code to your project
3. Download and dial the function switch to Arduino
4. open serial helper
4. Place it outside, waiting for a few minutes and then it will send GPS data to serial

create on 2016/09/23, version: 1.0
by jason
/
评测内容:监测到按键后,通过GSM发送SMS短信,报告GPS位置一次
2017-02-01
沧海笑1122
//结果:触动按键后,发送位置短信一次,达到预期效果
*/
#include <DFRobot_sim808.h>
DFRobot_SIM808 sim808(&Serial);
float lat,lon; //经纬度
int smsnum=1;//发送次数
//#define MESSAGE_LENGTH 160
//char message;
//int messageIndex = 0;
//char phone;
//char datetime;
String msg ="";//位置短信内容

void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); //用于显示收到查询短信(快闪动3次,500ms)并且发送位置短信
pinMode(4,INPUT);               //d4--按键输入后发送位置短信
Serial.print("Sim808 begin\r\n");
   //******** Initialize sim808 module *************
while(!sim808.init()) {
      delay(1000);
      Serial.print("Sim808 init error\r\n");
}
delay(3000);
//************* Turn on the GPS power************
if( sim808.attachGPS())
      Serial.println("Open the GPS power success");
else
      Serial.println("Open the GPS power failure");

}

void loop() {
   int key =digitalRead(4);                   //读取d4数字口状态
   //************** Get GPS data *******************
   if (sim808.getGPS()) {
    Serial.print("latitude :");
    Serial.println(sim808.GPSdata.lat);
    Serial.print("longitude :");
    Serial.println(sim808.GPSdata.lon);
   getgpsdata() ;
    //************* Turn off the GPS power ************
    sim808.detachGPS();
       digitalWrite(13, HIGH);   // LED13闪动2次,显示GPS数据收到
       delay(200);                  
      digitalWrite(13, LOW);
       delay(200);
      digitalWrite(13, HIGH);
      delay(200);                  
      digitalWrite(13, LOW);
      delay(2000);
    //---------------------
   if (key==HIGH) {
         delay(60); //消抖延时
   if (key==HIGH)                        
       {
         digitalWrite(13, HIGH);   // LED13闪动1次
         delay(1000);                  
         digitalWrite(13, LOW);
      sendasms();//发送一次
       }
   }
}
}

void getgpsdata() //获取gps数据
{
//第一步:************** Get GPS data *******************
    delay(2000);
    Serial.print("lat :");
    Serial.println(sim808.GPSdata.lat);
    Serial.print("lon :");
    Serial.println(sim808.GPSdata.lon);
    lat=sim808.GPSdata.lat;
    lon=sim808.GPSdata.lon;
//第二步:生成经纬度短信内容
   //计算纬度
      msg ="";
      char s_lat;
      dtostrf(lat,2,2,s_lat);//把lat转换为两位整数,两位小数的字符串
      msg=msg+s_lat;
      //计算经度
      char s_lon;
      dtostrf(lon,2,2,s_lon);//把lon转换为两位整数,两位小数的字符串
         msg=msg+","+s_lon;
      Serial.println(msg);
   }

void sendasms() //发送短信
{
    delay(3000);
   //第四步:发送短信息
    Serial.println("send sms now...");
    char PHONE_NUMBER= "151********";//请替换为您的手机号
    char smsmessage;
    int msglen=msg.length()+1;
    msg.toCharArray(smsmessage, msglen);
    Serial.println(smsmessage);
    sim808.sendSMS(PHONE_NUMBER,smsmessage);   //发送短信
   //慢闪,表明已发送
    digitalWrite(13, HIGH);   // LED13闪动
    delay(2000);                  
    digitalWrite(13, LOW);
    delay(1000);
    digitalWrite(13, HIGH);
    delay(2000);                  
    digitalWrite(13, LOW);
    smsnum=0;//发送一次

}


(1)上电后,如果GPS数据获取,则LED会快速闪灯2次,如此循环。(2)如果您需要发送位置短信,按动按键后,您的设定手机号会收到位置短信


【接下来的玩法】一是可以将其放入一个透明外壳内,按键和LED直接引出,不一定需要PCB,供电采用9V电池即可。这样,一个完成度较高的,基于SIM808的GPS功能以及SMS功能的装置就完成了。二是将GPS数据通过TCP上送至物联网(如tlink.io),并且利用其电子围栏功能,对用户的GPS位置进行监测,一旦越界,可以通过微信、短信以及邮件方式报警。此功能的玩法没有技术问题,我在第一份测试报告中,已经介绍了用TCP上传LM35的玩法,只要把GPS数据读出,上送即可。在我的第三份报告中,我将介绍通过MQTT协议将LM35数据上送,并且激活微信告警的玩法。
【评测感想】(1)这块SIM808做工精良,我测试了将其与莱昂纳多、UNO连接的不同玩法(2)这块融合度很高的板子,我觉得最大的用途还是在物联网。在第三份报告中,我将介绍MQTT协议上送数据的玩法(3)如何一边使用sim808的gps功能,一边使用SMS或者MQTT,是我本次评测的一个遗憾,也希望能学习其他玩家的经验。这是评测DFROBOT SIM808通信板报告之二,原发arduino.cn
页: [1]
查看完整版本: 【DFRobot SIM808板卡测试报告】之二《一键短信发送GPS位置》