Оглавление:

КАМЕННЫЙ ЖК-дисплей с умным домом: 5 шагов
КАМЕННЫЙ ЖК-дисплей с умным домом: 5 шагов

Видео: КАМЕННЫЙ ЖК-дисплей с умным домом: 5 шагов

Видео: КАМЕННЫЙ ЖК-дисплей с умным домом: 5 шагов
Видео: Панель управления умным домом Home Assistant из Orange Pi Zero 2 и LCD дисплея с тачскрином. 2024, Июль
Anonim
КАМЕННЫЙ ЖК-дисплей с умным домом
КАМЕННЫЙ ЖК-дисплей с умным домом

Сегодня у меня есть дисплей привода последовательного порта STONE, который может обмениваться данными через последовательный порт MCU, и логический дизайн пользовательского интерфейса этого дисплея может быть разработан напрямую с помощью программного обеспечения VGUS, представленного на официальном сайте STONE, что очень удобно для нас. Поэтому я планирую использовать его для создания простого контроллера бытовой техники, который включает в себя управление различным освещением (гостиная, кухня, детская комната, ванная). В то же время могут быть собраны данные о температуре, влажности и качестве воздуха в помещении и на улице. Это всего лишь простая демонстрация, и вы можете провести вторичную разработку с помощью предоставленного мной кода. Некоторое базовое руководство по экрану STONE можно найти на веб-сайте:

На сайте представлена разнообразная информация о модели, пользовательской и конструкторской документации, а также видеоуроки. Я не буду здесь вдаваться в подробности.

Шаг 1. Дизайн пользовательского интерфейса

Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса
Дизайн пользовательского интерфейса

Фотошоп

Я разработал следующие две страницы пользовательского интерфейса с помощью Photoshop:

Всего в этом проекте две вышеуказанные страницы. «Свет» и «Датчик» в правом верхнем углу - это кнопки переключения этих двух страниц.

На странице «Свет» вы можете управлять всеми видами света в вашем доме. На странице «Датчик» вы можете проверить значения, обнаруженные различными датчиками.

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

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

Эффект переключения страницы TAB

В программном обеспечении STONE TOOL не было обнаружено компонента переключения страниц TAB, поэтому я подумал о другом способе достижения эффекта переключения страниц TAB.

Благодаря наблюдению, которое я предоставляю два изображения пользовательского интерфейса, можно обнаружить, что два изображения выше представляют собой текст «Свет» и «Датчик», разница в том, что их размер в пикселях различается, поэтому нам нужно только установить двухпиксельную позицию на тот же текст, а затем через верхний левый угол времени и даты для справки, вы можете добиться TAB для переключения эффекта.

Логика кнопки

Возьмем, к примеру, кнопку «Гостиная». Когда пользователь нажимает эту кнопку, экран последовательного порта STONE отправляет соответствующие инструкции протокола через последовательный порт. После получения этой инструкции MCU пользователя проанализирует протокол, чтобы управлять состоянием переключения источников света, подключенных к MCU.

Получение датчика

Возьмем, к примеру, «качество воздуха»: если вы хотите получить данные о качестве воздуха в помещении, у нас должен быть MCU для сбора данных о качестве воздуха, датчик качества воздуха, когда данные MCU собираются с помощью алгоритма, сравнивающего плюсы и минусы качества воздуха, а затем MCU отправляется через последовательный порт для отображения области хранения «Хорошо» или «Плохо», для изменения содержимого отображения «Текстовая переменная0», и затем пользователь может интуитивно увидеть достоинства контроля качества. Они объяснены позже в коде MCU.

Шаг 2: Связь с MCU

Связь MCU
Связь MCU
Связь MCU
Связь MCU
Связь MCU
Связь MCU
Связь MCU
Связь MCU

STM32 - это MCU, с которым все знакомы, и это распространенная модель MCU в мире. Поэтому конкретная модель микроконтроллера STM32, которую я использовал в этом проекте, - это STM32F103RCT6.

Существует множество серий STM32, которые могут удовлетворить различные требования рынка. Ядро можно разделить на cortex-m0, M3, M4 и M7, и каждое ядро можно разделить на основное, высокопроизводительное и низкое энергопотребление.

Чисто с точки зрения обучения вы можете выбрать F1 и F4, F1 представляет собой базовый тип, основанный на ядре cortex-m3, основная частота составляет 72 МГц, F4 представляет собой высокую производительность, основанную на ядре cortex-m4, основная частота 180M.

Что касается F1, F4 (серия 429 и выше), помимо различных ядер и улучшения основной частоты, очевидной особенностью обновления является ЖК-контроллер и интерфейс камеры, поддержка SDRAM, это различие будет иметь приоритет при выборе проекта. Однако с точки зрения университетского обучения и начального обучения пользователей серия F1 по-прежнему остается лучшим выбором. В настоящее время STM32 серии F1 имеет наибольшее количество материалов и продуктов на рынке.

Что касается установки среды разработки STM32 SCM и способа загрузки программы, я не буду делать введение.

Инициализация GPIO

В этом проекте мы использовали всего 4 GPIO, один из которых является выходным контактом PWM. Давайте сначала посмотрим на инициализацию трех обычных портов GPIO:

Эта функция инициализирует PB0 / PB1 / PB2 STM32F103C8 как выходной контакт и вызывает его из основной функции. После инициализации нам нужна логика для управления состоянием вывода, высоким и низким уровнем этого GPIO, поэтому я написал функцию, как показано ниже:

Это функция, которую вы можете интуитивно понять по имени переменной.

Инициализация последовательного порта

Часть инициализации последовательного порта находится в uart.c:

Затем вызовите uart_init в основной функции, чтобы инициализировать скорость передачи последовательного порта 115200 бод. Выводы используют PA9 / PA10.

Инициализация ШИМ

Конкретные шаги:

1. Установите часы RCC;

2. Установите часы GPIO: режим GPIO должен быть установлен на GPIO_Model_AF_PP или на функцию GPIO_PinRemapConfig (), если требуется переназначение контактов.

3. Установите соответствующие регистры таймера TIMx;

4. Установите регистр, связанный с ШИМ таймера TIMx;

A. Установите режим PWM

Б. Установите рабочий цикл (расчет по формуле)

C. Установите полярность сравнения выходов (ранее введенная)

D. Что наиболее важно, разрешите выходное состояние TIMx и разрешите выход PWM TIMx; После завершения соответствующих настроек таймер TIMx включается функцией TIMx_Cmd () для получения выходного сигнала ШИМ. Вызовите этот TIM3_PWM_Init из основной функции.

Шаг 3: Написание логического кода

Написание логического кода
Написание логического кода
Написание логического кода
Написание логического кода
Написание логического кода
Написание логического кода

Отображение определения адреса компонента

Компоненты дисплея имеют отдельные адреса, и здесь я написал их все как макроопределения: Последовательный прием данных

Глядя на информацию о дисплее STONE, вы можете видеть, что при нажатии кнопки последовательный порт на дисплее отправляет протоколы в соответствующем формате, которые пользовательский MCU может получать и анализировать. Когда кнопка нажата, последовательный порт на дисплее отправляет девять байтов данных, включая данные пользователя. Последовательный прием данных записывается в обработчике: полученные данные хранятся в массиве «USART_RX_BUF». В этом проекте длина приема фиксирована. Когда длина приема превышает 9 байтов, оценивается принимающая сторона.

Контроль состояния переключения лампы

В основной функции я написал некоторый логический код для управления состоянием переключателя лампы: как мы видим, код сначала определяет, получены ли данные последовательного порта, а когда данные последовательного порта получены, определяет, какую кнопку пользователь нажимает на экране дисплея. Различные кнопки на дисплее имеют разные адреса, что можно увидеть в программном обеспечении STONE TOOL: когда пользователь нажимает кнопку «Гостиная», четвертый и пятый биты данных, отправляемых через последовательный порт экрана дисплея, являются адрес кнопки. Поскольку четвертый бит всех установленных здесь кнопок равен 0x00, мы можем судить, какую кнопку нажимает пользователь, напрямую оценивая данные пятого бита. После получения кнопки, нажатой пользователем, нам нужно оценить пользовательские данные, полученные при нажатии кнопки, что является восьмой цифрой данных, отправленных с экрана дисплея. Поэтому мы делаем следующий контроль: записываем параметр адреса кнопки и пользовательские данные в функцию «Light_Contral» для управления включенным-выключенным состоянием света. Сущность функции Light_Contral выглядит следующим образом: Как вы можете видеть, если адрес кнопки - «Гостиная», а пользовательские данные - «LightOn», то вывод PB0 микроконтроллера установлен на выход высокого уровня, и индикатор горит.. Остальные три кнопки похожи, но я не буду здесь вдаваться в подробности.

Выход ШИМ

В разработанном мной пользовательском интерфейсе есть скользящий регулятор, который используется для управления яркостью света в «Детской комнате». Микроконтроллер реализован с помощью ШИМ, а выходной вывод ШИМ - PB5. Код выглядит следующим образом: скользящий регулятор установлен на минимальное значение 0x00 и максимальное значение 0x64. При перемещении последовательный порт экрана дисплея также отправляет соответствующие адреса и данные, а затем устанавливает коэффициент заполнения выходного сигнала ШИМ, вызывая следующую функцию:

Шаг 4: Получение датчика

Получение датчика
Получение датчика
Получение датчика
Получение датчика
Получение датчика
Получение датчика

На странице «Датчик» экрана дисплея есть данные четырех датчиков.

У данных также есть адрес хранения на дисплее, и мы можем изменить реальный контент, просто записав данные по этим адресам через последовательный порт MCU.

Здесь я сделал простую реализацию кода:

Данные на дисплее обновляются каждые 5 секунд, и я написал только простую демонстрацию соответствующей функции сбора данных с датчиков, потому что у меня нет этих датчиков в руке.

В реальной разработке проекта эти датчики могут быть данными, собранными ADC, или данными, собранными интерфейсами связи IIC, UART и SPI. Все, что вам нужно сделать, это записать эти данные в соответствующую функцию в качестве возвращаемого значения.

Шаг 5: Фактический эффект операции

Рекомендуемые: