极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16494|回复: 0

SIM808调试过程中遇到的一些问题

[复制链接]
发表于 2017-6-18 15:08:31 | 显示全部楼层 |阅读模式
新人求教,我在调试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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 23:17 , Processed in 0.036286 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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