Эта тема про мини TCP сервер на 5 клиентов (1 база+4 ровера), который превосходно подходит для передачи RTK поправок. Сервер реализован на плате NodeMCU, она же ESP8266, имеет wifi на борту и неплохие характеристики. Изначально плата разработана для интернета вещей или создания умных домов и подобных полезных устройств Вот основные достоинства сервера: - небольшой размер, не нужно городить серверные шкафы - не нужно охлаждение, бесшумный, ничтожные энергозатраты, питание от микроUSB кабеля, включил и забыл - не нужны сетевые провода, его можно расположить в зоне охвата вашего Wifi, дома или в офисе - супердешевый всего примерно 250 рублей , и не нужно пользоваться сомнительными сервисами для передачи ртк поправок, не нужно спец ПО для организации серверов минусы: -нужен не совсем древний роутер с возможностью настройки динамического DNS (если ip адрес не статический) -нужно немного повозиться и все осмыслить)) Больше информации о характеристиках можно найти на просторах Интернета. Такой сервер сможет сделать себе каждый. 1. Начнем с программирования, модуль программируется через среду ArduinoIDE. Программист из меня неочень, за основу были взяты примеры из интернета, возможно, что кто-то сможет доработать программу получше. Я попытался учесть возможность разрывов соединения как роверов так и базы в полевых условиях, а так же независимость от порядка подключения к серверу, поэтому реализовал раздачу потока на всех клиентов сразу, возможно так делать нельзя Код: #include <ESP8266WiFi.h> #include <WiFiClient.h> #define MAX_CLIENT 5 // максимальное количество клиентов WiFiServer server(5000); //создаем сервер с портом 5000 WiFiClient client[MAX_CLIENT]; void setup() { Serial.begin(115200); delay(100); WiFi.mode(WIFI_STA); WiFi.softAP("ssid","pass");// ваши точка доступа и пароль delay(500); server.begin(); } void loop() { uint8_t i; if(server.hasClient()) { for(i=0;i<MAX_CLIENT;i++) { if (!client || !client.connected()){ if(client) client.stop(); client = server.available(); continue; } } } for(i = 0; i < MAX_CLIENT; i++){ if (client && client.connected()){ if(client.available()){ while(client.available()){ // пока поступает поток информации записываем его в переменную "с" и раздаем другим клиентам char c = client.read(); client[0].print(c); client[1].print(c); client[2].print(c); client[3].print(c); client[4].print(c); } } } } } После загрузки программы, плата подключается к питанию через кабель microUSB и сразу же соединяется с вашей точкой доступа WiFi, сервер запускается и ожидает подключения приемников. 2. Настройка точки доступа WiFi. В первую очередь нужно сделать проброс порта в вашем роутере (почитать об этом подробнее можно в интернет к каждой модели) мой роутер Xiaomi и настройка на нем выглядит так Если у вас статический IP адрес, можно начинать пользоваться сервером и подключаться к нему. 3. Если IP адрес динамический есть несколько выходов. Можно использовать сервис динамического DNS (Dyndns) например noip.com или аналогичные. Вкратце, это сервис для отслеживания изменения вашего ip и присвоения ему адресного типа например ntrip.ddns.net, так же нужно настроить точку доступа wifi. Вот мой пример: Второй вариант - просто запомнить ip адрес и вводить его в настройках приемника, но этот вариант не продуктивный, но подойдет для тестирования сервера. И напоследок настройки приемника, например с помощью популярной программы Carlson.
Это нужно GSM модуль типа SIM800+esp8266 или + arduino, у меня пока под рукой его нет. Можно будет попробовать. Или проще приобрести GSM модем с com портом с алиэкспресс примерно за 2000 рублей.
Пока без gsm, принять с uart и переслать на сервер. Желательно с Web мордой для настройки wifi и сервера
Не понял, где сервер находится? По каким каналам обеспечивается доступ к серверу, если это не gsm/gprs? Или имеется в виду точка доступа на смартфоне, а уж потом сервер дома/в офисе? Web-морду, по моему, не получится реализовать на данном модуле, памяти мало, да и в принципе сложно это.
Все же это устройство для "умного дома", а не для "умного поля. Работает примерно так - написали код, скомпилировали, загрузили в модуль, отключили питание, включили, программа заработала и модуль тоже. Адрес ВиФи точки доступа и пароль задаётся на этапе программирования, никакого интерфейса с пользователем не предусмотрено (если я ошибаюсь/заблуждаюсь, то поправьте меня). Вот вам первая проблема - надо заранее знать IP-адрес и пароль. Если смартфон один, то решаемо, но если предполагается несколько пользователей со своими точками доступа, то нет - не получится так. Вторая проблема - питание. Рекомендуется питать устройство от отдельного источника питания не более 10В. Иначе работа модуля не стабильна. Третья проблема - дешифрация потока данных на стороне сервера. Допустим, припаяли мы нужный разъем к модулю (правильно припаяли), программа написана правильно, модуль подключился к точке доступа на Вашем смартфоне, исправно упаковывает поток данных в TCP/IP пакеты и шлёт их на Ваш сервер, НО сможет-ли сервер разобрать эти данные (типа как с СОМ- порта)? Что-то я сомневаюсь в этом! Потому, что UART выдает поток данных с синхроимпульсами на определенной скорости, которая ну никак не должна меняться в процессе передачи данных. А мы с вами пытаемся это через интернет... Нет, так не получится. Для передачи данных через сеть нужно пользоваться специальными протоколами, типа NTRIP, а данный модуль этого не умеет и вряд-ли когда-нибудь научится. --- Сообщения объединены, 12 окт 2018, Оригинальное время сообщения: 12 окт 2018 --- Поймите, в первоначальном варианте, что предложил топикастер, модуль всего навсего принимает данные, специальным образом подготовленные на стороне ГНСС приемника и передает их в неизменном виде любому другому устройству. Каков формат этих данных, я не знаю, но уверен, что он общепринят для большинства производителей ГНСС оборудования. --- Сообщения объединены, 12 окт 2018 --- Хотя, пожалуй, можно сохранить принятые данные в файл, каким-то образом разобрать эту мешанину, затем эмулировать СОМ-порт, подать на него содержимое файла, а дальше уж сервер разберётся. Но, боюсь, это уже будет не RTK :)
Вы сейчас серьёзно, вы хоть понимаете насколько эти причины надуманы? 1. Пусть один, потестим так. 2. Павербанк не вариант? собственно большинство устройств в таком виде работают, на батареях 18650. 3. что вы там собрались разбирать? на вход uart ставится в цепь max232 и всё норм, а esp8266 в "режим моста"
Извините, не улавливаю связи между преобразователем уровней напряжений и форматами данных --- Сообщения объединены, 12 окт 2018, Оригинальное время сообщения: 12 окт 2018 --- Повторюсь коротко - то что ГНСС приемник передает по протоколу TCP/IP не равно тому что присутствует на выходе СОМ порта приемника. Эти данные можно передать через сеть, но сможет-ли сервер их правильно интерпретировать!
Собственно это единственное необходимое преобразование для передачи поправок, остальное в чистом виде улетает на сервер. А настройки поправок и их отправка так же формируется самой тарелкой
Кто вам это сказал? способов передачи много, Вы когда УКВ модем подключаете тоже TCP настраиваете? Нет, поправки отправляете в порт, а модем их передаёт, в данном случае так же
Согласен. ТСР для УКВ не настраиваем, настраиваем кое что другое :) это надо осмыслить. Пойду высплюсь.
Приемник ничего не передает по TCP/IP, он только отправляет данные по компорту или внутреннему каналу на устройство приема/передачи. Ваша логика странная, давайте тогда все модемы, радиомодемы и ПО на свете забракуем, а то вдруг они "неправильно интерпретируют". Зачем серверу что-то интерпретировать? Интерпретирует как раз принимающий GNSS, а сервер является посредником между модемами базы и ровера и не важно где он находиться. Серверу глубоко фиолетово, что за данные передаются: RTCM2, RTCM3, или например картинку в формате JPEG. Я тестировал и сравнивал переданные и принятые пакеты с помощью RTKlib визуально с помощью двух мониторов потоков данных, ни одного бита не пропало и не исказилось. UART здесь не при чем, это устройство не соединяется с приемниками, оно общается через GPRS модемы. NTRIP - это тот же TCP/IP+программная оболочка для обработки паролей и т.п. Можете конечно использовать NTRIP, тот же RTKlib, включить компьютер и пусть он молотит целыми сутками, кушает электро энергию и обогревает помещение)). Сервер в поле не обязательно иметь, он может находиться хоть в другой точке планеты. Настройки можно сделать один раз и забыть, какой смысл городить интерфейс? Да и эту тему я создал для того чтобы просто продвинуть идею, может даже помочь кому то, возможно найдутся люди, кого это заинтересует и даже смогут придумать что-то лучше. А можно, конечно, пользоваться и CSD связью.
Passenger, спасибо! Доходчиво объяснили. Теперь видится следующая схема - один модуль NodeMCU дома в качестве сервера, второй в поле на Ровере в качестве передающего модема (как предлагает Solist). Я правильно понял?
На мой взгляд, в случае с мобильной базой, нужно стремится к следующей последовательности передачи поправок: rs232 базы>>>max3232 преобразователь уровней сигналов Rs232-UART>>>UART микроконтроллерa управляющего модемом и передачей по TCP/Ip>>>UART GPRS модема>>>Арендованный виртуальный сервер или готовый спец. сервис>>>модэм контроллера приемника>>>ПО контроллера с известным номером порта.
Это идеальный вариант, только сцепку UART GPRS модема я бы заменил на мобильный роутер, т.к. полевая база изначально обречена на поиск действующего оператора связи т.е. перебор симок и поиск наилучшего приёма и возможности поставить усиленную антенну, а WIFI даст хоть какое то поле для этой деятельности. В целом я уже отказался от этой идеи, искать кто напишет код, проще застрелится, буду пробовать реализовать на Raspberry Pi https://yan.id.au/2014/07/17/rtklib-on-raspberry-pi/ или так https://eltechs.com/run-wine-on-raspberry-pi/. По сути будет универсальное устройство подходящие как для стационарной, так и мобильно базы.
На основе Ардуино готовых проектов можно довольно таки быстро научится писать код, да и на этой платформе уже куча всего понаписано, много обучалок статей и т.д.Фиг его знает, что проще на Paspbery все это дело наладить или на Ардуино, тогда через Роутер будет самый простой вариант.В случае с микроконтроллером можно управлять процессом через терминал по кабелю с ОТГ или блютуз прилепить.Можно программу под Андроид написать для этого с графическим интерфейсом если нужно.
Если поставит на Raspberry Pi поставить эмулятор windows, то выходит что я получу весь функционал snip и rtklib, ест она немного powerbankа хватит, но подключить смогу всё, WiFi, GSM свисток, 3DR модем и тд...