Парусник “NaN” сигналит SOS (See Our Success) Raspberry Pi, азбука Морзе и MQTT: вместе веселее


Меня зовут Вова Балакин, я из московской школы на Юго-Востоке имени Маршала В.И.Чуйкова (классов “Силаэдр”: vk.com/silaedr), закончил 5 класс, интересуюсь программированием и техникой. Я хочу рассказать, что я делал этой весной. У меня был парусник, он назывался “Not a Number”(“NaN”). Выходить в море без сигнализации опасно, поэтому я подумал, что ему на мачте не хватает сигнальных огней. А лучше — сигнальных огней, которыми можно управлять удаленно. А лучше — удаленно из любой точки мира! У меня был Raspberry Pi — и тогда я придумал…



Чего мне захотелось (Постановка задачи)


… что можно прикрепить к мачте светодиод, соединить его с Raspberry Pi и запрограммировать так, чтобы из Интернета было возможно отсылать паруснику любое сообщение — и оно переводилось в код Морзе — и диод на мачте мигал в соответствии с этим кодом. И на ту же мачту закрепить фоторезистор — декодер кода Морзе, чтобы другой компьютер в Интернете мог получить переданный код.

Что у меня вышло (Результат)


После двух месяцев проб и ошибок у меня получилось написать программу, которая через MQTT-брокер(http://www.hivemq.com/demos/websocket-client/) позволяет любому человеку в Интернете, знающему Topic — секретный ключ для передачи сообщения клиенту, — отправить абсолютно любое сообщение написанное латиницей — и светодиод на мачте моего промигает его азбукой Морзе!


Вот в целом как это работает: мы пишем сообщение и отправляем его MQTT-серверу, а он в свою очередь отправляет его на Raspberry pi, который переводит его в код Морзе и подмигивает светодиодом в соответствии с кодом.

Вот код на Node.js на гитхабе.

Как мне пришлось помучиться (Инструменты и методы)


Сначала я писал на Python3. Но подключить питон к MQTT у меня не получилось — не нашел нужной документации — и я перешёл на платформу Node.js.

Кроме того, на протяжении суток я пытался сделать дешифратор световых сигналов азбуки Морзе (с помощью фоторезистора) и установить его на ту же мачту того же парусника, но это не вышло, потому что фоторезистор (по крайней мере, тот, что был у меня) не способен различить свет даже от 5 светодиодов (разница напряжений при включенных и выключенных светодиодах была слишком мала).

Полезные советы тем, кто будет делать что-то подобное (Обсуждение).

Пишите сразу на Node.js, если хотите связывать потом код с MQTT. Законнектить Python с MQTT — задача не из легких.

Что сделано человечеством (Литобзор)


Перед тем, как начать, я погуглил, как такое сделать. Все части этого проекта по отдельности в Интернете описаны, всё вместе — не нашел.


Благодарю за ценные замечания и крутые советы моих учителей робототехники и информатики и старшеклассников моей школы!