SIM900 парсинг оператора
- Войдите на сайт для отправки комментариев
Чт, 08/06/2017 - 23:50
Всем привет!
Хочу получить в переменную имя оператора с помощью АТ команд.
На данный момент научился читать смски на примере скетча по влючению светодиодов.
#include <SoftwareSerial.h> SoftwareSerial gprsSerial(7, 8); //для зелёного светодиода будем использовать второй цифровой вход, //а для жёлтого - третий int greenPin = 2; int yellowPin = 3; void setup() { gprsSerial.begin(19200); pinMode(greenPin, OUTPUT); pinMode(yellowPin, OUTPUT); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); } String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void loop() { if (!gprsSerial.available()) return; char currSymb = gprsSerial.read(); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Yellow on")) { digitalWrite(yellowPin, HIGH); } else if (!currStr.compareTo("Yellow off")) { digitalWrite(yellowPin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } }
На запрос AT+COPS? получаем ответ +COPS: 0,0,"MTS-RUS"
Я предполагаю, что должно получиться нечто после строки 56
else if (currStr.startsWith("+COPS)) { //как то взять например с 9го символа в переменную }
Как не знаю. Может у кого его пример на котором можно понять. Заранее благодарен.
по Вашей ссылке упоминается библиотека GPRS_Shield - скачайте ее и посмотрите, в ней внутри есть код получения СМС с разбором его на собственно текст, номер отправителя, дату и тд.
по Вашей ссылке упоминается библиотека GPRS_Shield - скачайте ее и посмотрите, в ней внутри есть код получения СМС с разбором его на собственно текст, номер отправителя, дату и тд.
Хочу построить на базе платки с WiFI (Wemos D1 R2) но с ней, к сожалению не работают библиотеки. Поэтому хочу написать свою ф-цию парсинга АТ команд. А так, заходя в тупик, уже думал сменить плату и построить скетч с библиотекой.
по Вашей ссылке упоминается библиотека GPRS_Shield - скачайте ее и посмотрите, в ней внутри есть код получения СМС с разбором его на собственно текст, номер отправителя, дату и тд.
Хочу построить на базе платки с WiFI (Wemos D1 R2) но с ней, к сожалению не работают библиотеки. Поэтому хочу написать свою ф-цию парсинга АТ команд. А так, заходя в тупик, уже думал сменить плату и построить скетч с библиотекой.
Новички часто склонны "обожествлять" библиотеки, на самом деле это не более чем набор таких же процедур, как и в вашем скетче. И пишут их зачастую далеко не гении. Если функция библиотеки глючит - смело смотрите исходный код и переписывайте под свои нужды.
Можете тогда дать пояснение по приведённому скетчу? Попробую сам придумать как парсить.
Насколько я понял ответ шилда при получении новой смс состоит из (построчно):
1. Переход строки;
2. Служебной информации начинающейся с +CMT;
3. Чистого текста смс
Читаем что говорит шилд в переменную char currSymb, если переход строки идём дальше.
Понимаю что здесь как-то реализовано построчное чтение, но моих знаний не достаочно что бы понять именно как.
Новички часто склонны "обожествлять" библиотеки, на самом деле это не более чем набор таких же процедур, как и в вашем скетче. И пишут их зачастую далеко не гении. Если функция библиотеки глючит - смело смотрите исходный код и переписывайте под свои нужды.
Тоже пришёл к такому выводу, но моих знаний не хватило что бы ковынуться глубже http://arduino.ru/forum/programmirovanie/biblioteka-gsmh-dlya-sim900
все-таки попытайтесь разобраться, внутри библиотеки функции местами неплохо комментированы, дан формат команд и ответов модема, например
Мне кажется, тут все должно быть понятно. Попробуйте переписать этот код под свои нужды, если не заработает - выложите его в форум и спросите совета.
Если что, я имею в виду вот эту библиотеку - GPRS_SIM900, как я уже писал, их в интернете много
все-таки попытайтесь разобраться, внутри библиотеки функции местами неплохо комментированы, дан формат команд и ответов модема, например
Мне кажется, тут все должно быть понятно. Попробуйте переписать этот код под свои нужды, если не заработает - выложите его в форум и спросите совета.
Если что, я имею в виду вот эту библиотеку - GPRS_SIM900, как я уже писал, их в интернете много
Скачал и установил упомянутую вами библиотеку, копал GSM.h не нашел какими пинами подключается RX TX и power on.
Скачал и установил упомянутую вами библиотеку, копал GSM.h не нашел какими пинами подключается RX TX и power on.
Вы что-то путаете, в этой библиотеке нет файла GSM.h
Подключение модема происходит следующей командой
Библиотеку не обязательно было устанавливать - используйте ее просто как пример исходного кода. Парсинг оператора посмотрите в функции GPRS::readSMS в файле GPRS_Shield_Arduino.cpp