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

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

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

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

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

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

#include <SIM900.h>
#include <sms.h>
#include <SoftwareSerial.h>

//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"

//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
#include "sms.h"
SMSGSM sms;

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to send and receive SMS.

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];


void setup() 
{
  //Serial connection.
  Serial.begin(19200);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses is raccomanded to use 4800 or slower.
  if (gsm.begin(19200)){
    Serial.println("\nstatus=READY");
    started=true;  
  }
  else Serial.println("\nstatus=IDLE");
  
  if(started){
    //Enable this two lines if you want to send an SMS.
    if (sms.SendSMS("+7910*******", "Arduino SMS"))
      Serial.println("\nSMS sent OK");
  }

};

void loop() 
{
  if(started){
    //Read if there are messages on SIM card and print them.
    if(gsm.readSMS(smsbuffer, 160, n, 20))
    {
      Serial.println(n);
      Serial.println(smsbuffer);
    }
    delay(1000);
  }
};

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

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. Есть еще много непоняток, но в общем и в целом результат достигнут. Код, который приведен выше, как раз это позволяет сделать.

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

sms.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 необходимо указать пины, на которые подключен модуль.

#include "GSM.h"
#include "WideTextFinder.h"

//De-comment this two lines below if you have the
//first version of GSM GPRS Shield
#define _GSM_TXPIN_ 11
#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 пробовал заменить настройки подключения но не помогло

AT+SAPBR=3,1,"APN","internet"
AT+SAPBR=3,1,"APN","internet"

OK


AT+SAPBR=3,1,"USER","gdata"
AT+SAPBR=3,1,"USER","gdata"

OK


AT+SAPBR=3,1,"PWD","gdata"
AT+SAPBR=3,1,"PWD","gdata"

OK

AT+SAPBR=1,1
AT+SAPBR=1,1

ERROR

AT+HTTPINIT
AT+HTTPINIT

ERROR

 

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

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

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

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

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

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

 

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

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

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

 

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

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


#include <AltSoftSerial.h>
AltSoftSerial mySerial; // 46,48

//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(50, 51); // RX, TX

//HardwareSerial & mySerial = Serial1;


void send_sms(String sms_number, String sms_text) {
    
   delay(1500);
   mySerial.print("AT+CMGS="); // send the SMS the number
   mySerial.print((char)34); // передача в порт символа "
   mySerial.print((String)sms_number); // передача номера телефона
   mySerial.print((char)34); // передача в порт символа "
   mySerial.print((char)13);
   delay(1500);
 
   mySerial.println((String)sms_text); // передача текста сообщения
   delay(500);
   mySerial.print((char)26); // передача ^Z
   mySerial.print((char)13); // передача Enter
}


void setup()  
{
  Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.println("AT+CMGF=1"); // выставляем текстовым режим сообщений
  delay(2000);

    mySerial.print("AT+CSCS=");
    mySerial.print((char)34);  // передача в порт символа "
    mySerial.print("IRA");
    mySerial.print((char)34);   // передача в порт символа "
    mySerial.print((char)13);   // передача в порт Enter
    send_sms("+7901*****40","test"); //вместо звездочек ставим свой номер мобильного;
}

void loop() // пустой цикл
{

 

}

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

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

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

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

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

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

     AT
     AT+SAPBR=3,1,CONTYPE,GPRS,  //Установка настроек подключения
     AT+SAPBR=3,1,APN,internet,
     AT+SAPBR=3,1,USER,gdata,
     AT+SAPBR=3,1,PWD,gdata,
     AT+SAPBR=1,1",  //Устанавливаем GPRS соединение
     AT+HTTPINIT",  //Инициализация http сервиса
     AT+HTTPPARA=CID,1    //Установка CID параметра для http сессии
     AT+HTTPPARA=URL,ht tp ://site.ru/arduino/test/test.php?a=345DEN
     AT+HTTPACTION=1
     AT+HTTPTERM

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

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

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

Baks пишет:

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

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

String currStr = "";              // для цикла чтения смс
boolean isStringMessage = false; // Переменная принимает значение True, если текущая строка является сообщением

int Peremennaya = 200;          // какая нибудь переменная, так для примера отправить её в смс

void setup () {
  
pinMode (13, OUTPUT); 
pinMode(9, OUTPUT);         // пин программного включения шилда, порт на выход
  digitalWrite(9, HIGH);    // Подаем High на пин 9
  delay(2000);              // на 2 секунды
  digitalWrite(9, LOW);     // и отпускаем в Low. 
  delay(5000);      
Serial.begin(19200);         // включаем хардовое сериал соединение с шилдом, 
                             // если хотим софтсериал, инклюдим библиотеку, прописываем пины, не забываем про джамперы на шилде
    delay(2000);

  Serial.print("AT+CMGF=1\r");         //устанавливает текстовый режим смс-сообщения
    delay(100);
  Serial.print("AT+IFC=1, 1\r");       //устанавливает программный контроль потоком передачи данных
    delay(100);
  Serial.print("AT+CPBS=\"SM\"\r");    //открывает доступ к данным телефонной книги SIM-карты
    delay(100);
  Serial.print("AT+GSMBUSY=1, 1\r");   //запрет всех входящих звонков
    delay(100);
  Serial.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
    delay(300);
  Serial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти
   
   
   
   // вот так отправляется какая-нибудь смс 

  startOneSMS(); 
  Serial.println("HELLO WORLD!!!");
  Serial.print("Peremennaya: "); Serial.print (Peremennaya);  // отправим в смс-ке значение переменной
  EndSMS ();
     }

void loop () {
readSMS ();
}

   void startOneSMS() //__________________Цикл подготовки модуля к отправке СМС-сообщений по номеру 
{
      Serial.print("AT+CMGF=1\r");
      delay(100);
      Serial.println("AT + CMGS = \"+79000000000\""); // (+79000000000 сдесь должен быть ваш номер )
      delay(100);
}

   void EndSMS ()//__________________Цикл подготовки модуля к заканчиваению отправки СМС-сообщений 
{
  delay(100);
   Serial.println((char)26);                       // Команда отправки СМС
   delay(5000);
   Serial.print("AT+CMGDA=«DEL ALL»\r"); // удаляем все смски из памяти, можно убрать эту строку
   delay (2000);
}

void readSMS() //_____Цикл чтения входящих СМС-сообщений______________     
{
    if (!Serial.available()) return;
 
    char currSymb = Serial.read();    
    if ('\r' == currSymb)
       {
         if (isStringMessage)
           {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
              if (!currStr.compareTo("KOMANDA-ON"))   { digitalWrite (13, HIGH); } // что-то делаем, например включаем встроенный светик, если шилд получает смс с текстом KOMANDA-ON
              else if  (!currStr.compareTo("KOMANDA-OFF"))   { digitalWrite (13, LOW);} // что-то делаем, например выключаем встроенный светик, если шилд получает смс с текстом KOMANDA-OFF
            isStringMessage = false;
           }
         else { if (currStr.startsWith("+CMT")) { isStringMessage = true;}} //если текущая строка начинается с "+CMT",то следующая строка является сообщением
        currStr = "";
      } 
    else if ('\n' != currSymb) { currStr += String(currSymb);}
}

 

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 пишет:

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

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

     AT
     AT+SAPBR=3,1,CONTYPE,GPRS,  //Установка настроек подключения
     AT+SAPBR=3,1,APN,internet,
     AT+SAPBR=3,1,USER,gdata,
     AT+SAPBR=3,1,PWD,gdata,
     AT+SAPBR=1,1",  //Устанавливаем GPRS соединение
     AT+HTTPINIT",  //Инициализация http сервиса
     AT+HTTPPARA=CID,1    //Установка CID параметра для http сессии
     AT+HTTPPARA=URL,ht tp ://site.ru/arduino/test/test.php?a=345DEN
     AT+HTTPACTION=1
     AT+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 дисплей.

// Подключаем библиотеки

#include "SIM900.h"
#include <SoftwareSerial.h>
#include <String.h>
#include "sms.h"
SMSGSM sms;

int numdata, profile, statusSMS;
boolean started=false;
char smsbuffer[160];
char n[20];
char phone1[] = "+7**********"; /// номер для отправки СМС
String textSMS, currStr, profile_p, relayStatus_p1, version_p;

// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
// объявления встроенного шрифта
extern uint8_t BigFont[];

// датчики

int ST_Lounge;      // датчик температуры гостиной
int ST_UtilityRoom; // датчик температуры подсобки
int ST_Hallway;     // датчик температуры прихожей
int ST_Basement;    // датчик температуры подвала
int ST_Outside;     // датчик температуры улицы

void zaprosSMS()

{
 
  String msgSMS;

    // датчики
//  ST_Lounge_p = ST_Lounge;
//  ST_Outside_p = ST_Outside;
//  ST_Basement_p = ST_Basement;
//  ST_UtilityRoom_p = ST_UtilityRoom;
    msgSMS = msgSMS + "Hall: " + String(ST_Lounge) + "C\r\n";
    msgSMS = msgSMS + "Ulitsa: " + String (ST_Outside) + "C\r\n";
    msgSMS = msgSMS + "Podval: " + String (ST_Basement) + "C\r\n";
    msgSMS = msgSMS + "Podsobka: " + String (ST_UtilityRoom) + "C\r\n";
    
    if (profile==1){profile_p = "ECO";}
    if (profile==2){profile_p = "Nagrev";}
    if (profile==3){profile_p = "Comfort";}
    if (profile==4){profile_p = "Noch";}

    
    msgSMS = msgSMS + "Profile: " + profile_p + "\r\n";
    
    msgSMS = msgSMS + "NagrevHall: " + relayStatus_p1 + "\r\n";

  char myChar[msgSMS.length()+1]; // создаем массив и  определяем длину строковой переменной msgSMS 
  msgSMS.toCharArray(myChar, msgSMS.length()+1); // добавляем в массив строку из переменной msgSMS 
  sms.SendSMS(phone1, myChar); sms.DeleteSMS(numdata); // отправляем массив в СМС
    EndSMS();                                 
}

void EndSMS() //__________________Чистим СМС_______________________
{
  for (int i=0; i <= 21; i++){
  sms.DeleteSMS(i);
}
currStr = "";
char smsbuffer[160];
gsm.readSMS(smsbuffer, 160, n, 20); 
currStr = String (smsbuffer);
myGLCD.print(currStr, LEFT, 230); // выводим на экран содержимое после очистки (на всякий случай)

}


void readGSM() //_____Цикл чтения входящих СМС-сообщений______________     
{ 
  myGLCD.print("gsm_fn", 50, 24); // пишем на дисплее статус перехода в функцию
if(!started){myGLCD.print("NO gsm_fn", 50, 24); return;} // GSM модуль не стартовал
 
  numdata = sms.IsSMSPresent(SMS_UNREAD); // находим первую не прочитанную смс
  myGLCD.print(String (numdata), 100, 24); // выводим на дисплей флаг (-2: модуль не доступен, 0: нет смс, 1: есть новая смс)
  if(numdata){
    //Read if there are messages on SIM card and print them.
    if(sms.GetSMS(numdata, n, smsbuffer, 160))
    {
      Serial.println(n);
      Serial.println(smsbuffer);

     currStr = String(smsbuffer);
     myGLCD.print(currStr, LEFT, 200); // выводим на дисплей содержимое смс
     
     if (!currStr.compareTo("NAGREV") || !currStr.compareTo("Nagrev"))   { profile=2; sms.SendSMS(phone1, "Profile: Nagrev"); sms.DeleteSMS(numdata); /* EndSMS();*/ } // Включение профиля ECO 
     else if (!currStr.compareTo("ECO") || !currStr.compareTo("Eco"))   { profile=1; sms.SendSMS(phone1, "Profile: ECO"); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Включение профиля ECO  
     else if (!currStr.compareTo("Comfort") || !currStr.compareTo("COMFORT"))   { profile=3; sms.SendSMS(phone1, "Profile: Comfort"); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Включение профиля ECO  
     else if (!currStr.compareTo("Noch") || !currStr.compareTo("NOCH"))   { profile=4; sms.SendSMS(phone1, "Profile: Noch"); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Включение профиля ECO  
     else if (!currStr.compareTo("Zapros") || !currStr.compareTo("ZAPROS"))   { zaprosSMS(); sms.DeleteSMS(numdata); /* EndSMS();*/  } // Передача данных о состоянии датчиков 

    }
  } 
}

void setup() {
//версия сборки (номер, версия, подверсия, дата)
version_p = "0.1.5.2302216";
//relay8 relay (6, 7);

profile = 1; // по умолчанию профиль ECO


// инициализируем дисплей
  myGLCD.InitLCD();
// очищаем экран
  myGLCD.clrScr();
// выбираем тип шрифта
  myGLCD.setFont(BigFont);

// выведем на дисплей заданное значение температуры на 2 секундый
  
//myGLCD.setCursor(0, 0); 
myGLCD.print("dr.Lmg", LEFT, 0);

myGLCD.print(version_p, LEFT, 24);
//

// подключаем модуль GSM
//SoftwareSerial Serial2(14,15);
Serial.begin(19200);     // GSM SMS-передача плата SIM800
if (gsm.begin(19200)){
   myGLCD.print("Status GSM: READY", LEFT, 100);
    started=true;}
    else { myGLCD.print("Status GSM: IDLE", LEFT, 100);}
statusSMS = 0;
//NastroykaGSM();
for (int i=0; i <= 20; i++){
sms.DeleteSMS(i);
}
myGLCD.print("GSM registration....", LEFT, 120);
//delay (2000);
if (started) {
// получаем значения даты и времени
//get3231Date();
char message[]="SmartHome vkluchen";//  + " "  + date_full+ " " + time_full; 
  statusSMS = sms.SendSMS(phone1, message); // время включения
textSMS = String (statusSMS) + "SMS NOT SEND     ";
} 
if (statusSMS > 0) {
 myGLCD.print("SMS SEND               ", LEFT, 120);}
  else {myGLCD.print(textSMS, LEFT, 120);}


// очищаем экран
delay(1000);
myGLCD.clrScr();
}


//-----------------------------------------------

void loop() {

// работа с GSM модулем
  readGSM();


// вывод данных на дисплей
  //goDisplay();

}

 

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
Если раскоментить отправку СМС - отправляет. А вот ответную СМС не видит ни в какую..., по крайней мере в порт ничего не передаёт.
Вот код примера:
#include "SIM900.h"
#include <SoftwareSerial.h>
//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"

//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
#include "sms.h"
SMSGSM sms;

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to send and receive SMS.

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

void setup() 
{
  //Serial connection.
  Serial.begin(19200);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses is raccomanded to use 4800 or slower.
  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true;  
  }
  else Serial.println("\nstatus=IDLE");
  
  if(started){
    //Enable this two lines if you want to send an SMS.
    //if (sms.SendSMS("89206601085", "Arduino SMS"))
    Serial.println("\nSMS sent OK");
  }

};

void loop() 
{
  if(started){
    //Read if there are messages on SIM card and print them.
    if(gsm.readSMS(smsbuffer, 160, n, 20))
    {
      Serial.println(n);
      Serial.println(smsbuffer);
    }
    delay(1000);
  }
};

 

 

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 пинах. На хардовых не пошел.

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

Serial1.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

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

void setup()
{
    Serial3.begin(19200);
    delay(500);
}
 void loop()
{
1. вариант:
  if (Serial3.available())
    Serial.write(Serial3.read());
  if (Serial.available())
    Serial3.write(Serial.read());

2 вариант:
 // Устанавливает текстовый режим для SMS-сообщений
    Serial3.print("AT+CMGF=1\r");
    delay(100); // даём время на усваивание команды
    // Устанавливаем адресата: телефонный номер в международном формате
    Serial3.println("AT + CMGS = \"+791000000\"");
    delay(100);
//    // Пишем текст сообщения
    Serial3.println("ALARM!");
    delay(100);
    // Отправляем Ctrl+Z, обозначая, что сообщение готово
    Serial3.println((char)26);
}

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

PS:

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

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

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

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

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

ProstoAlex пишет:

MaksVV

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

void setup()
{
    Serial3.begin(19200);
    delay(500);
}
 void loop()
{
1. вариант:
  if (Serial3.available())
    Serial.write(Serial3.read());
  if (Serial.available())
    Serial3.write(Serial.read());

2 вариант:
 // Устанавливает текстовый режим для SMS-сообщений
    Serial3.print("AT+CMGF=1\r");
    delay(100); // даём время на усваивание команды
    // Устанавливаем адресата: телефонный номер в международном формате
    Serial3.println("AT + CMGS = \"+791000000\"");
    delay(100);
//    // Пишем текст сообщения
    Serial3.println("ALARM!");
    delay(100);
    // Отправляем Ctrl+Z, обозначая, что сообщение готово
    Serial3.println((char)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 команды.