Найти в Дзене
sevprostor

Сборка навигационного компьютера для лодки: подключаем периферию

В прошлый раз у нас было общее описание простой колхозной системы навигации и управления для лодки. Теперь имеет смысл перейти к следующему шагу, а именно к собиранию разрозненных устройств в одну единую функционирующую кучу. Сразу замечу, что я здесь полнейший чайник, и поэтому прошу не судить меня строго тех, кто разбирается в компьютерных делах хорошо. Просто делайте замечания по существу.

Приемник
Приемник

Итак, у меня был промышленный безвентиляторный компьютер, в котором все элементы кроме беспроводного адаптера и оперативной памяти располагаются на одной плате; приемник ГНСС; автопилот Raymarine ST1000+ и конвертер интерфейса для него. Как я писал в прошлой статье, компьютер я выбрал специально аж с шестью последовательными портами, и тут, наверно, придется сделать небольшое отступление и пояснить мой выбор.

Автопилот
Автопилот

Понятно, что в настоящее время все принято подключать по наиболее универсальному и распространенному интерфейсу USB. Да, действительно, к ней можно легко подключить все что угодно, и для USB есть масса абсолютно любых конвертеров. Но так как лично я, в плане электроники и компьютеров, человек темный, то я решил пойти самым простым путем и подключать все устройства именно к последовательным портам — так, как это задумывалось когда-то в 80е годы. Каждый COM-порт имеет свой конкретный номер, который никогда не меняется; операционная система работает с этим хозяйством напрямую. И вообще, мне тогда казалось что так будет проще и понятнее. Ну и на этом можно продолжать дальше.

Что там внутри приемника? На самом деле, под этой платой имеется еще одна.
Что там внутри приемника? На самом деле, под этой платой имеется еще одна.

Начал я, конечно, с приемника ГНСС, который с завода имел интерфейс RS-232. Если вдруг кто не в теме, то я замечу, что компьютерные COM-порты работают тоже по этому стандарту, и таким образом приемник просто достаточно воткнуть в разъем и наслаждаться результатом. Ага! Не тут-то было! Простое втыкание приемника в порт не принесло никаких результатов. Я принялся ломать голову, разбирать разъем и читать в интернете про распиновку данного интерфейса.

Внутри разъема приемника. Красный провод - питание VCC +12
Внутри разъема приемника. Красный провод - питание VCC +12

Все оказалось довольно просто: RS-232 предусматривает подачу питания на один из штырьков разъема-папы, который находится, скажем так, на «хосте». В компьютере такого питания не предусмотрено, так как подразумевается, что подключаемые к нему устройства питаются от какого-то отдельного источника. Однако, на моем приемнике ничего такого предусмотрено не было. Пришлось мне взять в руки паяльник и припаять на соответствующий вывод разъема в компьютере проводочек с +12В. После этого приемник радостно замигал своей лампочкой и настало время посмотреть, что же он такое там передает в наш порт.

Единственная доработка компьютерного разъема - припаивание провода с +12В, которые берутся с разъема питания материнской платы. Здесь необходим предохранитель, который я установлю позже.
Единственная доработка компьютерного разъема - припаивание провода с +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» - это чтобы демон не ждал никаких обращений, а начинал отправлять данные прямо сразу.

А вот об этом - уже в следующий раз
А вот об этом - уже в следующий раз

Фух, что-то у нас много текста получается. Про подключение автопилота я пишу в следующей статье. Там тоже были некоторые проблемы, которые я благополучно преодолел.