SIM800L v2.0 - с какими библиотеками дружит? Не могу запустить на Меге.
- Войдите на сайт для отправки комментариев
Коллеги, приобрел сей модуль.
Пару раз даже удалось отправить с него СМС, но без использования библиотеки 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" |
13 | SMSGSM 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 |
23 | int numdata; |
24 | boolean started= false ; |
25 | char smsbuffer[160]; |
26 | char n[20]; |
27 |
28 |
29 | void 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 |
50 | void 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), со скоростью порта. Один раз даже получилось, и модуль определился. Но тот скетч как назло не сохранился, я уже третий день бьюсь, ника не получается, хотя по памяти вроде все так.
Какие есть мысли?
Сам модуль:
точно такая же беда, (мега и сим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. Есть еще много непоняток, но в общем и в целом результат достигнут. Код, который приведен выше, как раз это позволяет сделать.
Пока только не разобрался, можно ли как-то вместо прямого текста подсунуть переменную, содержащую нужный текст?
1
sms.SendSMS(
"+7910*******"
,
"Arduino SMS"
)
То бишь вместо "Arduino SMS" подсунуть строковую переменную или массив. Пока не получается..
char message[]="Hello world";
библиотеку где скачали? , я пытался найти для сим 800 но не могу скачать ))
смотрел настройки и библиотеку взял здесь: 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А, сейчас просадки почти нет, но все равно периодичеки при получении сигнала модуль перезагружается. Так что к питанию тоже надо быть внимательным.
спасибо попробую сейчас, посмотю , я в принципи через обычный сериал отправляю сообщения , вот с приемом еще не разобрался . но это мелочи а меня больше интересует выход в интеренет через модуль, закидывать все буду через php cкрипт в базу данных, ну смс тоже будет учавствовать в качестве управления ардуинкой.
так вот в интеренет пока не могу выйти, ставил теле2 сикарту но она почему то не подходит(возможно что она 3G а модуль поддерживает 2G) , вставил мегафон заработал модуль. но рабочего примера не могу найти работы GPRS с мегафоном.
работа GPRS с симкартой теле2 http://2150692.ru/faq/62-gprs-svyaz-cherez-sim800l-i-arduino пробовал заменить настройки подключения но не помогло
01
AT+SAPBR=3,1,
"APN"
,
"internet"
02
AT+SAPBR=3,1,
"APN"
,
"internet"
03
04
OK
05
06
07
AT+SAPBR=3,1,
"USER"
,
"gdata"
08
AT+SAPBR=3,1,
"USER"
,
"gdata"
09
10
OK
11
12
13
AT+SAPBR=3,1,
"PWD"
,
"gdata"
14
AT+SAPBR=3,1,
"PWD"
,
"gdata"
15
16
OK
17
18
AT+SAPBR=1,1
19
AT+SAPBR=1,1
20
21
ERROR
22
23
AT+HTTPINIT
24
AT+HTTPINIT
25
26
ERROR
А вначале еще AT+SAPBR=3,1,"CONTYPE","GPRS"
Деньги на счете есть, интернет с телефона работает с этой симкой?
ДА на мобилке проверял, и Ваша строчка тоже есть
1
String 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
};
Лучше с компьютера пробовать, также через монитор порта вводить команды, вдруг задержки не хватает и т.п.
Кстати, вполне вероятно, там модуль сеть то может не успеть найти, не то что GPRS, так что вначале попробуйте заменить delay(3000); на delay(15000);
Я с интернетом пока не заморачивался, мне бы с СМС до конца разобраться.
Пока очередной затык: не могу понять, как удалить все СМС с сим карты. Посредстовм сериала и ат-команд в принципе понятно, а вот как при помощи библиотеки, не пойму.
Вроде нашел функцию sms.DeleteSMS, но что-то сдается мне, она работает не корректно.
Спасибо, а как складывать несколько строк в одну переменную?
Т.е. мне теперь к этой строке char message[]="Hello world"; добавить еще строку "I'm back"?
отправляю все команды через монитор порта, вот както вроди ответы получаю положительные а на сайт ничего не приходит, посмотрите кто понимает может какую команду забыл
1
AT
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
AT+HTTPPARA=URL,<a href=
"/arduino/test/test.php?a="
>http:
//****.ru/arduino/test/test.php?a=</a> 345
я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки которая состоит из кучи других, вот вам пример рабочей отправки,
01
#include <AltSoftSerial.h>
02
AltSoftSerial mySerial;
// 46,48
03
04
//#include <SoftwareSerial.h>
05
//SoftwareSerial mySerial(50, 51); // RX, TX
06
07
//HardwareSerial & mySerial = Serial1;
08
09
10
void
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
27
void
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
42
void
loop
()
// пустой цикл
43
{
44
45
46
47
}
в верху по подключению разберетесь думаю
и очистить смс можно АТ командами
когда забработает интеренет допишу и получение смс
получилось :)))))
вот АТ команды может каму понадобятся для работы с интернетом
01
AT
02
AT+SAPBR=3,1,CONTYPE,GPRS,
//Установка настроек подключения
03
AT+SAPBR=3,1,APN,internet,
04
AT+SAPBR=3,1,USER,gdata,
05
AT+SAPBR=3,1,PWD,gdata,
06
AT+SAPBR=1,1",
//Устанавливаем GPRS соединение
07
AT+HTTPINIT",
//Инициализация http сервиса
08
AT+HTTPPARA=CID,1
//Установка CID параметра для http сессии
09
AT+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>
10
AT+HTTPACTION=1
11
AT+HTTPTERM
тепер осталось дописать все в тестовый скетч
оо какаято строка между 9 и 10 строчкой лишняя (удалить)
я скачал посмотрел немного библиотеку, ну как сказать, как мой друг (библиотеки это зло). это все можно написать и без громоздкой библиотеки которая состоит из кучи других, вот вам пример рабочей отправки,
+1. Вот мой код работы с gsm шилдом.
01
String currStr =
""
;
// для цикла чтения смс
02
boolean isStringMessage =
false
;
// Переменная принимает значение True, если текущая строка является сообщением
03
04
int
Peremennaya = 200;
// какая нибудь переменная, так для примера отправить её в смс
05
06
void
setup
() {
07
08
pinMode (13, OUTPUT);
09
pinMode(9, OUTPUT);
// пин программного включения шилда, порт на выход
10
digitalWrite(9, HIGH);
// Подаем High на пин 9
11
delay(2000);
// на 2 секунды
12
digitalWrite(9, LOW);
// и отпускаем в Low.
13
delay(5000);
14
Serial
.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
40
void
loop
() {
41
readSMS ();
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
61
void
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
}
Неужто с библиотекой 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 =)
получилось :)))))
вот АТ команды может каму понадобятся для работы с интернетом
01
AT
02
AT+SAPBR=3,1,CONTYPE,GPRS,
//Установка настроек подключения
03
AT+SAPBR=3,1,APN,internet,
04
AT+SAPBR=3,1,USER,gdata,
05
AT+SAPBR=3,1,PWD,gdata,
06
AT+SAPBR=1,1",
//Устанавливаем GPRS соединение
07
AT+HTTPINIT",
//Инициализация http сервиса
08
AT+HTTPPARA=CID,1
//Установка CID параметра для http сессии
09
AT+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>
10
AT+HTTPACTION=1
11
AT+HTTPTERM
тепер осталось дописать все в тестовый скетч
оо какаято строка между 9 и 10 строчкой лишняя (удалить)
А что будет на сайте? Я так понимаю, что-то типа панели управления? Или только индикаторы?
Ну чистый ассемблер я уже позабыл, давно с ним работал, году так в 92-м.
А вот то, что набор функций и операторов не полный, для меня облегчение. Зайти на arduino.cc и посмотреть там ума, конечно, не хватило :)
на сайте пока не решил , для начала будет просто индикация , с мнемо схемой и графиком, а по поводу управления както я отношусь не очень хорошо к управлению из сети, если что и буду делать с управлением так это прогу для ведроида с кучей проверок и шифрованием. а пока можно и смс поуправлять.
рабочий код с приемом / отправкой СМС посредством библиотеки SIM900 и выводом данных на TFT дисплей.
001
// Подключаем библиотеки
002
003
#include "SIM900.h"
004
#include <SoftwareSerial.h>
005
#include <String.h>
006
#include "sms.h"
007
SMSGSM sms;
008
009
int
numdata, profile, statusSMS;
010
boolean started=
false
;
011
char
smsbuffer[160];
012
char
n[20];
013
char
phone1[] =
"+7**********"
;
/// номер для отправки СМС
014
String textSMS, currStr, profile_p, relayStatus_p1, version_p;
015
016
// библиотека для работы с дисплеем
017
#include <UTFT.h>
018
// создаём объект класса UTFT
019
// и передаём идентификатор модели дисплея и номера управляющих пинов
020
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
021
// объявления встроенного шрифта
022
extern
uint8_t BigFont[];
023
024
// датчики
025
026
int
ST_Lounge;
// датчик температуры гостиной
027
int
ST_UtilityRoom;
// датчик температуры подсобки
028
int
ST_Hallway;
// датчик температуры прихожей
029
int
ST_Basement;
// датчик температуры подвала
030
int
ST_Outside;
// датчик температуры улицы
031
032
void
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
064
void
EndSMS()
//__________________Чистим СМС_______________________
065
{
066
for
(
int
i=0; i <= 21; i++){
067
sms.DeleteSMS(i);
068
}
069
currStr =
""
;
070
char
smsbuffer[160];
071
gsm.readSMS(smsbuffer, 160, n, 20);
072
currStr = String (smsbuffer);
073
myGLCD.print(currStr, LEFT, 230);
// выводим на экран содержимое после очистки (на всякий случай)
074
075
}
076
077
078
void
readGSM()
//_____Цикл чтения входящих СМС-сообщений______________
079
{
080
myGLCD.print(
"gsm_fn"
, 50, 24);
// пишем на дисплее статус перехода в функцию
081
if
(!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
105
void
setup
() {
106
//версия сборки (номер, версия, подверсия, дата)
107
version_p =
"0.1.5.2302216"
;
108
//relay8 relay (6, 7);
109
110
profile = 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);
123
myGLCD.print(
"dr.Lmg"
, LEFT, 0);
124
125
myGLCD.print(version_p, LEFT, 24);
126
//
127
128
// подключаем модуль GSM
129
//SoftwareSerial Serial2(14,15);
130
Serial
.begin(19200);
// GSM SMS-передача плата SIM800
131
if
(gsm.begin(19200)){
132
myGLCD.print(
"Status GSM: READY"
, LEFT, 100);
133
started=
true
;}
134
else
{ myGLCD.print(
"Status GSM: IDLE"
, LEFT, 100);}
135
statusSMS = 0;
136
//NastroykaGSM();
137
for
(
int
i=0; i <= 20; i++){
138
sms.DeleteSMS(i);
139
}
140
myGLCD.print(
"GSM registration...."
, LEFT, 120);
141
//delay (2000);
142
if
(started) {
143
// получаем значения даты и времени
144
//get3231Date();
145
char
message[]=
"SmartHome vkluchen"
;
// + " " + date_full+ " " + time_full;
146
statusSMS = sms.SendSMS(phone1, message);
// время включения
147
textSMS = String (statusSMS) +
"SMS NOT SEND "
;
148
}
149
if
(statusSMS > 0) {
150
myGLCD.print(
"SMS SEND "
, LEFT, 120);}
151
else
{myGLCD.print(textSMS, LEFT, 120);}
152
153
154
// очищаем экран
155
delay(1000);
156
myGLCD.clrScr();
157
}
158
159
160
//-----------------------------------------------
161
162
void
loop
() {
163
164
// работа с GSM модулем
165
readGSM();
166
167
168
// вывод данных на дисплей
169
//goDisplay();
170
171
}
поздравляю с успешным выполнением домашнего задания :)
у меня тут такой вопрос возник на sim800 есть контакт reset так как с ним работать? в частности программно , что куда подключать и какое напряжение на него надо подать, и как ручной перезапуск сделать с помощью установки кнопочки.
Baks, спасибо. Совместными усилиями все получилось, слава Богу!
Касательно reset, я так понял, что его нужно соединить с пином reset на ардуино, и при перезагрузке ардуино модуль тоже перезагружается.
По отдельной кнопке перезагрузки нужно даташит смотреть, так не подскажу.
Есть ли кто, кто знает как к этому модулю подключить микрофон и динамик? Или это не предусмотрено конструкцией?
предуусмотрено , только как не знаю вот попробуй посмотри тут может что найдеш интересно, там в низу и схемки есть как распаяли модуль https://www.adafruit.com/products/1946
мне тоже нужно будет , пока не до этого :)
У меня другой шилд, см. пост #1, там ног изначально под аудио нет. Хотя сама микросхема SIM800 вроде как предполагает наличие аудио.
Вечер добрый. Проблемка с SIM800L v2/0 - Установил библиотеку 900h. Запускаю пример для работы с СМС. Смотрю данные в Serial port - всё ОК.
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"
11
SMSGSM 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
21
int
numdata;
22
boolean started=
false
;
23
char
smsbuffer[160];
24
char
n[20];
25
26
void
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
47
void
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
};
когда ж научитесь то а. в сериал ставить только то что надо а именно 9600 скорость
Ставил и 9600 и 19200 - в сериал всё шлёт.
Вроде победил)... Такое ощущение что была переполнена память СИМ... СМС пошли после удаления принятых ранее через АТ команду.
вопрос ко всем, кто разобрался )
все библиотеки, которые я смотрел (на 800, 900) требуют software.serial.
А это обязательно вообще? У меня мега с 3 железными портами, зачем мне использовать какую-то софтовую эмуляцию, которая как минимум потребляет ресурсы, как максимум - источник глюков?
Спасибо!
Библиотека обязательна. А по каким портам будет общаться gsm модуль - решать тебе. На меге, что интересно, у меня заработал только на 10-11 пинах. На хардовых не пошел.
Хотите сказать, что через
1
Serial1.begin(9600);
работать не будет?
Тут утверждают обратное.http://lazysmart.ru/avtomatika-v-by-tu/monitoring-temperatury-cherez-internet-s-pomoshh-yu-gsm-modulya-sim900-urok-3/
Ко мне скоро приедет SIM900, буду проверять )
пока веду поиски библиотеки, работающей железно.
вот здесь вроде упоминается "железная", но у меня либа не встала.
да не нужна библиотека. Удобнее управлять Ат командами. Подключение хоть к софт, хоть к хард сериал порту нужно для sim800l делать так. Тогда будет все работать.
MaksVV
Пробовал.... не пошло:
01
void
setup
()
02
{
03
Serial3.begin(19200);
04
delay(500);
05
}
06
void
loop
()
07
{
08
1. вариант:
09
if
(Serial3.available())
10
Serial
.write(Serial3.read());
11
if
(
Serial
.available())
12
Serial3.write(
Serial
.read());
13
14
2 вариант:
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
монопенисуально - вообще никакой реакции...
MaksVV
Пробовал.... не пошло:
01
void
setup
()
02
{
03
Serial3.begin(19200);
04
delay(500);
05
}
06
void
loop
()
07
{
08
1. вариант:
09
if
(Serial3.available())
10
Serial
.write(Serial3.read());
11
if
(
Serial
.available())
12
Serial3.write(
Serial
.read());
13
14
2 вариант:
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 и прогнать АТ команды в терминальной программе?
C какой-то из библиотек (которая с software serial - наверное, Aspen) у меня все работало.
(проверял не все задача была - "принять" посылку, убедившись что девайс живой).
Правда, реакция была странная - например, не пошел набор номера (no carrier), не смог вбить код завершения ввода СМС в терминале (но программно СМС отправилась).
(даже время из сети МТС считала).
Так что я склонен считать, что хардварно прямое подключение функционирует.
Ребятки, вы про какую библиотеку то вообще?
Я имел ввиду, что нужна библиотека типа SoftSerial есди работать с софтовым портом. Для хардового не нужна вообще никакая, если пользовать AT команды.