SIM800L v2.0 - с какими библиотеками дружит? Не могу запустить на Меге.
- Войдите на сайт для отправки комментариев
Коллеги, приобрел сей модуль.
Пару раз даже удалось отправить с него СМС, но без использования библиотеки 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), со скоростью порта. Один раз даже получилось, и модуль определился. Но тот скетч как назло не сохранился, я уже третий день бьюсь, ника не получается, хотя по памяти вроде все так.
Какие есть мысли?
Сам модуль:
точно такая же беда, (мега и сим800), переходите комне в тему http://arduino.ru/forum/apparatnye-voprosy/sim800-ne-otvechaet-na-komandy#comment-171698 будем вмести решать :)
В файле GSM.cpp установлены пины 0 и 1. На них же подключен и сам модуль.900
Так у Вас получается эти же пины и на компьютер идут по USB и в GSM модуль?
Я пробовал на разные пины. На 14 и 15 аналогичная ситуация.
Так, по ходу я его победил!!! :)
Прописал в GSM.cpp пины 10 и 11, установил обен на 19200 бод и yes, it is! Модуль определился и отправил мне смс, а потом принял ответ и вывел его в терминал.
Теперь пытаюсь подружить его с основным скетчем на предмет отправки / получения СМС.
УРА ! Получилось и отправлять и получать СМС с МЕГИ.
Использую библиотеку SIM900. Есть еще много непоняток, но в общем и в целом результат достигнут. Код, который приведен выше, как раз это позволяет сделать.
Пока только не разобрался, можно ли как-то вместо прямого текста подсунуть переменную, содержащую нужный текст?
sms.SendSMS("+7910*******", "Arduino SMS")То бишь вместо "Arduino SMS" подсунуть строковую переменную или массив. Пока не получается..
char message[]="Hello world";
библиотеку где скачали? , я пытался найти для сим 800 но не могу скачать ))
смотрел настройки и библиотеку взял здесь: http://www.bohgelectronics.net/gsm-and-arduino.html
Там слева от видео ссылка на библиотеку.
После распаковки в файле GSM.cpp необходимо указать пины, на которые подключен модуль.
У меня вот так. Пробовал на 0 и 1, пробовал на 15 и 16 - не работало. На 10 и 11 заработало. И затем запускаете из примеров библиотеки SMS, подставляете свой номер и пробуете.
Еще момент, у меня модуль уходил в перезагрузку при получении смс. МЕГА питалась от USB, а в аннотации к модулю указано напряжение 5 в и ток не ниже 1А. Быля просадка, подключил блок питания на 0,5А, сейчас просадки почти нет, но все равно периодичеки при получении сигнала модуль перезагружается. Так что к питанию тоже надо быть внимательным.
спасибо попробую сейчас, посмотю , я в принципи через обычный сериал отправляю сообщения , вот с приемом еще не разобрался . но это мелочи а меня больше интересует выход в интеренет через модуль, закидывать все буду через php cкрипт в базу данных, ну смс тоже будет учавствовать в качестве управления ардуинкой.
так вот в интеренет пока не могу выйти, ставил теле2 сикарту но она почему то не подходит(возможно что она 3G а модуль поддерживает 2G) , вставил мегафон заработал модуль. но рабочего примера не могу найти работы GPRS с мегафоном.
работа GPRS с симкартой теле2 http://2150692.ru/faq/62-gprs-svyaz-cherez-sim800l-i-arduino пробовал заменить настройки подключения но не помогло
А вначале еще AT+SAPBR=3,1,"CONTYPE","GPRS"
Деньги на счете есть, интернет с телефона работает с этой симкой?
ДА на мобилке проверял, и Ваша строчка тоже есть
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 сессии };Лучше с компьютера пробовать, также через монитор порта вводить команды, вдруг задержки не хватает и т.п.
Кстати, вполне вероятно, там модуль сеть то может не успеть найти, не то что GPRS, так что вначале попробуйте заменить delay(3000); на delay(15000);
Я с интернетом пока не заморачивался, мне бы с СМС до конца разобраться.
Пока очередной затык: не могу понять, как удалить все СМС с сим карты. Посредстовм сериала и ат-команд в принципе понятно, а вот как при помощи библиотеки, не пойму.
Вроде нашел функцию sms.DeleteSMS, но что-то сдается мне, она работает не корректно.
Спасибо, а как складывать несколько строк в одну переменную?
Т.е. мне теперь к этой строке char message[]="Hello world"; добавить еще строку "I'm back"?
отправляю все команды через монитор порта, вот както вроди ответы получаю положительные а на сайт ничего не приходит, посмотрите кто понимает может какую команду забыл
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я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки которая состоит из кучи других, вот вам пример рабочей отправки,
#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() // пустой цикл { }в верху по подключению разберетесь думаю
и очистить смс можно АТ командами
когда забработает интеренет допишу и получение смс
получилось :)))))
вот АТ команды может каму понадобятся для работы с интернетом
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 строчкой лишняя (удалить)
я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки которая состоит из кучи других, вот вам пример рабочей отправки,
+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);} }Неужто с библиотекой SIM900 никто не работает?
я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки которая состоит из кучи других, вот вам пример рабочей отправки,
#include <AltSoftSerial.h>
Однако какая то библиотека подключена..
У меня эта AltSoftSerial.h не идет. На последовательном потру у меня висит TFT дисплей, соответсвенно 46 и 48 пины заняты. Указал 10 и 11, как на SIM900, где все работает - тишина.
Все так буду дальше компать SIM900. Как удалять смс-ки из буфера уже научился. Теперь осталось пропихнуть в смс строковую переменную вместо текста, и вопрос закрыт.
так и не знаю почему но у меня так и не работает библиотека SoftwareSerial, если же она у вас работает то можно написать так
http://arduino.ru/forum/obshchii/sim800l-mini?page=1#comment-164010 пост #59
и использовать только одну библиотеку а не 8 (так как косяки наверняка в каждой свои, а в 8 библиотеках их в 8 раз больше), а вообще каждый сам кузнец своему счастью....
и да если у Вас получится не забудьте выложить рабочий скетч для тех кто после нас будет заниматься этой проблемой, может пригодится каму.
Baks, спасибо за инфу, я все таки попытаюсь добить библиотеку SIM900. Должен же быть какой-то вариант отправки массива разных строк. Когда добью, тогда выложу конечно скетч.
Спасибо, а как складывать несколько строк в одну переменную?
Т.е. мне теперь к этой строке char message[]="Hello world"; добавить еще строку "I'm back"?
Гуглите функцию strcat (strcat(message, "I'm back"), как я понял, по-хорошему там размер массива надо определенный делать заранее, а не [] пустой, хотя работает, но наверное занимает лишнего памяти, лучше определить, возможно есть и другие варианты, например сначала сделать какую надо строку, а потом преобразовать в массив char.
Jatixo, спасибо.
Получается, ардуино работает со всеми операторами C++, а не только с теми, которые указаны в разделе "Программирование Ардуино"? А то я смотрю, уж больно куцый набор функций.
Конечно, можно и на чистом c++ писать или на чистом assembler =)
получилось :)))))
вот АТ команды может каму понадобятся для работы с интернетом
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 строчкой лишняя (удалить)
А что будет на сайте? Я так понимаю, что-то типа панели управления? Или только индикаторы?
Ну чистый ассемблер я уже позабыл, давно с ним работал, году так в 92-м.
А вот то, что набор функций и операторов не полный, для меня облегчение. Зайти на arduino.cc и посмотреть там ума, конечно, не хватило :)
на сайте пока не решил , для начала будет просто индикация , с мнемо схемой и графиком, а по поводу управления както я отношусь не очень хорошо к управлению из сети, если что и буду делать с управлением так это прогу для ведроида с кучей проверок и шифрованием. а пока можно и смс поуправлять.
рабочий код с приемом / отправкой СМС посредством библиотеки 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(); }поздравляю с успешным выполнением домашнего задания :)
у меня тут такой вопрос возник на sim800 есть контакт reset так как с ним работать? в частности программно , что куда подключать и какое напряжение на него надо подать, и как ручной перезапуск сделать с помощью установки кнопочки.
Baks, спасибо. Совместными усилиями все получилось, слава Богу!
Касательно reset, я так понял, что его нужно соединить с пином reset на ардуино, и при перезагрузке ардуино модуль тоже перезагружается.
По отдельной кнопке перезагрузки нужно даташит смотреть, так не подскажу.
Есть ли кто, кто знает как к этому модулю подключить микрофон и динамик? Или это не предусмотрено конструкцией?
предуусмотрено , только как не знаю вот попробуй посмотри тут может что найдеш интересно, там в низу и схемки есть как распаяли модуль https://www.adafruit.com/products/1946
мне тоже нужно будет , пока не до этого :)
У меня другой шилд, см. пост #1, там ног изначально под аудио нет. Хотя сама микросхема SIM800 вроде как предполагает наличие аудио.
Вечер добрый. Проблемка с SIM800L v2/0 - Установил библиотеку 900h. Запускаю пример для работы с СМС. Смотрю данные в Serial port - всё ОК.
#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); } };когда ж научитесь то а. в сериал ставить только то что надо а именно 9600 скорость
Ставил и 9600 и 19200 - в сериал всё шлёт.
Вроде победил)... Такое ощущение что была переполнена память СИМ... СМС пошли после удаления принятых ранее через АТ команду.
вопрос ко всем, кто разобрался )
все библиотеки, которые я смотрел (на 800, 900) требуют software.serial.
А это обязательно вообще? У меня мега с 3 железными портами, зачем мне использовать какую-то софтовую эмуляцию, которая как минимум потребляет ресурсы, как максимум - источник глюков?
Спасибо!
Библиотека обязательна. А по каким портам будет общаться gsm модуль - решать тебе. На меге, что интересно, у меня заработал только на 10-11 пинах. На хардовых не пошел.
Хотите сказать, что через
работать не будет?
Тут утверждают обратное.http://lazysmart.ru/avtomatika-v-by-tu/monitoring-temperatury-cherez-internet-s-pomoshh-yu-gsm-modulya-sim900-urok-3/
Ко мне скоро приедет SIM900, буду проверять )
пока веду поиски библиотеки, работающей железно.
вот здесь вроде упоминается "железная", но у меня либа не встала.
да не нужна библиотека. Удобнее управлять Ат командами. Подключение хоть к софт, хоть к хард сериал порту нужно для sim800l делать так. Тогда будет все работать.
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
монопенисуально - вообще никакой реакции...
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 и прогнать АТ команды в терминальной программе?
C какой-то из библиотек (которая с software serial - наверное, Aspen) у меня все работало.
(проверял не все задача была - "принять" посылку, убедившись что девайс живой).
Правда, реакция была странная - например, не пошел набор номера (no carrier), не смог вбить код завершения ввода СМС в терминале (но программно СМС отправилась).
(даже время из сети МТС считала).
Так что я склонен считать, что хардварно прямое подключение функционирует.
Ребятки, вы про какую библиотеку то вообще?
Я имел ввиду, что нужна библиотека типа SoftSerial есди работать с софтовым портом. Для хардового не нужна вообще никакая, если пользовать AT команды.