SIM800L + ESP8266

Использование блока gsm

Контроллеры на основе ESP8266
Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#1

Сообщение Fghjk » 08.11.2019{, 01:51}

Существует блок gsm_new_0.6.1b

Удалось кому нибудь связать с помощью этого блока есп и сим800?

У меня по AT командам работает сим800 из ардуино IDE.
Но при использовании блока gsm_new 0.6.1b никакой реакции нет от sim800.


На плате установленв Блоки "основной", "sim800", "softwareserial на gpio 5,4".

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

SIM800L + ESP8266

#2

Сообщение vovka1973 » 08.11.2019{, 03:30}

Fghjk писал(а):
08.11.2019{, 01:51}
На плате установленв Блоки "основной", "sim800", "softwareserial на gpio 5,4".
у меня работает только на 14,12 ноде мсу 3
Изображение

zhulen820
Сержант
Сообщения: 193
Зарегистрирован: 29.08.2016{, 22:44}
Репутация: 6
Откуда: Серпухов
Имя: Александр

SIM800L + ESP8266

#3

Сообщение zhulen820 » 08.11.2019{, 11:42}

у меня тоже нормально работает по softSerial на 14, 12 выводах и на node mcu и на esp-12. На 4,5 никогда не пробовал, обычно они у меня под I2C задействованы. Блок SIM800 от слимпера кажется работал во всех версиях, ввключая самую последнюю 6.1

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#4

Сообщение Fghjk » 08.11.2019{, 20:51}

странно, не работает блок и все)

может там какие хитрости подключения?
но в проверочном AT скетче ведь все работает!

там в блоке я правильно делаю?:
Безымянный2.jpg

т.е. вот как есть на картинке - так и на компиляцию отправляю. ничего не подключаю к блоку.
Последний раз редактировалось Fghjk 08.11.2019{, 21:09}, всего редактировалось 1 раз.

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#5

Сообщение Fghjk » 08.11.2019{, 20:53}

имею ввиду может есть кокой то вход, который нужно в true установить?

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#6

Сообщение Fghjk » 08.11.2019{, 20:57}

очень непонятно:

если в СЕТАП вставляю строки:

GSM_AT_Command(F("CPAS"),4); // проверка готовности модуля к работе
GSM_analysisResponse(F("+CPAS: 0") );

то появляются отладочные сообщения, и блок начинает работать.

реагирует в мониторе ком-порта на входящие звонки и смс.

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#7

Сообщение Fghjk » 08.11.2019{, 21:08}

а если прописать в loop

GSM_AT_Command(F("CSQ") , 5 ) ;
delay(2000);

то тоже начинает модуль рабоать))) показывает каждые 2 секунды уровнь сети.

что происходит - непонятно мне)

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#8

Сообщение Fghjk » 08.11.2019{, 21:22}

если кому не лень гляньте проект и код:

код после компиляции в флпрог 5.3.0
СпойлерПоказать
#include <SoftwareSerial.h>

extern "C" {
#include "user_interface.h";
}
SoftwareSerial Serial_S( 14 , 12 );
bool GSM_In_sms;
String GSM_Phone;
String GSM_text;
bool GSM_Reject_call;
bool GSM_start;
bool GSM_Net;
int GSM_dBm;
bool GSM_Received_SMS;
String GSM_Text_sms;
String GSM_T_Nomer;
bool GSM_Sent_SMS;
bool GSM_Call;
int GSM_Number_calls;
int GSM_Error_Code;
bool GSM_start_N; //Модем прислал сообщение о том, что он стартовал
bool GSM_final; // закончена обработка запроса
bool GSM_wait; // идет ожидание ответа на команду
bool GSM_past_SMS;
bool GSM_command_SMS;
bool GSM_past_Reject_call;
bool GSM_command_Reject_call;
//bool GSM_Call_P1;
char GSM_ch; //символ пришетший в ком порт
byte GSM_errorCounter; // счетчик ошибок
byte GSM_numberRepeats;
//byte GSM_Dial_response_code;
byte GSM_team_room; //номер текущей функции
byte GSM_count; // счетчик последовальности команд
unsigned long GSM_time; //Время посылки команды
unsigned long GSM_T_millis; //Время посылки команды
unsigned long GSM_time_n; //Время последнего опроса связи с сетью.
String GSM_line; // сообщение от модуля
String GSM_reply; //Ответ модуля на команду
String GSM_Phone_T=""; //Телефон во время подачи команд на звонок или отправку смс
#define Module_Start "Call Ready"

#define GSM_TYPE_SIM800

#define GSM_DEBUG
void setup()
{
Serial_S.begin( 115200 );
Serial.begin(115200);//Тест
Serial.println("Test");

}
void loop()
{

//Плата:1
GSM_In_sms = 0;
GSM_Phone = String("");
GSM_text = String("");
GSM_Reject_call = 0;
GSM_Received_SMS =0; //Сброс статутса СМС Принята
GSM_Sent_SMS =0; //Сброс статуса СМС Отправлена

if ( 1 ){
if ( GSM_team_room==3 ){
GSM_Number_calls =0;
GSM_Text_sms="";
GSM_T_Nomer ="";
}
}

GSM_T_millis =millis();

while(Serial_S.available()) //Получаем данные с модема
{GSM_ch = Serial_S.read();
if(GSM_ch == '\r') continue;
if(GSM_ch == '\n') { GSM_GotLineFromNeoway(); GSM_line = ""; }
else GSM_line += GSM_ch;}

if (GSM_wait)//ожиание ответа на команду
{
if(GSM_line.length()>0){
if(GSM_line==F("> ")) {GSM_count++; GSM_wait=0;GSM_line = "";} }
if(GSM_T_millis>GSM_time) {GSM_err (2,0);}
}

if (GSM_Call&&(GSM_team_room!=1) )
{
GSM_team_room=1;
GSM_Number_calls=1; //сброс числа гудков
// GSM_resetExpectations() ;
}

if (GSM_start_N){if (!GSM_wait){if ( GSM_setup_comand() ){GSM_start_N=0; GSM_start =1; }}}// Инициализация

if (GSM_start)//Не работать пока не старт
{
//______Проверка статуса сети
if ((30000 >0)&&(GSM_team_room==0)) //проверять ли статутс сети
{
if((GSM_T_millis-GSM_time_n) > 30000){ GSM_team_room=3;}
}
//______Конец Проверка статуса сети

//______Отправка СМС
if ( GSM_In_sms && !GSM_past_SMS ) { if ( GSM_number_search()) GSM_command_SMS =1; } // поступление команды на отправу СМС. Проверка корректности номера
GSM_past_SMS= GSM_In_sms;
if ( GSM_command_SMS && (GSM_team_room==0) ) {GSM_team_room=2; GSM_command_SMS =0;} // начинать отправу СМС
//______Конец Отправка СМС

//______Команда сброс вызова или разрыв разговора
if ( GSM_Reject_call && !GSM_past_Reject_call ) { GSM_command_Reject_call =1; }
GSM_past_Reject_call=GSM_Reject_call;
//______Конец Команда сброс вызова или разрыв разговора


#ifdef GSM_INCLUSION_USSD // Обработка вызова USSD запросов
GSM_causeProcessingUSSD();
#endif

#ifdef GSM_INCLUSION_DATA_TIME //Обработка времени, даты, оператора
GSM_causeProcessingDataTime();
#endif

#ifdef GSM_INCLUSION_CALLS // исходящий вызов
if (GSM_causeProcessingCall()) {
if( GSM_number_search()){
GSM_wait=1; // ожитать
GSM_time =millis() + 20000; // время ожидания
Serial_S.println( "ATD"+ GSM_Phone_T+";" );
GSM_team_room=5;
#ifdef GSM_DEBUG // отладка
Serial.println("Command: ATD"+ GSM_Phone_T+";" );
#endif
}
}
#endif
//________ Обработка разных процессов
switch ( GSM_team_room ) {
case 0:
break;
case 1: //Обработка входящих вызовов
if (!GSM_wait){
if ( GSM_command_Reject_call ) {
if ( GSM_singleCommand(F("ATH0"), 10) ) {GSM_command_Reject_call=0; GSM_Call=0; GSM_count=0; GSM_final=1;}
}
#ifdef GSM_INCLUSION_CALLS
#ifndef GSM_TYPE_M590
if (GSM_causeProcessingTake()){ GSM_Connect=1; GSM_team_room=5;}
#endif
#endif
}
if (!GSM_Call){ GSM_final =1; GSM_T_Nomer ="";}
break;
case 2:
if (!GSM_wait){ GSM_final=GSM_sms_sent();} // отправка сообщения
break;
case 3:
if (!GSM_wait){ GSM_final=GSM_net_status();}// проверка связи с сетью
break;
case 4: //приход смс
//if (!GSM_wait){ GSM_final=1; GSM_count=0; GSM_Error_Code =0; }//
break;
#ifdef GSM_INCLUSION_CALLS
case 5: //разговор
if (!GSM_wait) {
if ( GSM_command_Reject_call ) {
if ( GSM_singleCommand(F("ATH0"), 10)) {GSM_command_Reject_call=0; GSM_Call=0; GSM_count=0; GSM_Connect=0; GSM_final=1;}
}
GSM_count=0;
}
break;
#endif
#ifdef GSM_INCLUSION_DATA_TIME
case 6: // дата время
if (!GSM_wait){if ( GSM_DataTime() ){ GSM_final =1;}}// запрос баланса
break;
#endif
#ifdef GSM_INCLUSION_USSD
case 7: // USSD
if (!GSM_wait){ GSM_final=GSM_USSD();}// запрос баланса
break;
#endif
}
//________ Конец Обработка разных процессов

if (GSM_final){GSM_team_room=0; GSM_final=0;} //должно быть последним
}





}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
void GSM_GotLineFromNeoway()
{
bool flag_=0; //Анализ телефонной книги
static bool isStringMessage;
#ifdef GSM_DEBUG
Serial.print("Message module: ");//Тест
Serial.println(GSM_line); //Тест
Serial.print("GSM_team_room: ");//Тест
Serial.println(GSM_team_room); //Тест
#endif

if (GSM_line.length()>0)
{

//Обработка входящих СМС
if (isStringMessage){
GSM_Text_sms = GSM_line ; //выводим текст сообщения
GSM_Received_SMS =true; // Импульс приход сообщения
isStringMessage=0;
return;
}
if (GSM_line.startsWith("+CMT")) // пришло СМС
{
flag_=1;
GSM_resetExpectations();
isStringMessage=1;
GSM_reply="";
}
//Конец Обработка входящих СМС

// Обработка входящих вызовов

if (GSM_Call)
{
if (GSM_line.startsWith(F("+CLIP"))) {flag_=1;GSM_reply="";}
else if (GSM_line == F("NO CARRIER")) { GSM_Call=0; }
}
if (GSM_line == F("RING")){ //Входящий звонок
if(!GSM_Call)GSM_resetExpectations();
GSM_Call=1;
GSM_Number_calls ++;
}
// ____ Обработка USSD sim800
#ifdef GSM_TYPE_SIM800
#ifdef GSM_INCLUSION_USSD
if (GSM_line.startsWith("+CUSD")) // пришел ответ по USSD
{
GSM_wait=0;
GSM_count++;
GSM_USSD_return = GSM_substring_commas(GSM_line,5) ;
}
#endif
#endif
//_______Конец обработки USSD SIM800


#ifdef GSM_INCLUSION_CALLS //Если добавлен блок работы со звонками
#ifdef GSM_INCLUSION_DTMF // Если добвален блок DTMF
if ( GSM_Connect ){ if (GSM_line.startsWith(F("+DTMF"))) {GSM_ID_DTMF(GSM_line);} }
#endif
if (GSM_team_room==5)
{
if (GSM_line == F("CONNECT"))GSM_Connect=1;
else if (GSM_line == F("BUSY")) GSM_err (505,2);
else if (GSM_line == F("NO ANSWER")) GSM_err (506,2);
else if (GSM_line == F("NO CARRIER")) {
if (GSM_Connect){GSM_Connect=0; GSM_team_room=0;}
else GSM_err (507,2);
}
}
#endif
// Конец Обработка входящих вызовов


if(GSM_line == F("ERROR")) GSM_err (1, 0);
else if(GSM_line == F("OK")){ GSM_wait=0; GSM_count++; GSM_errorCounter=0; }
else {
GSM_reply+=GSM_line;
}
if (GSM_reply.length()> 160 ){GSM_reply=""; GSM_err (10100,2);}//Защита от переполнения строки


if (GSM_line == Module_Start){ GSM_start_N=1; GSM_start=0; GSM_err (0 , 2); }//Сообщение от модуля о том, закончил загрузку

if (flag_) //Получение номер телефона отправителя/звонящего
{
GSM_T_Nomer = GSM_substring_commas( GSM_line, 4) ;
if( GSM_T_Nomer.indexOf("+")==-1) GSM_T_Nomer=(String( "+" ))+ GSM_T_Nomer;
#ifdef TELEFONNAYA_BOOK // если используется телефооная книга
int GSM_ind_arr= GSM_StringArray( GSM_Telefon, GSM_T_Nomer );
if ( GSM_ind_arr>-1) GSM_T_Nomer = GSM_Contact [ GSM_ind_arr ];
#endif
flag_=0;
}
#ifdef TELEFONNAYA_BOOK // если используется телефооная книга
if (!GSM_start){
if ( GSM_line.startsWith("+CPBF")) // пришла запись телефонной книги
{if( GSM_index_array< GSM_Number_Contacts ){
GSM_Telefon[ GSM_index_array ] = GSM_substring_commas( GSM_line, 5);
GSM_Contact[ GSM_index_array ]= GSM_substring_commas( GSM_line, ( GSM_line.lastIndexOf(","))) ;
GSM_index_array ++;}
}
}
#endif
}
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти


}
void GSM_AT_Command(const __FlashStringHelper* str, String str2, byte _numRep)
{
GSM_numberRepeats=_numRep;
GSM_reply="";//Сброс содержимого прошлого ответа модуля
GSM_wait=1; // ожитать
GSM_time =millis() + 20000; // время ожидания
Serial_S.write("AT+");
Serial_S.print(str);
Serial_S.print(str2);
Serial_S.write("\"\r\n");



#ifdef GSM_DEBUG // отладка
Serial.write("Command: AT+");
Serial.print(str);
Serial.print(str2);
Serial.write("\"\r\n");
#endif




}
bool GSM_net_status()
{
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_AT_Command(F("CREG?") , 5); //Проверка регистрации в сети
break;
case 2:
if ( GSM_analysisResponse(F("+CREG") )){
if( ( GSM_reply.endsWith("1")) || ( GSM_reply.endsWith("5"))) { GSM_Net =1;} // 1-В домашней сети, 5- в роуминге
else { GSM_Net =0;}
}
break;
case 3: // Проверка уровня сигнала
GSM_AT_Command(F("CSQ") , 5 ) ;
break;
case 4:
if ( GSM_analysisResponse(F("+CSQ") )){ //
int t1= GSM_reply.indexOf(": ");
if(t1>-1) GSM_dBm =(( ( ( GSM_reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( GSM_dBm >0) GSM_dBm =-120; //нет сети
}
break;
case 5:
GSM_count=0;
GSM_time_n=millis();// время последнего опроса
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
}
bool GSM_sms_sent()
{
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_AT_Command(F("CMGF=1"),1); // Перевод сообщенй в текстовый режим
break;
case 2:
GSM_AT_Command(F("CMGS=\""), GSM_Phone_T ,1 ); // Отправка команды на начальный этап отправки СМС
break;
case 3: // передача текста СМС и отправка сообщения
if ( GSM_errorCounter ){ GSM_err( (200+ GSM_count) , 2); break; }// выход из посылки команд если достигнуто придельное колличество ошибок
Serial_S.println( GSM_text +String( (char)26 ));
GSM_wait=1; // ожитать
GSM_time =millis() + 20000; // время ожидания
#ifdef GSM_DEBUG // отладка
Serial.println( GSM_text +String( (char)26 ));
#endif
break;
case 4:
GSM_count=0;
GSM_Sent_SMS =1;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
}
String GSM_substring_commas(String text_analyze, int position)
{
int t1=text_analyze.indexOf("\"", position);
int t2=text_analyze.indexOf("\"",(t1+1));
if(t1>-1){
if(t2>-1) return text_analyze.substring(t1+1,t2);
else return text_analyze.substring(t1+1);}
return "";
}
bool GSM_number_search()
{
if ( GSM_Phone.length() <4) {GSM_Error_Code =10005; return 0;}
GSM_Phone_T = GSM_Phone ;

#ifdef TELEFONNAYA_BOOK
int ind_arr;
ind_arr= GSM_StringArray( GSM_Contact , GSM_Phone );
if (ind_arr>-1) GSM_Phone_T = GSM_Telefon [ ind_arr ];
else if(GSM_White_list ) {GSM_Error_Code =10006; return 0;}
#endif

return 1;
}
void GSM_resetExpectations()
{
//сброс текущей операции
GSM_wait=0; //сброс ожидания ответа
GSM_count=0; //Сброс состояний обработки других функций
GSM_time_n=GSM_T_millis;//отсрочка проверки статуса сети
GSM_team_room=0;

}
void GSM_err(int error, byte _ret)
{
GSM_errorCounter++ ;
GSM_reply=""; //Сброс содержимого прошлого ответа модуля
GSM_wait =0;
if (_ret==0){
if ( GSM_errorCounter >GSM_numberRepeats){
error = GSM_team_room*100+ GSM_count;
_ret=2;}
else return;
}
if ( _ret==1) GSM_count--;
else if (_ret==2 ){
GSM_errorCounter=0;
GSM_Error_Code =error;
if (GSM_team_room==3){GSM_Net =0;GSM_dBm =-120;}
GSM_resetExpectations();
}

}
void GSM_AT_Command(const __FlashStringHelper* str, byte _numRep)
{
#ifdef GSM_DEBUG // отладка
Serial.write("AT+ _ ");
#endif
Serial_S.write("AT+");
GSM_Command( str,_numRep ) ;


}
bool GSM_analysisResponse(const __FlashStringHelper* response)
{
#ifdef GSM_DEBUG
Serial.print("Expected Answer: ");//Тест
Serial.println(response); //Тест
Serial.print("Real Answer: ");//Тест
Serial.println(GSM_reply); //Тест
#endif

if (GSM_reply.startsWith(response)){GSM_count++; return 1; }
GSM_err(0,1);
return 0;
}
bool GSM_singleCommand(const __FlashStringHelper* str, byte _numRep)
{
switch ( GSM_count ) {
case 0:
GSM_Command(str, _numRep) ;
break;
case 1:
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
}
void GSM_Command(const __FlashStringHelper* str, byte _numRep)
{
GSM_reply=""; //Сброс содержимого прошлого ответа модуля
GSM_numberRepeats=_numRep;
GSM_wait=1; // ожитать
GSM_time =millis() + 20000; // время ожидания
Serial_S.println(str);


#ifdef GSM_DEBUG // отладка
Serial.write("Command: ");
Serial.println(str);
#endif

}
bool GSM_setup_comand()
{
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_Command(F("ATE0") ,2 ) ; //отключение эхо ответа
break;
case 2:
GSM_AT_Command(F("CPAS"),4); // проверка готовности модуля к работе
break;
case 3:
GSM_analysisResponse(F("+CPAS: 0") );
break;
case 4:
GSM_AT_Command(F("CREG?"),10); //Проверка регистрации в сети
break;
case 5:
if ( GSM_analysisResponse(F("+CREG") )){
if( ( GSM_reply.endsWith("1")) || ( GSM_reply.endsWith("5"))) { GSM_Net =1;} // 1-В домашней сети, 5- в роуминге
else { GSM_err(0,1); GSM_count--; }
}
break;
case 6:
GSM_AT_Command(F("CSCB=1") ,2 ) ; // Отключение приема широковещательных сообщений
break;
case 7:
GSM_AT_Command(F("CLIP=1") ,2 ) ; // настройки автоматического определения номера
break;
case 8:
GSM_AT_Command(F("CMGF=1") ,2 ) ; //настройки формата SMS сообщений, текстовый
break;
case 9:
GSM_AT_Command(F("CSCS=\"GSM\"") ,2 ) ; // выбора кодировки текста, кодировка ASCII
break;
case 10:
GSM_AT_Command(F("CNMI=2,2,0,0,0") ,2 ) ; //выдовать смс в терминал и не сохранять в память
break;
case 11:
#ifdef GSM_INCLUSION_DTMF // Если добвален блок DTMF
GSM_AT_Command(F("DDET=1") ,5 ); // Включение работы с DTMF
#else
GSM_count ++;
#endif
break;
#ifdef TELEFONNAYA_BOOK // Если использовать телефонну книгу
case 12:
GSM_AT_Command(F("CPBS?"),2);
break;
case 13:
GSM_analysisResponse(F("+CPBS: \"SM\"") );
break;
case 14:
GSM_AT_Command(F("CPBF=\""), GSM_Name_Contact , 2 ) ;
GSM_index_array =0;
break;
case 15:
#else //Если не использовать телефонную книгу
case 12:
#endif //Окнчание выбора по телефонной книге
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
}
сам проект:
тест сим800+есп8266-5+3+0.flp
(628.67 КБ) 90 скачиваний

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#9

Сообщение Fghjk » 08.11.2019{, 21:30}

похоже что здесь что-то не срабатывает:

if (GSM_start_N){
if (!GSM_wait){
if (GSM_setup_comand()){
GSM_start_N=0;
GSM_start =1;
}
}
} // Инициализация

zhulen820
Сержант
Сообщения: 193
Зарегистрирован: 29.08.2016{, 22:44}
Репутация: 6
Откуда: Серпухов
Имя: Александр

SIM800L + ESP8266

#10

Сообщение zhulen820 » 08.11.2019{, 21:45}

Скорость порта по софтсериал, и соответственно, на модеме попробуйте понизить до 9600 бит/с. У меня на проектах 9600 везде стоит, скорость на модеме тоже изменить с сохранением AT&W

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#11

Сообщение Fghjk » 08.11.2019{, 21:59}

Перевел модуль на скорость 9600:
21:54:21.686 -> AT+IPR=9600
21:54:21.686 -> OK

Сделал в проекте все скорости на 9600 - не изменилось ничего.

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#12

Сообщение Fghjk » 08.11.2019{, 22:07}

начинаем искать виновника))

пишу в луп:

/////////////////////////////////////////////////////
Serial.print("GSM_start_N");
Serial.print(GSM_start_N);
Serial.println();
///////////////////////////////////////////////////
Serial.print("GSM_wait");
Serial.print(GSM_wait);
Serial.println();
///////////////////////////////////////////////////
(2000);
///////////////////////////////////////////////////

Отправлено спустя 5 минут 46 секунд:
получаем в монитор порта:

//////////////////////////////////////////////////////


22:12:25.563 -> GSM_start_N=0
22:12:25.563 -> GSM_wait=0
22:12:27.565 -> GSM_start_N=0
22:12:27.565 -> GSM_wait=0
22:12:29.566 -> GSM_start_N=0
22:12:29.566 -> GSM_wait=0
22:12:31.569 -> GSM_start_N=0
22:12:31.569 -> GSM_wait=0
22:12:33.573 -> GSM_start_N=0
22:12:33.573 -> GSM_wait=0

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#13

Сообщение Fghjk » 08.11.2019{, 22:14}

т.е. не происходит инициализации СИМ800.
(согласно этому коду):

if (GSM_start_N){
if (!GSM_wait){
if (GSM_setup_comand()){
GSM_start_N=0;
GSM_start =1;
}
}
} // Инициализация

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#14

Сообщение Fghjk » 08.11.2019{, 22:15}

теперь нужно проверить работу функции GSM_setup_comand()

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#15

Сообщение Fghjk » 08.11.2019{, 22:17}

вот код этой функции:
СпойлерПоказать
bool GSM_setup_comand()
{
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_Command(F("ATE0") ,2 ) ; //отключение эхо ответа
break;
case 2:
GSM_AT_Command(F("CPAS"),4); // проверка готовности модуля к работе
break;
case 3:
GSM_analysisResponse(F("+CPAS: 0") );
break;
case 4:
GSM_AT_Command(F("CREG?"),10); //Проверка регистрации в сети
break;
case 5:
if ( GSM_analysisResponse(F("+CREG") )){
if( ( GSM_reply.endsWith("1")) || ( GSM_reply.endsWith("5"))) { GSM_Net =1;} // 1-В домашней сети, 5- в роуминге
else { GSM_err(0,1); GSM_count--; }
}
break;
case 6:
GSM_AT_Command(F("CSCB=1") ,2 ) ; // Отключение приема широковещательных сообщений
break;
case 7:
GSM_AT_Command(F("CLIP=1") ,2 ) ; // настройки автоматического определения номера
break;
case 8:
GSM_AT_Command(F("CMGF=1") ,2 ) ; //настройки формата SMS сообщений, текстовый
break;
case 9:
GSM_AT_Command(F("CSCS=\"GSM\"") ,2 ) ; // выбора кодировки текста, кодировка ASCII
break;
case 10:
GSM_AT_Command(F("CNMI=2,2,0,0,0") ,2 ) ; //выдовать смс в терминал и не сохранять в память
break;
case 11:
#ifdef GSM_INCLUSION_DTMF // Если добвален блок DTMF
GSM_AT_Command(F("DDET=1") ,5 ); // Включение работы с DTMF
#else
GSM_count ++;
#endif
break;
#ifdef TELEFONNAYA_BOOK // Если использовать телефонну книгу
case 12:
GSM_AT_Command(F("CPBS?"),2);
break;
case 13:
GSM_analysisResponse(F("+CPBS: \"SM\"") );
break;
case 14:
GSM_AT_Command(F("CPBF=\""), GSM_Name_Contact , 2 ) ;
GSM_index_array =0;
break;
case 15:
#else //Если не использовать телефонную книгу
case 12:
#endif //Окнчание выбора по телефонной книге
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
}
как же ее проверить?

Отправлено спустя 5 минут 56 секунд:
GSM_count - это видимо счетчик?
и на каждый номер счета должна выполняться команда из "case"

т.е.
case0
case1
case2
..................
case15


НО счетчик не меняет своего значения!

СпойлерПоказать
22:20:38.198 -> GSM_start_N=0
22:20:38.198 -> GSM_wait=0
22:20:38.198 -> GSM_count=0
22:20:38.504 -> GSM_start_N=0
22:20:38.504 -> GSM_wait=0
22:20:38.504 -> GSM_count=0
22:20:38.776 -> GSM_start_N=0
22:20:38.776 -> GSM_wait=0
22:20:38.776 -> GSM_count=0
22:20:39.082 -> GSM_start_N=0
22:20:39.082 -> GSM_wait=0
22:20:39.082 -> GSM_count=0
22:20:39.388 -> GSM_start_N=0
22:20:39.388 -> GSM_wait=0
22:20:39.388 -> GSM_count=0

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#16

Сообщение Fghjk » 08.11.2019{, 22:30}

Изменения в счетчике видимо происходят здесь:
СпойлерПоказать
if (GSM_wait)//ожиание ответа на команду
{
if(GSM_line.length()>0){
if(GSM_line==F("> ")) {
GSM_count++;
GSM_wait=0;
GSM_line = "";} }

if(GSM_T_millis>GSM_time){
GSM_err (2,0);}
}
Отправлено спустя 1 минуту 55 секунд:
if (GSM_wait)

НО GSM_wait то у нас "0"!!!
Fghjk писал(а):
08.11.2019{, 22:13}
22:12:27.565 -> GSM_wait=0

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#17

Сообщение Fghjk » 08.11.2019{, 22:49}

GSM_line у меня всегда " ".
пробел т.е.
СпойлерПоказать
22:48:32.225 -> GSM_wait=0
22:48:32.225 -> GSM_count=0
22:48:32.259 -> GSM_line=
22:48:32.735 -> GSM_start_N=0
22:48:32.735 -> GSM_wait=0
22:48:32.735 -> GSM_count=0
22:48:32.769 -> GSM_line=
22:48:33.244 -> GSM_start_N=0
22:48:33.244 -> GSM_wait=0
22:48:33.244 -> GSM_count=0
22:48:33.278 -> GSM_line=
вот здесь присваивается пробел в значение "GSM_line"
СпойлерПоказать
while(Serial_S.available()) //Получаем данные с модема
{GSM_ch = Serial_S.read();
if(GSM_ch == '\r') continue;
if(GSM_ch == '\n') {
GSM_GotLineFromNeoway();
GSM_line = "";
}
else GSM_line += GSM_ch;
}

zhulen820
Сержант
Сообщения: 193
Зарегистрирован: 29.08.2016{, 22:44}
Репутация: 6
Откуда: Серпухов
Имя: Александр

SIM800L + ESP8266

#18

Сообщение zhulen820 » 08.11.2019{, 22:59}

Да блок 100% рабочий. Только неделю назад делал сигналку товарищу (esp-12 + SIM800L), сейчас работает без проблем. Мне кажется не там проблему ищете. Смотреть надо питание, были еще проблемы с хаотичной работе когда SIM800 находился вблизи ESP. ПРишлось разносить немного на 4-5см, поставить каждой плате свой стабилизатор питания и все ОК. Единственное, входщие звонки сбрасывает. Какие только настройки не делал на модуле. Но нужны были только смс поэтому так и оставил.

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#19

Сообщение Fghjk » 08.11.2019{, 23:02}

zhulen820 писал(а):
08.11.2019{, 22:59}
Да блок 100% рабочий. Только неделю назад делал сигналку товарищу (esp-12 + SIM800L), сейчас работает без проблем. Мне кажется не там проблему ищете. Смотреть надо питание, были еще проблемы с хаотичной работе когда SIM800 находился вблизи ESP. ПРишлось разносить немного на 4-5см, поставить каждой плате свой стабилизатор питания и все ОК. Единственное, входщие звонки сбрасывает. Какие только настройки не делал на модуле. Но нужны были только смс поэтому так и оставил.
да как рабочий если не работает?)

Может есп8266 не успевает ответ получить от сим800? в самый первый момент загрузки..

у вас как включается сим800 - одновременно с есп8266?

Fghjk
Сержант
Сообщения: 158
Зарегистрирован: 28.10.2019{, 15:53}
Репутация: 2
Имя: fghjk

SIM800L + ESP8266

#20

Сообщение Fghjk » 08.11.2019{, 23:03}

Fghjk писал(а):
08.11.2019{, 22:49}
GSM_line = "";
GSM_line = ""; означает что нет ответа от модуля.
Вернее он равен " ", т.е. пусто, пробел и т.д.

Ответить

Вернуться в «ESP8266»