【Dfrobot Sim808板卡测试报告】之二《一键短信发送GPS位置》-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4077|回复: 1

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

[复制链接]
发表于 2017-2-1 23:48 | 显示全部楼层 |阅读模式
本帖最后由 沧海笑1122 于 2017-2-4 23:35 编辑

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

【基本想法】

逻辑框图.png

代码:
[mw_shl_code=cpp,true]/*
### 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[MESSAGE_LENGTH];
//int messageIndex = 0;
//char phone[16];
//char datetime[24];
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[5];
      dtostrf(lat,2,2,s_lat);//把lat转换为两位整数,两位小数的字符串
      msg=msg+s_lat;
      //计算经度
      char s_lon[5];
      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[12]= "151********";//请替换为您的手机号
    char smsmessage[30];
    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;//发送一次

}[/mw_shl_code]
【完成效果】
串口助手2.png

1)上电后,如果GPS数据获取,则LED会快速闪灯2次,如此循环。
2)如果您需要发送位置短信,按动按键后,您的设定手机号会收到位置短信
Screenshot_2017-02-01-23-50-51.png
【接下来的玩法】
一是可以将其放入一个透明外壳内,按键和LED直接引出,不一定需要PCB,供电采用9V电池即可。这样,一个完成度较高的,基于SIM808GPS功能以及SMS功能的装置就完成了。
二是将GPS数据通过TCP上送至物联网(如tlink.io,并且利用其电子围栏功能,对用户的GPS位置进行监测,一旦越界,可以通过微信、短信以及邮件方式报警。此功能的玩法没有技术问题,我在第一份测试报告中,已经介绍了用TCP上传LM35的玩法,只要把GPS数据读出,上送即可。在我的第三份报告中,我将介绍通过MQTT协议将LM35数据上送,并且激活微信告警的玩法。

【评测感想】
1)这块SIM808做工精良,我测试了将其与莱昂纳多、UNO连接的不同玩法。DF官方库对莱昂纳多的支持个别地方不是很好(所以本报告使用UNO)。期待完善。
2)这块融合度很高的板子,我觉得最大的用途还是在物联网。在第三份报告中,我将介绍MQTT协议上送数据的玩法。有建议DF官方,将MQTT的玩法与DF官方库更好融合。
3)如何一边使用sim808gps功能,一边使用SMS或者MQTT,是我本次评测的一个遗憾,也希望能学习其他玩家的经验。



发表于 2017-2-4 16:06 | 显示全部楼层
UNO真的是非常好用的板子~~百搭
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 03:50 , Processed in 0.122481 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表