设为首页收藏本站

[应用教程] 【DFRobot SIM808板卡测试报告】之二《一键短信发送GPS位置》

沧海笑 发表于 2017-2-3 23:48:28 | 显示全部楼层 |阅读模式 [复制链接]
0 1001
【时间】2016-春节期间,这也是我本次申请评测的一个核心玩法。
【硬件】
1、DFRobot SIM808板卡   1块  (来自DF评测)
2arduino UNO          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


【代码】
[C++] 纯文本查看 复制代码
/*
### 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;//发送一次
  
}

串口助手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连接的不同玩法
2)这块融合度很高的板子,我觉得最大的用途还是在物联网。在第三份报告中,我将介绍MQTT协议上送数据的玩法
3)如何一边使用sim808gps功能,一边使用SMS或者MQTT,是我本次评测的一个遗憾,也希望能学习其他玩家的经验。
这是评测DFROBOT SIM808通信板报告之二,原发arduino.cn

串口助手.png
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则 允许回帖同步到新浪微博  

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表