В итоге не помогают команды на стирание хоть всего, хоть отправленных только, хоть в сетапе хоть в командной строке.
2
ОТвет после запуска
3
+CMGS: 93
4
5
OK
6
7
Что получается т.к. никто с этим не сталкивался и у остальных работает нормально то можно пока на это подзабить я полагаю, иначе эта тема была бы уже давно раскушена.
To NiKK 80: Кстати, решая свои проблемы по запустку своего модуля, я тоже упустил эту деталь. Сейчас в режиме отладки скеча, у меня +GMGS: 32
и так понимаю тоже никакие комманды типа DEL ALL, DEL SENT не помагают. Счетчик ползет наверх. Только вот в чем вопрос, эти смс-ки все же забивают симку, оставаясь внутри неё, или просто идет отсчет модулем отосланных смс-ок?
Удивителен еще вот какой факт: получаешь значит цифиру (например +GMGS: 30) и думаешь, что в памяти симки сохраняются 30 смс-ок. Делаешь DEL ALL или DEL SENT, получаешь положительный ответ, пытаешься (для контроля) прочитать группы смс-ок, в ответ пусто. Думаешь: Всё, работает. Модуль шлет смс-ку и в ответ: +GMGS: 31. Может все таки просто счетчик?
Досадно что нет тут возможности подключить батареечку для RTS...
Есть вопросы
1. Кто знает какое количество вмещается в sim800l входящих СМСок?
2. Подскажите также есть ли такие АТ команды , которыми можно просмотреть списком , входящие и исходящие звонки?
3. По СМС тоже такой вопрос, тут есть просмотр входящих AT+CMGL="ALL", а исходящие и сохраненные СМС, сохраняются ли в самом модуле , если да то как их можно просмотреть?
datasheet , это для тех кто без "учителя" все может освоить, для меня конечно английская грамота чуть понятнее чем китайская, но многое совсем простое понять не могу..
Честно говоря я наверное тут один такой, если бы не форум, то вообще бы ни на цент ничего не понял, о чем там.
И все таки, есть ли словесный ответ на мои вопросы?.
Short Circuit пишет:
ваши смс по умолчанию будут на симкарту писаться, а не по умолчанию
тут тоже вопросы, по умолчанию AT+CPBS="SM"
а если я активирую записи командой AT+CPBS="ME", все будет в памяти модуля sim800?
//К примеру, команда отправки сохраненного сообщения под номером 12 выглядит так:
2
3
AT+CMGS=12
4
//Этот способ удобен в тех случаях, когда один и тот же текст нужно доставить нескольким адресатам. Вместо того чтобы каждый раз передавать его устройству, достаточно один раз сохранить сообщение в памяти, а затем указывать модему лишь его индекс и номер получателя.
To NiKK 80: Кстати, решая свои проблемы по запустку своего модуля, я тоже упустил эту деталь. Сейчас в режиме отладки скеча, у меня +GMGS: 32
и так понимаю тоже никакие комманды типа DEL ALL, DEL SENT не помагают. Счетчик ползет наверх. Только вот в чем вопрос, эти смс-ки все же забивают симку, оставаясь внутри неё, или просто идет отсчет модулем отосланных смс-ок?
Удивителен еще вот какой факт: получаешь значит цифиру (например +GMGS: 30) и думаешь, что в памяти симки сохраняются 30 смс-ок. Делаешь DEL ALL или DEL SENT, получаешь положительный ответ, пытаешься (для контроля) прочитать группы смс-ок, в ответ пусто. Думаешь: Всё, работает. Модуль шлет смс-ку и в ответ: +GMGS: 31. Может все таки просто счетчик?
я тоже это заметил до вас но решил что и удалять тогда не нужно, (пока не пробовал)
а вот например так сформировать смс и послать несколько строк: не получается, использую процедуру отправки вверху - в смс приходит только "Rele-1: 0" например, в епром пишу 1 или 0 (вкл или выкл реле) почему не приходят остальные строки?? пробовал по разному, одна строка на ура. а больше нет..
#include
SoftwareSerial gsm(2, 3); // 2-txd, 3-rxo , Arduino mini или Arduino nano
void setup()
{
gsm.begin(9600);
gsm.write("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
gsm.write("AT+IFC=1, 1\r"); //устанавливает программный контроль потоком передачи данных
delay(300);
gsm.write("AT+CPBS=\"SM\"\r");//открывает доступ к данным телефонной книги SIM-карты
delay(300);
gsm.write("AT+CNMI=1,2,2,1,0\r");// включает оповещение о новых сообщениях, новые сообщения
delay(500);
gsm.write("AT+GSMBUSY=1\r\n"); // запрет всех входящих звонков.
delay(300);
gsm.write("AT+CMGDA=DEL ALL\r\n"); // команда удалит все сообщения
delay(500);
gsm.println("AT+CSQ");// Проверяем уровень сигнала
delay(800);
}
void loop()
{
//*******************************************************************
if (gsm.available()) { //есть данные от GSM модуля
String currStr = ""; //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
String currStrN = "";
String dataBalanceTemp = "";
String dataBalance = "";
String dataSms = "";
String val = "";
int flag1 = 0;
int flag2 = 0;
while (gsm.available()) { //сохраняем входную строку в переменную val
c:
int ch = gsm.read(); //int
val += char(ch); // String
char data = ch; // char = int
if ('\r' == data) {
currStr = "";
} else if ('\n' != data) {
currStr += String(data);
dataSms = currStr;
}
честно говоря, код считается крайне плохо, местами вообще непонятно из-за лишнего переноса строк, вы можете нормально вставить код в веб форму?? а то вроде хотите дать совет, а сами и не можете нормально совет оформить в удобоваримую форму.
поканичего не понятно, просто куски непонятного кода.
читал, а потом проверял на разных операторах, и скажу что автор заблуждается, работает не везде, и по умолчанию у операторов "111# а #111# то программистты у операторов сами допилили имхо..
а никто не делал код на интелектуальную проверку баланса симкарты, тоесть раз в сутки или по событию идет проверка баланса и ответ сравнивается с цифрой 100 например. если там баланс ниже 100 - шлем владельцу смс с остатком на балансе.
а никто не делал код на интелектуальную проверку баланса симкарты, тоесть раз в сутки или по событию идет проверка баланса и ответ сравнивается с цифрой 100 например. если там баланс ниже 100 - шлем владельцу смс с остатком на балансе.
Отличный пост, надо сделать:)
Как сделаю, напишу, но только для МТС
Немного отвлечённый вопрос, модуля под рукой сейчас нет чтоб проверить. Вопрос о приеме СМС модулем длинных текстовых сообщений. При отправке длинных СМС сообщений, насколько я знаю, текст разбивается на отдельные сообщения по 140 символов, а при приеме на уровне оператора (?) они склеиваются и получателю приходит одно длинное сообщение ? Я не ошибаюсь? Поправьте если не так. Так вот, мне необходимо будет отправлять на модуль оччень длинную строку, т.е. несколько СМС сразу. Что меня ждёт? У него ограничения какие-то по СМС, по длине строки и т.д. ?
смс ограничение 140 символов или сколько там. так я так понимаю это в обе стороны.
только вот откуда телефон знает, что данные два сообщения нужно склеить а не по одному показывать? видать есть служебная инфа. ведь если послать два отдельных с одного номера, то два отдельных и придет.
Интересные статьи, хорошо описано. Но, наверное, чтоб создать или распарсить строку PDU уже есть что-то готовое, типа библиотек или каждый ковыряется в одиночку и переставляет байты местами?
Я ковырялся, отталкиваясь от указанных статей. Но мне не надо было слеплять сообщения друг с другом. Написал простенькие говноклассы, если кому пригодится, мне не жалко:
пробую этот скетч, перебирая скорости для модуля.... в монитор порта после Goodnight moon! через некоторое время приходят пробелы. бесконечное количество.... непонятно
1
В итоге не помогают команды на стирание хоть всего, хоть отправленных только, хоть в сетапе хоть в командной строке.
2
ОТвет после запуска
3
+CMGS: 93
4
5
OK
6
7
Что получается т.к. никто с этим не сталкивался и у остальных работает нормально то можно пока на это подзабить я полагаю, иначе эта тема была бы уже давно раскушена.
01
#include <SoftwareSerial.h>
02
SoftwareSerial mySerial(2, 3);
// RX, TX
03
void
setup
() {
04
Serial
.begin(9600);
//Скорость порта для связи Arduino с компьютером
05
Serial
.println(
"Goodnight moon!"
);
06
mySerial.begin(9600);
//Скорость порта для связи Arduino с GSM модулем
07
//mySerial.println("ATE0");
08
mySerial.print(
"AT+CMGF=1\r"
);
//устанавливает текстовый режим смс-сообщения
09
delay(1000);
10
mySerial.print(
"AT+IFC=1, 1\r"
);
// устанавливает программный контроль потоком передачи данных
11
delay(1000);
12
mySerial.println(
"AT+CLIP=1\r"
);
//включаем АОН
13
delay(1000);
14
mySerial.println(
"AT+CSCS=\"GSM\"\r"
);
//режим кодировки текста
15
delay(1000);
16
mySerial.print(
"AT+CPBS=\"SM\"\r"
);
// открывает доступ к данным телефонной книги SIM-карты
17
// delay(1000);
18
// mySerial.print("AT+CNMI=1,2,2,1,0\r");
19
delay(1000);
20
mySerial.println(
"AT+CMGDA=\"DEL SENT\""
);
21
delay(1000);
22
mySerial.print(
"AT+CMGS="
);
// отправляем смс
23
mySerial.print((
char
)34);
24
mySerial.print(
"89111234567"
);
// номер получателя
25
mySerial.print((
char
)34);
// символ кавычки "
26
mySerial.print((
char
)13);
// символ <cr> (ASCII character 13)
27
delay(1500);
28
mySerial.print(
"SMS from GSM Shields"
);
// текст смс
29
delay(500);
30
mySerial.print((
char
)26);
// символ <ctrl-z> (ASCII character 26)
31
}
32
33
void
loop
()
34
{
35
36
if
(mySerial.available())
37
Serial
.write(mySerial.read());
38
if
(
Serial
.available())
39
mySerial.write(
Serial
.read());
40
delay(2);
41
42
43
44
}
если с терминалки не удалет - то очень странно.
у меня со всех модулей в терминалке честно все команды работают, в том числе и эта.
To NiKK 80: Кстати, решая свои проблемы по запустку своего модуля, я тоже упустил эту деталь. Сейчас в режиме отладки скеча, у меня +GMGS: 32
и так понимаю тоже никакие комманды типа DEL ALL, DEL SENT не помагают. Счетчик ползет наверх. Только вот в чем вопрос, эти смс-ки все же забивают симку, оставаясь внутри неё, или просто идет отсчет модулем отосланных смс-ок?
Удивителен еще вот какой факт: получаешь значит цифиру (например +GMGS: 30) и думаешь, что в памяти симки сохраняются 30 смс-ок. Делаешь DEL ALL или DEL SENT, получаешь положительный ответ, пытаешься (для контроля) прочитать группы смс-ок, в ответ пусто. Думаешь: Всё, работает. Модуль шлет смс-ку и в ответ: +GMGS: 31. Может все таки просто счетчик?
Надо будет попробовать считать с него отправленные смс должна быть такая команда. Буду читать datasheet.
Здравствуйте.
С интересом рассматриваю возможности sim800l.
Досадно что нет тут возможности подключить батареечку для RTS...
Есть вопросы
1. Кто знает какое количество вмещается в sim800l входящих СМСок?
2. Подскажите также есть ли такие АТ команды , которыми можно просмотреть списком , входящие и исходящие звонки?
3. По СМС тоже такой вопрос, тут есть просмотр входящих AT+CMGL="ALL", а исходящие и сохраненные СМС, сохраняются ли в самом модуле , если да то как их можно просмотреть?
2 - а помоему даташит более красноречивее вам скажет.
ваши смс по умолчанию будут на симкарту писаться, а не по умолчанию - есть команды их даташита..
datasheet , это для тех кто без "учителя" все может освоить, для меня конечно английская грамота чуть понятнее чем китайская, но многое совсем простое понять не могу..
Честно говоря я наверное тут один такой, если бы не форум, то вообще бы ни на цент ничего не понял, о чем там.
И все таки, есть ли словесный ответ на мои вопросы?.
тут тоже вопросы, по умолчанию AT+CPBS="SM"
а если я активирую записи командой AT+CPBS="ME", все будет в памяти модуля sim800?
и в даташате, и в интернете - и так многое понтно без особых знаний английского, я тоже не знаю английский.
опрсите потом выбранную записную книжку - сколько там ячеек и т.д. запишите номер в ячейку, считайте.. и т.д.
Опрашиваю
01
AT+CPBS=
"SM"
02
03
AT+CPBS?
04
05
+CPBS:
"SM"
,6,250
06
07
OK
08
09
AT+CPBS=
"ME"
10
OK
11
12
AT+CPBS?
13
+CPBS:
"ME"
,3,100
14
OK
Потренировался тут чуть, оказвается в памяти модуля может храниться тольк10 СМС.
свое неотправленое сообщение пишется командой AT+CMGW , с этой командой все ОК.
А вот отправить это сохраненое неотправленное сообщение похоже что тут есть проблема
должно работать так
1
//К примеру, команда отправки сохраненного сообщения под номером 12 выглядит так:
2
3
AT+CMGS=12
4
//Этот способ удобен в тех случаях, когда один и тот же текст нужно доставить нескольким адресатам. Вместо того чтобы каждый раз передавать его устройству, достаточно один раз сохранить сообщение в памяти, а затем указывать модему лишь его индекс и номер получателя.
5
6
AT+CMGS=12,
"+79295556924"
7
AT+CMGS=12,
"+79295556925"
8
AT+CMGS=12,
"+79295556926"
Разве тут такое ,не применимо?
To NiKK 80: Кстати, решая свои проблемы по запустку своего модуля, я тоже упустил эту деталь. Сейчас в режиме отладки скеча, у меня +GMGS: 32
и так понимаю тоже никакие комманды типа DEL ALL, DEL SENT не помагают. Счетчик ползет наверх. Только вот в чем вопрос, эти смс-ки все же забивают симку, оставаясь внутри неё, или просто идет отсчет модулем отосланных смс-ок?
Удивителен еще вот какой факт: получаешь значит цифиру (например +GMGS: 30) и думаешь, что в памяти симки сохраняются 30 смс-ок. Делаешь DEL ALL или DEL SENT, получаешь положительный ответ, пытаешься (для контроля) прочитать группы смс-ок, в ответ пусто. Думаешь: Всё, работает. Модуль шлет смс-ку и в ответ: +GMGS: 31. Может все таки просто счетчик?
я тоже это заметил до вас но решил что и удалять тогда не нужно, (пока не пробовал)
Потренировался тут чуть, оказвается в памяти модуля может храниться тольк10 СМС.
свое неотправленое сообщение пишется командой AT+CMGW , с этой командой все ОК.
А вот отправить это сохраненое неотправленное сообщение похоже что тут есть проблема
должно работать так
1
AT+CMGS=12,
"+79295556924"
2
AT+CMGS=12,
"+79295556925"
3
AT+CMGS=12,
"+79295556926"
Разве тут такое ,не применимо?
AT+CMGF=1
OK
AT+CMGS="+......."
>TEST <Ctrl+Z>
+CMGS: 239
а чем этот вариант хуже?
Слишком он прост, нет "пространства " для творчества.
А какой модуль у вас , что " +CMGS: 239 " достигло аж 239?
У меня по запросу
ATI //выдает
SIM800 R14.18
OK
Слишком он прост, нет "пространства " для творчества.
01
#include <SoftwareSerial.h>
02
SoftwareSerial mySerial(2, 3);
// RX, TX
03
void
setup
() {
04
Serial
.begin(19200);
//Скорость порта для связи Arduino с компьютером
05
Serial
.println(
"Goodnight moon!"
);
06
mySerial.begin(19200);
//Скорость порта для связи Arduino с GSM модулем
07
mySerial.println(
"AT"
);
08
}
09
10
void
loop
() {
11
if
(mySerial.available())
12
Serial
.write(mySerial.read());
13
if
(
Serial
.available())
14
mySerial.write(
Serial
.read());
15
}
16
17
// Процедура для отправки СМС
18
19
void
sms(String text, String phone) {
20
Serial
.println(
"SMS send started"
);
21
mySerial.println(
"AT+CMGS=\""
+ phone +
"\""
);
22
delay(1000);
23
mySerial.print(text);
24
delay(300);
25
mySerial.print((
char
)26);
26
delay(300);
27
Serial
.println(
"SMS send finish"
);
28
delay(3000);
29
}
30
31
// Процедуру добавлять в конец скетча и вызывать её из основного цикла так:
32
sms(String(
"текст СМС на англ."
),String(
"+791212345678"
));
а здесь есть где творчеству развиваться? я думаю - да.
01
void
sendsms(String sms_number, String sms_text)
02
{ delay(100);
03
gsm.print(
"AT+CMGS=\""
);
04
gsm.print((String)sms_number);
05
gsm.println(
"\""
);
06
delay(100);
07
gsm.println((String)sms_text);
08
delay(100);
09
gsm.write(0x1A);
// command for send sms, code for CTRL-Z
10
//gsm.print((char)26); // ^Z
11
//gsm.print((char)13); // CR
12
delay(2000);
13
Serial
.println(
"Sending SMS\n"
);
14
delay(100);
15
gsm.println (
"AT+CMGD=4"
);
// удалить все смс
16
delay(100);
17
//getGSManswer();
18
}
19
20
sendsms(
"+381234567890"
,
"VKLUYCHENIE ! "
);
// отправка смс на номер
учимся правильно отправлять смс в которой сразу несколько строк.
мой опыт пока отрицательный.
смс в одну строку получается например таким кодом:
а вот например так сформировать смс и послать несколько строк: не получается, использую процедуру отправки вверху - в смс приходит только "Rele-1: 0" например, в епром пишу 1 или 0 (вкл или выкл реле) почему не приходят остальные строки?? пробовал по разному, одна строка на ура. а больше нет..
1
sms_txt = sms_txt +
"Rele-1: "
+ String(EEPROM.read(2)) +
"\r\n"
; delay(10);
2
sms_txt = sms_txt +
"Rele-2: "
+ String(EEPROM.read(2)) +
"\r\n"
; delay(10);
3
sms_txt = sms_txt +
"Rele-3: "
+ String(EEPROM.read(3)) +
"\r\n"
; delay(10);
4
5
6
sendsms(
"+381234567890"
,sms_txt);
// отправка смс на номер
Как правильно "собрать смс из нескольких строк", где бывают ошибки? Потому что смотрю не только у меня по одной строке смс шли?
а где тут отправка нескольких строк то ?
А не пробовал
gsm.print("Rele-1: ");
gsm.print(String(EEPROM.read(2)))
gsm.print("\r\n")
итак далеевсе твои строчки за раз а потом символ отправки
да, по ходу ковырял и понял почему строчки не строятся как хочется, оставил только \n
и все отправилось как нужно, это я понял символ перевода строки.
еще вопрос, Делаю проверку баланса счета и смотрю что вычитывает ардуина..
так вот ответ такой:
//Разбор баланса для оператора МТС
#include
SoftwareSerial gsm(2, 3); // 2-txd, 3-rxo , Arduino mini или Arduino nano
void setup()
{
gsm.begin(9600);
gsm.write("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
gsm.write("AT+IFC=1, 1\r"); //устанавливает программный контроль потоком передачи данных
delay(300);
gsm.write("AT+CPBS=\"SM\"\r");//открывает доступ к данным телефонной книги SIM-карты
delay(300);
gsm.write("AT+CNMI=1,2,2,1,0\r");// включает оповещение о новых сообщениях, новые сообщения
delay(500);
gsm.write("AT+GSMBUSY=1\r\n"); // запрет всех входящих звонков.
delay(300);
gsm.write("AT+CMGDA=DEL ALL\r\n"); // команда удалит все сообщения
delay(500);
gsm.println("AT+CSQ");// Проверяем уровень сигнала
delay(800);
}
void loop()
{
//*******************************************************************
if (gsm.available()) { //есть данные от GSM модуля
String currStr = ""; //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
String currStrN = "";
String dataBalanceTemp = "";
String dataBalance = "";
String dataSms = "";
String val = "";
int flag1 = 0;
int flag2 = 0;
while (gsm.available()) { //сохраняем входную строку в переменную val
c:
int ch = gsm.read(); //int
val += char(ch); // String
char data = ch; // char = int
if ('\r' == data) {
currStr = "";
} else if ('\n' != data) {
currStr += String(data);
dataSms = currStr;
}
// Начинаем разбор полученного смс, Работает 100% с оператором МТС
//Полученный текст: +CUSD: 0, "Balance:117,27r ", 15
if (data == 'U' && flag1 == 2){flag2 = 3;}
if (data == 'S' && flag2 == 3){flag2 = 4;}
if (data == 'D' && flag2 == 4){flag2 = 5;}
if (data == ':' && flag2 == 5){flag2 = 6;}
if (data == '"' && flag2 == 6){dataBalanceTemp = ""; flag2 = 7; goto c;}
if (data != '"' && flag2 == 7){dataBalanceTemp += String(data); dataBalance = dataBalanceTemp;}
if (data == '"' && flag2 == 7){flag2 = 8;}
}
// Смотрим данные полученные от модуля, Получили смс с балансом, теперь отсылаем
if (val.indexOf("+CUSD:") > -1) {
// +CUSD: 0, "Balance:117,27r ", 15
if (dataBalance != "") {
smsSendAlarm("Hi, " + dataBalance);
dataBalance = "";
}
}
// Читаем смс полученные с мобильного
if (val.indexOf("+CMT") > -1) {
if (dataSms.indexOf("Balans") > -1) { // Запрос баланса
GoBalans();
}
}
}
}
//процедура отправки СМС
void smsSendAlarm(String text) {
String NBoss = "79115557744";
gsm.println("AT+CMGS=\"" + NBoss + "\""); //Отправляем на GSM комманду отправка смс-номер
NBoss = ""; //Очищаем перемунную
delay(300); //Делаем задержку на передачу комманды
gsm.print(text); //Отправляем на GSM комманду отправка смс-текст
text = ""; //Очищаем перемунную
delay(500); //Делаем задержку на передачу комманды
gsm.print((char)26); //Отправляем на GSM комманду отправка смс!
delay(5000); //Делаем задержку отправку смс
}
//Отправка смс о балансе
void GoBalans(){
gsm.print("AT+CUSD=1,");
gsm.print('"');
gsm.print("#100#");
gsm.println('"');
}
честно говоря, код считается крайне плохо, местами вообще непонятно из-за лишнего переноса строк, вы можете нормально вставить код в веб форму?? а то вроде хотите дать совет, а сами и не можете нормально совет оформить в удобоваримую форму.
поканичего не понятно, просто куски непонятного кода.
еще один момент не ясен:
как верно вставить строку AT+CUSD=1,"*101#" ??
делаю так:
1
gsm.println(
"AT+CUSD=1,"
*101#
""
); delay(50);
//USSD запрос баланса
2
3
gsm.println(
"AT+CUSD=1,"
*101#
"/"
); delay(50);
//USSD запрос баланса
но ругается компилятор на:
exit status 1 stray '#' in progra
ссылка на файл запроса баланса и ответ обратно на телефон:
https://yadi.sk/d/xlAHdS5BsXLWJ
еще один момент не ясен:
как верно вставить строку AT+CUSD=1,"*101#" ??
делаю так:
1
gsm.println(
"AT+CUSD=1,"
*101#
""
); delay(50);
//USSD запрос баланса
2
3
gsm.println(
"AT+CUSD=1,"
*101#
"/"
); delay(50);
//USSD запрос баланса
но ругается компилятор на:
exit status 1 stray '#' in progra
Правильно писать:
gsm.print("AT+CUSD=1,");
gsm.print('"');
gsm.print("#100#");
gsm.println('"');
кто вам сказал что правильно #100# а *100# - неправильно ??
как раз *100# - работает, а первый вариант - нет.
и зависит это от оператора, хотя *100# - помоему это всегда работает, это команда по умолчанию.
кто вам сказал что правильно #100# а *100# - неправильно ??
как раз *100# - работает, а первый вариант - нет.
и зависит это от оператора, хотя *100# - помоему это всегда работает, это команда по умолчанию.
читать надо лучше, в нете дофига примеров
кто вам сказал что правильно #100# а *100# - неправильно ??
как раз *100# - работает, а первый вариант - нет.
и зависит это от оператора, хотя *100# - помоему это всегда работает, это команда по умолчанию.
Почитай тут: http://alex-exe.ru/radio/wireless/gsm-sim900-at-command/
Раздел :USSD (Команды приведены для текстового режима и в GSM кодировке.)
Хочу отметить, #100# поддерживают все операторы, ответ приходит на латинице
Всем доброго дня.
Кое-что по работе с SIM800L есть здесь:
http://arduino.ru/forum/proekty/gsm-sistema-kontrolya-za-avtomaticheskim...
читал, а потом проверял на разных операторах, и скажу что автор заблуждается, работает не везде, и по умолчанию у операторов "111# а #111# то программистты у операторов сами допилили имхо..
а никто не делал код на интелектуальную проверку баланса симкарты, тоесть раз в сутки или по событию идет проверка баланса и ответ сравнивается с цифрой 100 например. если там баланс ниже 100 - шлем владельцу смс с остатком на балансе.
а никто не делал код на интелектуальную проверку баланса симкарты, тоесть раз в сутки или по событию идет проверка баланса и ответ сравнивается с цифрой 100 например. если там баланс ниже 100 - шлем владельцу смс с остатком на балансе.
Отличный пост, надо сделать:)
Как сделаю, напишу, но только для МТС
я делал. Только не раз в сутки, а просто с интервалом времени после отправки сообщения с контроллера.
Коллеги, вопрос. Сжег свой модуль GSM, приобрел другой. Вопрос: куда эту проволочку припаивать?
если антенна с разьемом не ставится, то рядом с разьемом - пин для запаивания "проволочки" - тоесть антенны.
Т.е. , проволочка ставится вместо антенны? А если я подключаю внешнюю антенну, то проволочка не нужна, верно?
и то и то - антенны. ставите одну антенну само собой.
Спасибо!
Немного отвлечённый вопрос, модуля под рукой сейчас нет чтоб проверить. Вопрос о приеме СМС модулем длинных текстовых сообщений. При отправке длинных СМС сообщений, насколько я знаю, текст разбивается на отдельные сообщения по 140 символов, а при приеме на уровне оператора (?) они склеиваются и получателю приходит одно длинное сообщение ? Я не ошибаюсь? Поправьте если не так. Так вот, мне необходимо будет отправлять на модуль оччень длинную строку, т.е. несколько СМС сразу. Что меня ждёт? У него ограничения какие-то по СМС, по длине строки и т.д. ?
Нет. Получателю приходит N сообщений, и склеивать их в одно - задача на стороне получателя.
смс ограничение 140 символов или сколько там. так я так понимаю это в обе стороны.
только вот откуда телефон знает, что данные два сообщения нужно склеить а не по одному показывать? видать есть служебная инфа. ведь если послать два отдельных с одного номера, то два отдельных и придет.
В служебных заголовках всё указано - к какому сообщению относится полученная часть, и номер этой части.
это видно в терминалке если принимать инфу с модуля?
За текстовый режим не скажу, в PDU-режиме - да, видно, там всё закодировано в PDU-пакете.
а если он не пду? а в текстовом режиме.
За текстовый не скажу, т.к. работаю только с PDU.
а есть рекомедация в каком документе почитать как с смс работать, или достаточно доков от симкома?
http://hardisoft.ru/soft/samodelkin-soft/poluchenie-i-dekodirovanie-sms-...
http://hardisoft.ru/soft/samodelkin-soft/poluchenie-i-dekodirovanie-sms-soobshhenij-v-formate-pdu/
Интересные статьи, хорошо описано. Но, наверное, чтоб создать или распарсить строку PDU уже есть что-то готовое, типа библиотек или каждый ковыряется в одиночку и переставляет байты местами?
Я ковырялся, отталкиваясь от указанных статей. Но мне не надо было слеплять сообщения друг с другом. Написал простенькие говноклассы, если кому пригодится, мне не жалко:
https://github.com/Porokhnya/GreenhouseProject/blob/master/Main/PDUClasses.h
https://github.com/Porokhnya/GreenhouseProject/blob/master/Main/PDUClasses.cpp
Там работа с UTF-8, правда, идёт, т.к. все исходники у меня в этой кодировке сохраняются. По итогу - можно принимать/отправлять SMS на русском.
Ну и, конечно, код по приведённым ссылкам полностью не мой - что-то надёргано из сторонних источников, сейчас уже и не упомню, из каких.
блин, чото не получается подружится с модулем(
пробую этот скетч, перебирая скорости для модуля.... в монитор порта после Goodnight moon! через некоторое время приходят пробелы. бесконечное количество.... непонятно
питание 4в
01
#include <SoftwareSerial.h>
02
SoftwareSerial mySerial(2, 3);
// RX, TX
03
void
setup
() {
04
Serial
.begin(19200);
//Скорость порта для связи Arduino с компьютером
05
Serial
.println(
"Goodnight moon!"
);
06
mySerial.begin(19200);
//Скорость порта для связи Arduino с GSM модулем
07
mySerial.println(
"AT"
);
08
}
09
10
void
loop
() {
11
if
(mySerial.available())
12
Serial
.write(mySerial.read());
13
if
(
Serial
.available())
14
mySerial.write(
Serial
.read());
15
}