SIM900, работа c GPRS

Предшествующие материалы: GSM модем SIM900, AT-команды GSM модема SIM900.

В продолжение серии статей по GSM модему SIM900, а точнее по его AT командам, расскажу, как работать с GPRS его составляющей.

GSM GPRS модуль SIM900

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 байт и его содержимое выведено в терминал.

.

32 комментария »

Alex_EXE | 30.09.2013 | Связь |

32 комментария на « SIM900, работа c GPRS»

  1. Миша пишет 17.12.2013 в 15:13 #

    Здравствуйте!
    Спасибо за статью, класно и по порядку изложено.

    У меня вопрос: хочу передать данные (целые числа) с Sim900 на сервер, на стороне сервера использую GET.
    Через веб-форму (то есть, браузер) данные передаются и принимаются замечательно. А через Sim900 в базу записываются нулевые значения, причем записываются не после комманды HTTPDATA, а сразу после HTTPACTION. Я так понимаю, что GET принимает сигнал старта сессии за какое-то число, и отправляет его в базу. После этого с чувством выполненого долга завершает свою работу.

    Как этого избежать, не знаете?
    Код страницы, на всяк случай:

    Name:

  2. Alex_EXE пишет 18.12.2013 в 00:22 #

    Вопросы обмена информацией пока-что затронул поверхностно и нечего ни куда не передавал, а только читал.
    Могу порекомендовать почитать официальную инструкцию по работе с модулем — sim900_ip_application note_v1.03 .

  3. Миша пишет 18.12.2013 в 12:30 #

    Alex_EXE, спасибо за ссылку )

  4. Миша пишет 18.12.2013 в 20:04 #

    Разобрался. Код на сервере был кривой.
    С вашего позволения, оставлю ссылку на пример, который мне все прояснил: http://www.edaboard.com/thread281314.html

  5. willrast пишет 13.03.2014 в 10:15 #

    Отличная статья, спасибо!
    Не получается с помощью POST запроса передать данные, сервер ничего не принимает. И возможно ли пройти авторизацию с помощью POST запроса? Если да, то хотелось бы знать как?

  6. Иван пишет 30.04.2014 в 22:08 #

    Здравствуйте откуда у вас эта информация где еще можно почитать оригинал?

  7. Alex_EXE пишет 01.05.2014 в 00:20 #

    Скорее всего из документации к самому модулю.
    Ссылки на даташиты приведены в первой статье по сим900.
    Так же можете почитать другие стать из серии по этому модулю.

  8. Roman пишет 06.06.2014 в 13:49 #

    Как сделать,чтоб при включении модем автоматически включался GPRS?

  9. Alex_EXE пишет 06.06.2014 в 20:01 #

    По этому вопросу не подскажу, обычно этим у меня МК занимается.

  10. Андрей пишет 12.10.2014 в 03:12 #

    Хотелось бы въехать в т.н. CID — идентификатор профиля. На что он влияет? В приведённых примерах всегда вижу что он единица. Хотя, если я правильно понял мануал по АТ командам, может принимать значения 1,2 и 3. Можно как то разжевать, а то что то не врублюсь никак.

  11. Alex_EXE пишет 14.10.2014 в 23:48 #

    С модулем развлекался давно и точно не помню:
    кажется сохранение настроек профиля подключения к точке доступа. Т.е. можно сделать две записи с разными настройками GPRS подключения (3-служебная и недоступная для записи).
    Подробнее смотрите описание к команде AT+CGDCONT , причём не только в описании к данному модулю.

  12. MAKC пишет 02.11.2014 в 19:40 #

    Доброго времени суток! Очень нужна информация по поводу передачи данных с одно модуля другому напрямую. Если такое действительно возможно, пожалуйста, подкиньте какую-нибудь инфу или хотя бы ссылку где об этом можно узнать? Буду безмерно благодарен за любую полезную информацию по этой теме!

  13. Alex_EXE пишет 10.11.2014 в 21:30 #

    Повторюсь — что с модулем развлекался давно и многого уже не помню — поэтому на счёт встроенных в модуль подобных возможностях автономной такой передачи не подскажу. Но если есть управляющий контроллер то реализовать можно:
    СМС, тональный режим, по типу dial-up модема. Но вот с передачей информации по сети может выйти загвоздка — первый модуль после подключения к сети (при каждом выходе в сети адрес может меняться) должен будет передать второму модулю свой IP адрес. Но если поставить посредника в виде какого-нибудь сервера то без проблем.

  14. Павел пишет 19.09.2015 в 00:36 #

    Спасибо автору за статью!
    Есть вопрос — можно ли sim900 использовать в качестве моста для обмена данными (например UART со скоростью 9600) ?
    Или только два режима сервер или клиент?
    То есть односторонняя передача? Мне нужен именно обмен, то есть server\client.

  15. Павел пишет 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 пингуется первый вариант, второй никак.
    Хотя в документации пишут только про второй.
    Может я чего не догоняю((

  16. Alex_EXE пишет 24.09.2015 в 03:28 #

    Точно не помню, но по моему они отвечают за различные интернет соединения.
    Первый больше годится для прямого TCP/IP через порт, который я так и не смог опробовать, т.к. нужно было отключать защиту роутера, с которой не хотел связываться.
    Второй использует более высокоуровневые HTTP, FTP … запросы.

  17. Андрей пишет 18.11.2015 в 20:18 #

    Спасибо за статью! Все работает до команді AT+HTTPTERM. На нее я не получаю ответ от модуля «\r\nOK\r\n». Если повторно откріваю HTTP сессию, то на команду AT+HTTPINIT получаю ответ «\r\nERROR\r\n». Ничего не помогает до перегрузки модуля!

  18. Alex_EXE пишет 23.11.2015 в 04:15 #

    А время ожидания ответа не проходит до отправки завершения сессии? Может она завершается раньше автоматически.

  19. Андрей пишет 23.11.2015 в 16:42 #

    Я ожидаю 45 сек — и не приходит ничего! Вообще! Ни ERROR, ни ОК — вообще ничего!
    На команду AT+SAPBR=0,1 получаю OK, т.е. профайл закрівается! А команда закрітия HTTP-сессии не проходит ни до, ни после! Повторно HTTP-сессия не запускается — не проходит команда AT+HTTPINIT. Приходится перегружать модуль через PWRKEY.

  20. Александр пишет 24.11.2015 в 05:28 #

    Использую SIM900R. Устанавливаю соединение как описано выше.
    IP адрес получаю. Далее хочу получить время с NTP сервера командой AT+CNTP. Выдает Ош.62 — DNS Error. Что же тут не так?

  21. Андрей пишет 25.11.2015 в 16:46 #

    AT+CNTP !??? А что єто за команда такая? Ее в описании нет.

  22. Александр пишет 26.11.2015 в 02:02 #

  23. Евгений пишет 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

    ЧТО Я ДЕЛАЮ НЕ ТАК????

  24. elfrom пишет 30.12.2016 в 12:03 #

    была ошибка 1.64 решилось пополнением баланса сим карты (было 24 рубля стало 124) и заработало… странно как то..

  25. Андрей пишет 21.02.2018 в 01:13 #

    Доброго времени суток! Подскажите пожалуйста почему модуль сим 900 отвечает error на команду at+httpinit?

  26. Alex_EXE пишет 27.02.2018 в 08:26 #

    Модуль к Интернету подключен?

  27. Андрей пишет 12.03.2018 в 17:33 #

    Посылаю команду на сим 900 at+sapbr = 2,1 в ответ модуль присылает номер IP адреса в сети

  28. Андрей пишет 12.03.2018 в 17:33 #

    Подключен

  29. ntahe пишет 10.09.2019 в 10:32 #

    Добрый день, есть модем telit gt 863 после передачи данных на сервер ftp нужно ввести команду +++ для возврата в командный режим, но модем воспринимает команду как обычный текст

  30. ntahe пишет 10.09.2019 в 17:35 #

    Всё разобрался, не нужно было отсылать каретку да и всё

  31. Otabek пишет 30.03.2020 в 00:06 #

    AT+SAPBR=3,1,"CONTYPE","GPRS"^M
    00:01:17.406 OK
    00:01:17.534 AT+SAPBR=3,1,"APN","internet"^M
    00:01:17.578 OK
    00:01:17.689 AT+SAPBR=1,1^M
    00:01:18.352 OK
    00:01:22.214 AT+HTTPINIT^M
    00:01:22.276 OK
    00:01:24.327 AT+HTTPSSL=1^M
    00:01:24.395 OK
    00:01:24.854 AT+HTTPPARA="CID",1^M
    00:01:24.913 OK
    00:01:25.500 AT+HTTPPARA="URL","https://api.telegram.org/bot/sendMessage?chat_id=&text=11"^M
    00:01:25.628 OK
    00:01:40.222 AT+HTTPACTION=0^M
    00:01:40.264 OK
    00:01:42.118
    00:01:42.194 +HTTPACTION:0,601,0

    Please help me
    Please help me
    Please help me


    I have a telegram bot

  32. User пишет 23.12.2020 в 20:46 #

    Тестовый линк у вас указан httpS .
    без AT+HTTPSSL=1 после AT+HTTPACTION=0 была ошибка 601 или 603.
    Может добавьте в статью AT+HTTPSSL=1 или линк смените на HTTP

Комментарии RSS

Оставьте отзыв