apt-get update
apt-get install -y git
apt-get install python3
apt-get install pip
apt-get install python3-dev
git clone https://github.com/orangepi-xunlong/wiringOP.git
cd wiringOP
./build clean
./build
sudo apt install i2c-tools
pip install pillow
pip install smbus2
Через pip:
pip install opigallus
Через git с примерами и шрифтами:
git clone https://github.com/GallusX/OrangePi-Py
cd OrangePi-Py
python3 setup.py install
Небольшая библиотека для обучения и простого программирования GPIO-выходов на OrangePi на языке Python, а также для управления OLED-дисплеем SSD1306.
gpio readall
Команда выведет список пинов:
Отобразятся все порты, их назначения и состояния.
Теперь проверяем i2c-tools. Вводим:
i2cdetect -y 0
i2cdetect -y 1
Если везде прочерки — значит, к плате ничего не подключено. Иногда появляется UU
, 0x30
или 0x20
— это может означать, что I2C не включён.
Смотрите распиновки дисплея и OrangePi. Всё подключаем строго по распиновке!
Распиновка может отличаться в зависимости от модели OrangePi и самого дисплея SSD1306.
- GND — к любому GND на OrangePi
- VCC — к 3.3V на OrangePi
- SDA — к SDA (он один)
- SCL — к SCL (он один)
Это в моём случае. На некоторых моделях SSD1306 могут быть дополнительные пины.
Если после подключения SSD1306 и команды i2cdetect -y 0
всё ещё везде прочерки — нужно включить I2C в системе.
sudo orangepi-config
Выбираем:
- System
- Bootenv
Добавляем строку:
overlays=i2c0 i2c1 i2c2
Нажимаем Save и перезагружаем OrangePi:
reboot
После перезагрузки вводим:
i2cdetect -y 0
3C
— это адрес нашего дисплея.
sudo orangepi-config
Выбираем:
- System
- Bootenv
Добавляем строки:
spi_spidev1
param_spidev_spi_bus=0
param_spidev_spi_cs=0
param_spidev_max_freq=1000000
Важно! На некоторых платах OrangePi только один SPI. Смотрите по распиновке.
Если только один — пишите spi_spidev1
.
Если два — пишите:
spi_spidev
spi_spidev1
Пример: на OrangePi 3 LTS доступен только spi1
, поэтому пишем spi_spidev1
.
Перезагружаем:
reboot
Проверяем:
ls -l /dev/*spi*
Если всё настроено правильно, появятся SPI-порты:
Устанавливаем библиотеку:
pip install spidev
gpio_out(НОМЕР_ПИНА) # Устанавливаем пин как выход
gpio_up(НОМЕР_ПИНА) # Подаём сигнал
gpio_down(НОМЕР_ПИНА) # Убираем сигнал
gpio_rele(НОМЕР_ПИНА) # Добавляем реле
gpio_rup(НОМЕР_ПИНА) # Включаем реле
gpio_rdown(НОМЕР_ПИНА) # Выключаем реле
gpio_button(НОМЕР_ПИНА) # Подключаем кнопку
gpio_pull_up(НОМЕР_ПИНА) # Подтягивающий резистор к +3.3В
gpio_pull_down(НОМЕР_ПИНА) # Подтягивающий резистор к GND
butclick(НОМЕР_ПИНА) # Получаем значение кнопки
Чтобы менять размер текста на экране (ImageFont.truetype
) — выберите и скачайте нужный шрифт, затем скопируйте его в:
/usr/share/fonts
Если папки нет — создайте её.
Один подходящий шрифт уже лежит в папке fonts
в репозитории — просто перенесите его.
from opigallus import *
from opigalluss.display import ssd1306
from opigalluss.draw import canvas
from PIL import ImageFont, ImageDraw
disp = ssd1306(port=0, address=0x3C, width=128, height=64)
with canvas(disp) as draw:
font = ImageFont.load_default()
font = ImageFont.truetype('/usr/share/fonts/Ваш_шрифт.ttf', size=18)
draw.rectangle((0, 0, 128, 64), outline=0, fill=0)
draw.text((0, 0), "Hello world!", font=font, fill=255)
from PIL import Image
image = Image.open('/путь/к/изображению.png').convert("RGBA")
draw.bitmap((0, 0), image, fill=255)
Telegram: @galluis