10479| 0
|
[进阶] 【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.13 2、github下载并安装DFSIM808的库 【基本想法】 【代码】 [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] (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 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed