Русский
Русский
English
Статистика
Реклама

Raspberry

CCTV на базе Raspberry Pi. Часть первая и, возможно, последняя

16.03.2021 16:20:24 | Автор: admin

Привет, коллеги!

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

Итак, наконец у меня дошли руки просверлить/проштробить/собрать/накодить/отладить и запустить видеонаблюдение на базе малинок.

Ничего инновационного в проекте нет, просто в удовольствие и с некоторой экономией.

Задействованы

  • две старушки малины 1B с камерами первого поколения, которые лежали уже лет семь и просились помочь им обрести хоть какой-то смысл существования

  • относительно новая малина 3B и отдельный USB HDD к ней

  • всякая сетевая и питательная инфраструктура

Что особенно интересного было в проекте

Каждая из старушек гонит по TCP с помощью raspivid два потока на свежую малинку.

  • первый поток это H.264 ES, сырой видеопоток.

  • второй поток это, о чудо, motion vectors кодека H.264, которые raspivid может отдельно отдавать.

Свежая малинка работает как сервер (NodeJS), принимающая потоки от старушек (по два с каждой).

  • всё что прилетает в видеопоток дампится в файл на накопитель (с периодическим стартом нового файла). Разумеется, для каждой камеры отдельно.

  • всё что прилетает в поток векторов, используется для детектирования движения (работает весьма неплохо!). Тут мне сильно помогла репка с питониевым кодом для визуализации (https://github.com/janblumenkamp/raspivid_motionvectors), изучив код которой, я и сделал на NodeJS "детектор" движения без всяких этих ваших нейро. Посмотрим, как будет себя вести.

Также открываем на сервере для каждой малины один исходящий TCP-порт, к которому может подключиться, например:

  • mplayer в связке с ffmpeg для отображения на десктопе

  • ffmpeg, который будет оттуда забирать поток и пихать его в rtmp-модуль nginx для веб-стриминга

Волнообразную засветку из-за ККЛ удалось устранить с помощью --flicker, но с параметром auto, а не 50hz.

Длинные шлейфы (100см) дают тёмную картинку, что исправляется с помощью --digitalgain, но удалось обойтись меньшей длиной.

В качестве основы для корпусов я брал прекрасную работу https://www.thingiverse.com/thing:2746186, но пришлось доработать:

  • удлинить корпус камеры, чтобы она всё-таки была больше похоже на камеру, во избежание, так сказать

  • переработать основание под вставку магнитов, что позволяет удобно настроить позицию камеры на металле, а потом уже прифигачить на клей

  • заменить шаровую опору на несколько колен с винтовым соединением, потому что:

    • пластик усыхает и шар начинает болтаться

    • несколько удобнее позиционировать

Подробнее..

Аркадный автомат своими руками (ретрогейминг с динамической подсветкой)

19.03.2021 10:13:30 | Автор: admin

Всем привет! Любите ли вы играть в игры? А точнее в классику игровой индустрии? Классические, ретро-игры на NES, Sega? Или, быть может, скучаете и хотели бы иметь свой кусочек 80х - настоящий аркадный автомат? Вот я хотел и сделал такой универсальный автомат своими руками.

Честно говоря, идея совсем не нова. Семь лет назад я уже рассказывал на Habr'е как сделать свой ретро-игровой центр на основе Raspberry Pi. Тогда я ограничился лишь настройкой малинки, в перспективе подумывая добавить к малинке полноценные кнопки и корпус. Но на том дело и кончилось.

На Хабре были и другие достойные публикации о создании игрового автомата:

Итак, значит интересует тема своей, "домашней" аркады многих людей. Поэтому, поделюсь и своей разработкой.

Проектирование

Для начала нужно определиться с идеей. К началу проекта я знал только два тезиса:

  • Сердцем автомата будет Raspberry Pi

  • У автомата будут полноценные аркадные кнопки, но всё-таки неплохо иметь возможность подключения геймпадов и клавиатуры с мышью.

Для автомата так же нужен какой-нибудь дисплей. В идеале для ретрогейминга нужно использовать экран 4:3, но такого у меня не осталось, специально покупать - это вступать с конфронтацию с внутренней жабой. А вот неплохой альтернативной является использовать матрицу от ноутбука. У меня лет восемь как лежит ноутбук Fujitsu Siemens Amilo 3438G со сгоревшей видеокартой и уже не помню куда выпотрошенной памятью и жёстким диском. Так как дисплей только 17 дюймов, ради интереса в проекте можно было бы использовать и динамическую подсветку, визуально расширяющую размер экрана.

Вооружившись этим знанием идём рисовать макет. Для отрисовки я использовал SketchUp.

Нарисовать мне, очень далекому от 3D графики человеку, макет автомата в SketchUP - дело одного вечера. Конечно, точность этого инструмента не самая идеальная, но в целом прикинуть с точностью до 1-2 сантиметров как будет выглядеть будущий автомат - можно. Натягиваем текстуры, любуемся.

В качестве материала я буду использовать мебельные щиты (дерево, сосна) - из-за лёгкости её обработки. Но, в целом никто не мешает использовать МДФ, ДСП или фанеру. Автомат я планирую делать из двух частей - из верхней (собственно автомата, "bartop") и нижней - стола. Высоту стола я выбрал равной 90 см., что даст высоту до кнопок в 105 см. Здесь стоит сказать, что высота стола зависит от роста того, кто будет играть в автомат, и от расположения, наклона экрана и панели с кнопками. То есть, как правило, высота панели с кнопками колеблется от 85 до 115 см от пола. Экран лучше ставить напротив лица играющего, но в случае с bartop это взаимоисключающие вещи, и поэтому делаем наклон экрана в 20-30 градусов, а наклон панели в половину этого значения. Экран в обязательном порядке закрываем оргстеклом - во-первых между матрицей и панелью у меня будет щель в 5 сантиметров по периметру для подсветки, а во-вторых это просто эстетично.

Заказываем щиты, уголки, саморезы, рояльную петлю (250мм) для люка обслуживания, замочек для дверцы, сетку, оргстекло и краску в строительном магазине (у меня вышло по расчётам 8 метров панелей с учётом обрезков, пачка саморезов 3.5х16мм 200шт, и уголков 30х30мм штук 20). Все панели я буду красить в чёрный цвет, а торцы панелей, канты - в цвет "фуксия". В идеале на канты следовало бы надеть ПВХ-бордюр. Но я, увы, не нашёл нужного мне цвета. Так что обойдусь краской. Внутреннюю часть панелей я тоже в обязательном порядке крашу чёрным цветом, так как из-за щели для подсветки внутренность просматривается, и для эстетики важно всё держать в одном стиле.

Так же обязательно подготавливаем шаблоны для точной вырезки боковых панелей и панели для кнопок. Я использовал готовые шаблоны Starcade (с небольшими изменениями, правда - чуть уменьшил размер вывески, плюс добавил отверстия для hotkey и для выключателя). Кстати, почитатайте оригинал, там годный DIY на английском.

Столярка

Теперь режем щиты.

Сверлим отверстия под кнопки и динамики (перовым сверлом или кольцевой пилой). Для кнопок нужны отверстия диаметром в 24мм, для стика - 14мм, для динамиков - в зависимости от их размеров (у меня - 30мм).

Обязательно ошкуриваем канты. Боковые канты и торец панели с кнопками закругляем.

Красим заготовки чёрной краской (в зависимости от краски в один или несколько слоёв, обязательно дожидаясь полного высыхания, чтобы не получить вздутия и трещин).

Далее красим канты краской-лаком "фуксия".

По окончанию столярных и рлакокрасочных работ можно (не обязательно) высохшие панели и канты (которые не будут оклеены плёнкой) покрыть яхтным лаком для долговечности и износостойкости.

Электрика и электроника

По-началу у меня была устойчивая идея сделать автомат "из хлама" - из того, что было - начиная от старой матрицы, до старой Raspberry Pi v1.0 которая собсттвенно и работала "ретро-игровым центром" ещё семь лет назад. Но затем пришло понимание, что проект получается не сильно бюджетным (даже в части корпуса), и раз делать автомат, то нужно его делать качественно. И раз свою внутреннюю жабу мне придётся потеснить, то заодно стоит и обзавестись новой Raspberry Pi, потому как, исходя из опыта использования первой ревизии она не сильно подходит для работы в аркадном автомате. Во-первых, на ней либо не работают, либо сильно тормозят игры на MAME (собственно с игровых автоматов), так и многие игры с N64 и PS1 неиграбельны. Во-вторых, настройка Hyperion для динамической подсветки превращается в боль, так как в старой RetroPie нужных библиотек нет, а при попытке оные установить оказывается, что многие репозитарии со старыми версиями мертвы. А новая RetroPie, даже со сборками под старые ревизии сами по себе тормозят. Поэтому берём и заказываем Raspberry Pi 4 на 4Gb, обязательно в дополнение взяв радиаторы (можно с вентиляторами) для оной. Берём microsdhc карту (например на 64Gb), адаптер питания USB type-C на стабильные 3-4А. А так же провод microHDMI - HDMI для подключения к матрице.

Теперь аккуратно разбираем ноутбук.

Извлекаем оттуда матрицу, узнаём её точное название.

Заказываем LVDS-драйвер для матрицы ноутбука. Обязательно сверяемся с описанием, что LVDS-драйвер поддерживает нашу матрицу, обязательно уточняем у продавца, что это так. На Aliexpress полно разных вариаций плат, часто отличающихся набором входов\выходов. Для автомата собственно нам нужен вход HDMI, выход на LVDS интерфейс матрицы, выход на подсветку матрицы и крайне желательно выход на динамики (т.е. выход со внутреннего усилителя на два динамика). В моём случае плата содержит 4-пиновый разъём с выходом под два одноваттных динамика по 8 Ом каждый. В комплект должен идти так же блок питания на 4 ампетра 12 вольт, но если нет, заказываем и его.

Заказываем кнопки. Выбор сейчас огромный, можно найти под любой дизайн и вкус. У меня например такие.

Берём два метра адресной LED-ленты SK9822 (или APA012) и адаптер питания к ней. В зависимости от плотности светодиодов выбираем блок питания от 2 до 6 ампер. Для удобства ещё возьмём уголки для соединения ленты на поворотах.

Так же берём 12-вольтовую ленту метр-два под вывеску. Я брал самую дешевую и трансформатор на 15Вт к ней (SMD3528 60 диодов\4.8вт на метр, 2м).

Ну и по мелочи закупаем:

В итоге наш автомат будет всегда включен в розетку, далее по ключу на фронтальной панели его можно будет "завести". От главного выключателя питание идёт на обычную 220в розетку, в которую подключены все остальные адаптеры. 12-вольтовый адаптер (15-ваттный) запитан от розетки дополнительным проводом (к клеммам).К этому адаптеру подключаем светодиодную ленту и вентилятор.

Когда придёт плата LVDS-драйвера, подключаем её к питанию и матрице (соединяем LVDS и питание подсветки), а так же подключаем HDMI к источнику изображения (той же малинке). Если всё подключено правильно, то матрица должна сразу завестись и появится изображение. Возможно, немного нужно будет откалибровать цвета и яркость. Всё делаем через пульт. Так же берём и подключаем к разъему помеченному как CN20 на плате штекер JST, не забыв припаять к нему два аудипровода, а к ним, соблюдая полярность, два динамика. В моей плате разводка такая:

[ +LEFT, GROUND, GROUND, +RIGHT ]

Для того, чтобы подключить динамическую подсветку, режем ленту SK9822 на четыре части и соединяем уголками. К разъемам питания на ленте подключаем с правильной полярностью разъем быстрого соединения (затем соеденим с 5В блоком питания), а контакты на самой ленте подсоединяем к GPIO 19 и 23 пинам на малинке, не забыв обязательно еще соединить землю, чтобы избежать мерцания ленты.

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

Настраиваем софт

За прошедшие года RetroPie стала конфеткой и почти настроек не требует - достаточно прошить образ системы и подключить любые контроллеры - и автомат готов. Но всё-такие кое-что нужно рассказать, учитывая наши дополнения.

Скачиваем образ RetroPie (под четвёртую малинку). Прошиваем нашу microsd карточку например BalenaEtcher или Win32Imager (если используем Windows, конечно). Выходим в консоль. Далее устанавливаем статический адрес для нашей малинки (чтобы было удобнее перекидывать ROM'ы):

sudo nano /etc/dhcpcd.conf

Добавляем\правим строки на наш желаемый IP и IP наш роутер

interface wlan0 # или eth0 если малинка подключена по ethernetstatic ip_address=192.168.0.66/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1. 8.8.8.8

Так же бязательно включаем SSH (для закачки ROM'ов через сеть) и SPI (для управления подсветкой):

sudo raspi-config

Идём в Interfacing Options:

Включаем SSH и SPI, сохраняем и перезагружаем малинку.

Динамическая подсветка

Теперь устанавливаем Hyperion для управления подсветкой. На выбор можно поставить "старый" Hyperion или Hyperion NG.

Чтобы поставить старый достаточно использовать установочный скрипт, скачиваем его:

wget https://github.com/hyperion-project/hyperion/blob/master/bin/install_hyperion.sh

На Raspberry Pi 3 скрипт заведётся, а вот про четвёртую малинку скрипт уже не знает, поэтому правим его:

<...>CPU_RPI=`grep -m1 -c 'BCM2708\|BCM2709\|BCM2710\|BCM2835\|BCM2711' /proc/cpuinfo` # добавляем BCM2711<...>RPI_3=`grep -m1 -c BCM2710 /proc/cpuinfo`RPI_4=`grep -m1 -c BCM2711 /proc/cpuinfo`  # добавляем эту строчку<...>elif [ $CPU_RPI -eq 1 ] && [ $RPI_3 -eq 1 ] && [ $RPI_4 -eq 1 ]; then  # добавляем RPI_4<...>

Делаем скрипт исполняемым:

sudo chmod +x install_hyperion.sh

Запускаем:

sudo ./install_hyperion.sh

Разницы для Hyperion между третьей и четвёртой малинкой нет, поэтому по факту мы использовали ту же сборку, что предполагается использовать на третьей. Далее останется настроить Hyperion через Hypercon (например на Хабре есть статья на эту тему).

Альтернативно, что более удобно, используем новый Hyperion NG. Но, правда, его нам придётся собрать. Для этого выполняем:

# устанавливаем зависимостиsudo apt-get update    sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev zlib1g-dev    sudo apt-get install libraspberrypi-dev  # устанавливаем сам Hyperion NGgit clone --recursive https://github.com/hyperion-project/hyperion.ng.git hyperion cd hyperion mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. make -j $(nproc) sudo make install/stripcd ..cd ..# смотрим на всякий случай, куда поставился Hyperionwhich hyperiond# далее полный путь к нему нам пригодится

Теперь нужно прописать Hyperion NG как сервис, чтобы он загружался с нужной конфигурацией при загрузке малинки. Для этого создаём файл hyperion.service с содержимым:

[Unit]Description=Hyperion Systemd service[Service]Type=simpleUser=rootGroup=rootUMask=007ExecStart=/usr/local/bin/hyperiond /etc/hyperion/hyperion.config.jsonExecReload=/bin/kill -HUP $MAINPIDRestart=on-failureTimeoutStopSec=10[Install]WantedBy=multi-user.target

И (пере)запускаем сервис:

# убеждаемся, что hyperion не запущен, если запущен, останавливаем и убираем службуsystemctl status hyperion.servicesudo systemctl stop hyperion.servicesudo systemctl disable hyperion.service# добавляем hyperion в качестве сервиса, чтобы он грузился при загрузкеsudo cp hyperion.service /etc/systemd/system/hyperion.service sudo systemctl start hyperion.service

Теперь Hyperion NG будет доступен через web-интерфейс. Идём туда, вбив в браузере:

 http://192.168.0.66:8090

В Configuration -> LED Hardware -> LED Controller ставим:

  • Controller type == apa102

  • RGB byte order == BGR

Обязательно сохраняем, идём в Configuration -> LED Hardware -> LED Layout и выставляем нашу конфигурацию светодиодов, не забывая о том, что светодиоды располагаются на за матрицей, а потому они будут для зрителя инвертированы. Собственно ставим количество светодиодов с каждой стороны, а так же положение первого светодиода и порядок ленты. Сохраняем.

Проверяем, что в Configuration -> Capturing Hardware -> Platform Capture -> Type == DispmanX, если надо, делаем изменения, в том числе и в Image Processing.

Так же можно в Configuration -> Effects -> Boot Effect/Color поставить эффект. Пока грузится EmulationStation красивый эффект подчеркнёт вау-эффект от загрузки (например, ставим эффект и 20000-40000 миллисекунд эффекта - как раз на время загрузки до меню).

На этом всё, идём в Configuration -> General и сохраняем конфигурацию. Заодно можем конфигурацию экспортировать и где-нибудь сохранить. Проверяем что в /etc/hyperion/hyperion.config.json сохранились наши последние изменения и настройки. Если нет - то копируем экспортированную конфигурацию и перезапускаем малинку.

sudo shutdown -r now

Внимание! Захват экрана происходит только при наличии подключенного экрана. Если вы попытаетесь посмотреть лог Hyperon'a с отключенным экраном (отключенным HDMI), то увидите пачку ошибок DispmanX. Сразу после подключения всех проводов захват изображения начнёт работать, а светодиоды динамически подсвечиваться в зависимости изображения на экране.

Настройки RetroPie

По поводу настроек оболочки - дело конечно вкуса, да и написано куча статей на эту тему, поэтому я ограничусь лишь парой "улучшений".

В-первых, добавим музыку в меню. Для этого устанавливаем mpg123:

sudo apt-get install mpg123

Добавляем старт музыки при старте оболочки:

sudo nano /opt/retropie/configs/all/autostart.sh

Добавляем в конец:

while pgrep omxplayer >/dev/null; do sleep 1; done(sleep 10; mpg123 -Z /home/pi/bgm/*.mp3 >/dev/null 2>&1) &

Создаём, если их нет, два файла:

sudo nano /opt/retropie/configs/all/runcommand-onstart.sh

Внутри пишем:

pkill -STOP mpg123

Второй:

sudo nano /opt/retropie/configs/all/runcommand-onend.sh

Пишем:

pkill -CONT mpg123

Делаем файлы исполнимыми:

sudo chmod a+x /opt/retropie/configs/all/runcommand-onstart.shsudo chmod a+x /opt/retropie/configs/all/runcommand-onend.sh

Правим .bashrc:

sudo nano /home/pi/.bashrc

Перед # RETROPIE PROFILE END добавляем:

[[ $(tty) == "/dev/tty1" ]] && pkill mpg123

Создаём папку:

mkdir /home/pi/bgm

И теперь туда можем накидать немного фоновой музыки.

Так же неплохо будет добавить splashscreen (видео при загрузке автомата). Копируем небольшое видео mp4 (10-40 секунд) в /home/pi/RetroPie/splashscreens/ . В меню RetroPie (EmulationStation) идём в Configuration -> Splash Screens выбираем это видео (Choose splashscreen-> Own/Extra splashscreens (from /home/pi/RetroPie/splashscreens)).

Теперь на консоль копируем ROM'ы игр. Делаем это через сp/scp/winscp (для игр с самой малинки/linux-unix/windows систем). Соответственно перекидываем все игры для каждой консоли в свои папки, игры NES в nes, Sega Genesis - в megadrive, а аркадные игры (MAME) в arcade.

В случае игр для аркадных автоматов помимо самих ROM'ов так же в папку закидываем BIOS'ы к этим играм. Например BIOS'ы можно скачать с Emu-Land. Вообще с аркадными играми больше проблем, так как работоспособность игры чаще будет зависеть от правильного BIOS для игры и от вообще способности MAME правильно поддерживать ту или иную игру. Для некоторых игр, возможно, придётся установить дополнительные эмуляторы\версии MAME. Чтобы сделать это идём в RetroPie Setup -> Manage Packages -> Manage optional packages (или Manage experimental packages)

Чтобы игры в меню выглядели красиво, нужно запустить scraper. Отличный вариант это сделать через skyscraper. Идём в RetroPie Config -> Manage Packages -> Manage optional packages, выбираем skyscraper, Install from pre-compiled binary. Дальше опять через консоль:

sudo ./RetroPie-Setup/retropie_setup.sh

Идём в Configuration / Tools -> Skyscraper . Выбираем GATHER and cache resources. И теперь ждём так долго, как много игр в нашей коллекции.

Так же было бы неплохо добавить видео скринсейверы. Для этого нужно к каким-нибудь играм дописать путь в параметре video. Если в опциях меню Start выставлено UI settings-> Screensaver settings-> Screensaver behavior-> Random-video , то автомат будет проигрывать случайные видео, которые указаны в параметре video. Конечно можно для каждой игры скачать через scrapper своё уникальное видео, но сколько это места займёт? Поэтому копируем куда-нибудь (например в /home/pi/RetroPie/screensavers/ ) одно или несколько видео-скринсейверов (mp4), и просто открываем настройки какой-нибудь консоли с играми (например ZX Spectrum, кхм... дэээ... "консоль"):

sudo nano /opt/retropie/configs/all/emulationstation/gamelists/zxspectrum/gamelist.xml

И добавляем путь к видео (например /home/pi/RetroPie/screensavers/screensaver_2.mp4) в параметр video:

<?xml version="1.0"?><gameList><game><path>/home/pi/RetroPie/roms/zxspectrum/Arkanoid (1987)(Imagine Software)[tr pt].z80</path><name>Arkanoid (1987)(Imagine Software) [tr pt]</name><thumbnail /><image>/home/pi/.emulationstation/downloaded_media/zxspectrum/screenshots/Arkanoid (1987)(Imagine Software)[tr pt].png</image><marquee>/home/pi/.emulationstation/downloaded_media/zxspectrum/marquees/Arkanoid (1987)(Imagine Software)[tr pt].png</marquee><video>/home/pi/RetroPie/screensavers/screensaver_2.mp4</video><rating>0.75</rating><desc>...</desc><releasedate>20020101T000000</releasedate><developer>Taito</developer><publisher>Imagine</publisher><genre>Action</genre><players>1</players></game>

Ну ещё устанавливаем и настраиваем темы (ES Themes), например по цветовой гамме ко мне вписался отлично cyberpunk. Так же можно например вместо runcommand показывать изображения. И ещё... ладно, хватит! Тюним, настраиваем, сохраняем, выключаем.

Собираем воедино

Одной из визуальных доминант нашего автомата будет его визуальное оформление, а если точнее, то наклейки на корпус. Для того, чтобы всё получилось красиво, идём в графический редактор, берём изображения и подготавливаем их для макетов в масштабе 1 к 1 с размером печати. Устанавливаем профиль CMYK. В идеальном мире лучше иметь разрешение для печати 250-300 пикселей на дюйм, но, в моём случае, у исходников было разрешение только в 95 пикселей на дюйм, и, опережая события, скажу, что тоже вышло отлично и даже вблизи особого "мыла" нет.

Идём в типографию и заказываем все наклейки на самоклеящейся плёнке. Я выбрал глянцевую плёнку на бумажной основе. Обязательно с ламинацией. Причём это жизненно важно для тех поверхностей, с которыми будут контактировать руки игроков, то есть как минимум для панели с кнопками. Если есть такая возможность, то для панели с кнопками и стиками делаем напольную ламинацию. Альтернативно панель иногда закрывают оргстеклом, но для меня, для домашнего использования это излишне. Так же для вывески можно использовать так называемую транслюцентную плёнку, которая будет пропускать свет. Но, увы, почти все типографии отказались мне печатать маленький кусочек (20х50см), либо за этот маленький кусочек запросили цену, сравнимую со всей остальной печатью вместе взятой. Как показала практика, света двухметровой светодиодной ленты хватает с излишком даже при использовании обычной плёнки, наклеенной на оргстекло. Так что смысла в траслюцентной плётке нет никакого.

Когда плёнка придёт, наклеиваем плёнку неспеша на все поверхности, постепенно выгоняя оставшийся воздух мягкой тряпочкой. Излишки плёнки (по контуру) обрезаем максимально отрым ножом, или, что лучше, лезвием бритвы.

На оклеенную панель с кнопками собственно устанавливаем кнопки. Раскучиваем гайки и закручиваем обратно в панель. Вставляем кнопки, а к кнопкам подсоединяем четыре провода: два на кнопку и два на подсветку. Плюс и минус. Прикрепляем на саморезы стики, и затем стики и все кнопки вставляем 4-пиновыми разъемами в энкодеры - с K1 по K12. Порядок не важен, всё равно всё затем конфигурируется в EmulationStation при загрузке. Единственной разницей между игроками будет одна дополнительная кнопка у первого игрока - hotkey. Для второго игрока такой кнопки нет (да и в-общем она и не нужна).

Вообще если взглянуть на энкодеры, то помимо подключения ещё четырёх кнопок (для 10-кнопочного варианта (+ две кнопки Select и Start)) есть возможность подключить ещё четыре тумблера - turbo, auto, mode, clear, а так же есть четыре двух-пиновых разъема под 2-х контактный джойстик (вверх-вниз-влево-вправо), плюс вынесенный разъем питания. Но проводов в комплекте, ни самих тумблеров нет. Ну а выход на малинку - это разъем и провод miniUSB - USB. Так что подключаем провода с двух энкодеров в разъем USB Raspberry Pi.

И, наконец, собираем корпус. Здесь всё просто. Берём шуроповёрт, уголки, и саморезы и все смежные поверхности собираем между собой.

Матрица прикреплена к передней панели на тонких блестящих алюминиевых профилях.

В задней панели у меня сделан люк на рельсовой петле с замком, где заодно установлен вентилятор. 120мм вентилятор я использовал от старого компьютера (не покупал новый), и он гремит , как ржавое ведро с гвоздями при старте, но после минуты работы его становится почти не слышно. Зато охлаждает прекрасно. Ну и в ретро-тематку отлично вписывается Вообще люк нужен как для удобства сборки, так и для обслуживания в случае необходимости всех электронных компонентов внутри. Все компоненты и провода закреплены на хомутах. Да, некоторые из них просматриваются через щель, но эо даже придаёт тёплый ламповый оттенок "киберпанковости".

Вырезаем стекло на переднюю панель (очень аккуратно - оргстекло хрупкое). Ставим стекло на фронтальную панель. Стекло можно поставить на саморезы или клей, но чтобы не портить внешний вид у меня стекло просто прижимается нижней планкой вывески.

В самую последнюю очередь устанавливаем стекло на витрину, предварительно спрятав под него динамики, вклеенные в нижнюю планку вывески. Динамики закрываем сеткой. Ну, вот собственно автомат и готов. Запускаем, настраиваем кнопки (если не настроили раньше) и играем.

Disclaimer: все приведённые в статье ссылки даны исключительно для ознакомления и указания тех или иных деталей, которые я использовал для сборки автомата (или их аналогов). Никакого рекламного характера они не несут и никто мне не платил за рекламу (а могли бы). И, хотя как минимум один из ретейлеров присутствует на Хабр'е, никакого я отношения к ним не имею.

Исходя из цен на момент покупки стоимость автомата без учёта работ, инструментов (пилки, свёрла), электричества, а так же матрицы ноутбука составила: ~24000 рублей, что сопоставимо со стоимость современной приставки или готового автомата с AliExpress на PandoraBox. Но... сделать что-то своими руками и уникальное - это бесценно ;)

Подробнее..

Модульный ПК PocKit универсальная система-конструктор для DIY-проектов и не только. Теперь с Raspberry Pi на борту

26.03.2021 22:10:30 | Автор: admin

Модульная техника всем хороша, при условии качественной сборки, конечно. Преимуществ много, основное: нет нужды менять свое устройство раз в 2-3 года. Не устраивает какой-то блок апгрейдишь его и все. Аналогичным образом обстоит дело и с ремонтом: вышедший из строя элемент можно заменить быстро и без помощи сервисных центров.

К сожалению, разработка модульных устройств дело не самое простое и, скорее всего, не самое выгодное. Об этом можно судить по большому количеству проектов модульных смартфонов и ноутбуков, которые были на слуху, а потом внезапно закрылись. Самый яркий пример Project Ara от Google. Но идея создания модульного устройства жива. Более того, недавно появился проект компьютера-Lego, который реализован в виде миниатюрного устройства Project PocKit. А еще оно работает на базе Raspberry Pi.

Что это за устройство?


Модульный компьютер находится в разработке с 2019 года. Долго, но и команда небольшая, плюс это пока некоммерческий проект. Но проект, по крайней мере, прототип, уже готов. 18 марта команда представила видео с демонстрацией работы устройства.


И не только базы, но и множества модулей, их более десятка. К текущему дизайну команда пришла не сразу пришлось перебрать множество вариантов. Но то, что есть сейчас, выглядит очень неплохо. И да, у девайса есть прототип с собственными мозгами, но есть и вариант, где роль вычислительного центра выполняет миниатюрный ПК Raspberry Pi.

А что там с модулями? Ведь их нет, наверное


Достоинство системы в том, что ее можно использовать и в качестве десктопного ПК, и как наладонник конфигурировать девайс можно весьма смело. Корпус печатается на 3D-принтере, так что его несложно заменить. На верхней панели выводятся контакты, к которым при помощи магнитного замка крепятся модули просто пристегиваются. И модули уже готовы, это не просто фантазии авторов проекта.

Сейчас готовы такие модульные элементы:

  • Вентилятор.
  • HDMI.
  • USB-порты.
  • Камера.
  • Картридер для SD.
  • Аудиопорт.
  • Температурный сенсор.
  • LCD дисплей.


Еще одно достоинство в том, что с девайсом можно проводить эксперименты, которые авторы проекта назвали быстрым аппаратным прототипированием. Если есть опыт и знания, можно попробовать адаптировать для модулей сторонние компоненты например, камеру или экран смартфона.


Каждый модуль это отдельная плата, размещенная в корпусе, напечатанном на 3D-принтере. Система магнитов держит все это надежно: при падении модули не должны разлететься. Но, конечно, работа еще не закончена авторы проекта планируют создать еще больше модулей.

Поговорим о производительности


Она зависит от самого главного модуля вычислительного блока. По словам разработчиков, ядро оснащено STM32 + ESP32 двухъядерным процессором. Увеличить производительность можно, в частности, благодаря Raspberry Pi. Базовый модуль используется для базовых же операций, а вот для запуска десктопных приложений без малинки не обойтись.


Если нужно работать с ОС Linux, то это можно сделать лишь с использованием Raspberry Pi.

Насколько можно понять, разработчики используют Raspberry Pi Compute Module 3 с системой на кристалле BCM2837. Но и без малинки система может много чего. Например, фотографировать, подключаться к сети и т.п.


Разработчик показал видео, где PocKit применяется в качестве беспроводного инструмента для сада и даже в качестве автоматического диспенсера для мыла.


Проектов на основе этой системы можно придумать много. В общем-то, если такой конструктор появится в продаже, то его можно будет применять в бизнесе, DIY-проектах, промышленности и т.п.

Без проблем не обошлось


Главная проблема в том, что для поддержания работоспособности большого количества модулей требуется очень сложная материнская плата. Сложность ее выражается в многослойности сейчас используется 6 слоев, но в ближайшем будущем разработчики планируют доработать плату и сделать ее восьмислойной. Это позволит еще сильнее раскрыть потенциал устройства, добавив новые функциональные блоки.

Материнскую плату готовы изготовить немногие компании, которые занимаются производством печатных плат по макетам заказчика. Соответственно, стоимость девайса на основе такой материнской платы низкой быть не может.

Создатель системы пока еще ничего не говорил о цене, ровно как и о сроках выхода. Но судя по тому, что готов не один прототип, а несколько, в продаже девайс появится в ближайшем будущем.

Больше информации о проекте на официальном сайте STM32+Arduino PocKit.

Подробнее..

Перевод Дайте собачке погулять автоматическое открытие двери при помощи Raspberry Pi

06.04.2021 00:08:46 | Автор: admin

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

В этом проекте используется машинное обучение, а именно обнаружение объектов. К счастью, даже если вы не слишком хорошо в нем разбираетесь, это ОЧЕНЬ простой проект для старта. Его основа уже обученная нейросеть, так что не придется тратить часы на то, чтобы получить сотни изображений, а потом обучать на их основе нейросеть.

Что нужно для старта


Raspberry Pi 4 или Raspberry Pi 3 с источником питания.
Карта памяти объемом в 8 ГБ или больше с Raspberry Pi OS.
Raspberry Pi камера и кабель для обнаружения объектов.
Модуль широкоугольного объектива для малинки. Ну или любой другой модуль камеры, который может вам понадобиться все зависит от того, на каком расстоянии от двери будет установлена эта камера.
Динамики с 3,5 мм штекером. Можно использовать и мегафон было бы желание.
Монитор и клавиатура (по желанию) с HDMI и набором кабелей.

Как определить, когда питомец хочет на улицу при помощи малинки


1. Настройте Raspberry Pi. Если не знаете как это сделать, вот туториал.
2. Подключите камеру к малинке.
3. Активируйте камеру при помощи raspi-config. Для этого необходимо зайти под администратором и перейти к Interface Options > P1 Camera.
4. Перезагрузка.



5. Тестируем фокус камеры при помощи команд, указанных ниже. Понятно, что картинка видна только если монитор подключен к ПК. Если используется headless версия rasbian, то нужно использовать scp для отправки изображения на компьютер.

raspistill -o /home/pi/focus.jpg

6. Ставим git. Для загрузки кода и скриптов из удаленного репозитория нужен git (мануал ну очень подробно разжеван, чтобы его могли использовать даже зеленые новички прим. Переводчика).

sudo apt-get update && sudo apt-get -y install git

7. Клонируем репозиторй с нужным кодом в собственную директорию.

cd ~/
git clone github.com/rydercalmdown/pet_detector


8. Устанавливаем зависимости, виртуальное окружение и python зависимости.

cd ~/pet_detector
make install


9. Загружаем заранее обученные модели. В проекте используется модель YOLOv3, обученная на дата-сете COCO. Модель умеет распознавать практически любые объекты в доме и квартире включая котов и собак.

10. Подключаем динамики. Они нужны для проигрывания звука, который укажет на то, что питомец находится в зоне действия камеры. Для тестирования динамиков используем команду

say this is a test


11. Редактируем файл /etc/rc.local для запуска скрипта. Сначала нужно открыть файл при помощи команды sudo nano /etc/rc.local, а затем добавить вот эту строку.

source /home/pi/pet_detector/env/bin/activate && cd /home/pi/pet_detector/src && python app.py &

12. Направляем камеру на дверь. Конечно, если собака или кошка мечутся по квартире, такая настройка не очень помогает. Но если питомец садится и терпеливо ждет то все работает идеально.


13. Выпускаем питомца наружу. Когда собака или кошка дают о себе знать малинка издает звуковой сигнал, так что хозяин может спускаться и выпускать страдальца.

Подробнее..

Перевод Facebook отвлекает от работы? Блокируем его при помощи настенного выключателя

26.04.2021 20:23:29 | Автор: admin

Прокрастинация хорошо знакома каждому из нас. Кто-то отлынивает от работы больше, кто-то меньше, но хотя бы раз в жизни прокрастинировали все. Один из способов убить время серфить в сети, листая любимый сайт или общаясь в социальной сети.

Чтобы узнать количество потраченного напрасно времени, можно установить специализированное приложение, которое покажет, где, сколько и как пользователь провел времени в интернете. Ужаснувшись, обычный человек зачастую либо берет себя в руки, либо блокирует сайт при помощи конфигурационного файла или специального софта. Но мы же на Хабре, а значит, можно выбрать необычный способ. Сегодня мы будем делать троллейбус из буханки хлеба блокировщик сайтов с использованием Raspberry Pi.

В проекте задействуется обычный настенный выключатель и локальный DNS-сервер, запущенный на малинке. Эта система позволяет надежно блокировать пожирателей времени. Один щелчок выключателем и сайт не работает, можно посвятить свое время полезному труду. Второй щелчок любимый ресурс снова онлайн.

Что нам понадобится для проекта


  • Raspberry Pi Zero W, SD Card, блок питания.
  • Два однополюсных выключателя.
  • Распределительная коробка.
  • Пластина с рычажками переключателей.
  • Провода.
  • Отвертки.

Начинаем работу с Raspberry Pi


1. Настраиваем Raspberry Pi Zero W и подключаемся удаленно.
2. Обновляем/устанавливаем git, если ранее это не было сделано:

sudo apt-get update && sudo apt-get install -y git

3. Копируем код из репозитория ниже. Он будет управлять инструментом dnsmasq, нашим локальным DNS:

git clone github.com/rydercalmdown/internet_kill_switch

4. Запускаем команду установки из клонированной директории. Этот шаг позволяет установить все зависимости, инструмент dnsmasq и убедиться, что все работает:

cd internet_kill_switchmake install

5. Убедиться в работоспособности кода просто. Если все хорошо, появится статус Running зеленым цветом:

sudo systemctl status dnsmasq# Use Ctrl + C to exit

6. Запускаем ПО для того, чтобы окончательно убедиться в правильной работе установленного софта:

make run# Use Ctrl + C to exit

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



8. Свободные концы проводов припаиваем к малинке. Порядок пинов не имеет значения. Главное, чтобы один конец был припаян к пину GPIO, второй к земле. По умолчанию нужны пины 18 и 24, но это можно настраивать.



9. Помещаем малинку в выключатель. Он должен быть достаточно крупным, чтобы плата в него поместилась. Прикрепить плату можно нагретым силиконом.



10. Пропускаем кабель питания через отверстие в переключателе и закрепляем оба выключателя в распределительной коробке.




11. После этого закрываем готовую конструкцию и наклеиваем под тумблерами наименование сайтов, которые будем блокировать.

12. Открываем файл src/toggle_switches.py для редактирования и добавляем необходимые адреса сайтов. Вы можете добавлять или удалять переключатели, изменяя список SWITCHES и добавляя новые объекты класса SwitchConfig. Допустимые параметры это номер пина BCM, за которым следует список сайтов, которые нужно заблокировать:

# Example: The switch connected to BCM pin 18 blocks social media, and the switch connected to BCM pin 24 blocks video websitesSWITCHES = [   SwitchConfig(18, ['facebook.com', 'instagram.com']),   SwitchConfig(24, ['netflix.com', 'youtube.com', 'vimeo.com']),]

13. Проверяем, как все работает. При запуске сервис показывает IP малинки:

cd ~/internet_kill_switchmake run# IP Address is 10.0.0.25

14. Конфигурируем DNS, используя полученный IP. Это можно сделать на уровне роутера или в конфигурации операционной системы.

15. Проверяем работу нашего выключателя. Если все окей, то тумблером можно блокировать или активировать сайт.


16. Теперь все подтверждаем, введя следующий код. Здесь вместо google.com вставляем ресурс, который хотим блокировать:

# When the switch is offdig +short google.com172.217.164.238# When the switch is ondig +short google.com127.0.0.1

17. Редактируем файл /etc/rc.local file. Он определяет поведение системы после перезагрузки малинки:

sudo nano /etc/rc.local# Add this line before the very last linecd /home/pi/internet_kill_switch/src && sudo ../env/bin/python app.py &

18. Устанавливаем выключатель в любом удобном месте и наслаждаемся его работой.


Проект очень простой, но фановый. Любому гику нечто подобное придется по душе. Систему можно менять/усложнять по своему вкусу. Если у вас есть идеи, как это сделать, поделитесь ими в комментариях, будет интересно!

Подробнее..

Превращаем дисковый телефон в цифрового помощника с использованием Google Assistant и Raspberry Pi

03.05.2021 16:20:48 | Автор: admin

Дисковых телефонов, к сожалению, почти нигде уже нет, а вместе с ними ушла целая эпоха. Но есть в этих аппаратах что-то особенное, что привлекает как обычных людей, так и разработчиков. Что касается последних, то они используют дисковые системы для самых разных проектов, и об одном из них мы сегодня расскажем.

Речь идет о преобразовании телефона в цифрового секретаря, который всегда готов прийти на помощь. Для реализации проекта нужна плата Raspberry Pi Zero и подключение к Google Assistant. Ну а теперь подробнее о проекте.

Чтобы сразу было понятно, о чем идет речь, вот видео уже собранного телефона с активированным помощником.


Чуть подробнее о необходимых компонентах


Нам понадобится:
  • Raspberry Pi Zero с запаянными пинами, карта памяти с Raspberry Pi OS и адаптер питания.
  • Старый дисковый телефон с работающей трубкой (микрофоном и динамиком) и работающим рычажным переключателем, который придется кастомизировать.
  • Разного рода кабели, паяльник, отвертки и прочие мелочи.
  • 1 USB audio адаптер, совместимый с Linux.
  • 1 male-male 3.5 мм аудио кабель.
  • 1 Raspberry Pi Zero micro USB to USB A адаптер.

Как установить Google Assistant на старый телефон


Здесь несколько этапов работы:
  • Регистрация в Google (самое простое).
  • Аутентификация с Google (тоже несложно).
  • Кастомизация телефона.
  • Настройка помощника Google.

Регистрация в Google


Речь, конечно же, не о простой регистрации аккаунта в сервисах компании, а о регистрации с raspberry pi. Этот этап может быть немного сложным для тех, кто никогда не работал с Google Cloud Platform, так что лучше прочитать этот пункт, дабы не терять время. Если вы все знаете его можно и пропустить.

Клонируем репозиторий на малинку.

cd ~/
git clone https://github.com/rydercalmdown/google_assistant_telephone


Открываем console.actions.google.com в браузере. Здесь расположен центр управления Google Assistant Actions.

Выбираем новый проект и заполняем появлющиеся поля.


В новой вкладке подтверждаем имя проекта и выбираем Enable для включения API.


Далее на первой вкладке пролистываем страничку до конца и выбираем Are you looking for device registration? Click here


Теперь нужно зарегистрировать девайс, заполнив все поля и скопировав полученный ID в отдельный файл он понадобится позже.


Выбираем Download OAuth 2.0 credentials для того, чтобы загрузить соответствующий файл, который малинка будет использовать для формирования запросов.


Переименовываем загруженный файл в oauth_config_credentials.json и передаем его на Raspberry Pi. Разместить его нужно в папку скопированного репозитория, загруженного в самом начале.

# Rename your downloaded file
cd ~/Downloads
mv your_unique_secret_file_name.json oauth_config_credentials.json
# Move the file into your repository
scp oauth_config_credentials.json pi@your_pis_ip_address:/home/pi/google_assistant_telephone


Возвращаемся к браузеру. После загрузки и переименования нажимаем Next и выбираем Save Traits, не изменяя настроек.


Аутентификация с Google


После того, как регистрация закончена, самое время аутенифицировать девайс для возможности доступа к аккаунту Google и персонализации помощника.

Открываем ссылку console.cloud.google.com/apis/credentials/consent и проверяем, чтобы имя проекта, заданное выше, совпадало с отображаемым по ссылке.

Выбираем External и нажимаем Create


Заполняем поле с названием, выбираем из выпадающего списка почту и добавляем этот e-mail в поле Developer contact information и сохраняем все.


На следующей странице выбираем Add or Remove Scopes и ищем в поисковой строке Google Assistant API. Выбираем /auth/assistant-sdk-prototype scope, обновляем путем нажатия на upfate и сохраняем все.


Затем выбираем OAuth Consent Screen и Add User, добавляя свою почту.


Теперь переходим в папку загруженного репозитория на Raspberry Pi и запускаем команду:

cd ~/google_assistant_telephone
make authenticate


Она завершает процесс аутентификации, после чего нужно скопировать полученный код в консоль. Если все хорошо, то появится сообщение credentials saved:

Эти данные требуются для перехода в текущую аудиторию.

# credentials saved: /Users/test/Library/Application Support/google-oauthlib-tool/credentials.json
mv /Users/test/Library/Application\ Support/google-oauthlib-tool/credentials.json /home/pi/google/assistant/telephone/credentials.json


Кастомизируем телефон


Конечно, модели дисковых телефонов отличаются друг от друга, но их схемы более-менее похожи, поэтому то, что показано ниже, можно использовать для всех аналогичных аппаратов.

В любом случае телефон сначала нужно разобрать.


Далее находим провода, которые идут к рычажковому переключателю. Их нужно будет подключить к пинам малинки, чтобы плата могла определять, снята трубка или нет.


Провода нужно припаять к 18 пину и к земле.

Далее подключаем USB аудио адаптер к raspberry pi zero, после чего припаиваем к проводам трубки два разных 3,5мм провода. Они будут передавать сигнал от Raspberri Pi к трубке и обратно. Возможно, придется повозиться, определяя, где какой провод, но в целом здесь нет ничего сложного.


Заканчиваем кастомизацию телефона, подключая 3,5мм провода к адаптеру.


Остается лишь закрыть корпус телефона, не забыв вывести кабель питания малинки.


Настройка помощника


Осталось совсем немного настраиваем помощника и все. Здесь тоже несколько шагов.

Запускаем установочный скрипт. Это займет не один час, если вы используете Raspberry Pi Zero. Лучше всего запустить все вечером и оставить на ночь.

cd google_assistant_telephone
make install


Настраиваем USB-аудио. Для этого нужна всего одна команда.

make configure-audio

Теперь тестируем аудиоадаптер.

# Run, speak something into the microphone, and listen
make test

# Set volumes
alsamixer


Экспортируем ID проекта. Можно просто зайти вот по этой ссылке и выбрать
Project Settings

export PROJECT_ID=your-project-id

Экспортируем ID

export DEVICE_MODEL_ID=your-model-id-from-the-earlier-steps

Теперь выполняем команду

make run

После чего тестируем телефон. Это просто поднимаем трубку и задаем любой вопрос помощнику. Если все ок, консоль покажет определенное действие, а помощник ответит.

Наконец, выполняем команду ниже для запуска помощника.

make configure-on-boot

Больше подробностей на страничке самого проекта.

Подробнее..

Перевод Pimoroni Pico Wireless добавляем беспроводную связь к Raspberry Pi Pico

26.05.2021 20:08:54 | Автор: admin

Raspberry Pi Pico отличная плата, хотя и с урезанными возможностями. В целом, ей не хватает двух ключевых функций. Первая это кнопка reset, которую, впрочем, можно без проблем добавить самостоятельно. Вторая, более важная беспроводная связь.

Исправить вторую проблему сложнее, но все равно можно. Сейчас появилась совместимая плата, Pimoroni Pico Wireless, которая подключается к малинке и обеспечивает работу с беспроводными сетями пока что только WiFi, о Bluetooth расскажем ниже. Подключается она через SPI-интерфейс.

В целом, добавление беспроводной связи к Pico совсем не сложная задача, компания Adafruit доказала это при помощи AirLift FeatherWing с ESP32. Работает система как с Pico, так и с Feather RP2040. Есть еще Maker Pi Pico, плата, которая поддерживает и ESP8266. Но портативных систем, добавляющих беспроводную связь, для Pico не так много. И Pimoroni Pico Wireless один из отличных вариантов.

Что собой представляет Pimoroni Pico Wireless и как использовать плату?



Pico Wireless по GPIO-интерфейсу. Здесь и достоинство и недостаток системы. Достоинство простота подключения. Недостаток плата закрывает доступ ко всем пинам. Модуль идеально подходит к Pico, размеры у него такие же, как и у малинки.

ESP32-WROOM-32E мощный микроконтроллер, который, правда, в Pico Wireless используется в качестве сопроцессора так же, как и в AirLift FeatherWing от Adafruit. В обычной ситуации контроллер поддерживает работу как с WiFi, так и с Bluetooth, но в этой модели работает лишь WIFi. С другой стороны, при внимательном изучении платы наверняка откроется возможность активировать и Bluetooth, поскольку аппаратно все это поддерживается.


Есть и возможность все же задействовать пины GPIO, но для этого потребуется дополнительная система например, Pico Omnibus. При этом нужно будет убедиться в отсутствии конфликтующих контактов на подключенных устройствах. Питание Pico Wireless обеспечивает GPIO Raspberry Pi Pico, так что дополнительно подключать ничего не нужно.


Железо ничто без программного обеспечения. Pico Wireless поддерживает С++ и собственную версию MicroPython, которая включает picowireless модуль, разработанный для использования с платой. Эта функция отлично работает, ее уже протестировали при помощи скриптов. Проблем не было, единственное пользователь должен понимать, как работает беспроводная сеть, чтобы работать с ПО.

Если желания возиться самостоятельно нет, то лучший вариант Adafruit CircuitPython. Здесь нужно всего лишь изменить несколько строк для того, чтобы Pico увидел подключенный модуль. Кроме того, нужно еще и скопировать несколько библиотек в Pico. После того, как это было сделано, удалось без проблем подключиться к сети и получить погодные данные через API.

Данные записали на SD-карту, с подключением которой тоже пришлось немного повозиться потребовалось использовать дополнительную библиотеку, которая и активировала карт-ридер. Прописав несколько строк CircuitPython, удалось создать новый файл, в котором хранится журнал данных JSON, полученных через API. Информацию можно считывать с SD посредством CircuitPython.

Светодиод RGB подключен к ESP32 через три контакта (красный = 25, зеленый = 26, синий = 27), и для его использования нам нужно использовать esp.set_analog_write (). Например, вот код для установки красного светодиода.

esp.set_analog_write(25, 0)
esp.set_analog_write(26, 1)
esp.set_analog_write(27, 1)


Здесь можно изменять значения между 0 и 1, что дает возможность настраивать цвет самого светодиода.

В системе можно установить и кнопку, подключив ее к GPIO 12 и земле. При нажатии на кнопку та замыкает контакт GPIO, вызывая какое-либо событие. Какое именно зависит от желания разработчика.

Характеристики:

  • Модуль ESP32-WROOM-32E (даташит).
  • 1 сенсорная кнопка.
  • Светодиод RGB.
  • Слот для карты памяти Micro-SD.
  • Предварительно припаянные пины для подключения к Raspberry Pi Pico.
  • Размер 53mm x 25mm x 11mm.
  • Библиотеки C++ и MicroPython.

На одной из сторон платы есть дорожки, которые можно разрезать, чтобы убрать неиспользуемые функции, что позволяет высвободить некоторые GPIO-пины.



Где можно использовать Pimoroni Pico Wireless


В целом, беспроводная связь для Pico открывает перед разработчиком ряд новых возможностей, включая работу с приложениями IoT. Pico Wireless дает возможность взаимодействовать малинке с другими устройствами, используя как стандартные протоколы связи, так и не самые обычные, включая MQTT. Библиотека CircuitPython добавляет еще и поддержку базового HTTP. В ходе теста был проверен мы HTTP-ответ от API с передачей значения в REPL, что полезно для отладки проблем с подключением.

Raspberry Pi Pico вместе с Pimoroni Pico Wireless идеально подходит для добавления в проект мониторинга данных, сбора информации с датчиков, хранения полученной информации на карте памяти и передачи данных на удаленную машину. Если есть навыки, то можно сделать и нечто посложнее, используя в качестве сетевого посредника Pico.

В сухом остатке


Как и говорилось выше, Pico Wiereless можно в считанные секунды подключить к малинке, потеряв при этом доступ к GPIO. Соответственно, не будет возможности использовать пины. Проблема решается при помощи Pico Omibus, что увеличивает размеры платы. Также можно самостоятельно припаять систему, придумав что-либо для подключения к пинам.

Подробнее..

Перевод Лучшие одноплатники на базе чипа RP2040 в 2021 году. Часть 1

11.06.2021 02:20:41 | Автор: admin

С момента выхода Raspberry Pi Pico мы опубликовали несколько статей о системах на базе чипа RP2040 от обзора возможностей одноплатника самой компании до более продвинутых систем других производителей. Сейчас их выпущено уже столько, что публиковать обзор всех подобных плат просто нет смысла. Зато можно разместить подборку лучших систем.

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

Немного о критериях выбора плат с RP2040


Какой размер и сколько требуется пинов? У меньших по размеру плат вроде Pimoroni Tiny RP2040 меньшее количество пинов, чем у оригинальной малинки, так что такие платы можно использовать в относительно ограниченном количестве проектов.

Нужна ли беспроводная связь? С полноценным модулем Wi-Fi и Bluetooth поставляется лишь Arduino Nano RP2040 Connect. Но помимо нее производители предлагают дополнения к Pico вроде Adafruit Airlift board или Pimoroni Pico Wireless Pack.

Экосистема. Понятно, что Raspberry Pi Pico совместима со всей экосистемой продукции Raspberry Pi Foundation. Есть и другие платы, вроде Adafruit Feather RP2040, которые совместимы с представителями продуктовой линейки FeatherWing. Возможности таких плат отличаются от возможностей оригинальной системы.

Наличие дополнительных коннекторов. Это, в первую очередь, Stemma QT, Qwiic и Grove, которые идеально подходят как для простых, так и сложных проектов. У Pico нет дополнительных коннекторов, зато они есть у плат других производителей.

Выбираем лучшие платы с RP2040 чипом


Raspberry Pi Pico


  • Плюсы: низкая цена, всего $4, небольшой размер, простота в использовании, встроенный ADC.
  • Минусы: нет USB-C, только три ADC-пина.

Первый в мире и самый дешевый одноплатник (вернее, микроконтроллер) на базе RP2040 стоит всего 4 доллара США. У него полноценный 40-пиновый GPIO. Поскольку де-факто это стандарт, некоторые сторонние платы совместимы с распиновкой Pico, включая Kitronik Robotics Board или Pimoroni. Они добавляют к функциональности Pico беспроводную связь, несколько светодиодов или другие элементы.

Конечно, покупая самую недорогую модель, вам придется идти на компромиссы. Во-первых, у Pico всего три analog-to-digital пина, тогда как у некоторых сторонних плат четыре или больше. Кроме того, у Pico всего 2 МБ памяти, что весьма немного, хотя и достаточно для решения многих задач.

Плюс ко всему, у Pico micro-USB коннектор, разработчики (вероятно с целью удешевления) решили не устанавливать USB-C. Тем не менее, учитывая обширную экосистему, Pico можно считать must have микроконтроллером для разработчика.

Adafruit Feather RP2040


  • Плюсы: удачный форм-фактор, STEMMA QT, FeatherWing, возможность подключения и зарядки аккумулятора, разметка пинов на обеих сторонах платы.
  • Минусы: нет подтягивающих резисторов на пинах I2C и нет мониторинга батареи.

Adafruit, партнер Raspberry Pi по чипу RP2040, выпустила несколько отличных плат RP2040 за короткий промежуток времени. У компании есть собственный набор форм-факторов. Самая большая плата, Feather, как раз и получила чип RP2040. У Feather RP2040, совместимого с экосистемой FeatherWings, меньше контактов, чем у Raspberry Pi Pico. Но все же разрабочтики выбрали оптимальный минимум.

Потери в пинах GPIO компенсируются возможностью подключения LiPo / Li-Ion батареи, отличной разметкой контактов и наличием Stemma QT, плюс разъема Adafruit, который выбирают для компонентов, которые подключаются посредством I2C. Благодаря Stemma QT у нас нет проблем с подключением и полярностью, что позволяет нам сосредоточиться на проекте, а не на поиске нужных пинов.

Если вы ищете самую универсальную плату RP2040 на рынке, вы ее нашли. Конечно, стоит она дороже, чем Raspberry Pi Pico, но Adafruit Feather RP2040 отличный продукт, который можно использовать в вашем следующем проекте.

Сytron Maker Pi Pico


  • Плюсы: низкая стоимость, простота использования, дополнительные фичи, дополнительные светодиоды и коннекторы.
  • Минусы: с ESP-01 придется повозиться

Raspberry Pi Pico это увлекательный и недорогой способ заняться программированием и электроникой. Правда, во многих случаях к Pico придется докупать компоненты, чтобы расширить сферу его применения. Maker Pi Pico это большое количество дополнительных функций с небольшим размером. При этом стоимость устройства менее 10 долларов, включая предварительно распаянный Raspberry Pi Pico.

За 10 долларов вы получаете просто потрясающее количество функций: кардридер micro SD, зуммер / аудиоразъем 3,6 мм, NeoPixel, контакты GPIO свободны для использования, плюс шесть разъемов Grove для работы с совместимыми компонентами. У каждого из контактов GPIO есть полезный, который можно использовать для быстрой отладки. Включенный в комплект ESP-01 обеспечивает базовый доступ к Wi-Fi. А еще компания Cytron выпустила обновленное руководство о том, как подключить Maker Pi Pico к беспроводной сети. За 10 долларов сложно найти что-то получше.

Adafruit QT Py RP2040


  • Плюсы: небольшой размер, порт Stemma QT, USB-C.
  • Минусы: ограниченное количество GPIO пинов.

QT Py RP2040 от Adafruit похож на Pimoroni Tiny 2040. У платы тоже небольшой размер, плюс тщательно подобранный выбор контактов GPIO для проектов. QTPy RP2040 от Adafruit можно без проблем распаять на плате большего размера. Плюс у системы есть разъем Stemma QT / Qwiic, который обеспечивает дополнительное соединение I2C для работы с совместимыми компонентами. Отличное решение для прототипирования.

Низкая стоимость и простота использования QTPy RP2040 не единственные преимущества платы. Здесь есть еще форк Adafruit MicroPython, CircuitPython, со множеством библиотек для работы с компонентами Stemma QT / Qwiic. Даже если у вас уже есть Raspberry Pi Pico, QTPy RP2040 все равно должен быть частью вашего проекта.

Pimoroni Tiny 2040


  • Плюсы: небольшой размер, больше ADC-пинов, чем у Pico, есть кнопка Reset.
  • Минусы: плата несовместима с add-on системами для Pico, сложности с распайкой, высокая цена.

Размер этой платы составляет всего лишь треть от и так небольшого Raspberry Pi Pico. Разработчики позаботились о сохранении всех функций Pico с добавлением новых. Есть, например, дополнительный аналоговый вход. Из-за небольшого размера платы она стала дороже, причем ровно в три раза, чем Pico. Стоимость Pimoroni Tiny 2040 составляет $12.

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

Подробнее..

PXE-мультитул на базе Raspberry Pi

08.05.2021 12:05:15 | Автор: admin

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

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

В чем сложность


Казалось бы задачка весьма проста. Ну давайте возьмем какой-нибудь live-дистрибутив Linux, раскатаем его на флешку и будем с него загружаться и выполнять требуемые процедуры. Но не тут-то было.

Проблема в том, что у каждого вендора свои собственные методы и собственные утилиты для обновления прошивок. Причем, не все они способны корректно работать под Linux. Какие-то компоненты, например, BIOS у серверов SuperMicro желательно шить из-под MS-DOS. Для каких-то компонентов, например, сетевых карт Mellanox в некоторых случаях нужно использовать Windows, а некоторые поддерживают прошивку непосредственно из Linux.

Таким образом нам нужно будет либо собирать мультизагрузочный образ и записать его на несколько десятков флешек, затем долго и упорно загружаться с них, либо придумать нечто более интересное и быстрое. И вот здесь приходит на ум использование сетевых карт серверов с поддержкой загрузки по PXE (Preboot eXecution Environment, произносится как пикси).

Берем малинку, разворачиваем там DHCP- и TFTP-сервер, готовим требуемые образы для загрузки. Чтобы массово загрузить несколько десятков серверов просто временно задействуем неуправляемый гигабитный свитч на 48 портов и вуаля. По-умолчанию большинство серверов возможность загрузки с PXE предусматривают без дополнительной настройки, поэтому такой вариант идеален.

За основу я взял прекрасную статью от Romanenko_Eugene, но с поправками на особенности Raspberry Pi и решаемые задачи. Приступаем!

Малиновое варенье


Когда я первый раз проделывал такое самой продвинутой версией Raspberry Pi была третья с сетевой картой на 100 Мбит/с. Этого откровенно говоря мало для массовой раздачи тяжелых образов, так что настоятельно рекомендую использовать доступную ныне Raspberry Pi 4 с портом на 1 Гбит/с. Еще одна рекомендация по возможности использовать быструю и емкую карту памяти.

Теперь о первоначальной настройке. Графический интерфейс для такой штуки абсолютно не требуется, поэтому можно скачать самую простую Lite-версию операционной системы Raspberry Pi OS. Распаковываем образ и заливаем образ на MicroSD-карту любым удобным способом, например с помощью dd:

sudo dd if=<имя_образа> of=/dev/mmcblk0 bs=1M

В процессе настройки можно либо настраивать традиционным способом, подключив клавиатуру и монитор, либо через SSH. Чтобы при запуске SSH-сервис заработал, создаем пустой файл с именем ssh в разделе /boot.

Поскольку сетевой порт будет задействован для работы DHCP, то для доступа в интернет можно либо использовать подключение к Wi-Fi, либо подключить к малинке еще одну сетевую карту по USB. Вот такую, например:


Теперь запускаем Raspberry Pi, подключаем ее к интернету и обновляем репозитории и пакеты ПО:

sudo apt update

sudo apt upgrade

Поскольку я задействую еще одну сетевую карту, то встроенной надо задать статический IP-адрес. Открываем конфиг:

sudo nano /etc/dhcpcd.conf

Добавляем следующие строчки:

interface eth0static ip_address=192.168.50.1/24

Здесь eth0 встроенная сетевая карта Raspberry Pi. Именно с помощью нее будет осуществляться и раздача IP-адресов, и сетевая загрузка. Теперь устанавливаем tftp-сервер:

sudo apt install tftpd-hpa

После установки открываем конфигурационный файл:

sudo nano /etc/default/tftpd-hpa

Приводим строку к следующему виду:

TFTP_OPTIONS="--secure -l -v -r blksize"

В целом можно было бы и оставить все как есть, но тестировать каждый раз на отдельной машине иногда не слишком удобно. Опции -l -v -r blksize позволяют без проблем тестировать все это на виртуальной машине VirtualBox, исправляя некоторую проблему совместимости. Теперь устанавливаем DHCP-сервер для раздачи IP-адресов:

sudo apt install isc-dhcp-server

Открываем первый конфигурационный файл isc-dhcp-server:

sudo nano /etc/default/isc-dhcp-server

Явным образом указываем интерфейс, на котором предполагается работа DHCP-сервера:

INTERFACESv4="eth0"

Теперь открываем второй конфиг dhcpd.conf:

sudo nano /etc/dhcp/dhcpd.conf

Задаем необходимые параметры сервера, раздаваемую подсеть, а также передаем имя файла загрузчика:

default-lease-time 600;max-lease-time 7200;ddns-update-style none;authoritative;subnet 192.168.50.0 netmask 255.255.255.0 {        range 192.168.50.2 192.168.50.250;        option broadcast-address 192.168.50.255;        option routers 192.168.50.1;        filename "pxelinux.0";}

Сохраняем файл и теперь нам предстоит собственно скачать загрузчик, нужные модули и сформировать меню PXE. Начнем со скачивания набора загрузчиков Syslinux, в моем случае наиболее удобна версия 5.01:

wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-5.01.zip

Распаковываем:

unzip syslinux-5.01.zip

Теперь нам надо найти и извлечь модуль memdisk, умеющий подгружать в ОЗУ ISO-образы целиком, загрузчик pxelinux.0 и остальные модули comboot. Последовательно выполняем команды, которые отыщут и скопируют все найденное в директорию /srv/tftp:

find ./ -name "memdisk" -type f|xargs -I {} sudo cp '{}' /srv/tftp/

find ./ -name "pxelinux.0"|xargs -I {} sudo cp '{}' /srv/tftp/

find ./ -name "*.c32"|xargs -I {} sudo cp '{}' /srv/tftp/

После этой операции нам нужно создать конфигурационный файл непосредственно для меню, отображаемого на экране PXE. Переходим в нашу директорию:

cd /srv/tftp

Создаем директорию с именем pxelinux.cfg и переходим в нее:

sudo mkdir pxelinux.cfg

cd pxelinux.cfg

Создаем конфигурационный файл:

sudo nano default

В качестве примера давайте возьмем отличный live-дистрибутив GRML и загрузим его через PXE. Ниже готовый пример конфигурации:

UI vesamenu.c32                  PROMPT 0MENU TITLE Raspberry Pi PXE ServerMENU BACKGROUND bg.pngLABEL bootlocal   menu label Boot from HDD   kernel chain.c32   append hd0 0   timeout 0TEXT HELPBoot from first HDD in your systemENDTEXTLABEL grml   menu label GRML LinuxKERNEL grml/boot/grml32full/vmlinuzAPPEND root=/dev/nfs rw nfsroot=192.168.50.1:/srv/tftp/grml/ live-media-path=/live/grml32-full boot=live lang=us nomce apm=power-off noprompt noeject initrd=grml/boot/grml32full/initrd.img vga=791LABEL reboot    menu label Reboot    kernel reboot.c32TEXT HELPReboot serverENDTEXT

Здесь наверное стоит немного остановиться и разобраться что делает каждая строка:

  • UI vesamenu.c32 используем модуль vesamenu.c32 для вывода меню;
  • PROMPT 0 подсвечиваем нулевой пункт меню;
  • MENU TITLE Raspberry Pi PXE Server задаем общее название меню;
  • MENU BACKGROUND bg.png элемент оформления, используем bg.png в качестве фонового изображения.

Фоновое изображение можно изготовить заранее. По-умолчанию подойдет картинка 640x480 с глубиной цвета не более 24 бит, в формате PNG или JPG. Ее надо заранее скопировать в /srv/tftp. Теперь разберем каждую секцию. Первая секция введена для удобства. Если надо загрузится с первого жесткого диска, то прописываем:

  • LABEL bootlocal внутреннее имя секции;
  • menu label Boot from HDD то, как будет отображено меню у пользователя;
  • kernel chain.c32 используем модуль chain.c32, умеющий выполнять загрузку с различных носителей;
  • append hd0 0 явным образом указываем, что загрузка должна быть с первого раздела первого жесткого диска;
  • timeout 0 тут можно либо задать таймаут в секундах, по истечении которого будет автоматически запущена загрузка, либо указав 0 убрать таймер.
  • TEXT HELP указываем начало текста подсказки для пользователя;
  • Boot from first HDD in your system текст подсказки;
  • ENDTEXT указываем конец текста подсказки.

Приблизительно таким же образом формируем и секцию для перезагрузки. Единственным отличием будет вызов модуля reboot.c32, который собственно и отправляет машину в ребут. Ну, а перед тем как разобрать что делает третья секция, загружающая дистрибутив GRML, поговорим о том, что собственно будет загружаться и каким образом.

Everything is a file


Сам ISO-образ доступен на сайте этого live-дистрибутива. Скачиваем его и переименовываем для удобства, в примере возьмем 32-битную версию:

wget https://download.grml.org/grml32-full_2020.06.iso

mv grml32-full_2020.06.iso grml.iso

Теперь надо этот образ каким-то образом заставить загружаться. С одной стороны можно применить модуль memdisk и заставить его вначале загрузить все сырое содержимое образа непосредственно в ОЗУ и потом передать управление загрузкой. Но этот метод хорош только для очень маленьких образов, например, так удобно загружать MS-DOS. Большие же образы долго загружаются в память и не всегда работают адекватно.

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

Выполняется элементарно:

sudo apt install nfs-kernel-server

Чтобы не устраивать кашу из файлов создаем отдельную директорию для grml:

sudo mkdir /srv/tftp/grml

Нам потребуется примонтировать ISO-образ, поэтому позаботимся о временной точке монтирования:

sudo mkdir /tmp/iso

Монтируем образ. Система предупредит, что образ смонтирован в Read-Only режиме:

sudo mount -o loop grml.iso /tmp/iso

Рекурсивно копируем содержимое образа в нашу отдельную директорию:

sudo cp -R /tmp/iso/* /srv/tftp/grml

Чтобы не возникало проблем с правами доступа, меняем владельца и рекурсивно присваиваем этой директории права из серии Дом свободный, живите кто хотите:

sudo chown -R nobody:nogroup /srv/tftp/grml/

sudo chmod -R 777 /srv/tftp/grml/

Теперь дело за малым указать NFS-серверу, что ему следует предоставлять директорию /srv/tftp/grml любому IP-адресу из нашей подсети:

sudo nano /etc/exports

Прописываем строчку:

/srv/tftp/grml 192.168.50.0/24(rw,sync,no_subtree_check)

Обновляем список и рестартуем NFS-сервер:

sudo exportfs -a

sudo systemctl restart nfs-kernel-server

Теперь у нас наконец-то появляется возможность корректно разделить процесс загрузки на два условных этапа. Первый этап загрузка ядра и live-filesystem. Второй этап подтягивание всех остальных файлов через NFS. Пришла пора посмотреть на оставшуюся секцию:

  • LABEL grml имя секции;
  • menu label GRML Linux отображение в меню;
  • KERNEL grml/boot/grml32full/vmlinuz указываем путь до ядра, относительно корня /srv/tftp;
  • APPEND root=/dev/nfs rw nfsroot=192.168.50.1:/srv/tftp/grml/ live-media-path=/live/grml32-full boot=live lang=us nomce apm=power-off noprompt noeject initrd=grml/boot/grml32full/initrd.img vga=791 тут мы говорим, что используем NFS, прописываем пути к условному корню, задаем некоторые дополнительные параметры, рекомендуемые в документации и указываем относительный путь до initrd.

Теперь остается только последовательно запустить TFTP и DHCP-сервер и можно пробовать выполнять загрузку в PXE. Если все сделано правильно, то вы увидите созданное меню:


Выбрав пункт GRML Linux нажимаем Enter и видим, что у нас происходит успешный процесс загрузки образа:


Таким образом мы получили возможность сетевой загрузки популярного среди системных администраторов дистрибутива GRML. Но что насчет того же самого MS-DOS и как можно самостоятельно подготовить образ для перепрошивки BIOS. Об этом поговорим дальше.

In DOS We Trust


Неужели в 21 веке все еще используется операционная система из 80-х годов прошлого тысячелетия. Каким бы странным это не казалось но для некоторых специфичных задач MS-DOS по прежнему актуальна и вполне себе находит применение. Одной из таких задач является обновления прошивки BIOS на серверах.

Возьмем для примера какую-нибудь материнскую плату, например, Supemicro X11SSL-F и скачаем обновление BIOS с официального сайта. Внутри видим приблизительно подобный набор файлов:

user@linux:~/Загрузки/X11SSLF0_B26> ls -lитого 16592-rw-r--r-- 1 user users   169120 фев  1  2015 AFUDOSU.SMC-rw-r--r-- 1 user users     5219 сен 20  2003 CHOICE.SMC-rw-r--r-- 1 user users    22092 апр 27  2014 FDT.smc-rw-r--r-- 1 user users     3799 дек 15  2016 FLASH.BAT-rw-r--r-- 1 user users     3739 мая 22  2019 Readme for UP X11 AMI  BIOS.txt-rw-r--r-- 1 user users 16777216 ноя 25 23:48 X11SSLF0.B26

Видим, что у нас уже есть готовый BAT-файл, позволяющий прошить BIOS. Но для того, чтобы это сделать надо иметь уже загруженный в MS-DOS сервер. Сейчас покажем как именно это сделать.

Прежде всего нам надо подготовить небольшой raw-образ жесткого диска с операционной системой. Создаем новую виртуальную машину через Oracle VM VirtualBox с небольшим диском на 32 мегабайта. Формат выбираем QCOW, после всех манипуляций его можно будет легко сконвертировать в raw.

Наверняка вы все знаете где можно достать образы дискет с MS-DOS, так что монтируем их внутрь виртуальной машины и запускаем установку:


Дважды меняем образы дискет в виртуальном приводе и спустя буквально 20 секунд у нас есть qcow-образ со свеженькой ОС MS-DOS 6.22:


Самым простым способом теперь скопировать файлы на данный диск будет примонтировать его к любой другой виртуальной машине с Windows или Linux. После этой операции повторно монтируем диск к виртуальной машине с MS-DOS и проверяем, что файлы видны:


При желании можно даже настроить автозагрузку на выполнение BAT-файла, чтобы перепрошивка BIOS производилась автоматически. Но помните, что это потенциально опасная операция и делаете вы ее на свой страх и риск. Теперь выключаем виртуальную машину и переконвертируем ее в raw-образ с помощью qemu-img.

qemu-img convert -f qcow -O raw DOS.qcow dos.img

Полученный IMG-образ копируем в отдельную директорию нашего TFTP-сервера:

sudo mkdir /srv/tftp/dos

sudo cp dos.img /srv/tftp/dos

Теперь открываем конфигурацию /srv/tftp/pxelinux.cfg/default на редактирование и добавляем в меню еще один пункт:

LABEL DOS        kernel memdisk        initrd dos/dos.img        append raw

Сохраняем конфигурацию и теперь у нас в PXE-меню появился новый пункт меню, выбрав который мы загружаем созданный образ:


Точно так же можно создавать образы, содержащие как служебные утилиты, так и забавы ради со старыми играми под DOS.

In Windows Veritas


Давайте теперь попробуем загрузить Live-образ c WinPE (Windows Preinstallation Environment). Загружать полноценный вариант часто просто не требуется, достаточно лишь ограниченного количества функций. Реальное применение эта штука находит при перепрошивке некоторых устройств.

Та же самая Mellanox, год назад поглощенная Nvidia, выпускает утилиту Mellanox Firmware Tools для перепрошивки своих сетевых карт в вариантах для WinPE различных версий. Разумеется сейчас доступны уже различные варианты MFT, но пару раз мы сталкивались именно с необходимостью шить через WinPE-версию.

Создание своего собственного образа WinPE и интеграция нужного ПО туда задача не слишком сложная, но ее объяснение выходит за рамки данной статьи. Чтобы детально освоить этот процесс можно посетить отличный ресурс winpe.ru. Мы же для примера возьмем какую-либо готовую сборку для демонстрации процесса запуска.

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

wimboot достаточно простой загрузчик, умеющий выполнять загрузку образов в формате wim (Windows Imaging Format). Его можно использовать либо в связке с syslinux, либо с более продвинутым собратом, iPXE. Создаем отдельную директорию в /srv/tftp:

sudo mkdir wimboot

cd wimboot

Cкачиваем сам загрузчик:

wget https://github.com/ipxe/wimboot/releases/latest/download/wimboot

Теперь пришло время подмонтировать образ. Создадим временную директорию в /tmp:

sudo mkdir winpe

Переходим в каталог со скачанным ISO-образом сборки и выполняем:

sudo mount -o loop <имя_образа> /tmp/winpe

Создаем директорию в /srv/tftp, куда положим нужные нам файлы:

sudo mkdir /srv/tftp/winpe

Теперь ищем в сборке и копируем 4 файла:

sudo cp BOOTMGR /srv/tftp/winpe

sudo cp bcd /srv/tftp/winpe

sudo cp boot.sdi /srv/tftp/winpe

sudo cp boot.wim /srv/tftp/winpe

Дело за малым в конфигурационный файл /srv/tftp/pxelinux.cfg/default дописываем следующую секцию:

LABEL WinPE        menu label WinPE        com32 linux.c32 wimboot/wimboot        append initrdfile=winpe/BOOTMGR,winpe/bcd,winpe/boot.sdi,winpe/boot.wim

Фактически мы при помощи модуля linux.c32 выполняем загрузку загрузчика отличная тавтология, а ему передаем параметры уже в формате, привычном для wimboot. Таким образом вначале у нас загружается wimboot, затем последовательно распаковываются и запускаются необходимые файлы.


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


Вместо заключения


В этой статье нет какого-либо ноу-хау, но когда возникла необходимость Raspberry Pi отлично справилась. Ей не потребовалось искать дополнительную розетку питания, прекрасно подошел USB-порт ближайшего свободного сервера. Нет дополнительных заморочек с поиском места в забитой под завязку железом стойке. Работает именно так как надо, а малые габариты позволяют всегда иметь ее под рукой.

В сети на самом деле есть множество мануалов по настройке сетевой загрузки. Проблема лишь в том, что для разных образов используются разные средства и различные подходы. Выбор правильного подхода иногда требует массы времени и я очень надеюсь, что этот материал поможет многим сэкономить время при решении различных задач, связанных с необходимостью быстрого развертывания PXE на одноплатном компьютере Raspberry Pi.

Подробнее..

Перевод Как подключить OLED дисплей к Raspberry Pi Pico быстрый старт

01.03.2021 14:22:08 | Автор: admin

У Raspberry Pi Pico несколько функциональных ограничений, включая отсутствие модуля беспроводной связи. Но, в целом, это отличная плата для реализации самых разных проектов. Одно из ее достоинств простота подключения дисплея. Она позволяет работать с Pico Display или Pico Explorer Base, но, как оказалось, есть и более недорогие альтернативы.

Под катом инструкция по подключению OLED-экрана с диагональю всего 0,96 дюйма. Для этого нужно немного попаять и написать небольшую программу на MicroPython. Подключение экрана производится по I2C-интерфейсу. Все очень просто: с задачей справится даже ребенок. В целом, эта инструкция для тех, кто только начинает знакомство с платой. Опытные пользователи и так знают, что делать. Если этот пост окажется востребованным, то мы будем регулярно публиковать несложные руководства подобного рода. Что же, давайте приступим.

Что нужно для работы?

  • Raspberry Pi Pico с MicroPython.
  • 4 Female to Female соединительных провода.
  • I2C OLED-экран с разрешением 128*64

Как подключить OLED-экран к малинке


Схема подключения очень простая.


  • Подключаем GND контакт экрана к GND платы.
  • Подключаем VDD к VCC 3V3.
  • Подключаем SCK / SCL и I2C0 SCL.
  • Подключаем SDA к I2C0 SDA.
  • Подключаем плату к компьютеру и открываем Thonny.Теперь нужно установить библиотеку для того, чтобы Python мог взаимодействовать с экраном.

  • Выбираем Tools > Manage Packages для получения доступа к библиотекам Python.

  • Набираем ssd1306 в поисковой строке и ищем.


  • Выбираем найденный модуль micropython-ssd1306 в списке результатов и устанавливаем, после чего возвращаемся в основной интерфейс.


Программное подключение OLED-экрана к малинке


Для того, чтобы программно подключить экран, нам нужно написать несколько строк кода.

Сначала импортируем Pin и I2C-классы. Они используются для взаимодействия с экраном, подключенным к GPIO и Pico.

from machine import Pin, I2C

Импортируем библиотеку для экрана

from ssd1306 import SSD1306_I2C

Создаем объект, i2c, для активации l2C-канала и задаем частоту подключения.

i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)

Создаем еще один объект, oled, для взаимодействия с OLED -экраном. У него три параметра: высота, ширина экрана и характеристики подключения l2C.

oled = SSD1306_I2C(128, 64, i2c)

Прописываем строчку, которая будет отображаться на экране. Она может быть любой.

oled.text("Tom's Hardware", 0, 0)

Наконец, используем короткую команду для отображения текста.

oled.show()

В итоге наш код должен выглядеть вот так:

from machine import Pin, I2Cfrom ssd1306 import SSD1306_I2C i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)oled = SSD1306_I2C(128, 64, i2c) oled.text("Tom's Hardware", 0, 0)oled.show()


Теперь сохраняем и запускаем код. Это делается при помощи File >> Save, как обычно. Как только все готово, нажимаем на кнопку запуска и любуемся текстом.

Подробнее..

Интернет вещей по-русски. Многоканальная мощь физуровня базовой станции OpenUNB

08.12.2020 18:19:49 | Автор: admin

OpenUNB продолжаем! И так, мы сформировали сигнал OpenUNB согласно проекту стандарта (исходники на Гитхабе). Сигнал вылетел в эфир, показав нам свои прелести на приборе. Теперь нам нужно его конвертировать в цифровую форму, отделить от других возможных сигналов и от шума и определить по частоте и по времени. В полосе ни много, ни мало, а 1000 каналов. Чудеса цифровой обработки сигналов! И вы удивитесь, на каком простом железе их можно совершить.


image


Напомню, OpenUNB предполагает односторонню связь. (Кстати, согласно опросу, около 40 процентов проголосовавших с таким подходом согласны.) То есть, базовая станция (БС) простой приемник. Это сильно упрощает нам жизнь для реализации минимального набора OpenUNB нам не нужны дорогие SDR и средства обработки. Нам достаточно грошёвого RTL-SDR и компьютера типа Raspberry.


image


Так вот, берем в руки сладкую парочку: RTL-SDR и Raspberry. Берем также голову в руки и пишем код приемника. Приемник должен обнаруживать все пакеты соответствующего формата в полосе OpenUNB, демодулировать их, декодировать и проверять на ошибки. На этом формально работа физического уровня OpenUNB заканчивается. Сегодня мы уделим внимание первым двум этапам обработки: обнаружение и демодуляция пакетов OpenUNB.


В полосе OpenUNB 1000 номинальных каналов в полосе 100 кГц. (Правда, дальше мы увидим, что на практике приходится нарезать по меньшей мере вдвое больше каналов.) Пакет излучается на одном частотном канале с модуляцией DBPSK с частотой 100 Гц. Мы не будем делать прием только одного канала, это никому не нужно. Во-первый, в стандарте заложена возможность повторов на разных частотах для улучшения чувствительности. Во-вторых, неточность опорных генераторов оконечных устройств (ОУ) в диапазоне температур их работы все равно приводит к миграции частоты передачи в пределах нескольких частотных каналов на приеме БС.


Придет время, и устройств интернета вещей должно быть много, поэтому БС нового стандарта должна проектироваться так, чтобы принимать сразу множество датчиков. Поэтому мы сразу делаем обнаружение во всей полосе. Для начала нужно разделить полосу приема 100 кГц на элементарные полосы, соответствующие полосе сигнала. Теоретически, полоса сигнала 100 Гц. Давайте это проверим по спектру излучаемого сигнала.


image


Мы видим, что в реальности полоса чуть меньше.


Исходя их этих измерений, задаем требования к амплитудно-частотной характеристике (АЧХ) фильтра основной избирательности (ФОС) и рассчитываем его импульсную характеристику (ИХ). Получается 12500 коэффициентов ИХ с АЧХ следующего вида.


image
image


На самом деле, при задании требований к АЧХ ФОС в такой многоканальном системе должен разрешаться очень серьезный компромис. С одной стороны, мы не должны уменьшить энергию полезного сигнала, должны держать полосу ФОС достаточно широкой, чтобы основная часть энергии попала в фильтр. С другой, мы должны уменьшить мешающее влияние других сигналов, делая границу полосы задержания как можно меньше. Эта тема может быть предметом даже не инженерных, а научных изысканий. Стандарты на системы передачи иногда задают маску АЧХ приемника, чтобы инженеры не занимались наукой. Мы сейчас остановимся на том, что есть, оставив эту оптимизацию напотом, еще и потому, что дальше вы увидите, что эту полосу нужно будет немного увеличить по другим соображениям.


С точки зоения вычислительной эффективности (не забывайте, мы хотим уложиться в очень недорогое железо и должны экономить), расфильтровывать полосу приема нужно "быстрыми" методами. Нужно делать так называемую гребенку фильтров с помощью быстрого преобразования Фурье (БПФ). Здесь я только приведу схему обработки, а подробности вы сможете посмотреть в Интернете или в моей статье на эту тему.


image


Пусть мы определились с частотой отсчетов на выходе гребенки, она соответствуюет символьной скорости 100 Гц. Теперь нам нужно определить сетку частот гребенки фильтров. Если бы оконечные устройства излучали сигнал с точной настройкой, то мы должны были бы делать гребенку с частотным шагом 100 Гц. Так как частота сигналов ОУ мигрирует на величину более одного канала, то мы обязаны считать, что частота на приеме будет любой. Тогда требование к сетке частот будет устанавливать следующий блок в тракте приема обнаружитель пакетов.


Здесь следует оговориться, что вариантов обнаружителя пакетов может быть много, с разной степенью практичности для реализации в столь слабом железе. Мы готовы поддержать дискуссию и изменить алгоритм, если вы найдете другой, более экономичный вычислительно и/или более помехоустойчивый. Мало того, вы можете форкнуть код приемника на Гитхабе и реализовать и протестировать его сами (благо железо недорого и может даже оказаться у вас под рукой) и всем потом рассказать. Это будет реально круто! Только не забывайте держать код открытым, это же OpenUNB.


Рассмотрим практически приемлемый вариант обнаружителя пакетов. Исходя из опыта нескольких разработок в области UNB, экономичным методом реализации обнаружителя пакетов является обнаружитель на жестких решениях. И мы на этом этапе не будем изобретать велосипед. Цель обнаружителя: находить преамбулы одновременно во всей полосе приема. Длина преамбулы 32 бита. Поиск преамбулы происходит по выходу относительно-фазового дискриминатора, работающего по каждому выходу гребенки фильтров. Например, если шаг гребенки у нас будет 50 Гц, а частота отсчетов с гребенки 100 Гц, то в секунду будет 200000 (двести тысяч) проверок на преамбулу. Напомню, что шаг гребенки мы еще только хотим определить, исходя из характеристик работа обнаружителя.


Прикидка показывает, что в таком варианте качество работы обнаружителя не будет сильно страдать при отстройке сигнала от центра фильтра на 25(?) Гц. Эта прикидка была проверена на практике. Теперь мы можем считать достаточной сетку гребенки 50 Гц. Только полосу пропускания ФОС нам нужно также увеличить на 25 Гц, чтобы не терять энергию сигнала при максимальных отстройках. Все, с расфильтровкой покончено.


Код умножения на ИХ выглядит так:


for (unsigned int ch=0; ch < numOfChannels; ch++) {            float iC = 0.0;            float qC = 0.0;            for (int j=0; j < BL_125K_to_100/numOfChannels; j++) {                iC += dataIn[i + ch + j*numOfChannels][0] * B_125K_to_100[ch + j*numOfChannels];                qC += dataIn[i + ch + j*numOfChannels][1] * B_125K_to_100[ch + j*numOfChannels];            }            fftw_in[ch][0] = iC;            fftw_in[ch][1] = qC;        }

БПФ используется библиотечное:


fftwf_execute(fftw_p);

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


Код обнаружителя:


        corr1[ch] = q1[ch]*q2[ch] + i1[ch]*i2[ch];        corr[ch] = (corr[ch] >> 1) | ((corr1[ch] > 0 ? 1:0) << 31);        const uint32_t prea = 0x97157A6F;        int err1 =  bitDif(corr[ch], prea);

Следует опять отметить, что все эти эмпирически принятые решения могут быть вами обоснованно оспорены. Мы будем внимательно прислушиваться и воплощать в код все самые лучшие модификации. В этом и состоит большая часть смысла открытости OpenUNB.


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


Формирование мягких решений о символах пока сделано упрощенно:


std::vector<float> data;for (int i=1; i< pp->data.size(); i++) {     float corr;     corr = pp->data[i - 1].real() * pp->data[i].real() + pp->data[i - 1].imag() * pp->data[i].imag();}

На этом обнаружитель пакетов и демодулятор заказчиваются.


Подведем итог. Мы вчерне прикинули и проверили на практике технические решения по первичному приему OpenUNB на простом железе. Гребенка должна быть с шагом 50 Гц, фильтр основной избирательности должен иметь полосу пропускания 100 Гц. Код обнаружителя пакетов реализован, проверен на столе в работе в том числе и с малыми SNR и находится в Гитхабе. Проверка на местности еще впереди.


Обоснование выбора корректирующего ошибки кода и описание его реализации будет приведено в следующей статье.


Хочется выразить огромную благодарность за проделанную работу нашему основному программисту deef137. На все вопросы по коду ответит он. По обработке сигналов спрашивайте меня.

Подробнее..

CodeSys на RaspberryPi 3 model B для реальных целейMS SQL. Расчет метража продукции, произведенной на гофроагрегате

22.01.2021 12:16:53 | Автор: admin

Оглавление

  1. Расчет метража и площади произведенной продукции (немного матриц)

  2. Затраты

  3. Выгрузка данных с помощью PyODBC

  4. Выгрузка данных с помощью MsSQL Library SL

Расчет метража и площади произведенной продукции (немного матриц)

Матрица метража произведенной продукции по профилям и по форматам представляет собой двумерный массив А 6*6, который подразделяется на двумерный массив В p*f, где p=5 профиль гофры, f=5 формат, и одномерные Zp сумма произведенных метров по профилям гофры и Zf - сумма произведенных метров по форматам. Соответственно матрица Zp одномерная матрица из 5-ти элементов, предстваляет собой сумму столбцов матрицы А, Zf одномерная матрица из 5-ти элементов, предстваляет собой сумму строк матрицы А. Остается один не заполненный элемент a66, эта ячейка будет общей длиной произведенной продукции.

Так же потребовалось еще 2 одномерные матрицы: Sp площадь произведенной продукции по профилям и Sf площадь произведенной продукции по форматам и матрица- константа F одномерная матрица из 5-ти элементов перечень форматов сырья.

Разобрались с заполнением! Теперь начинается алгебра.

Сумма по форматам и по профилям рассчитывается путем сложения строк и столбцов, соответственно, исходной матрицы А.

Расчет площадей по форматам очень прост, мы просто перемножаем 2 матрицы А и F

или

Площадь по профилям гофры:

Листинг функционального блока
FUNCTION_BLOCK Format_mathVAR_INPUT    EN:BOOL;    imp:BOOL;END_VARVAR_INPUT RETAIN    f:INT := 1;    p:INT := 1;END_VARVAR_INPUT    l_roll:REAL;    k_imp:INT;    res:BOOL;    res_month:BOOL;END_VARVAR_OUTPUT    // массив [f,p], f=6 - сумма по профилям, p=6 - сумма по форматам    length_f:ARRAY[1..6, 1..6] OF REAL;    wS_f:ARRAY [1..5] OF WORD;    wS_p:ARRAY [1..5] OF WORD;END_VARVAR_OUTPUT RETAIN    S_f:ARRAY [1..5] OF REAL;    S_p:ARRAY [1..5] OF REAL;END_VARVAR_OUTPUT    S_f_month:ARRAY [1..5] OF REAL;    S_p_month:ARRAY [1..5] OF REAL;END_VARVAR    imp_old:BOOL;    f_b: ARRAY [1..5] OF BOOL;    p_b: ARRAY [1..5] OF BOOL;    length_f_old:ARRAY[1..6, 1..6] OF REAL;    i:BYTE;    j: BYTE;    k:REAL;END_VARBEGIN  k:=l_roll/(k_imp*1000);  IF EN AND not imp AND imp_old THEN      length_f[f,p]:=length_f[f,p]+k;      //length_p[p]:=length_p[p]+(l_roll/(k_imp*1000));  END_IF  FOR i:=1 TO 5 DO       length_f[i,6]:=0;      length_f[6,i]:=0;      FOR j:=1 TO 5 DO           length_f[i,6]:=length_f[i,6]+length_f[i,j];          length_f[6,i]:=length_f[6,i]+length_f[j,i];      END_FOR   END_FOR  CASE f OF          1: S_f[f]:=length_f[f,6]*1.050/1000;          2: S_f[f]:=length_f[f,6]*1.250/1000;          3: S_f[f]:=length_f[f,6]*1.400/1000;          4: S_f[f]:=length_f[f,6]*1.575/1000;          5: S_f[f]:=length_f[f,6]*1.600/1000;  END_CASE  FOR i:=1 TO 5 DO       S_p[i]:=length_f[1,i]*1.05/1000+length_f[2,i]*1.25/1000+length_f[3,i]*1.4/1000+length_f[4,i]*1.575/1000+length_f[5,i]*1.6/1000;      wS_p[i]:=REAL_TO_WORD(S_p[i]*10);      wS_f[i]:=REAL_TO_WORD(S_f[i]*10);  END_FOR  IF res THEN      FOR i:=1 TO 6 DO           FOR j:=1 TO 6 DO               length_f_old[i,j]:=length_f[i,j];              length_f[i,j]:=0;          END_FOR       END_FOR      FOR i:=1 TO 5 DO          S_f_month[i]:=S_f_month[i]+S_f[i];          S_f[i]:=0;          S_p_month[i]:=S_p_month[i]+S_p[i];          S_p[i]:=0;      END_FOR  END_IF  IF res_month THEN      FOR i:=1 TO 5 DO           S_f_month[i]:=0;          S_p_month[i]:=0;      END_FOR  END_IF  FOR i:=1 TO 5 DO f_b[i]:=0; END_FOR  FOR i:=1 TO 5 DO p_b[i]:=0; END_FOR  f_b[f]:=TRUE;  p_b[p]:=TRUE;  imp_old:=imp;END

Затраты

  • RPI 3 model B за 4 тысячи рублей (на AliExpress 3 тыс. руб.). Можно было обойтись и более дешевой RPI zero (2 тыс. руб.), но рамки системы изначально были размыты несуществующим ТЗ (давай сперва сделаем так, а потом посмотрим, нужно еще то то и то);

  • Плата с опторазвязками 24/5В на AliExpress 300 руб. (в России не нашел уже готовой платы);

  • CODESYS Control for Raspberry Pi SL 50 евро. В демо-режиме работает в RealTime 2 часа, после необходима перезагрузка;

Выгрузка данных с помощью PyODBC

Установка ODBC на Raspberry

Организуем доступ в интернет и прописываем пару команд:

pi@raspberrypi:~ $ sudo apt-get install python3-dev unixodbc-dev gitpi@raspberrypi:~ $ git clone https://github.com/mkleehammer/pyodbcpi@raspberrypi:~ $ cd pythodbcpi@raspberrypi:~ $ import pyodbcpi@raspberrypi:~ $ python3 setup.pypi@raspberrypi:~ $ cd /home/pi/pyodbcpi@raspberrypi:~ $ sudo python3 setup.py buildpi@raspberrypi:~ $ sudo apt-get updatepi@raspberrypi:~ $ sudo apt-get install g++pi@raspberrypi:~ $ sudo apt-get install unixodbc-devpi@raspberrypi:~ $ pip install pyodbcpi@raspberrypi:~ $ odbcinst -jpi@raspberrypi:~ $ cat /etc/odbcinst.ini[FreeTDS]Description=FreeTDS Driver v0.91Driver=/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.soSetup=/usr/lib/arm-linux-gnueabihf/odbc/libtdsS.sofileusage=1dontdlclose=1UsageCount=1pi@raspberrypi:~ $ cat /etc/odbc.iniDriver = FreeTDSDescription = My Test ServerTrace = NoServerName = mssql#Port = portinstance = MSSQLSERVER #(whatever is the service u r runningcould be SQLEXPRESS)Database = database_nameTDS_Version = 4.2pi@raspberrypi:~ $ sudo nano /etc/freetds/freetds.conf[egServer70]        host = ntmachine.domain.com        port = 1433        tds version = 7.0[mssql]        host = server_ip_adress        instance = MSSQLSERVER        #Port = port         tds version = 4.2

Проверяем доступ к нашей базе данных.

pi@raspberrypi:~ $ sudo python3>>> server = '192.168.1.2'>>> port = '1433'>>> database = 'GA' >>> username = 'plc' >>> password = '123456' >>> cnxn = pyodbc.connect('DRIVER={FreeTDS};SERVER='+server+';PORT='+port+';DATABASE='+database+';UID='+username+';PWD='+ password)>>> cursor = cnxn.cursor()>>> cursor.execute('select top 10 ID,Val,Date_Time from tbl_Val')#cursor.execute('INSERT INTO tbl_Val (ID, Val) VALUES (15, 20)')>>> rows=cursor.fetchall()>>> for row in rows: print(row.ID, row.Val)

В репозитории /home/pi/pyodbc/ необходимо создать файлquery.py. Здесь будет код, для вызова из нашей подпрограммы.

import pyodbcimport syscnxn = pyodbc.connect('DRIVER={FreeTDS};SERVER='+sys.argv[1]+';PORT='+sys.argv[2]+                      ';DATABASE='+sys.argv[3]+';UID='+sys.argv[4]+';PWD='                      + sys.argv[5])cursor = cnxn.cursor()cursor.execute('INSERT INTO [Py_Tbl] ([ID], [Val]) VALUES ('+sys.argv[6]+','               +sys.argv[7]+')')cnxn.commit()

Вышеизложенный скрипт имеет 5 параметров подключения и 2 аргумента, подлежащие записи в БД:

  • Сетевое имя или IP адрес сервера;

  • Порт подключения (у MSSQL стандартный порт 1433);

  • Имя базы данных;

  • Логин;

  • Пароль;

  • ID значения;

  • Значение.

Далее в функциональном блоке SQL_Insert программы ПЛК формируем строку запуска скрипта с перечислением в ней всех параметров и аргументов

Листинг функционального блока
FUNCTION_BLOCK SQL_InsertVAR_INPUTxExecuteScript: BOOL;Server:STRING := '192.168.1.2';PORT:INT := 1433;DB_Name:STRING := 'GA';login:STRING := 'plc';password:STRING := '123456';ID: INT;Val: REAL;END_VARVARpResult: POINTER TO SysProcess.SysTypes.RTS_IEC_RESULT;Text: string;END_VARBEGIN  IF xExecuteScript THEN    text:='sudo python /home/pi/pyodbc/query.py ';    text:=concat(text,Server);    text:=concat(text,' ');    text:=concat(text,INT_TO_STRING(Port));    text:=concat(text,' ');    text:=concat(text,DB_Name);    text:=concat(text,' ');    text:=concat(text,login);    text:=concat(text,' ');    text:=concat(text,password);    text:=concat(text,' ');    text:=concat(text,INT_TO_STRING(id));    text:=concat(text,' ');    text:=concat(text,REAL_TO_STRING(Val));    SysProcess.SysProcessExecuteCommand(text,pResult);    xExecuteScript:=FALSE;  END_IFEND

По сути программа ПЛК формирует строку запуска query.py и посылает в него аргументы. Это равносильно следующему запросу:

pi@raspberrypi:~ $ sudo python /home/pi/pyodbc/query.py server port DB_name login pass id Value

В функциональном блоке DB_send задается период отправки данных, формируются массивы ID из 10 ячеек типа integer и Val из 10 ячеек типа real.

Листинг функционального блока
FUNCTION_BLOCK DB_SendVAR_INPUTid:ARRAY[1..10] OF INT;val:ARRAY[1..10] OF REAL;Time_send:TIME :=T#60S;END_VARVARSQL_Ins: SQL_Insert;TONInst: TON;i: int;END_VARBEGIN  TONInst(IN := NOT(TONInst.Q), PT:= Time_send);IF  TONinst.Q THENFOR i:=1 TO 10 DOIF id[i]<>0 THENsql_ins(xExecuteScript:=true, ID:=id[i], val:=val[i]);END_IFEND_FOREND_IFEND

Как все это работает? Каждый цикл программы в DB_Send из остальных ФБ перекладываются данные, по истечению заданного времени, сопоставляются ID->Val и отправляются в SQL_Inset для формирования строки вызова Python скрипта. Методом pyodbc.connect подключаемся к базе данных и cursor.execute отправляет SQL-запрос INSERT Данные в базе.

Выгрузка данных с помощью MsSQL Library SL

Еще один способ выгрузки данных в БД является готовый инструмент от 3S-Smart Software Solutions GmbH MsSQL Library SL это закрытый и дорогой (200) набор инструментов для прямого подключения ПЛК, чтения и записи данных в БД MsSQL без использования OPC-сервера. Использует TDS протокол. В демо-режиме работает 2 часа, забегая на перед, скажу, что работает крайне нестабильно, полные 2 часа не отработала, подключение с БД регулярно пропадало, не идет ни в какое сравнение со стабильностью работы бесплатной PyODBC.

Поддерживаемые команды:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • Execute Stored procedures

Эта библиотека содержит 5 функций для преобразования данных из типов данных SQL в IEC:

  • BOOL

  • DINT

  • REAL

  • STRING

  • DATETIME

Состоит из 4-х функциональных блоков:

  • fbMsSQL_compact для компактного соединения и связи с базой данных

  • fbMsSQL для связи с базой данных

  • fbPing для проверки доступности удаленного хоста

  • fbFIFOQuery для обработки большего количества запросов SQL во времени

Имеет 4 default-шаблона визуализации

  • учетные данные для входа

  • процедура входа

  • окно запроса

  • окно ответа

В store.codesys.com скачиваем и устанавливаем пакет. После установки пакета MsSQL Library SL в директории ..\CODESYS MsSQL SL Library\V1.4.0.5\Examples\Raspberry Pi target распаковывается наглядный пример использования библиотеки.

Страница подключения к БД и отображения данных.

Подробнее..

Compute Module 4 от Raspberry Pi особенности платы и новые возможности

20.10.2020 12:19:01 | Автор: admin
Источник изображения: hackaday.com
Как уже писали на Хабре, сегодня организация Raspberry Pi Foundation представила Compute Module 4 по цене от $25. В целом, новый модуль это шаг вперед по сравнению с предыдущими моделями. Он более быстрый, у него больше возможностей, включая сетевые функции. Например, у модуля есть опция Wi-Fi 802.11b/g/n/ac, Bluetooth 5.0.

Но есть у платы и несколько особенностей, о которых стоит знать, прежде, чем решаться на покупку. $25 сумма относительно небольшая, но ведь некоторые любители и компании покупают десятки плат одновременно.

Пока, SO-DIMM, нам будет тебя не хватать



Самым большим сюрпризом для поклонников продукции от Raspberry Foundation стал отказ разработчиков от SO-DIMM в пользу двух 100-контактных мезонинных разъемов Hirose DF40C-100DS-0.4V. По словам авторов проекта, это дает возможность повысить скорость обмена данными между платами и одновременно уменьшить габариты модуля. И правда, длина платы стала меньше на 12,6 мм. Но она стала шире на 10 мм, так что экономия пространства минимальна.

Два разъема дали возможность разделить низкоскоростные и высокоскоростные периферийные подключения. С одной стороны GPIO Raspberry Pi, питание, SD-слот и Ethernet. С другой PCIe, USB, HDMI, MIPI CSI и сразу две линии DSI. Так что плата подойдет и разработчикам, которым нужна возможность быстрого ввода/вывода, так и тем, у кого нет в этом острой необходимости.

PCIe интерфейс


Наличие PCIe отличная новость. Конечно, в этот разъем не вставить игровую видеокарту, превратив девайс в игровой ПК. Нет, замысел здесь в ином. Например, можно использовать карту расширения PCIe с USB3 портами. Правда, нужно удостовериться в том, что эта карта совместима с чипсетом VLI VL805. Но таких устройств немало, так что особо волноваться не о чем.


VIA VL806 двухпортовый хост-контроллер, который совместим с новой платой. Есть и четырехпортовый, VIA VL805
Одна из моделей плат расширения, которая совместима к Raspberry Pi 4 и одновременно CM4, Syba USB 3.1 PCI express. В этой плате есть даже USB-C порт, так что разработчики могут быть довольны.

Кстати, у CM4, как и у Raspberry Pi 4, есть возможность загрузки по USB. И если установлен USB 3.0 адаптер, то, соответственно, и скорость загрузки будет высокой.

NVMe


Поддержка NVMe задекларирована, но нужно иметь в виду, что она не включена по умолчанию в Raspberry Pi OS, о чем предупреждают, например, здесь. Активировать нужную функцию можно при помощи команды modprobe nvme-core, после чего нужно перезагрузиться.


Одна из совместимых NVMe моделей дисков Samsung 970 EVO Plus. Правда, это дороговатая модель, но в любом случае возможность подключения подобных устройств есть. Разработчики малинки отчитались о достижении показателя в 390 MБ/с в лаборатории.

Правда, установленный SSD нельзя подключить в качестве загрузочного диска. Возможно, эта функция появится позже, но сейчас такой возможности нет.

MIPI CSI и MIPI DSI


У Model B один двухрядный MIPI CSI коннектор и один двухрядный MIPI DSI коннектор. У CM4 есть возможность работы с двумя коннекторов каждого типа сразу, что означает подключение стереоскопического 3D зрения. Примерно то же самое можно делать и с CM3+, но предыдущая модель не такая производительная, так что и возможности у нее не такие обширные.

Сетевые возможности


Отличная новость для разработчиков WiFi, Bluetooth и гигабитный Ethernet из коробки. Правда, эти возможности доступны не для каждого из представленных 32 вариантов плат. Но если есть необходимость в получении полноценного беспроводного модуля, то это можно сделать без проблем.


Как и сообщалось в самом начале, у платы современные протоколы беспроводной связи Wi-Fi 802.11b/g/n/ac и Bluetooth 5.0. А еще у нее есть U.FL-коннектор для внешней антенны! В некоторых случаях платы заключаются в металлический корпус, который играет роль клетки Фарадея, так что внешняя антенна будет весьма кстати.

У Raspberry Pi Foundation есть совместимая антенна, Compute Module 4 Antenna Kit. Но, в целом, подойдет и любая другая.


Для того, чтобы активировать антенну, необходимо отредактировать файл /boot/config.txt, добавив параметр dtparam=ant2

Гигабитный Ethernet работает без проблем, выдавая обещанную пропускную способность. У новой модели за Ethernet отвечает современный чип BCM54210PE с поддержкой IEEE 1588 Precision Time Protocol.

Compute Module 4 IO Board



Вместе с CM4 можно приобрести плату расширения Compute Module 4 IO Board, которая обеспечивает подключение широкого спектра внешних устройств. Так, на этой плате есть два полноразмерных HDMI-порта, два порта USB 2.0, слот под карту microSD, разъем PCIe Gen2 x1, сетевой порт Ethernet (поддержка PoE), 40-пиновый GPIO-коннектор. Плюс здесь есть и RTC (Real-Time Clock), со слотом для батарейки CR2032. В целом, плата добавляет большое количество функций, которых может не хватать пользователям CM4.

Документация для этой платы доступна здесь, есть и KiCAD-файлы.

В сухом остатке


Compute Module 4 идеальный вариант для разработчиков. Плата предоставляет все те функции, которые обещали ее создатели, включая нативную поддержку PCIe. Плата подходит для создания сложных и не очень IoT-проектов, разработки embedded-систем и даже для ИИ-проектов, с добавлением систем машинного зрения (об этом мы напишем в одной из последующих статей).

Подробнее..

Альтернативы Raspberry Pi

19.01.2021 02:08:11 | Автор: admin

Свет клином не сошёлся на Raspberry Pi, и потому энтузиасты и гики могут экспериментировать с большим количеством самых разных одноплатных компьютеров (SBC). Предлагаю познакомиться с устройствами, которым под силу обрести популярность в 2021 году.

HackBoard 2

Hackboard 2 это одноплатный компьютер, который появился во многом благодаря благодаря краудфандингу. Размеры платы 120х80 мм, её основа 64-х битный Intel Celeron N4020. Плата имеет компактный, но функциональный дизайн с кнопкой питания, светодиодным индикатором состояния питания и небольшой батареей RTC. Windows ставится из коробки, также могут быть легко установлены любые x86-совместимые дистрибутивы Linux.

Для платы предусмотрено несколько дополнительных устройств. Например, в Hackboard 2 Starter Kit входит Hackboard 2 с Windows 10 Pro, блок питания, теплоотвод, веб-камера, беспроводная клавиатура со встроенным тачпадом. В Hackboard 2 Complete Kit имеется ещё и дисплей 13.3" IPS 1080p HD со встроенными динамиками.

Технические характеристики:

  • Двухъядерный процессор Intel Celeron N4020

  • 4 ГБ оперативной памяти DDR4 64 ГБ EMMC

  • 2 слота NVMe M.2, позволяющие установить SSD объемом до 4 ТБ

  • Гигабитный Ethernet

  • 3 порта USB 3.0 типа B

  • HDMI

  • Аудиоразъем для наушников

  • Intel UHD Graphics 600 с выводом 4K HDMI 2.1 output

  • 40-контактный Pi-совместимый GPIO

  • Wi-Fi-модуль Intel dual-band AC95060

  • Bluetooth 5.1

Цена

Стоимость Hackboard 2 начинается с $99 США с Ubuntu или $140 с Windows 10 Pro. Это может показаться дорогим по сравнению с Raspberry Pi 4 Model B, однако версия Windows 10 дешевле, чем лицензия Windows 10 Pro, и почти любой дистрибутив Linux или ОС x86 совместимы из коробки.

ZimaBoard

Запуск домашнего сервера на SBC не является чем-то принципиально сложным или необычным. Однако ранее никто не создавал SBC специально для этой цели, пока не появился ZimaBoard. Этот одноплатный компьютер предназначен для использования в серверных приложениях. Он доступен в двух различных конфигурациях:

Спецификация

ZimaBoard 216

ZimaBoard 832

CPU

Intel Celeron N3350

Intel Celeron N3450

RAM

2 ГБ LPDDR4

8 Г LPDDR4

Встроенная память

16 ГБ eMMC

32 ГБ eMMC

HDD/SSD

2 порта SATA 6.0

2 порта SATA 6.0

LAN

2 порта GbE

2 порта GbE

USB

2 порта USB 3.0

2 порта USB 3.0

PCI-E

1 PCIe 2.0 4x

1 PCIe 2.0 4x

Дисплей

1 Mini Display Port 1.2

1 Mini Display Port 1.2

TDP

6w

6w

Габариты

120 x 74.5 x 25 мм

120 x 74.5 x 25 мм

ZimaBoard небольшой, безвентиляторный и очень мало потребляющий SBC с процессором Apollo lake мощностью 6 Вт, что делает его идеальным в качестве легкого домашнего сервера. ZimaBoard объединяет платы от Orange Pi и ESPRESSObin в качестве специального модуля для создания пользовательских медиа-серверов. ZimaBoard также предлагает удобную потоковую передачу видео 4K и аудио высокого разрешения. Он имеет открытую экосистему и разнообразную поддержку более 30 приложений. Поставляется с предустановленным Linux (информации о дистрибутиве нет), но утверждается, что он совместим с Linux, Windows, OpenWrt , pfSense, Android, LibreELEC. Хотя ZimaBoard еще не закончил сбор средств на запуск в производства, ожидается, что он будет выпущен в 2021 году.

Цена

Обе модели скоро будут доступны на кикстартере по цене $69,90 и $129,90 соответственно.

Rock Pi4

Rock Pi 4 это небольшой одноплатный компьютер на шестиядерном Hex Core Rockchip RK3399, довольно мощный для своего форм-фактора и цены. Компьютер подойдет для использования в качестве 4К мультимедиа приставки, игровой ретро-приставки или простого домашнего сервера. Rock Pi 4 соответствует форм-фактору платы Raspberry Pi 3 и ASUS Tinker. Существует два варианта Rock Pi 4 модель A и B, две ревизии v1.3 и v1.4. Единственное реальное различие между моделью A и моделью B состоит в том, что вторая включает в себя модуль беспроводной сети и дополнительную поддержку для PoE. Поддерживает Android TV 7, Android TV 9, Ubuntu Server 18.04, Debian 9 Desktop.

Технические характеристики:

  • Процессор:6 ядерный RK3399 (2 ядра по 2 ГГц и 4 по 1,5 ГГц);

  • Графика:Mali-T860MP4, с поддержкой OpenGL ES1.1 / 2.0 / 3.0, OpenCL1.2, DirectX 11.1.

  • Поддержка аппаратного декодирования: H.264, H.265, VC-1, VP9, VP8, MVC;

  • Оперативная память:1 Гб (LPDDR4), также есть версии с 2 и 4 гигабайтами памяти;

  • Беспроводная связь:Wi-FI 802.11 ac, Bluetooth 5.0;

Разъёмы:

  • HDMI 2.0 (4k, 60 Гц);

  • eMMC, с поддержкой до до 128 Гб;

  • Гигабитный Ethernet, с поддержкой PoE;

  • 2 USB 3.0 и 2 USB 2.0;

  • microSD с поддержкой до 128 Гб;

  • M.2 NVME SSD, с поддержкой до 2 Тб;

  • 3.5 мм аудио джек;

  • 2 MIPI CSI для камер или дисплея, поддержка камер до 8 МП;

  • 40-контактный разъем расширения, состоящий из: 2x UART, 2x SPI, 2x I2C, 1x PCM / I2S1, 1 SPDIF, 1 PWM, 1 ADC, 6 GPIO, 2 пина питания 5 В, 2 пина питания 3.3 В и земля;

  • USB Type C для питания, поддерживается блок питания от 5В до 20 В до 3A, поддерживается быстрая зарядка QC и PD;

  • Разъём RTC для батарейки (часы реального времени). В комплекте не идет, но можно просто синхронизировать время по интернету

Цена

Стоимость RockPi 4 начинается с 49 долларов за модель 1 ГБ, 59 долларов за модель 2 ГБ и 75 долларов за модель 4 ГБ. RockPi 4 можно купить на Чипдип.

ODROID-H2+

Odroid-H2+ построен на аппаратной платформе Intel Gemini Lake Refresh. Это четырехъядерная плата x86 с процессором Intel J4115 2,5 ГГц и встроенной графикой Intel UHD Graphics 600. Хотя это не совсем SBC из-за наличия съёмных модулей памяти DIMMS, я всё же решил включить его в список. Отмечу, что отсутствие GPIO может сделать его непригодным для некоторых проектов. За отвод тепла от процессора в Odroid-H2+ отвечает пассивная система охлаждения на основе радиатора. Общие габариты одноплатного компьютера составляют 11011047 мм.

На устройстве может применяться операционная система Windows 10, Ubuntu 20.04 или другая программная платформа на ядре Linux. Благодаря Dual Nics это может стать отличным программным маршрутизатором или домашним сервером.

Технические характеристики:

  • Четырехъядерный процессор Intel J4115 (14-нм) с 4 МБ кэш-памяти, до 2,5 ГГц (однопоточный) или 2,3 ГГц (многопоточный)

  • Двухканальная память DDR4-PC19200 (2400 МТ / с)

  • До 32 ГБ ОЗУ с двумя слотами SO-DIMM 4 x PCIe 2.0 для одного хранилища M.2 NVMe (M.2 SATA SSD не поддерживается)

  • 2 порта Ethernet 2,5 Гбит

  • 2 порта SATA 3.0

  • Ускоритель SSE4.2 (SMM, FPU, NX, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AES)

  • Intel UHD Graphics 600 (Gen9.5 LP GT1) до 700 МГц

  • HDMI 2.0 и DP 1.2 несколько видеовыходов 4K / 60 Гц

  • Резервная батарея RTC / BIOS входит в комплект

Цена

Odroid-H2+ можно приобрести за $119, хотя имейте в виду, что вам нужно будет приобрести ОЗУ DDR4-PC19200 SODIMM отдельно. Odroid-H2+ можно заказать из Великобритании или отсюда.

NanoPi R4S

NanoPi R4S это одноплатный headless-ПК с процессором RK3399 и двумя гигабитными портами Ethernet. Он не предназначен для использования в качестве десктопа, т.к. не имеет видеовыхода. Зато этот крошечный (6666 мм) SBC можно использовать в качестве основы для маршрутизаторов, компактных сетевых хранилищ данных, шлюзов и т.д. Заявленный диапазон рабочих температур простирается от минус 20 до плюс 70 градусов Цельсия. Устройство работает с OpenWrt, но можно использовать и другие сборки. Работает с Docker CE.

Технические характеристики:

  • 64-битный процессор Rockchip RK3399 с тактовой частотой 1,8 ГГц SoC Rockchip RK3399 с двухъядерным Core Cortex-A72, чертырёхъядерным Cortex-A53, плюс видеочип Mali-T86 с OpenGL ES1.1/2.0/3.0/3.1, OpenCL, DX11, поддержкой AFBC, 4K VP9 и 4K 10-bit H265/H264 60fps.

  • ОЗУ 4 ГБ DDR3 или 1 ГБ DDR4.

  • Слот для карт памяти microSD.

  • Сетевые подключения 2 гигабитных порта Ethernet.

  • USB 2x USB 3.0 Type-A и USB 2.0.

  • Расширения 2*5 пиновый коннектор с SPI и l2C.

  • Отладка 3-хпиновый UART.

  • Несколько светодиодов, включая power, SYS, LAN, WAN

  • Коннектор для подключения кулера.

  • Питание USB-C.

Цена

Стоимость NanoPi R4S начинается с 45 долларов за модель 1 ГБ и 69 долларов за модель 4 ГБ. NanoPi R4S можно купить здесь.

ZeroPi

ZeroPi ещё один продукт от Friendly Arm, который позиционируется как устройство для разработчиков, создающих smart-гаджеты и работающих с IoT-технологиями. Не имеющий видеовыхода одноплатник может служить в качестве базы для создания файлового сервера или роутера. Он оснащен четырёхъядерным процессором Allwinner H3, работающим на частоте 1,2 ГГц. Отсутствие GPIO сужает область применения устройства, однако для тех, кому нужен мало потребляющий и очень дешевый Linux SBC, это хорошее приобретение. Размеры этого компьютера составляют 40х40 мм. Гаджет работает со специализированной ОС Friendly Core, база которой Ubuntu Core. При желании можно установить сборку OpenWrt на ядре Linux, которая предназначена для маршрутизаторов.

Технические характеристики:

  • SoC четырехъядерный процессор Allwinner H3 Cortex A7 @ 1.2 ГГц с графическим процессором Arm Mali-400MP2

  • Оперативная память 256 или 512 Мб DDR3

  • Хранилище слот для микро SD-карты,опционально SPI флэш-память

  • Сеть ГигабитныйEthernet черезRealtek RTL8211E PHY

  • USB 1x хост порт USB 2.0, 1x микро USBпорт

  • Отладка 4-контактный разъем для последовательной консоли

  • Разное светодиоды состояния и питания

  • Питание 5 В / 2 A через микро USB пор

Цена

ZeroPi доступен сейчас по цене $9,99, fза дополнительные 3 доллара вы можете получить хороший металлический корпус. Доступно для покупки в Friendly Arm.

NVIDIA Jetson Nano 2GB

NVIDIA Jetson Nano 2GB последняя разработка в линейке комплектов для разработки NVIDIA SBC с четырёхъядерным процессором Arm A57 @ 1,43 ГГц и 128-ядерным графическим процессором Maxwell. Компания уверяет, что это чуть ли не лучший стартовый комплект искусственного интеллекта и робототехники для студентов, преподавателей и любителей робототехники. Новинка поддерживается комплектом NVIDIA JetPack SDK, который поставляется со средой выполнения контейнера NVIDIA и полной средой разработки программного обеспечения Linux. Заявлена поддержка интерфейсов GPIO, I2C, I2S, SPI, PWM, UART. Решение оснащено пассивной системой охлаждения на базе радиатора, благодаря чему обладает нулевым уровнем шума. Быстродействие достигает 472 GFLOPS. Размеры устройства 100х80х29 мм (с радиатором).

Технические характеристики:

  • CPU: 64-битный Quad-core ARM A57 (1.43 ГГц)

  • GPU: 128-core NVIDIA Maxwell

  • GPU RAM: 2ГБ 64-bit LPDDR4

  • Связь: Ethernet 10/100/1000,

  • Порты: 2x USB 2.0, 1x USB 3.0, HDMI, 1х CSI Camera Connector.

  • Интерфейс: 40-пиновый GPIO (как на платформе RPi).

  • USB 2.0 Micro-B (для работы в режиме device mode)

  • 4-хпиновый разъём для вентилятора

  • Питание через: USB-C 5V 3A

Цена

NVIDIA Jetson Nano можно купить примерно за 8000 рублей.

Asus Tinker Board

Плата ASUS Tinker Board это первый коммерческий SBC ASUS, разработанный как прямой конкурент Raspberry Pi Model B. Хотя в этой плате используется устаревшая технология, она по-прежнему является жизнеспособной альтернативой до уровня документации и поддержки, предоставляемых ASUS. Tinker Board напоминает RPi: здесь четыре порта USB, HDMI, Ethernet. GPIO выделены цветом это очень удобно и симпатично. Сразу заметен другой цвет платы и другой процессор, а чипсет Ethernet поддерживает гигабитный интерфейс, в отличие от 100 Мбит/с на RPi. Плата позиционируется как обучающий материал при изучении электроники и программирования, как инструмент мейкера DIY, а также для изготовления промышленных приложений и устройств интернета вещей. Размеры Tinker Board: 85,654 мм.

Технические характеристики:

  • Процессор: четырёхъядерный 1,8ГГц ARM Cortex-A17 (Rockchip RK3288)

  • GPU: ARM Mali-T764 GPU с поддержкой OpenGL ES1.1/2.0/3.0, OpenVG1.1, OpenCL, DirectX11

  • Память: 2ГБ Dual channel LPDDR3

  • Связь: Gigabit LAN и Bluetooth 4.0 + EDR

  • Wi-Fi: 802.11 b/g/n с заменяемой антенной

  • USB: 4 порта USB 2.0

  • Интерфейсы расширения: 40 штырьковых контактов, в том числе 28 GPIO контактов для сигналов PWM и S/PDIF

  • Звук: RTL HD кодек, аудиоразъём 3,5 мм

  • Камера: разъём Camera Serial Interface (CSI) для подключения камеры

  • Дисплей: 15-штырьковый разъём Display Serial Interface (MIPI DSI) с поддержкой разрешения HD

  • Дисплей: один порт HDMI 2.0 с поддержкой разрешения до 4K

  • Внешняя память: разъём для флеш-карт Micro SD с поддержкой UHS-I

  • Операционная система: Debian OS / Kodi

  • Питание: 5V/2A Micro USB (кабель не входит в комплект).

  • Максимальное энергопотребление 5Вт. В неактивном режиме с HDMI 2,25Вт, без HDMI 2Вт

Цена

Плата ASUS Tinker Board стоит в разных магазинах по-разному (видел и за 7000, и за 10 000). Изучите варианты перед покупкой.

Sipeed XuanTie C906

О Sipeed XuanTie C906 известно немного, так как он еще не выпущен, но, похоже, это первый бюджетный одноплатный компьютер, использующий архитектуру RISC-V, что делает его несколько особенным. По всей видимости, у компании есть соглашение о неразглашении с Allwinner, поэтому информации о спецификациях почти нет. Единственная информация, доступная для этой платы, была опубликована еще в ноябре 2020 года в твиттере. То есть выход устройства ожидается в феврале 2021 года.

Заключение

Если вы ищете альтернативы Raspberry Pi, то можете повыбирать интересные устройства из списка выше. Там есть варианты с различными характеристиками и ценами. Пусть некоторые из этих SBC еще не выпущены, уже скоро их можно будет пощупать. замечу, что я не имею ничего против Raspberry Pi, они заслуженно являются лидером на рынке. Если вы считаете, что я пропустил какую-то достойную альтернативу Raspberry Pi, можете написать в комментариях возможно, я добавлю её в этот список.

Благодарю за внимание.

Подробнее..

Перевод Raspberry Pi Pico vs Arduino какая плата лучше?

01.02.2021 00:22:31 | Автор: admin


До того, как Raspberry Foundation представила Pi Pico, сравнивать малинку и Arduino было некорректно. Raspberry Pi полноценный компьютер, хотя и специфический. А вот Arduino микроконтроллер. Но с появлением Raspberry Pi Pico все изменилось, поскольку новая плата это тоже микроконтроллер, разница с Arduino уже не такая большая.

У Arduino и Raspberry Pi Pico есть одна общая черта это отличные платы для разного рода проектов, включая управление освещением, приводами или сенсорами. Использовать полноценную ОС при этом не нужно. Сейчас уже можно сравнить возможности обеих плат, чем в этой статье и займемся.

Функциональность и GPIO




У Raspberry Pi Pico отличный от других представителей линейки форм-фактор. В частности, у платы 40 пинов DIP. Плюс по периметру есть зубцы, которые можно использовать для коннекта Pico к несущей платы.

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

У GPIO платы Pico много цифровых каналов, плюс три аналоговых входа и несколько I2C, SPI и UART интерфейсов. Но у Pico есть и ряд программируемых PIO, которые можно настроить для эмуляции других интерфейсов и протоколов, включая WS2812 NeoPixels. В целом, плата недорогой и универсальный инструмент с GPIO.

Победитель: Raspberry Pi Pico

SoC Raspberry Pi Pico vs Arduino




Предыдущие поколения популярных Arduino плат были оснащены чипами Artmel вроде ATMega328P. Сейчас многие платы оснащаются ARM. Например, у Arduinos Portenta H7 двухъядерный Arm Cortex M7+M4.

Такие платы, как Adafruit, Seeed и SparkFun также оснащены ARM-чипами. Микроконтроллерам обычно не нужны несколько ядер и высокая производительность, поскольку они используются, в основном, для какого-то одного процесса.

А вот RP2040 это уже следующее поколение чипов. Во-первых, это Arm Cortex M0+, работающий с частотой 133 МГц. Это гораздо быстрее UNOs 16 MHz 328P. SRAM у процессора малинки 264KB, что больше, чем у Uno здесь всего 2 КБ. Ну и у Pico 2 МБ внутренней памяти, а у Uno всего 32 КБ. Негусто.

Ну а что Pico может противопоставить Portenta H7? Окей, у этой платы Arm Cortex M7 + M4, который может работать с частотой вплоть до 480 МГц, плюс 2 МБ внутренней памяти и 1 МБ ОЗУ. У платы есть WiFi, Buetooth, интерфейс для подключения камеры и GPU. В целом Potenta выигрывает по всем фронтам, очень мощная плата для своего класса. Но если вспомнить, что стоит она около $109 (с налогами), и сравнить эту цену с $4 для Pico, выбор становится очевидным.

Победитель: Raspberry Pi Pico

Программирование Raspberry Pi Pico vs Arduino




Arduino IDE интегрированная среда разработки для Windows, MacOS и Linux, разработанная на Си и C ++, предназначенная для создания и загрузки программ на Arduino-совместимые платы. Есть альтернативы PlatformIO и Arduino Create, облачная среда от Arduino. Но, в целом, это все та же IDE.

С течением времени она эволюционировала, улучшалась, так что теперь есть встроенные функции вроде управления несколькими платами, плюс средства для поиска и установки библиотек пакетов для надстроек и аксессуаров. Arduino Create удобная облачная среда, которую можно использовать как для решения простейших задач, так и для более сложных проектов. PlatformIO поставляется в трех версиях инструмент командной строки, выделенная IDE или же средство интеграции с существующей IDE, например Microsoft Visual Studio Code.

Что касается новой платформы, Raspberry Pi Pico, но кодить в этом случае можно в среде C и MicroPython. Причем сами разработчики платформы рекомендуют последний вариант. В случае с MicroPython и Pico все просто отлично. Работать с языком можно при помощи Python Shell, известном как REPL (Read, Eval, Print, Loop), или же IDE вроде Thonny. Все это дает возможность быстро писать и деплоить код.

Если все же нужно работать с С, то есть два варианта пишем код в редакторе (Vi / Vim. Nano), а потом используем консольные инструменты. Либо же используем разные расширения для сборки и переноса кода на Pico. Оба подхода нормально работают, но это не очень удобно. Правда, вскоре появится третий вариант обновленный IDE Arduino с поддержкой чипа RP2040.

Победитель: Raspberry Pi Pico

Простота и удобство работы с платами




Как уже говорилось выше, другие модели Raspberry Pi это полноценные ПК. Они работают под управлением полноценной ОС. Pico микроконтроллер без ОС.

Соответственно, вне зависимости от выбранного языка, нужно прошивать Pico образом этого языка. Это дает возможность потом работать с платой, загружая код прямо в нее. Формать образов UF2 от Microsoft. Для того, чтобы прошить образ, нужно нажать на BOOTSEL после подключения miscro USB кабеля, затем загрузить UF2 файл на диск RPI-R2 и через несколько скунд можно работать. Т.е. можно открывать тот же Thonny и начинать писать код.

С языком C/C++ все несколько сложнее. Здесь нужно использовать уже консоль, текстовый редактор, загружать дополнительные приложения и следить за зависимостями. Если все хорошо, то получается проект, который загружается вручную в виде UF2 файла в Pico.

Немного автоматизировать эту задачу можно при помощи Microsofts Visual Studio Code, который дает возможность написать код проекта и создать нужный файл в несколько кликов. Это не самый удобный процесс для новичков, но все решаемо. Кстати, команда Arduino недавно заявила о том, что вскоре можно будет работать с RP2040 посредством Arduino IDE.

Что касается непосредственной работы с платами, то нужно упомянуть, что Raspberry Pi Pico поступает нераспаянной, т.е. без пинов. Их можно припаять самостоятельно, для чего, конечно, нужен паяльник. Arduino продаются уже с пинами, за исключением таких плат, как Arduino Nano Every и Nano 33 IoT. А значит, можно сразу приступать к работе.

Но это мелочи, в итоге проще работать все же с Pico, так что плата побеждает и здесь.

Энергопотребление


Raspberry Pi Pico эффективная плата для встраиваемых проектов. По сравнению с типичным Raspberry Pi, Pico потребляет гораздо меньше. Просто потому, что это микроконтроллер.

В нашем обзорном тесте мы запитали Raspberry Pi Pico с 12 светодиодами Neopixel на полной яркости от источника питания 5 В. Потребляемый ток 140 мА, 0,7 Вт! Это отлично, поскольку Raspberry Pi 4, работающий в режиме ожидания показывает результат в 4-5 Вт. Итак, по сравнению с Raspberry Pi, Pico потребляет энергию, но как он сравнивается с Arduino Uno, выполняющим тот же тест?

При 5 В 90 мА, 0,45 Вт! Таким образом, Arduino Uno потребляет меньше, но этого и следовало ожидать, учитывая конфигурацию микроконтроллера. Если повторить тест с другой платой, скажем, Portenta H7, то мы увидим гораздо более высокое энергопотребление, поскольку процессор Arm, используемый на Portenta, более мощный. Он даже мощнее, чем RP2040.

Победитель: Arduino

В сухом остатке



В целом, обзор достаточно субъективный. В итоге получается, что победитель Pico, с его ценой в $4, широким спектром возможностей, документацией и простотой в работе. Это лучшая плата для проектов с микроконтроллерами, поскольку за минимум денег мы получаем максмум возможностей. При этом все работает так, как заявлено, в отличие от многих других плат.

С некоторыми из них приходится изрядно повозиться, чтобы заставить работать. Плюс ко всему, MicroPython лучший вариант для работы, с его помощью плату можно запустить очень быстро. После того, как разработчики Arduino IDE добавят поддержку Pico, без проблем можно будет работать и с С/С++. И тогда поклонники Arduino, которые привыкли к своему микроконтроллеру и принципам работы с ним, смогут опробовать и Pico.

Round Raspberry Pi Pico Arduino
Функциональность и GPIO
SoC
Программирование
Простота работы с платами
Энергопотребление
В сухом остатке 4 1


Подробнее..

MirkoPC док-станция для Raspberry Pi 4, превращающая малинку в полноценный ПК

20.04.2021 14:21:11 | Автор: admin

Raspberry Pi 4 Model B отличный одноплатник, который можно использовать для решения обширного спектра задач. Все бы хорошо, но у платы, в силу ее небольшого размера, ограниченное число портов и коннекторов. Потенциально плата поддерживает гораздо большее их количество, чем реализовали разработчики.

Вот бы добавить HDMI, несколько USB, Ethernet! И это уже можно сделать, причем почти без усилий. Разработчик из Польши по имени Mirek предложил собственное решение своеобразную док-станцию для малинки, которая превращает ее в полноценный Linux-ПК. На этой плате есть несколько выходов для дисплеев, USB-порты, разъем для подключения PCIe NVMe и кое-что еще.

Стоит напомнить, что сама малинка четвертой модели базируется на четырехъядерном ARM Cortex-A72. Есть Wi-Fi 6 и Bluetooth 5.0. Плата MirkoPC добавляет к этому:

  • 1 x M.2 2242/2280 M-key сокет (PCIe x1 Gen 2);
  • 1 x microSD слот;
  • 1 x Gigabit Ethernet порт;
  • 2 x HDMI-порта (1 обычный, 1 micro);
  • 4 x USB 2.0;
  • 1 x 28-pin GPIO header;
  • 2 x MIPI CSI-2 интерфейса камеры;
  • 2 x MIPI DSI интерфейсы дисплея;
  • 1 x 3.5mm;
  • 1 x USB-C порт питания (5V/3A).

Кроме того, у платы есть DAC-конвертер (вплоть до 32-bit/384 kHz) и усилитель наушников, плюс модуль часов реального времени с батарейкой, а также инфракрасный порт для использования в качестве пульта управления. Еще разъем для подключения кулера и светодиоды.

Несмотря на то, что малинка не самая мощная плата в своем классе (она уступает, например, Intel NUC), одноплатник оснащен флагманским для Raspberry Pi чипом Broadcom BCM2711. При необходимости можно приобрести Compute Modules с 8 ГБ ОЗУ LPDDR4-3200 и 32 ГБ внутренней памяти.

Новая разработка дает возможность установить microSD или даже NVMe SSD любого объема.


Потребляет это чудо техники целых 15 Ватт. Этого достаточно для проведения вычислений, но вот при условии подключения того же SSD, который и сам является существенным потребителем энергии, могут возникнуть проблемы. Разработчик говорит, что в будущих версиях платы этого недостатка не будет. Да и проблема не очень большая: что-то может пойти не так лишь при очень активном потреблении платы и накопителя.

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

Если есть желание получить нечто подобное прямо сейчас, то вот похожий проект, который называется TOFU.


Здесь тоже куча портов и коннекторов:

  • Gigabit Ethernet;
  • M.2 2242 сокет;
  • HDMI-порт;
  • 3 x USB Type-A;
  • 1 x USB Type-C OTG;
  • microSD слот;
  • 40-pin Raspberry Pi GPIO header;
  • коннекторы для экранов и камеры;
  • 2 x power inputs (2.1 мм и 3.5 мм).

Стоимость TOFU около $110. Скорее всего, и плата от польского разработчика будет стоить примерно столько же.

Подробнее..

Перевод Одноплатник Pimoroni Pico LiPo как микроконтроллер от Raspberry, только лучше

02.06.2021 20:09:34 | Автор: admin

После того, как Raspberry Pi Foundation разработала и анонсировала свой процессор RP2040, на рынке появилось несколько одноплатников на его основе, включая собственную разработку Raspberry. Среди наиболее заметных RP2040-проектов стоит отметить Adafruit Py RP2040 и Pimoroni Tiny 2040. Есть еще и Adafruit Feather RP2040 с Cytron Maker Pi Pico.

Напомним, что сам по себе проект Raspberry Pi Pico это, по сути, микроконтроллер с GPIO и возможностью программирования. Плату можно применять для эмуляции самых разных типов интерфейсов, включая ретро-системы. У Pico от Raspberry относительно небольшой набор функций, но своих денег плата стоит. Сейчас появился новый девайс, который называется Pimoroni Pico LiPo. Это как бы Pico на стероидах.

Его стоимость $17, то есть в 4 с немногим раз больше, чем у оригинального Pico. Но и возможности шире, так что девайс может пригодиться тем разработчикам, кому не хватало возможностей микроконтроллера от Raspberry. Так, здесь есть функция заряда аккумулятора, USB-C порт, 16 МБ флеш-памяти и коннектор Stemma QT / Qwiic.

Подробнее о характеристиках



Система на чипе RP2040
Двухьядерный Arm Cortex M0+, частота 133 МГц.
264KB SRAM, и 4 / 16MB Flash памяти
GPIO 26 мультифункциональных 3.3V GPIO пинов
2 SPI, 2 I2C, 2 UART, 3 12-bit ADC, 16 PWM каналов
1 x User LED (GPIO 25)
8 Programmable I/O (PIO) state machines for custom peripheral support.
Stemma QT / Qwiic коннектор
SWD debug breakout
Модуль можно распаивать на платах
Power USB C для данных и питания
2 pin JST коннектор для LiPo / Li lon аккумуляторов. Мониторинг батарей + LED для отображения режима работы батареи.

Дизайн и использование Pimoroni Pico LiPo



Pico LiPo идеально работает с MycroPython. Для того, чтобы получить максимальную отдачу от платы, нужно использовать CircuitPython, в особенности при работе с компонентами Stemma QT / Qwiic. Если по какой-то причине вам необходимо работать с MicroPython и при этом взаимодействовать с устройствами Stemma QT / Qwiic, то стоит попробовать последний проект от Adafruit. Вот здесь можно загрузить все необходимое, работает с Pico LiPo весьма гладко.

Как и говорилось выше, Pico LiPo это Raspberry Pi Pico на стероидах. При таком же размере и аналогичной GPIO распиновке у девайса есть функция зарядки батарей, Stemma QT / Qwiic и кнопка включения. Наиболее важная возможность таки зарядка аккумуляторов. Режим зарядки контролируется чипом MCP73831. Ток небольшой 215 мА, но в ходе теста LiPo батарея была заряжена полностью.


Есть защита аккумулятора XB6096I2S, что предотвращает возможное превышение параметров заряда. Выделенного MicroPython или CircuitPython модуля для мониторинга заряда нет. Для определения факта заряда используется 24-й пин. А для мониторинга 29-й. Всего у девайса три аналоговых входа столько же, сколько и у малинки, но меньше, чем у Adafruits Feather RP2040. Да, на один пин меньше, но если учитывать, что его используют для контроля заряда батареи, то с потерей смириться проще.

Положительный момент в этом возможность использования аккумулятора в качестве базового бесперебойника питания. Так, проект можно запитать от USB-C, но если питание отключится, в дело вступает батарея. Распиновка у Pico LiPo такая же, как и у малинки. Плюс есть коннектор Stemma QT, благодаря которому подключение внешнего устройства становится очень простой задачей.

Наличие этого коннектора реальный прорыв для I2C-девайсов. Дело в том, что у ряда производителей есть множество совместимых компонентов, включая датчики температуры, емкостные входы, экраны и т.п. Используя емкостный сенсорный датчик MPR121 и последнюю версию CircuitPython 7 для Pico LiPo, мы создали демонстрационную модель системы с применением Stemma QT-коннектора.


Система заработала сразу и без проблем. Кроме того, мы видим множество проектов с применением Stemma QT / Qwiic. Рядом с этим коннектором есть трехпиновой коннектор JST-SH это отладка. Контакты используются для получения данных из работающего RP2040 без использования UART. Используя эти контакты и другой Pi Pico в качестве дебаг-хоста мы можем работать с процессором, SRAM, отображенной памяти I/O в выбранной среде разработки. Если вы разрабатываете критически важные RP2040-приложения, то это ключевая особенность. Ну а для большинства из нас просто интересная функция.

Кнопка power тумблер. Звучит не особо захватывающе, но есть здесь пара важных моментов. Дело в том, что именно эта кнопка позволяет полностью обесточить питание, а не просто выполнить сброс. Ну а поскольку у нас есть аккумулятор, то его заряд можно сэкономить, полностью отключив плату. С кнопкой другого типа такой номер не пройдет батарея продолжит разряжаться. Когда плата понадобится снова просто включаем кнопку и все.

Кнопка BOOT обычно применяется для ввода системы в режим прошивки. Но у этой платы есть еще возможность задействовать кнопку в коде. На плате три разных светодиода, включая power, статус заряда батареи и пользовательский светодиод, подключенный к 25 контакту.

Как и упоминалось выше, распиновка у платы такая же, как у малинки, так что использовать ее можно точно там же и точно так же, где применяется Raspberry Pi Pico. При желании этот микроконтроллер можно заменить на LiPo в уже готовом проекте и получить больше функций. Мы проверили это утверждение, заменив микроконтроллер от Raspberry на новую плату вот в этом проекте. После замены все заработало без танцев с бубном.

Юзкейсы для Pimoroni Pico LiPo



У LiPo есть все, что дает Raspberry Pi Pico, плюс дополнительные функции. Даже одна лишь возможность подключения батареи стоит тех $17, которые просят разработчики за свой микроконтроллер. Его можно применять в самых разных проектах, от световых мечей на базе NeoPixel до интернета вещей. Pico LiPo можно применять в разных роботехнических проектах, но для сервоприводов, двигателей и т.п. понадобится собственный источник питания GPIO платы не даст ток больше 600 мА.

Подробнее..

Перевод Raspberry Pi Foundation 5 устройств менее чем за год. Что дальше?

31.05.2021 22:09:30 | Автор: admin

Менее чем за год Raspberry Pi Foundation выпустила целую серию новых продуктов. Четыре гаджета вышло в 2020 году и один в 2021. Все это невзирая на проблемы с логистикой из-за пандемии. Успех частично объясняется ростом спроса на ПК, включая миниатюрные системы, после массового перехода на удаленку.

Компания постаралась удовлетворить спрос: сначала она выпустила хорошую камеру, в апреле 2020, через месяц Raspberry Pi 4 c 8 ГБ ОЗУ. Потом Compute Module 4, Raspberry Pi 400 и, совсем недавно, Raspberry Pi Pico за $4. Даже пандемия COVID-19 не повлияла на эффективность работы и цепочку поставок. Будет ли компания отдыхать? Вряд ли.

Мы вошли в пандемию с огромным списком задач. Их успешное решение, запуски новых продуктов, позволяют нам успешно двигаться вперед, заявил создатель и соучредитель Raspberry Pi Эбен Аптон.

Компания действительно решает очень сложные задачи то, что Raspberry Pi Foundation нашла необходимые ресурсы и силы для реализации всех названных проектов, можно назвать реальным достижением. Но Raspberry не собирается останавливаться у компании большие планы на этот год.


Год бюджетных ПК


Raspberry Pi одна из первых компаний, которые столкнулись с массовым переходом на удаленку. Все потому, что в большинстве семей всего один ПК на всех в обычной ситуации. И вдруг у большого количества семей появилась необходимость задействовать минимум один дополнительный компьютер, а лучше больше. Ведь членам семьи нужно учиться и работать, и все это удаленно.

Команда Raspberry стала понимать серьезность ситуации с пандемией после того, как в упаковках с комплектующими, приходящими от поставщиков, им все чаще стали встречаться маски, вкладываемые в качестве подарка. Все это приходило из Китая. Некоторые поставщики даже стали говорить команде, что через несколько недель она столкнется с непредвиденными трудностями из-за пандемии.

Но в любом случае множество пользователей по всему миру оценили достоинства системы ценой менее $50, которую можно использовать в качестве десктопного ПК. Спрос резко увеличился, и уже в марте 2020 года компания продала 640 000 девайсов, что стало вторым по объему продаж месяцем в истории компании. По данным TechRepublic общий объем разных устройств за 2020 год превысил 7,1 млн штук.

В 2020 году появился новый продукт в линейке Pi 400. Компания взяла свой флагман, Pi 4, и поместила его в клавиатуру, в результате чего получился эдакий десктопный ПК с базовыми функциями. Он предназначен, в основном, для семей с ограниченным бюджетом и не занимает много места на рабочем столе. Идея создания такого устройства появилась не вдруг команда вынашивала ее более четырех лет.


Команда, кстати, думала, что пандемия быстро закончится, возможно, даже к тому моменту, как будет выпушен Pi 400. Но, как все мы знаем, это оказалось ошибкой. Согласно данным продаж, компания продала в марте от 300 до 400 тыс. этих устройств. У Raspberry Pi Foundation не было проблем с продажами скорее, проблемы возникли с необходимостью удовлетворять постоянно растущий спрос.

Но все оказалось не так сложно, как могло бы быть. Команде удалось отладить процессы так, что участие в процессе производства кого-либо из членов команды почти не требовалось. Нужно было поддерживать процесс, мониторить выполнение задач, но не более. С Pi 400 возникли некоторые сложности, поскольку требовалась ручная сборка некоторых элементов. Но в итоге все получилось.

Как Raspberry Pi помогла пациентам, студентам и их родителям


Компания участвовала и в большом количестве социальных и благотворительных инициатив. В частности, команда предоставляла свои устройства учащимся, кто не мог позволит приобрести технику. В феврале Raspberry Pi Foundation предоставила 5000-й комплект в рамках кампании Bloomfield Trust.

Также Raspberry Pi Foundation продавала свои наборы напрямую школам, без посредников и наценок. Более того, образовательным учреждениям устройства предлагались по оптовым ценам. По словам представителей компании, Raspberry Pi c 2 ГБ ОЗУ, мышью, клавиатурой и базовым дисплеем лучший выбор, чем бюджетные ноутбуки, которые предлагаются школьникам в рамках государственных инициатив в Великобритании.

За 40 фунтов стерлингов вы получаете нечто гораздо более крутое, чем самый дешевый Chromebook. Да и недорогие Хромбуки это мусор, рассказал представитель компании.


Бездонная бочка


Речь идет о еще одном устройстве компании микроконтроллере Pico. Это первая такая система в продуктовой линейке Raspberry Pi, как и первое устройство с собственным процессором.

Pico чрезвычайно востребованный продукт. В марте 2021 года компания отрузила 200 000 устройств при общем количестве заказов в 900 000. Затем было отгружено еще 100 000 устройств, но покупатели заказали дополнительно 200 000.

Это попытка наполнить бездонную бочку. Некоторые покупатели, видя цену в $4, вероятно, заказывали десятки микроконтроллеров, заявил Аптон.

Raspberry Pi Pico позиционируется как девайс для обучения, хотя, конечно, устройство массово покупают и любители DIY. В любом случае, микроконтроллеры полностью новый рынок для компании. Этот девайс расширяет и без того объемную экосистему продуктов.


Программное обеспечение новый фокус компании в 2021 году


Несмотря на успехи, компанию затронуло влияние пандемии инженеры, участвующие в разработке железных проектов, не могли посещать офис и лаборатории. Ну а выполнять подобную работу в домашних условиях невозможно.

Аптон считает, что удаленная разработка аппаратных систем плохая идея. Поэтому в 2021 году Raspberry Pi снизила активность в разработке железа и направила дополнительные усилия на софт. Значит ли это, что Raspberry Pi 5 не появится в этом году? Вероятно, да, хотя компания пока не отказалась полностью от идеи выпуска нового девайса.

Raspberry Pi планирует к середине года перевести платформу на Debian 11, что позволит обновить многие элементы системы, включая оптимизацию стека Mesa 3D. Также Аптон надеется увидеть, как повлияет обновленный Chromium на Raspberry Pi. Одно из преимуществ Chromium мультимедийные возможности, включая видеоконференции, что крайне актуально в нынешнюю эпоху удаленки.

Сейчас мы используем Chromium 88, так что находимся на переднем краю современных технологий. Это очень важно, поскольку многие платформы видеоконференцсвязи задействуют самые новые возможности браузеров. И если мы говорим о том, что Raspberry Pi отличная платформа для работы из дома, нужно поддерживать видеоконференцсвязь, говорит Аптон.

Если 2020 год был годом нового железа Raspberry Pi, то 2021 может стать годом, где во главу угла ставится разработка ПО. Усилий для этого нужно не меньше, чем в ходе разработки аппаратного обеспечения, поскольку команда Raspberry Pi одновременно работает с ядром, с Debian и Chromium.

На данный момент мы добились значительных успехов в интеграции мультимедия, в частности, мы добавили поддержку Vulkan 1.1. Новые стандарты это еще одно направление, говорит Аптон.

Подробнее..

Raspberry Pi 400 что это, для чего и кому может пригодиться?

04.11.2020 18:10:50 | Автор: admin

На днях Raspberry Pi Foundation представила новое устройство, которое получило название Raspberry Pi 400, о чем сообщалось на Хабре. В отличие от прошлых систем, это не совсем одноплатный ПК. Точнее, он, только в форм-факторе клавиатуры, и с рядом доработок.

Устройство хочется назвать новым Spectrum, но, конечно, это только желание, которое с действительностью имеет мало общего. Внутри клавиатуры Raspberry Pi 4 4GB, адаптированного специально для новой системы. Базовый девайс с ценой $70 включает мышь, блок питания, необходимые для работы кабели, microSD карточку и копию Raspberry Pi Beginners Guide.

Дизайн девайса



В целом, все хорошо те, кто разрабатывал дизайн Raspberry Pi 400, не зря свой хлеб едят. Девайс привлекает внимание необычным форм-фактором, и напоминает о классических ПК, включая Commodore 64, Микрошу и все тот же ZX Spectrum.

Размеры клавиатуры 283 x 120 x 20 мм. Судя по отзывам тех, кто уже опробовал устройство в работе, клавиатура удобная, никаких проблем работа на ней не вызывает. Но клавиатура это еще не все, на задней панели системы ряд портов и разъемов, включая GPIO, слот для карт памяти, сразу два порта micro HDMI, два порта USB 3.0 и один USB 2.0. Есть еще и гигабитный Ethernet, так что пользователь получает все, что нужно.

Для чего оно может пригодиться?


По словам разработчиков из Raspberry Pi Foundation, устройство создавалось для того, чтобы практически любой пользователь мог получить свой собственный персональный компьютер как для обычной офисной работы, так и для нужд разработки. Его небольшой размер и обилие портов и протоколов связи дают возможность использовать систему в полевых условиях, дома и на улице.

Систему можно подключить к любому телевизору и начать изучать программирование детям и подросткам подобная система подойдет как нельзя лучше.


Моя мечта заключается в том, чтобы соблазнить людей купить ПК, а затем хитростью заставить их стать программистами. Вот что случилось со мной: меня заманили купить BBC Micro, а впоследствии я стал инженером-программистом, заявил основатель Raspberry Pi Эбен Аптон.

Девайс не слишком мощный, но видео в 4K он тянет без проблем, даже вот это видео Costa Rica in 4K 60fps HDR на 720p видимых лагов нет. Небольшие затруднения иногда возникают со звуком, но это все решаемо.

Сейчас, в условиях пандемии, Raspberry Pi 400 будет востребован как у студентов, школьников, так и у взрослых людей, которым система нужна для работы.

Характеристики устройства


Габариты: 28612223 мм
Процессор: 4-ядерный Broadcom BCM2711 (Cortex-A72), 1,8 ГГц
Память: 4 ГБ оперативной LPDDR4, слот для microSD
Порты: 2USB 3.0 Type-A, 1USB 2.0 Type-A, 2microHDMI, 40-пиновый разъём GPIO, Ethernet
Связь: Wi-Fi 802.11ac, Bluetooth 5.0


Клавиатура доступна в шести разных вариантах, включая Великобританию, США, Германию, Францию, Италию, Испанию. В ближайшее время разработчики планируют добавить варианты для Норвегии, Швеции, Дании, Португалии и Японии. Кроме чисто белого девайса, планируется выпустить варианты в сером и черном цветах.

Аптон считает, что ARM вполне может использоваться в качестве архитектуры для десктопных ПК. И текущий проект попытка расширить возможность применения ARM-процессоров. Архитектура x86, по словам Аптона, уже не является синонимом для процессоров x86.

Приступая к работе


Несмотря на оригинальный форм-фактор, это все еще Raspberry Pi 4 4GB. Возможности аналогичные, кроме единственного исключения у нового девайса нет CSI и DSI коннекторов, которые используются для подключения официальных камеры и тачскрина. Что касается пропажи коннектора для экрана то это не страшно, поскольку девайс можно подключить к телевизору или монитору. Но вот разъем для камеры жалко.

А вот с коннектором GPIO проблем нет, доступ к нему возможен с задней стенки.


Что касается выбора ОС, то один из вариантов Ubuntu 20.10, о котором мы недавно писали. Дистрибутив записан на SD-карту, которая входит в комплект поставки. Ubuntu на карте это инсталлятор, при первой загрузке пользователю будет задан ряд вопросов, после чего система сконфигурируется соответствующим образом.

Система работает из коробки, так что проблем нет все функционирует, как нужно. Единственный не очень приятный момент Ubuntu работает все же медленнее, чем Raspberry Pi OS. Но с этим можно жить, тем более, что разница не огромная.

Если кто тестировал Raspberry Pi 4, то можно было заметить, как греется этот одноплатник. Сторонние разработчики выпускали разные решения для этой проблемы. Здесь же температура не поднимается выше 30C благодаря эффективной системе охлаждения, хотя и пассивной, которая установлена внутри клавиатуры. Максимальная температура, которую заметили пользователи, опробовавшие Raspberry Pi 400 52C. Стоит напомнить, что температурный предел функционирования малинки 85C.

О достоинствах мы уже говорили, среди недостатков относительно небольшой размер клавиатуры, что может оказаться не слишком комфортным для людей с большими руками. Кроме того, пока что нет версии с 8 ГБ ОЗУ, со всеми вытекающими последствиями. Ну и понятно, что проапгрейдить систему не получится это одноплатник в клавиатуре, а не полноценный десктопный ПК.

Что внутри?




Если разобрать малинку с клавиатуррой, то окажется, что внутри все неплохо организовано. Единственное, об апгрейде и речи не идет, поскольку конфигурация и размещение элементов на платах разных поколений Raspberry Pi отличается друг от друга.


Для того, чтобы открыть системный блок лучше использовать специализированные инструменты, а не нож в противном случае на корпусе можно оставить заметные следы вскрытия, что всегда не очень приятно.


В сухом остатке


Это маленький универсальный десктопный ПК, который идеально подходит для решения офисных задач, разработки, обучения детей и взрослых принципам работы с компьютером и ОС Linux. При этом устройство стоит значительно меньше, чем даже базовый ноутбук или хромбук у ритейлеров комплект с Raspberry Pi 400 стоит около $90. Да, можно купить бу ноутбук, но это будет не очень мощное устройство, которое, к тому же, уступает в оригинальности малинке,

Для разработчиков Raspberry Pi 400 отличная система, в особенности благодаря сохраненному разъему 40-pin GPIO. Не только взрослые, но и дети школьного возраста, которым нравится электроника, смогут использовать девайс для создания интересных электронных проектов, ПО и всего прочего.

Подробнее..

DLang, Vibe.d и кросс-компиляция для RPi4

18.06.2021 10:22:12 | Автор: admin

Добрый вечер!

Микрокомпьютеры часто используются для построения на них серверов внутри локальной сети. Это очень удобно - у тебя есть маленькая коробочка, которая стоит где-то в ящике, мало потребляет и позволяет тебе, например, пользоваться принтером или сканером из любой точки твоей квартиры.

Недавно я написал сервер на DLang с использованием библиотеки Vibe.d. Для него я пишу кросс-платформенный клиент. Основной моей системой является Arch, и мне этого более чем достаточно, но для тестирования некоторых платформозависимых вещей я перезагружаюсь в Windows 10.

Отсутствие в Windows пакетного менджера и тому подобных вещей отпугнуло меня от того, чтобы собирать сервер для нее, хотя это и возможно. Поэтому мне в голову пришло очень логичное решение - запустить сервер на моем Raspberry Pi 4. Сейчас я использую его для удаленного доступа к принтеру и сканеру.

Попытка 1. Компиляция на микрокомпьютере

Первое, что пришло мне в голову - скинуть исходники на целевое устройство, скачать туда компилятор, систему сборки (в моем случае DUB) и собрать все там. Я предполагал, что это будет немного дольше, но я всегда мог оставить этот процесс выполняться на ночь, но не тут-то было...

Исходники я быстро скинул при помощи scp, после чего подключился к микрокомпьютеру по ssh и начал разбираться с компилятором.

На целевом устройстве стоит основанный на Debian Raspbian 10 Buster. Для поиска пакетов придется использовать apt... По сравнению с pacman он гораздо менее удобный, выдает кучу лишнего мусора (ИМХО).

Эталонным компилятором для D является dmd, но поиск по пакетам не выдал ничего полезного. Как оказалось : первое - dmd нет в стандартном репозитории Debian и Ubuntu, второе - он не поддерживает arm.

Чтож... Ничего страшного, ведь для D есть еще минимум 2 полноценных компилятора. Один из них, GDC, является частью GNU-Compiler-Collection и, вероятно, найдется везде, где есть Linux. Второй же, ldc, использует LLVM для генерации кода, поэтому его вы можете найти практически везде (Можно даже скачать его на Android через Termux).

Именно эти два компилятора оказались доступны для загрузки на микрокомпьютер :

sudo apt install ldc2 gdc

Оставался только DUB - de facto система сборки и менджер пакетов для D. Он есть в стандартном репозитории, но он не работает... Проекты не инициализируются, при загрузке зависимостей не может установить соединение с сервером. Сплошное расстройство!

В одной из статей про сборку D для arm было указано про проблемы с DUB. В качестве решения там предлагалось собрать его самостоятельно из исходников. Почему нет? Спускаемя к исходникам : https://github.com/dlang/dub

Для сборки в репозитории есть скрипт build.d (Код на D может быть запущен как скрипт при помощи специального интерпретатора - rdmd для dmd, ldmd для ldc, gdmd для gdc). gdmd не установился вместе с gdc, так что будем использовать ldmd. Собираем :

ldmd -run build.d

Собрать-то собрали, но лучше от этого не стало. dub работает, но очень медленно. Загрузить все зависимости для Vibe.d ему так и не удалось...

Попытка 2. Кросс-компиляция через GDC

Первая статья, которая была про компиляцию D кода под arm предлагала использовать кросс версию gdc. Почему нет?

Идем на официальный сайт и скачиваем последнюю доступную версию : https://gdcproject.org/old/downloads . Первоначально меня смутила дата сборки компилятора, но что же поделать.

После загрузки и распаковки нужно было проверить работоспособность компилятора. Для этого я написал обычный для всех Hello world :

import std.stdio;int main(string [] args) {  writeln("Hello, World!");  return 0;}

Теперь нужно это откомпилить и проверить на целевой платформе. С тулчейном это делается достаточно просто (только вместо arm-linux-gnueabihf-gdc нужно указывать полный путь) :

arm-linux-gnueabihf-gdc app.d

Получается исполняемый файл. Скидываем его на Raspberry, выдаем разрешение на исполнение и... Работает!

Оставалось только собрать vibe.d. Для работы с HTTPS он использует криптографическую библиотеку : OpenSSl или Botan. В той же статье был представлен интересный метод, позволяющий избежать их ручной компиляции : смонтировать всю файловую систему микрокомпьютера и указать компилятору путь до библиотек, хранящихся на нем.

Я сделал все по инструкции и запустил сборку. К сожалению - неудача. С момента выхода скачанной мной версии GDC в языке появились новые конструкции, которые компилятор 2016 не поддерживает... Найти более новую версию GDC я не смог, так что необходимо было искать другие варианты.

Статья, которую я использовал для этого пункта.

Попытка 3. LDC и мутки с библиотеками

Остался только один компилятор, способный откомпилить нужную мне программу для arm - ldc. Он установлен у меня на основном компьютере при помощи pacman. Какие-то дополнительные действия не нужны.

Для компиляции под другую платформу нужно лишь указать специальный флаг и дополнительные библиотеки. Первоначально необходимо было собрать стандартную библиотеку D для arm. Делается это одной простой командой :

ldc-build-runtime --ninja --dFlags="-w;-mtriple=arm-linux-gnueabihf"

Появиться папка ldc-build-runtime.tmp/lib в которой храниться уже откомпилированная стандартная библиотека для arm. Для того чтобы скормить ее компилятору указываем следующий флаг : -L=-Lldc-build-runtime.tmp/lib
Пробуем собрать Hello World - ошибка линковки (не может найти точку входа). "Приехали", - подумал я. Собрал для начала объектный файл и решил попробовать слинковать его уже на raspberry - ld послал меня куда подальше.

Подумав и погадав, я решил скачать кросс-компилятор для C, взять линковщик оттуда и собрать все на основной машине. В Ubuntu и Debian arm-linux-gnueabihf есть в стандартном репозитории, а в Arch его можно было или собрать из AUR, или скачать уже собранный.

Раз уже делать, так делать - собираем из AUR. Процесс долгий, но интересный. Компиляция происходит в 3 этапа, постепенно собирая binutils, glibc и тп.

Спустя пару часов компилятор все же собрался. Я установил путь до него и собрал тестовую программу. Заработало!

Пробуем таким же образом слинковать другие библиотеки для проекта с Vibe.d... Не получилось. Линковщик стал таскать абсолютно все библиотеки из файловой системы raspberry и потерял половину ссылок. Undefined reference на malloc я еще не видел. До этого момента.

Не будем расстраиваться. Раз без включения библиотек от Raspberry все работает, просто локально соберем OpenSSL и ZLib (так же нужен), а потом прилинкуем их.

ZLib собрался довольно просто и быстро. Прилинковать его при помощи -L=-Lzlib/lib тоже не составило труда. Но вот OpenSSL отказался собираться от слова совсем. То ему компилятор не нравиться, то ему просто я не нравлюсь.

Из решений я нашел только одно - собрать OpenSSL на малине, скачать оттуда собранную и прилинковать на основной машине. На микрокомпьютере OpenSSL собрать было нетрудно. Я скачал его и добавил флаг -L=-Lopenssl/lib.

При компиляции я увидел всего 2 ошибки : неопределенная ссылка на SSL_get_peer_certificate и на ERR_put_error. Это меня доконало, я решил оставить это дело и лечь спать. Если бы я знал, как я был близок к победе на этом моменте.

Попытка 4. Toolchain и скрипты

На следующий день я решил попробовать все сначала, учесть все предыдущие ошибки и сделать что-то наподобие toolchainа для сборки D кода под ARM.

Начать я решил с кросс-компилятора для C. Загуглив что-то наподобие "arm-linux-gnueabihf gcc" я нашел вот этот вот сайт.

На нем представлены различные версии уже собранных и настроенных кроскомпиляторов. Не долго думая, я скачал последнюю доступную версию. Но, как оказалось позже, это было ошибкой.

Для проверки работоспособности компилятора я решил запустить Hello World, но уже на C :

#include <stdio.h>int main(int argc, char ** argv) {  printf("Hello, World!\n");  return 0;}

На этот раз я решил автоматизировать все, чтобы можно было просто запускать скрипты, делающие за меня всю грязную работу, поэтому появился build.sh :

#!/bin/bashgcc_arm/bin/arm-linux-gnueabihf-gcc main.c -o app.o

К счастью, все заработало с первого раза. Теперь я решил приступить к настройке компилятора для D. Как самый успешный, был выбран ldc. Я скачал последний релиз с GitHub (http://personeltest.ru/aways/github.com/ldc-developers/ldc) и также поместил рядом с C-компилятором.

Теперь было необходимо собрать стандартную библиотеку D для arm. Так появился build_ldc_runtime.sh :

#!/bin/bashexport CURRENT_DIR=$(pwd)export LDC_PATH=$CURRENT_DIR/"ldc2/bin"export GCC_PATH=$CURRENT_DIR/"gcc_arm/bin"export CC=$GCC_PATH/"arm-linux-gnueabihf-gcc"$LDC_PATH/ldc-build-runtime --ninja --dFlags="-w;-mtriple=arm-linux-gnueabihf"

Сборка прошла успешно, и я перешел к тестированию HelloWorld. Также откомпилил его и запустил на Raspberry, но получил слегка неожиданную ошибку. Исполняемый файл требовал GLIBC не ниже, чем 2.29. Погуглив, как посмотреть версию GLIBC, я понял, что на малине стоит всего-лишь 2.28...

Так как, по моему мнению, clang и llvm, а следовательно и ldc, не пропагандируют GLIBC и вроде как даже могут обходиться без нее, был сделан вывод о том, что проблема в gcc.

Я решил скачать Toolchain с той же версией gcc, что и на целевом устройстве, то есть 8.3.0. К счастью, на том же сайте был найден подходящий компилятор. Я удалил старый, распаковал новый, пересобрал ldc_runtime и все заработало.

Чудесно. Оставалось присобачить сюда ZLib и OpenSSL. Начал я, конечно, с ZLib, так как с ним меньше проблем :

#!/bin/bashexport CURRENT_DIR=$(pwd)export GCC_PATH=$CURRENT_DIR/"gcc_arm/bin"export CC=$GCC_PATH/"arm-linux-gnueabihf-gcc"mkdir tmp_zlibcd tmp_zlibgit clone https://github.com/madler/zlib.gitcd zlib./configure --prefix=$CURRENT_DIR/zlibmakemake installcd ../..rm -rf tmp_zlib

На выходе получается папка с готовой для линковки библиотекой. Потом я начал собирать OpenSSL. На этот раз сборка прошла успешно. Но вот на этапе линковки, снова вылезли неразрешенные зависимости : SSL_get_peer_certificate и ERR_put_error.

Не имею никакого желания с этим разбираться, я решил отказаться от OpenSSL и использовать Botan (Vibe.d имеет такую возможность). К слову, все собралось и слинковалось с первого раза :

#!/bin/bashexport CURRENT_DIR=$(pwd)export GCC_PATH=$CURRENT_DIR/"gcc_arm/bin"export CCX=$GCC_PATH/"arm-linux-gnueabihf-g++"mkdir tmp_botancd tmp_botangit clone https://github.com/randombit/botan.gitcd botanpython configure.py --cpu=arm --cc-bin=${CCX} --prefix=${CURRENT_DIR}/botanmake && make installcd ../..rm -rf tmp_botan

Приложение с Vibe.d И Botan успешно откомпилилось и ДАЖЕ ЗАПУСТИЛОСЬ на raspberry. Просто замечательно. Но есть одно "но" - OpenSSL. Мы так и не разобрались с ним. Проблема оказалась достаточно глупой и легко решаемой.

Поискав SSL_get_peer_certificate и ERR_put_error в репозитории OpenSSL я понял, что в последних alpha версиях они были объявлены deprecated и удалены. Vibe.d официально поддерживает OpenSSL версии 1.1, а я скачал alpha 3.x, где этих функций просто не было.

Необходимо было просто скачать более старую, стабильную версию исходников и собрать их :

#!/bin/bashexport CURRENT_DIR=$(pwd)mkdir tmp_opensslcd tmp_opensslgit clone https://github.com/openssl/openssl -b OpenSSL_1_1_1-stablecd openssl./Configure linux-generic32 shared \    --prefix=$CURRENT_DIR/openssl --openssldir=$CURRENT_DIR/tmp_openssl/openssl \    --cross-compile-prefix=$CURRENT_DIR/gcc_arm/bin/arm-linux-gnueabihf-make && make installcd ../..rm -rf tmp_openssl

И вот наконец, все это заработало. Я написал небольшой скрипт, который сразу запускает компилятор с нужными флагами :

#!/bin/bashexport CURRENT_DIR=/home/test_user/Projects/rpi4_d_toolchainexport LDC_PATH=$CURRENT_DIR/ldc2/binexport GCC_PATH=$CURRENT_DIR/gcc_arm/binexport LDC_RUNTIME_PATH=$CURRENT_DIR/ldc-build-runtime.tmp/libexport OPENSSL_PATH=$CURRENT_DIR/openssl/libexport ZLIB_PATH=$CURRENT_DIR/zlib/libexport BOTAN_PATH=$CURRENT_DIR/botan/libexport CC=$GCC_PATH/"arm-linux-gnueabihf-gcc"$LDC_PATH/ldc2 -mtriple=arm-linux-gnueabihf -gcc=$CC -L=-L${LDC_RUNTIME_PATH} -L=-L${OPENSSL_PATH} -L=-L${ZLIB_PATH} -L=-L${BOTAN_PATH} $@

Теперь все проекты легко и просто собираются следующей командой :

dub build --compiler=~/ldc_rpi

Прототипом и основным источником информации послужил вот этот GitHub репозиторий.

Заключение

Если вы когда-нибудь захотите воспользоваться кросс-компиляцией, то :

  1. Лучше использовать уже готовый компилятор. Самостоятельно его собирая, вы потратите много времени

  2. Версии компиляторов основной и целевой платформы должны совпадать, иначе что-то может пойти не так

  3. Скрипты автоматизируют и упростят вашу жизнь. Используйте их

  4. Если есть возможность примонтировать файловую систему целевого устройства, то можете попробовать украсть библиотеки оттуда. Если получиться - ваша жизнь станет легче

А если вы когда-нибудь соберетесь собирать что-то для raspberry pi 4, то можно скачать отсюда тот Toolchain, который в итоге у меня получился (тут все компиляторы и библиотеки).

Только в файле ldc_rpi, поменяйте значение CURRENT_DIR на путь до папки с toolchainом.

Надеюсь, вам понравилась моя статья. Приму к сведению любые замечания и пожелания.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru