• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
b00blik

Настройка соединения GPRS в SIM800L

2 сообщения в этой теме

b00blik    0

Доброго времени суток!
вот  ковыряю я ардуиновский модуль CSM/GPRS  SIM800L. 
Пытаюсь собрать устройство которое имеет  модуль CSM/GPRS  SIM800L,  порт RS485 (для опроса датчиков) и USB (для настройка девайса) + Мега 328
Хочу организовать опрос датчиков удаленно:

на ПК стоит CSM/GPRS модем
устанавливаю соединение с GPRS  на ПК ( оператор МТС,  APN - internet, звоню на номер *99#)
Запускаю программулину TIBBO , создаю виртуальный ком порт, указываю IPадрес:порт  моего девайса  и работаю со своим удаленным устройством по GPRS   как с простым ком портом.

вот теперь задача: надо ввести мой девайс в прозрачный режим передачи данных по GPRS,  тоесть пересылать данные с SIM800L(0й -USART Меги 328)  в  1й USART  Меги 328 ( в данном случае порт RS48) и потом с порта опять в SIM800L, если подключен  2й USARт  (USB )  пересылать данные с SIM800L в 2й USARт и обратно.

девайс, я так понял что, должен работать в режиме сервера (SIM карта с выделенным IP есть)

с меги посылаю модулю

>AT 
<OK 
AT+CPIN=0000 
<OK 
AT+COPS? 
<+COPS:1 
AT+CREG? 
< +CREG: 0, 1 AT+CGATT? 
<+CGATT: 1  состояние регистрации в GPRS сети


А вот дальше я завис...
--------------1 вариант--------------

даю 

 

AT+CGDCONT=1,"IP","inetnet" 
<OK 
AT+CGACT=1,1 
<OK 
AT+CGDATA=1 
<CONNECT

и мне с SIM800L в USART  меги начанает сыпать мусор пакет длинной ~ 20 символов 1 раз в секунду, помогает только RESET

------------2й вариант------------
даю 

 

AT+CGDCONT=1,"IP","inetnet" 
<OK 
AT+CGACT=1,1 
<OK 
ATD*99***1#;

и мне с SIM800L в USART  меги начанает сыпать мусор пакет длинной ~ 20 символов 1 раз в секунду, помогает только RESET

----------3й вариант----------------
даю

 

>AT+CIPSHUT -сброс всех tcp/ip соединений 
< SHUT OK 
AT+CIPSTATUS 
< STATE: IP INITIAL 
AT+CIPMUX=0 настраиваем соединение только с одним каналом 
<OK 
AT+CSTT= "internet", "", "" 
<OK 
AT+CIICR - пытаемся установить GPRS соединение жду 
<OK 
AT+CIFSR 
< 100.85.76.xxx 
AT+CIPSERVER=1, 2001 - запускаем сервер с TCP портом 2001

тут я с ПК даже пингую свой ip,  соединяюсь, даже принимаю данные. но в таком режиме не все байты пропускает, есть коммандные байты, которые "сьедаются", например байт 0х1А модуль принимает как конец посылки

как только ПК соединяется то я получаю
<+REMOTE IP: 100.78.14.ххх
затем получаю пакет, а вот как отправить я не знаю

----------4й вариант ----------------------

AT+SAPBR=3,1,"CONTYPE","GPRS" 
OK 
AT+SAPBR=3,1,"APN","internet" 
OK 
AT+SAPBR=1,1 
OK

 модуль  SIM800 уходит в GPRS подключение, "лампочка" быстро мигает,  но я его не могу пропинговать, я не вижу его в сети и как передать данные?

 

и 5й вариант нашел

1: Прикрепите к сервису GPRS «AT + CGATT = 1»
2: Подождите, присоедините OK и установите контекст 0 как FGCNT "AT + QIFGCNT = 0"
 3: Ожидание контекста ОК и Установка типа носителя как GPRS, APN, имя пользователя и пароль «AT + QICSGP = 1 ...»
 4: Подождите OK и активируйте функцию MUXIP «AT + QIMUX = 1»
 5: Подождите, пока отключите MUXIP OK и установите режим сеанса как непрозрачный «AT + QIMODE = 0»
 6: Дождитесь режима сеанса OK и Включить уведомление, когда полученные данные «AT + QINDI = 1»
 8: Подождите доменное имя ОК и зарегистрируйте стек TCP / IP «AT + QIREGAPP»
 9: Подождите, чтобы зарегистрировать OK и активировать FGCNT "AT + QIACT"
 10: Подождите, чтобы активировать OK


 

кто работал с GPRS ?  колитесь! какие тут мантры надо читать?  чем этот модуль надо обкуривать? и какой тряпочкой протирать? как правильно создать GPRS соединение чтобы  "удлинить" ком порт по GPRS  и передавать по нему данные/ как это делают модемы типа iRZ ATM2 или MС52iT

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
b00blik    0

нашел, вот если кому пригодится:

Инициализация

AT+CPIN? // Проверка готовности SIM-карты;
+CPIN: READY
OK
AT+CSQ // Уровень сигнала RSSI=18 ед., удовлетворительный уровень;
+CSQ: 18,0
OK
AT+CREG? // Проверка наличия регистрации сети GSM;
+CREG: 0,1
OK
AT+CGATT? // Проверка доступа к услугам пакетнойпередачи данных;
+CGATT: 1
OK
AT+CIPMODE=0 // Командный режим передачи данных;
OK
AT+CIPMUX=0 // Моносокет;
OK


Настройка контекста
и открытие соединения

AT+CIPSTATUS
OK
STATE: IP INITIAL
AT+CSTTinternet» // Настройка точки доступа;
OK
AT+CIPSTATUS
OK
STATE: IP START
AT+CIICR // Активация контекста;
OK
AT+CIPSTATUS
OK
STATE: IP GPRSACT
AT+CIFSR
100.86.15.224
AT+CIPSTATUS
OK
STATE: IP STATUS
AT+CIPSTARTTCP»,»81.95.20.18»,8888 // Открытиесоединения с удаленным сервером;
OK
CONNECT OK // Сообщение об успешном открытиисоединения;
AT+CIPSTATUS
OK
STATE: CONNECT OK


 


Передача данных с подтверждением в командном режиме

AT+CIPSEND? // Проверяем максимальный размерданных, которые можно послать в сторону удаленнойстороны. Этот размер зависит от сети;
+CIPSEND: 1460
OK
AT+CIPQSEND? // Нормальный режим передачи данных.При этом режиме каждая порция высланных данных подтверждается сообщением “SEND OK”, что означает, чтосервер данные принял и подтвердил их получение;
+CIPQSEND: 0
OK
AT+CIPSEND=100 // Передача 100 байт данных;
> // Приглашение; hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello // Размер данных не должен быть больше1460 байт;
SEND OK // Данные успешно переданы;
AT+CIPSEND // Передача данных произвольного размера;
> hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello // Размер данныхне должен быть больше 1460 байт и в конце блока данныхследует байт 0x1A;
SEND OK


Быстрая передача данных в командном режиме

AT+CIPQSEND=1 // Режим быстрой передачи данных.
Этот режим подразумевает передачу данных без ожидания
от сервера подтверждения о получении;
OK
AT+CIPSEND=100 // Передача 100 байт данных;
> hellohellohellohellohellohellohellohellohellohellohellohellohe
llohellohellohellohellohellohellohello
DATA ACCEPT:100 // Модуль принял данные в свой
буфер и вышлет их в сторону сервера в фоновом
режиме;
AT+CIPACK // Проверка: 300 байт передано на сервер
из них 300 байт сервером приняты и подтверждены;
+CIPACK: 300,300,0
OK
AT+CIPSEND // Передача данных произвольного раз-
мера происходит аналогичным образом;
> hellohellohellohellohellohellohellohellohellohellohellohellohe
llohellohellohellohellohellohellohello
DATA ACCEPT:100
AT+CIPACK
+CIPACK: 400,400,0
OK
AT+CIPQSEND=0 // Нормальный режим передачи
данных;
OK

Прием данных в командном режиме, автоматический вывод принятых данных

AT // Модуль находится в командном режиме;
OK
AT
OK
HelloHelloHelloHelloHelloHelloHelloHelloHelloHello //
Данные, принятые от сервера выводятся из порта UART
модуля SIM5300EA автоматически. Данные выводятся
«как есть» и это неудобно, поэтому будут полезны
следующие настройки;
AT
OK
AT+CIPHEAD=1 // Перед блоком данных, принятых
от сервера добавлять заголовок формата +IPD,<длина
блока данных>;
OK
AT+CIPSRIP=1 // При приеме данных показы-
вать уведомление в виде RECV FROM:<IP адрес
отправителя>,<порт>;
OK
AT+CIPSHOWTP=1 // Показывать тип протокола
в уведомлении +IPD,<длина блока данных>,<тип протокола>;
OK
RECV FROM:81.95.20.18:8888 // Блок принятых данных,
обрамленных уведомлением и заголовком с указанием
типа протокола TCP и длиной 50 байт;
+IPD,50,TCP:HelloHelloHelloHelloHelloHelloHelloHelloHell
oHello


Прием данных в командном режиме, ручной вывод принятых данных
Для смены способа вывода данных требуется разорвать соединение и деактивировать контекст.

AT+CIPCLOSE // Закрытие соединения;
CLOSE OK
AT+CIPSTATUS
OK
STATE: TCP CLOSED
AT+CIPSHUT // Деактивация контекста;
SHUT OK
AT+CIPRXGET?
+CIPRXGET: 0 // Автоматический вывод принятых
данных;
OK
AT+CIPRXGET=1 // Настройка ручного вывода данных;
OK
AT+CSTT
OK
AT+CIICR
OK
AT+CIFSR
100.116.1.79
AT+CIPSTARTTCP»,»81.95.20.18»,8888
OK
CONNECT OK
AT
OK
AT
OK
+CIPRXGET: 181.95.20.18:8888» // Уведомление о
приеме данных от сервера;
AT
OK
AT+CIPRXGET=4 // Уточнение размера принятых
данных;
+CIPRXGET: 4,100 // Пришло 100 байт данных;
OK
AT+CIPRXGET=2,20 // Вывести 20 байт в порт UART;
+CIPRXGET: 2,20,8081.95.20.18:8888» // В буфере
модуля осталось 80 байт;
HelloHelloHelloHello // Запрошенные 20 байт данных;
OK
AT+CIPRXGET=2,20 // Вывести 20 байт в порт UART;
+CIPRXGET: 2,20,6081.95.20.18:8888» // В буфере
модуля осталось 60 байт;
HelloHelloHelloHello // Запрошенные 20 байт
данных;
OK
AT+CIPRXGET=2,60 // Вывести 60 байт в порт UART
+CIPRXGET: 2,60,081.95.20.18:8888» // Приемный
буфер модуля пуст;
HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello
// Запрошенные 60 байт данных;
OK
AT+CIPRXGET=4 // Проверка наличия данных в буфере
модуля;
+CIPRXGET: 4,0 // Буфер пуст
OK


Обмен данными с сервером в прозрачном режиме
Для смены режима передачи данных требуется разорвать соединение и деактивировать контекст.

AT+CIPCLOSE
CLOSE OK
AT+CIPSHUT
SHUT OK
AT+IFC=2,2 // Аппаратный контроль потока должен
быть включен, чтобы избежать потери данных;
OK
AT+CIPMODE=1 // Прозрачный режим передачи данных
OK
AT+CIICR
OK
AT+CIFSR
100.71.67.196
AT+CIPSTARTTCP»,»81.95.20.18»,8888
OK
CONNECT // Соединение установлено;
HelloHelloHelloHelloHelloHelloHelloHelloHelloHello //
/Передача данных на сервер как есть;
HelloHelloHelloHelloHelloHelloHelloHelloHelloHello //
Прием данных от сервера как есть;
AT // АТ команды будут неотвеченными и будут
восприняты как данные для отсылки;
AT
+++ // Эта escape-последовательность переведет
модуль в режим АТ команд, но при этом контекст
и соединение сохраняются активными;
OK // В этом месте можно обработать входящие СМС,
отменить входящий голосовой вызов и проч.;
AT
OK
AT
OK
AT
OK
ATO // Команда ATO возвращает модуль в режим пере-
дачи данных;
CONNECT
HelloHelloHelloHelloHelloHelloHelloHelloHelloHello
HelloHelloHelloHelloHelloHelloHelloHelloHelloHello
CLOSED // Это сообщение говорит о том, что удален-
ная сторона закрыла сокет. Теперь встроенный стек
TCP/IP нужно перевести в исходное состояние;
AT+CIPSTATUS
OK
STATE: TCP CLOSED
AT+CIPSHUT
SHUT OK
AT+CIPSTATUS
OK
STATE: IP INITIAL // Стек в исходном состоянии.

 

Изменено пользователем b00blik

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: gafbich
      Доброй ночи, ситуация значит такая имеется модуль SIM800L, подключил электретный микрофон ECM-60D согласно даташиту на модуль. При вызове один шум, если громко в микрофон сказать, на другой стороне еле слышно. В даташите нашел команду AT+CMIC - настройка чувствительности микрофона - модуля под рукой нет, проверить не могу. Юзать команду?
    • Автор: Alexandr597
      Хочу сделать устройство которое при срабатывании датчика движения на мобильный телефон будет поступать входящий звонок. Планирую использовать датчик движения - HC-SR501, GSM модуль - Sim800l, контроллер - atmega8. На atmega8 хочу записать загрузчик с помощью arduino uno, может так же и скетч. Есть примеры скетчей по отдельности для датчика и модуля. Незнаю как писать скетчи, как-то связать эти два скетча, кто может помочь?

      Примеры:
      Подключение датчика
      Для модуля:



      a8_8MHz_a4_dc.hex.zip
    • Автор: binary_man
      Доброго времени, Уважаемые
      Столкнулся с проблемой выхода в интернет для вышеупомянутой сборки. Плата - Arduino Mega(китайская),
      шилд, тоже копия.. С платы можно звонить и слать смс.. т.е это работает

      void DialVoiceCall() { Serial1.println("ATD + +79161234567;");//dial the number delay(100); Serial1.println(); }

      void SendTextMessage() { // Устанавливает текстовый режим для SMS-сообщений Serial1.print("AT+CMGF=1\r"); delay(100); // даём время на усваивание команды // Устанавливаем адресата: телефонный номер в международном формате Serial1.println("AT + CMGS = \"+79161234567\""); delay(100); // Пишем текст сообщения Serial1.println("789"); delay(100); // Отправляем Ctrl+Z, обозначая, что сообщение готово Serial1.println((char)26); }
      а вот с со следующим кодом результата нет.. "AT+SAPBR=1,1" - ответ ERROR.. плюс ко всему через терминал идет очень много
      мусора..

      void setup() { Serial.begin(19200); // USB port Serial1.begin(19200); // serial port delay(2500); void setint() { Serial1.println("AT+CSQ"); delay(100); ShowSerialData(); Serial1.println("AT+CGATT=1"); delay(100); ShowSerialData(); Serial1.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); delay(4000); ShowSerialData(); Serial1.println("AT+SAPBR=3,1,\"APN\",\"internet.mts.ru\""); delay(2000); ShowSerialData(); Serial1.println("AT+SAPBR=3,1,\"USER\",\"mts\""); delay(2000); ShowSerialData(); Serial1.println("AT+SAPBR=3,1,\"PWD\",\"mts\""); delay(2000); ShowSerialData(); Serial1.println("AT+SAPBR=1,1"); delay(2000); ShowSerialData(); Serial1.println("AT+HTTPINIT"); delay(2000); ShowSerialData(); Serial1.println("AT+HTTPPARA=\"CID\",1"); delay(2000); ShowSerialData(); Serial1.println("AT+HTTPPARA=\"URL\",\"http://pustota.su/d7t.php? c=ZAZ_276&lt=55.4&lg=31.7&v1=401&v2=402&v3=403&v4=404&v5=405&v6=406&v7=407&v8=408&v9=409&v10=410&v11=411&v12=412\" "); delay(2000); ShowSerialData(); Serial1.println("AT+HTTPACTION=0"); delay(1000); ShowSerialData(); Serial1.println("AT+HTTPTERM"); delay(1000); ShowSerialData(); } void ShowSerialData() { if (Serial1.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield { while(Serial1.available()) // reading data into char array { buffer[count++]=Serial1.read(); // writing data into array if(count == 64)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array count = 0; // set counter of while loop to zero } } void loop() { ShowSerialData(); if (Serial.available()) { while(Serial.available()) // reading data into char array { buffer[count++]=Serial.read(); // writing data into array if(count == 64)break; } clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array count = 0; okornot(); setint(); } }
      терминал

      AT OK UHшAT+CSQ +CSQ: 20,0 OK TQQх1 AT+CGATT=1 ю OK APBR=3,1,"CONTYPE","GPRS" AT+SAPBR=ымЧьPе‰,"internet.mts.ru" AT+SAPBR=3,1,"APN","iояPBR=3,1,"USER","mts" AT+SAPBR=3,1,"USER","mts" ERROR APBR=3,1,"PWD","mts" AT+SAPBR=3,1,"PWDв,‘[Ч‰ ERROR (%Iх1,1 )*ЉХAT+SAPBR=1<эяAT+HTTPINIT ERROR KD",1 AT+HTTPPARA="CID",1 ERROR Iх"URL","http://pustota.su/d7t.php?c=ZAZ_276&lt=55.4&lg=31O=0 AT+HTTPPARA="URL","http://puыOMMнAT+HtяCЎ”%хI5TTPTERM AT+HTTPTERM ERROR
      Питание внешнее.. Выход в интернет нужен для передачи данных на сервер, пока в максимально простом виде.. но и это не идет.
      Ваши предложения..
    • Гость Buin
      Автор: Гость Buin
      Здравствуйте, меня заинтересовал этот товар, но у возникли несколько вопросов:
      1) Он может передавать информацию на отдаленный сервер?
      2) Где он "ловит"? То есть, в крупных городах передача данных что в центре, что на окраине одинакова?
      3) Любой ли оператор связи подойдет для него?
    • Автор: mentatpsv
      Продам новые модули SIM900R, 80 штук в упаковке. По 500 руб. Можно частями. При покупке всей партии - торг. Отправка в регионы по предоплате. Есть возможность оплатить нал/безнал. По всем вопросам писать на адрес isuway@gmail.com или в личку.