U8Glib h: olikraus/u8glib: Arduino Monochrom Graphics Library for LCDs and OLEDs

Работа OLED 0.91 inch 128*32 с библиотекой u8g2 (бывшая u8glib) (LRR 0.91 inch)

   


 Библиотека u8g2 (бывшая u8glib) позволяет выводить на дисплей текстовую информацию. Большой выбор шрифтов и большое количество поддерживаемых дисплеев делает эту библиотеку наиболее популярной.

    Для начала рассмотрим подключение дисплея OLED 0.91 inch 128*32 к ARDUINO. Для подключения потребуется всего 4 провода: GND, 5V, SCL (Clock Line) и SDA (Data Line)


    В моем случае используются:

        — версия программы ARDUINO 1.8.13

        — плата ARDUINO UNO

        — дисплей OLED 0.91 inch 128*32

        — библиотека u8g2

     Если у вас не установлена эта библиотека, то ее нужно установить. Пункт меню ИНСТРУМЕНТЫ — УПРАВЛЯТЬ БИБЛИОТЕКАМИ. Далее найти и установить u8g2



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

        Работу скетча описал в комментариях

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); // описание OLED 0.91 inch 128*32
void setup(void) {
  u8g2.begin();
}
void loop(void) {
  u8g2.clearBuffer();                                 // очищаем буфер
  u8g2.setFont(u8g2_font_cupcakemetoyourleader_tr);   // выбираем красивый шрифт
  u8g2.drawStr(0, 29, "D.A.CHOCOLATE");               // начальная позиция и текст 
  u8g2.sendBuffer();                                  // отправляем в буфер
  delay(2000);                                        // пауза
  for (int i = 0; i < 250; i++) {                     // добавляем цикл для эффекта бегущей строки
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_bubble_tr);                  // еще один красивый шрифт
  u8g2.drawStr(125-i, 29, "FANYA");                   // горизонтальная позиция меняется от 125 до -125
  
u8g2
. sendBuffer();  delay(20);                                          // этой паузой задается скорость }  u8g2.clearBuffer();           u8g2.setFont(u8g2_font_tenstamps_mf);               // еще один красивый шрифт  u8g2.drawStr(15, 29, "Little");  u8g2.sendBuffer();  delay(1500);  u8g2.clearBuffer();  u8g2.setFont(u8g2_font_heavybottom_tr);             // еще один красивый шрифт  u8g2.drawStr(32, 29, "Red Rat");  u8g2.sendBuffer();  delay(2000);

Посмотреть и выбрать шрифты можно по ссылке https://github.com/olikraus/u8g2/wiki/fntlistall

    

    

    Шрифты отсортированы по размеру. Слева образец. Копируем название нужного шрифта и вставляем в скетч. Можно найти шрифты с русскими буквами, шрифты с символами (заряд батареи, уровень сигнала и т.п.) 

    Также в скетче указывается позиция вывода текста

         u8g2. drawStr(32, 29, "Red Rat");


    Как видно на фото, сначала указывается горизонтальная позиция (слева направо), затем вертикальная (сверху вниз). Значения могут выходить из диапазона 128*32. За счет этого у меня реализована бегущая строка. При отрицательных значениях текст начинается с позиции за видимой частью дисплея.

    Для отображения нескольких строк делаем следующие:       

  u8g2.clearBuffer();         
  u8g2.setFont(u8g2_font_tenstamps_mf);              
  u8g2.drawStr(15, 16, "Line 1");
  u8g2.drawStr(15, 32, "Line 2");
  
u8g2
.sendBuffer();  delay(4500);



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

    На этом все. Спасибо всем за внимание. Если вам помогла эта статья, можете сказать мне спасибо просто посмотрев рекламу 🙂

BSP430: include/bsp430/utility/u8glib.h Ссылка на файл

Объявления, относящиеся к поддержке u8glib для конкретной платформы. Подробнее…

#include
#include

Перейдите к исходному коду этого файла.

#define configbsp430_utility_u8glib 0
#Define229_UTILIE0017
 
#define  BSP430_U8GLIB_REFRESH_INTERVAL_MS   0
 
int  iBSP430u8gRefresh (u8g_t *u8g)
 
hBSP430halSERIAL  hBSP430u8gSPI ( void)
 
u8g_dev_t xBSP430u8gDevice
 

Объявления, относящиеся к поддержке u8glib для конкретных платформ.

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

u8glib находится под сильным влиянием Arduino, и добавление еще одной целевой платформы в саму библиотеку было бы запутанным; однако довольно легко создать поддержку моста на каждой платформе, чтобы обеспечить интерфейс от аппаратного обеспечения к библиотеке. Этот модуль определяет общий материал, относящийся к интерфейсам, предоставляемым BSP430.

Большинство идентификаторов и констант периферийных ресурсов зависят от платформы; например BSP430_PLATFORM_TRXEB_LCD_SPI_PERIPH_HANDLE. Интерфейс для u8glib не требует, чтобы они были абстрагированы и общедоступны.

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

Также включите $(PLATFORM_U8G_PB_C) , который определен в специфичном для платформы файле Makefile.common , чтобы выбрать правильную низкоуровневую реализацию на основе ориентации экрана и поддерживаемых цветов.

См. Также
U8GLIB LCD Текст и графика
Домашняя страница
http://github.com/pabigot/bsp430
. Под лицензией BSD-3-Clause

#define BSP430_U8GLIB_REFRESH_INTERVAL_MS   0

Укажите интервал в миллисекундах, через который следует вызывать iBSP430u8gRefresh(), чтобы поддерживать стабильное отображение.

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

По умолчанию:
Значение здесь заменено ранее встречавшимися определениями.
Платформенное значение:
Здесь не определено; включите
, чтобы получить правильное значение этого макроса.
Примеры:
утилита/u8glib/main.c.

#define BSP430_UTILITY_U8GLIB   include

Указывает, что на платформе доступен ЖК-интерфейс U8GLIB. Это задается заголовком, зависящим от платформы, когда configBSP430_UTILITY_U8GLIB имеет значение true и платформа поддерживает устройство U8GLIB.

Если это определение оценивается как false, то либо адаптация u8glib не запрашивалась, либо платформа не предоставила ее.

Пример использования см. в тексте и графике ЖК-дисплея U8GLIB.

Только препроцессор C:
Значение этого макроса может ограничивать его использование условными директивами препроцессора C.
Зависимость:
configBSP430_UTILITY_U8GLIB
По умолчанию:
Значение здесь заменено ранее встречавшимися определениями.

#define configBSP430_UTILITY_U8GLIB   0

Определите, чтобы запросить, чтобы платформа включила адаптацию U8GLIB.

Некоторые платформы имеют встроенный ЖК-дисплей, для которого доступен мост к u8glib. Определение этого макроса в вашем зарегистрирует запрос для этого устройства.

Только препроцессор C:
Значение этого макроса может ограничивать его использование условными директивами препроцессора C.
Воздействует:
BSP430_UTILITY_U8GLIB
По умолчанию:
Значение здесь заменено ранее встречавшимися определениями.

hBSP430halSERIAL hBSP430u8gSPI ( недействителен  )

Предоставьте доступ к устройству SPI, используемому для связи с устройством u8glib.

Возвращает
Устройство SPI для связи с ЖК-дисплеем. Действует только после вызова u8g_Init(). Если возвращается значение null, устройство нельзя использовать.
Примеры:
утилита/u8glib/main.c.

инт iBSP430u8gRefresh ( u8g_t * у8г )

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

Например, это требуется для ЖК-дисплея Sharp Memory для переключения VCOM, чтобы на дисплее не накапливалось смещение постоянного тока.

Примечание
Эта функция подходит для вызова из обработчика прерывания. Возвращаемое значение соответствует ожиданиям возвращаемых значений обратного вызова прерывания.
Параметры
u8g ручка u8glib для дисплея
Возвращает
Обычно ноль или значение, как описано в разделе Возвращаемые значения обратного вызова прерывания.
Примеры:
утилита/u8glib/main.c.

u8g_dev_t xBSP430u8gDevice

Платформенное устройство для встроенного ЖК-дисплея.

Зависимость:
BSP430_UTILITY_U8GLIB
Примеры:
утилита/u8glib/main.c.

Как использовать OLED-дисплей с Raspberry Pi Pico

Перейти к основному содержанию

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

(Изображение предоставлено Tom’s Hardware)

Обновление от 23 апреля 2021 г.:

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

Оригинальная статья:

У Raspberry Pi Pico нет недостатка в вариантах цифровых дисплеев. Мы можем использовать ЖК-экраны, вывод на VGA/DVI или использовать сделанные на заказ экраны, такие как Pico Display или Pico Explorer Base IPS-дисплей. Но иногда нам нужен небольшой недорогой вариант, чтобы выполнить работу. OLED-экраны, такие как 0,96-дюймовая модель, используемая в этом руководстве, просты в использовании с MicroPython и стоят всего несколько долларов (или фунтов), что делает их идеальными для проектов.

В этом руководстве мы узнаем, как подключить OLED-экран к Raspberry Pi Pico через интерфейс I2C, затем установим библиотеку MicroPython через редактор Thonny и узнаем, как использовать ее для вывода текста на дисплей.

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

  • Raspberry Pi Pico под управлением MicroPython
  • 4 перемычки «мама-мама»
  • OLED-экран I2C 128 x 64 (открывается в новой вкладке)

Как подключить OLED-экран к Raspberry Pi Pico1

2 следующая проводка.

(Изображение предоставлено Tom’s Hardware)

1. Подключите GND экрана к любому GND на пико (черный провод).

2. Подключите VDD/VCC к 3V3 на Pico (красный провод).

3. Подключите SCK/SCL к I2C0 SCL (GP1, физический контакт 2, оранжевый провод).

4. Подключите SDA к I2C0 SDA (GP0, физический контакт 1, желтый провод).

5. Подключите Raspberry Pi Pico к компьютеру и откройте приложение Thonny.

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

6. Нажмите Инструменты > Управление пакетами , чтобы открыть менеджер пакетов Тонни для библиотек Python.

7. Введите «ssd1306» в строке поиска и нажмите «Поиск в PyPI».

(Изображение предоставлено Tom’s Hardware)

8. Нажмите «micropython-ssd1306» в возвращенных результатах, а затем нажмите Установить Это скопирует библиотеку в папку lib на Pico.

(Изображение предоставлено Tom’s Hardware)

9. Нажмите «Закрыть», чтобы вернуться к основному интерфейсу.

Программирование OLED-экрана на Raspberry Pi Pico

Чтобы написать одну строку текста на OLED-экран, нам нужно всего шесть строк MicroPython.

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

 из PIN-кода импорта машины, I2C 

2.   Импорт библиотеки OLED-экранов .

 из ssd1306 импорт SSD1306_I2C 

3. Создайте объект i2c, , в котором хранится используемый канал I2C, в данном случае нулевой, выводы SDA и SCL, к которым мы подключены, и, наконец, частота, с которой мы подключаемся к OLED-экрану.

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

4. Создайте объект oled , который будет использоваться для связи с OLED-экраном. Он имеет три аргумента: ширину и высоту экрана (128 x 64 пикселя) и сведения о соединении I2C.

 олэд = SSD1306_I2C(128, 64, i2c) 

5. Напишите строку tex t в левом верхнем углу экрана, позиция 0,0.

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

6. Наконец   используйте команду show для вывода вывода на экран.

 oled.show() 

Окончательный код должен выглядеть так

 из PIN-кода импорта машины, I2C
из ssd1306 импортировать SSD1306_I2C
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
олэд = SSD1306_I2C(128, 64, i2c)
oled.text("Оборудование Тома", 0, 0)
олэд.шоу()
 

(Изображение предоставлено Tom’s Hardware)

7. Сохраните и запустите свой код. Как и в случае с любым скриптом Python в Thonny, нажмите «Файл» >> «Сохранить» и сохраните файл на Raspberry Pi Pico как oled-test.py. Когда будете готовы, нажмите зеленую кнопку воспроизведения, чтобы запустить код, и ваш текст появится на OLED-экране.

Рисование простых форм на OLED-экранах с помощью Pico 

Простые формы и линии можно рисовать на дисплее с помощью всего одной команды. Для каждой из этих команд потребуется oled.show() , чтобы вас видели. Обратите внимание, что у большинства этих методов есть цветовой параметр, но с монохромным экраном вы всегда будете устанавливать цвет «1» (0 означает, что пиксель выключен).

  • oled.pixel(x,y,c): Нарисуйте пиксель в позиции x,y и используйте c для установки цвета пикселя, где 1 горит, 0 не горит. Пример:
 oled.pixel(10,10,1)
 
  • oled.hline(x,y,w,c): Нарисуйте горизонтальную линию из точки x,y, которая имеет заданную ширину (w) в пикселях и цвет (c). Пример: 
 oled.hline(2,3,4,1)
 
  • oled.vline(x,y,h,c): Нарисуйте вертикальную линию из точки x,y, которая имеет заданную высоту (h) в пикселях и цвет (c). Пример:
 oled.vline(0, 0, 64, 1)
 
  • oled.line(x1,y1,x2,y2,1): Проведите диагональную линию от точек x1, y1 до x2, y2 цветом ( c ). Пример:
 oled.line(0, 0, 128, 64, 1)
 
  • oled.rect(x,y,w,h,c): Нарисуйте прямоугольник, начинающийся в точке x.y, для заданной ширины (w) и высоты (h). Используйте ( c ), чтобы установить цвет пикселей. Например:
 oled.rect(0, 0, 64, 32, 1)
 
  • oled.fill_rect(x,y,w,h,c) : Нарисуйте прямоугольник с заливкой, начиная с точки x.y, и для заданной ширины (w) и высоты (h) используйте ( c ), чтобы установить цвет пиксели. Например:
 oled.fill_rect(0, 0, 64, 32, 1)
 

Отображение графики на OLED-экране с помощью Pico

(Изображение предоставлено Tom’s Hardware)

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

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

1. Импортировать библиотеку framebuf. Эта библиотека позволяет коду создавать растровые изображения и отображать их на дисплее.

 от импорта машины Pin, I2C
из ssd1306 импортировать SSD1306_I2C
импорт кадров
 

2. Создайте новый объект TH, в котором будет храниться массив байтов, составляющих наше изображение. Пока оставьте содержимое массива пустым, мы заполним его позже.

 i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
олэд = SSD1306_I2C(128, 64, i2c)
TH = массив байтов ()
 

3. Создайте объект FB, который будет загружать изображение в фреймбуфер. Мы передаем имя объекта bytearray, размеры изображения (64 x 64 пикселя), а затем настраиваем изображение как 1-битное монохромное изображение.

 fb = framebuf.FrameBuffer(TH,64,64, framebuf.MONO_HLSB)
 

4. Очистите экран, а затем перенесите изображение на экран. Затем используйте show для обновления экрана. Блиттинг рисует изображение на экране, в данном случае он помещает изображение 64 x 64 в мертвую точку экрана. Где 32 — горизонтальное (x) положение, а 0 — вертикальное (y) положение.

 олед.заливка(0)
oled.blit(fb,32,0)
олэд.шоу()
 

Наш объект, TH, в настоящее время не имеет изображения для отображения. Чтобы создать массив байтов изображения, нам сначала нужно подходящее изображение. Размер экрана 128 х 64 пикселя, но изображение размером 64 х 64 пикселя прекрасно помещается в центре экрана. Изображение должно быть в формате JPEG.

Чтобы преобразовать изображение в массив байтов, мы будем использовать скрипт Python img2bytearray Дона Хуи (Novaspirit).

1. Загрузите и распакуйте ZIP-архив на свой компьютер. Это создает папку img2bytearray, в которой хранится файл Python Hui.

2. Скопируйте изображение в папку img2bytearray.

3. Откройте окно командной строки или терминала и перейдите в папку img2bytearray.

4. Чтобы преобразовать изображение, мы вызываем команду img2bytearray. Нам нужно указать три дополнительных параметра. Первое — это имя файла изображения, следующие два — размеры изображения, в данном случае 64 на 64 пикселя.

 python3 img2bytearray.py ВАШЕ-ИЗОБРАЖЕНИЕ.jpg 64 64
 

5. Команда выводит поток байтов. Скопируйте текст из b ‘…’ и вставьте его в скобки нашего объекта TH.

 TH = массив байтов (b’...’)
 

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

 из PIN-кода импорта машины, I2C
из ssd1306 импортировать SSD1306_I2C
импорт кадров
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
олэд = SSD1306_I2C(128, 64, i2c)
TH = массив байтов (b’…’)
fb = framebuf.FrameBuffer(TH,64,64, framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fb,32,0)
олэд.шоу()
 

6. Сохраните и запустите свой код. Как и в случае с любым скриптом Python в Thonny, нажмите «Файл» >> «Сохранить» и сохраните файл на Raspberry Pi Pico как oled-test.py. Когда будете готовы, нажмите зеленую кнопку воспроизведения, чтобы запустить код, и ваше изображение появится на OLED-экране.

Анимация графики на OLED-экране с помощью Pico

(Изображение предоставлено Tom’s Hardware)

Создание анимации на OLED-дисплее — это перемещение или изменение объектов для создания иллюзии движения. На приведенном выше GIF вы можете увидеть молоток Tom’s Hardware и логотип, прокручивающийся по экрану. Для этого мы использовали двухбайтовые массивы для молотка (TH) и логотипа (LOGO).

Мы снова будем использовать код из предыдущих примеров.

1.   Импорт предыдущих библиотек кода.  

 из импорта машины Pin, I2C
из ssd1306 импортировать SSD1306_I2C
импорт кадров
 

2.   Настройте контакты I2C для OLED-экрана.  

 i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
олэд = SSD1306_I2C(128, 64, i2c)
 

3. Создайте цикл while True для непрерывного выполнения кода.

 пока верно:
 

4. Создать массив байтов TH . Там мы храним байты, из которых состоит аппаратный молоток Тома.

 TH = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[P\x00\x00\x00\x00\x00\x03\xad\xec\x0f\x00 \x00\x00\x00\rv\xb6\x1a\x80\x00\x00\x00\x16\xdb[m\x80\x00\x00\x00um\xb5\xb6\x80\x00\x00\x00[\xb5n\ xdb\x00\x00\x00\x01\xadW\xb5m\x80\x00\x00\x01w\xed[\xb6\x80\x00\x00\x03\xa8\x1a\xec+\x00\x00\x00\x05@\ x17P\x1d\x00\x00\x00\x0e\x00\r\xb0\x06\x80\x00\x00\x08\x00\n\xd0\x00\x00\x00\x00\x08\x00\x17`\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x1f\xa0\x00\x00\x00\x00\x00\x00\n\xd0\x00\x00\x00\ x00\x00\x00\r`\x00\x00\x00\x00\x00\x00\x17\xb0\x00\x00\x00\x00\x00\x00\n\xd0\x00\x00\x00\x00\x00 \x00\x1b`\x00\x00\x00\x00\x00\x00\r\xb0\x00\x00\x00\x00\x00\x00\x16\xa0\x00\x00\x00\x00\x00\x00\ x0bp\x00\x00\x00\x00\x00\x00\x1d\xa0\x00\x00\x00\x00\x00\x00\n\xd0\x00\x00\x00\x00\x00\x00\x17p\x00\ x00\x00\x00\x00\x00\x1a\xa0\x00\x00\x00\x00\x00\x00\r\xd0\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\ x00\x00\x00\x00\x1b`\x00\x00\x00\x00\x00\x00\r\xb0\x00\x00\x00\x00\x00\x00\x16\xd0\x00\x00\x00\x00 \x00\x00\x1bp\x00\x00\x00\x00\x00\x00\r\xa8\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00 \x1b`\x00\x00\x00\x00\x00\x00\x15\xb0\x00\x00\x00\x00\x00\x00\x1e\xd0\x00\x00\x00\x00\x00\x00\x13p\ x00\x00\x00\x00\x00\x00\x1d\xa8\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00\x15\xd0\x00\ x00\x00\x00\x00\x00\x1a\xb8\x00\x00\x00\x00\x00\x00\x17`\x00\x00\x00\x00\x00\x00\x1a\xd8\x00\x00\x00 \x00\x00\x00\x17h\x00\x00\x00\x00\x00\x00\x1a\xb0\x00\x00\x00\x00\x00\x00\x1d\xd8\x00\x00\x00\x00\x00 \x00+h\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00\x1b\xd8\x00\x00\x00\x00\x00\x00\x16 `\x00\x00\x00\x00\x00\x00\x0b\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00')
 

5. Создайте объект FB, который будет загружать изображение во фреймбуфер, а затем очищать экран. Мы передаем имя объекта bytearray, размеры изображения (64 x 64 пикселя), а затем настраиваем изображение как 1-битное монохромное изображение.

 fb = framebuf.FrameBuffer(TH,64,64, framebuf.MONO_HLSB)
   oled.fill(0) 

6. Используйте цикл for с диапазоном от -64 до 128, чтобы создать базовую анимацию скольжения для молота. Отрицательное значение скрывает молоток в левой части экрана, медленно прокручивая молоток слева направо, пока он не выйдет за пределы видимого диапазона. Изменив значение «i» внутри oled.blit() создаем иллюзию движения.

 для i в диапазоне (-64,128):
       oled.blit(fb,i,0)
       олэд.шоу()
 

7. Создайте новый массив байтов для логотипа Tom’s Hardware.  

 LOGO = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x800\xc0\xc7\xf8~0\xc3\x0c\x1f\x87\xf8 \x0c\x00\x00\x01\x800\xc1\xcf\xec\x7f0\xc7\x1c\x1f\xc7\xf8\x0c\x00\x00\x01\x800\xc1\xc1\x8ec\x99\xc6\x1c\x18\xe6\x00\x0c\x0c&`\x180\xc3\xe0\x06a\x99\xe6\x1e\x18f\x00\x1f>\x7f\xf8~0\xc3a\x8ea\x99\ xe66\x18f\x00\x0cws\x98d?\xc3a\xbca\x99\xee6\x1f\xc7\xf0\x0ccs\x98`?\xc61\xb8a\x8fs\x18|0\xcc\x1d\ x86|\x06\x18\xc1\xd8g\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00')
 

8. Создайте объект FB, который будет загружать изображение во фреймбуфер, а затем очищать экран. Мы передаем имя объекта bytearray, размеры изображения (128 x 64 пикселя), а затем настраиваем изображение как 1-битное монохромное изображение.

 fb = framebuf.FrameBuffer(LOGO,128,64, framebuf.MONO_HLSB)
 

9. Остальной код в основном такой же, как и раньше, с той лишь разницей, что диапазон цикла for меняется с -128 на 128, чтобы приспособиться к более крупному логотипу Tom’s Hardware, прокручиваемому по экрану.

 oled.fill(0)
    для я в диапазоне (-128,128):
        oled.blit(fb,i,0)
        олэд.шоу()
 

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

 из PIN-кода импорта машины, I2C
из ssd1306 импортировать SSD1306_I2C
импорт кадров
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
олэд = SSD1306_I2C(128, 64, i2c)
пока верно:
   TH = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[P\x00\x00\x00\x00\x00\x03\xad\xec\x0f\x00\x00 \x00\x00\rv\xb6\x1a\x80\x00\x00\x00\x16\xdb[m\x80\x00\x00\x00um\xb5\xb6\x80\x00\x00\x00[\xb5n\xdb\ x00\x00\x00\x01\xadW\xb5m\x80\x00\x00\x01w\xed[\xb6\x80\x00\x00\x03\xa8\x1a\xec+\x00\x00\x00\x05@\x17P\ x1d\x00\x00\x00\x0e\x00\r\xb0\x06\x80\x00\x00\x08\x00\n\xd0\x00\x00\x00\x00\x08\x00\x17`\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x1f\xa0\x00\x00\x00\x00\x00\x00\n\xd0\x00\x00\x00\x00\ x00\x00\r`\x00\x00\x00\x00\x00\x00\x17\xb0\x00\x00\x00\x00\x00\x00\n\xd0\x00\x00\x00\x00\x00\x00 \x1b`\x00\x00\x00\x00\x00\x00\r\xb0\x00\x00\x00\x00\x00\x00\x16\xa0\x00\x00\x00\x00\x00\x00\x0bp\ x00\x00\x00\x00\x00\x00\x1d\xa0\x00\x00\x00\x00\x00\x00\n\xd0\x00\x00\x00\x00\x00\x00\x17p\x00\x00\ х00\х00\х00\ x00\x1a\xa0\x00\x00\x00\x00\x00\x00\r\xd0\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00\ x1b`\x00\x00\x00\x00\x00\x00\r\xb0\x00\x00\x00\x00\x00\x00\x16\xd0\x00\x00\x00\x00\x00\x00\x1bp\x00 \x00\x00\x00\x00\x00\r\xa8\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00\x1b`\x00\x00\ x00\x00\x00\x00\x15\xb0\x00\x00\x00\x00\x00\x00\x1e\xd0\x00\x00\x00\x00\x00\x00\x13p\x00\x00\x00\x00\ x00\x00\x1d\xa8\x00\x00\x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00\x15\xd0\x00\x00\x00\x00\x00\ x00\x1a\xb8\x00\x00\x00\x00\x00\x00\x17`\x00\x00\x00\x00\x00\x00\x1a\xd8\x00\x00\x00\x00\x00\x00\x17h \x00\x00\x00\x00\x00\x00\x1a\xb0\x00\x00\x00\x00\x00\x00\x1d\xd8\x00\x00\x00\x00\x00\x00+h\x00\x00 \x00\x00\x00\x00\x16\xb0\x00\x00\x00\x00\x00\x00\x1b\xd8\x00\x00\x00\x00\x00\x00\x16`\x00\x00\x00\ х00\х00\х00\х0б\ха0\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00')
   fb = framebuf. FrameBuffer(TH,64,64, framebuf.MONO_HLSB)
   oled.fill(0)
   для i в диапазоне (-64 128):
       oled.blit(fb,i,0)
       олэд.шоу()
   ЛОГОТИП = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ x00\x00\x00\x00\x00\x00\x00\x00\x01\x800\xc0\xc7\xf8~0\xc3\x0c\x1f\x87\xf8\x0c\x00\x00\x01\x800\xc1\ xcf\xec\x7f0\xc7\x1c\x1f\xc7\xf8\x0c\x00\x00\x01\x800\xc1\xc1\x8ec\x99\xc6\x1c\x18\xe6\x00\x0c\x0c&`\x180\xc3\xe0\x06a\x99\xe6\x1e\x18f\x00\x1f>\x7f\xf8~0\xc3a\x8ea\x99\ xe66\x18f\x00\x0cws\x98d?\xc3a\xbca\x99\xee6\x1f\xc7\xf0\x0ccs\x98`?\xc61\xb8a\x8fs\x18|0\xcc\x1d\ x86|\x06\x18\xc1\xd8g\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\ х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00\х00')
   fb = framebuf. FrameBuffer(LOGO,128,64, framebuf.MONO_HLSB)
   oled.fill(0)
   для я в диапазоне (-128,128):
       oled.blit(fb,i,0)
       олэд.шоу()
 

Сохраните и запустите свой код. Как и в случае с любым скриптом Python в Thonny, нажмите «Файл» >> «Сохранить» и сохраните файл на Raspberry Pi Pico как oled-test.py. Когда будете готовы, нажмите зеленую кнопку воспроизведения, чтобы запустить код, и ваша анимация будет прокручиваться на OLED-экране.

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

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

Лес Паундер — помощник редактора Tom’s Hardware. Он творческий технолог и в течение семи лет создавал проекты, чтобы обучать и вдохновлять умы как молодых, так и старых. Он работал с Raspberry Pi Foundation над написанием и реализацией их программы подготовки учителей «Picademy».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *