本帖最后由 沧海笑1122 于 2017-2-4 23:35 编辑
【时间】2016-春节期间,这也是我本次申请评测的一个核心玩法。 【硬件】 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连接的不同玩法。DF官方库对莱昂纳多的支持个别地方不是很好(所以本报告使用UNO)。期待完善。 (2)这块融合度很高的板子,我觉得最大的用途还是在物联网。在第三份报告中,我将介绍MQTT协议上送数据的玩法。有建议DF官方,将MQTT的玩法与DF官方库更好融合。 (3)如何一边使用sim808的gps功能,一边使用SMS或者MQTT,是我本次评测的一个遗憾,也希望能学习其他玩家的经验。
|