Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен данными между GSM-модулями
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
ДЕЙЛ
На терраэлектронике есть в продаже SIM900R, но там написано, что модуль не поддерживает FTP и HTTP. http://www.terraelectronica.ru/catalog_info.php?CODE=1048498
Можно ли этот модуль применять для передачи данных? Как в общих чертах реализуется передача данных между двумя GSM модулями? Не смсками же передавать.
Aner
SIM900R - малый он по памяти, диапазонам, посему полу-дохлый, дешёвый, для ограниченных задач только. Похоже новенький вы в этой теме. ... да никак между двумя GSM модулями. Между серверами только, в модуле сервера нет же ж. Опять таки смотря что передавать как быстро, как надежно, и тд. Но можно и смсками.
ДЕЙЛ
Хочу применить его для трекера. Один модуль будет в движущемся объекте, второй на столе подключен к компу. На компе будет рисоваться маршрут движения. Вторая функция - удалённая смена прошивки.
Aner
А чем не устраивают те, что продаются? Самому освоить разработку непросто, проще купить готовый. С десяток трекеров такие функции имеют. Не устраивают,! тек проще софт на компе сделать как хочется. Я понимал бы, если хотите "хитростей" добавить в трекер, ...
x893
Особенно при таком багаже знаний
rx3apf
Цитата(ДЕЙЛ @ Nov 20 2014, 16:33) *
Можно ли этот модуль применять для передачи данных? Как в общих чертах реализуется передача данных между двумя GSM модулями? Не смсками же передавать.

Без отдельного сервера, имеющего "белый" IP - затруднительно. Между двумя модулями - только если хотя бы один из них имеет "белый" IP (за отдельные деньги от оператора). А поддержка http/ftp - это на любителя, можно и обойтись.
Aner
QUOTE (x893 @ Nov 21 2014, 01:12) *
Особенно при таком багаже знаний

x893 вы забросили вашу разработку трекера, та что на гит-хабе?
x893
Цитата(Aner @ Nov 21 2014, 02:00) *
x893 вы забросили вашу разработку трекера, та что на гит-хабе?

Забросил - не до этого
Хотя и сервер есть и люди пользуются.
Просто надоело

Сейчас новый трекер делаю - 25х14 мм (без антен и батарейки) - вот где раздолье !
ДЕЙЛ
Цитата(Aner @ Nov 21 2014, 00:34) *
А чем не устраивают те, что продаются? Самому освоить разработку непросто, проще купить готовый.

Проще у китайцев всё покупать, а самим лес валить японскими бензопилам wink.gif

Цитата(x893 @ Nov 21 2014, 02:12) *
Особенно при таком багаже знаний

Так ведь надо когда-то начинать smile3046.gif Вот я и хочу понять, насколько это сложно, что нужно освоить и как в общих чертах организовать передачу данных с мопеда на комп.
SpyBot
Цитата(ДЕЙЛ @ Nov 21 2014, 11:30) *
Так ведь надо когда-то начинать smile3046.gif Вот я и хочу понять, насколько это сложно, что нужно освоить и как в общих чертах организовать передачу данных с мопеда на комп.

Как вариант, можно использовать CSD-вызов - это вообще сверх элементарно sm.gif

Установка соединения с сервером по гпрс - это, грубо говоря, одна ат-комманда sm.gif

Ничего сверхъестественного в этом нету. Все описано миллионы раз в инете и тысячи - конкретно на этом форуме.
ДЕЙЛ
Цитата(SpyBot @ Nov 25 2014, 04:35) *
Как вариант, можно использовать CSD-вызов - это вообще сверх элементарно sm.gif

Установка соединения с сервером по гпрс - это, грубо говоря, одна ат-комманда sm.gif

Ничего сверхъестественного в этом нету. Все описано миллионы раз в инете и тысячи - конкретно на этом форуме.

пока вроде соединился с интернетом, увидел свой айпишник. Каков сам принцип передачи файла с одного модуля на другой? Кто и как учавствует в этой передаче? Какую теорию почитать надо? Скачал книгу Попова про GSM - там всякие ячейки интерференции, скачал про GPRS - там услуги связи и перспективы роста скорости мобильного интернета. wacko.gif

Цитата(ДЕЙЛ @ Nov 20 2014, 17:33) *
написано, что модуль не поддерживает FTP и HTTP.

на что это может повлиять? Для чего его можно применить?
ДЕЙЛ
Читаю вот тут: http://habrahabr.ru/post/119030/
не совсем понятна строка
Цитата
"AT+CDNSCFG="8.8.8.8","8.8.4.4"" Этой командой устанавливаются сервера DNS, которые будет использовать модуль

в мануале пишут, что это первый и второй домен. Т.е. айпишник первого модуля и второго?
XVR
Цитата(ДЕЙЛ @ Nov 26 2014, 11:03) *
в мануале пишут, что это первый и второй домен. Т.е. айпишник первого модуля и второго?
Беда .... wacko.gif

Через GPRS (EDGE/UMTC/LTE) вы просто подключаете свой модуль к Интернету (как клиента). Я не в курсе, получите вы видимый из сети IP или нет (скорее всего нет - узнавайте у провайдера), но для связи двух GSM модулей надо что бы один из них увидел IP второго (или они оба какой то внешний сервер).

Прямая связь 2х GSM модулей невозможна (IMHO)
Владивольт
Цитата(ДЕЙЛ @ Nov 26 2014, 12:03) *
Т.е. айпишник первого модуля и второго?

Нет, это айпишники специальных серверов, которые преобразуют буквенные адреса в "айпишники" по запросу вашего модуля.
Второй адрес -- дублер на случай выхода из строя первого.
Что такое ДНС? Объясните,
DNS-сервер — как это работает
dns сервер что это

Успехов!
SpyBot
Цитата(ДЕЙЛ @ Nov 26 2014, 12:03) *
Читаю вот тут: http://habrahabr.ru/post/119030/
не совсем понятна строка

в мануале пишут, что это первый и второй домен. Т.е. айпишник первого модуля и второго?

Это скорее всего не понадобится.
Обычно можно сразу давать команду AT+CIPSTART, которая и установит соединение.
ДЕЙЛ
Цитата(Владивольт @ Nov 26 2014, 14:39) *
Нет, это айпишники специальных серверов, которые преобразуют буквенные адреса в "айпишники" по запросу вашего модуля.
Второй адрес -- дублер на случай выхода из строя первого.
Что такое ДНС? Объясните,
DNS-сервер — как это работает
dns сервер что это

Успехов!

дошло вчера rolleyes.gif

Вечером получалось соединиться с интернетом. Писал что-то вроде
AT+CIPSTART="TCP","ya.ru",80
затем указал число передаваемых байт и от балды набранные с клавиатуры символы.
В ответ пришёл текст в HTML-тегах, где было написано, что запрос некорректный. Т.е. получается, что связь с интернетом настроена, данные от меня доходят до удалённого сервера. Теперь крутится вопрос - а нельзя ли вместо "ya.ru" указать айпишник второго GSM-модуля и точно так же отправить данные? Проверить пока руки не дошли.
x893
А почему нельзя прочитать руководство к модулю с примерами установки соединения и приема.отправки ? Гораздо быстрее и понятнее будет.
rx3apf
Цитата(ДЕЙЛ @ Nov 27 2014, 12:13) *
Теперь крутится вопрос - а нельзя ли вместо "ya.ru" указать айпишник второго GSM-модуля и точно так же отправить данные?

А теперь самое время погуглить и узнать про "серые" и "белые" ip-адреса. И про NAT.
ДЕЙЛ
Цитата(x893 @ Nov 27 2014, 13:59) *
А почему нельзя прочитать руководство к модулю с примерами установки соединения и приема.отправки ? Гораздо быстрее и понятнее будет.

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

Цитата(rx3apf @ Nov 27 2014, 14:30) *
А теперь самое время погуглить и узнать про "серые" и "белые" ip-адреса. И про NAT.

погуглил. Но ведь я отправляю в интернет байты, в ответ ругательства, но тоже с какого-то сервера приходят. Значит этот сервер может мои байты переслать другому такому же модулю. Т.е. для передачи данных между GSM-модулями с серыми адресами обязательно нужен промежуточный сервер?


А если у меня серый адрес, то в пределах одной соты можно общаться?
rx3apf
Цитата(ДЕЙЛ @ Nov 27 2014, 15:19) *
Т.е. для передачи данных между GSM-модулями с серыми адресами обязательно нужен промежуточный сервер?

Да.

Цитата
А если у меня серый адрес, то в пределах одной соты можно общаться?

Вопрос интересный... Но хотя бы надо знать номер порта, а они тоже все время меняются.
psL
Запустить traceroute до хоста в инете для обоих соединений и убедиться, что модемы в разных подсетях.
ДЕЙЛ
Цитата(SpyBot)
Обычно можно сразу давать команду AT+CIPSTART, которая и установит соединение.

Допустим, что соединение установилось с каким-то сервером. Дальше я хочу записать данные в конкретный файл на удалённом сервере. Какими командами нужно пользоваться? Где их найти?


Как будет выглядеть AT-команда для запроса страницы yandex.ru? Т.е. в ответ на эту команду должен прийти текст вроде этого:

Цитата
<!DOCTYPE html>
<html class="i-ua_js_yes i-ua_css_standart i-ua_browser_firefox i-ua_pseudo_yes js m-border-radius i-ua_inlinesvg_yes m-svg i-ua_animation_yes" lang="ru"><head xmlns:og="http://ogp.me/ns#"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Яндекс</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-76x76.png" sizes="76x76"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-120x120.png" sizes="120x120"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-152x152.png" sizes="152x152"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-180x180.png" sizes="180x180"><link rel="alternate" type="application/rss+xml" title="Новости Яндекса" href="http://company.yandex.ru/news/news.rss"><link rel="alternate" type="application/rss+xml" title="Блог Яндекса" href="http://company.yandex.ru/blog/index.rss"><link rel="search" href="http://yandex.ru/opensearch.xml" title="Яндекс" type="application/opensearchdescription+xml"><link rel="shortcut icon" href="http://yastatic.net/morda-logo/i/favicon_islands.ico"><meta property="og:title" content="Яндекс"><meta property="og:type" content="website"><meta property="og:image" content="//yastatic.net/morda-logo/i/share-logo-ru.png"><meta
.....................
.....................

></div><i class="b-counter" style="background: url(//www.tns-counter.ru/V13a**5cd4d635da5c3fdb9cf9f5a4e2b6e7da**yandex_ru/ru/CP1251/tmsec=yandex_main/0);"></i><div style="display:none" class="page-info">{"static":"2.264","skins":"1.79"}</div><!--s54.wfront.yandex.net--><div style="height:0;overflow:hidden;"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="fco" height="1" width="1"><param name="movie" value="//yastatic.net/browser-cookie/flash-cookie.swf"><param name="allowScriptAccess" value="Always"><embed src="%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_files/flash-cookie.swf" allowscriptaccess="Always" id="fce" height="1" width="1"></object></div><object style="position:absolute;left:-500px;top:0;visibility:hidden" data="%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_files/_search.js"></object><object style="position:absolute;left:-500px;top:0;visibility:hidden" data="%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_files/jquery.js"></object></body></html>
XVR
Цитата(ДЕЙЛ @ Mar 12 2015, 13:51) *
Допустим, что соединение установилось с каким-то сервером. Дальше я хочу записать данные в конкретный файл на удалённом сервере.
Что у вас крутится на этом 'удаленном сервере'? Для ftp это будут одни команды, для WEB сервера (http) - другие
Цитата
Какими командами нужно пользоваться? Где их найти?
В описаниях соответствующих протоколов, вестимо:
ftp - RFC959
http - RFC7231

Цитата
Как будет выглядеть AT-команда для запроса страницы yandex.ru?


Как то так:
Код
AT+CIPSTART="TCP","ya.ru",80
GET /index.html HTTP/1.1
(Не забудьте про пустую строку в конце! Ее форум съел, а без нее работать не будет sm.gif )
ДЕЙЛ
Цитата(XVR @ Mar 12 2015, 15:54) *
Как то так:
Код
AT+CIPSTART="TCP","ya.ru",80
GET /index.html HTTP/1.1
(Не забудьте про пустую строку в конце! Ее форум съел, а без нее работать не будет sm.gif )

Что за пустая строка в конце? Можно скрин, если форум съедает?

http://badembed.ru/sim900-tcp-soedinenie-s-serverom/
Цитата
-> AT+CIPSEND — запрос на посылку сообщения серверу

<- > — в ответе символ готовности, после его получения можно вводить данные, которые надо передать

-> data — данные которые необходимо передать. После ввода данных необходимо указать модему, что сообщение окончено и его надо передавать серверу — для этого передают следующую команду

-> 26 — команда конца сообщения (0x1A) после нее модем передает серверу данные data

-< SEND OK

-> AT+CIPCLOSE — закрытие соединения с сервером или можно вызвать AT+CIPSHUT

Правильно я понимаю, что команды серверу нужно формировать и отправлять в виде данных data?
Или для этого нужны какие-то AT-команды?
rx3apf
Цитата(ДЕЙЛ @ Mar 12 2015, 16:32) *
Что за пустая строка в конце? Можно скрин, если форум съедает?

Имелось в виду, что "HTTP/1.1" надо завершить окончанием строки (CR,LF) и сделать это дважды (т.е. послать CR,LF,CR,LF - не помню, правда, есть ли необходимость в LF, но я лично для удобства отладки вседа делаю так, чтобы на терминале видно было сразу).
Цитата
Правильно я понимаю, что команды серверу нужно формировать и отправлять в виде данных data?
Или для этого нужны какие-то AT-команды?

Либо после промптера на +CIPSEND (т.е. data), либо перевести модем в "прозрачный" режим, и затем передавать и получать без использования AT-команд.
XVR
Цитата(rx3apf @ Mar 12 2015, 19:18) *
Имелось в виду, что "HTTP/1.1" надо завершить окончанием строки (CR,LF) и сделать это дважды (т.е. послать CR,LF,CR,LF - не помню, правда, есть ли необходимость в LF, но я лично для удобства отладки вседа делаю так, чтобы на терминале видно было сразу).
Угу, и LF тоже надо посылать - в HTTP спецификации это явно требуется.

ДЕЙЛ
Можете показать полный лог команд открытия страницы яндекса, начиная с рестарта модуля при включении?
ДЕЙЛ
делаю по шагам, как написано вот тут http://badembed.ru/sim900-tcp-soedinenie-s-serverom/

Дохожу вот до этой строки
Цитата
-> AT+CIPSEND — запрос на посылку сообщения серверу

<- > — в ответе символ готовности, после его получения можно вводить данные, которые надо передать


Символ готовности никак не хочет появляться даже посли 20минутного ожидания.
XVR
Точно не появляется? Это просто символ '>' безо всяких переводов строк после него.
ДЕЙЛ
Цитата(XVR @ Mar 16 2015, 16:05) *
Точно не появляется? Это просто символ '>' безо всяких переводов строк после него.

Не появляется этот символ. Попробую сегодня вечером или в ближайшее время скопировать сюда файл лога.
ДЕЙЛ
CODE
//перезапуск
AT+CFUN=1,1
yyyy

//проверка регистрации в сети
Send: AT+CREG?<cr><lf>
AT+CREG?

+CREG: 1,1

OK

//проверка GPRS
Send: AT+CGATT?<cr><lf>
AT+CGATT?

+CGATT: 1

OK

//закрытие всех соединений
Send: AT+CIPSHUT<cr><lf>
AT+CIPSHUT

SHUT OK

//проверка инициализации модуля IP
Send: AT+CIPSTATUS<cr><lf>
AT+CIPSTATUS

OK

STATE: IP INITIAL

//устанавливаем только одно соединение
Send: AT+CIPMUX=0<cr><lf>
AT+CIPMUX=0

OK

//настройки GPRS
Send: AT+CSTT="internet.mts.ru","mts","mts"<cr><lf>
AT+CSTT="internet.mts.ru","mts","mts"

OK

//соединяемся с заданными настройками
Send: AT+CIICR<cr><lf>
AT+CIICR

OK

//смотрим свой IP
Send: AT+CIFSR<cr><lf>
AT+CIFSR

10.49.180.250

//включаем TCP-соединение
Send: AT+CIPSTART="TCP","yandex.ru",80<cr><lf>
AT+CIPSTART="TCP","yandex.ru",80

OK

CONNECT OK

//после этой команды должно появиться приглашение для записи отправляемых данных
Send: AT+CIPSEND<cr><lf>
AT+CIPSEND


и в этом месте всё виснет, никаких признаков жизни
XVR
А как вы получаете лог? Может оно буферизует символы (до символа конца строки)?
megajohn
Цитата(ДЕЙЛ @ Mar 16 2015, 22:32) *
и в этом месте всё виснет, никаких признаков жизни



а ножка RTS в каком состоянии ? Включено ли управление Flow Control ?
ДЕЙЛ
Цитата(megajohn @ Mar 17 2015, 14:14) *
а ножка RTS в каком состоянии ? Включено ли управление Flow Control ?

Я использую только TX-RX, остальные ножки не трогаю. Это принципиально для работы с TCP/IP?

Цитата(XVR @ Mar 17 2015, 14:07) *
А как вы получаете лог? Может оно буферизует символы (до символа конца строки)?

скопировал как текст из окна программы
XVR
Цитата(ДЕЙЛ @ Mar 17 2015, 15:18) *
скопировал как текст из окна программы
Тогда показывайте текст программы (ту часть, что читает данные с модуля)

ДЕЙЛ
Цитата(XVR @ Mar 18 2015, 17:01) *
Тогда показывайте текст программы (ту часть, что читает данные с модуля)

Вкратце вот так:
Код
procedure TForm1.RxTimerTimer(Sender: TObject);
var
     Errors : Dword;
LenReceive : DWord;
          i : integer;
RxData, Log, NumStr : string;

begin
RxData := '';
ClearCommError(hCom, Errors ,@Stat);//?????????? ????
LenReceive := Stat.cbInQue;
If LenReceive>0 Then
   Begin  {1}
     ReadFile(hCom,RXBUF,LenReceive,LenReceive,nil);
     For i:=0 to LenReceive-1 Do
       Begin
         if (RXBUF[i]<>$A) and (RXBUF[i]<>$D) then
           begin
            RxData := RxData + Chr(RXBUF[i]);
           end
         else
           begin
               ListBox1.Items.Strings[ListBox1.ItemIndex] :='       '+RxData;
               RxData := '';
               ListBox1.TopIndex := ListBox1.Items.Count - 1;
           end;

       End;
   End; {1}

end;

Данные он отправляет без приглашения, смски тоже. В прикреплённом файле только что дописанная программа для работы с SIM900. В инете не нашёл, поэтому сам сочинил. До этого ковырялся в программе от другова модуля.
XVR
Ну вот же -
Код
         if (RXBUF[i]<>$A) and (RXBUF[i]<>$D) then
По тексту программы видно, что пока она не примет символ конца строки или перевода каретки (CR или LF) она ничего никуда не выводит, а тихо и молча накапливает принятые символы в RxData

А модуль после приглашения '>' никаких CR/LF не добавляет (в отличие от остальных команд)
ДЕЙЛ
Цитата(XVR @ Mar 25 2015, 18:45) *
Ну вот же -
Код
         if (RXBUF[i]<>$A) and (RXBUF[i]<>$D) then
По тексту программы видно, что пока она не примет символ конца строки или перевода каретки (CR или LF) она ничего никуда не выводит, а тихо и молча накапливает принятые символы в RxData

А модуль после приглашения '>' никаких CR/LF не добавляет (в отличие от остальных команд)

Есть такое дело, неподумавши накодил rolleyes.gif
Подправил свою программу ещё в некоторых местах и добавил функцию сниффера(для него ещё нужно железо).
ДЕЙЛ
http://alex-exe.ru/programm/terminal-sim900-dialog/ здесь последняя версия терминала и статья на эту тему
k155la3
Альтернативный и более оптимальный вариант увязки двух точек по GSM - GPRS.
Но тут без договора с провайдером не обойтись (если достаточно передача даных в рамках одной сети-провайдера).
Получаем 2 стат. IP в интрасети провайдера. И нет необходимости работать с DNS, лезть во внешнюю сеть.
Не надо проходить стадию "установить соединение".
IP-пакет влетел в терминал на одной стороне, и вылетел на другой.
Для такой связи оптимально и по простоте и по быстродействию использовать не TCP а UDP - можешь сам реализовать протокол обмена.
Платежные терминалы кажется так работают. ( креснтое знамение 3 перстами - блокировка "кажется" )

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.