Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
piP

pi

@pi
Сводка
Сообщения
6.3k
Темы
1.6k
Группы
1
Подписчики
0
Подписки
0

Сообщения

Последние Лучшие сообщения Спорные

  • Raspberry Pi OS Trixie
    piP pi

    Прошло лето, и поскольку текущий год нечётный, это означает, что вышел новый крупный релиз Debian — а значит, и новая крупная версия Raspberry Pi OS. Историю выхода версий Raspberry Pi OS можно посмотреть тут

    В этом году версия Debian называется Trixie. Как многие знают, релизы Debian называют в честь персонажей из фильма «История игрушек» (Toy Story), но все самые известные персонажи уже были использованы, так что теперь имена становятся всё более необычными. Trixie — это, по сюжету, синий пластмассовый трицератопс, который появляется в Toy Story 3.

    Итак, мы имеем новую версию Raspberry Pi OS — что же изменилось?

    Система времени с запасом

    Вероятно, самое крупное изменение в Debian Trixie — то, что никто не заметит до 2038 года (или, точнее, заметит, что в 2038 году не произойдёт сбоя). В Linux традиционно используется счётчик секунд от условного начала (полуночь 1 января 1970 года), и это значение хранилось в 32-битном числе. При расчётах это число переполнялось (и «оборачивалось») примерно 19 января 2038 года.
    Raspberry Pi

    Теперь, начиная с Trixie, все временные метки используют 64-битные значения вместо 32-битных. Начальная точка остаётся той же, но благодаря 64 битам переполнение будет лишь … около 292 277 026 596 года!

    Это означает, что многие компоненты системы были пересобраны или изменены так, чтобы использовать новый формат времени. Но — как уже сказано — вы этого не заметите на практике.

    Новый визуальный стиль

    То, что вы заметите сразу после запуска — это обновлённый внешний интерфейс. В Trixie:

    Полностью новая система иконок

    Новый шрифт — Nunito Sans Light (вместо прежнего Piboto)

    Новые обои для рабочего стола и другие мелкие визуальные правки
    По умолчанию используется обои с изображением восхода солнца над горами Дракенсберг в Лесото
    Screenshot from 2025-10-06 18-45-40.png

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

    Новое приложение «Control Centre» (Центр управления)

    Чтобы привести настройки системы в порядок и упростить управление, в Trixie все приложения для настройки (Raspberry Pi Configuration, Appearance Settings, Mouse/Keyboard, Screen Configuration, Printer и др.) были заменены на одно новое приложение — Control Centre.

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

    Control Centre реализован как лёгкое ядро, которое при запуске загружает нужные модули через плагины. Это позволяет легко добавлять новые вкладки, в том числе сторонние, для управления кастомным оборудованием.

    Инструкции по созданию собственных плагинов доступны в репозитории GitHub проекта.

    Новые функции «Bookshelf»

    Приложение Bookshelf было запущено во время локдаунов COVID, чтобы облегчить доступ к бесплатным электронным версиям издания Raspberry Pi Press.

    Теперь способы распространения немного изменились:

    Подписчики официального журнала Raspberry Pi получают ранний доступ к новым выпускам.

    Для остальных читателей они становятся бесплатными спустя несколько месяцев.

    В интерфейсе Bookshelf новые (неразблокированные) выпуски отображаются с иконкой замка.

    Подписчики могут нажать «Contribute», войти в аккаунт и сразу разблокировать доступ ко всем последним выпускам.

    В ближайшие дни ожидается отдельный блог-пост с более подробным описанием этих изменений.

    Новая система упаковки (Packaging)

    Ещё одно значительное изменение в Trixie связано не с тем, что вы сразу видите, а с тем, как формируется образ ОС.

    Цель: сделать систему пакетов более модульной, чтобы было проще создавать кастомные версии образа и преобразовывать лёгкие (Lite) версии в полноценные с графическим интерфейсом.

    Для этого все пакеты, необходимые для превращения командной (CLI) версии системы в графическую, сгруппированы в иерархию мета-пакетов:

    • rpd-wayland-core и rpd-x-core — базовые пакеты (с минимальным набором)
    • rpd-theme — пакеты внешнего оформления
    • rpd-preferences — приложения настроек (Control Centre и др.)
    • rpd-applications — основные приложения (Geany, Thonny, браузеры и др.)
    • rpd-utilities — утилиты: Raspberry Pi Connect, SD Card Copier, Bookshelf и др.
    • rpd-developer — библиотеки для Python, камера и др.
    • rpd-graphics — инструменты командной графики и видео
    • rpd-wayland-extras / rpd-x-extras — дополнительные инструменты, специфичные для Wayland или X

    Если вы начинаете с полной десктоп-версии системы, можно удалить ненужные части, просто удалив соответствующий мета-пакет и запустив sudo apt autoremove.

    Это делает управление образами более гибким и упрощает создание собственных сборок (например, в инструменте pi-gen).

    Кроме этого, как обычно при крупном обновлении, все компоненты обновлены до последних версий, исправлены баги и т.д.

    Как получить новую версию?

    Разработчики не рекомендуют и не поддерживают обновление уже запущенного Bookworm до Trixie.

    Если вы всё же решите это делать — это рискованно. Особенно если вы уже вносили кастомные изменения. Обязательно сделайте резервные копии!

    Рекомендуемый вариант — загрузить чистый образ Trixie и записать его (флешка / SD / SSD) с нуля. Можно использовать Raspberry Pi Imager или скачать файл образа с сайта.

    Для новых моделей Raspberry Pi (например, Pi 5, Pi 500, Pi 500+) при подключении к сети по Ethernet можно загрузить образ с помощью встроенного Raspberry Pi Imager, который находится в загрузчике. Чтобы его активировать: выключите питание, удерживайте клавишу Shift и включите питание. Устройство загрузится в Imager, который можно использовать для установки Trixie образа прямо с интернета.

    Поддержка AI-дополнений и Mathematica

    На момент выпуска Trixie ещё не готовы пакеты для Raspberry AI HAT+, AI Kit, TV HAT и Wolfram Mathematica.

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

    Заключение

    В релизе Trixie есть много интересного — от внутренней модернизации системы времени до визуального обновления и более гибкой системы пакетов. Команда Raspberry Pi приглашает пользователей попробовать новую версию и поделиться впечатлениями. .


  • Не загружается Raspberry pi 4
    piP pi

    какая-то китайская хрень
    Выброси и купи SanDisk


  • Мини-консоль на RetroPie
    piP pi

    Бери самую свежую модель.
    Разница в цене не велика


  • Не открывается Recomended Software
    piP pi

    Лучше использовать старый добрый Win32 Disk Imager


  • Не загружается Raspberry pi 4
    piP pi

    SD карта какая?


  • MagPi #149 (Январь 2025)
    piP pi

    149 выпуск журнала MagPi
    скачать
    1caf2c9f-2ae5-4ea5-b725-65222437da15-image.png


  • Raspberry Pi 5 16 Gb RAM
    piP pi

    Screenshot from 2025-01-14 08-00-26.png
    Первые версии Raspberry Pi 5, появившиеся осенью 2023 года, были представлены двумя модификациями - c 4 и 8Гб оперативной памяти. Летом 2024 года к ним добавилась модификация с 2Гб оперативной памяти.
    Сегодня начинаются продажи модели Raspberry Pi 5 с 16Gb оперативной памяти,
    официальная цена - 120$

    Трехкратный прирост производительности между Raspberry Pi 4 и Raspberry Pi 5 открывает возможности для таких приложений, как большие языковые модели и вычислительная гидродинамика, которые выигрывают от большего объема памяти на ядро. И хотя Raspberry Pi OS оптимизирована для низких базовых требований к памяти, тяжелые дистрибутивы, такие как Ubuntu, получают значительное преимущество от увеличенной емкости памяти при использовании в качестве настольной системы.

    Появление 16Гб версии Raspberry Pi 5 стало возможным благодаря новой ревизии (D0) процессора Broadcom BCM2712, который теперь поддерживает работу с чипами оперативной памяти объёмом более 8Gb


  • Установка
    piP pi

    Образ операционной системы для записи на SD-карту
    https://updates.volumio.org/pi/volumio/3.785/Volumio-3.785-2024-12-16-pi.zip

    Volumio — это операционная система, созданная специально для воспроизведения музыки. Она:

    • Поддерживает аудиофайлы высокого разрешения (FLAC, WAV, DSD и т. д.).
    • Работает как медиасервер и аудиоплеер.
    • Имеет удобный веб-интерфейс для управления (с любого устройства через браузер или приложение).
    • Поддерживает стриминговые сервисы, такие как Spotify, TIDAL, Qobuz и интернет-радио.
    • Легко интегрируется с аудиофильскими USB-ЦАПами (цифро-аналоговыми преобразователями) для максимального качества звука.

    cf326a59-e1a9-48d4-824e-957d51a706eb-image.png

    4a75ade3-21b9-4253-a4a9-84d465c70af5-image.png


  • MagPi #148 (Декабрь 2024)
    piP pi

    148 выпуск журнала MagPi
    скачать
    Screenshot from 2024-12-16 06-22-45.png


  • Raspberry Pi и умный дом
    piP pi

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

    Большинство контроллеров сразу готовы к работе «из коробки», но представляют ограниченные возможности. Однако нередко именно гибкость и возможность лёгкой интеграции является основополагающим критерием при выборе. И вот, появился долгожданный «кубик Lego» для систем автоматизации на базе технологии Z-Wave, который обладает желаемой гибкостью и в то же время большим функционалом и низкой ценой. Плата расширения RaZberry для Raspberry Pi, превращает самый популярный и дешёвый мини-компьютер в Z-Wave контроллер домашней автоматизации.
    RaZberry — это решение три в одном:

    • плата с трансивером Z-Wave ZM3102
    • прошивка для ZM3102, расширяющая возможности стандартных прошивок для стиков
    • ПО Z-Way

    69f82e1f-4517-47cb-8e84-65df27f9cf8a-image.png

    Железо

    В ОС Linux RaZberry виден как com-порт /dev/ttyAMA0. Плата по сути состоит из

    • трансивера ZM3102,
    • памяти EEPROM для хранения данных сети Z-Wave,
    • PCBA антенны
    • коннектора ножек UART для GPIO Raspberry Pi.

    Реально используется только ножки Vcc, Gnd, TX и RX. Остальные ножки не используется для работы платы и лишь помогают её крепче зафиксировать. В теории эти ножки можно использовать для других нужд.

    Прошивка

    Плата предоставляет интерфейс полностью совместимый с Sigma Designs Serial API, что даёт возможность использовать не только прилагаемое ПО Z-Way, но и любое другое ПО для Z-Wave (Open Z-Wave, LinuxMCE, FHEM или самописное), а также облачный сервис Z-Cloud (см. инструкцию).

    Плата также предоставляет расширение протокола Sigma Designs Serial API от Z-Wave.Me, которое необходимо для работы ПО Z-Way.
    Прошивка также позволяет обновлять себя по UART, что позволит не только исправить возможные баги в будущем, но и сменить версию прошивки с той, что установлена по умолчанию (SDK 4.54.01) на более старую 5.03, не имеющую полезных функций NWI, Explorer Frame и Random HomeId, но включающую функционал SUC/SIS. (Для внимательных: да, я не ошибся, 4 > 5 😉

    Программное обеспечение

    Z-Way устанавливается поверх Raspbian wheezy путём запуска команды

    wget ‐q ­‐O ­‐ http://razberry.z-­wave.me/install | sudo bash
    

    Скрипт установки

    • поставит Z-Way в /opt/z-way-server
    • пропишет в /etc/init.d/Z-Way скрипт для запуска,
    • добавит его в авто запуск и настроит порт ttyAMA0.

    После перезагрузки (для применения настроек ядра для ttyAMA0 — по умолчанию Raspbian использует UART для консоли) сервер готов к работе.
    В браузере откройте http://IP_OF_RASPBERRY:8083 и начните строить сеть Z-Wave.
    Рассмотрим подробней поставляемое в комплекте с RaZberry ПО Z-Way.
    Оно состоит из нескольких частей:

    • библиотека libzway — основа движка Z-Wave, предоставляющая C API для простой работы с Z-Wave (зависит от pthreads, zlib, openssl)
    • библиотека libzwayjs — биндинг между C и JavaScript движком Google V8. Предоставляет простое JS API для работы с сетью Z-Wave (зависит от libv8 и libzway)
    • библиотека libzwayhttp — HTTP сервис для обслуживания внешних клиентов, в том числе пользовательские интерфейсы. Предоставляет JSON API (зависит от libmicrohttpd, openssl, libzwayjs и libzway)
    • main.cpp — обвязка для запуска всех сервисов вместе, чтения конфигов и параметров командной строки

    Такая структура позволяет использовать разные уровни интеграции с составными частями Z-Way.
    Для проектов, где важна производительность, доступен API уровня C (в комплекте есть заголовочные .h файлы для libzway), для проектов, где нужна оперативная разработка, проще использовать JS API.
    Важно, что оба интерфейса имеют сходную структуру, что позволяет просто портировать код с JavaScript на C после быстрого прототипирования.

    Далее я опишу API уровня JavaScript и покажу, как создавать простые правила автоматизации. Интерфейс уровня C останется за рамками данной статьи.
    Стоит заметить, что синтаксис в движке JavaScript Z-Way на стороне сервера сделан по аналогии с тем, что было реализовано для Z-Cloud на стороне клиента — см. описание API Z-Cloud.
    Для дальнейшего чтива предполагается, что читатель уже знаком с особенностями протокола Z-Wave (см.подробное описание протокола Z-Wave).
    Всё относящееся к Z-Wave в пространстве имён JavaScript находится в глобальном объекте zway, который предоставляет полное дерево данных и методов над устройствами Z-Wave.
    Дочерний объект controller, содержит данные специфические для контроллера Z-Wave, а также список устройств devices.
    Каждое устройство содержит структуру данных (data), а также список каналов устройства (instances).
    Каждый канал имеет список Классов Команд Z-Wave, поддерживаемых устройством. На Классе Команд имеются методы для вызова функций (Set, Get, ...), а также дерево данных (data), где хранится вся информация о Классе.
    Графически это можно иллюстрировать примерно так (картинка из документации):
    55903489-3753-45fc-ac8f-1a3d88403bf6-image.png

    Структура API асинхронна и делится на две части:

    • отправка команд и запросов
    • получение событий изменения состояний

    Отправка команд осуществляется запросами вида

    zway.devices[2].instances[0].commandClasses.Basic.Set(0)
    

    (этот пример выключит свет).

    Функция .Get() отправит запрос значения устройству.zway.devices[2].RequestNodeNeighbourUpdate() попросит устройство обновить соседей, а командаzway.AddNodeToNetwork(1) запустит процесс добавления нового устройства к сети.
    Более подробно все команды описаны в документации на странице документации проекта RaZberry.
    Каждому запросу можно добавить два дополнительных параметра: callback-функции для успешной и неудачной отправки.
    Команды ставят в очередь на отправку соответствующие пакеты. Отправка осуществляется через Sigma Designs Serial API, реализованную на плате расширения RaZberry. Вся магия Z-Wave скрыта под этим уровнем абстракции: для устройств на батарейках эти пакеты помечаются как ожидающие пробуждения, для шифрования идёт предварительный обмен ключами, для экономии заряда батареек и времени в эфире некоторые пакеты стыкуются вместе и многое другое…
    Как и в любом протоколе, в Z-Wave много своих тараканов, которые все находятся под ковром API Z-Way и не вылезают оттуда.
    Все полученные от устройств данные записываются в дерево data, относящееся к устройству или Классу Команд.
    Каждый элемент дерева data имеет атрибуты value (значение элемента), updateTime и invalidateTime (timestamp дат обновления и устаревания значения), name (имя). Структура дерева тоже подробно описана в документации.
    Для получения уведомлений об изменении значений дерева существует система подписок на события. Функция bind для каждого элемента дерева позволяет привязать callback функцию к изменению данных.
    zway.devices[2].instances[0].commandClasses.Basic.data.level.bind(function (type[, arg]) {}, [arg, [watchChildren=false]]);Опциональный аргумент arg, передаваемый bind будет передан в callback функцию и пригодится для передачи дополнительных параметров для разделения разных событий, имеющих общий callback-обработчик. Параметр watchChildren (true или false) позволяет отслеживать не только изменения данного элемента дерева, но и дочерних. Объект this в callback функции — это элемент дерева data, на котором запускается bind: this.value — значение, this.updateTime — дата последнего обовления и т.д. Аргумент type содержит битовую маску типа изменения (изменён, обновлён, удалён, устарел,… — подробно все значения описаны в ZDefsPublic.h, который входит в комплект ПО).Аналогично есть функция bind на глобальном объекте zway, которая позволяет отслеживать изменения в массивах devices, instances и commandClasses:zway.bind(function(type, nodeId, instanceId, commandClassId) {}, [mask = 0xffff])Аргумент type указывает на характер изменения (добавлено/удалено устройство/канал/класс команд или сохранён файл с деревом данных на диск (ZDDX-файл). Триплет nodeId, instanceId, commandClassId указывает на изенённый объект.Отписаться от событий можно функцией unbind.Для упрощения синтаксиса можно опускать слова commandClasses, instances[0] (именно нулевой канал!), .value(level == 0 аналогично level.value == 0, но при JSON-сериализации без .value будет сериализован весь элемент дерева с его атрибутами, а только значение).
    Стоит обратить внимание, что глобальный объект zway является нативным в v8, т.е. это не обычный JavaScript объект: у него можно лишь менять данные элементов дерева. Все остальные изменения в дереве игнорируются.Приведём несколько примеров:Запуск shell-команд при получении контроллером событий Basic Set от других устройств сети (например, выключатель ассоциирован с контроллером с каналом 1 при помощи MultiChannelAssociation)

    var instanceId = 1;
    
    var ctrlNodeId = zway.controller.data.nodeId.value; // Get controler Node Id
    
    if (zway.devices[ctrlNodeId] && zway.devices[ctrlNodeId].instances[instanceId]) { // Check that instance object exists
    
        var basicCC = zway.devices[ctrlNodeId].instances[instanceId].Basic;
    
        if (basicCC) { // check that Basic exists
    
            basicCC.data.level.bind(function() { // bind to Basic level value
    
                system("echo " + this.value);
    
            });
    
        }
    
    }
    

    Автоматическое отключение диммера света через 10 секунд после включения (для реле используйте SwitchBinary вместо SwitchMultilevel). (Здесь предполагается, что устройство умеет отправлять отчёты и ассоциировано с контроллером)

    var nodeId = 2;
    var instanceId = 0;
    
    var _tmr = null
    
    zway.devices[nodeId].instances[instanceId].SwitchMultilevel.data.level.bind(function() {
    
        var node = args[0];
    
        var instance = args[1];
    
        if (_tmr) {
    
            clearTimeout(_tmr);
    
        }
    
        _tmr = null;
    
        if (this.value > 0) {
    
            _tmr = setTimeout(function () {
    
                zway.devices[nodeId].instances[instanceId].SwitchMultilevel.Set(0);
    
                _tmr = null;
    
            }, 10*1000);
    
        }
    
    });
    

    тут стоит обратить внимание, что для запуска данного кода несколько раз нужно вводить массив _tmr для каждого устройства/канаоа)

    Выполнение JavaScript кода

    Куда вставлять этот JavaScript код? Есть несколько способов выполнить данный код:Записать код в файл и положить его на SD-карту Raspberry Pi в папку /opt/z-way-server/[ваша папка]. Далее этот код можно исполнить из automation/main.js: executeFile(pathToJavaScriptFile).Вы также можете прописать ваш собственный JavaScript файл в config.xml вместо родного файла RaZberry.Отправить его по HTTP через Z-Way JSON API

    Теперь опишем Z-Way HTTP/JSON API

    Данный интерфейс взаимодействия с сервером Z-Way использует протокол HTTP и формат JSON для передачи данных. С его помощью не сложно создать графические интерфейс для сервера автоматизации.Команды кодируются прямо в URL запроса, а ответы приходят в привычном аяксерам JSON формате.Запрос
    /ZWaveAPI/Data/ предоставляет JSON структуру полного дерева обновлений с момента времени . Она имеет вид

    { path1: object1, path2: object2, ... updateTime: }
    
    • Здесь pathN — это путь к изменившемуся элементу дерева,
    • objectN — новое значение этого элемента.
    • updateTime — время формирования обновлений (его нужно указать в следующем запросе, чтоб получить обновления)

    Если запросить /ZWaveAPI/Data/0, то сервер вернёт полную структуру данных.

    Запрос /ZWaveAPI/Run/ запускает JavaScript код zway..
    Этот запрос аналогичен более общему /JS/Run/ и создан для совместимости с API сервиса Z-Cloud.
    Запрос /JS/Run/ выполняет в v8 движке и возвращает в виде JSON результат выполнения этой команды.
    Другие команды описаны в документации.
    Несколько примеров:

    http://localhost:8083/ZWaveAPI/Run/devices[2].SwitchMultilvel.data.level.value
    

    — возвращает последний полученный от устройства уровень яркости (стоит перед чтением послать

    SwitchMultilevel.Get())http://localhost:8083/ZWaveAPI/Run/devices[3].instances[1].SensorMultilvel.data.level.value
    

    — возвращает последнее полученный от устройства значение датчика (стоит перед чтением послать

    SensorMultilevel.Get())http://localhost:8083/ZWaveAPI/Run/devices[2].Basic.Set(0)
    

    — выключает устройство
    Напомним, instances[0], commandClasses и value можно опустить.!

    Не забывайте, что некоторые символы требуется явно кодировать перед отправкой (url encode): например, + { }.

    Вместе с софтом поставляется базовый интерфейс для браузера. Он тоже использует Z-Way JSON API для взаимодействия с сервером. Его код удобно использовать для изучения работы API. Также может оказаться полезным расширение для jQuery для отслеживания обновлений дерева, полученных запросом/ZWaveAPI/Data/Вот так выглядит взаимодействие разных слоёв системы (картинка из документации):

    dea5b837-231c-491b-be96-5652eb1b16d2-image.png

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

    Где взять?

    Raspberry Pi продаются на сайтах RS components или Farnell.Плата RaZberry и другое Z-Wave оборудование доступно в интернет-магазине Z-Wave.Me и других.

    Пора автоматизировать!

    Уверен, RaZberry станет удобным решением для построения бюджетных систем автоматизации на базе Z-Wav


  • Установка
    piP pi

    Операционная система для домашнего кинотеатра с плеером Kodi (XBMC), продолжение ОС OpenELEC, разработка которой была остановлена

    https://libreelec.tv/downloads/raspberry/


  • Установка К - Офиса
    piP pi

    Запутался я с пакетами К-Офиса и поэтому решил поставитьсразу по сети с инета. Запустил на Raspy с консоли:

    sudo apt-get install koffice
    

    С первой попытки не удалось. Половина пакетов не находилась, либо не ставилась. В конце установки была рекомендация обновиться либо повторить попытку.

    Обновился:

    sudo apt-get update
    

    Запустил опять установку:

    sudo apt-get install koffice
    

    Через десять минут примерно офис был установлен.

    Впечатления: есть всё что надо, но тормозит конкретно при открытии приложений.

    С графикой работать не вариант. Полный тормоз.

    Вывод: на Распи применять проблематично.


  • Raspberry Pi подключение GPS USB приемника
    piP pi

    Недавно нашел у себя USB-GPS приемник, если не ошибаюсь модель от GlobalSat BU 353. Вот и решил его подключить к Raspberry Pi. После подключения он обнаружился хорошо , проблем вообще не было никаких:

    #lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial PortBus 001 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    

    Вот наш девайс: Prolific Technology, Inc. PL2303 Serial Port

    В /dev/ появилось новое устройство ttyUSB0, к нему и будем подключаться, насколько я помню, у большинства подобных девайсов скорость 4800. Ниже скрипт на PHP с использованием свободной библиотеки php_serial.class.php, с ней довольно просто работать.

    #!/usr/bin/php5
    // подключаем библиотеку
    require("php_serial.class.php");
    $serial=new phpSerial();
    // выбираем порт
    $serial->deviceSet("/dev/ttyUSB0");
    // скорость
    $serial->confBaudRate(4800); 
    // ниже параметры как правило стандартные
    $serial->confParity("none");
    $serial->confCharacterLength(8);
    $serial->confStopBits(1);
    $serial->confFlowControl("none"); 
    // открываем порт
    $serial->deviceOpen();
     $loop=1;
     while($loop==1){     
    $get=$serial->readPort(); 
    // если включить print , то будут все строки NMEA протокола
    // print $get;        
    
    if(substr($get,1,5) == "GPGGA")     
    {      
     // если включить print , то будет только $GPGGA      
     //print $get;        
     // парсим строку         
     list($gga,$time,$lat,$NS,$lng,$EW,$state)=explode(",",$get);
     /* расшифровка строки $GPGGA,155004.000,4253.9372,N,04108.1511,E,1,08,1.2,18.4,M,27.4,M,,0000*68$GPGGA -- название пакета 155004.000 -- время гринвич 4253.9372,N,-- широта 04108.1511,E,-- доолгота 1-- если 1 то данные достоверны , если 0 то данные сомнительные в данном случае это переменная $state остальное можно прочитать в справочниках по NMEA протоколу,08,1.2,18.4,M,27.4,M,,0000*68*/             
         
     if($state == "1")   
    {                   
    /* сохраняем в текстовый файл , но не обязательно, можно закомментировать и использовать                          перенаправление через print, типа       
    #./gps.php > куда то, или                    
    #./gps.php | proga.sh    */                    
    // путь куда  положить файл                   
    $fp=fopen('/h/pi/robot/gps/gga.txt','wt');                      
    if($fp)                     
    {                        
    fputs($fp,$get);                     
    // print $get;                     
    }                    
    fclose($fp); //ставим задержку 10 секунд , но реально лучше ставить минуты 3-5 , зависит от задачи
    
    sleep(10);       
             } }}  
    $serial->deviceClose();?>
    

    Это был простой пример , как получить данные из GPS приемника, обработку полученных данных можно реализовать разными способами, равно как и запуск скрипта. Я поставил периодичность запросов 10 секунд чисто для примера, хотя можно убрать sleep(10) и запускаться через cron.

    Ниже рабочий пример скрипта для отображения координат на картах Google.

    // получим данные из текстового файла
    $gga=shell_exec("cat /home/pi/robot/gps/gga.txt");
    // пропарсим строку
    list($gga,$time,$lat,$NS,$lng,$EW,$state)=explode(",",$gga);
    // показываем полученные данные
    print "Time: ".$time."      Lat: ".$lat." Lang: ".$lng."     State: ".$state;
     // преобразуем широту и долготу к формату Google
     $Lat=round(floor($lat/100)+(($lat/100)-floor($lat/100))/0.6,6);
    $Lng=round(floor($lng/100)+(($lng/100)-floor($lng/100))/0.6,6); 
    // диаметр круга
    $Acc="20";
    // дальше обработка данных средствами Google API 3 
    print " Google Maps JavaScript API v3(Street View) 
    function initialize() { var moscow = new google.maps.LatLng(".$Lat.",".$Lng.");
    var mapOptions = {center: moscow,zoom: 18,mapTypeId: google.maps.MapTypeId.SATELLITE,panControl: false,zoomControl: true,mapTypeControl: false,scaleControl: false}; 
     var map = new google.maps.Map(document.getElementById(\"map_canvas\"), mapOptions); 
     var circle = new google.maps.Circle({radius: ".$Acc.",map: map, center: moscow,fillOpacity: 0.2,strokeOpacity: 0.5,strokeColor: '#00CCCC', fillColor: '#33CCFF', strokeWeight: 1 }); 
     var marker = new google.maps.Marker({position: moscow,map: map,title:\"Lat:".$Lat." Long:".$Lng." Acc:".$Acc." \" });  }  "; ?>
    

  • Управление рабочим столом Raspberry Pi.
    piP pi

    Для управления нам нужно скачать файл xrdp вот здесь http://www.xrdp.org/ далее закинуть файл на Raspberry Pi и ввести в консольной меню

    sudo apt-get install xrdp
    

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


  • Raspberry Pi. Расширяем дисковое пространство
    piP pi

    Одноименная публикация находится у меня в блоге. Там более подробно это расписано.А здесь -- для продвинутых я перечисляю только основные шаги.

    1. Заводим на Яндекс-Диске аккаунт. Как это сделать -- читайте тут http://disk.yandex.ru/how-to/2. Устанавливаем модуль для работы с удаленной файловой системой (со своей "удаленной помойкой"):
    $ sudo apt-get install davfs2
    
    1. Создаем директорий, куда будет проецироваться содержимое "помойки":
    $ mkdir yandex.disk
    
    1. Подключаем "помойку" командой:

    $ sudo mount -t davfs \ -o uid=alex,gid=alex \ # Здесь вы должны подставить имя своей учетной записи https://webdav.yandex.ru \ # Это ссылка на ресурс удаленной помойки /home/alex/yandex.disk # А это указатель на локальный директорий
    Можно прописать эту команду в.profile или занести параметры в /etc/fstab. Тогда при загрузке Малинукса все сразу само срастается.

    1. Если вы предпочетаете юзать графическую консоль, то лучше зайдите ко мне в блог. Там есть и описание, и имеются скриншоты. http://zhevak.wordpress.com/2013/08/27/raspberry-pi-расширяем-дисковое-пространство/

    Я приношу всем свои извинения -- я потратил полчаса времени, но так и не смог осилить форматирование.


  • Основы GPS навигации на Raspberry Pi
    piP pi

    ответ
    Отлично. То что нужно. Как только приедет, сразу буду пробовать, про JSON и сокеты порадовало, планирую получать данные прямо на php.


  • Основы GPS навигации на Raspberry Pi
    piP pi

    Небольшое дополнение: в Raspbian Jessie нет файла inittab. Чтобы убрать терминал с UART интерфейса нужно выполнить команду:

    sudo systemctl stop serial-getty@ttyAMA0.service
    

    и запретить запуск при последующих загрузках системы:

    sudo systemctl disable serial-getty@ttyAMA0.service
    

  • Компактная ОС для Raspberry Pi
    piP pi

    Товарищи, расскажите, кто знает, поэтапно - как собрать собрать через buildroot образ системы для RPi?!

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

    Хочется собрать свою ОС, в которой все будет по минимуму, но то, что нужно, ведь с такой малой мощностью, каждый бит ОЗУ важен.


  • Установка Python 3.4 и OpenCV 3.0 на Raspbian
    piP pi

    Решил освоить raspberry, при этом не использовать компилируемые языки, выбор невольно остановился на Python 3. Поскольку изначально планировалось задействовать OpenCV, то на текущий момент это возможно только с OpenCV 3.0 beta которая рекомендует использовать с ней Python 3.4. Ни того ни другого в репозитории нет и пришлось собирать из исходников, по пути осваивая данный процесс. Идущим по моим следам посвящается:

    Установка Python 3.4

    Устанавливаем пакеты необходимые для Python:

    sudo apt-get install zlib1g-dev  libbz2-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev libgdbm-dev liblzma-dev tk-dev
    

    Качаем и распаковываем исходники:

    wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
    tar -zxvf ./Python-3.4.2.tgz
    cd ./Python-3.4.2/
    

    Более свежие исходники можно взять с оф.сайта

    Готовим к компиляции

    ./configure --prefix=/usr/local
    

    Компилируем

    make
    

    Ближе к концу компиляции может появится сообщение о том что каких-то пакетов не хватает: "the necessary bits to build these modules were not found:" их можно до установить если они вам нужны, после чего повторить процедуру.

    Cобираем пакет

    sudo make install
    

    По правильному надо собирать при помощи checkinstall, но не получилось как ни старался. setup_tools и pip ставятся автоматически

    Создаем удобные симлинки в системе:

    rm /usr/bin/python3
    ln -s /usr/local/bin/python3 /usr/bin/
    ln -s /usr/local/bin/pip3 /usr/bin/
    

    OpenCV необходим питоновский модуль numpy - ставим

    pip3 install numpy
    

    Устанавливаем необходимые OpenCV пакеты (поставил все что просил)

    sudo apt-get install cmake git build-essential pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev \
    zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools libeigen3-dev libjpeg8 \
    libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev \
    libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin \
    libunicap2 libunicap2-dev swig libv4l-0 libv4l-dev python-numpy libpython2.7 python-dev python2.7-dev libgtk2.0-dev
    

    Скачиваем исходники

    wget https://github.com/Itseez/opencv/archive/3.0.0-beta.zip
    unzip 3.0.0-beta.zip
    cd opencv-3.0.0-beta
    

    Собираем (поскольку на raspbian несколько питонов, необходимо указать какой из них где)

    sudo cmake   \
    	-D CMAKE_BUILD_TYPE=RELEASE \
    	-D CMAKE_INSTALL_PREFIX=/usr/local/ \
            -D PYTHON2_EXECUTABLE=/usr/bin/python2 \
            -D PYTHON2_INCLUDE_PATH=/usr/include/python2.7/ \
    	-D PYTHON2_LIBRARIES=/usr/lib/python2.7  \
    	-D PYTHON2_PACKAGES_PATH=/usr/local/lib/python2.7/site-packages/ \
    	-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/local/lib/python2.7/dist-packages/numpy/core/include \
            -D PYTHON3_EXECUTABLE=/usr/local/bin/python3 \
    	-D PYTHON3_INCLUDE_PATH=/usr/local/include/python3.4m/ \
    	-D PYTHON3_LIBRARIES=/usr/local/lib/python3.4/ \
    	-D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.4/site-packages/ \
    	-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.4/dist-packages/numpy/core/include/ .
    sudo make
    sudo make install
    

    Cборка на raspberry занимает порядка 10-12 часов. checkinstall как и в случае с питоном работать отказался.

    Чтобы Raspberry Camera стала стандартным V4L устройством /dev/video0, нужно выполнить:

    sudo modprobe bcm2835-v4l2
    

    RASPBIAN
    PYTHON
    OPENCV


  • Простая установка Windows 10 на Raspberry pi 2
    piP pi

    В официальной инструкции Microsoft ( http://ms-iot.github.io/content/win10/SetupRPI.htm )запись образа с Windows 10 IoT для Raspberry Pi 2 на карту памяти (IoT - Internet of Things "интернет вещей") должна производиться с компьютера, на котором установлена Windows 10, что не очень удобно.
    В этой статье, я расскажу как можно обойти это ограничение и записать образ с Windows 10 IoT с любой современной версии Windows.

    1. Регистрируемся на https://connect.microsoft.com/

    2. После регистрации переходим сюда - https://connect.microsoft.com/directory/ и нажимаем Join в строке "Windows Embedded Pre-Release Programs Windows Developer Program for IoT", далее переходим в раздел Surveys (https://connect.microsoft.com/windowsembeddedIoT/Surveys) и принимаем 2 лицензионных соглашения, после этого в разделе загрузок (https://connect.microsoft.com/windowsembeddedIoT/Downloads) скачиваем образ Windows 10 (Windows 10 IoT Core Insider Preview Image for Raspberry Pi 2)

    3. Распаковываем архив в папку, например С:/Win10ForPi2 4. Скачиваем ISO образ Windows 10 для x32/x64 с рутрекера (например Windows 10 Pro Insider Preview Build 10102 X64)

    4. После скачивания открываем образ WinRar'ом и распаковываем содержимое (все файлы кроме вложенных папок и файлов boot.wim и install.win, можно конечно всё распаковать, но ради экономии времени выбираем самое нужное) папки sources в папку с образом Win10 для Raspberry Pi.

    5. Запускаем консоль (cmd.exe) c правами администратора. Заходим из консоли в папку с образом Windows 10 IoT для Raspberry Pi 2 и записываем образ утилитой dism.exe, которая оказалась в папке после 4-го шага:

    dism.exe /Apply-Image /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDriveN /SkipPlatformCheck
    

    , в PhysicalDriveN "N" меняем на номер SD карты в системе дисков. Чтобы узнать номер (у большинства это будет 1), запускаем из командной строки diskpart и выполняем команду

    list disk
    

    После записи образа, вставляем карту памяти в Raspberry Pi 2, загружаемся

  • 1 / 1
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи