В прошлый раз у нас было общее описание простой колхозной системы навигации и управления для лодки. Теперь имеет смысл перейти к следующему шагу, а именно к собиранию разрозненных устройств в одну единую функционирующую кучу. Сразу замечу, что я здесь полнейший чайник, и поэтому прошу не судить меня строго тех, кто разбирается в компьютерных делах хорошо. Просто делайте замечания по существу.
Итак, у меня был промышленный безвентиляторный компьютер, в котором все элементы кроме беспроводного адаптера и оперативной памяти располагаются на одной плате; приемник ГНСС; автопилот Raymarine ST1000+ и конвертер интерфейса для него. Как я писал в прошлой статье, компьютер я выбрал специально аж с шестью последовательными портами, и тут, наверно, придется сделать небольшое отступление и пояснить мой выбор.
Понятно, что в настоящее время все принято подключать по наиболее универсальному и распространенному интерфейсу USB. Да, действительно, к ней можно легко подключить все что угодно, и для USB есть масса абсолютно любых конвертеров. Но так как лично я, в плане электроники и компьютеров, человек темный, то я решил пойти самым простым путем и подключать все устройства именно к последовательным портам — так, как это задумывалось когда-то в 80е годы. Каждый COM-порт имеет свой конкретный номер, который никогда не меняется; операционная система работает с этим хозяйством напрямую. И вообще, мне тогда казалось что так будет проще и понятнее. Ну и на этом можно продолжать дальше.
Начал я, конечно, с приемника ГНСС, который с завода имел интерфейс RS-232. Если вдруг кто не в теме, то я замечу, что компьютерные COM-порты работают тоже по этому стандарту, и таким образом приемник просто достаточно воткнуть в разъем и наслаждаться результатом. Ага! Не тут-то было! Простое втыкание приемника в порт не принесло никаких результатов. Я принялся ломать голову, разбирать разъем и читать в интернете про распиновку данного интерфейса.
Все оказалось довольно просто: RS-232 предусматривает подачу питания на один из штырьков разъема-папы, который находится, скажем так, на «хосте». В компьютере такого питания не предусмотрено, так как подразумевается, что подключаемые к нему устройства питаются от какого-то отдельного источника. Однако, на моем приемнике ничего такого предусмотрено не было. Пришлось мне взять в руки паяльник и припаять на соответствующий вывод разъема в компьютере проводочек с +12В. После этого приемник радостно замигал своей лампочкой и настало время посмотреть, что же он такое там передает в наш порт.
Но и тут меня ждало фиаско! Я пытался сделать что-нибудь типа «cat /dev/ttyS0», или «ttylog -b 4800 -d /dev/ttyS0», но не видел на экране даже кракозябр. OpenCPN, настроенный для работы с портом COM1 так же молчал. Но используя метод научного тыка, я вдруг обнаружил, что данные NMEA-0183 вдруг начинают идти, если, например, взять, и переподключить приемник. Потом, правда, данные могли вдруг исчезнуть, или вместо NMEA-0183 мог пойти сплошной поток кракозябр, но приемник все-таки работал, и это меня воодушевляло. Но как сделать так, чтобы все это подключалось само и работало без сбоев?
И тут я узнал о такой замечательной программе, как «Gpsd». Это демон, стандартно использующийся в любых никсах для получения данных NMEA-0183 и 2000, и последующей передачи их в сеть. Я не буду вдаваться в подробности, почему надо делать именно так, а не пытаться подключаться к портам напрямую конкретными программами, ибо сам не особо этого понимаю. Но суть в том, что когда я настроил gpsd, то OpenCPN у меня заработал безотказно. Просто получал данные он теперь не прямо с порта, а из сети про протоколу TCP, в настройках было достаточно указать только внутренний адрес 127.0.0.1 и сетевой порт — 2947. После установки gpsd создается и соответствующий файл /etc/defaults/gpsd, в котором сразу можно указать адрес устройства, с которым ему надо начинать работать при загрузке системы и прочие параметры, о которых вполне доходчиво написано в руководстве пользователя. Я указывал дополнительно «-n» - это чтобы демон не ждал никаких обращений, а начинал отправлять данные прямо сразу.
Фух, что-то у нас много текста получается. Про подключение автопилота я пишу в следующей статье. Там тоже были некоторые проблемы, которые я благополучно преодолел.