Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Прокачивай своего викинга, срази всех врагов и доберись до Одина!

Викинги Вальхалла

Мидкорные, Приключения, Ролевые

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
3
Bimbash
Bimbash
Лига 3D-принтеров

Как подключить Orange Pi3 zero 3 к Ender-6⁠⁠

6 часов назад

Есть Ender-6, есть Orange Pi zero 3. Собственно вопрос, как подключить Orange Pi3 zero 3 к принтеру для установки Octopus? USB в принтере нет.

Подскажите решение

[моё] Orange pi Creality USB 3D печать 3D принтер Текст
9
15
rexzep
Arduino & Pi

Гайд по установке Klipper на Orange Pi Zero (Lts) (Актуально на 25.07.2025)⁠⁠

4 месяца назад

1. Подготовка системы

1.1. Ставим образ

Ставим образ Armbian Minimal/IOT Debian 12 (Bookworm)

https://www.armbian.com/orange-pi-zero/

1.2 Подключаемся по Lan.

1.3 Пропускаем добавление пользователя

Пропускаем добавление пользователя Crtl+с

1.4. Настройка WiFi

Устанавливаем и включаем WiFi, коннектимся к сети:

apt-get install network-manager-gnome

sudo nmtui

Теперь после перезагрузки OPI будет автоматически коннектиться по WiFi к выбранному подключению, но лучше, конечно, всё настроить ещё по LAN.

1.5 Перезагрузка

sudo reboot

2. Добавление пользователя pi

2.1. Создание пользователя и назначение групп

sudo adduser pi

sudo usermod -a -G tty pi

sudo usermod -a -G dialout pi

sudo adduser pi sudo

2.2. Перезагрузка системы

sudo reboot

2.3 Заходим под пользовтелем pi.

3. Настройка sudoers

3.1. Редактирование файла sudoers

Редактируем sudoers, добавляем пользователю pi все разрешения.

Этот этап очень важный и нельзя ошибиться. При открытии может потребоваться закрыть 2-ю страницу (Ctrl+X):

sudo nano edit /etc/sudoers

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

#User privilege specification

root ALL=(ALL:ALL) ALL

pi ALL=(ALL:ALL) ALL // этот блок без сноски

Сохраняем изменения (Ctrl+O, подтверждаем, Ctrl+X – закрываем).

!!!!!!Обращаю Ваше внимание, что это изменение может нести потенциальные угрозы безопасности!!!!!!

3.1.1 Если нехотите каждый раз вводить пороль после команды sudo.

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

sudo EDITOR=nano visudo

в появившемся редакторе находим блок:

# Allow members of group sudo to execute any command

%sudo ALL=(ALL:ALL) ALL

и приводим его к виду:

# Allow members of group sudo to execute any command

%sudo ALL=NOPASSWD: ALL

!!!!!!Обращаю Ваше внимание, что это изменение может нести потенциальные угрозы безопасности!!!!!!

3.2. Перезагрузка системы

sudo reboot

4. Установка необходимых пакетов

4.1. Установка остальных пакетов (копируем целиком)

sudo apt update && sudo apt upgrade –y

sudo apt install -y \

git \

make \

gcc \

libncurses-dev \

libusb-1.0-0-dev \

python3-virtualenv \

python3-dev \

avrdude \

zlib1g-dev \

libjpeg-dev \

libopenjp2-7-dev \

libtiff5-dev \

libfreetype6-dev \

liblcms2-dev \

libwebp-dev

5. Расширение оперативной памяти

5.1. Увеличиваем объем оперативной памяти до 2 ГБ

sudo fallocate -l 2G /swapfile

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

6. Увеличение объёма папки /tmp

6.1. Редактируем /etc/fstab

sudo nano /etc/fstab

Найдите строку:

tmpfs /tmp tmpfs defaults,nosuid 0 0

Измените её, добавив параметр size=512M:

tmpfs /tmp tmpfs defaults,nosuid,size=512M 0 0 (должно выглядеть так)

Сохраните файл (Ctrl+O, затем Enter) и выйдите (Ctrl+X).

6.1.1 Проверка swap

free -h

Должно быть так ну или около того.

total used free shared buff/cache available

Mem: 485Mi 83Mi 296Mi 1.5Mi 118Mi 402Mi

Swap: 2.2Gi 0B 2.2Gi

6.2. Перезагрузка системы

sudo reboot

7. Установка скрипта KIAUH

7.1. Клонирование репозитория и запуск скрипта

sudo git clone https://github.com/th33xitus/kiauh.git

запускаем KIAUH

./kiauh/kiauh.sh

7.2. Установка компонентов

Устанавливаем:

Klipper для 1 машины*

Выбираем Python 3.x

Moonraker

Fluidd или Mainsail (веб-окружение)

Показать полностью
Orange pi Linux Текст Длиннопост
2
15
seko99
Arduino & Pi
Серия Строю робота

Поменял колёсико и аккумулятор⁠⁠

5 месяцев назад
Перейти к видео

Заднее ведомое колёсико меня вообще не устраивало - робот застревал на порогах, страшно гремел и пугал кошку. Нашёл колесо от, опять-же, пылесоса. Но оно должно быть сильно утоплено в корпус. Быстренько соорудил модельку и напечатал крепление. Теперь всё устраивает ))

Кроме того, выяснилось, что power bank Xiaomi 20000mAh нифига не тянет одновременно включенную логику и лидар. Так только нагрузка на процессор Orange возрастает (я начинал стримить видео с камеры) - получаем просадку напряжения и зависания контроллеров.

Решил заменить на аккумулятор 12В, такой же, как для ходовой части. Тоже через DC-DC преобразователь. Теперь с этим тоже вроде всё хорошо - ещё одно улучшение аппаратной платформы.

Заодно подключил IMU (MPU6050) но пока софт под него не интегрировал. Наверное, это пойдёт уже вместе со SLAM, когда руки дойдут.

Больше информации в ТГ: https://t.me/robostroy

YouTube: https://www.youtube.com/@seko2k19

Показать полностью
[моё] Электроника Arduino Робототехника Робот Orange pi Самоделки Видео
7
74
seko99
Arduino & Pi
Серия Строю робота

Лидар подключен!⁠⁠

6 месяцев назад
Перейти к видео

rViz2 показал, что облако точек наблюдается и коррелирует с внешним миром. Ещё есть подозрение, что я неправильно развернул лидар по курсу, может надо программно скорректировать угол.

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

Больше информации в ТГ: https://t.me/robostroy

YouTube: https://www.youtube.com/@seko2k19

Показать полностью
[моё] Arduino Электроника Робототехника Робот Orange pi Raspberry pi Lidar Видео
18
14
seko99
Arduino & Pi
Серия Строю робота

Смонтировал лидар на робота, получил какие-то данные с него⁠⁠

6 месяцев назад

Переделал схему питания, чтобы лидар можно было включать отдельно, по своей линии питания. У него потребление ~400мА, больше, чем вся остальная логика, включая Orange PI.

Собрал, включил. На python написал простейший скрптец, чтобы увидеть данные, которые он шлёт. Увидел ))

Следующий этап - подключение лидара к ROS2-ноде и визуализировать данные на RViz.

Больше информации в ТГ: https://t.me/robostroy

И как обычно, дублирую на других площадках:

RuTube: https://rutube.ru/video/ca1bca8be0d3b831236b22a71f80fdfa/

VK: https://vk.com/video-226966878_456239039

Показать полностью
[моё] Arduino Электроника YouTube Робототехника Raspberry pi Orange pi Lidar Своими руками Видео
0
17
seko99
Arduino & Pi
Серия Строю робота

Тестирую лидар для робота⁠⁠

6 месяцев назад

Лидар с Алиэкспресса, от робота-пылесоса. Будет основой навигационной системы будущего робота. Целью теста было припаять нужные провода, проверить мотор и логику перед монтажём на платформу.

Подробно процесс стройки освещаю здесь: https://t.me/robostroy

и здесь: https://www.youtube.com/@seko2k19

Подписывайтесь, должно быть интересно!

Показать полностью
[моё] YouTube Arduino Электроника Робототехника Orange pi Своими руками Видео
26
19
user10367295
Arduino & Pi

Гайд по установке Klipper на Orange Pi Zero (Lts) (Актуально на 02.03.2025)⁠⁠

9 месяцев назад

1. Подготовка системы

1.1. Ставим образ

Ставим образ Armbian Minimal/IOT Debian 12 (Bookworm)
https://www.armbian.com/orange-pi-zero/

1.2. Пропускаем добавление пользователя

Пропускаем добавление пользователя Crtl+с

1.3. Настройка WiFi

Устанавливаем и включаем WiFi, коннектимся к сети:

apt-get install network-manager-gnome

sudo nmtui

Теперь после перезагрузки OPI будет автоматически коннектиться по WiFi к выбранному подключению, но лучше, конечно, всё настроить ещё по LAN.

2. Добавление пользователя pi

2.1. Создание пользователя и назначение групп

sudo adduser pi

sudo usermod -a -G tty pi

sudo usermod -a -G dialout pi

sudo adduser pi sudo

2.2. Перезагрузка системы

sudo reboot

3. Настройка sudoers

3.1. Редактирование файла sudoers

Редактируем sudoers, добавляем пользователю pi все разрешения.
Этот этап очень важный и нельзя ошибиться. При открытии может потребоваться закрыть 2 страницу (Ctrl+X):

sudo nano edit /etc/sudoers

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

#User privilege specification

root  root ALL=(ALL:ALL) ALL

pi  ALL=(ALL:ALL) ALL  // этот блок без сноски

Сохраняем изменения (Ctrl+O, подтверждаем, Ctrl+X – закрываем).

3.2. Перезагрузка системы

sudo reboot

4. Установка необходимых пакетов

4.1. Установка net-tools

sudo apt-get install net-tools –y

4.2. Установка остальных пакетов (копируем целиком)

sudo apt install -y \

git \

make \

gcc \

libncurses-dev \

libusb-1.0-0-dev \

python3-virtualenv \

python3-dev \

avrdude \

zlib1g-dev \

libjpeg-dev \

libopenjp2-7-dev \

libtiff5-dev \

libfreetype6-dev \

liblcms2-dev \

libwebp-dev

5. Обновление системы

5.1. Обновляем установленные пакеты и систему

sudo apt update && sudo apt upgrade –y

6. Расширение оперативной памяти

6.1. Увеличиваем объем оперативной памяти до 2 ГБ

sudo fallocate -l 2G /swapfile

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

7. Увеличение объёма папки /tmp

7.1. Редактируем /etc/fstab

sudo nano /etc/fstab

Найдите строку:

tmpfs /tmp tmpfs defaults,nosuid 0 0

Измените её, добавив параметр size=512M:

tmpfs /tmp tmpfs defaults,nosuid,size=512M 0 0  (должно выглядеть так)

Сохраните файл (Ctrl+O, затем Enter) и выйдите (Ctrl+X).

7.2. Перезагрузка системы

sudo reboot

8. Установка скрипта KIAUH

8.1. Клонирование репозитория и запуск скрипта

sudo git clone https://github.com/th33xitus/kiauh.git

запускаем KIAUH
./kiauh/kiauh.sh 

8.2. Установка компонентов

Устанавливаем:

  • Klipper для 1 машины*

  • Выбираем Python 3.x

  • Moonraker

  • Fluidd или Mainsail (веб-окружение)

Показать полностью
Orange pi Windows Linux Гайд Текст Длиннопост
8
278
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER

Пишем программы на C# для одноплатников: что, как и где на примере Orange Pi One⁠⁠

1 год назад

В своей жизни я обожаю как минимум три вещи: это C# (как и .NET в целом), интересное железо и одноплатные компьютеры. В Embedded-системах на Linux обычно принято писать код на C/C++ для решения чувствительных к производительности задач и интерпретируемых Lua/Python для быстрого прототипирования, которые стали популярны в встраиваемых устройствах сравнительно недавно. Однако о нативной разработке под одноплатники на C# практически ничего не слышно и я решил исправить это недоразумение! В сегодняшнем материале: рассмотрим, какие платформы .NET нам доступны на одноплатниках, научимся работать с GPIO и SPI в юзерспейсе, а также напишем практическое приложение, которое реализовывает драйвер дисплея и выводит на экран определенное изображение.

❯ Предисловие


Одноплатники уже давно вошли в повседневную жизнь многих DIY-щиков, сисадминов и людей, которые интересуются мини-компьютерами. Казалось бы, одну и ту же задачу можно решить несколькими методами на самых разных языках: кто-то предпочитает писать нативный код на тех же плюсах, а особо прожженные — на Plain-C и ассемблере, стараясь получить максимальную производительность, а кто-то хочет сразу перейти к реализации своего устройства не заморачиваясь с подробным изучением того, как чип работает «под капотом» и какие шины существуют, ограничиваясь использованием готовых библиотек.

Но я лично очень люблю C# за его максимальную гибкость, позволяющую оптимизировать некоторые обращения к памяти путем получения прямых указателей на данные, умеет в удобные темплейты, а также имеет механизм для маршаллинга (прямой импорт функций из библиотек, возможность создать нативный трамплин на управляемый делегат, возможность быстрого копирования из unmanaged в managed окружение и т. п.). Потому всегда думал: почему бы его не использовать в своих embedded-проектах на базе одноплатников?

Сейчас .NET можно накатить на большинство современных одноплатников, за исключением самых слабых с 64Мб ОЗУ «бутербродом» на чипе (AllWinner F1C100s, AllWinner V3s, некоторые MStar и т. п.). Доступно два рантайма, которые предлагают разные профили и соответственно, разный функционал.

  • dotnet — официальный рантайм, который реализует профиль .NET Core (ой, простите, так уже не модно, теперь это просто .NET). Предоставляет весь современный базовый функционал дотнета вкупе с современными версиями самого C#, но в нём нет, например, Windows Forms для UI (если вы используете полноценные «иксы» и GTK), и System.Drawing для обработки графики и отрисовки текста. Это эталонная реализация дотнета и его можно без проблем накатить на любой одноплатник, для которого есть достаточно свежий Linux.

  • Mono — альтернативная реализация .NET Framework для Linux, ранее активно использовалась в Unity. В отличии от .NET Core, может работать и на более старых одноплатниках на прошлых версиях дистрибутивов Linux, в том числе и самой первой Raspberry Pi. Считается более медленной, чем dotnet, зато имеет значительно большую функциональность, почти идентичную фреймворку на Windows.


В сегодняшней статье мы будем писать программу на C# для OrangePi One, которая должна инициализировать дисплей из юзерспейса и выводить на него определенные данные. В качестве профиля используем .NET Framework 4 (да, я порой старомоден), а одноплатником выступит OrangePi One в стоковой конфигурации ядра, без правок devicetree, где по умолчанию у нас доступен spidev без аппаратных чипселектов, доступ к GPIO из /sys/ и i2cdev.

❯ Настраиваем окружение


Для начала нам нужен образ системы для нашего одноплатника. Какой — выбирать вам. Для большинства устройств на чипсетах AllWinner доступны образы с ядром 3.x, которые более стабильны, но не используют devicetree и не входят в мейнлайн и 5.x, так называемый мейнлайн, но там всё ещё есть некоторые нюансы. Я выбрал Ubuntu Xenial с ядром 5.3.5.

Теперь самое время накатить рантайм, что мы и делаем командой:

apt-get install mono-all

Обратите внимание, Mono громоздкий и с учетом всех зависимостей может устанавливаться минут 30, если у вас достаточно медленная флэшка. Всё, теперь устройство готово к запуску программ на дотнете, нашу программу можно запустить следующей командой:

mono assembly.exe

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

❯ GPIO


Начинаем с GPIO или «ногодрыга». В Linux есть удобный интерфейс, позволяющий экспортировать пины общего назначения в юзерспейс и рулить ими прямо из sysfs, в том числе и из терминала! Для реализации софтварного SPI или быстрого опроса цифровых пинов такой способ не подойдет — слишком большой оверхед, но для моргания светодиодами, обработки кнопок или… программного ногодрыга чипселектом — вполне подойдет :)

Как я и говорил выше, GPIO сначала нужно сделать видимым в sysfs — т. е. экспортировать, путём записи номера нужного пина в «файл» /sys/class/gpio/export. Посчитать ID нужного пина можно с помощью простой формулы: (позиция буквы в алфавите — 1) * 32 + номер пина. То есть, для PA10 ID будет 10. При ошибке, системный вызов close выбросит ошибку, а поток в C# — IOException.

После этого, по пути /sys/class/gpio/gpio10/ появится директория с файлами direction, куда нужно записать направление нашего пина («in» — ввод, «out» — вывод) и value, куда мы будем записывать или читать значение пина. Реализовать управление пином можно так:

Да, всё так просто! Мигалка светодиодом в нашем случае будет выглядеть так:

Переходим к чему посложнее, а именно к SPI из всё того-же юзерспейса!

❯ SPI


Для управления SPI нам потребуется вызов ioctl, который позволяет отправлять устройству различные пакеты с описанием команд. Для этого нам пригодится PInvoke:

Для каждой аппаратной шины SPI создаётся одно устройство spidev. В случае OrangePi One, по умолчанию экспортирована только одна шина (поскольку и SPI-контроллер на гребенке лишь один) — spidev0.0. Для начала открываем наше устройство для записи:

Драйвер spidev работает по принципу транзакций — вы посылаете IOCTL с запросом SPI_IOC_MESSAGE (в оригинале это макрос с возможностью послать сразу несколько транзакций в драйвер) и указателем на структуру spi_ioc_transfer с описанием отправляемых или получаемых данных, а драйвер уже сам решает что и когда отправить, при этом вызов ioctl — блокирующий, то есть управление в поток вернется только когда драйвер завершит работу. Но есть нюанс — драйвер SPI у чипсетов AllWinner не может отправлять более 128-байт (на AllWinner A10/A13 — 64-байт) данных за транзакцию, поэтому большой массив данных придётся разбивать на несколько мелких:

Уже в шоке от обилия указателей в коде на шарпе? :) Надеюсь, комментарии помогут вам разобраться.

Тоже самое и для чтения данных с шины, только вместо txBufPointer — rxBufPointer.

Пример работы прост до безобразия:

Имея GPIO и SPI уже можно переходить к реализации чего-то более конкретного!

❯ Дисплей


В качестве дисплея я буду использовать стандартную дешёвую 2.4" матрицу с разрешением 240x320 и контроллером ST7789 с интерфейсом SPI. Для использования дисплея с питанием 3.3В нужно поставить перемычку на позиции J1, как показано на фото ниже.

Для подключения такого дисплея, достаточно всего лишь 4 (5, если нужен чипселект) сигнальные линии на 40-пиновой гребенке RPi One, плюс один для ШИМ (если нужно регулировать подсветку) и два на питание. Обратите внимание, что лучше сдуть гребенку и паяться к одноплатнику напрямую — у меня из-за китайских дюпонтов постоянно помехи на дисплее и мусор на шине.

Схема подключения:

VCC -> 3.3V

GND -> Масса

CS -> PA9

RESET - PA10

D/C - PA20

MOSI - PC0

SCK - PC2

LED -> 3.3V

Начинаем с подготовки необходимых GPIO. Для управления дисплеем всегда нужен аппаратный RESET и D/C (бит команда/данные). Чипселект необязателен (его можно кинуть на массу), если это будет единственное устройство на шине, однако в случае ST7789 почему-то в таком случае нужно использовать SPI MODE 3.

Переходим к реализации коммуникации с дисплеем. Здесь всё просто — ставим CS в низкий уровень, начиная транзакцию, устанавливаем D/C в низкий уровень в случае команды, либо высокий в случае данных и отправляем байт контроллеру, после чего устанавливаем чипселект обратно в высокий уровень.

Теперь дисплей нужно инициализировать. Здесь нужно сконфигурировать регистры контроллера дисплея для установки режима адресации, цветности и порядка байт в пикселях (BGR или RGB).

Если всё сделано правильно — то после этого вы должны увидеть «мусор» на дисплее, поскольку состояние ОЗУ не определено после подачи питания на контроллер (но при сбросе содержимое DRAM останется на месте).

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

После этого, достаточно лишь непрерывно слать изображение на контроллер дисплея и всё будет работать!

Поскольку ни один формат изображений не соответствовал моим требованиям (RGB565, без выравнивания), я быстренько накостылил конвертер в самопальный:

Загрузчик такого формата выглядит так:

А фактическое использование — так:

❯ Заключение

Как мы видим, писать программы для одноплатников на C# отнюдь не сложно и можно пользоваться всеми приятными фишками языка. Часть кода из этой статьи выдрана из моего сайд-проекта, о котором хочу рассказать вам в ближайшее время — поэтому местами код совсем не причесан, но надеюсь — всё было понятно :)

Также у меня есть канал в Telegram, куда я выкладываю посты с тематикой DIY, ремонта и моддинга, а также программирования под гаджеты прошлых лет и вовремя ссылки на новые статьи.

Показать полностью 22
[моё] Своими руками Гаджеты Orange Pi Raspberry Pi Программирование Net Код Embedded Ништяки Туториал Умный дом Дисплей Длиннопост
29
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии