![]() |
|
|
#11 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
И еще можно модем уводить в спячку минут на 10 , а данные логировать , потом отправлять данные после просыпания модема одним пакетом
|
|
|
|
|
|
#12 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
А смысл?Если только GPS модуль загонять при этом в сон. А так это можно решить и фильтрацией данных GPS -есть изменения -передавать - нет и не передавать
|
|
|
|
|
|
#13 | |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
К тому же координаты нужны всегда, их можно сохранить а потом передать |
|
|
|
|
|
|
#14 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ну вот и я о том же - сидит себе координаты принимает, буферизует их. Видимо затем обязательно фильтрация - потому как даже на месте есть броски в стороны(хотя некоторые сайты трекеры сами фильтрацию делают) Есть мысли в некоторых режимах вообще их в память писать, а потом будить GPS и слать пачку точек, например протокол Wialon позволяет в одном пакете несколько сообщений отправить (как они называют этот пакет "Черный ящик" ). В идеале слот микроCD прикрутить или еще есть какие миниатюрные решения для расширения памяти ардуины?
|
|
|
|
|
|
#15 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Что касается спячки GPS - команда AT+CFUN по книжке может иметь несколько значений основного параметра
PHP код:
|
|
|
|
|
|
#16 |
|
Junior Member
Регистрация: 31.01.2019
Сообщений: 2
Вес репутации: 0 ![]() |
Спасибо за тему! Как раз хочу собрать маячок для собаки на таком же железе, только акселератор не нужен, так как работа устройства будет упрощена. Его задача - это отправлять, в ответ на звонок, смс сообщение с координатами местоположения, и всё. Всё остальное время , маячок может находиться в энергосберегающем режиме, для экономии заряда аккумулятора.
|
|
|
|
|
|
#17 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Начнем сразу с неприятного - модуль GPS NEO-6 очень плохо ловит спутники в помещениях - я когда с ним экспериментировал -пришлось делать это у окна - иначе спутники не находятся. когда стартанёт уже легче можно глубже в помещение.
|
|
|
|
|
|
#18 |
|
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 800 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ну вот на этом скетче я остановился. С чего начнем подключения с GSM или GPS?
Развернуть для просмотраКод:
//Подключение библиотек
#include <SoftwareSerial.h>
SoftwareSerial SerialGPS(10, 11); // RX, TX
#include <AltSoftSerial.h>
AltSoftSerial SerialGsm;
#include <CyberLib.h>// быстрое управление пинами
/**********************Переменные************************/
// Общие
String NumberTelefone="+7**********" ;// номер управляющего телефона
byte result;//
//UART
String InputUART = "";// строка для чтения UART модуля GSM
//GSM
String InputGSM = "";// строка для чтения UART модуля GSM
//GPS
byte GGA=0; byte VTG=0; byte GLL=0;
char buffGPS[82];// строка данных для чтения UART модуля GPS
char TimeGPS[10];//170840.00 Время UTC: 17ч. 08м. 40.00 сек.
char reliabilityGPS;//A Статус достоверности: A – достоверные данные, V – недостоверные данные
char reliabilityGPS2;//Статус определения координат: 0 – позиция не определена, 1 – позиция определена, 2- позиция определена с повышенной точностью (DGPS)
int numerGPS;//количество спутников
char LatitudeData[11];//5509.68339 Широта: 55 градусов, 09.68339 минут
char LatitudeDir;//N N – северная, S – южная
char LongitudeData[12];//06125.49498 Долгота: 061 градусов, 25.49498 минут
char LongitudeDir;//E E – восточная, W – западная
float fracdeg;
int altiGPS;
String HSpeed2;//0.204 Горизонтальная скорость (км/ч)
String Course;//– Направление курса относительно истинного севера (градусы)
String DataGPS;//311015 Дата: 31 октября 2015 года
//String MyString;
void setup()
{
D12_Out; D12_Low; // пин перезагрузки GSM
//открытие портов
Serial.begin(38400);
settinggsm(); //настройка GSM модуля
settingps();
}
void loop()
{
/*_________________________Проверка буферов UART________________________________________*/
if (Serial.available()) { pcread(); }; //если есть данные c компа уходим в подпрограмму чтения
if (SerialGPS.available()) { getGPS();}; //если есть данные GPS уходим в подпрограмму чтения
if (SerialGsm.available()) {gsmread();}; //если есть данные GSM/GPRS уходим в подпрограмму чтения
};
void settingps()// настройка модуля GPS
{
SerialGPS.begin(9600);delay (1000);
while(SerialGPS.available()) { delay(5); SerialGPS.read(); };// очищаем буфер
Serial.println("Setting OK"); delay(1000);
};
void settinggsm()
{ Serial.println("Reset GSM");
D12_High; delay(3000); D12_Low;delay(3000);//перезагрузка GSM
SerialGsm.end();
delay(1000);
SerialGsm.begin(115200);
delay(1000); // поднятие соединения
//настройка модуля
if(CommandGSM("AT\r", "ок", 2000)==0){settinggsm();}; // проверка связи с модемом
SerialGsm.println("AT+IPR=38400"); delay(2000);
SerialGsm.begin(38400); delay(1000); // перезапуск соединения
if(CommandGSM("AT+CMEE=2\r", "ок", 500)==0){settinggsm();}; //режим сообщений ошибок
if(CommandGSM("ate0\r", "ок", 300)==0){settinggsm();}; //отключение эха порта
if(CommandGSM("AT+CREG?\r", "+CREG: 1", 100)==0){settinggsm();}; //проверка регистрации в сети
//CommandGSM("AT+CREG=0", "ок", 100)==0){settinggsm();};// запрет выдачи сообщений о смене регистрации сети
//настройка СМС
if(CommandGSM("AT+CMGF=1\r", "ок", 100)==0){settinggsm();}; //включение текстового режима СМС
if(CommandGSM("AT+CSCS=\"GSM\"\r", "ок", 100)==0){settinggsm();}; //включение режима кодировки СМС
if(CommandGSM("AT+CNMI=2,2\r", "ок", 100)==0){settinggsm();}; //включение режима СМС сразу в монитор
};
void pcread()//эта функция используется для отладки - сообщения с порта транслирется на соответствующий модуль
{ //InputUART = "";
while (Serial.available() > 0)
{ char d = Serial.read();
if (d == '\r')
{ Serial.print("Polucheno-");Serial.print(InputUART);Serial.println("**");delay(300);
if (InputUART.substring(0,3) == "GSM")
{
InputUART = InputUART.substring(4);
Serial.print("Command GSM-");
Serial.println(InputUART);delay(300);
SerialGsm.println(InputUART);delay(300);
InputUART = "";
}
else if (InputUART.substring(0,3) == "SMS"){SmsSend2();}
else {InputUART = "";};
}
else { InputUART += d;}
};
};
void getGPS()
{ //чтение буфера GPS и присвоение значений переменных GPS
while (SerialGPS.available() > 0)
{char d = SerialGPS.read();Serial.print(d);
// GPGGA
if(d=='G')
{ Serial.println(); d = SerialGPS.read();Serial.println(d);
if(d=='G')
{ d = SerialGPS.read();Serial.println(d);
if(d=='A')
{ Serial.println("GPGGA");
GGA=1;
d = SerialGPS.read();// пропускаем запятую
int i = 0; int i1=0;
memset(&buffGPS[0], 0, sizeof(buffGPS));
while (d != '\n' && d!='*') { d = SerialGPS.read(); buffGPS[i]=d; delay(2); i = i + 1;};
Serial.write(buffGPS, sizeof(buffGPS)); Serial.println();
i = 0; d = buffGPS[i];
while (d != ',') { TimeGPS[i1] = d;i = i + 1;i1 = i1 + 1;d = buffGPS[i];};
i1 = 0; i = i+1; d = buffGPS[i];
while (d != ',') {LatitudeData[i1] = d;i = i + 1; i1 = i1 + 1;d = buffGPS[i]; };
i1 = 0; i = i+1; d = buffGPS[i];
if(d != ',') LatitudeDir=d;
i1 = 0; i = i+2; d = buffGPS[i];
while (d != ',') {LongitudeData[i1] = d;i = i + 1;i1 = i1 + 1;d = buffGPS[i];};
i1 = 0; i = i+1; d = buffGPS[i];
if(d != ',')LongitudeDir=d;
i = i+2; d = buffGPS[i];
while (d != ',') {i = i + 1;d= buffGPS[i];};
numerGPS=0; i1 = 0; i = i+1; d = buffGPS[i];
if(d != ',') numerGPS=int(d-48)*10+int(buffGPS[i+1]-48);
i = i+3; d = buffGPS[i];
while (d != ',') {i = i + 1;d = buffGPS[i];};
altiGPS=0; i = i+1; d = buffGPS[i];
while (d != ','&& d != '.'){ altiGPS=altiGPS*10+int(d-48);i = i+1; d = buffGPS[i];};
memset(&buffGPS[0], 0, sizeof(buffGPS));
};
}
}
if(GGA==1){GGA=0;};
};
};
void gsmread()
{
while (SerialGsm.available() > 0)
{ char c = SerialGsm.read();
if (c == '\n')
{ Serial.println(InputGSM);
if ( InputGSM.indexOf("+CMT") >= 0 ){InputGSM = ""; smsread();}
else if ( InputGSM.indexOf("+CREG: 2") >= 0 ){InputGSM = ""; settinggsm();}
else {InputGSM = "";};
}
else { InputGSM += c;}
}
};
byte CommandGSM(String S, String S1, int t)
{
while(SerialGsm.available()) { delay(2); SerialGsm.read(); }// очищаем буфер
delay(500); Serial.print (S);delay(500);
SerialGsm.println(S);delay(t); // шлем команду
for (int x = 0; x < 10; x ++)
{
while (SerialGsm.available() > 0)//если в буфере что есть -читаем
{ char c = SerialGsm.read();
if (c == '\n') { break;} else { InputGSM += c;}
}
if ( InputGSM.indexOf(S1) >= 0 ){result=1; InputGSM = "";Serial.println ("ОК");break; } else {Serial.print ("|");InputGSM = "";};
if (x == 9) { result=0; Serial.println ("-NO");};
delay(t);
};
return result;
while(SerialGsm.available()) { delay(2); SerialGsm.read(); }// зачищаем буфер
};
void smsread()
{
InputGSM = "";
Serial.println("SMSKA!!!!!!!!");
delay(100);
while (SerialGsm.available() > 0)
{ char c = SerialGsm.read();
if (c == '\n')
{
Serial.print("Text SMS - ");
Serial.print(InputGSM);
Serial.println("**");
if (InputGSM.indexOf("fittnes")>= 0 )
{uint8_t buf[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0xE8, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x39}; //SerialGPS.write(buf, sizeof(buf));};} // данные 1 сек
//else if(InputGSM.indexOf("beacon")>= 0 ){uint8_t buf[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x88, 0x13, 0x01, 0x00, 0x01, 0x00, 0xB1, 0x49}; //SerialGPS.write(buf, sizeof( buf));} // данные 5 сек
//else if(InputGSM.indexOf("tracker")>= 0){uint8_t buf[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x60, 0xEA, 0x01, 0x00, 0x01, 0x00, 0x60, 0x8C}; //SerialGPS.write(buf, sizeof( buf));} // данные 60 сек
}
else if(InputGSM.indexOf("location")>= 0){SmsSend("https://www.google.ru/maps/place/54\°44\'21.7\"N+56\°00\'50.4\"E", NumberTelefone);} // смс с оординатами
else if(InputGSM.indexOf("battery")>= 0){SmsSend(String(A3_Read, DEC), NumberTelefone);} // смс с оординатами
else if(InputGSM.indexOf("reset")>= 0){settinggsm();} // координаты на сайт
else {SmsSend(InputGSM, NumberTelefone);};
}
else {InputGSM += c;};
};
};
void SmsSend(String textSMS, String 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 = "";
};
[свернуть] |
|
|
|
|
|
#19 |
|
Junior Member
Регистрация: 31.01.2019
Сообщений: 2
Вес репутации: 0 ![]() |
Спасибо за скетч!
Последний раз редактировалось kevolech; 09.02.2019 в 17:53. |
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|