Опрос


Что для Вас Умный Дом?


Результаты

OLED дисплей SSD1306 в интерьере

08/05/2017 15:56:30

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

В своем доме для подключения датчиков температуры и влажности я использую коробочки от Supertronic. Они сделаны весьма аккуратно и не портят интерьер своим видом. В то же время контроллер MegaD-2561 поддерживает работу с недорогим OLED-дисплеем SSD1306. Поэтому я решил засунуть этот дисплей в корпус для датчиков и подключить к MegaD-2561.


Нож, напильник, 15 минут свободного времени и... готово

Дисплей закрепил в корпусе с помощью двухстороннего скотча для приклеивания линолеума. Подключение дисплея к контроллеру никакого труда не составляет. Для этого используется два порта для линий SCL и SDA (всего для подключения дисплея необходимо 4 провода: питание, земля и две цифровых линии данных). Я подключил дисплей непосредственно к модулю контроллера, к клемме XT2 (куда выведено 6 "цифровых" портов), с которой удобно взять питание 3,3В (см. распиновку разъема XT2).

Настройка порта для работы с линией SDA дисплея.


Примечательно, что если к контроллеру подключены другие I2C-устройства, например, датчик HTU21D, то для линии SCL можно использовать один и тот же порт. Таким образом можно сэкономить порты контроллера. Значение яркости/контрастности по умолчанию 127 (максимальное 254), но я установил 80. Дисплей обладает очень высокой контрастностью, поэтому даже при значении 80 цифры светятся довольно ярко даже в солнечный день. Интересно, что яркостью можно управлять с помощью стандартных команд. Например, 33:80. Это даже позволяет серверу менять яркость дисплея в зависимости от времени суток или освещенности комнаты. Более того, дисплей можно включать/выключать с помощью команд 33:1 и 33:0, прописав соответствующие действия (Act) на сервере или прямо в контроллере для порта, к которому подключен, к примеру, датчик движения.


Как приколхозить дисплей в корпус для датчиков своими руками ;)

Кажется, что для выбранного дисплея корпус великоват. Но необходимо отметить, что в этом же корпусе можно разместить, например датчик температуры или углекислого газа (да, MH-Z14 в корпус вполне помещается). А можно просверлить пару отверстий и разместить в нем кнопки. Ведь дисплей у меня подключен с помощью "витой пары", которую я предусмотрительно заложил в стену. В кабеле UTP 8 проводников. Четыре из них заняты для подключения SSD1306. Остается еще 4. А так как "землю" допустимо использовать общую, в корпусе совершенно спокойно можно разместить 4 кнопки, которыми, например, переключать отображаемые значения или давать иные команды серверу.

Я решил, что на дисплее будет крупно отображаться температура за бортом. Если бы датчик температуры DS18B20 у меня был подключен к тому же контроллеру MegaD-2561, что и дисплей, то задача решалась бы очень просто. Необходимо было просто в поле Disp указать номер порта, к которому подключена линия SDA. В этом случае не нужен никакой сервер. Но я до сих пор получаю информацию о температуре на улице от недорогой китайской метеостанции, которая передает данные на сервер через внутренний блок, подключенный посредством USB. Значит, отображением данных на дисплее должен заниматься сервер. Какую же команду должен отправить сервер контроллеру для отображения температуры?

Вот такую (прошивка 3.15b2 и выше): http://192.168.0.14/sec/?pt=33&text=25.8:

Здесь (особенно для тех, кто уже использует контроллер) все интуитивно понятно.
pt=33 - порт, к которому подключена SDA-линия дисплея
text=25.8: - значение, которое нужно вывести.

В текущий момент (3.15b2) поддерживается отображение цифр, точки, плюса, минуса и значка градуса. Двоеточие после температуры ":" как раз и дает понять контроллеру, что необходимо отобразить значок градуса. Это упрощает ситуацию, ведь в отличие от символа градуса двоеточие присутствует на клавиатуре, а для передачи этого символа в GET-запросе нет необходимости в дополнительном кодировании.

Когда для отображения температуры используется сервер, есть только одна маленькая хитрость - форматирование отображаемого значения. Дело в том, что количество символов в значении температуры может быть разным: 0.0 (3 символа), 25.8 (4 символа), -22.7 (5 символов). Чтобы любое значение в диапазоне от -99.9 до +99.9 отображалось по центру дисплея, я написал простенький скрипт на PHP.

<?php
$my_temp = number_format("25.82", 1); // Получаем значение из базы и форматируем его
if ( strlen($my_temp) < 4 && $my_temp > 0 )
$my_temp = "s+$my_temp";
elseif (strlen($my_temp) < 4 )
$my_temp = "ss$my_temp";
elseif (strlen($my_temp) < 5 )
$my_temp = "s$my_temp";

file_get_contents("http://192.168.0.110/sec/?pt=33&text=$my_temp:");
?>

Здесь мы видим, что скрипт в зависимости от количества цифр добавляет символ "s", который означает "space" (пробел). Шрифт, который заложен в контроллер моноширинный, поэтому температура отображается всегда ровно, цифры не прыгают и не смещаются.

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

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



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



Сортировка комментариев: Последние сверху | Первые сверху