GSM МОДУЛЬ Ai ThinkerTechnology для запуска webasto
- Войдите на сайт для отправки комментариев
Чт, 23/02/2017 - 21:32
Доброй вечер! У мнея появилась не большая пробляма с этим модемом. Раньше у меня стоял sim800 с ним проблем не было, сейчас поставил Ai ThinkerTechnology A6mini вот тут и начались танцы с бубном. Не могу считать смс из модема. Пожалуйста тыкните носом, что я не так делаю. Вот старый код, он полностью рабочий, хоть и кривой
#include <SoftwareSerial.h>
#include <avr/wdt.h>
int btnPin = 13;
String currStr = ""; // для цикла чтения смс
boolean isStringMessage = false; // Переменная принимает значение True, если текущая строка является сообщением
SoftwareSerial mySerial(10, 1); // RX, TX
int led=0;// переменная состояния диода
int pop=0; //Переменная числа попыток дозвона
unsigned long t = 0;
int webasto=0;
void setup () {
wdt_enable(WDTO_8S); // разрешение работы сторожевого таймера с тайм-аутом 8с
pinMode (13, OUTPUT);
Serial.begin(9600); // включаем хардовое сериал соединение с шилдом,
mySerial.begin(9600); // если хотим софтсериал, инклюдим библиотеку, прописываем пины, не забываем про джамперы на шилде
delay(7800);
wdt_reset();
delay(7800);
wdt_reset();
delay(7800);
wdt_reset();
delay(7800);
wdt_reset();
mySerial.print("AT+CFUN=1,1"); //перезагрузка модема на всякий
delay(100);
mySerial.print("AT+CLIP=1"); //включаем АОН
delay(100);
mySerial.print("AT+IFC=1, 1\r"); //устанавливает программный контроль потоком передачи данных
delay(100);
wdt_reset();
mySerial.print("AT+CPBS=\"SM\"\r"); //открывает доступ к данным телефонной книги SIM-карты
delay(100);
mySerial.print("AT+GSMBUSY=0, 1\r"); //запрет всех входящих звонков
delay(100);
mySerial.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
delay(300);
wdt_reset();
mySerial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти
}
void loop ()
{
wdt_reset();
readSMS ();// запускаем цикл чтения смс
led=digitalRead (13);
if (led == HIGH)
{
t=t-1;//Добовляем еденицу времени
}
if (t>142236)
{
t=0;
}
if (t<=0&&webasto==1) // если время прошло больше, чем заданно
{
digitalWrite (13, LOW);
webasto=0;
pop=5;
}
if((led == HIGH)||(led == LOW)&&pop>0)
{
call();
wdt_reset();
}
}
//-------------------------------------------------
void call()
{
if (pop>0)
{
Serial.println("дозвон");
mySerial.println("AT+CPAS");
if (mySerial.find("0"))
delay(100);
mySerial.println("ATD+375255326321;"); // звоним по указаному номеру
delay(100);
if (mySerial.find("OK")) Serial.println("OK!");
delay(6350);
wdt_reset();
delay(6350);
wdt_reset();
delay(6350);
wdt_reset();
pop=pop-1;
if (mySerial.find("BUSY")||mySerial.find("NO CARRIER")||mySerial.find("NO ANSWER"))
{
pop=0;
Serial.println("off");
}
}
}
//-----------------------------------------------------------------
void startOneSMS() //__________________Цикл подготовки модуля к отправке СМС-сообщений по номеру
{
mySerial.print("AT+CMGF=1\r");
delay(100);
mySerial.println("AT + CMGS = \"+375255326321\""); // (+79000000000 сдесь должен быть ваш номер )
delay(100);
}
//---------------------------------------------------------------------------------
void EndSMS ()//__________________Цикл подготовки модуля к заканчиваению отправки СМС-сообщений
{
delay(100);
mySerial.println((char)26); // Команда отправки СМС
delay(5000);
mySerial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти, можно убрать эту строку
delay (2000);
}
//-------------------------------------------------------------------------------------------------
void readSMS() //_____Цикл чтения входящих СМС-сообщений______________
{
if (!mySerial.available()) return;
char currSymb = mySerial.read();
if ('\r' == currSymb)
{
if (isStringMessage)
{
//если текущая строка - SMS-сообщение,
//отреагируем на него соответствующим образом
if (!currStr.compareTo("KOMANDA-ON-5"))
{ digitalWrite (13, HIGH);
pop=5;webasto=1; t=21458;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
if (!currStr.compareTo("KOMANDA-ON-10"))
{ digitalWrite (13, HIGH);
pop=5;t=42071;webasto=1;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
if (!currStr.compareTo("KOMANDA-ON-15"))
{ digitalWrite (13, HIGH);
pop=5;t=62695;webasto=1;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
if (!currStr.compareTo("KOMANDA-ON-20"))
{ digitalWrite (13, HIGH);
pop=5;t=83284;webasto=1;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
if (!currStr.compareTo("KOMANDA-ON-25"))
{ digitalWrite (13, HIGH);
pop=5;webasto=1;t=104225;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
if (!currStr.compareTo("KOMANDA-ON-30"))
{ digitalWrite (13, HIGH);
t=122888;webasto=1;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
if (!currStr.compareTo("KOMANDA-ON"))//35минут
{ digitalWrite (13, HIGH);
pop=5;t=142236;
webasto=1;
mySerial.print("AT+CMGDA=«DEL ALL»\r");}
// // удаляем все смски из памяти, включаем встроенный светик, если шилд получает смс с текстом KOMANDA-ON
else if (!currStr.compareTo("KOMANDA-OFF"))
{ digitalWrite (13, LOW); pop=5;webasto=0;
mySerial.print("AT+CMGDA=«DEL ALL»\r");} // удаляем все смски из памяти, можно убрать эту строку} что-то делаем, например выключаем встроенный светик, если шилд получает смс с текстом KOMANDA-OFF
isStringMessage = false;
}
else { if (currStr.startsWith("+CMT")) { isStringMessage = true;}} //если текущая строка начинается с "+CMT",то следующая строка является сообщением
currStr = "";
}
else if ('\n' != currSymb) { currStr += String(currSymb);}
}
//-----------------------------------------------------------------------
А вот что что модем выкидывает в сериал при отправке смс с командой (отправил 2 раза)
Ai Thinker Co.LTD
A6
V03.03.2016бБ‚ЉHЁР©бAT+CPBS="S
+CTZV:17/02/23,17:11:28,+03
+CIEV: "MESSAGE",1
+CMT: "+375255326321",,"2017/02/23,20:11:27+03"
KOMANDA-ON-15
+CTZV:17/02/23,17:11:42,+03
+CIEV: "MESSAGE",1
+CMT: "+375255326321",,"2017/02/23,20:11:40+03"
KOMANDA-ON-15
использовал этот код для чтения сообщений с модема
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600); //подключаем порт компьютера
mySerial.begin(9600); //подключаем порт модема (при других скоростях не отвечает)
mySerial.println("ATI"); //вывести в терминал иноформацию о модеме
delay(100);
mySerial.print("AT+CPBS=\"SM\"\r"); //открывает доступ к данным телефонной книги SIM-карты
delay(100);
mySerial.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
delay(300);
mySerial.println("AT+CPMS=""SM"",""SM"",""SM""");
delay(100);
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала (если 99, то связи нет)
delay(100);
mySerial.println("AT+CLIP=1"); //включаем АОН
delay(100);
mySerial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.)
delay(100);
mySerial.println("AT+CSCS=\"GSM\""); //режим кодировки текста
delay(100);
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
{
while(Serial.available())
{
mySerial.write(Serial.read());
}
mySerial.println();
}
}
команды просто для нового модема читать не пробовал?! может там нет таких просто. и другие или надо новую прошивку чтоб понимала.
команды просто для нового модема читать не пробовал?! может там нет таких просто. и другие или надо новую прошивку чтоб понимала.
спасибо, разобрался. Дело было в командах