Поиск сообщества
Показаны результаты для тегов 'GPRS'.
Найдено: 3 результата
-
Здравствуйте. Подскажите, был ли у кого-то опыт отправки изображений с камеры (подключенной через UART или bluetooth-камеры) через GPRS (у меня модуль SIM800L, но в целом это не принципиально) на удаленный сервер? Средствами управляющего микроконтроллера, пусть даже ардуины какой-нибудь, но не малины. Возможно ли это вообще? Хотелось бы, конечно, использовать в проекте беспроводную камеру и общаться с ней, ибо камеры, подключаемые напрямую так себе качество дают. Сразу скажу, что важна именно такая связь. Микроконтроллер + модуль связи + камера находятся в коробке и путешествуют по городу, в это время человек сидя дома на диване может смотреть фото с этой камеры. Смартфон для моих целей не подойдет, суть именно в микроконтроллере с модулями. Если у кого-то такое получалось - поделитесь, пожалуйста :) А то нахожусь в некоторой прострации и даже не знаю, в какую сторону думать.
- 2 ответа
-
- микроконтроллер
- камера
-
(и ещё 3 )
C тегом:
-
Доброго времени суток! вот ковыряю я ардуиновский модуль 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
-
День добрый! Имеется sim-карта со статическим IP и модем SIM800C, который через UART соединен с STM32F0. Прочитав статью на хабре, которая и являлась отправной точкой, было решено повторить подвиг, но в версии lwip 2.0.3, которой я пользуюсь, ppp изменился до неузнаваемости, что сначала внесло некоторый сумбур. Но в документации к lwip был найден текстовый файл с настройкой ppp-соединения (ppp.txt, прикреплю его ниже), в котором было все, что нужно для счастья, но когда модем начал общаться с контроллером, дальше фазы LCP дело не зашло. Как я понял из документа (ppp_connect.docx), который оказался у меня уже-и-не-помню-откуда, после конфигурирования параметров соединения в фазе LCP контроллер должен посылать в модем пакет с заголовком PAP (C0 23), но он почему-то этого не делает... Он вообще больше ничего не делает. Я пытался проследить в отладчике весь путь запроса, что приходит от модема, но это только больше меня запутало. Собственно, прием данных у меня организован через прерывание. После ввода AT-команды "ATD*99***1#" и получения ответа "CONNECT", устанавливается флаг "ppp_enable" и при приходе байта он кладется в очередь `xQueue_PPP_Package`. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t u8; if(huart == &huart1) { if (ppp_enable == true) { portBASE_TYPE xHigherPriorityTaskWoken_PPP_Rx; u8 = Sim800.UsartRxTemp; xHigherPriorityTaskWoken_PPP_Rx = pdFALSE; xQueueSendFromISR(xQueue_PPP_Package, &u8, &xHigherPriorityTaskWoken_PPP_Rx); } else { /*Reception of AT commands*/ } HAL_UART_Receive_IT(&huart1,&Sim800.UsartRxTemp,1); } } В задаче `StartLwIPTask` в бесконечном цикле проверяется эта очередь и при появлении элементов, записывает их в массив `PPPx.Data` и при фиксации второго HDLC-заголовка (0x7E), отправляет данные в lwip функцией `pppos_input`. P.S. Переменная `PPPx.Last_Index` это размер пришедшего ppp-пакета. void StartLwIPTask(void const * argument) { /* USER CODE BEGIN StartLwIPTask */ /*Создаем очередь*/ xQueue_Sim800_Package = xQueueCreate(128, sizeof(uint8_t)); xQueue_PPP_Package = xQueueCreate(128, sizeof(uint8_t)); uint8_t u8=0; volatile int setup = 0; tcpip_init( NULL, NULL ); /*Инициализация стека tcp/ip*/ /*Create a new PPPoS interface*/ ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0); // /* Auth configuration, this is pretty self-explanatory */ ppp_set_auth(ppp, PPPAUTHTYPE_PAP, "beeline", "beeline"); /* Require peer to authenticate */ ppp_set_auth_required(ppp, 1); /*Only for PPPoS, the PPP session should be up and waiting for input.*/ ppp_set_silent(ppp, 1); /* * Initiate PPP listener (i.e. wait for an incoming connection), can only * be called if PPP session is in the dead state (i.e. disconnected). */ ppp_listen(ppp); /* Infinite loop */ for(;;) { if (sim800_init() == S_RESET) /*Настройка модуля Sim800*/ continue; for (;;) { if (pdPASS == xQueueReceive(xQueue_PPP_Package, &u8, 100/portTICK_RATE_MS)) { if (u8 == 0x7E) t++; PPPx.Data[PPPx.Last_Index++] = u8; if (t==2) { PPPx.Last_Index--; pppos_input(ppp, PPPx.Data, PPPx.Last_Index); t=0; memset(&PPPx, 0, sizeof(PPPx)); } } } } /* USER CODE END StartLwIPTask */ } Как я писал выше, все идет хорошо, пока идет фаза LCP, но после подтверждения контроллера запроса опций, наступает тишина. В интернете мне удалось найти довольно мало исчерпывающей информации и примеров по связке stm32+lwip+ppp, если кто-нибудь занимался подобным или сталкивался с похожей проблемой, буду очень признателен за помощь и за пинки в нужном направлении. Заранее спасибо. ppp.txt ppp_connect.docx