Если вы занимаетесь сбором данных на обширной территории, да еще не охваченной интернетом, возникает задача передачи данных на расстояния, исчисляемые километрами без использования WiFi и сети Ethernet.  В решении этой задачи вам помогут радиомодули, передающие данные с использованием технологии связи на большие расстояния (Long Range, LoRa). Эта технология запатентована компанией Semtech и реализована в микросхемах приемо‑передатчиков (трансиверов), таких как SX1268, SX1276, SX1278. В зависимости от выходной мощности передатчика, типа антенны, рабочей  частоты, наличия прямой видимости или препятствий для прохождения  радиоволн в виде домов, леса, помех со стороны других источников  радиоизлучения и других факторов дальность может составлять от сотен  метров до десятков километров. К сожалению, скорость передачи данных LoRa невелика, порядка  2400-19200 бит/c.  Однако этого достаточно, например, для систем  телеметрии и удаленного контроля, систем умного дома или других подобных  систем. В законодательстве есть ограничения по используемым частотам, уровням  мощности и времени передачи. Найдите перечень и условия использования  безлицензионных диапазонов частот (Industrial, Scientific, Medical, ISM)  для использования протокола LoRa в вашей стране. В России правила использования радиочастотного спектра устанавливаются Государственной комиссией по радиочастотам (ГКРЧ). Подробнее об использовании безлицензионных частот можно почитать здесь. На момент написания этой статьи в России к безлицензионным диапазонам частот отнесены 433 МГц, 868 МГц, 2400 МГц и 5725 МГц. Для создания сетей интернета вещей в России используют диапазон частот от 864 МГц до 869 МГц с мощностью до 25 мВт. При этом выделяются поддиапазоны от 864,0 МГц до 865,0 МГц и 868,7 МГц до 869,2 МГц. В первом из этих поддиапазонов действуют дополнительные ограничения: период активной работы может составлять не более 0,1%, и не разрешается работать вблизи аэропортов. У второго поддиапазона таких ограничений нет. Законодательство постоянно изменяется, поэтому его необходимо отслеживать. Метод модуляции LoRa использует технику расширения спектра (spread spectrum modulation) и вариацию линейной частотной модуляции (chirp spread spectrum, CSS). При этом данные кодируются широкополосными импульсами с частотой, изменяющейся на некотором временном интервале. Также применяется прямая коррекция ошибок (forward error correction, FEC). Большая дальность связи при невысокой мощности передатчика достигается благодаря тому, что протокол LoRa принимает сигналы ниже уровня шума. Подробнее о протоколе LoRa можно почитать на этом сайте. В этой статье мы будем подключать к Repka Pi и Raspberry Pi модули LoRa производства компании EBYTE с интерфейсом UART. Описание модулей можно найти здесь. Кроме того, один из периферийных узлов будет сделан на базе микрокомпьютера Micro:bit. Модули LoRa и антенны к ним можно купить на Алиэкспресс. В табл. 1 перечислены некоторые модули производства EBYTE с интерфейсом UART, рассчитанные на разные частотные диапазоны и мощность. Табл. 1. Модули EBYTE с технологией LoRa Мощность модулей может регулироваться в пределах, указанных в табл. 1. Выбирая частотный диапазон и мощность, сверяйтесь с законодательством в области распределения частот для LoRa вашей страны. Есть также способы увеличения дальности без увеличения мощности передатчика. Это использование антенн с большим усилением, направленных антенн и ретрансляторов. Заметим, что компания EBYTE выпускает модули LoRa с термокомпенсированным кварцем (TCXO), что улучшает качество связи в уличных условиях. Перечисленные в табл. 1 модули производства EBYTE очень легко установить на макетную плату, но есть SMD‑модули. На модуле EBYTE имеется семь контактов: M0, M1, RXD, TXD, AUX, VCC и GND, а также разъем антенны (рис. 1). Рис 1. Модуль LoRa E32 433T30D Контакт GND нужно объединить с землей микрокомпьютера Repka Pi. На контакт VCC следует подать питающее напряжение. Согласно документации, напряжение питания должно лежать в диапазоне от 3,3 В до 5,2 В. Если максимальная мощность не нужна, используйте источник питания 3,3 В. Контакты RXD и TXD предназначены, соответственно, для приема и передачи данных с помощью протокола UART. Их нужно подключить к соответствующим контактам GPIO Repka Pi. Аналогично, к GPIO подключаются контакты M0, M1 и AUX. Первые два из них задают режим работы радиомодуля, например, режим установки параметров (конфигурирования), режим обычной работы, режим сохранения мощности и, наконец, режим автоматического перехода из режима сохранения мощности в активный режим при получении данных по радиоканалу. Для изменения параметров модуля на выводы M0 и M1 нужно подавать напряжение 3,3 В, что соответствует логической единице. В режиме передачи данных на эти выводы нужно подать нулевое напряжение. Контакт AUX используется для проверки, готов ли радиомодуль к получению команд и данных, либо он занят выполнением какой‑либо операции. В состоянии готовности на контакте AUX будет высокий уровень напряжения, а при занятом модуле — нулевой. Если модуль занят, то, прежде чем работать с ним, нужно подождать, пока текущая операция закончится, и на контакте AUX появится напряжение логической единицы. Включение радиомодуля на передачу без антенны может привести к его выходу из строя. Используйте антенны правильного типа, специально предназначенные для работы с вашими модулями и на нужной вам частоте. Для подбора антенны найдите нужный модуль по названию на этом сайте , а затем щелкните кнопку Manual. Изучите в документации раздел Antenna recommendation. Выбирая антенну, учитывайте ее тип, размеры, рабочую частоту, а также такой параметр, как усиление Gain, измеряемое в децибелах. Чем выше усиление антенны выше, тем будет дальше устойчивая связь при одинаковой выходной мощности передатчика. Также важен тип интерфейса антенны. Чтобы вы смогли подключить антенну непосредственно к модулям, перечисленным в табл. 1, у нее должен быть интерфейс SMA‑J. В табл. 2 для примера мы привели список совместимых типов антенн для разных модулей EBYTE. Табл. 2. Антенны для радиомодулей EBYTE с технологией LoRa Антенну следует располагать вдали от стен и металлических поверхностей. Чем больше высота ее установки, тем больше дальность радиосвязи при прочих равных условиях. Лучше всего подключать антенну непосредственно к антенному разъему радиомодуля, так как промежуточный соединительный кабель ослабит радиосигнал. Это отрицательно скажется на дальности связи. Прежде чем использовать модули EBYTE, их нужно правильно сконфигурировать. В частности, следует установить режим передачи данных (прозрачный или фиксированный), частоту (номер канала) и выходную мощность передатчика, а также другие параметры. В репозитории вы найдете программы get‑e32-config.py и set‑e32-config.py. Первая из этих программ выводит на консоль байты текущей конфигурации радиомодуля, а вторая позволяет изменить конфигурацию. Работа программы get-e32-config.py основана на отправке модулю E32 через UART команды чтения конфигурации в виде трех байт 0xC1. В ответ программа получает от радиомодуля шесть байт ответа, и после раскодирования выводит конфигурацию на консоль: Аналогично при запуске на Raspberry Pi: Далее мы расскажем об этих программах подробнее, а сейчас расскажем о том, как закодированы байты конфигурации. Описание байтов конфигурации радиомодуля EBYTE E32 приведено в табл. 3. Табл. 3. Кодирование байтов конфигурации E32 Первый байт с номером 0 полученной конфигурации может содержать значения 0xC0 и 0xC2. В первом случае конфигурация модуля сохраняется при выключении его питания, а во втором — нет. Каждому модулю можно назначить свой адрес в диапазоне от 0 до 65 535. По умолчанию установлен адрес, равный 0. Адрес 65 535 используется для широковещательной рассылки данных по всем адресам, а также в так называемом режиме мониторинга адресов. Можно отправлять данные только модулям, сконфигурированным на определенный адрес, или всем модулям сразу независимо от их адреса (при отправке на широковещательный адрес 65 535). Параметр номера канала передачи данных задает частоту, на которой радиомодуль будет вести передачу. Частота вычисляется по формуле, которая зависит от типа модуля (табл. 4). Табл. 4. Вычисление рабочей частоты по номеру канала С помощью конфигурирования номеров каналов установите рабочую частоту  модуля, разрешенную для использования протокола LoRa в вашей стране.  Например, для модулей E32-868T20D и E32-868T30D можно установить частоту  869 МГц, если задать номер канала, равный 7 (862+7=869). Пятый байт конфигурации позволяет задавать дополнительные параметры конфигурации. С помощью бита 7 этого байта можно установить несколько режимов работы модуля: прозрачная передача (transparent transmission); фиксированная передача (fixed transmission); фиксированная широковещательная трансляция (fixed transmission broadcast); режим мониторинга фиксированной передачи (fixed transmission monitoring) В режиме прозрачной передачи, установленном по умолчанию, можно передавать данные с одного модуля на другие, с таким же адресом и номером канала, как и у передающего модуля. На рис. 2 изображены четыре модуля с нулевым адресом. При этом модули A, B и C сконфигурированы для использования канала с номером 15, а модуль D — канала с номером 5. Рис. 2. Режим прозрачной передачи В режиме прозрачной передачи модули A, B и С могут взаимодействовать между собой, но модуль D, работающий на другом канале, будет недоступен. Режим фиксированной передачи интереснее в плане адресации модулей. В этом режиме передающий модуль может без изменения своей конфигурации передавать данные принимающему модулю с любым адресом и на любом канале (рис. 3). Рис. 3. Режим фиксированной передачи Как видно из рис. 3, модуль A получает вместе с данными адрес назначения (равный 2) и номер канала (равный 4), на котором нужно вести передачу. Только модуль B сможет принять эти данные, так как именно он имеет адрес, равный 2, и работает на канале с номером 4. Модули C и D не примут данные. У первого из них адрес задан как 3, а второй работает не на четвертом, а на пятом канале. В режиме фиксированной широковещательной трансляции  данные будут приняты всеми модулями, работающими на заданном канале, независимо от их адреса. Для этого при отправке данных нужно указать специальный адрес 65 535, а также номер канала, на котором будет происходить передача (рис. 4). Рис. 4. Режим широковещательной передачи данных Здесь передача идет на четвертом канале, поэтому данные будут приняты модулями B и С. Модуль D не примет данные — он сконфигурирован для работы на пятом канале. Еще один режим, в который можно перевести модуль, называется мониторингом фиксированной передачи. В этом режиме можно настроить модуль так, чтобы он принимал все пакеты, отправленные другими модулями, на заданном канале. Для этого нужно задать для принимающего модуля адрес 65 535 и канал, на котором должен выполняться контроль. Байт с номером 3 (табл. 3) задает формат данных для UART, а также скорость передачи данных по радиоканалу. Биты 7 и 6 этого байта определяют режим работы порта UART: 00 — 8N1 (используется по умолчанию); 01 — 8O1; 10 — 8E1; 11 — 8N1 (то же самое, что и 00) Режим 8N1 означает, что пакет данных содержит 8 бит, нет служебного  бита проверки четности, используется один стоп-бит в конце пакета. Режим 8O1 аналогичен предыдущему, но используется контроль по  нечетности. В режиме 8E1 то же самое, но применяется контроль по  четности. Биты 5, 4 и 3 третьего байта конфигурации задают скорость передачи данных в bps: 000 — 1200; 001 — 2400; 010 — 4800; 011 — 9600 (по умолчанию); 100 — 19200; 101 — 38400; 110 — 57600; 111 — 115200 Биты 2, 1 и 0 байта конфигурации с номером 3 задают скорость передачи данных по радиоканалу: 000 — 300; 001 — 1200; 010 — 2400 (по умолчанию); 011 — 4800; 100 — 9600; 101 — 19200; 110 — 19200; 111 — 19200 Протокол LoRa не позволяет передавать данные с большой скоростью, поэтому нет особого смысла устанавливать высокую скорость для протокола UART. Что касается скорости передачи данных по радиоканалу, то, чем она ниже, тем больше дальность устойчивой радиосвязи. С учетом этих обстоятельств вы можете оставить параметры скорости передачи данных UART и через радиоканал (эфир) установленными по умолчанию. Байт конфигурации номером 5 (то есть последний, шестой байт по счету) сдержит значения множества различных параметров. Очень важно правильно установить биты 1 и 0 этого байта конфигурации, так как они определяют выходную мощность передатчика радиомодуля. Для модулей E32-915T30D, E32-868T30D или E32-433T30D мощность задается так: 00 — 30 dBm или 1 Вт (установлена по умолчанию) 01 — 27 dBm или 501 мВт 10 — 24 dBm или 251 мВт 11 — 21 dBm или 126 мВт Если у вас модули E32-915T20D, E32-868T20D или E32-433T20D, то мощность будет ниже: 00 — 20 dBm или 100 мВт (установлена по умолчанию) 01 — 17 dBm или 50 мВт 10 — 14 dBm или 25 мВт 11 — 10 dBm или 10 мВт Напомним, что выходная мощность передатчика модуля не должна превышать максимально разрешенную в вашей стране для выбранной частоты передачи (номера канала). Кроме того, повышение выходной мощности ведет к повышенному расходу электроэнергии. Для конфигурирования модулей E32 и их совместного использования с микрокомпьютером Repka Pi соберем стенд, показанный на рис. 5. Рис. 5. Подключение модуля LoRa E32 к микрокомпьютеру Repka Pi На рис. 6 показана схема подключения контактов радиомодуля E32 к порту GPIO микрокомпьютера Repka Pi. Для Raspberry Pi нужно точно такое же подключение. Рис. 6. Подключение контактов E32 к порту GPIO Repka Pi Обратите внимание, что питание на модуль E32 подается отдельно, что особенно важно при высоком уровне мощности передатчика. В макете мы использовали понижающий стабилизатор напряжения на базе AMS1117, но подойдет любой аналогичный. Выводы M0 и M1 модуля E32 подключены к контактам 13 (PA9) и 15 (PA10) платы Repka PI, соответственно. Напомним, что эти выводы задают режимы работы модуля. Линии приема данных модуля RXD и передачи данных TXD нужно подключить к контактам 8 и 10 платы Repka PI, соответственно. Контакт 8 соответствует UART0-TX, а контакт 10 — UART0-RX микрокомпьютера. То есть RXD модуля подключается к UART0-TX микрокомпьютера, а TXD модуля — к UART0-RX микрокомпьютера. И, наконец, контакт AUX модуля E32 нужно подключить к контакту 12 (PA6) микрокомпьютера Repka Pi. Напомним, что когда модуль E32 занят выполнением какой‑либо операции, на нем устанавливается нулевое значение напряжения, а когда свободен — напряжение 3,3 В. Рассмотрим упомянутую выше программу чтения текущей конфигурации радиомодуля get‑e32-config.py. Эта программа отправляет через UART модулю E32 команды чтения конфигурации в виде трех байт 0xC1. В ответ она получает шесть байт ответа, и после раскодирования выводит данные конфигурации на консоль. Перед запуском программы необходимо установить библиотеку RepkaPi.GPIO, доступную на GitFlic, а также другие программы и библиотеки. Установка библиотеки RepkaPi.GPIO выполняется следующим образом: Далее клонируйте репозиторий repka-pi-lora: Установите python3-pip, pyserial и программу lm-sensors: Если вы все сделали правильно, то при запуске в консоли программа get-e32-config.py выведет расшифрованные байты конфигурации: Исходный код программы чтения конфигурации можно загрузить из Github (листинг 1). Листинг 1. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/get‑e32-config.py В начале своей работы с помощью функции get_board_type программа определяет, на какой платформе ее запустили (Repka Pi или Raspberry Pi). В зависимости от типа платформы для работы с GPIO подключаются библиотеки RepkaPi.GPIO или RPi.GPIO: Далее импортируются другие необходимые библиотеки и вызываются следующие функции: Функция gpio_init инициализирует нужные нам линии GPIO. После этого функция e32_get_config читает текущую конфигурацию модуля E32, а затем выводит конфигурацию в расшифрованном виде при помощи функции print_e32_config. Перед завершением работы вызывается функция gpio_cleanup для сброса порта GPIO. В зависимости от платформы для работы с UART указывается устройство /dev/ttyS0 (Repka PI) или /dev/serial0 (Raspberry Pi): Исходный код функции e32_get_config приведен ниже: Функция вначале открывает устройство UART, создавая объект ser класса Serial. Далее функция проверяет, что модуль E32 готов принимать данные, вызывая для этого функцию wait_for_aux_pin. Если модуль E32 не занят выполнением какой‑либо операции, программа отправляет в него три байта команды чтения конфигурации b'\xC1\xC1\xC1'. Далее функция e32_get_config снова ожидает готовность E32, дожидается, когда в буфере UART появятся данные, и затем читает шесть байт конфигурации. Байты конфигурации передаются функции print_e32_config, которая извлекает отдельный поля с помощью операций сдвига и логического И. Программа конфигурирования радиомодулей E32 set-e32-config.py позволяет настроить конфигурацию, выбрав ее из заранее сформированного массива (листинг 2). Листинг 2. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/set‑e32-config.py Это удобно, если нужно подготовить несколько узлов, работающих в одном канале, но имеющих разные адреса. Массив конфигураций указан следующим образом: При запуске нужно передать программе set-e32-config.py  номер узла от 1 до 4. После запуска программа выведет на консоль байты  новой конфигурации и запросит разрешение на внесение изменений: Чтобы проверить, изменилась ли конфигурация, используйте описанную ранее программу get‑e32-config.py. Новая конфигурация устанавливается функцией set_config. Для записи в порт UART, подключенный к радиомодулю, выдается команда b'\xC1\xC1\xC1'. Теперь у нас есть все, чтобы создать систему сбора данных с обширных территорий. Мы соберем ее макет с применением радиомодулей E32, подключенных к микрокомпьютерам Repka Pi, Raspberry Pi и Micro:bit (рис. 7). Рис. 7. Система сбора данных на базе Repka Pi Система содержит четыре микрокомпьютера: главный узел, Repka Pi, адрес E; периферийный узел 1, Raspberry Pi, адрес B; периферийный узел 2, Micro:bit, адрес С; периферийный узел 3, RepkaPi, адрес D Главный узел отправляет поочередно запросы на периферийные узлы и получает в ответ от этих узлов данные телеметрии. В макете, показанном на рис. 7, узел 1 возвращает температуру CPU микрокомпьютера, узел 2 — температуру окружающей среды, давление, влажность и точку росы, а узел 3 — температуру CPU и GPU на плате микрокомпьютера. На главном узле запускается программа send‑request‑e32.py, отправляющая запрос. Адреса отправки запросов и ответы выводятся на консоль, а также записываются в файл hosts_data.json: Вы можете запускать эту программу периодически с помощью crontab, например, раз в 15 минут или с другим актуальным для вас интервалом времени. Исходный код программы send-request-e32.py, отправляющей запросы на периферийные узлы для получения телеметрии, приведен в листинге 3. Листинг 3. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/send‑request‑e32.py После инициализации GPIO программа вызывает функцию get_nodes_data, которая получает данные телеметрии от периферийных узлов и сохраняет их в JSON‑файле при помощи функции save_nodes_data_to_file: Функция get_nodes_data отправляет по очереди на все периферийные узлы команду получения телеметрии, вызывая send_cmd. Данные телеметрии форматируются для последующего преобразования в JSON при помощи функции format_node_data: И, наконец, функция save_nodes_data_to_file преобразует данные в формат JSON, выводит их на консоль и записывает в файл: Функция send_cmd отправляет в радиомодуль сначала адрес периферийного модуля, а затем строку 'getData \n': Данные от периферийных узлов приходят в виде строки значений, разделенных точкой с запятой. Эти данные декодируются и разделяются при помощи функции split, а затем сохраняются в файле при помощи функции save_nodes_data_to_file. Функция format_node_data позволяет задать различный набор названий параметров для каждого узла. На периферийных узлах с микрокомпьютерами Repka Pi и Raspberry Pi запускается программа get-request-e32.py (листинг 4). Листинг 4. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/get‑request‑e32.py Эта программа ожидает в цикле прихода от центрального узла нашей системы сбора данных команды в виде строки 'getData \n'. В ответ на эту команду программа получает данные телеметрии, а затем отправляет их на центральный узел по радиоканалу. Цикл ожидания запускается после инициализации GPIO функцией wait_for_cmd: В качестве второго параметра этой функции передается адрес центрального узла, по которому нужно отправить ответ. Цикл выглядит следующим образом: С помощью метода ser.readline выполняется ожидание данных из радиоканала. Когда данные появляются, они дочитываются при необходимости повторным вызовом этой функции, а затем декодируются. Если в декодированных данных содержится строка 'getData', программа получает температуру CPU и GPU (GPU только для Repka Pi) функцией get_sensor_temperatures. Далее программа выводит через UART в радиомодуль вначале адрес центрального узла, а затем закодированные данные. Температура измеряется при помощи утилиты sensors, которую вы установили на периферийные узлы. Один из периферийных узлов создан с использованием микрокомпьютера Micro:bit. Код программы для узла 1 приведет в листинге 5. Листинг 5. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/microbit‑lora‑net‑host1.hex Вы можете загрузить этот код в редактор Microsoft MakeCode, а потом записать на диск микрокомпьютера Micro:bit, подключенного через USB. На рис. 8 показана первая часть программы microbit‑lora‑net‑host1.hex. Рис. 8. Программа microbit‑lora‑net‑host1.hex (часть 1) На этапе инициализации блок при начале  выводит на дисплей строку E32 Loranet Host 1, а затем инициализирует модуль E32, порт UART и погодную станцию BMP280. На светодиодную панель микрокомпьютера выводится цифра 1. Блок on e32radio received получает управление при поступлении команды от центрального узла. Если эта команда содержит строку «getData», блок E32 Send string  отправляет по указанному адресу на центральный узел данные от погодной станции. Эти данные возвращает функция getWeatherData (рис. 9). Рис. 9. Программа microbit‑lora‑net‑host1.hex (часть 2) Подробнее о работе с E32 с помощью Micro:bit вы можете прочитать в статьях: DIY: передаем данные на километры с помощью контроллера Micro::Bit и радиомодуля EBYTE LoRa (Часть 1); DIY: передаем данные на километры с помощью контроллера Micro::Bit и радиомодуля EBYTE LoRa (Часть 2) Из данной статьи вы узнали о том, как с помощью радиомодулей EBYTE E32 LoRa и микрокомпьютеров (на примере Repka Pi, но это общий принцип, подходящий для любых подобных одноплатников, в которых имеется порт UART и GPIO, также поддаются интеграции с EBYTE E32 LoRa) можно создать систему сбора данных на обширной территории, измеряемой километрами. Даже если там нет доступа к сети интернет. Мы с Вами научились конфигурировать радиомодули и использовать их в фиксированном режиме, когда можно передавать данные на узлы по их адресам. Подключая к периферийному 40 pin разъёму Repka Pi через порты GPIO, I2C, SPI и UART различные сенсоры и исполнительные устройства, можно собирать довольно сложные системы управления и/или сбора данных. Также приводим ссылки на ресурсы проекта Repka Pi: Официальный сайт проекта Repka Pi и там же куча дополнительной информации, прошивки, чертежи, исходники бинарники DT, блог и что важно - интернет магазин с ценами на все комплектации Репки ощутимо ниже, чем на плэйс маркетах. Официальный Телеграм канал проекта Repka Pi. Группа обсуждения и комментариев к постам официального канала в Телеграм проекта Repka Pi - там можно задать актуальные вопросы и пообщаться с единомышленниками, которые тоже увлекаются одноплатными компьютерами вообще и Репкой в частности. Официальное сообщество в ВК компании разработчика, где периодически появляются новости проектов разработчика проекта, в том числе и Репки. Предыдущая статья о проекта, где было подробнее рассказано тестах разных MicroSD, клонирование SD карт, создание и клонировании образов SD карт c рабочей прошивкой. Эта статья целиком написана и свёрстана Александром Фроловым. Александр является автором материалов, мы лишь выполнили постановку задачи и незначительную редактуру материала. Связываться с целью благодарности или уточнения вопросов с Александром можно в его Телеграм-аккаунте, который приводим с его согласия. Будет верным сказать, что именно благодаря такому участию в проекте, а так же поддержке и помощи со стороны сообщества, проект Repka Pi на данный момент активно развивается и получает шанс встать на ноги, окрепнуть и набрать силу, становясь одним из популярнейших проектов для обучения, малой автоматизации и разработки разнообразных встраиваемых решений. Раз Вы читаете эти строки, значит статья Вас заинтересовала и Вы дочитали её до конца. Спасибо Вам! Ставьте Ваши оценки и пишите в комментариях о чём бы Вы хотели ещё прочитать в этом цикле статей о применении одноплатного компьютера Repka Pi Российской разработки и производства, о применении с ним разных видов датчиков, исполнительных устройств и устройств ввода и вывода информации, а может и о чём то ещё. Удачи Вам и Вашим проектам - как рабочим или образовательным, так и просто Вашим любимым DIY проектам!