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

pi

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

Сообщения

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

  • Raspberry Pi 4 OTG USB устройство, подключаемся к компьютеру по USB
    piP pi

    В Raspberry Pi 4 USB type-C гнездо питания может также использоваться для передачи данных. Это можно использовать в разных полезных целях, например для подключения к компьютеру по USB в качестве OTG-устройства
    5e6904b0-4388-4ab0-a2e4-78c1af73d35c-image.png

    Включаем драйвер dwc2, прописав в /boot/config.txt строку

    dtoverlay=dwc2
    

    Рассмотрим варианты использования Raspberry Pi в качестве USB устройства, подключенного к компьютеру

    Хранилище данных

    BOOT-раздел microSD карты будет отображаться на компьютере как обычная флэшка. Подгружаем драйвер g_mass_storage и перезагружаем RasPi

    sudo modprobe g_mass_storage file=/dev/mmcblk0p1 removeable=1
    

    Можно также создать небольшую файловую систему FAT32 в файле на SD-карте, которая будет отображаться на компьютере как диск для чтения/записи

    sudo dd if=/dev/zero of=/piusb.bin bs=512 count=2880
    sudo mkdosfs /piusb.bin
    sudo modprobe g_mass_storage file=/piusb.bin stall=0
    

    USB serial устройство

    sudo systemctl enable getty@ttyGS0.service
    

    После этого к Raspberry Pi можно будет подключиться по SSH с компьютера по USB кабелю, аналогично подключению при помощи USB-serial адаптера (https://raspberrypi.ru/606-upravlenie-raspberry-pi-s-kompyutera-cherez-usb-ttl-adapter)

    USB сетевая карта

    sudo modprobe g_ether
    

    Прочие варианты использования Raspberry Pi 4 как USB устройства, подключённого к компьютеру

    • USB звуковая карта sudo modprobe g_audio
    • USB клавиатура/мышь sudo modprobe g_hid
    • USB веб камера sudo modprobe g_webcam
    • USB принтер sudo modprobe g_printer

    P.S Ранние модели Raspberry Pi (за исключением Zero) не могут быть подключены в качестве OTG устройства.


  • Raspberry Pi Compute Module 4 (CM4)
    piP pi

    Новая модель серии Compute Module с обновлённым SoM-чипом выходит после каждой новой модели классической Raspberry Pi (исключением стала только Raspberry Pi 2).

    16 месяцев назад состоялся релиз Raspberry Pi 4, а сегодня свой День Рождения отмечает и Raspberry Pi Compute Module 4.

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

    Улучшенная производительность

    Будучи построенным на том же 4х ядерном 64-битном процессореBCM2711, что и Raspberry Pi 4, CM4 показывает значительный рост производительности по сравнению с предшественниками (СМ1,CM3,CM3+) - более быстрые ядра, улучшенные мультимедиа возможности, больше интерфейсов для взаимодействия с другими устройствами и чипами. Также теперь доступны несколько модификаций модели, отличающиеся объёмом оперативной памяти и наличием/отсутствием поддержки беспроводных сетей.

    52845e3a-9186-40b0-91fb-11e2c652da53-image.png

    Основные технические характеристики:

    • 1.5GHz 4-ядерный 64-битный процессор ARM Cortex-A72
    • Графическре ядро VideoCore VI с поддержкой OpenGL ES 3.x
    • 4Kp60, 1080p60 аппаратный декодер видео H.265 (HEVC)
    • Запись видео в 1080p30
    • 2 HDMI интерфейса с разрешением до 4K
    • Одноканальный PCI Express 2.0 интерфейс
    • 2 интерфейса MIPI DSI для подключения DSI дисплеев, 2 интерфейса MIPI CSI-2 для подключения камер
    • Оперативная память в зависимости от модификации - 1GB, 2GB, 4GB или 8GB LPDDR4-3200 SDRAM
    • Встроенная память eMMC в зависимости от модификации - 8GB, 16GB, 32GB, без встроенной памяти
    • 2.4GHz/ 5GHz IEEE 802.11b/g/n/ac WiFi и Bluetooth 5.0 (есть упрощённые модификации без поддержки сети)
    • Gigabit Ethernet PHY с поддержкой IEEE 1588
    • 28 GPIO пинов, до 6 × UART, 6 × I2C и 5 × SPI

    Более компактный форм-фактор и новый интерфейс подключения

    В CM4 используется новый форм фактор, который делает её несовместимой с предыдущими моделями Compute Module. От коннектора стандартаJEDEC DDR2 SODIMM с выводом линий от ног процессора на края разъёма решено было отказаться в пользу 2 новых разъёмов (один для низкосокоростных интерфейсов и питания, второй - для высокоскоростных)
    e41a1351-3cee-47f7-9855-8f99cf4c5c6e-image.png
    7a502b25-f20f-4d88-9a8e-887f8edfa43d-image.png

    32 модификации

    Модель CM4 имеет 32 модификации (4 варианта по оперативной памяти, 4 варианта по размеру встроенной памяти, наличие/отстутствие поддержки беспроводной сети). Официальная стоимость от 25$ (за модификацию 1Gb без поддержки беспроводных сетей) до 90$ за максимальную комплектацию (8Gb RAM, 32Gb eMMC, поддержка WiFi+Bluetooth)

    Compute Module 4 IO Board

    Традиционно к новой модели Compute Module разработчики выпустили отладочную плату CM4 IO Board, на которой все интерфейсы от SoC чипа CM4 заведены на разъёмы.
    8477aa59-8b4b-475d-9762-bca0c9e0379b-image.png
    Что есть на официальной отладочной плате?

    • 2 полноразмерных HDMI порта
    • Разъём Ethernet
    • 2 USB 2.0 парта
    • Гнездо для карты памяти MicroSD (только для использования с модификициями CM4 без встроенной eMMC памяти)
    • Разъём PCI Express Gen 2
    • 40-pin GPIO штырьковый разъём и штырьковый разъём для PoE
    • 12V коннектор для подключения питания
    • FPC разъёмы для CSI-2 камеры и DSI-экрана
    • Часы реального времени с гнездом для батареи
      Стоимость официальной отладочной платы - 35$.

    Набор "Антенна" для Compute Module 4

    Для большинства случаев будет достаточно встроенной антенны. Но иногда требуется подключение внешней антенны (например, если CM4 размещена в металлическом корпусе). В набор входит антенна и провод-адаптер для подключения антенны к гнезду на плате CM4
    399cdc5f-9631-40e4-829b-166d86233d5e-image.png

    Документы

    • Raspberry Pi CM4 PDF-инструкция
    • Raspberry Pi CM4 Datasheet
    • 3D модель Raspberry Pi CM4 в формате STEP
    • 3D модель Raspberry Pi CM4 Lite в формате STEP
    • Raspberry Pi CM4 IO Board инструкция
    • Raspberry Pi CM4 IO Board datasheet
    • Дизайн платы CM4 IO Board в формате KiCAD

  • Raspberry Pi Zero 2
    piP pi

    d756eaf2-7ddd-42a0-9191-3604b3d2e42d-image.png

    В продажу поступила обновлённая версия линейки Zero - Raspberry Pi Zero 2 W. Модель отличается от первой Raspberry Pi Zero новым процессором - теперь это четырёхядерный 64 битный ARM Cortex-A53 с тактовой частотой 1 ГГц . Объём оперативной памяти не изменился - 512 МБ. Габариты также остались прежними - 65 x 30мм

    Данная модель обеспечивает подключение к беспроводным сетям через 2.4GHz 802.11 b/g/n wireless LAN и Bluetooth устройствам (Bluetooth 4.2, BLE). Упрощённых модификаций без Wi-Fi и Bluetooth у Zero 2 пока нет

    Разработчик гарантирует, что новая модель будет производиться как минимум до января 2028 года

    Официальная цена - 15$


  • Создаём систему развертывания приложений с помощью Docker
    piP pi

    Сегодня речь пойдёт о замечательном инструменте, а именно о контейнерной системе развертывания приложений - Docker. Разработчиков для Raspberry Pi тема касается непосредственно. Добро пожаловать под кат.

    Описание

    1. Что такое Docker

    Возможно не все знакомы с системами развертывания. Поэтому я поясню.

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

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

    Как вы уже догадались можно придумать массу применений. Например, вы собираетесь сделать кластер Raspberry Pi, который будет майнить биткоины (кстати, это нерентабельно в наши дни) и на каждую из 1000 имеющихся в арсенале плат вы должны установить и настроить один и тот же софт. Да, можно скомпилировать свой образ ОС, но это во-первых не так быстро, во-вторых это не так гибко (конфигурация чуть-чуть поменялась и надо пересобирать весь образ ОС).

    Или, например, вы хотите распространять ваше приложение под несколько модификаций одноплатных компьютеров: Rpi1, Rpi2, O-droid, Rpi3. Везде одна и та же структура приложения, один и тот же исполняемый код, но конфигурация отличается. Вы можете создать 3,4 отдельных мануала для пользователей по установке и настройке, а потом вам это надоест и вы создадите N различных, уже настроенных конфигураций вашего приложения под самые популярные платформы и будете распространять их виде контейнеров.

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

    Это то что я придумал навскидку. На самом деле Docker это очень-очень мощный инструмент, применений ему можно найти неограниченное количество.

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

    Ладно, вводная часть что-то слишком затянулась. Перейдем к делу.

    2. Установка

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

    Большинство пользователей не будет переустанавливать систему из-за того что хотят попробовать Docker. Поэтому ниже будет приведен процесс установки на Raspbian.

    1. Если у вас старая версия Raspbian, обновляемся до новой т.к. с версии Debian 8 появилась поддержка ядра Docker "из коробки":
    $ sudo sed -i 's/wheezy/jessie/' /etc/apt/sources.list
    $ sudo sed -i 's/wheezy/jessie/' /etc/apt/sources.list.d/raspi.list 
    $ sudo apt-get update && sudo apt-get -y upgrade # answer 'y' to upcoming questions 
    $ sudo sudo apt-get -y dist-upgrade # answer 'y' to upcoming questions
    $ sudo init 6
    $ sudo apt-get -y autoremove
    $ sudo apt-get -y purge $(dpkg -l | awk '/^rc/ { print $2 }')
    $ sudo init 6
    
    1. На официальном сайте отсутствует мануал с описанием установки на Raspberry Pi, но команда Hypriotпроделала большую работу по автоматизации установки Docker на Raspberry. Воспользуемся плодами их труда:
    $ git clone https://github.com/hypriot/rpi-docker-builder.git
    $ cd rpi-docker-builder
    $ sudo sh build.sh
    $ sudo sh run-builder.sh
    

    После этого пакет для установки Docker вы найдете в каталоге ./dist/docker-hypriot_1.10.3-1_armhf.deb. На данный момент это последняя версия.

    Ленивые могут воспользоваться готовыми пакетами от Hypriot:

    $ curl -sSL http://downloads.hypriot.com/docker-hypriot_1.10.3-1_armhf.deb >/tmp/docker-hypriot_1.10.3-1_armhf.deb
    $ sudo dpkg -i /tmp/docker-hypriot_1.10.3-1_armhf.deb
    $ rm -f /tmp/docker-hypriot_1.10.3-1_armhf.deb
    $ sudo sh -c 'usermod -aG docker $SUDO_USER'
    $ sudo systemctl enable docker.service
    

    2. Проверка работоспособности

    sudo docker info
    

    или

    docker version
    

    Выведет информацию о версии, количестве контейнеров, версии ядра, драйверов и т.д.

    1. Теперь любое приложение, которое есть в виде docker-контейнера для ARM, можно устанавливать с помощью docker run на Raspberry Pi.

    Следующая команда скачает и развернёт небольшой уже настроенный веб-сервер:

    docker run -d -p 80:80 hypriot/rpi-busybox-httpd
    

    Список контейнеров можно посмотреть с помощью

    docker ps
    

    3. Использование

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

    Поэтому мы рассмотрим на примере.

    Предположим мы хотим собрать контейнер в котором будет веб сервер NGinx и PHP 5.4.

    В начале пишется инструкция по сборке образа. Листинг файла с комментариями приведен ниже.

    src: build/backend/Dockerfile
    
    # Используем за основу контейнера Ubuntu 14.04 LTS
    FROM ubuntu:14.04
    # Переключаем Ubuntu в неинтерактивный режим — чтобы избежать лишних запросов
    ENV DEBIAN_FRONTEND noninteractive 
    # Устанавливаем локаль
    RUN locale-gen ru_RU.UTF-8 && dpkg-reconfigure locales 
    
    # Добавляем необходимые репозитарии и устанавливаем пакеты
    RUN apt-get install -y software-properties-common
    RUN add-apt-repository -y ppa:ondrej/php5-5.6
    RUN add-apt-repository -y ppa:nginx/stable
    RUN sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C
    RUN apt-get update
    RUN apt-get upgrade -y
    RUN apt-get install -y wget curl php5-fpm php5-mysql php5-gd php5-curl php-pear php-apc php5-mcrypt php5-imagick php5-memcache supervisor nginx
    
    # Добавляем описание виртуального хоста
    ADD iloverpi.ru /etc/nginx/sites-enabled/iloverpi.ru 
    # Отключаем режим демона для Nginx (т.к. запускать будем сами) 
    RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf 
    # Отключаем режим демона для php-fpm
    RUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.conf 
    # Добавляем конфиг supervisor (описание процессов, которые мы хотим видеть запущенными на этом контейнере)
    ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
    
    # Объявляем, какие директории мы будем подключать
    VOLUME ["/var/www"] 
    # Объявляем, какой порт этот контейнер будет транслировать
    EXPOSE 80 
    # Запускаем supervisor
    CMD ["/usr/bin/supervisord"]
    

    Далее команды supervisord для запуска наших приложений:

    src: build/backend/supervisord.conf
    
    [supervisord]
    nodaemon=true
    loglevel=debug
    
    [program:nginx]
    command=/usr/sbin/nginx
    autorestart=true
    
    [program:php5-fpm]
    command=/usr/sbin/php5-fpm
    autorestart=true
    

    Полный список команд с пояснениями доступен по ссылке.

    Теперь, используя эту инструкцию, собираем образ iloverpi.ru.

    sudo docker build -t iloverpi.ru ~/PATH_TO_DOCKERFILE_DIR
    

    Образ iloverpi.ru надо запустить, тем самым создав контейнер. Помимо этого требуется связать 80 порт хоста с 80 портом контейнера. Для удобства и полноты примера также свяжем /var/www хоста и /var/www контейнера.

    $ sudo docker run -v /var/www:/var/www -p 80:80 -м -t iloverpi.ru
    

    Убеждаемся что контейнер запущен:

    sudo docker ps | grep 'iloverpi.ru'
    

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

    У меня вывод предыдущей команды выглядит так:

    d8429cc192c0    astgo.ru/dev:latest    "/usr/bin/supervisor 20 seconds ago  
    Up 19 seconds  0.0.0.0:80->80/tcp  container23
    

    Здесь "container23" - имя контейнера.

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

    sudo docker exec -i -t container23 bash
    

    После этого станет доступно обычное приглашение командной строки. Это и будет консоль нашего контейнера.

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

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


  • Захват видео через HDMI вход HDMI-CSI моста для Raspberry Pi
    piP pi

    HDMI порт Raspberry Pi работает только в режиме выхода видеосигнала. Что делать, если необходим HDMI-вход для захвата видео (от камеры или видеокарты)? Использовать специальный модуль -HDMI-CSI мост, который подключается к порту камеры.

    f966b1f1-93fb-4851-970d-bfb7c1f13cfe-image.png

    В данном статье рассмотрим одно из таких устройств - B101 от Auvidea

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

    • Разрешение захватываемого видео - 1080p25 (это программное ограничение драйвера для Raspberry Pi в настоящий момент, в будущем разрешение может быть улучшено)
    • Чип - Toshiba TC358743XBG
    • Подключение к Raspberry Pi - 15-ти контактным с шагом 1мм FPC шлейфом к CSI порту (всё аналогично подключению модуля камеры)
    • Питание - 3.3V, питается от 15 контакта CSI порта
      532d1ec8-25bf-4874-8fb2-ccd6ce24012a-image.png
      Linux ядро начиная с 4-ой версии имеет встроенные драйвера для чипаTC358743XBG, который используется в модуле. В Raspberry Pi всё должно работать "из коробки"

    Захват видео в Raspbian

    Захват видео данным модулем тестировался вRapsbian Jessie Lite 4.1.13-v7+ (релиз от 25.11.2015). Поскольку модуль эмулирует CSI-камеру Raspberry Pi, то для его работы необходимо активировать камеру через raspi-config . После перезагрузки с данным модулем можно работать через стандартную программу Raspbian raspivid , точно также как с камерой, например для бесконечного отображения входящего видеопотока на экране, нужно выполнить команду:

    raspivid -t 0
    

    Перезагрузка модуля видеозахвата

    Модуль необходимо перезагружать перед каждым новым вызовом raspivid. Для этого соединим произвольный (в моём примере это будет GPIO 4) управляющий контакт на GPIO RasPi и контакт сброса на модуле проводком. Для перезагрузки модуля захвата видео нужно кратковременно обеспечить низкий уровень на контакте сброса, а потом вернуть высокий.

    Также можно обойтись без проводка. Линия сброса на модуле видеозахвата соединена с 11 линией CSI порта RasPi (CAM_GPIO) шлейфом. Линия CAM_GPIO c CSI порта физически соединена с одним из контактов на GPIO (каким конкретно зависит от модели Raspberry Pi). Низкий, а затем высокий уровень на CAM_GPIO приведёт к перезагрузке модуля.

    P.S. В этой статье рассмотрено устройство B101 от Auvidea . Существуют также более дешёвые(20-30$) аналоги устройств захвата видео для Raspberry Pi с этим же чипом ( Toshiba TC358743XBG ) от китайских производителей


  • Raspberry Pi Black Box (DIY-корпус)
    piP pi

    Два года назад я купил raspberry pi model b. Я не обладал и не обладаю особыми навыками программирования,поэтому,установив дистрибутив raspbian и наигравшись,я надолго забыл про микрокомпьютер.

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

    Начертив крышку с выемкой под вентилятор и дно корпуса с отверстиями под болты,я перенес чертеж на плотный картон(обложка учебника),вырезал дно,крышку,выпилил лобзиком отверстия в стенках корпуса(деревянная линейка) с запасом под гнёзда usb,hdmi,композитный выход с миниджеком,карту памяти и micro-usb порт. Под Ethernet гнездо не делал,ибо была задача оснастить raspi для доступа в интернет Wi-Fi. Стыки соединений стенок я укрепил штапиком,после склейки корпус покрасил чернилами 212 ink.Далее я прикрепил 6х6 см вентилятор,отпаял лишний провод и соединил с usb-кабелем,т.к. 6V вентилятор невозможно было запитать от портов GPIO.

    591e7392-afe8-4ce1-988e-9231cc7ec479-image.png

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

    Размер корпуса ДхШхВ:12,5 x 9,5 x 2,5 см.Также я оснастил корпус длинными болтами для того,чтобы закрепить raspberry на стенке.

    Из оборудования докупил wi-fi адаптер TP-Link размером с передатчик от мышки(не проверил совместимость-с ним пришлось повозиться), usb-хаб на 4 порта,мышь и клавиатуру.В целом очень доволен и самой raspi и корпусом-с активным охлаждением микрокомпьютер работает все время в турбо-режиме
    652850d3-66c0-4fa5-b461-606b787e2c57-image.png


  • Подключение RTC (часы реального времени) к Raspberry Pi
    piP pi

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

    Решить данную проблему могут часы реального времени с памятью, питаемой от батарейки, и управляемые по шине i2c.

    Самыми популярными RTC являются часы на основе чипов DS1307,DS3231 и т.д. Я рекомендую часы на основе DS3231, т.к они одни из самых точных.

    Рассмотрим, как с ними работать:

    echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    

    регистрируем часы в системе

    Для работы с RTC в Linux существует утилита hwclock

    hwclock -r - считать время, сохранённое в RTC
    hwclock -s - синхронизировать время системы с временем RTC
    hwclock -w - записать текущее системное время в RTC
    

    Таким образом, после того, как вы установите в системе точное время при помощи утилиты date (например date --set=”20140125 09:17:00”, если есть доступ к сети, то можно синхронизировать системное время с точным временем при помощи сетевой службы ntp - ntpd -gq), необходимо записать это время в RTC -

    hwclock -w
    

    При каждой загрузке системы необходимо в качестве системного времени, устанавливать время, сохранённое в RTC.

    Для этого пропишите в /etc/rc.local перед exit0 следующие команды:

    echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    hwclock -s
    

    Опционально можно отключить синхронизацию системного времени через Интернет:

    sudo update-rc.d ntp disable
    

  • Дача, USB-модемы, две малины, или сказ о том, как я температуру в доме проверял.
    piP pi

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

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

    Дано: 2 дачи.

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

    Так получилось, что у меня дома завалялась малинка и usb gprs свисток. Решил начать со второй дачи, дабы интеграцию с web сервисами оставить на потом.

    Общение с внешним миром из-за отсутствия Интернет - только по смс.

    Основная последовательность действий:

    1. установка debian os

    2. изменение modeswitch usb свистка, на режим модема

    3. написание программы для работы с приемом, парсингом и отправкой сообщений.

    Язык python, библиотека для общения с модемом - gammu, датчик температуры bmp085, LCD дисплей, и два простых реле.

    Основные функции: Включение питания (пин 4), Включение второго устройства (пин 17), получение сведений о температуре и их отправка, переход в режим поддержания температуры в определенном интервале.

    Самое интересное, код:

    # -*- coding: utf-8 -*-
    import gammu
    import time
    import RPi.GPIO as GPIO
    import Adafruit_BMP.BMP085 as BMP085
    import lcddriver
    import os
    from datetime import datetime
    from subprocess import call
    
    f = open('/var/log/sms','a')
    f.write(str(datetime.now()) + ' System started\n')
    f.close()
    
    GPIO.setmode(GPIO.BCM)
    pinList = [4, 17]
    sensor = BMP085.BMP085()
    lcd = lcddriver.lcd()
    
    #Обьявляем телефоны, с которых мы будем обрабатывать смски
    cellphones = ['+7926XXXXX','+7926XXXXXX']
    currcommand = ''
    
    for i in pinList: 
        GPIO.setup(i, GPIO.OUT) 
        GPIO.output(i, GPIO.HIGH)
    
    
    sm = gammu.StateMachine()
    sm.ReadConfig()
    sm.Init()
    sm.GetSMSStatus()
    
    #Создаем функцую для удаления всех смс, на случай, если аппарат был выключен и накопилась очередь сообщений.
    
    def delete_all_sms():
    	status = sm.GetSMSStatus()
    	remain = status['SIMUsed'] + status['PhoneUsed'] + status['TemplatesUsed']
    	start = True
    	while remain > 0:
    		sms = sm.GetNextSMS(Start = True, Folder = 0)
    		remain = remain - len(sms)
    		for m in sms:
    			sm.DeleteSMS(Location = m['Location'], Folder = 0)
    
    #функция чтения смс, с удалением после прочтения.
    def retSMS():
    	start = True	
    	sms=[{'Number':0,'Text':2},{'Number':0,'Text':2}]
    	while 1:
    		try :
    			if start:
    				sms = sm.GetNextSMS(Start = True, Folder=0)
    				start = False
    			else:
    				sms = sm.GetNextSMS(Location = sms[0]['Location'], Folder=0)
    		except gammu.ERR_EMPTY:
    			break
    		
    	try:
    		
    		delete_all_sms()
    	except gammu.ERR_EMPTY:
    		a=1
    	return(sms[0]['Number'],sms[0]['Text'])	
    
    #Объявляем функцию отправки сообщений, с перезагрузкой, в случае сбоя. Такое случается крайне редко
    # Однако, т.к. система находится далеко, необходимо, чтобы в случае падений, перезапускалось само.
    
    def sndSMS(number,smstext):
    	message = {
    	'Text': smstext,
    	'SMSC': {'Location': 1},
    	'Number': number,
    	}
    	try:
    		sm.SendSMS(message)
    	except gammu.ERR_UNKNOWN:
    		f = open('/var/log/sms','a')
    		f.write(str(datetime.now()) + ' Failed to send sms\n')
    		f.write(str(datetime.now()) + ' Rebooting in 3.5 minutes...\n')
    		print ("failed to send")
    		time.sleep(200)
    		f.write(str(datetime.now()) + ' Rebooting...\n')
    		f.close()
    		os.system("sudo shutdown -r now")
    
    	
    #read temperature
    def readtemp():
    	curtemp=sensor.read_temperature()
    	return curtemp
    
    
    #Основная функция расшифровки сообщений, обработки заданий.
    def parscom(detSms):
    	currcommand=''
    	if detSms[0] in cellphones:
    			if detSms[1]=='On':
    				GPIO.output(4, GPIO.LOW)
    				sndSMS(detSms[0], 'Otoplenie on')
    				currcommand='On'
    			if detSms[1]=='Poliv':
    				GPIO.output(17, GPIO.LOW)
    				sndSMS(detSms[0], 'Poliv ON')
    				currcommand='PolivOn'
    			if detSms[1]=='PolivOff':
    				GPIO.output(17, GPIO.HIGH)
    				sndSMS(detSms[0], 'Poliv Otkluchen')
    				currcommand='PolivOff'	
    			if detSms[1]=='Off':
    				GPIO.output(4, GPIO.HIGH)
    				sndSMS(detSms[0], 'Otoplenie Off')
    				currcommand='Off'
    			if detSms[1]=='Temp':
    				print readtemp()
    				sndSMS(detSms[0], 'Temp: ' + str(readtemp()))
    			if detSms[1].split()[0]=='Set':
    				temp=detSms[1].split()[1]
    				GPIO.output(4, GPIO.LOW)
    				currcommand='Set ' + temp
    				sndSMS(detSms[0], 'Night mode On. Temperature set: ' + str(temp))
    	return currcommand
    
    #Реализация функции поддержания температуры.
    def otoplenie_night(settemp):
    	curtemp=readtemp()
    	try:
    		if curtemp>int(settemp)+0.5:
    			
    			GPIO.output(4, GPIO.HIGH)
    		if curtemp
    			
    			GPIO.output(4, GPIO.LOW)
    	except:
    		GPIO.output(4, GPIO.HIGH)
    
    
    #Основной цикл - отправка смс при включении, вызов функций чтения смс, парсинга, и вывода на lcd дисплей.
    sndSMS('+7926XXXXXX', 'Cucmema Pa6omaem')			
    while 1:
    	detSms=retSMS()
    	newcommand = parscom(detSms)
    	lcd.lcd_display_string("TEMnEPATYPA: " + str(readtemp()) + " C" , 1)
    	if currcommand != newcommand and newcommand != '':
    		currcommand=newcommand
    		lcd.lcd_display_string("KOMAHDA:       " , 2)	
    	lcd.lcd_display_string("KOMAHDA: " + currcommand  , 2)	
    	try:
    		if currcommand.split()[0]=='Set':
    			otoplenie_night(currcommand.split()[1])
    		
    	except IndexError:
    		a=0
    	time.sleep(5)
    

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

    Работает по крону 2 скритпа:

    1. делаем фото окружающей природы с камеры подключенной по usb к малине и отправляем на список почтовых адресов.

    2. вызываем бесплатный интернет-сервис по отправке смс сообщений.

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

    Код получения картинки и отправки по почте:

    from smtplib import SMTP_SSL
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEBase import MIMEBase
    from email import Encoders
    import os
    
    
    #Меряем температуру (Датчик DS18B20)
    def readtemp():
        tfile=open("/sys/bus/w1/devices/28-00000633a133/w1_slave")
        ttext=tfile.read()
        tfile.close()
        temp=ttext.split("\n")[1].split(" ")[9]
        temperature=float(temp[2:])/1000
        return temperature
    
    temperatur=str(readtemp())
    
    
    #Делаем фото
    os.system ("fswebcam -r 1024x768 -S 15 /home/pi/pics/static/temp.jpg")
    
    #Путь для аттача
    filepath = "/home/pi/pics/static/temp.jpg"
    basename = os.path.basename(filepath)
    #куда отправлять письма:
    address = ['XXX@gmail.com','XXXX@list.ru','XXX@mail.ru']
    
    Наш аккаунт, откуда отправляем
    adressfrom='XXX@yandex.ru'
    # Compose attachment
    part = MIMEBase('application', "octet-stream")
    part.set_payload(open(filepath,"rb").read() )
    Encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename="%s"' % basename)
    
    # Compose message
    msg = MIMEMultipart()
    msg['From'] = adressfrom
    msg['To'] =  ", ".join(address) 
    msg['Subject'] = 'A vot i temperatura ' +  temperatur
    msg['Body']='Temperatura' 
    msg.attach(part)
    
    
    # Send mail
    smtp = SMTP_SSL()
    smtp.connect('smtp.yandex.ru')
    smtp.login(adressfrom, 'PASSWORD')
    smtp.sendmail(adressfrom, address, msg.as_string())
    smtp.quit()
    

    В результате получаем на почту такую красивую картинку, и на душе как-то становится теплее.

    1dce9a25-d1b2-460d-9861-2e01c6fe3095-image.png

    А это код отправки СМС с использованием бесплатного веб-сервиса:

    import requests
    import os
    
    #Читаем температуру
    def readtemp():
        tfile=open("/sys/bus/w1/devices/28-00000633a133/w1_slave")
        ttext=tfile.read()
        tfile.close()
        temp=ttext.split("\n")[1].split(" ")[9]
        temperature=float(temp[2:])/1000
        return temperature
    
    temperatur=str(readtemp())
    #вызываем веб сервис, для формирования смс.
    r = requests.get('http://sms.ru/sms/send?api_id=ID_API&to=7926NUMBER4&text=Temperatura+'+ temperatur)
    q = requests.get('http://sms.ru/sms/send?api_id=ID_API&to=7910NUMBER&text=Temperatura+'+ temperatur)
    

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

    Спасибо за прочтение статьи! Некоторые детали я пропустил в своем повествовании, но готов ответить на любые возникшие вопросы 🙂


  • RPi, Linux, fuse
    piP pi

    И снова здравствуйте!

    И снова велосипед, который написал, скорее, для своего удобства. Понадобилось писать скриптик для одного девайса, заливать на девайс и запускать там на исполнение. Заливать по ssh надоело и решил я это исправить. У меня уже есть один лисапед, который называется ferro_remote, который я описывал тут. Собссно решил накидать fuse клиента, чтоб беспрепятственно монтировать устройство типа малины в локальную систему. Про всякие sshfs я тоже вкурсе, но это ж не наш метод ...

    Собссно ничего сверх сложного нет. Просто еще один клиент, который использует протокол ferro_remote и монтирует удаленую FS в локальную директорию. Называл его fuse_client (тада! внезапно). Исходники, как обычно лежат тут. Собранные бинарник агента (серверная часть) и клиента для Rpi можно взять тут. Могу собрать для ubuntu x64 и то и другое, если кому надо будет.

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

    Подразумевая, что агент у нас запущен на девайсе с адресом 192.168.1.11 и портом 12345, можно замапить это устройство локально (можно соединить так же 2 малины, или 2 любых линукса).

    • не следует, однако, мапить устройство само на себя, чревато дедлоками 🙂
    > ./frfuse_client -s 192.168.1.11:12345 -m /home/data/fuse/ -f -d 
    FUSE library version: 2.9.4
    nullpath_ok: 0
    

    .....
    тут

    -m /home/data/fuse/ - локальный путь, куда нужно мапить устройсто. Директория должна быть пустой.

    -f- оставаться в foreground и не уходить в демона. Остановить клиента можно будет по Ctrl+C. Без этого параметра клиент станет демоном и остановить его можно будет командой

    fusermount -u /home/data/fuse/
    -d - писать лог в консоль. Без параметра -f не имеет смысла.

    Все.

    Теперь в директории /home/data/fuse у нас корень устройства. Можно даже можно слушать музыку и менять теги в файлах.

    Можно скопировать туда что-нить

    b556a5b7-b031-4a46-a6b8-1a2165c7bb27-image.png

    Или получить доступ к sysfs
    848713a0-bbd7-4215-ab69-8238b2a613f4-image.png

    Еще есть поддержка базовой аутентификации (ключ --key у агента и клиента)

    За сим все.


  • Дальномер hc sr04. Lua
    piP pi

    Приветсвую.

    Просто пример измерения расстояния сабжевым девайсом.

    Сам пример тут . Агент, fuse_client и lua_client, собранные для малины тут

    Девайс:
    ef84d189-16fd-4a0d-a1a7-874d0ec4dbd8-image.png

    Работает, как заявлено, от 2 до 400 см. На деле после 350 показания начинаюсь сильно плавать. При расстояниях меньше 4 см, "показывает" ересь от 3см до 20 (!!!) метров.

    Суть:
    У девайса есть триггер и ехо.

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

    Так как пример основан на асинхронных событиях, пин ехо должен уметь поддерживать "edge". На RPi это 2, 3, .. 9, если все правильно помню. У меня триггер - GPIO2, ехо - GPIO3.

    Отметка времени (interval) есть количество микросекунд, прошедших со старта агента на малине. Проставляется на стороне агента.

    Сам пример с пояснениями:

    gpio = fr.client.gpio -- алиас для таблицы gpio
    
    local TRIG = 2 
    local ECHO = 3
    local last_tick = 0 -- это отметка времени, в которое произошло событие
                        -- отсчитывается от старта агента на RPi
    function handler( data ) -- функция-обработчик для события изменения состояния эхо
        if last_tick ~= 0 then -- начало. Первое событие придет при подписи, 
                               -- поэтому обрабатываем только ситуацию после
    	local val = data.value 
    	if val == 1 then   -- если ехо поднялось, то это посылка сигнала устройством
    	    print( "signal sent!" ) 
    	else               -- а теперь эхо скинулось, стало быть мы получили ответ
    	    print( "echo received; distance = ", 
                       (data.interval - last_tick) / 58, "cm"  ) -- теперь просто вычтем из текущего прошлое 
                                                                 -- и поделим на 58 (можно умножить на 0.01724)
                                                                 -- как нам говорит даташит
    	    fr.exit( ) -- завершим скрипт
    	end
        end   
        last_tick = data.interval -- меняем значение последнего интервала
    end
    
    
    function main( )
        fr.run( )  -- запустит очередь событий
        T = assert(gpio.export(TRIG, "out")) -- откроем триггер на out
        E = assert(gpio.export(ECHO, "in"))  -- эхо на "in"
        assert(E:set( "edge", "both" ))      -- сделаем возможным обрабатывать события эха "both" = сброс и подъем
        assert(E:subscribe( "on_changed", handler, E, T )) -- подписка на событие. 
                                                           -- E и T  переданы как параметры, 
                                                           -- чтоб не были убиты сборщиком мусора
        assert(T:pulse( 50 )) -- вызов pulse поднимет триггер на 50 микросекунд. Кто-то советует сделать больше
    end
    

    Все.

    вывод будет пример такой:

    > ./lua_client -s 192.168.1.11:12345 -e sonic-hc-SR04.lua
    signal sent!
    echo received; distance = 	189.39655172414	cm
    

    Это расстояние до соседней стены. Рулетка вполне согласна (+-5см).

    Погрешность:
    Она все равно есть. Например вот несколько замеров одного и того же расстояния:

    191.03448275862	
    192.55172413793
    189.79310344828
    192.36206896552
    193.94827586207
    

    что в среднем ~191.937931. ~192 сантиметра до стены, что верно.


  • ExaGear.Запускаем приложения x86 на Raspberry Pi
    piP pi

    Если вам интересно как запустить x86 приложения на Raspberry Pi, то прошу под кат, все намного проще чем вы думаетеСтатья является логическим продолжением вот этой статьи(ссылка).

    Знакомство

    С ExaGear вы можете запустить приложение x86 на Mini PC одновременно с обычными родными приложениями. ExaGear представляет собой виртуальную машину, которая реализует виртуальный контейнер x86 Linux на ARM и позволяет запускать приложения x86 непосредственно на ARM.Вы даже можете запускать приложения для Windows на вашем ARM Mini PC, если вы установите Wine.

    Использование

    Все как-то даже слишком легко Вводим в консолиexagearи понеслась,вы в x86 системе и можете установить x86 программы

    Тесты

    Я тестировал Wine.Все работет очееень быстро,запускается все прекрасно.

    f86e0a7f-2444-41d8-8b8d-29477f9b6c9a-image.png

    На скрине выше я решил показать вам как выглядит запущенная таким образом NOTEPAD++

    Где же это взять?

    Программа платная и продается на офф.сайте разработчика ССЫЛКА

    Послесловие

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

    Благодарности

    Хочу выразить благодарность Eltech.inc Вадиму и интернету в общежитии 🙂


  • Raspberry Pi Zero корпус Корпус для Raspberry Pi Zero: быстро, просто, практично
    piP pi

    Как-то попался на глаза маленький раздвижной пластиковый контейнер, в которых иногда продают модули памяти для ПК.
    ee037dd8-6611-4df2-953d-696e3b3b2965-image.png
    По ширине он ненамного больше, чем Raspberry Pi Zero: так что возникла мысль сделать из него корпус для "микро-малинки". Сказано - сделано: примерил, отрезал по размеру, попробовал. Получилось так:

    9c4e725d-a64c-441b-b82d-9eaf8dae3cb0-image.png

    Осталось только прорезать небольшое отверстие для разъёма питания microUSB - и можно пользоваться! Подключать microUSB / OTG и HDMI не планирую, но можно, если понадобится, вырезать отверстия и для них. Вполне практичный корпус: смотрится неплохо. При желании можно сверху или снизу вырезать "окошечко" для подключения к GPIO.

    fdc961a5-d8b3-49a6-a653-7213f658a035-image.png

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

    4ce18fb1-e62a-4453-90db-ead60769adb1-image.png


  • ДЖИПИЭС ГЛОНАС U-BLOX 7 под юсби разъём и установка программы навигатора 7 дорог на расбери пи 3
    piP pi

    У МЕНЯ ПОЛУЧИЛОСЬ ТАК, скачиваете с официального сайта программу 7 дорог на расбери пи 3,в папку /home/pi/Download, там она будет под арм линукс не линукс 86 или се,а именно арм линекс,я указал синим цветом ниже, и так после скачивания и распаковки в хомпи довнлоодс,так написал по русски а то нету времени писать на английском),заходите и открываете в эту папку и ищите в виде рисунка самолётика бумажного нарисованного и в низу написано 7 ways, после нажимаете на этот значёк и открываете его,и откроется программа 7 дорог,послеможете полазить в настройках и скачать если интернет включён карту голосовые настройки скины и так далее,короче настроить нужно.

    После всего этого подключаете к юсби разьёму джипиэс глонас и после заходите с настройки джипиэс и там нужно сделать малые монипуляции местоположение на значке нажать определять Экорректировка времени поставить галочку, определять данные о движении и самое главное как у меня не раз получалось нажать галочку использовать порт и в нижней строке прописать 9600 а выше в строке у меня расбери так отвечает на путь программы и джипиэс глонаса /dev/ttyACM0 потом подтвердить нажать опять на галочку,что бы видно было прозрачно,что вы прописали и цифры и буквы английские и потом нажать ок и если всё прошло хорошо,то ещё раз можете зайти в настройки джипиэс и увидите как линии красного цвета скачут в верх и в низ,значит всё впорядке,зелёными они будут потом,когда вы вынесете расбери на улицу конечно же с джипиэс глонас,но если не получится,значит или вы не то,что то сделали или путь не /dev/ttyACM0, может у вас dev/ttyUSB0 , но ещё в командной строке сделайте такую манипуляцию,если не получится так как я описал выше,я сделал так а потом выше как описывал и всё получилось сразу sudo bashsudo apt-get install gpsd gpsd-clients python-gps и потом закрыл всё и всё работает.ну если на худой конец не получится и так то нужно подолбатся конечно в командной строке и прописывать разную ерунду в виде вот этой,это как бы более правильно но или дев тати юсби ноль или дев тати асм ноль,Пробуйте, может у вас получиться.

    #проверка устройств USB

    lsusb
    
    #проверка ls /dev/ttyUSB
    

    должен определиться: /dev/ttyUSB0

    #нужно установить

    apt-get install gpsd gpsd-clients python-gps
    

    Исправить файл sudo nano /etc/default/gpsd
    Все убрать и вставить это

    START_DAEMON=«true»
    GPSD_OPTIONS=«n»
    DEVICES="/dev/ttyUSB0"
    USBAUTO=«false»
    GPSD_SOCET="/var/run/gpsd.sock"
    

    перегрузить

    sudo /etc/init.d/gpsd restart
    

    #проверка спутников cgps -s или gpsmon или xgps

    #перед запуском «семь дорог» исполнить в терминале (перевод в NMEA )

    gpsctl -f -n -s 4800 /dev/ttyUSB0
    

    для 7дорог в поле порт добавить
    Ваш адрес утройства — /dev/ttyUSB0 скорость 4800

    Чтобы не гас экран (не срабатывал хранитель экрана) в файл /etc/lightdm/lightdm.conf добавить в конец секции

    [SeatDefaults] строку:xserver-command=X -s 0 dpms
    

    #командой править файл sudo nano /etc/lightdm/lightdm.conf


  • Обзор речевых синтезаторов (Text To Speach, TTS) для Raspberry Pi
    piP pi

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

    Festival TTS

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

    Установка:  sudo apt-get install festival
    

    Пример использования:

    echo "This is a sample text" | festival --tts
    
    ESpeak TTS
    
    Установка: sudo apt-get install espeak
    

    Пример использования:

    espeak -ven+f1 -k5 -s200 "This is a sample text"
    

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

    -s - скорость речи, количество слов в минуту,

    -g - длительность паузы между словами в милисекундах

    -v[код языка][высота тональности и тип голоса - мужской женский], пример -ven+f1 : англоязычный женский голос, тональность +1

    -k - выделение слов, начинающихся с заглавной буквы.

    В ESpeak TTS реализована поддержка языка разметки синтеза речи https://ru.wikipedia.org/wiki/Speech_Synthesis_Markup_Language

    Google

    Можно также использовать речевой синтезатор, встроенный в Google Translate. Качество синтеза хорошее, нотребуется подключение к интернету.

    Пример скрипта g_speak.sh для использования Google Translate в качестве речевого синтезатора в вашем проекте :

    #!/bin/bash
    say() {
     local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=$*&tl=ru";
     }
    

    say $*
    Запускаем скрипт: ./g_speak.sh Текст, который нужно сказать

    Pico TTS

    Один из лучших синтезаторов речи для Raspberry Pi, который также используется в ОС Android

    Установка:

    sudo apt-get install libttspico-utils
    

    Пример использования:

    pico2wave -w sample.wav "This is a sample text" && aplay sample.wa
    ```v

  • Подключаем датчик движения к Raspberry
    piP pi

    Задача: подключить датчик движения и контролировать события

    ПО: NodeJS
    Hardware: Raspberry, например, Риэлта Фотон-21

    Схема подключения:
    5fa6e912-627d-46fe-8765-ff77c4ed0da1-image.png
    Для управления GPIO я использую библиотеку rpi-gpio.js Пример кода для чтения данных датчика на пине 11 (GPIO17). Не забыть GND подключить к земле блока питания!

    var gpio = require('rpi-gpio');
    gpio.on('change', function(channel, value) {
    console.log('Channel ' + channel + ' value is now ' + value);
    });
    gpio.setup(11, gpio.DIR_IN, gpio.EDGE_BOTH);
    

  • 2 полезных платы электропитания Raspberry Pi Zero
    piP pi

    Хочу поделиться небольшим опытом использования 2-х плат для подключения электропитания ко всем разновидностям Raspberry Pi Zero (1.2, 1.3, W, WH).

    Общее у этих плат то, что они:

    • не занимают для питания контакты GPIO
    • питают Zero через "testing pads" (точки подключения PP);
    • легко подключаются / отключаются без пайки.

    #1. USB Hub & Powermanager for RPi Zero v1.0 (производитель Elcrow).

    8ea1c1c5-2edf-4451-aac3-11276e6100db-image.png
    Цена: $6.15.

    Подключается к Pi Zero с помощью подпружиненных штырьковых контактов к точкам подключения PP1, PP6, PP22 и PP23 на RPi. Прижимается к плате Zero пластиковыми шестигранными распорками с резьбой и гайками (в комплекте).

    В результате у "малинки" будет USB-хаб на 4 полноразмерных USB-порта (2.0) + 1 microUSB порт для дополнительного электропитания. На плате ещё есть разъём для подключения альтернативного питания внешней LiPo батареи.

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

    #2. BadUSB USB-A Addon Board for Raspberry Pi Zero v.1.1.

    5c65f1b5-d40a-4c6a-ab72-8bed42c80174-image.png
    Цена: $6.84.

    Тоже подключается к Pi Zero с помощью подпружиненных контактов к точкам подключения "testing pads". Прижимается к Zero пластиковыми болтиками и гайками (в комплекте). Можно этот "бутерброд" поместить в красивый корпус. В результате Zero выглядит как USB-флэшка или как модный USB-ПК (Dongle Computer).

    В таком виде "малинку" удобно подключать прямо в USB-порт компьютера или запитать от любого USB-разъёма без провода.

    Обе платы покупал на AliExpress, но можно купить и в других местах: они довольно популярны.


  • УСТАНОВИЛ ВИНДОВС 10 НА РАСБЕРИ ПИ 3
    piP pi

    Когда у меня появилась расбери пи 3,всегда очень хотелось установить на неё виндовс,но этого не удавалось,и мало того,все крутили у виска,мол дурак,на арм устройство не ставится виндовс,да,персональная виндовс как у вас у всех на компьютере,конечно не ставится,но заточенная под арм устройство,ставится ещё как),правда как и другие разработки,конечно она сырая,и что то нужно додумывать, и допиливать,установил я совсем недавно, так что додумывать придётся какое то время,если вообще будет время на это), у виндовс 10 понравился запуск самой системы,первое что можно увидеть,это яркая малина на 19-ти дюймовом экране, с зелёной полоской загрузки виндовс10, почему такую малину не придумали при запуске расбиана мне не понятно,добавили бы графики и тд,это же прикольно и интересно пользователю таких систем,но видно это никому не нужно,и так,я отвлёкся немного),после идёт запуск виндовс 10,обычный запуск,как у вас на компе,когда система полностью запустилась,всё как бы на первый взгляд одинаково,что в старой версии,что в новой,но единственное что изменили,это на панели задач добавили пару папок,и значки немного изменённые,а так же в настройках пару приблуд интересных для настроек,а так всё тоже самое,как и у всех виндовс 10,но это я о плюсах,какие есть минусы,ставится система не хотелась, вернее нужно знать как ставить,я установил с 8-го раза.но может кому повезёт,и поставите с первого или пятого),видео я увидел с ютуба,как один американец поставил виндовс себе на расбери пи 3,ниже выложу ссылку,правда поймёте или нет,фото виндовс по позже выложу здесь,а видос посмотрим,может и будет,короче,как точно поставить рассказывает Американец вроде,я немного расскажу про запуск,если будете записывать виндовс 10 арм рс 4 для 64 систем,то желательно записывать на сиди карту 32 гига,потому что,я записал на 16-ти гиговую,так мне выдал копм,короче вся система занимает 10 гиг.и у вас где то от 4-х до 5-ти гиг останется,из за этого система немного тормозит. Вот ссылка для видео https://www.youtube.com/watch?v=6b1IxvKJeho

    После как записали,включаете,и после заставки малины,нажимаете,у всех по разному на клаве,так что у меня ESC,нажимаем,и попадаем в биос,в биосе нужно как на видео поменять кое что,после сохраниться и выйти из системы,после желательно,выключить мышку и клавиатуру,что бы система загрузилась до того момента,пока не выскочит ввести регион странны,конечно выбрал русский,ну и нажимать далее,короче всё по инструкции,желательно это делать быстро,так как может затормозить система,и часто вылетает драйвер,клавиатуры и мышки,а вот там ещё есть виртуальная клавиатура,она не вылетает,после ввода паролей,всё нажимаем далее и система запуститься,но когда система запуститься с панели задач лучше многое удалить,потому что тормозит систему,всё это есть в меню пуск,но вот проблема сейчас пока что с драйверами,то ли они слетели,или их не было,короче нужно ставить каким то образом,потому что флешку или не видит или драйвера нужны,пока в этом и есть проблема,ещё была проблема при запуске,система расчитана вроде на 15-ти или 17-ти 20-тидюймовый экран,мне пришлось прописать в конфиге т икс т разрешение экрана для 19 -ти дюймового экрана,сейчас работает хорошо и видно систему на весь экран,до этого было видно на половину,так что смотрите сами,ещё нужно поработать над ней хорошенько,и она запускается с правой стороны написано в тестовом режиме,сырая разработка ещё.Но за то, есть нормальные первые результаты,и это радует).

    На днях этот Американец,показал,как после установки виндовс 10,установить драйвера,и подключить интернет,кратко описал,может кому и не будет понятно,но вот ссылка https://www.youtube.com/watch?v=sBslh3nWu0U

    Сегодня переустановил ещё раз виндовс 10 с новыми драйверами,и после установки тоже добавил драйвера для того,что бы работал интернет,в итоге всё работает,но повторюсь,у меня 16 гиг сиди,плюс минус,а нужно хотя бы 32 гига,из за этого долго немного включаются те или иные функции,но всё работает,можно смотреть фильмы,слушать музыку,можно работать в майкрософт офис,подключал флешку,флешка работает,правда из за того,что система тормозит,пока точно установку программы не удаётся,а так же с флешки можно устанавливать видео на рабочий стол или куда душе угодно,музыку,фото,делать заставку рабочего стола и тд,всё как обычно в виндовс 10,конечно у меня 2015 года расбери,но я думаю,если купить новейшую расбери,эта система будет летать),в дальнейшем думаю приобрести сиди 32 гига,установить и поработать над программами,что бы можно было их нормально установить и ими пользоваться,мне всего то нужно,что бы на этой системе работало 6 программ,так что системы всё ближе и ближе к тому,что бы запускаться у вас на ладони,и не нужны будут громоздкие платы,которые мы покупаем,тратя бешеные деньги,кому не хочется долбатся с такой системой,есть выбор купить лате панда.но стоит дорого,а я думаю платить дорого ни кто не хочет). Вот ещё ссылка по установке виндовс 10,в тестовом режиме,устанавливал Немец, https://www.youtube.com/watch?v=aMNdoB3smLc


  • vcgencmd
    piP pi

    vcgencmd - консольная программа, которая поможет узнать немного интересной информации о состоянии процессора и прочих частей Raspberry Pi. Данная программа не является базовой для Linux дистрибутивов, поставляется исключительно с Raspbian и заточена на работу с Raspberry Pi

    vcgencmd commands - получение списка доступных команд

    vcgencmd measure_temp - получение температуры процессора

    vcgencmd measure_volts [volts] -показать напряжение модуля, переданного в аргументе [volts]. Доступные значения аргумента:

    • core
    • sdram_c
    • sdram_i
    • sdram_p

    vcgencmd measure_сlock [clock] - показать частоту модуля, переданного в аргументе [clock]. Доступные значения аргумента:

    • arm - частота ядра процессора
    • core - VC4 scaler cores
    • H264 - H264 блок
    • isp - Image Signal Processor
    • v3d - 3D блок
    • uart - UART
    • pwm - ШИМ блок (аналоговый аудиовыход);
    • emmc - интерфейс карты памяти
    • pixel
    • vec - Analogue video encoder
    • hdmi - HDMI
    • dpi - Display Peripheral Interface

    vcgencmd codec_enabled %codec% - проверить доступность аппаратного кодека, переданного в параметре%codec%. Доступные значения -H263, H264, MPG2, WVC1, MPG4, AGIF, MJPA, MJPB, MJPG, WMV9, MVC0.

    vcgencmd get_config [config|int|str] - показать значение определённого параметра из файла /boot/config.txt. Третьим аргументом передаётся название конкретного параметра (значение которого нас интересует), либо int для показа всех параметров с целочисленными значениями, либо str для показа всех параметров со строковыми значениями.

    vcgencmd get_mem arm/gpu - показывает сколько оперативной памяти отведено для использования обычным процессором, а сколько для видеоядра. Значение arm может быть некорректно для моделей Raspberry Pi 4 c 2Gb и 4Gb оперативной памяти, для них лучше использовать команду

    cat /proc/meminfo
    

    vcgencmd version - показать версию и дату сборки прошивки

    vcgencmd otp_dump - показать содержимое OTP-памяти. Адреса 28 и 30 этой памяти содержат значения серийного номера и ревизии платы, которые также можно получить командой cat/proc/cpuinfo Чему соответствуют прочие значения в этой памяти - неизвестно

    vcgencmd set_backlight - в настоящее время не используется. В будущем возможно будет использоваться для управления подсветкой подключённого экрана

    vcgencmd display_power 0/1 [display_id] - включить/выключить видеовыход c идентификатором [display_id]. Список идентификаторов доступных видеовыходов можно получить командой

    tvservice -l
    

    На Raspberry Pi 4 первый HDMI выход имеет идентификатор 7, таким образом команда vcgencmd display_power 0 7 отключит его

    vcgencmd get_lcd_info - показать разрешение и глубину цвета подключенного дисплея

    vcgencmd get_camera - показать подключена или нет официальная CSI-камера

    vcgencmd get_throttled - показывает причины снижения производительности процессора. Для расшифровки нужно перевести вывод команды в двоичный формат и смотреть установленные биты (нумерация справа налево)

    Бит 0 В настоящий момент производительность процессора снижена из-за проблем с питанием, низкое напряжение
    Бит 1 В настоящий момент производительность процессора снижена из-за ручного ограничения частоты
    Бит 2 В настоящий момент производительность процессора снижена
    Бит 3 В настоящий момент производительность процессора снижена из-за перегрева процессора
    Бит 16 Производительность процессора в этом сеансе работы была когда-то снижена из-за проблем с питанием, низкое напряжение
    Бит 17 Производительность процессора в этом сеансе работы была когда-то снижена из-за ручного ограничения частоты
    Бит 18 Производительность процессора в этом сеансе работы была когда-то снижена
    Бит 19 Производительность процессора в этом сеансе работы была когда-то снижена из-за перегрева процессора
    

    vcgencmd mem_oom - Статистика событий Out Of Memory, случившихся в области памяти VC4

    vcgencmd read_ring_osc - показать температуру и напряжение кольцевого осциллятора

    vcgencmd hdmi_timings - показать тайминги текущих настроек HDMI


  • Raspberry Pi 4 и UART
    piP pi

    В Raspberry Pi доступно несколько последовательных портов, каждый из которых управляется UART трансивером. На всех моделях (кроме Raspberry Pi 4) их 2 - UART0, UART1. В Raspberry Pi 4 в дополнение к этим UART трансиверам могут быть активированы ещё 4 - UART2, UART3, UART4, UART5 (для активации нужно прописать в конфиг /boot/config.txt -

    dtoverlay=uartX где x=2,3,4
    
    enable_uart=1
    

    для активациии UART0/1

    Типы UART в Raspberry Pi бывают 2х видов:

    PL011 - полноценный UART во многом совместимый с форматом UART 16550 https://en.wikipedia.org/wiki/16550_UART
    miniUART- UART с урезанным набором возможностей и некоторыми сложностями в использовании.
    Таблица соответствия последовательных устройств и GPIO пинов - UART трансиверам

    /dev/ttyS0	UART1 (MiniUART) TX - GPIO 14, RX - GPIO 15
    /dev/ttyAMA0	UART0 (PL011) TX - GPIO 14, RX - GPIO 15 
    /dev/ttyAMA1	UART2 (PL011) TX2 - GPIO 0, RX2 - GPIO 1
    /dev/ttyAMA2	UART3 (PL011) TX3 - GPIO 4, RX3 - GPIO 5
    /dev/ttyAMA3	UART4 (PL011) TX4 - GPIO 8, RX4 - GPIO 9
    /dev/ttyAMA5	UART5 (PL011) TX5 - GPIO 12, RX5 - GPIO 15
    

    Проверить какие выводы GPIO каким UART трансиверам соответствует можно командой

    raspi-gpio funcs
    

    a8a4182c-56e9-490e-9d95-b7fae66a4b59-image.png

    Если активен Bluetooth, то TX/RX пинами GPIO14/GPIO15 управляет miniUART и подключенное к порту устройство доступно как /dev/ttyS0

    Если отключить Bluetooth, прописав в конфиг /boot/config.txt - dtoverlay=disable-bt (также возможно потребуется выполнить команду sudo systemctl disable hciuart), то TX/RX пинами GPIO14/GPIO15 будет управлять PL011 UART и подключенное к порту устройство доступно как /dev/ttyAMA0


  • Wiring Pi - библиотека работы с GPIO. Часть 1
    piP pi

    Данная статья рассчитана на пользователей, имеющих представления об основах GPIO Raspberry Pi.

    Если эта тема для вас новая, то перед прочтением статьи рекомендую ознакомится с другими статьями для начинающих на тему GPIO - их можно найти в разделе "Документация"

    В настоящее время самой популярной библиотекой для работы с GPIO на Raspberry Pi стала wiringPi

    Установка wiringPi

    1. Если у вас нет утилиты git для работы с github-репозиториями, то устанавливаем:
    sudo apt-get install git-core
    
    1. Скачиваем исходники библиотеки из репозитория -
    git clone git://git.drogon.net/wiringPi
    

    !!!UPD: автор библиотеки прекратил её поддержку и разработку. Крайняя версия WiringPi от Гордона Хендерсона не работает нормально на Raspberry Pi 4. Поэтому следует использовать версию библиотеки, которая разрабатывается сообществом:

    git clone https://github.com/WiringPi/WiringPi.git
    
    1. Устанавливаем:
    cd wiringPi
    ./build
    

    Использование
    После того, как библиотека wiring Pi установлена, вы можете использовать её в своих проектах. Пример:

    #include  <wiringPi.h> //подключаем заголовочный файл библиотеки
    int main (void)
    {
      wiringPiSetup () ; //инициализируем библиотеку
      pinMode (0, OUTPUT) ;
      for (;;)
      {
        digitalWrite (0, HIGH) ; delay (500) ;
        digitalWrite (0,  LOW) ; delay (500) ;
      }
      return 0 ;
    }
    

    Компилируем исходник:

    gcc -Wall -o example example.c -lwiringPi
    

    Запускаем:

    sudo ./example
    

    Библиотека должна быть обязательно инициализирована вызовом функции wiringPiSetup() После этого можно использовать библиотечные функции

    Основные библиотечные функции
    Если библиотека была инициализирована функцией wiringPiSetup() , то в функции следует передавать "виртуальный" номер пина. Таблицу соответствия "виртуальных" пинов (колонка wPi) реальным можно получить при помощи команды gpio readall (утилита gpio устанавливается автоматически вместе с библиотекой WiringPi)
    bfdf9794-5ae8-49b5-8a76-5d41654cd5d6-image.png

    void pinMode (int pin, int mode)
    Устанавливает режим работы пина. Доступные значения параметра mode: INPUT, OUTPUT, PWM_OUTPUT, GPIO_CLOCK. Примечание: режим работы PWM_OUTPUT поддерживается только пином BCM_GPIO 18, режим GPIO_CLOCK поддерживается только пином BCM_GPIO 4

    void pullUpDnControl (int pin, int pud)
    Включает внутренние подтягивающие резисторы для пина, работающего в режиме INPUT. Возможные значения PUD_OFF (подтягивающие резисторы отключены), PUD_DOWN (подтяжка к земле), PUD_UP (подтяжка к 3.3v)/Сопротивление подтягивающих резисторов на Raspberry Pi составляет около 50KОм

    void digitalWrite (int pin, int value)
    Устанавливает высокий (value=1)/низкий уровень(value=0) на пине, работающем в режиме OUTPUT

    void pwmWrite (int pin, int value) Параметр value задаёт коэффициент заполнения импульса (про ШИМ и что такое заполнение импульса можно прочитать в этой статье - https://raspberrypi.ru/50-gpio-dlya-chaynikov-chast-4), value принимает значения от 0 (0% заполнения импульса) до 1024 (100% заполнение импульса). Аппаратная ШИМ поддерживается только пином BCM_GPIO 18

    int digitalRead (int pin)
    Считывание состояния пина. В зависимости от логического уровня функция возвращает 0 или 1

    analogRead (int pin)
    Функция считывает значение АЦП. Поскольку на Raspberry Pi нет встроенного АЦП, то перед вызовом функции в программе необходимо инициализировать внешний АЦП (пример использования можно найти в этой статье - https://raspberrypi.ru/571-poluchenie-dannyh-s-analogovyh-datchikov-podklyuchennyh-k-raspberry-pi)

    analogWrite (int pin, int value)
    Функция записывает значение в АЦП.

    Временные функции

    unsigned int millis (void) Возвращает время (в миллисекундах) прошедшее с момента вызова функции инициализации (wiringPiSetup) библиотеки WiringPi. Значение сбрасывается через 49 дней

    unsigned int micros (void)
    Возвращает время (в микросекундах) прошедшее с момента вызова функции инициализации (wiringPiSetup) библиотеки WiringPi. Значение сбрасывается приблизительно через 71 минуту

    void delay (unsigned int howLong)
    Приостанавливает выполнение программы на период времени, заданный в параметре howLong (задаётся в миллисекундах)

    void delayMicroseconds (unsigned int howLong)
    Приостанавливает выполнение программы на период времени, заданный в параметре howLong (задаётся в микросекундах)

    Прерывания

    *int wiringPiISR (int pin, int edgeType, void (function)(void))
    Регистрирует функцию, которая будет выполнена при наступлении условия прерывания. Условие прерывания (параметр edgeType) может принимать следующие значения:

    INT_EDGE_FALLING (прерывание при смене уровня на пине с высокого на низкий)
    INT_EDGE_RISING (прерывание при смене уровня на пине с низкого на высокий)
    INT_EDGE_BOTH (прерывание при любой смене уровня на пине)
    INT_EDGE_SETUP
    При условии INT_EDGE_SETUP не будет происходить инициализации пина - подразумевается, что он уже был настроен в другом приложении.

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

    Функция-обработчик прерывания выполняется с высоким приоритетом (если программа запущена от пользователя root) и выполняетсяодновременнос основной программой. Также она имеет полный доступ к глобальным переменным и т.д

    Программа gpio

    Вместе с библиотекой Wiring Pi поставляется удобная программа gpio (я её упомянул в начале статьи). С её помощью можно быстро устанавливать пины в нужное состояние из консоли.

    gpio mode <pin> in/out/pwm/clock/up/down/tri - установка режима работы пина.
    gpio write <pin> 0/1 - установить высокий/низкий уровень на пине в режиме работы OUT
    gpio pwm <pin> <value> - генерация ШИМ сигнала на пине. value в диапазоне от 0 до 1023 определяет коэффициент заполнения
    gpio read <pin> - считать состояние пина. 0 или 1
    Продолжение следует...

  • 1 / 1
  • Войти

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

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