|
|
新人求教,我在调试SIM808时遇到了一些问题。
我想实现的功能是:
1、当按钮(4)按下后,发送包含地理位置的短息到指定号码。
2、当SIM808收到查询短信后,反馈包含地理位置的短息到指定号码。
具体遇到的问题是:
1、进入SIM808后没有反馈地理位置信息(如图所示)
2、按下按钮后电脑会响应表示串口弹开,同时手机没有反。
可排除的干扰是:
1、卡是有话费的。
2、接线是正确的。
3、电源是9V 1A
4、单独测试SIM808(功能开关拨到2),各个命令(获取GPS数据,发送短信)均可正确响应。
在调试之前我参考了沧海笑前辈的帖子:http://www.dfrobot.com.cn/commun ... mp;highlight=sim808
同时也看了官方库里给的示列(SIM808_SMSread)
附代码如下:
#include <DFRobot_sim808.h>
#include <sim808.h>
DFRobot_SIM808 sim808(&Serial);
#include <SoftwareSerial.h>
/*
短信
*/
//定义变量
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(4,INPUT); //d4--按键
pinMode(13, OUTPUT); //GPS指示灯定义
pinMode(12, OUTPUT); //发送指示灯定义
/*用于显示收到查询短信(快闪动3次,500ms)
并且发送位置短信*/
digitalWrite(12, LOW);
digitalWrite(13, LOW);
Serial.print("Sim808 begin\r\n");
while(!sim808.init()) {
delay(1000);
Serial.print("Sim808 init error\r\n");
}
delay(3000);
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数字口状态
//************** 获取GPS数据 *******************
if (sim808.getGPS()) {
Serial.print("latitude :");
Serial.println(sim808.GPSdata.lat);
delay(10000);
Serial.print("longitude :");
Serial.println(sim808.GPSdata.lon);
getgpsdata();
/*关掉GPS电源*/
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_s();//发送一次
}
}
}
messageIndex = sim808.isSMSunread();
Serial.print("messageIndex: ");
Serial.println(messageIndex);
//*********** 如果读取到短信 (被动查询)***********
if (messageIndex > 0) {
sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//***********读取完成后删除短信**********
sim808.deleteSMS(messageIndex);
Serial.print("From number: ");
Serial.println(phone);
Serial.print("Datetime: ");
Serial.println(datetime);
Serial.print("Recieved Message: ");
Serial.println(message);
digitalWrite(12, HIGH); // LED13闪动1次
delay(1500);
digitalWrite(12, LOW);
sendasms_u(); //发送一次
}
}
void getgpsdata() //获取gps数据函数
{
//第一步:************** Get GPS data *******************
delay(2000);
Serial.print("lat :");
Serial.println(sim808.GPSdata.lat);
delay(2000);
Serial.print("lon :");
Serial.println(sim808.GPSdata.lon);
delay(2000);
lat=sim808.GPSdata.lat;
delay(100);
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_s() //发送函数_1 主动发送
{
delay(3000);
Serial.println("send sms now...");
char PHONE_NUMBER[12]= "147***********";//请替换为您的手机号
char smsmessage[30];
int msglen=msg.length()+1;
msg.toCharArray(smsmessage, msglen);
Serial.println(smsmessage); //串口(PC端)显示转换后的内容,以便确认
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;//发送一次
}
void sendasms_u() //发送函数_2,查询信息
{
delay(3000);
Serial.println("send sms now...");
char PHONE_NUMBER[12]= "147***********";//请替换为您的手机号
char smsmessage[30];
int msglen=msg.length()+1;
char sos = "SOS" ;
msg.toCharArray(smsmessage, msglen);
Serial.println(smsmessage); //
//发送短信
sim808.sendSMS(PHONE_NUMBER,sos);
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;//发送一次
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|