SIM800L v2.0 - с какими библиотеками дружит? Не могу запустить на Меге.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Коллеги, приобрел сей модуль.

Пару раз даже удалось отправить с него СМС, но без использования библиотеки SIM900 (хотя где-то здесь читал, что они одинаковые для SIM800 и SIM900.

Пытаюсь однако подружить с библиотекой SIM900, ниже скетч.

В файле GSM.cpp установлены пины 0 и 1. На них же подключен и сам модуль.

01#include <SIM900.h>
02#include <sms.h>
03#include <SoftwareSerial.h>
04 
05//If not used, is better to exclude the HTTP library,
06//for RAM saving.
07//If your sketch reboots itself proprably you have finished,
08//your memory available.
09//#include "inetGSM.h"
10 
11//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
12#include "sms.h"
13SMSGSM sms;
14 
15//To change pins for Software Serial, use the two lines in GSM.cpp.
16 
17//GSM Shield for Arduino
18//www.open-electronics.org
19//this code is based on the example of Arduino Labs.
20 
21//Simple sketch to send and receive SMS.
22 
23int numdata;
24boolean started=false;
25char smsbuffer[160];
26char n[20];
27 
28 
29void setup()
30{
31  //Serial connection.
32  Serial.begin(19200);
33  Serial.println("GSM Shield testing.");
34  //Start configuration of shield with baudrate.
35  //For http uses is raccomanded to use 4800 or slower.
36  if (gsm.begin(19200)){
37    Serial.println("\nstatus=READY");
38    started=true
39  }
40  else Serial.println("\nstatus=IDLE");
41   
42  if(started){
43    //Enable this two lines if you want to send an SMS.
44    if (sms.SendSMS("+7910*******", "Arduino SMS"))
45      Serial.println("\nSMS sent OK");
46  }
47 
48};
49 
50void loop()
51{
52  if(started){
53    //Read if there are messages on SIM card and print them.
54    if(gsm.readSMS(smsbuffer, 160, n, 20))
55    {
56      Serial.println(n);
57      Serial.println(smsbuffer);
58    }
59    delay(1000);
60  }
61};

В результате только такие сообщения:

GSM Shield testing.
DB:NO RESP
DB:NO RESP
DB:NO RESP
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp

status=IDLE
 

Светодиод при подключении питания один горит постоянно, второй поначалу мигает часто, затем начинает мигать редко, прерывисто. При звонке на симку звонок проходит (т.е. симка в сети зарегистрировалась и доступна). Игрался с разными пинами (RX/TX), со скоростью порта. Один раз даже получилось, и модуль определился. Но тот скетч как назло не сохранился, я уже третий день бьюсь, ника не получается, хотя по памяти вроде все так.

Какие есть мысли?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Сам модуль:

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

точно такая же беда,  (мега и сим800), переходите комне в тему http://arduino.ru/forum/apparatnye-voprosy/sim800-ne-otvechaet-na-komandy#comment-171698 будем вмести решать :)

 

Jatixo
Offline
Зарегистрирован: 13.01.2016

dr.lmg пишет:

В файле GSM.cpp установлены пины 0 и 1. На них же подключен и сам модуль.900

Так у Вас получается эти же пины и на компьютер идут по USB и в GSM модуль?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Я пробовал на разные пины. На 14 и 15 аналогичная ситуация.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Так, по ходу я его победил!!! :)

Прописал в GSM.cpp пины 10 и 11, установил обен на 19200 бод и yes, it is! Модуль определился и отправил мне смс, а потом принял ответ и вывел его в терминал.

Теперь пытаюсь подружить его с основным скетчем на предмет отправки / получения СМС.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

УРА ! Получилось и отправлять и получать СМС с МЕГИ.

Использую библиотеку SIM900. Есть еще много непоняток, но в общем и в целом результат достигнут. Код, который приведен выше, как раз это позволяет сделать.

Пока только не разобрался, можно ли как-то вместо прямого текста подсунуть переменную, содержащую нужный текст?

1sms.SendSMS("+7910*******", "Arduino SMS")

То бишь вместо "Arduino SMS" подсунуть строковую переменную или массив. Пока не получается..

Jatixo
Offline
Зарегистрирован: 13.01.2016

char message[]="Hello world";

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

библиотеку где скачали? ,  я пытался найти для сим 800 но не могу скачать ))

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

смотрел настройки и библиотеку взял здесь: http://www.bohgelectronics.net/gsm-and-arduino.html

Там слева от видео ссылка на библиотеку.

После распаковки в файле GSM.cpp необходимо указать пины, на которые подключен модуль.

1#include "GSM.h"
2#include "WideTextFinder.h"
3 
4//De-comment this two lines below if you have the
5//first version of GSM GPRS Shield
6#define _GSM_TXPIN_ 11
7#define _GSM_RXPIN_ 10

У меня вот так. Пробовал на 0 и 1, пробовал на 15 и 16 - не работало. На 10 и 11 заработало. И затем запускаете из примеров библиотеки SMS, подставляете свой номер и пробуете.

Еще момент, у меня модуль уходил в перезагрузку при получении смс. МЕГА питалась от USB, а в аннотации к модулю указано напряжение 5 в и ток не ниже 1А. Быля просадка, подключил блок питания на 0,5А, сейчас просадки почти нет, но все равно периодичеки при получении сигнала модуль перезагружается. Так что к питанию тоже надо быть внимательным.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

спасибо попробую сейчас, посмотю , я в принципи через обычный сериал отправляю сообщения , вот с приемом еще не разобрался . но это мелочи а меня больше интересует  выход в интеренет через модуль, закидывать все буду через php cкрипт в базу данных, ну смс тоже будет учавствовать в качестве управления  ардуинкой.

так вот в интеренет пока не могу выйти, ставил теле2 сикарту но она почему то не подходит(возможно что она 3G  а модуль поддерживает 2G) , вставил мегафон заработал модуль. но рабочего примера не могу найти работы GPRS с мегафоном.

работа GPRS с симкартой теле2 http://2150692.ru/faq/62-gprs-svyaz-cherez-sim800l-i-arduino пробовал заменить настройки подключения но не помогло

01AT+SAPBR=3,1,"APN","internet"
02AT+SAPBR=3,1,"APN","internet"
03 
04OK
05 
06 
07AT+SAPBR=3,1,"USER","gdata"
08AT+SAPBR=3,1,"USER","gdata"
09 
10OK
11 
12 
13AT+SAPBR=3,1,"PWD","gdata"
14AT+SAPBR=3,1,"PWD","gdata"
15 
16OK
17 
18AT+SAPBR=1,1
19AT+SAPBR=1,1
20 
21ERROR
22 
23AT+HTTPINIT
24AT+HTTPINIT
25 
26ERROR

 

Jatixo
Offline
Зарегистрирован: 13.01.2016

А вначале еще AT+SAPBR=3,1,"CONTYPE","GPRS"

Деньги на счете есть, интернет с телефона работает с этой симкой?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

ДА на мобилке проверял, и Ваша строчка тоже есть

1String ATs[] = {  //массив АТ команд
2  "AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""//Установка настроек подключения
3  "AT+SAPBR=3,1,\"APN\",\"internet\"",
4  "AT+SAPBR=3,1,\"USER\",\"gdata\"",
5  "AT+SAPBR=3,1,\"PWD\",\"gdata\"",
6  "AT+SAPBR=1,1"//Устанавливаем GPRS соединение
7  "AT+HTTPINIT"//Инициализация http сервиса
8  "AT+HTTPPARA=\"CID\",1"  //Установка CID параметра для http сессии
9};

 

Jatixo
Offline
Зарегистрирован: 13.01.2016

Лучше с компьютера пробовать, также через монитор порта вводить команды, вдруг задержки не хватает и т.п.

Кстати, вполне вероятно, там модуль сеть то может не успеть найти, не то что GPRS, так что вначале попробуйте заменить delay(3000); на delay(15000);

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Я с интернетом пока не заморачивался, мне бы с СМС до конца разобраться.

Пока очередной затык: не могу понять, как удалить все СМС с сим карты. Посредстовм сериала и ат-команд в принципе понятно, а вот как при помощи библиотеки, не пойму.

Вроде нашел функцию sms.DeleteSMS, но что-то сдается мне, она работает не корректно.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Jatixo пишет:
char message[]="Hello world";

Спасибо, а как складывать несколько строк в одну переменную?

Т.е. мне теперь к этой строке char message[]="Hello world"; добавить еще строку "I'm back"?

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

отправляю все команды через монитор порта, вот както вроди ответы получаю положительные а на сайт ничего не приходит, посмотрите кто понимает может какую команду забыл

1AT
2AT+SAPBR=3,1,CONTYPE,GPRS,  //Установка настроек подключения
3AT+SAPBR=3,1,APN,internet,
4AT+SAPBR=3,1,USER,gdata,
5AT+SAPBR=3,1,PWD,gdata,
6AT+SAPBR=1,1",  //Устанавливаем GPRS соединение
7AT+HTTPINIT",  //Инициализация http сервиса
8AT+HTTPPARA=CID,1    //Установка CID параметра для http сессии
9AT+HTTPPARA=URL,<a href="/arduino/test/test.php?a=">http://****.ru/arduino/test/test.php?a=</a> 345

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки  которая состоит из кучи других,  вот вам пример рабочей отправки, 

01#include <AltSoftSerial.h>
02AltSoftSerial mySerial; // 46,48
03 
04//#include <SoftwareSerial.h>
05//SoftwareSerial mySerial(50, 51); // RX, TX
06 
07//HardwareSerial & mySerial = Serial1;
08 
09 
10void send_sms(String sms_number, String sms_text) {
11     
12   delay(1500);
13   mySerial.print("AT+CMGS="); // send the SMS the number
14   mySerial.print((char)34); // передача в порт символа "
15   mySerial.print((String)sms_number); // передача номера телефона
16   mySerial.print((char)34); // передача в порт символа "
17   mySerial.print((char)13);
18   delay(1500);
19  
20   mySerial.println((String)sms_text); // передача текста сообщения
21   delay(500);
22   mySerial.print((char)26); // передача ^Z
23   mySerial.print((char)13); // передача Enter
24}
25 
26 
27void setup() 
28{
29  Serial.begin(9600);
30    mySerial.begin(9600);
31    mySerial.println("AT+CMGF=1"); // выставляем текстовым режим сообщений
32  delay(2000);
33 
34    mySerial.print("AT+CSCS=");
35    mySerial.print((char)34);  // передача в порт символа "
36    mySerial.print("IRA");
37    mySerial.print((char)34);   // передача в порт символа "
38    mySerial.print((char)13);   // передача в порт Enter
39    send_sms("+7901*****40","test"); //вместо звездочек ставим свой номер мобильного;
40}
41 
42void loop() // пустой цикл
43{
44 
45  
46 
47}

в верху по подключению разберетесь думаю

и очистить смс можно АТ командами

когда забработает интеренет допишу и получение смс

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

получилось :))))) 

вот АТ команды может каму понадобятся для работы с интернетом

01AT
02AT+SAPBR=3,1,CONTYPE,GPRS,  //Установка настроек подключения
03AT+SAPBR=3,1,APN,internet,
04AT+SAPBR=3,1,USER,gdata,
05AT+SAPBR=3,1,PWD,gdata,
06AT+SAPBR=1,1",  //Устанавливаем GPRS соединение
07AT+HTTPINIT",  //Инициализация http сервиса
08AT+HTTPPARA=CID,1    //Установка CID параметра для http сессии
09AT+HTTPPARA=URL,<a href="http://site.ru/arduino/test/test.php?a=345DEN" rel="nofollow">ht tp ://site.ru/arduino/test/test.php?a=345DEN</a>
10AT+HTTPACTION=1
11AT+HTTPTERM

тепер осталось дописать все в тестовый скетч

оо какаято строка между 9 и 10 строчкой лишняя (удалить)

MaksVV
Offline
Зарегистрирован: 06.08.2015

Baks пишет:

я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки  которая состоит из кучи других,  вот вам пример рабочей отправки,

+1. Вот мой код работы с gsm шилдом. 

01String currStr = "";              // для цикла чтения смс
02boolean isStringMessage = false; // Переменная принимает значение True, если текущая строка является сообщением
03 
04int Peremennaya = 200;          // какая нибудь переменная, так для примера отправить её в смс
05 
06void setup () {
07   
08pinMode (13, OUTPUT);
09pinMode(9, OUTPUT);         // пин программного включения шилда, порт на выход
10  digitalWrite(9, HIGH);    // Подаем High на пин 9
11  delay(2000);              // на 2 секунды
12  digitalWrite(9, LOW);     // и отпускаем в Low.
13  delay(5000);     
14Serial.begin(19200);         // включаем хардовое сериал соединение с шилдом,
15                             // если хотим софтсериал, инклюдим библиотеку, прописываем пины, не забываем про джамперы на шилде
16    delay(2000);
17 
18  Serial.print("AT+CMGF=1\r");         //устанавливает текстовый режим смс-сообщения
19    delay(100);
20  Serial.print("AT+IFC=1, 1\r");       //устанавливает программный контроль потоком передачи данных
21    delay(100);
22  Serial.print("AT+CPBS=\"SM\"\r");    //открывает доступ к данным телефонной книги SIM-карты
23    delay(100);
24  Serial.print("AT+GSMBUSY=1, 1\r");   //запрет всех входящих звонков
25    delay(100);
26  Serial.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
27    delay(300);
28  Serial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти
29    
30    
31    
32   // вот так отправляется какая-нибудь смс
33 
34  startOneSMS();
35  Serial.println("HELLO WORLD!!!");
36  Serial.print("Peremennaya: "); Serial.print (Peremennaya);  // отправим в смс-ке значение переменной
37  EndSMS ();
38     }
39 
40void loop () {
41readSMS ();
42}
43 
44   void startOneSMS() //__________________Цикл подготовки модуля к отправке СМС-сообщений по номеру
45{
46      Serial.print("AT+CMGF=1\r");
47      delay(100);
48      Serial.println("AT + CMGS = \"+79000000000\""); // (+79000000000 сдесь должен быть ваш номер )
49      delay(100);
50}
51 
52   void EndSMS ()//__________________Цикл подготовки модуля к заканчиваению отправки СМС-сообщений
53{
54  delay(100);
55   Serial.println((char)26);                       // Команда отправки СМС
56   delay(5000);
57   Serial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти, можно убрать эту строку
58   delay (2000);
59}
60 
61void readSMS() //_____Цикл чтения входящих СМС-сообщений______________    
62{
63    if (!Serial.available()) return;
64  
65    char currSymb = Serial.read();   
66    if ('\r' == currSymb)
67       {
68         if (isStringMessage)
69           {
70            //если текущая строка - SMS-сообщение,
71            //отреагируем на него соответствующим образом
72              if (!currStr.compareTo("KOMANDA-ON"))   { digitalWrite (13, HIGH); } // что-то делаем, например включаем встроенный светик, если шилд получает смс с текстом KOMANDA-ON
73              else if  (!currStr.compareTo("KOMANDA-OFF"))   { digitalWrite (13, LOW);} // что-то делаем, например выключаем встроенный светик, если шилд получает смс с текстом KOMANDA-OFF
74            isStringMessage = false;
75           }
76         else { if (currStr.startsWith("+CMT")) { isStringMessage = true;}} //если текущая строка начинается с "+CMT",то следующая строка является сообщением
77        currStr = "";
78      }
79    else if ('\n' != currSymb) { currStr += String(currSymb);}
80}

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Неужто с библиотекой SIM900 никто не работает?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки  которая состоит из кучи других,  вот вам пример рабочей отправки, 

#include <AltSoftSerial.h>

Однако какая то библиотека подключена..

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

У меня эта AltSoftSerial.h не идет. На последовательном потру у меня висит TFT дисплей, соответсвенно 46 и 48 пины заняты. Указал 10 и 11, как на SIM900, где все работает - тишина.

Все так буду дальше компать SIM900. Как удалять смс-ки из буфера уже научился. Теперь осталось пропихнуть в смс строковую переменную вместо текста, и вопрос закрыт.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

так и не знаю почему но у меня так и не работает библиотека SoftwareSerial, если же она у вас работает то можно написать так

http://arduino.ru/forum/obshchii/sim800l-mini?page=1#comment-164010 пост #59

и использовать только одну библиотеку а не 8 (так как косяки наверняка в каждой свои, а в 8 библиотеках их в 8 раз больше), а вообще каждый сам кузнец своему счастью....

и да если у Вас получится не забудьте выложить рабочий скетч для тех кто после нас будет заниматься этой проблемой, может пригодится каму.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Baks, спасибо за инфу, я все таки попытаюсь добить библиотеку SIM900. Должен же быть какой-то вариант отправки массива разных строк. Когда добью, тогда выложу конечно скетч.

Jatixo
Offline
Зарегистрирован: 13.01.2016

dr.lmg пишет:

Спасибо, а как складывать несколько строк в одну переменную?

Т.е. мне теперь к этой строке char message[]="Hello world"; добавить еще строку "I'm back"?

Гуглите функцию strcat (strcat(message, "I'm back"), как я понял, по-хорошему там размер массива надо определенный делать заранее, а не [] пустой, хотя работает, но наверное занимает лишнего памяти, лучше определить, возможно есть и другие варианты, например сначала сделать какую надо строку, а потом преобразовать в массив char.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Jatixo, спасибо.

Получается, ардуино работает со всеми операторами C++, а не только с теми, которые указаны в разделе "Программирование Ардуино"? А то я смотрю, уж больно куцый набор функций.

Jatixo
Offline
Зарегистрирован: 13.01.2016

Конечно, можно и на чистом c++ писать или на чистом assembler =)

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Baks пишет:

получилось :))))) 

вот АТ команды может каму понадобятся для работы с интернетом

01AT
02AT+SAPBR=3,1,CONTYPE,GPRS,  //Установка настроек подключения
03AT+SAPBR=3,1,APN,internet,
04AT+SAPBR=3,1,USER,gdata,
05AT+SAPBR=3,1,PWD,gdata,
06AT+SAPBR=1,1",  //Устанавливаем GPRS соединение
07AT+HTTPINIT",  //Инициализация http сервиса
08AT+HTTPPARA=CID,1    //Установка CID параметра для http сессии
09AT+HTTPPARA=URL,<a href="http://site.ru/arduino/test/test.php?a=345DEN" rel="nofollow">ht tp ://site.ru/arduino/test/test.php?a=345DEN</a>
10AT+HTTPACTION=1
11AT+HTTPTERM

тепер осталось дописать все в тестовый скетч

оо какаято строка между 9 и 10 строчкой лишняя (удалить)

А что будет на сайте? Я так понимаю, что-то типа панели управления? Или только индикаторы?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Ну чистый ассемблер я уже позабыл, давно с ним работал, году так в 92-м.

А вот то, что набор функций и операторов не полный, для меня облегчение. Зайти на arduino.cc и посмотреть там ума, конечно, не хватило :)

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

на сайте пока не решил , для начала будет просто индикация , с мнемо схемой и графиком, а по поводу управления както  я отношусь не очень хорошо к управлению из сети, если что и буду делать с управлением так это прогу для ведроида с  кучей проверок и шифрованием. а пока можно и смс поуправлять.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

рабочий код с приемом / отправкой СМС посредством библиотеки SIM900 и выводом данных на TFT дисплей.

001// Подключаем библиотеки
002 
003#include "SIM900.h"
004#include <SoftwareSerial.h>
005#include <String.h>
006#include "sms.h"
007SMSGSM sms;
008 
009int numdata, profile, statusSMS;
010boolean started=false;
011char smsbuffer[160];
012char n[20];
013char phone1[] = "+7**********"; /// номер для отправки СМС
014String textSMS, currStr, profile_p, relayStatus_p1, version_p;
015 
016// библиотека для работы с дисплеем
017#include <UTFT.h>
018// создаём объект класса UTFT
019// и передаём идентификатор модели дисплея и номера управляющих пинов
020UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
021// объявления встроенного шрифта
022extern uint8_t BigFont[];
023 
024// датчики
025 
026int ST_Lounge;      // датчик температуры гостиной
027int ST_UtilityRoom; // датчик температуры подсобки
028int ST_Hallway;     // датчик температуры прихожей
029int ST_Basement;    // датчик температуры подвала
030int ST_Outside;     // датчик температуры улицы
031 
032void zaprosSMS()
033 
034{
035  
036  String msgSMS;
037 
038    // датчики
039//  ST_Lounge_p = ST_Lounge;
040//  ST_Outside_p = ST_Outside;
041//  ST_Basement_p = ST_Basement;
042//  ST_UtilityRoom_p = ST_UtilityRoom;
043    msgSMS = msgSMS + "Hall: " + String(ST_Lounge) + "C\r\n";
044    msgSMS = msgSMS + "Ulitsa: " + String (ST_Outside) + "C\r\n";
045    msgSMS = msgSMS + "Podval: " + String (ST_Basement) + "C\r\n";
046    msgSMS = msgSMS + "Podsobka: " + String (ST_UtilityRoom) + "C\r\n";
047     
048    if (profile==1){profile_p = "ECO";}
049    if (profile==2){profile_p = "Nagrev";}
050    if (profile==3){profile_p = "Comfort";}
051    if (profile==4){profile_p = "Noch";}
052 
053     
054    msgSMS = msgSMS + "Profile: " + profile_p + "\r\n";
055     
056    msgSMS = msgSMS + "NagrevHall: " + relayStatus_p1 + "\r\n";
057 
058  char myChar[msgSMS.length()+1]; // создаем массив и  определяем длину строковой переменной msgSMS
059  msgSMS.toCharArray(myChar, msgSMS.length()+1); // добавляем в массив строку из переменной msgSMS
060  sms.SendSMS(phone1, myChar); sms.DeleteSMS(numdata); // отправляем массив в СМС
061    EndSMS();                                
062}
063 
064void EndSMS() //__________________Чистим СМС_______________________
065{
066  for (int i=0; i <= 21; i++){
067  sms.DeleteSMS(i);
068}
069currStr = "";
070char smsbuffer[160];
071gsm.readSMS(smsbuffer, 160, n, 20);
072currStr = String (smsbuffer);
073myGLCD.print(currStr, LEFT, 230); // выводим на экран содержимое после очистки (на всякий случай)
074 
075}
076 
077 
078void readGSM() //_____Цикл чтения входящих СМС-сообщений______________    
079{
080  myGLCD.print("gsm_fn", 50, 24); // пишем на дисплее статус перехода в функцию
081if(!started){myGLCD.print("NO gsm_fn", 50, 24); return;} // GSM модуль не стартовал
082  
083  numdata = sms.IsSMSPresent(SMS_UNREAD); // находим первую не прочитанную смс
084  myGLCD.print(String (numdata), 100, 24); // выводим на дисплей флаг (-2: модуль не доступен, 0: нет смс, 1: есть новая смс)
085  if(numdata){
086    //Read if there are messages on SIM card and print them.
087    if(sms.GetSMS(numdata, n, smsbuffer, 160))
088    {
089      Serial.println(n);
090      Serial.println(smsbuffer);
091 
092     currStr = String(smsbuffer);
093     myGLCD.print(currStr, LEFT, 200); // выводим на дисплей содержимое смс
094      
095     if (!currStr.compareTo("NAGREV") || !currStr.compareTo("Nagrev"))   { profile=2; sms.SendSMS(phone1, "Profile: Nagrev"); sms.DeleteSMS(numdata); /* EndSMS();*/ } // Включение профиля ECO
096     else if (!currStr.compareTo("ECO") || !currStr.compareTo("Eco"))   { profile=1; sms.SendSMS(phone1, "Profile: ECO"); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Включение профиля ECO 
097     else if (!currStr.compareTo("Comfort") || !currStr.compareTo("COMFORT"))   { profile=3; sms.SendSMS(phone1, "Profile: Comfort"); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Включение профиля ECO 
098     else if (!currStr.compareTo("Noch") || !currStr.compareTo("NOCH"))   { profile=4; sms.SendSMS(phone1, "Profile: Noch"); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Включение профиля ECO 
099     else if (!currStr.compareTo("Zapros") || !currStr.compareTo("ZAPROS"))   { zaprosSMS(); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Передача данных о состоянии датчиков
100 
101    }
102  }
103}
104 
105void setup() {
106//версия сборки (номер, версия, подверсия, дата)
107version_p = "0.1.5.2302216";
108//relay8 relay (6, 7);
109 
110profile = 1; // по умолчанию профиль ECO
111 
112 
113// инициализируем дисплей
114  myGLCD.InitLCD();
115// очищаем экран
116  myGLCD.clrScr();
117// выбираем тип шрифта
118  myGLCD.setFont(BigFont);
119 
120// выведем на дисплей заданное значение температуры на 2 секундый
121   
122//myGLCD.setCursor(0, 0);
123myGLCD.print("dr.Lmg", LEFT, 0);
124 
125myGLCD.print(version_p, LEFT, 24);
126//
127 
128// подключаем модуль GSM
129//SoftwareSerial Serial2(14,15);
130Serial.begin(19200);     // GSM SMS-передача плата SIM800
131if (gsm.begin(19200)){
132   myGLCD.print("Status GSM: READY", LEFT, 100);
133    started=true;}
134    else { myGLCD.print("Status GSM: IDLE", LEFT, 100);}
135statusSMS = 0;
136//NastroykaGSM();
137for (int i=0; i <= 20; i++){
138sms.DeleteSMS(i);
139}
140myGLCD.print("GSM registration....", LEFT, 120);
141//delay (2000);
142if (started) {
143// получаем значения даты и времени
144//get3231Date();
145char message[]="SmartHome vkluchen";//  + " "  + date_full+ " " + time_full;
146  statusSMS = sms.SendSMS(phone1, message); // время включения
147textSMS = String (statusSMS) + "SMS NOT SEND     ";
148}
149if (statusSMS > 0) {
150 myGLCD.print("SMS SEND               ", LEFT, 120);}
151  else {myGLCD.print(textSMS, LEFT, 120);}
152 
153 
154// очищаем экран
155delay(1000);
156myGLCD.clrScr();
157}
158 
159 
160//-----------------------------------------------
161 
162void loop() {
163 
164// работа с GSM модулем
165  readGSM();
166 
167 
168// вывод данных на дисплей
169  //goDisplay();
170 
171}

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

поздравляю с успешным выполнением домашнего задания :) 

у меня тут такой вопрос возник на sim800  есть контакт reset  так как с ним работать? в частности программно , что куда подключать и какое напряжение на него надо подать, и как ручной перезапуск сделать с помощью установки кнопочки.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Baks, спасибо. Совместными усилиями все получилось, слава Богу!

Касательно reset, я так понял, что его нужно соединить с пином reset на ардуино, и при перезагрузке ардуино модуль тоже перезагружается.

По отдельной кнопке перезагрузки нужно даташит смотреть, так не подскажу.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Есть ли кто, кто знает как к этому модулю подключить микрофон и динамик? Или это не предусмотрено конструкцией?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

предуусмотрено , только как не знаю вот попробуй посмотри тут может что найдеш интересно, там в низу и схемки есть как распаяли модуль https://www.adafruit.com/products/1946 

мне тоже нужно будет , пока не до этого :)

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

У меня другой шилд, см. пост #1, там ног изначально под аудио нет. Хотя сама микросхема SIM800 вроде как предполагает наличие аудио.

xellow
Offline
Зарегистрирован: 12.03.2016

Вечер добрый. Проблемка с SIM800L v2/0 - Установил библиотеку 900h. Запускаю пример для работы с СМС. Смотрю данные в Serial port - всё ОК. 

GSM Shield testing.
DB:ELSE
DB:ELSE
DB:ELSE
DB:CORRECT BR
 
status=READY
 
SMS sent OK
Если раскоментить отправку СМС - отправляет. А вот ответную СМС не видит ни в какую..., по крайней мере в порт ничего не передаёт.
Вот код примера:
01#include "SIM900.h"
02#include <SoftwareSerial.h>
03//If not used, is better to exclude the HTTP library,
04//for RAM saving.
05//If your sketch reboots itself proprably you have finished,
06//your memory available.
07//#include "inetGSM.h"
08 
09//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
10#include "sms.h"
11SMSGSM sms;
12 
13//To change pins for Software Serial, use the two lines in GSM.cpp.
14 
15//GSM Shield for Arduino
16//www.open-electronics.org
17//this code is based on the example of Arduino Labs.
18 
19//Simple sketch to send and receive SMS.
20 
21int numdata;
22boolean started=false;
23char smsbuffer[160];
24char n[20];
25 
26void setup()
27{
28  //Serial connection.
29  Serial.begin(19200);
30  Serial.println("GSM Shield testing.");
31  //Start configuration of shield with baudrate.
32  //For http uses is raccomanded to use 4800 or slower.
33  if (gsm.begin(2400)){
34    Serial.println("\nstatus=READY");
35    started=true
36  }
37  else Serial.println("\nstatus=IDLE");
38   
39  if(started){
40    //Enable this two lines if you want to send an SMS.
41    //if (sms.SendSMS("89206601085", "Arduino SMS"))
42    Serial.println("\nSMS sent OK");
43  }
44 
45};
46 
47void loop()
48{
49  if(started){
50    //Read if there are messages on SIM card and print them.
51    if(gsm.readSMS(smsbuffer, 160, n, 20))
52    {
53      Serial.println(n);
54      Serial.println(smsbuffer);
55    }
56    delay(1000);
57  }
58};

 

 

arDubino
Offline
Зарегистрирован: 12.01.2017

когда ж научитесь то а. в сериал ставить только то что надо а именно 9600 скорость

xellow
Offline
Зарегистрирован: 12.03.2016

Ставил и 9600 и 19200 - в сериал всё шлёт.

xellow
Offline
Зарегистрирован: 12.03.2016

Вроде победил)... Такое ощущение что была переполнена память СИМ... СМС пошли после удаления принятых ранее через АТ команду.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

вопрос ко всем, кто разобрался )

все библиотеки, которые я смотрел (на 800, 900) требуют software.serial.

А это обязательно вообще? У меня мега с 3 железными портами, зачем мне использовать какую-то софтовую эмуляцию, которая как минимум потребляет ресурсы, как максимум - источник глюков?

 

Спасибо!

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Библиотека обязательна. А по каким портам будет общаться gsm модуль - решать тебе. На меге, что интересно, у меня заработал только на 10-11 пинах. На хардовых не пошел.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dr.lmg пишет:
Библиотека обязательна. А по каким портам будет общаться gsm модуль - решать тебе. На меге, что интересно, у меня заработал только на 10-11 пинах. На хардовых не пошел.

Хотите сказать, что через

1Serial1.begin(9600);

работать не будет?

obuhanoe
Offline
Зарегистрирован: 18.05.2016

dr.lmg пишет:
Библиотека обязательна. А по каким портам будет общаться gsm модуль - решать тебе. На меге, что интересно, у меня заработал только на 10-11 пинах. На хардовых не пошел.

Тут утверждают обратное.http://lazysmart.ru/avtomatika-v-by-tu/monitoring-temperatury-cherez-internet-s-pomoshh-yu-gsm-modulya-sim900-urok-3/

Ко мне скоро приедет SIM900, буду проверять )

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

пока веду поиски библиотеки, работающей железно.

вот здесь вроде упоминается "железная", но у меня либа не встала.

MaksVV
Offline
Зарегистрирован: 06.08.2015

да не нужна библиотека. Удобнее управлять Ат командами.  Подключение хоть к софт, хоть к хард сериал порту нужно для sim800l делать так. Тогда будет все работать. 

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

MaksVV

Пробовал.... не пошло:

01void setup()
02{
03    Serial3.begin(19200);
04    delay(500);
05}
06 void loop()
07{
081. вариант:
09  if (Serial3.available())
10    Serial.write(Serial3.read());
11  if (Serial.available())
12    Serial3.write(Serial.read());
13 
142 вариант:
15 // Устанавливает текстовый режим для SMS-сообщений
16    Serial3.print("AT+CMGF=1\r");
17    delay(100); // даём время на усваивание команды
18    // Устанавливаем адресата: телефонный номер в международном формате
19    Serial3.println("AT + CMGS = \"+791000000\"");
20    delay(100);
21//    // Пишем текст сообщения
22    Serial3.println("ALARM!");
23    delay(100);
24    // Отправляем Ctrl+Z, обозначая, что сообщение готово
25    Serial3.println((char)26);
26}

Пробовал два варианта - сразу отправка СМС, и ручной ввод АТ команд.

PS:

SIM800 у меня 2-й версии, якобы - 5-вольтовый. Поэтому подключал напрямую и питание, и TX-RX.

Подключал к 3-му порту.

Скорости пробовал и 9600 и 19200

монопенисуально - вообще никакой реакции...

obuhanoe
Offline
Зарегистрирован: 18.05.2016

ProstoAlex пишет:

MaksVV

Пробовал.... не пошло:

01void setup()
02{
03    Serial3.begin(19200);
04    delay(500);
05}
06 void loop()
07{
081. вариант:
09  if (Serial3.available())
10    Serial.write(Serial3.read());
11  if (Serial.available())
12    Serial3.write(Serial.read());
13 
142 вариант:
15 // Устанавливает текстовый режим для SMS-сообщений
16    Serial3.print("AT+CMGF=1\r");
17    delay(100); // даём время на усваивание команды
18    // Устанавливаем адресата: телефонный номер в международном формате
19    Serial3.println("AT + CMGS = \"+791000000\"");
20    delay(100);
21//    // Пишем текст сообщения
22    Serial3.println("ALARM!");
23    delay(100);
24    // Отправляем Ctrl+Z, обозначая, что сообщение готово
25    Serial3.println((char)26);
26}

Пробовал два варианта - сразу отправка СМС, и ручной ввод АТ команд.

PS:

SIM800 у меня 2-й версии, якобы - 5-вольтовый. Поэтому подключал напрямую и питание, и TX-RX.

Подключал к 3-му порту.

Скорости пробовал и 9600 и 19200

монопенисуально - вообще никакой реакции...

А Вы пробывали подключить ваш SIM800 через UART-TTL(или арудуину), подать отдельное питание на sim800, rx и tx соединить с UART-TTL, объединить земли модуля и UART-TTL и прогнать АТ команды в терминальной программе?

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

C какой-то из библиотек (которая с software serial - наверное, Aspen) у меня все работало.

(проверял не все задача была - "принять" посылку, убедившись что девайс живой).

Правда, реакция была странная - например, не пошел набор номера (no carrier), не смог вбить код завершения ввода СМС в терминале (но программно СМС отправилась).

(даже время из сети МТС считала).

Так что я склонен считать, что хардварно прямое подключение функционирует.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Ребятки, вы про какую библиотеку то вообще?
Я имел ввиду, что нужна библиотека типа SoftSerial есди работать с софтовым портом. Для хардового не нужна вообще никакая, если пользовать AT команды.