SIM900, работа c GPRS
Предшествующие материалы: GSM модем SIM900, AT-команды GSM модема SIM900.
В продолжение серии статей по GSM модему SIM900, а точнее по его AT командам, расскажу, как работать с GPRS его составляющей.
GSM GPRS модуль SIM900
Модуль всё также подключен через UART. В него установлена SIM карта, он видит сеть, на нём есть деньги, оператор поддерживает GPRS соединение и эта услуга включена.
Не забывайте, что неправильно настроенный GPRS или большой трафик по лимитному тарифу может влететь в копеечку.
Приступим.
Настройка GPRS соединения
Настройки GPRS подключения и само подключение к интернету производиться через одну команду AT+SAPBR с множеством параметров.
Количество входных параметров может доходить до 4-х:
1 параметр — тип выполняемой операции
- 0 – закрыть соединение
- 1 – открыть соединение
- 2 – запросить сведения о соединение
- 3 – передать параметры соединения
- 4 – запросить параметры соединения
- 5 – сохранить настройки в энергонезависимую память модуля
2 параметр – CID или идентификатор профиля
Оставшиеся 2 параметра могут применять различные значения в зависимости от запроса.
Команда |
Описание |
AT+SAPBR=1,1 OK |
Устанавливаем GPRS соединение |
AT+SAPBR=2,1 +SAPBR: 1,1,"xxx.xxx.xxx.xxx" OK |
Получаем сведения о соединении и IP адрес В ответе: Второй параметр: 0 – соединение устанавливается 1 – соединение установлено 2 – соединение закрывается 3 – нет соединения Третий параметр – IP адрес |
AT+SAPBR=0,1 OK |
Закрываем GPRS соединение |
AT+SAPBR=3,1,"CONTYPE","GPRS" OK AT+SAPBR=3,1,"APN","internet.mts.ru" OK AT+SAPBR=3,1,"USER","mts" OK AT+SAPBR=3,1,"PWD","mts" OK |
Установка настроек подключения CONTYPE – тип подключения GPRS или CSD APN – точка подключения USER – имя пользователя PWD – пароль PHONENUM – номер телефона (для CSD) RATE – скорость соединения (для CSD) |
AT+SAPBR=4,1 +SAPBR: CONTYPE: GPRS APN: internet.mts.ru PHONENUM: USER: mts PWD: mts RATE: 2 OK |
Узнать текущие настройки подключения |
Настройки GPRS автоматически не сохраняются в памяти модуля, но текущие настройки можно сохранить командой – AT+SAPBR=5,1.
Модуль позволяет использовать не только GPRS соединение для выхода в интернет, но и осуществлять передачу данных напрямую между модулями, но это рассматривать не буду.
Пример запроса для настройки GPRS соединения и подключения к итеренету:
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN","internet.mts.ru"
OK
AT+SAPBR=3,1,"USER","mts"
OK
AT+SAPBR=3,1,"PWD","mts"
OK
AT+SAPBR=1,1
OK
В первой строке указываем, что используем GPRS соединение, далее точку доступа оператора, далее пользователя и пароль, для соединения. Завершаем запрос установлением подключения.
Во время нахождения в Интернете можно производить следующие операции: читать страницы (осуществлять html запросы), посещать ftp, со всеми вытекающими последствиями, обмениваться TCP и UDP пакетами, проверять электронную почту (требуется специальная прошивка, читайте в следующих статьях) и возможно многое другое. Начнём по порядку.
HTML запросы
Команда |
Описание |
AT+HTTPINIT OK |
Инициализация http сервиса |
AT+HTTPPARA="CID",1 OK |
Установка CID параметра для http сессии |
AT+HTTPPARA="URL","https://alex-exe.ru/links/links.html" OK |
Указание адреса страницы |
AT+HTTPACTION=0 OK |
Старт сессии, на обмен данными данных Параметр, метод запроса: 0 – GET 1 – POST 2 – HEAD |
+HTTPACTION:0,200,1647 | Возвращаются данные о запрошенной страницы: Первый параметр – тип запроса, с.м. предыдущий пункт Второй параметр – HTTP код – статус о выполнение операции или код ошибки 100 – соединение 200 – Ок 204 – нет контента 404 – страницы не найдено Третий параметр – размер доступных данных (байт) |
AT+HTTPREAD | Чтение данных Первый параметр – адрес, с которого начать чтение Второй параметр – количество байт, которые нужно прочитать |
+HTTPREAD:1647 …………………….. |
В ответ приходит информация о количестве прочитанных байт и прочитанные данные |
AT+HTTPDATA=10,10000 DOWNLOAD 1234567890 OK |
Передача данных HTTP серверу Первый параметр – количество передаваемых байт Второй параметр – время ожидания данных, загружаемых в UART После отправки команды вернётся сообщение DOWNLOAD – приглашение на ввод данных. После удачной передачи данных вернётся OK, иначе error. |
AT+HTTPTERM OK |
Завершить работу HTTP службы |
Пример HTTP запроса:
AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","https://alex-exe.ru/links/links.html"
OK
AT+HTTPACTION=0
OK
+HTTPACTION:0,200,1647
AT+HTTPREAD
+HTTPREAD:1647
<html>
<head>
<title>Alex_EXE - Сайты</title>
<link rel="StyleSheet" href="http://alex-exe.net.ru/wp-content/themes/redplanet-10/style.css" type="text/css"/>
</head>
<body>
<center>
<table border=1 cellspacing=0 cellpadding=0>
………………………………………………………
</html>
OK
AT+HTTPTERM
OK
В запросе: сначала на модуле запускаем HTTP службу, далее указываем страницу с которой будем работать. Работать со страницей можно по разному: можно только узнать, существует ли она и её размер (HEAD), можно передать данные (POST), а можно, банально, прочитать (GET), что и продемонстрировано в примере. После указания своих намерений и получения ответа в виде существования страницы и её размера можем приступить к её чтению. По завершению работы закрываем HTTP службу.
FTP запросы
Команда |
Описание |
AT+FTPCID=1 OK |
Установка CID параметра FTP сессии |
AT+FTPSERV="xxx.xxx.xxx.xxx" OK |
Адрес ftp сервера из 32 бит формата xxx.xxx.xxx.xxx или в виде текстовой ASCII строки, длиной до 49 символов. |
AT+FTPUN="anonymous" OK AT+FTPPW="password" OK |
Аутентификация на сервере |
AT+FTPGETNAME="README" OK |
Имя файла |
AT+FTPGETPATH="/pub/site/" OK |
Путь к файлу |
AT+FTPGET=1 OK +FTPGET:1,1 |
Открыть FTP сессию для получения данных Параметр указывает – на открытие FTP сессии В ответе возвращается: первый параметр – см выше, а второй параметр – состояние открытой сессии или код ошибки: 1 – сессия открыта 61 – нет подключения 64 – время сессии истекло 71 – неправильное им пользователя 72 – неправильно введен пароль В случае успешно открытой сессии сообщение 1,1 будет возвращаться в течении всей сессии, каждые 2 секунды, пока сессия не будет закрыта или выйдет её ремя с кодом ошибки 1,64. |
AT+FTPGET=2,1024 +FTPGET:2,175 …………………….. |
Чтение данных с FTP сервера Первый параметр – указывает на чтение данных с FTP сервера Второй параметр указывает на количество читаемых байт |
AT+FTPPUT=1 +FTPPUT=1,1,1280 |
Открыть FTP сессию для отправки данных Параметр указывает – на открытие FTP сессии В ответе: Первый параметр – см. выше Второй параметр – состояние открытой сессии или код ошибки: 1 – сессия открыта Третий параметр – в случае успешно открытой сессии – максимальное количество возможных принятых данных за одну сессию |
AT+FTPPUT=2,100 +FTPPUT=2,100 …………………….. OK |
Отправка данных Первый параметр – указывает на отправку данных на FTP Второй параметр – количество отправляемых данных После подтверждение приёма команды нужно передать данные по UART |
AT+FTPPUT=2,0 OK |
Уведомляем сервер, что данных для передачи больше нет. Или закрытие сессии по передаче данных на FTP сервер. |
Пример FTP запроса:
AT+FTPCID=1
OK
AT+FTPSERV="149.20.4.69"
OK
AT+FTPUN="anonymous"
OK
AT+FTPPW="password"
OK
AT+FTPGETNAME="README"
OK
AT+FTPGETPATH="/pub/site/"
OK
AT+FTPGET=1
OK
+FTPGET:1,1
AT+FTPGET=2,1024
+FTPGET:2,175
This directory contains files related to the operation of the
kernel.org file itself.
The file sample_mirror_script.pl is a sample script for mirroring
kernel.org via rsync.
OK
В запросе зашли на FTP сервер ftp://kernel.org/ (можно зайти как по IP адресу, как в примере, а можно указать адрес в виде имени — kernel.org) под анонимным пользователем (имя и пароль для входа на открытые ресурсы по умолчанию). Указали имя файла, который собирались прочитать и путь к нему. Далее открыли FTP сессию и убедились, что всё сделали верно: интернет есть, сервер существует, путь к файлу и параметры аутентификации верны и файл доступен для чтения. Теперь, пока сессия не закончилась, мы можем прочитать доступный файл – читаем 1024 байта из файла. Прочитан весь файл в 175 байт и его содержимое выведено в терминал.
.
Alex_EXE | 30.09.2013 | Связь |
Миша пишет 17.12.2013 в 15:13 #
Здравствуйте!
Спасибо за статью, класно и по порядку изложено.
У меня вопрос: хочу передать данные (целые числа) с Sim900 на сервер, на стороне сервера использую GET.
Через веб-форму (то есть, браузер) данные передаются и принимаются замечательно. А через Sim900 в базу записываются нулевые значения, причем записываются не после комманды HTTPDATA, а сразу после HTTPACTION. Я так понимаю, что GET принимает сигнал старта сессии за какое-то число, и отправляет его в базу. После этого с чувством выполненого долга завершает свою работу.
Как этого избежать, не знаете?
Код страницы, на всяк случай:
Name:
Alex_EXE пишет 18.12.2013 в 00:22 #
Вопросы обмена информацией пока-что затронул поверхностно и нечего ни куда не передавал, а только читал.
Могу порекомендовать почитать официальную инструкцию по работе с модулем — sim900_ip_application note_v1.03 .
Миша пишет 18.12.2013 в 12:30 #
Alex_EXE, спасибо за ссылку )
Миша пишет 18.12.2013 в 20:04 #
Разобрался. Код на сервере был кривой.
С вашего позволения, оставлю ссылку на пример, который мне все прояснил: http://www.edaboard.com/thread281314.html
willrast пишет 13.03.2014 в 10:15 #
Отличная статья, спасибо!
Не получается с помощью POST запроса передать данные, сервер ничего не принимает. И возможно ли пройти авторизацию с помощью POST запроса? Если да, то хотелось бы знать как?
Иван пишет 30.04.2014 в 22:08 #
Здравствуйте откуда у вас эта информация где еще можно почитать оригинал?
Alex_EXE пишет 01.05.2014 в 00:20 #
Скорее всего из документации к самому модулю.
Ссылки на даташиты приведены в первой статье по сим900.
Так же можете почитать другие стать из серии по этому модулю.
Roman пишет 06.06.2014 в 13:49 #
Как сделать,чтоб при включении модем автоматически включался GPRS?
Alex_EXE пишет 06.06.2014 в 20:01 #
По этому вопросу не подскажу, обычно этим у меня МК занимается.
Андрей пишет 12.10.2014 в 03:12 #
Хотелось бы въехать в т.н. CID — идентификатор профиля. На что он влияет? В приведённых примерах всегда вижу что он единица. Хотя, если я правильно понял мануал по АТ командам, может принимать значения 1,2 и 3. Можно как то разжевать, а то что то не врублюсь никак.
Alex_EXE пишет 14.10.2014 в 23:48 #
С модулем развлекался давно и точно не помню:
кажется сохранение настроек профиля подключения к точке доступа. Т.е. можно сделать две записи с разными настройками GPRS подключения (3-служебная и недоступная для записи).
Подробнее смотрите описание к команде AT+CGDCONT , причём не только в описании к данному модулю.
MAKC пишет 02.11.2014 в 19:40 #
Доброго времени суток! Очень нужна информация по поводу передачи данных с одно модуля другому напрямую. Если такое действительно возможно, пожалуйста, подкиньте какую-нибудь инфу или хотя бы ссылку где об этом можно узнать? Буду безмерно благодарен за любую полезную информацию по этой теме!
Alex_EXE пишет 10.11.2014 в 21:30 #
Повторюсь — что с модулем развлекался давно и многого уже не помню — поэтому на счёт встроенных в модуль подобных возможностях автономной такой передачи не подскажу. Но если есть управляющий контроллер то реализовать можно:
СМС, тональный режим, по типу dial-up модема. Но вот с передачей информации по сети может выйти загвоздка — первый модуль после подключения к сети (при каждом выходе в сети адрес может меняться) должен будет передать второму модулю свой IP адрес. Но если поставить посредника в виде какого-нибудь сервера то без проблем.
Павел пишет 19.09.2015 в 00:36 #
Спасибо автору за статью!
Есть вопрос — можно ли sim900 использовать в качестве моста для обмена данными (например UART со скоростью 9600) ?
Или только два режима сервер или клиент?
То есть односторонняя передача? Мне нужен именно обмен, то есть server\client.
Павел пишет 19.09.2015 в 00:54 #
А также есть по поводу двух команд:
AT+CIFSR
и
AT+SAPBR=2,1
Обе показывают ip адреса.
На моем примере
AT+SAPBR=2,1 — 213.87.83.170
AT+CIFSR — 100.64.231.111
Через cmd пингуется первый вариант, второй никак.
Хотя в документации пишут только про второй.
Может я чего не догоняю((
Alex_EXE пишет 24.09.2015 в 03:28 #
Точно не помню, но по моему они отвечают за различные интернет соединения.
Первый больше годится для прямого TCP/IP через порт, который я так и не смог опробовать, т.к. нужно было отключать защиту роутера, с которой не хотел связываться.
Второй использует более высокоуровневые HTTP, FTP … запросы.
Андрей пишет 18.11.2015 в 20:18 #
Спасибо за статью! Все работает до команді AT+HTTPTERM. На нее я не получаю ответ от модуля «\r\nOK\r\n». Если повторно откріваю HTTP сессию, то на команду AT+HTTPINIT получаю ответ «\r\nERROR\r\n». Ничего не помогает до перегрузки модуля!
Alex_EXE пишет 23.11.2015 в 04:15 #
А время ожидания ответа не проходит до отправки завершения сессии? Может она завершается раньше автоматически.
Андрей пишет 23.11.2015 в 16:42 #
Я ожидаю 45 сек — и не приходит ничего! Вообще! Ни ERROR, ни ОК — вообще ничего!
На команду AT+SAPBR=0,1 получаю OK, т.е. профайл закрівается! А команда закрітия HTTP-сессии не проходит ни до, ни после! Повторно HTTP-сессия не запускается — не проходит команда AT+HTTPINIT. Приходится перегружать модуль через PWRKEY.
Александр пишет 24.11.2015 в 05:28 #
Использую SIM900R. Устанавливаю соединение как описано выше.
IP адрес получаю. Далее хочу получить время с NTP сервера командой AT+CNTP. Выдает Ош.62 — DNS Error. Что же тут не так?
Андрей пишет 25.11.2015 в 16:46 #
AT+CNTP !??? А что єто за команда такая? Ее в описании нет.
Александр пишет 26.11.2015 в 02:02 #
http://simcom.ee/documents/SIM900/SIM900_NTP%20AT%20Command%20Manual_V1.00%28demo%29.pdf
Евгений пишет 15.04.2016 в 16:01 #
Хочу записывать данные в файл по ftp, но постоянно получаю ошибку +FTPGET:1,64.
Вот ответы от SIM900:
AT
OK
AT+GSV
SIMCOM_LTD
SIMCOM_SIM900
Revision:1137B04SIM900M64_ST_ENHANCE
OK
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN","internet.tele2.ru"
OK
AT+SAPBR=1,1
OK
AT+SAPBR=2,1
+SAPBR: 1,1,"10.72.79.113"
OK
AT+SAPBR=4,1
+SAPBR:
CONTYPE: GPRS
APN: internet.tele2.ru
PHONENUM:
USER:
PWD:
RATE: 2
OK
AT+FTPCID=1
OK
AT+FTPSERV="192.150.16.26"
OK
AT+FTPGETNAME="license.txt"
OK
AT+FTPGETPATH="/"
OK
AT+FTPMODE=1
OK
AT+FTPTYPE="A"
OK
AT+FTPGET=1
OK
+FTPGET:1,64
ЧТО Я ДЕЛАЮ НЕ ТАК????
elfrom пишет 30.12.2016 в 12:03 #
была ошибка 1.64 решилось пополнением баланса сим карты (было 24 рубля стало 124) и заработало… странно как то..
Андрей пишет 21.02.2018 в 01:13 #
Доброго времени суток! Подскажите пожалуйста почему модуль сим 900 отвечает error на команду at+httpinit?
Alex_EXE пишет 27.02.2018 в 08:26 #
Модуль к Интернету подключен?
Андрей пишет 12.03.2018 в 17:33 #
Посылаю команду на сим 900 at+sapbr = 2,1 в ответ модуль присылает номер IP адреса в сети
Андрей пишет 12.03.2018 в 17:33 #
Подключен
ntahe пишет 10.09.2019 в 10:32 #
Добрый день, есть модем telit gt 863 после передачи данных на сервер ftp нужно ввести команду +++ для возврата в командный режим, но модем воспринимает команду как обычный текст
ntahe пишет 10.09.2019 в 17:35 #
Всё разобрался, не нужно было отсылать каретку да и всё
Otabek пишет 30.03.2020 в 00:06 #
I have a telegram bot
User пишет 23.12.2020 в 20:46 #
Тестовый линк у вас указан httpS .
без AT+HTTPSSL=1 после AT+HTTPACTION=0 была ошибка 601 или 603.
Может добавьте в статью AT+HTTPSSL=1 или линк смените на HTTP