Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Проекты

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.12.2016, 20:57   #1
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию GPS треккер для собачек

Собственно появилась необходимость одеть на своих собачек GPS треккер. Перебрав предложения на ali - чет они меня не впечатлили. Собственно решено было попробовать сделать.
Закуплены модули, аккумулятор и разъем


модули доработаны "отрежь все лишнее"



напечатана коробочка


и засунуто все в нее




по железу пока все

написан скетч в настоящее время он в большей мере сырой и отладочный - позволяет понять как работать с GSM и GPS модулями
PHP код:

//Подключение библиотек
#include <SoftwareSerial.h>
SoftwareSerial SerialGPS(1011); // RX, TX

#include <AltSoftSerial.h>
AltSoftSerial SerialGsm;

#include <CyberLib.h>// быстрое управление пинами

//#include <leOS2.h>// многозадачность
//leOS2 myOS;  //создать экземпляр класса 
/**********************Переменные************************/
// Общие
String NumberTelefone="+7хххххххххххх" ;// номер управляющего телефона
int x=0//счетчик для всяких циклов



//UART
String InputUART "";// строка для чтения UART модуля GSM

//GSM
String InputGSM "";// строка для чтения UART модуля GSM

//GPS
String IPTrack "5.9.136.109"// IP для передачи данных
String PortTrack "3355"// порт прередачи данных
String InputGPS "";// строка для чтения UART модуля GPS
String IDDataGPS;//Индетификатор данных
String TimeGPS;//170840.00  Время UTC: 17ч. 08м. 40.00 сек.
String reliabilityGPS;//A Статус достоверности: A – достоверные данные, V – недостоверные данные
String LatitudeData;//5509.68339  Широта: 55 градусов, 09.68339 минут
String LatitudeDir;//N N – северная, S – южная
String LongitudeData;//06125.49498 Долгота: 061 градусов, 25.49498 минут
String LongitudeDir;//E E – восточная, W – западная
String HSpeed;//0.204 Горизонтальная скорость (узлов в час)
String Course;//– Направление курса относительно истинного севера (градусы)
String DataGPS;//311015  Дата: 31 октября 2015 года
String MDeclination;//– Магнитное склонение (градусы)
String MDeclinationDir;//– Направление склонения: E – восточное, W – западное
String ModeGPS;//A Режим: A – автономный, D – дифференциальный, E – аппроксимация, N – недостоверные данные
String ChecksumGPS;//*7D Контрольная сумма


void setup()
{
D12_OutD12_Low// пин перезагрузки GSM
  
//открытие портов
 
Serial.begin(115200);
 

settinggsm(); //настройка GSM модуля// 
settingps(); //  настройка GPS  модуля

// запускаем задачи
//myOS.addTask (battery, myOS.convertMs(10000));// запускаем задачу проверки заряда 16*600 = раз в 10 секунд

Serial.println ("Setup end");
//SmsSend("Zapusk OK", NumberTelefone);
 
}

void loop() 
/*_________________________Проверка буферов UART________________________________________*/

 
if (SerialGPS.available()) { gpsread();};     //если есть данные GPS уходим в подпрограмму чтения
 
if (Serial.available())    { pcread(); };     //если есть данные c компа уходим в подпрограмму чтения
 
if (SerialGsm.available()) { gsmread();};     //если есть данные GSM/GPRS уходим в подпрограмму чтения





и отдельно функции -они на разных вкладках -потому немного отдельно
PHP код:
void settinggsm()
Serial.println("Reset GSM");
  
D12_Highdelay(5000); D12_Lowdelay(5000); //перезагрузка GSM
  
SerialGsm.begin(115200);// поднятие соединения
  //настройка модуля
  
CommandGSMR("AT\r""OK"500); // проверка связи с модемом
  
CommandGSMR("AT+IPR=9600\r""OK"500); //Изменение скорости UART
  
SerialGsm.begin(9600); delay(2000); // перезапуск соединения
  
CommandGSMR("AT+CMEE=2\r""OK"500); //режим сообщений ошибок
  
CommandGSMR("ate0\r""OK"500); //отключение эха порта
  
CommandGSMR("AT+CREG?\r""+CREG: 1"500); //проверка регистрации в сети
  //CommandGSMR("AT+CREG=0", "OK", 500);// запрет выдачи сообщений о смене регистрации сети

  //настройка СМС
  
CommandGSMR("AT+CMGF=1\r""OK"500); //включение текстового режима СМС
  
CommandGSMR("AT+CSCS=\"GSM\"\r""OK"500); //включение  режима кодировки СМС
  
CommandGSMR("AT+CNMI=2,2\r""OK"500); //включение  режима СМС сразу в монитор

//  ///*+++++++++++++++++++Настройка GPRS++++++++++++++++++++*/
//  //CommandGSM("AT+CIPSHUT\r", "OK",500);//Сброс всех подключений
//CommandGSMR("AT+CSTT= \"internet\", \"gdata\", \"megafon\"\r", "OK", 500); //Настройка точки доступа сети GPRS
//CommandGSMR("AT+CIICR\r", "OK", 5000); //Соединение с точкой доступа GPRS
//CommandGSMR("AT+CGATT?\r", "CGATT:1", 2000); //проверка регистрации в сети GPRS
//CommandGSMR("AT+CIFSR\r", "OK", 500); //Получение IP GPRS


};
void settingps()
SerialGPS.begin(9600); 
uint8_t buf[] = {0xB50x620x060x080x060x000x600xEA0x010x000x010x000x600x8C}; SerialGPS.write(bufsizeof(buf));  // данные 60 сек
delay(1000);
while(
SerialGPS.available()) { delay(2); SerialGPS.read(); };// очищаем буфер

};

void battery(){
Serial.print("Battery=");
Serial.println(A3_Read);
};

void CommandGSMR(String SString S1int t){ 
  
delay(100);// делаем паузу на предудущие всякие
  
while(SerialGsm.available()) { delay(2); SerialGsm.read(); }// очищаем буфер
  
SerialGsm.println(S); // шлем команду
   
delay(t);// пауза на ожидание ответа
  
for (int x 010++) 
  {
   while (
SerialGsm.available() > 0)//если в буфере что есть -читаем
  
char c SerialGsm.read();
    if (
== '\n') { break;} else { InputGSM += c;}}
    if ( 
InputGSM.indexOf(S1) >= ){InputGSM ""Serial.print (S); Serial.println ("-OK"); break; }else {InputGSM "";};
    if (
== 9) {Serial.print (S); Serial.println ("-NO");settinggsm();};
    
delay(300);
    };};
    
void CommandGSM(String SString S1int t){ 
  
delay(100);// делаем паузу на предудущие всякие
  
while(SerialGsm.available()) { delay(2); SerialGsm.read(); }// очищаем буфер
  
SerialGsm.println(S); // шлем команду
   
delay(t);// пауза на ожидание ответа
  
for (int x 010++) 
  {
   while (
SerialGsm.available() > 0)//если в буфере что есть -читаем
  
char c SerialGsm.read();
    if (
== '\n') { break;} else { InputGSM += c;}}
    if ( 
InputGSM.indexOf(S1) >= ){InputGSM ""Serial.print (S); Serial.println ("-OK"); break; }else {InputGSM "";};
    if (
== 9) {Serial.print (S); Serial.println ("-NO");};
    
delay(300);
    };};
    
void UartGsm(){
InputUART InputUART.substring(4);
Serial.print("Command GSM-");

Serial.println(InputUART);delay(300); 
SerialGsm.println(InputUART);
delay(300); 
InputUART "";
};

void SmsSend(String textSMSString numberSMS){
SerialGsm.println("AT+CMGS=\""+numberSMS+"\"");
delay(1000);
SerialGsm.print(textSMS);  // отправляем текст
SerialGsm.println((char)26);          // символ завершающий передачу
};

void SmsSend2(){
InputUART InputUART.substring(4);
Serial.println("SMSka");delay(300); 
SerialGsm.println("AT+CMGS=\""+NumberTelefone+"\"");
delay(1000);
SerialGsm.print(InputUART);  // отправляем текст
SerialGsm.print((char)26);          // символ завершающий передачу
Serial.println("ok");
InputUART "";
};
void HttpSend(){
InputUART InputUART.substring(5);
Serial.println("HTTPeshka!!!");delay(300);
CommandGSM("AT+CIPSHUT\r""OK",500);//Сброс всех подключений 
CommandGSM("AT+CIPSTART=\"TCP\",142804.dyn.ufanet.ru,100\r""OK",2000);
SerialGsm.write("AT+CIPSEND");
delay(6000);
SerialGsm.print(InputUART);  // отправляем текст
SerialGsm.print((char)26);          // символ завершающий передачу
Serial.println("ok");
InputUART "";
SerialGsm.write("AT+CIPCLOSE ");
};

void GpsSend(){
Serial.println("GPSka!!!");delay(300);

CommandGSM("AT+CIPSTART=\"TCP\",5.9.136.109,3355\r""CONNECT OK"2000);
SerialGsm.println("AT+CIPSEND");
      
delay(6000);
      
SerialGsm.print("imei:9969609,tracker,1310210424,,F,042445.000,A,5444.3184,N,5601.4117,E,10.00,50,20,20,20,20,20,20,20,20,20");
      
delay(1000);
      
SerialGsm.println((char)26);          // символ завершающий передачу
      
delay(1000);
      
Serial.println("ok GPS");
      
delay(1000);
      
SerialGsm.println("AT+CIPCLOSE");
InputUART "";
};
void gpsread()
{ while (
SerialGPS.available() > 0)
  { 
char d SerialGPS.read();
    if (
== '\n')
    { 
Serial.print("Input_string is: "); Serial.println(InputGPS);
      if ( 
InputGPS.indexOf("GPRMC") >= )
      {
        
char q1 InputGPS.indexOf(",");   char q2 0IDDataGPS InputGPS.substring(0q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); TimeGPS InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); reliabilityGPS InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); LatitudeData InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); LatitudeDir InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); LongitudeData InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); LongitudeDir InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); HSpeed InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); Course InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); DataGPS InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); MDeclination InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf(","q2); MDeclinationDir InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf("*"q2); ModeGPS InputGPS.substring(q2q1);
        
q2 q1 1q1 InputGPS.indexOf("\n"q2); ChecksumGPS InputGPS.substring(q2q1);
        
InputGPS "";
        
        
      
CommandGSM("AT+CIPSTART=\"TCP\","+IPTrack+","+PortTrack+"\r""CONNECT OK"5000);
      
SerialGsm.println("AT+CIPSEND");
      
delay(6000);
      
SerialGsm.print("imei:9969609,tracker,1310210424,,F,"+TimeGPS+","+reliabilityGPS+","+LatitudeData+","+LatitudeDir+","+LongitudeData+","+LongitudeDir+","+HSpeed+","+Course+",1,2,3,4,");
      
delay(1000);
      
SerialGsm.println((char)26);          // символ завершающий передачу
      
delay(1000);
      
Serial.println("ok GPS");
      
delay(1000);
      
SerialGsm.println("AT+CIPCLOSE");
      
Serial.print("Battery=");
Serial.println(A3_Read);
     
      
      
      };
    }
    else {
      
InputGPS += d;
    }
  }

};
void gsmread()
{ while (
SerialGsm.available() > 0)
  { 
char c SerialGsm.read();
    if (
== '\n')
    { 
Serial.println(InputGSM);
      if ( 
InputGSM.indexOf("+CMT") >= ){InputGSM ""smsread();}
      else if ( 
InputGSM.indexOf("+CREG: 2") >= ){InputGSM ""settinggsm();}
      else {
InputGSM "";};
    }
    else { 
InputGSM += c;}
  }
};
void pcread()
{ while (
Serial.available() > 0)
  { 
char d Serial.read();
    if (
== '\r')
    {  
Serial.print("Polucheno-");Serial.println(InputUART);
       if (
InputUART.substring(0,3) == "GSM"){UartGsm();} 
       else if (
InputUART.substring(0,3) == "GPS"){InputUART ""Serial.println("GPSU");GpsSend();}
       else if (
InputUART.substring(0,3) == "SMS"){SmsSend2();} 
       else if (
InputUART.substring(0,4) == "HTTP"){Serial.println("HTTPeshka");HttpSend();}
       else {
InputUART "";};
    }
    else { 
InputUART += d;}
  };
};
void smsread()
{
    
InputGSM "";
    
Serial.println("SMSKA!!!!!!!!");
    
delay(100);
    while (
SerialGsm.available() > 0)
    { 
char c SerialGsm.read();
        if (
== '\n')
        {
            
Serial.print("Text SMS -  ");
            
Serial.print(InputGSM);
            
Serial.println("**");
            if    (
InputGSM.indexOf("fittnes")>= )
                {
uint8_t buf[] = {0xB50x620x060x080x060x000xE80x030x010x000x010x000x010x39}; SerialGPS.write(bufsizeof(buf));}  // данные 1 сек
            
else if(InputGSM.indexOf("beacon")>= ){uint8_t buf[] = {0xB50x620x060x080x060x000x880x130x010x000x010x000xB10x49}; SerialGPS.write(bufsizeof(        buf));}  // данные 5 сек
            
else if(InputGSM.indexOf("tracker")>= 0){uint8_t buf[] = {0xB50x620x060x080x060x000x600xEA0x010x000x010x000x600x8C}; SerialGPS.write(bufsizeof(        buf));}  // данные 60 сек
            
else if(InputGSM.indexOf("location")>= 0){SmsSend(LongitudeDataNumberTelefone);}  // смс с оординатами
            
else if(InputGSM.indexOf("battery")>= 0){SmsSend(String(A3_ReadDEC), NumberTelefone);}  // смс с оординатами
            
else if(InputGSM.indexOf("server")>= 0){GpsSend();}  // координаты на сайт
            
            
else   {SmsSend(InputGSMNumberTelefone);};
        }
        else {
InputGSM += c;};
        };
}; 

В общем на настоящий момент мы умеем определять координаты, слать их на треккер сайт(который показывает на карте и строит трек), обмениваться разными смсками.

Все выложено в сыром виде, потому как есть вопросы (ну куда же без них). А самый главный - вообще чего он должен уметь делать -так сказать функционал
Bulatovor вне форума   Ответить с цитированием
 


Здесь присутствуют: 5 (пользователей: 0 , гостей: 5)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 14:02. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика