Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Мини TCP сервер для РТК поправок

Тема в разделе "Сделай Сам", создана пользователем Passenger, 17 июл 2018.

  1. Passenger

    Форумчанин

    Регистрация:
    29 июл 2013
    Сообщения:
    160
    Симпатии:
    50
    Эта тема про мини TCP сервер на 5 клиентов (1 база+4 ровера), который превосходно подходит для передачи RTK поправок. Сервер реализован на плате NodeMCU, она же ESP8266, имеет wifi на борту и неплохие характеристики. Изначально плата разработана для интернета вещей или создания умных домов и подобных полезных устройств
    Nodemcu.jpg
    Вот основные достоинства сервера:
    - небольшой размер, не нужно городить серверные шкафы
    - не нужно охлаждение, бесшумный, ничтожные энергозатраты, питание от микроUSB кабеля, включил и забыл
    - не нужны сетевые провода, его можно расположить в зоне охвата вашего Wifi, дома или в офисе
    - супердешевый всего примерно 250 рублей , и не нужно пользоваться сомнительными сервисами для передачи ртк поправок, не нужно спец ПО для организации серверов
    минусы:
    -нужен не совсем древний роутер с возможностью настройки динамического DNS (если ip адрес не статический)
    -нужно немного повозиться и все осмыслить))

    Больше информации о характеристиках можно найти на просторах Интернета.
    Такой сервер сможет сделать себе каждый.
    1. Начнем с программирования, модуль программируется через среду ArduinoIDE. Программист из меня неочень, за основу были взяты примеры из интернета, возможно, что кто-то сможет доработать программу получше. Я попытался учесть возможность разрывов соединения как роверов так и базы в полевых условиях, а так же независимость от порядка подключения к серверу, поэтому реализовал раздачу потока на всех клиентов сразу, возможно так делать нельзя ::rolleyes24.gif::

    Код:
    #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 и настройка на нем выглядит так
    Проброс порта.PNG
    Если у вас статический IP адрес, можно начинать пользоваться сервером и подключаться к нему.
    3. Если IP адрес динамический есть несколько выходов. Можно использовать сервис динамического DNS (Dyndns) например noip.com или аналогичные. Вкратце, это сервис для отслеживания изменения вашего ip и присвоения ему адресного типа например ntrip.ddns.net, так же нужно настроить точку доступа wifi. Вот мой пример:
    ddns.jpg
    Второй вариант - просто запомнить ip адрес и вводить его в настройках приемника, но этот вариант не продуктивный, но подойдет для тестирования сервера.
    И напоследок настройки приемника, например с помощью популярной программы Carlson. CarlsonB.PNG CarlsonB2.PNG
     
    #1
    sherkhan, Чихун, Badim и 8 другим нравится это.
  2. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Можно попросить написать код для этой штуки, но на другой конец (базы в поле)?
     
    #2
  3. Passenger

    Форумчанин

    Регистрация:
    29 июл 2013
    Сообщения:
    160
    Симпатии:
    50
    Это нужно GSM модуль типа SIM800+esp8266 или + arduino, у меня пока под рукой его нет. Можно будет попробовать. Или проще приобрести GSM модем с com портом с алиэкспресс примерно за 2000 рублей.
     
    #3
  4. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Пока без gsm, принять с uart и переслать на сервер. Желательно с Web мордой для настройки wifi и сервера
     
    #4
  5. gdnii

    Форумчанин

    Регистрация:
    28 фев 2014
    Сообщения:
    679
    Симпатии:
    224
    Адрес:
    Алтайский край, г.Барнаул
    Не понял, где сервер находится? По каким каналам обеспечивается доступ к серверу, если это не gsm/gprs? Или имеется в виду точка доступа на смартфоне, а уж потом сервер дома/в офисе?

    Web-морду, по моему, не получится реализовать на данном модуле, памяти мало, да и в принципе сложно это.
     
    #5
    Последнее редактирование: 12 окт 2018
  6. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    С Wi-Fi к примеру розданного с мобильного
     
    #6
  7. gdnii

    Форумчанин

    Регистрация:
    28 фев 2014
    Сообщения:
    679
    Симпатии:
    224
    Адрес:
    Алтайский край, г.Барнаул
    Все же это устройство для "умного дома", а не для "умного поля. Работает примерно так - написали код, скомпилировали, загрузили в модуль, отключили питание, включили, программа заработала и модуль тоже. Адрес ВиФи точки доступа и пароль задаётся на этапе программирования, никакого интерфейса с пользователем не предусмотрено (если я ошибаюсь/заблуждаюсь, то поправьте меня). Вот вам первая проблема - надо заранее знать IP-адрес и пароль. Если смартфон один, то решаемо, но если предполагается несколько пользователей со своими точками доступа, то нет - не получится так.
    Вторая проблема - питание. Рекомендуется питать устройство от отдельного источника питания не более 10В. Иначе работа модуля не стабильна. Третья проблема - дешифрация потока данных на стороне сервера. Допустим, припаяли мы нужный разъем к модулю (правильно припаяли), программа написана правильно, модуль подключился к точке доступа на Вашем смартфоне, исправно упаковывает поток данных в TCP/IP пакеты и шлёт их на Ваш сервер, НО сможет-ли сервер разобрать эти данные (типа как с СОМ- порта)? Что-то я сомневаюсь в этом! Потому, что UART выдает поток данных с синхроимпульсами на определенной скорости, которая ну никак не должна меняться в процессе передачи данных. А мы с вами пытаемся это через интернет... Нет, так не получится. Для передачи данных через сеть нужно пользоваться специальными протоколами, типа NTRIP, а данный модуль этого не умеет и вряд-ли когда-нибудь научится.
    --- Сообщения объединены, 12 окт 2018, Оригинальное время сообщения: 12 окт 2018 ---
    Поймите, в первоначальном варианте, что предложил топикастер, модуль всего навсего принимает данные, специальным образом подготовленные на стороне ГНСС приемника и передает их в неизменном виде любому другому устройству. Каков формат этих данных, я не знаю, но уверен, что он общепринят для большинства производителей ГНСС оборудования.
    --- Сообщения объединены, 12 окт 2018 ---
    Хотя, пожалуй, можно сохранить принятые данные в файл, каким-то образом разобрать эту мешанину, затем эмулировать СОМ-порт, подать на него содержимое файла, а дальше уж сервер разберётся. Но, боюсь, это уже будет не RTK :)
     
    #7
  8. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Вы сейчас серьёзно, вы хоть понимаете насколько эти причины надуманы? 1. Пусть один, потестим так. 2. Павербанк не вариант? собственно большинство устройств в таком виде работают, на батареях 18650. 3. что вы там собрались разбирать? на вход uart ставится в цепь max232 и всё норм, а esp8266 в "режим моста"
     
    #8
  9. gdnii

    Форумчанин

    Регистрация:
    28 фев 2014
    Сообщения:
    679
    Симпатии:
    224
    Адрес:
    Алтайский край, г.Барнаул
    Извините, не улавливаю связи между преобразователем уровней напряжений и форматами данных
    --- Сообщения объединены, 12 окт 2018, Оригинальное время сообщения: 12 окт 2018 ---
    Повторюсь коротко - то что ГНСС приемник передает по протоколу TCP/IP не равно тому что присутствует на выходе СОМ порта приемника. Эти данные можно передать через сеть, но сможет-ли сервер их правильно интерпретировать!
     
    #9
  10. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Собственно это единственное необходимое преобразование для передачи поправок, остальное в чистом виде улетает на сервер. А настройки поправок и их отправка так же формируется самой тарелкой
     
    #10
  11. gdnii

    Форумчанин

    Регистрация:
    28 фев 2014
    Сообщения:
    679
    Симпатии:
    224
    Адрес:
    Алтайский край, г.Барнаул
    Что за сервер?
     
    #11
  12. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Кто вам это сказал? способов передачи много, Вы когда УКВ модем подключаете тоже TCP настраиваете? Нет, поправки отправляете в порт, а модем их передаёт, в данном случае так же
     
    #12
  13. gdnii

    Форумчанин

    Регистрация:
    28 фев 2014
    Сообщения:
    679
    Симпатии:
    224
    Адрес:
    Алтайский край, г.Барнаул
    Согласен. ТСР для УКВ не настраиваем, настраиваем кое что другое :) это надо осмыслить. Пойду высплюсь.
     
    #13
  14. Passenger

    Форумчанин

    Регистрация:
    29 июл 2013
    Сообщения:
    160
    Симпатии:
    50
    Приемник ничего не передает по TCP/IP, он только отправляет данные по компорту или внутреннему каналу на устройство приема/передачи. Ваша логика странная, давайте тогда все модемы, радиомодемы и ПО на свете забракуем, а то вдруг они "неправильно интерпретируют". Зачем серверу что-то интерпретировать? Интерпретирует как раз принимающий GNSS, а сервер является посредником между модемами базы и ровера и не важно где он находиться. Серверу глубоко фиолетово, что за данные передаются: RTCM2, RTCM3, или например картинку в формате JPEG. Я тестировал и сравнивал переданные и принятые пакеты с помощью RTKlib визуально с помощью двух мониторов потоков данных, ни одного бита не пропало и не исказилось. UART здесь не при чем, это устройство не соединяется с приемниками, оно общается через GPRS модемы. NTRIP - это тот же TCP/IP+программная оболочка для обработки паролей и т.п. Можете конечно использовать NTRIP, тот же RTKlib, включить компьютер и пусть он молотит целыми сутками, кушает электро энергию и обогревает помещение)). Сервер в поле не обязательно иметь, он может находиться хоть в другой точке планеты. Настройки можно сделать один раз и забыть, какой смысл городить интерфейс? Да и эту тему я создал для того чтобы просто продвинуть идею, может даже помочь кому то, возможно найдутся люди, кого это заинтересует и даже смогут придумать что-то лучше. А можно, конечно, пользоваться и CSD связью.
     
    #14
    sherkhan, Qvinto и gdnii нравится это.
  15. gdnii

    Форумчанин

    Регистрация:
    28 фев 2014
    Сообщения:
    679
    Симпатии:
    224
    Адрес:
    Алтайский край, г.Барнаул
    Passenger, спасибо! Доходчиво объяснили. Теперь видится следующая схема - один модуль NodeMCU дома в качестве сервера, второй в поле на Ровере в качестве передающего модема (как предлагает Solist). Я правильно понял?
     
    #15
  16. igor kruchkovskiy

    Форумчанин

    Регистрация:
    10 июн 2012
    Сообщения:
    3.417
    Симпатии:
    1.824
    Адрес:
    Астрахань
    На мой взгляд, в случае с мобильной базой, нужно стремится к следующей последовательности передачи поправок: rs232 базы>>>max3232 преобразователь уровней сигналов Rs232-UART>>>UART микроконтроллерa управляющего модемом и передачей по TCP/Ip>>>UART GPRS модема>>>Арендованный виртуальный сервер или готовый спец. сервис>>>модэм контроллера приемника>>>ПО контроллера с известным номером порта.
     
    #16
    Solist нравится это.
  17. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Это идеальный вариант, только сцепку UART GPRS модема я бы заменил на мобильный роутер, т.к. полевая база изначально обречена на поиск действующего оператора связи т.е. перебор симок и поиск наилучшего приёма и возможности поставить усиленную антенну, а WIFI даст хоть какое то поле для этой деятельности.
    В целом я уже отказался от этой идеи, искать кто напишет код, проще застрелится, буду пробовать реализовать на Raspberry Pi https://yan.id.au/2014/07/17/rtklib-on-raspberry-pi/ или так https://eltechs.com/run-wine-on-raspberry-pi/. По сути будет универсальное устройство подходящие как для стационарной, так и мобильно базы.
     
    #17
  18. igor kruchkovskiy

    Форумчанин

    Регистрация:
    10 июн 2012
    Сообщения:
    3.417
    Симпатии:
    1.824
    Адрес:
    Астрахань
    На основе Ардуино готовых проектов можно довольно таки быстро научится писать код, да и на этой платформе уже куча всего понаписано, много обучалок статей и т.д.Фиг его знает, что проще на Paspbery все это дело наладить или на Ардуино, тогда через Роутер будет самый простой вариант.В случае с микроконтроллером можно управлять процессом через терминал по кабелю с ОТГ или блютуз прилепить.Можно программу под Андроид написать для этого с графическим интерфейсом если нужно.
     
    #18
  19. Solist

    Форумчанин

    Регистрация:
    24 авг 2009
    Сообщения:
    683
    Симпатии:
    202
    Если поставит на Raspberry Pi поставить эмулятор windows, то выходит что я получу весь функционал snip и rtklib, ест она немного powerbankа хватит, но подключить смогу всё, WiFi, GSM свисток, 3DR модем и тд...
     
    #19
  20. igor kruchkovskiy

    Форумчанин

    Регистрация:
    10 июн 2012
    Сообщения:
    3.417
    Симпатии:
    1.824
    Адрес:
    Астрахань
    Будет тормозить глухо.
     
    #20

Поделиться этой страницей

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление