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(); } }
команды просто для нового модема читать не пробовал?! может там нет таких просто. и другие или надо новую прошивку чтоб понимала.
команды просто для нового модема читать не пробовал?! может там нет таких просто. и другие или надо новую прошивку чтоб понимала.
спасибо, разобрался. Дело было в командах