Сообщество - TECHNO BROTHER

TECHNO BROTHER

2 083 поста 13 661 подписчик

Популярные теги в сообществе:

35

Проект: погодная станция (метеостанция) своими руками. Часть первая

Проект: погодная станция (метеостанция) своими руками.

Проект: погодная станция (метеостанция) своими руками.

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

Основной экран погодной станции (метеостанции)

Основной экран погодной станции (метеостанции)

Первая функция — это фон, он загружается в зависимости от погоды с SD карты, на SD карте расположены папки со стилями (например, классический или аниме и т.д.) в них находятся каталоги с разными погодными ситуациями, в каждый из таких каталогов можно положить любое количество картинок формата JPG с разрешением 480 на 360 пикселей, в зависимости от стиля и погоды будет загружена соответствующая картинка, например: День, ясно – будет отображаться фон, как на видео, дождь, утро – загрузится соответствующий фон с SD карты.
Вторая функция отвечает за отображение информации на главном экране, сам экран у нас разделён на зону времени и комнаты, в каждой комнате есть свой набор датчиков. Например, в комнате одни у нас отображаются показания датчиков: углекислого газа, температуры, влажности, давления и ТВОС.
Обратите внимание, у некоторых данных с датчиков есть фон, это важные для нашего здоровья и самочувствия показания, например: уровень углекислого газа, влажность, ТВОС. Их цвета изменяются в зависимости от значения. Если показания датчиков комфортны для проживания, то фон зелёный, если жёлтый – внимание, ну и красный соответственно – опасно для здоровья.

Графики погодной станции (метеостанции)

Графики погодной станции (метеостанции)

Третья функция, это графики, (я его ускорил для видео) при нажатии на комнату появится график со всеми датчиками, которые есть в данной комнате.
Например, комната один, комната два, улица.
Обратите внимание на график, на нём имеются зелёные, жёлтые и красные области, как и с главным экраном, участок, отмеченный зелёным цветом, означает, что показания датчика соответствуют норме, желтый – внимание, красный — опасно для здоровья.
График, в отличии от предыдущих проектов, стал полностью адаптивный, теперь на экране нет не задействованных областей графика, так же графиком можно управлять, если прикоснуться пальцем к верхней области графика и потянуть палец вниз, то график начнёт смещаться вниз, соответственно, если потянуть палец вверх, график вернётся на своё первоначальное положение, аналогично и с нижней областью графика, касаемся пальцем экрана и смещаем его вверх, что бы сдвинуть показания графика вверх, вниз – что бы вернуть график в первоначальное состояние. Такие возможности позволят нам подробней рассмотреть показания графика, например в какой момент значения датчика углекислого газа поползли вверх.

Сама же схема выглядит пока так:

Схема погодной станции (метеостанции)

Схема погодной станции (метеостанции)

Подробное объяснение, как всё устроено и работает, Вы найдёте в этом видео.

Показать полностью 3 1
278
TECHNO BROTHER

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

В своей жизни я обожаю как минимум три вещи: это 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
7

Премиальная RTX 4090 SUPER от Teclab

💎 Teclab показали кастомную RTX 4090 SUPER. Энтузиасты взяли печатную плату от GALAX RTX 3090 Ti HOF OC LAB Edition, видеочип AD102-300-A1 и видеопамять GDDR6X (24 Гбит/с).

💥 Печатная плата от GALAX GeForce RTX 3090 Ti HOF OC LAB Edition оснащена мощным питальником в 28-фазы питания и имеет два 16-контактных разъема. Для охлаждения получившейся карточки использовался водоблок.

🎫 В итоге производительность карточки Unigine Superposition в 8K разрешении оказалась на 13 % выше, чем у обычной RTX 4090. Разгон позволяет выжать из кастомной карты еще больше производительности.

💭 NVIDIA могла выпустить подобную RTX 4090 Super, однако сейчас вовсю готовится представить карты нового поколения RTX 5000.

#RTX4090 #Nvidia #RTX5090

Премиальная RTX 4090 SUPER от Teclab
Показать полностью 1
224

Нужно больше ламповых табло!!! Запускаем дисплей от пейджера NJE-105

Автор текста: akasaka

Пару месяцев назад я в очередной раз прогуливался по комиссионкам, и моё внимание привлёк стоящий на полке агрегат, чем-то похожий на музыкальный центр Bose.

Однако, взяв его с полки, я обнаружил, что это табло-бегущая строка!

Поначалу я подумал, что оно светодиодное, а зачем оно такое мне? Тем более, что у меня уже есть шикарные плазменные часы дома. Ну и поставил было его на полку обратно. Раздавшийся в этот момент громкий звон дал понять — внутри есть струны, а значит, это самый что ни на есть настоящий ВЛИ!

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

❯ Первое включение

Приносим домой, втыкаем в розетку — убеждаемся, что делает оно всё то же, что и на тестовом стенде в комиссионке. Ну, хотя бы по пути не разбили, значит %)

Включается, говорит, что версия 1.12, а затем в цикле жалуется, что никаких сообщений нет. Значит, надо их как-то туда запихать.

❯ Что это за зверь

Шильдик на задней панели гласит, что девайс произведён Nagano Japan Radio Co. Ltd., и имеет модель NJE-105. Отдельная наклейка поверх утверждает, что версия прошивки — та самая, 1.12.

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

Если заглянуть внутрь отсека — там мы находим как раз интерфейсный разъём. С одного конца аж целый DB-25:

А вот с противоположного — нечто, с опознанием чего я затрудняюсь.

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

Продавал такой набор оператор NTT Docomo. То есть, если вам нужно было, например, постоянно в офисе видеть свежие новости — вы покупали пейджер с таким табло и подключали на него подписку на нужные вам каналы. Как только на пейджер придёт сообщение — оно сразу начнёт отображаться на табло.

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

В какой-то момент производитель начал продавать табло сам, просто как бегущую строку для компьютера — но софт, судя по всему, нигде не сохранился.

Но, к счастью, обладатель пейджера записал хотя бы часть протокола, вот в такой суровой обстановке :-)

❯ Нужно больше ламповой теплоты!

Снимем переднюю панель и посмотрим, что там внутри.

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

Сам дисплей производства фирмы Futaba — они, к сожалению, свернули производство ВЛИ в конце 2021 года.

Второй бит у DIP-переключателя непонятно зачем, а вот первый включает какой-то режим тестирования — скорее всего, для проверки на заводе:

Трёхцветность экрана достигается треугольными субпикселями двух цветов — оранжевого и зелёного:

Оттенки этого дисплея напоминают мне те, что устанавливали в поездах и на станциях, чем он мне и приглянулся.

Оп, моя остановочка!

❯ Протокол

Дальнейший поиск привёл, разве что, к упоминанию о том, что какая-то программа когда-то существовала, но автор удалил её с сайта. К счастью, в интернет-архиве сохранилась другая страница, автор которой смог записать многие управляющие последовательности с оригинального пейджера. Ради сохранения этой информации, ниже привожу вольный перевод описания протокола:

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

Судя по всему, распиновка идентична обычному RS-232 25-pin, разве что логические уровни здесь TTL. Изначальный автор применил два инвертера 7414 в качестве буфера, но я бы не рисковал и поставил MAX232. Хотя зачем оно вообще в наше время, когда переходники с TTL UART на USB продаются за сущие копейки :-) — прим. авт.

Формат пакета данных

Передача идёт на скорости 9600 бод, 8N1.

Каждый пакет начинается с \r\n . Дальше идёт текущая дата и время в формате MMDDHHmm (ASCII), например, для 9 марта 16:39 это будет 03091639(hex: 30 33 30 39 31 36 33 39). Зачем это используется, кроме синхронизации внутренних часов табло — непонятно.

После этого — до 128 байт текста в кодировке Shift-JIS. В конце — ещё раз \r\n.

Атрибуты текста

Атрибуты текста задаются в виде двух букв, указывающих цвет и эффект. Если атрибуты вставляются посреди текста, то отбиваются тильдами, например: ~AW~.

Значения атрибутов:

Команды

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

❯ Вывод сообщений

Изначально я купил этот дисплей в расчёте на то, чтобы заменить им кассовый дисплей покупателя, который использую сейчас в диджейских стримах: (сверху на музыкальном центре на фоне, основной движ примерно с 9:48)

Всё же кассовый дисплей для такого слишком маловат.

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

Так как приковывать табло к столу с компом не хотелось, то в ход пошла очередная ESP32. К сожалению, выход 5 вольт на DB25 не имеет запаса по току, поэтому пришлось вывести наружу 24 вольта с блока питания и преобразовать их самому.

Также оказалось, что на ESP32 не работает функция iconv() — но, к счастью, для Shift-JIS есть отдельная библиотека. На базе этого получилось написать простейшую функцию для отправки пакетов на табло.

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

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

Поэтому, пишем простенькое подобие "аллокатора" сообщений :-) Таким образом, каждый "виджет" сможет зарезервировать себе "слайд":

mid.number = mgr->reserve(mid.kind);

А когда тот уже не нужен — освободить:

mgr->remove(mid);

В остальном про код мало что можно рассказать — в отличие от тех же плазменных часов, где пришлось свою графическую библиотеку писать, здесь же просто работа с текстом.

Из того, что показывать, было решено вывести:

  • Погоду

  • "Слово дня" на английском

  • Дату и время

  • Текущий играющий трек в Foobar2000

  • Отправителя и тему входящей почты (IMAP)

Также добавлен проброс с USB-UART у ESP32 напрямую на табло, чтобы впоследствии всё равно хоть как-то интегрировать его с Traktor-OBS-Relay.

Хотелось добавить ещё и свежие твиты для одного из списков в твиттере, чтобы видеть новости от локально живущих товарищей. Однако кое-кто сделал бесплатное АПИ write-only, а для чтения нужно платить 100 баксов в месяц, поэтому идея была отложена в чёрный ящик :-)

До кучи на скорую руку была слеплена и вебморда. Для неё я использовал библиотеку GyverPortal:

(так забавно в ридми у неё смотрится реклама новой версии, отмечающая, что новая работает через интернет и приложение для телефона — как будто это плюсы какие-то)

Дата и время

Ну, тут всё элементарно — резервируем "слайд", и форматируем на него текущее время. Всего кода на 60 строк, и проще его привести здесь, чем описывать.

Единственный подводный камень — в заголовке сообщения атрибут "Статичное отображение" использовать нельзя, табло почему-то просто вешается намертво, а после сброса жалуется на повреждение оперативной памяти. Поэтому пришлось этот атрибут вставить напрямую в текст сообщения.

Погода

Тут тоже всё было довольно элементарно — нужно было просто угнать код для обращения к OpenWeatherMap из часов, которые я делал раньше :-)

Так же как и дату-время, просто форматируем и выдаём на зарезервированный под это дело слайд.

Ключ доступа к АПИ тоже взял из часов — в бесплатном тарифе там столько доступов даётся, что мне одного ключа хватает на все устройства, включая два смартфона и смарт-часы.

Foobar2000

Здесь уже пришлось повозиться — единственным плюс-минус удобным способом вытягивать метаданные из fb2k оказался плагин foo_controlserver.

Был написан простенький клиент, в цикле долбящийся на заданный айпишник и порт. Если подключиться получилось, то он бесконечно слушает входящие строки, и вытаскивает из них события воспроизведения/паузы и название трека.

Формат там напоминает CSV, только разделителем является вертикальная черта. Соответственно, если она есть в названии трека или исполнителя, парсинг развалится и на экране будет чёрт знает что. Не идеально, но и не критично.

Слово дня

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

Недолгие поиски привели к Wordnik API. Дальше всё было тоже элементарно — получаем JSON, парсим его, выводим на экран.

Почта по IMAP

Вносить лишние сущности я не люблю, дома не держу ни сервера, ни даже Разберипай, поэтому и получение почты было решено возложить прямо на микроконтроллер — безо всяких MQTT и прочих промежуточных звеньев.

Казалось бы — протокол древний, строго описанный в RFC, плейнтекстовый: должна быть туча реализаций разного качества, от наколенных поделок до полноценных модулей-комбайнов.

Вот тут-то меня и поджидали анальные пирогенные боли и прочие мозговые страдания!

Первом сюрпризом то, что единственная "микроконтроллерная" библиотека для электронной почты вся кривая, косая и тащит за собой драйвера внешнего флеша, карт памяти, десятка разных видов контроллеров сети, и ещё тучу всякого хлама. Да что там, просто после добавления в проект она даже не собиралась!

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

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

Вторым сюрпризом оказался всё тот же нерабочий iconv. Я-то думал, что там просто не включили поддержку SJIS, но нет — он мёртвый совсем, даже при попытках конвертации из ASCII в ASCII выдаёт дулю. Поэтому заголовки сообщений поддерживаются только в виде UTF-8, а остальные замещаются просто на текст "Новое сообщение".

❯ Итоговый результат

В остальном исходники можно посмотреть на гитхабе, а пока полюбуемся на готовый результат:

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

А дойдут ли до этого у меня руки вы сможете узнать — среди тонн фоток еды, Мику, и прочего хлама из комиссионок — в моём телеграме :-)

Написано специально для Timeweb Cloud и читателей Пикабу. Больше интересных статей и новостей в нашем блоге на Хабре и телеграм-канале.

Хочешь стать автором (или уже состоявшийся автор) и есть, чем интересным поделиться в рамках наших блогов — пиши сюда.

Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать авторские проекты.

Показать полностью 19 5
183

Ретропонедельник №155. Калькулятор Б3-35

Сегодня в нашем виртуальном музее снова калькулятор. Это Б3-35. Второй знак - это тройка, а не буква З как можно ошибочно считать.

Произведен в 1985 году НПО Электроника

Мог работать как от блока питания, так и от аккумуляторов. (Которые конечно же от возраста пустили сок, запустив процесс коррозии. Не храните источники питания в технике, если не пользуетесь!)

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

Удивительно использование такой компоновки резисторов - весьма трудоемко в сборке. Впрочем советская техника этим страдала частенько - большая трудоемкость в сборке.

Вакуумно-люминисцентный индикатор.

Сердце - К145ИП16П, количество обвязки минимально.

Калькулятор не программируемый, умел основные действия, характерного для инженерного калькулятора - логарифмы, тригонометрия. Забавно, что в СССР это "инженерный" калькулятор, а на западе - "научный".

Показать полностью 8
9

Intel подтвердила существование флагманской видеокарты ARC Battlemage BMG-G31 с 32 ядрами Xe2

🔻 Упоминание GPU появилось на официальном сайте производителя в разделе с инструментами для проектирования продуктов с чипами линейки BMG. Графический процессор обозначен как BGA3283-BMG-G31. Исходя из названия, можно предположить что он в корпусе BGA c 3283 контактами.

💭 Портал Videocardz получили инфформацию от инсайдера Bionic_Squash, что именно этот чип станет флагманом поколения ARC Battlemage. Он будет иметь на борту 32 ядра Xe2.

💥 В новое семейство графических чипов Intel войдут модели BMG-21 (20 ядер Xe2) и BMG-31 (32 ядра Xe2). В качестве вероятных сроков выхода этих GPU называют ноябрь 2024 года или первую половину 2025 года.

#intel #Battlemage

Intel подтвердила существование флагманской видеокарты ARC Battlemage BMG-G31 с 32 ядрами Xe2
69
TECHNO BROTHER

Ищу девкит (плата для разработки, одноплатный компьютер)!

Друзья! Знаю, что среди читателей есть люди, которые работали над embedded-устройствами. Может у вас есть девкит Samsung S3C6410, когда либо списанный, на продажу?

Ищу девкит (плата для разработки, одноплатный компьютер)!

В целом, интересно было бы любой девкит покопать. Друзья, именно девкит, а не просто Raspberry Pi или Orange Pi. Впрочем, одноплатник на чем-то необычном типа Samsung Hummingbird или Tegra был бы интересен!

Отличная работа, все прочитано!