Ардуино технологии - Arduino-tex.ru http://arduino-tex.ru/ Arduino проекты, уроки на Arduino-tex.ru ru Лечим ошибку «Ink Near End» на принтерах Mimaki UJF-3042FX. http://arduino-tex.ru/news/182/lechim-oshibku-ink-near-end-na-printerah-mimaki-ujf-3042fx-ujf-6042fx-i.html Константин Portal-PK 2024-02-16T10:46:58+03:00 В предыдущей статье я уже рассказывал о такой особенности принтеров Mimaki UJF-3042FX и UJF-6042FX: когда уровень чернилдостигает минимального значения, на экране устройства появляется надпись «Ink Near End». После этого чип блокируется и сбросить его становится невозможно. Однако нам удалось разрешить данную проблему. Теперь наш программатор способен восстановить чип, и его можно использовать дальше.

Ошибка «Ink Near End» может возникать не только на моделях UJF-3042FX.

Ошибка «Ink Near End» может возникать не только на моделях UJF-3042FX.

Несмотря на то, что данная проблема с блокировкой чипа изначально наблюдалась только на принтерах Mimaki UJF-3042FX, оказалось, что и более старые модели могут испортить чипы. Это происходит в случае, если пользователь обновляет программное обеспечение устройства, и оно начинает работать так же, как и устройства серии FX. Ко мне обратились два клиента: у первого был принтер UJF-6042, у второго - UJF-3042.

Ко мне обратились два клиента: у первого был принтер UJF-6042, у второго - UJF-3042.

Я был крайне удивлен тем фактом, что их устройства испортили чипы аналогично принтеру UJF-3042FX. Как выяснилось, эта ситуация возникла, когда пользователи попытались расширить возможности своих устройств, обновив программное обеспечение. Следовательно, данная проблема приобрела постоянный характер, и настало время ее решать.

 Я был крайне удивлен тем фактом, что их устройства испортили чипы аналогично принтеру UJF-3042FX.

Новая функция программатора: «Ремонт чипа».

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

Новая функция программатора: «Ремонт чипа».

Этот процесс занимает немного больше времени, чем обычная операция программатора, и в строке статуса появится надпись «Ремонт…». После того, как вы увидите надпись «Чип восстановлен!», чип можно установить в устройство и использовать, предварительно сбросив объем и/или год, если это необходимо.

Купить программатор VK

Купить программатор Avito

Теперь все наши программаторы смогут ремонтировать чипы!

Что делать, если вы приобрели программатор у нас ранее?

Если вы приобрели программатор у нас ранее, то он не имеет этой функции. Покупать новое устройство ради одной дополнительной функции нецелесообразно. Для решения этой проблемы было разработано недорогое устройство, которое умеет только ремонтировать чипы.

Все возможности программатора для сброса чипов MimakiДля его использования подключите чип, нажмите левую кнопку. Если чип успешно считан, нажмите правую кнопку и дождитесь окончания процесса ремонта. После этого чип готов к работе. Если необходимо сбросить год или объем, подключите чип к программатору.

Мы старались сделать устройство максимально простым и понятным, а также доступным по цене.

Мы старались сделать устройство максимально простым и понятным, а также доступным по цене.

Поддерживаемые принтеры Mimaki и микросхемы DS2430a.

Программатор в настоящее время поддерживает следующие модели принтеров Mimaki: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160. Обратите внимание, что поддерживаются чипы с микросхемой серии DS2430a, в то время как чипы с микросхемой DS2431 не поддерживаются.

Заключение.

Также в настоящее время проводится активное тестирование работы с принтерами UJF-3042 Mk2 и UJF-3042 Mk2 EX с использованием чернил LUS120. В ближайшем будущем мы примем решение о внедрении данного функционала в текущую версию программатора Mimaki.

Разработкой и доработкой программатора Mimaki я занимаюсь в свободное от работы время. Буду благодарен за поддержку разработки на платформе Boosty или за перевод на ЮМАНИ. Любой ваш вклад поможет мне уделять больше времени улучшению программатора. Спасибо всем за поддержку!


Понравился проект Лечим ошибку «Ink Near End» на принтерах Mimaki UJF-3042FX и других моделях? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в Telegram.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Обзор HMI-дисплея от Arduino-TEX.ru: AT2432S028-R. Разработан в России. http://arduino-tex.ru/news/181/obzor-hmi-displeya-ot-arduino-texru-at2432s028-r.html Константин Portal-PK 2024-02-09T09:11:56+03:00 В предыдущих статьях я неоднократно упоминал о моем HMI-дисплее и его преимуществах перед другими дисплеями на ESP32. Пришло время рассказать об одном из HMI-дисплеев от Arduino-TEX.ru — AT2432S028-R. Все возможности и особенности рассказать в одной статье достаточно сложно. Поэтому я расскажу кратко. Подробнее о возможностях дисплея и о работе по созданию интерфейса в программном обеспечении AT HMI буду рассказывать поэтапно в следующих статьях и проектах.

Пришло время рассказать об одном из HMI-дисплеев от Arduino-TEX.ru — AT2432S028-R.

Краткое описание HMI-дисплея AT2432S028-R.

Наш дисплей сделаны на базе микроконтроллера ESP32. HMI-дисплеи AT2432S028-R разъем для подключения к компьютеру USB Type-C.


Пришло время рассмотреть возможности AT2432S028-R.

Порты ввода-вывода HMI AT2432S028-R.

Порты ввода-вывода HMI AT2432S028-R.

Как уже упоминалось ранее, для подключения к компьютеру на дисплее используется разъем USB Type-C, что обеспечивает быстрое и удобное подключение к ПК. Для подключения к другим устройствам на плате предусмотрен полноценный аппаратный UART2, обеспечивающий стабильное и качественное взаимодействие с другими микроконтроллерами.

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

Разъем для подключения выполнен в виде выводов с шагом 2.54 мм

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

На плате также имеются две клеммные колодки с GPIO (GPIOs1, GPIOs2), предоставляющие 4 цифровых выхода с поддержкой ШИМ и 2 аналоговых входа.

На плате также имеются две клеммные колодки с GPIO (GPIOs1, GPIOs2), предоставляющие 4 цифровых выхода с поддержкой ШИМ и 2 аналоговых входа. Это позволяет управлять, например, реле или коллекторными двигателями, регулируя их скорость вращения. Кроме того, 2 аналоговых входа позволяют подключить внешние датчики, такие как термисторы, фоторезисторы, потенциометры и т. д.

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

Также на плате имеются выводы для подключения устройств по шине I2C

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

И последнее — наличие выводов для подключения внешнего звукового сигнала (BUZZER).

И последнее — наличие выводов для подключения внешнего звукового сигнала (BUZZER). Хотя BUZZER по умолчанию не распаян на плате, имеется возможность подключения внешнего динамика или нагрузки до 500 мА, которую можно управлять с помощью ШИМ.

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

Разработка проектов на дисплеях от Arduino-TEX.ru.

На данный момент мы предлагаем изготовление дисплеев от 2,2 до 4,3 дюймов с резистивным и емкостным сенсорами, а также стандартными портами вывода и памятью, либо по индивидуальным требованиям для конкретного проекта.

программное обеспечение AT HMI

Для создания проектов вы можете использовать наше программное обеспечение AT HMI, которое предоставляет следующие функции:

  1. Изменение ориентации дисплея.
  2. Включение и выключение звукового сигнала (BUZZER).
  3. Добавление плашек — графических элементов прямоугольной и круглой формы с различными вариациями оформления.
  4. Создание кнопок — активных графических элементов, позволяющих управлять 4 GPIO на плате. При создании кнопки также формируется сигнал в порт UART2. Кроме того, наш дисплей работает внутри высокоскоростной беспроводной сети, и каждая добавленная кнопка отправляет сигнал по данной сети, что позволяет взаимодействовать с другими нашими устройствами по воздуху.

Возможности нашего ПО AT HMI на данный момент достаточно примитивные, но мы активно работаем над их расширением. Если вам требуется сложный дизайн проекта и функционал, который нельзя реализовать с помощью AT HMI, вы можете заказать разработку у нас. Для этого свяжитесь со мной:

https://vk.com/kas_flai

https://t.me/arduino_tex_ru

Заключение.

Эта статья краткая, и у вас, возможно, возникнут вопросы. Не стесняйтесь задавать их в комментариях. В следующих публикациях я буду рассказывать подробнее обо всем этом, а также проведу серию уроков по созданию проектов с использованием HMI дисплея AT2432S028-R.

Понравилась статья Обзор HMI-дисплея от Arduino-TEX.ru: AT2432S028-R? Не забудь поделиться с друзьями в соц. сетях.


А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в Telegram.

Спасибо за внимание!
Технологии начинаются с простого!

]]>
Обновленный программатор Mimaki для прошивки (сброса) чипов. http://arduino-tex.ru/news/180/obnovlennyi-programmator-mimaki-dlya-proshivki-sbrosa.html Константин Portal-PK 2024-01-26T11:13:46+03:00 Обновленная версия программатора для прошивки (или сброса) чипов Mimaki была создана с целью расширения функционала и повышения удобства использования. Несмотря на успешную работу предыдущей версии, появилась необходимость внести изменения и добавить новые возможности. Давайте рассмотрим, почему появилась эта потребность.

Эволюция программатора Mimaki: причины и потребности обновления.

Купить программатор VK

Купить программатор Avito

Эволюция программатора Mimaki: причины и потребности обновления.

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

Что умеет обновленная версия программатора Mimaki?

Что умеет обновленная версия программатора Mimaki?

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

Основной функционал включает в себя

Основной функционал включает в себя:

  • Считывание данных с чипа;
  • Сброс года и объема;
  • Смену цвета краски (синий, крaсный, жёлтый, чёpный, бeлый и лaк);
  • Смену типа краски (LF-140, LН-100);
  • Обновление хэша чипа для правильного определения принтером.

Особенности программатора

Особенности программатора:

  • Автономность, не требует подключения к компьютеру;
  • Энергонезависимость, может работать даже от Powerbank;
  • Частичное обновление для удобства сохранения нужных данных.Например, вы можете сбросить только год, если чип просрочен или сбросить только объём, если он закончился. Это очень удобно если вам нужно сохранить все остальные данные, например если вы используете какой-то тип краски, которого нет в программаторе.

Поддерживаемые принтеры Mimaki и микросхемы DS2430а.

Программатор на текущий момент поддерживает принтеры Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160. Обратите внимание на микросхему (показано на фото) - поддерживаются чипы с микросхемой серии DS2430а, а с микросхемой DS2431 - нет.

поддерживаются чипы с микросхемой серии DS2430а, а с микросхемой DS2431 - нет.


Также важно учесть, что UJF-3042FX портят чипы, когда краска заканчивается. Необходимо сбрасывать пораньше, когда значение объема красок равно 1 или больше. Если вы увидели надпись «ink near end», такой чип испорчен и его не продлить!

Если вы увидели надпись «ink near end», такой чип испорчен и его не продлить!

Скоро появится поддержка чернил LUS120.

Также ведется тестирование совместимости с другими принтерами, такими как UJF-3042 Mk2 и UJF-3042 Mk2 EX, а также с чернилами LUS120. В ближайшем будущем мы примем решение о внедрении данного функционала в текущую версию программатора Mimaki.

 UJF-3042 Mk2 и UJF-3042 Mk2 EX, а также с чернилами LUS120.

Заключение.

Разработкой и доработкой программатора Mimaki занимаюсь в свободное от работы время. Буду благодарен за поддержку разработки на платформе boosty или за перевод на ЮМАНИ. Любой ваш вклад поможет мне уделять больше времени улучшению программатора. Спасибо всем за поддержку!

Понравился проект Обновленный программатор Mimaki для прошивки (сброса) чипов? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в Telegram.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
AT HMI: Программное обеспечение версии 0.0.1 и его возможности http://arduino-tex.ru/news/178/at-hmi-programmnoe-obespechenie-versii-001-i-ego.html Константин Portal-PK 2024-01-16T12:30:42+03:00

Добро пожаловать! Мы - команда Arduino TEX (AT), и долгие годы мы занимаемся разработкой и использованием HMI дисплеев различных компаний, таких как DWIN, NEXTION, и многих других. На нашем сайте вы найдете множество увлекательных проектов и уроков, основанных на этих технологиях.


Однако, несмотря на многообразие доступных HMI дисплеев, мы столкнулись с ограничениями в создании простых и быстрых интерфейсов без необходимости в глубоких знаниях программирования. В результате этого решения зрела идея создать что-то уникальное, основанное на нашем многолетнем опыте в области HMI дисплеев.

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

Скачать ПО AT HMI v0.0.1 можно внизу статьи. Но оно не будет работать без специальной прошивки для дисплея! О ней будет рассказано в следующей статье.

Что представляет из себя Альфа версия ПО для дисплеев AT HMI?

Альфа версия ПО для дисплеев AT HMI - это первый шаг в создании чего-то уникального. Не смотря на не самый красивый интерфейс, она предоставляет возможность создавать всего 2 элемента для дисплея: Кнопки и Плашки с надписью или без. Однако, даже с этим ограниченным функционалом, ПО обладает большим потенциалом для расширения. Даже в текущей версии, вы сможете создавать красивые и сложные проекты. Например, кнопку можно сделать размером до 255 на 255 пикселей, с градиентом или без, обводкой или без. Также поддерживаются различные визуальные эффекты нажатия на кнопку.

Что представляет из себя Альфа версия ПО для дисплеев AT HMI?

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

Альфа версия ПО для дисплеев AT HMI - это первый шаг в создании чего-то уникального.

Особенности ПО для дисплеев AT HMI.

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

Это действительно удобно! Все действия записываются в поле логов, и мы можем в любое время просмотреть, какой элемент на дисплее отредактировали и какие изменения внесли. В последующих версиях мы планируем внедрить функцию, позволяющую в списке добавленных элементов просматривать все компоненты интерфейса и пользователи смогут вносить изменения в них в любой момент.

Альфа версия ПО для дисплеев AT HMI - это первый шаг в создании чего-то уникального.

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

Железо и возможности.

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

Поддержите нас!

Поддержите наш проект! Возможно, у вас возник вопрос: "Зачем поддерживать проект, если он ориентирован на свои устройства?" Но, как было указано выше, наше программное обеспечение сможет использоваться с дисплеями других производителей, и мы не получим от этого ни копейки. Чем больше людей поддержат проект, тем больше дисплеев мы сможем адаптировать под наше программное обеспечение. Вы можете поддержать проект на платформе boosty или сделать перевод на ЮМАНИ.

Благодарим всех, кто проявляет интерес и поддерживает нас!

Заключение.

В данной статье мы каснулись основных моментов и перспектив развития проекта AT HMI. Ожидайте более подробных материалов, проектов и уроков в следующих публикациях. Наша цель - сделать AT HMI максимально простым для освоения и раскрыть неожиданные возможности взаимодействия с другими продуктами от Arduino TEX (AT). Следите за обновлениями!


Понравилась статья AT HMI: Программное обеспечение версии 0.0.1 и его возможности? Не забудь поделиться с друзьями в соц. сетях.


А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в Telegram.

Спасибо за внимание!
Технологии начинаются с простого!

]]>
Искусство управления временем в Arduino: От задержек delay() до параллельных задач millis(). http://arduino-tex.ru/news/177/iskusstvo-upravleniya-vremenem-v-arduino-ot-zaderzhek-delay.html Константин Portal-PK 2023-10-23T16:59:19+03:00 Arduino - это платформа, которая обеспечивает простой и удобный способ создания электронных проектов. При написании программ для Arduino часто возникает необходимость работы с временем и задержками. В этой статье мы рассмотрим основные функции задержек и техники управления временем в Arduino.

Мигаем и Измеряем: Практическое Руководство по millis() и micros() в Arduino

Функции задержек delay().

Простейшим способом управления временем в Arduino является использование функций задержек. Две основные функции задержек в Arduino:

delay(time)

Эта функция приостанавливает выполнение программы на определенное количество миллисекунд (time). Например, delay(1000) приостановит выполнение программы на 1 секунду.

void setup() {
pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(500); // подождать полсекунды
  digitalWrite(13, LOW);
  delay(500); // подождать полсекунды
}

Функция delay() представляет собой простую и эффективную возможность задерживать выполнение программы на определенное количество миллисекунд (мс). 1 секунда равна 1,000 мс, и эта функция может быть использована для создания задержек с разрешением в миллисекундах. Параметр time принимает тип данных unsigned long, что означает, что вы можете устанавливать задержки на промежутки времени от 1 до 4,294,967,295 мс (примерно 50 суток) с точностью до 1 мс.

Эта функция работает на системном таймере микроконтроллера Arduino и останавливает выполнение программы в течение указанного периода времени. Однако следует помнить, что delay() не будет работать внутри прерывания и при отключенных прерываниях, поскольку она полагается на системный таймер для создания задержек.

delayMicroseconds(time)

Эта функция приостанавливает выполнение программы на определенное количество микросекунд (time).

void setup() {}
void loop() {
  // что-то выполнить
  delayMicroseconds(100); // подождать 100 мкс
}

Функция delayMicroseconds() предоставляет возможность создавать задержки с очень высоким разрешением в микросекундах (мкс). 1 секунда равна 1,000,000 мкс, и данная функция может приостановить выполнение программы на промежуток времени от 4 до 16,383 мкс. Параметр time принимает тип данных unsigned int, что означает, что вы можете устанавливать задержки с разрешением в микросекундах.

Важно отметить, что delayMicroseconds() работает не на таймере, а на пропуске тактов процессора. Это означает, что она может работать внутри прерывания и при отключенных прерываниях. Однако, иногда она может работать не совсем корректно с переменными из-за своего высокого разрешения, поэтому рекомендуется стараться использовать константы (например, const int delayTime = 1000;) вместо переменных внутри delayMicroseconds(), чтобы избежать ошибок.

Обе эти функции предоставляют удобный и простой способ управления временными задержками в программировании Arduino и являются важными инструментами для создания точных временных интервалов в ваших проектах.

Функция yield().

Функция yield() предоставляет возможность выполнять код во время задержек delay(). Это позволяет создавать параллельно выполняющиеся задачи без использования сложных таймеров.

void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
void yield() {
  // код, который может выполняться во время задержек
}

Функция yield() работает только для AVR Arduino и не поддерживается на платформах esp8266 и esp32.

Функции счёта времени millis(),millis().

Arduino предоставляет две функции для отслеживания времени:

millis()

Функция millis() возвращает количество миллисекунд, прошедших с момента запуска программы на Arduino. Она является полезным инструментом для отслеживания времени в вашем проекте. Возвращаемое значение имеет тип unsigned long, что позволяет отслеживать время на протяжении более 49 суток. Эта функция обычно используется для выполнения определенных действий через определенные временные интервалы.

Пример использования millis() для мигания светодиодом каждую секунду:

const int ledPin = 13; // Пин светодиода
void setup() {
  pinMode(ledPin, OUTPUT);
}
void loop() {
  static unsigned long previousMillis = 0; // Переменная для хранения предыдущего времени
  const long interval = 1000; // Интервал в миллисекундах (1 секунда)
  unsigned long currentMillis = millis(); // Получаем текущее время
  // Если прошло достаточно времени с момента последнего мигания
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis; // Запоминаем текущее время
    digitalWrite(ledPin, !digitalRead(ledPin)); // Мигаем светодиодом
  }
}

В этом примере светодиод будет мигать каждую секунду, используя функцию millis(), чтобы отслеживать прошедшее время.

micros()

Функция micros() возвращает количество микросекунд, прошедших с момента запуска программы. Она имеет более высокое разрешение, чем millis(), что позволяет отслеживать более короткие временные интервалы (меньше одной миллисекунды). Это полезно, когда вам нужно измерить очень короткие временные интервалы или управлять устройствами, требующими точного управления временем.

Пример использования micros() для измерения времени выполнения определенной операции:

void setup() {
  // Настройка вашего проекта
}
void loop() {
  unsigned long startTime = micros(); // Получаем время начала операции
  // Выполняем операции, которые вы хотите измерить
  unsigned long elapsedTime = micros() - startTime; // Вычисляем время, затраченное на операцию
  Serial.print("Время выполнения операции: ");
  Serial.print(elapsedTime);
  Serial.println(" микросекунд");
  delay(1000); // Пауза 1 секунда перед следующей операцией
}

В этом примере функция micros() используется для измерения времени выполнения операции в loop(). Полученное значение времени выводится через последовательный порт (Serial) для мониторинга.

Используя функции millis() и micros(), вы можете эффективно управлять временными интервалами в ваших проектах Arduino и создавать более точные и сложные программы с параллельно выполняющимися задачами.

Многозадачность с millis(): Мигание несколькими светодиодами.

В предыдущих главах мы узнали, как использовать функцию millis() для создания временных интервалов в Arduino. Теперь давайте поднимем наш навык программирования на новый уровень, используя millis() для управления несколькими светодиодами с разными интервалами. Это важное умение в мире Arduino, где часто возникает необходимость управлять несколькими задачами параллельно. В этой главе мы рассмотрим, как реализовать многозадачность с помощью millis() на примере мигания трех светодиодов.

const int ledPin1 = 2;  // Пин первого светодиода
const int ledPin2 = 3;  // Пин второго светодиода
const int ledPin3 = 4;  // Пин третьего светодиода

unsigned long previousMillis1 = 0;  // Переменная для хранения времени последнего мигания 1 светодиода
unsigned long previousMillis2 = 0;  // Переменная для хранения времени последнего мигания 2 светодиода
unsigned long previousMillis3 = 0;  // Переменная для хранения времени последнего мигания 3 светодиода

const long interval1 = 1000;  // Интервал для 1 светодиода в миллисекундах (1 секунда)
const long interval2 = 500;   // Интервал для 2 светодиода в миллисекундах (0.5 секунды)
const long interval3 = 250;   // Интервал для 3 светодиода в миллисекундах (0.25 секунды)

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();  // Получаем текущее время

  // Мигание первым светодиодом
  if (currentMillis - previousMillis1 >= interval1) {
    previousMillis1 = currentMillis;
    digitalWrite(ledPin1, !digitalRead(ledPin1));
  }

  // Мигание вторым светодиодом
  if (currentMillis - previousMillis2 >= interval2) {
    previousMillis2 = currentMillis;
    digitalWrite(ledPin2, !digitalRead(ledPin2));
  }

  // Мигание третьим светодиодом
  if (currentMillis - previousMillis3 >= interval3) {
    previousMillis3 = currentMillis;
    digitalWrite(ledPin3, !digitalRead(ledPin3));
  }
}

В этом примере кода три светодиода мигают с разными интервалами: 1 секунда, 0.5 секунды и 0.25 секунды. Это достигается путем использования трех переменных для отслеживания времени последнего мигания каждого светодиода и сравнения этого времени с текущим временем, полученным с помощью millis(). Каждый светодиод переключается между состоянием HIGH и LOW в зависимости от прошедшего времени.

Этот пример демонстрирует, как использовать millis() для управления несколькими задачами параллельно, что может быть весьма полезно в ваших проектах Arduino. Теперь у вас есть возможность создавать сложные и интересные программы, используя многозадачность с функцией millis().

Преобразование Millis в часы, минуты и секунды.

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

uint32_t sec = millis() / 1000ul;      // полное количество секунд
int timeHours = (sec / 3600ul);        // часы
int timeMins = (sec % 3600ul) / 60ul;  // минуты
int timeSecs = (sec % 3600ul) % 60ul;  // секунды

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

]]>
EEPROM Arduino: Пример кода для работы с boolean, char, byte, int, float и String. http://arduino-tex.ru/news/176/arduino-i-eeprom-energonezavisimoe-hranilishche.html Константин Portal-PK 2023-09-15T08:36:52+03:00 EEPROM память на платформе Arduino представляет собой энергонезависимое хранилище данных, которое позволяет сохранять важные настройки и информацию даже при выключении устройства или перезагрузке микроконтроллера. Этот вид памяти, известный как Electrically Erasable Programmable Read-Only Memory (EEPROM), предоставляет возможность долгосрочного хранения данных на Arduino. В данном уроке мы рассмотрим, как работать с EEPROM памятью на платформе Arduino, используя стандартную библиотеку EEPROM.h.

Arduino и EEPROM: Энергонезависимое Хранилище данных.

Arduino и EEPROM: Энергонезависимое Хранилище данных.

EEPROM Arduino обладает следующими ключевыми характеристиками:

  1. Энергонезависимость: EEPROM память сохраняет данные в течение долгого времени, даже после отключения питания. Это делает ее идеальным инструментом для хранения настроек и важных данных.
  2. Циклы перезаписи: EEPROM память обеспечивает сотни тысяч циклов перезаписи при оптимальных условиях температуры (не ниже 24°C). При этом чтение данных не имеет ограничений.
  3. Объем памяти: Емкость EEPROM памяти зависит от модели микроконтроллера Arduino. Например:
    • ATmega168 (платы Arduino Nano) — 512 байт;
    • ATmega328 (платы Arduino Uno, Arduino Nano) — 1 Кбайт;
    • ATmega1280, ATmega2560 (плата Arduino Mega) — 4 Кбайта.
    Работа с библиотекой EEPROM на ESP32, ESP8266.
  4. Время доступа: Операция записи одного байта в EEPROM занимает около 3,3 микросекунд, а чтение одного байта — около 0,4 микросекунды. Это быстро и эффективно для хранения и извлечения данных.
  5. Значение по умолчанию: Каждый байт (ячейка) EEPROM по умолчанию имеет значение 255, если он ни разу не был записан. Это важно учитывать, чтобы не путать незаписанные ячейки с данными.

Команды библиотеки EEPROM.h Arduino.

На платформе Arduino для работы с EEPROM памятью используется библиотека EEPROM.h. Ниже представлены ключевые функции этой библиотеки:

  • EEPROM.read(address): Считывает байт данных из EEPROM по указанному адресу address.
  • EEPROM.write(address, value): Записывает байт данных value в EEPROM по указанному адресу address.
  • EEPROM.update(address, value): Аналогично write, но проверяет, изменилось ли значение. Если оно не изменилось, запись не выполняется, что позволяет уменьшить износ EEPROM.
  • EEPROM.put(address, value): Записывает значение value по адресу address в EEPROM, поддерживая разные типы данных (int, float, struct и другие).
  • EEPROM.get(address, value): Считывает значение данных из EEPROM, начиная с адреса address, и сохраняет его в переменной value. Поддерживает разные типы данных.
  • EEPROM.length(): Возвращает размер EEPROM в байтах.
  • EEPROM.begin(size): Используется для указания размера EEPROM, если он не задан по умолчанию.

В этом уроке мы рассмотрим примеры записи и чтения различных типов данных, включая boolean, char, byte, int, float и строки, с использованием библиотеки EEPROM.h на Arduino.

EEPROM Arduino: Пример кода для работы с boolean, char, byte, int, float и String.

EEPROM Arduino обладает несколькими ключевыми характеристиками, среди которых энергонезависимость, долгий срок хранения данных и возможность записи и чтения данных разных типов. Мы создадим примеры записи и чтения различных типов данных, таких как boolean, char, byte, int, float и строки, и рассмотрим команды библиотеки EEPROM.h, которые делают этот процесс простым и надежным.

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

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/176/arduino-i-eeprom-energonezavisimoe-hranilishche.html
*/

#include <EEPROM.h>
int address = 0; // Начальный адрес для записи данных в EEPROM
void setup() {
  Serial.begin(9600); // Инициализация последовательной связи для вывода данных в монитор порта
  // Пример записи данных в EEPROM
  // Запись boolean
  boolean boolValue = true;
  EEPROM.write(address, boolValue);
  address += sizeof(bool); // Увеличение адреса на размер boolean (1 байт)
  // Запись char
  char charValue = 'A';
  EEPROM.write(address, charValue);
  address += sizeof(char); // Увеличение адреса на размер char (1 байт)
  // Запись byte
  byte byteValue = 42;
  EEPROM.write(address, byteValue);
  address += sizeof(byte); // Увеличение адреса на размер byte (1 байт)
  // Запись int
  int intValue = 1234;
  EEPROM.put(address, intValue);
  address += sizeof(int); // Увеличение адреса на размер int (2 байта)
  // Запись float
  float floatValue = 3.14;
  EEPROM.put(address, floatValue);
  address += sizeof(float); // Увеличение адреса на размер float (4 байта)
  // Пример записи строки (char array) в EEPROM
  char str[] = "Hello, EEPROM!";
  for (int i = 0; i < strlen(str); i++) {
    EEPROM.write(address, str[i]);
    address += sizeof(char); // Увеличение адреса на размер char (1 байт) для каждого символа
  }
  // Ожидание перед чтением
  delay(1000);
  // Пример чтения данных из EEPROM
  address = 0; // Сбрасываем адрес чтения на начальное значение
  // Чтение boolean
  EEPROM.read(address, boolValue);
  address += sizeof(bool);
  // Чтение char
  EEPROM.read(address, charValue);
  address += sizeof(char);
  // Чтение byte
  EEPROM.read(address, byteValue);
  address += sizeof(byte);
  // Чтение int
  EEPROM.get(address, intValue);
  address += sizeof(int);
  // Чтение float
  EEPROM.get(address, floatValue);
  address += sizeof(float);
  // Чтение строки (char array)
  char readStr[15];
  for (int i = 0; i < strlen(str); i++) {
    EEPROM.read(address, readStr[i]);
    address += sizeof(char);
  }
  readStr[strlen(str)] = '\0';
  // Вывод прочитанных значений в монитор порта
  Serial.println("Прочитанные значения из EEPROM:");
  Serial.print("Boolean: ");
  Serial.println(boolValue);
  Serial.print("Char: ");
  Serial.println(charValue);
  Serial.print("Byte: ");
  Serial.println(byteValue);
  Serial.print("Int: ");
  Serial.println(intValue);
  Serial.print("Float: ");
  Serial.println(floatValue);
  Serial.print("String: ");
  Serial.println(readStr);
}
void loop() {
  // Ваш код здесь (для реализации другой функциональности, если необходимо)
}

Что делает каждая часть кода:

  1. Мы инициализируем последовательную связь для взаимодействия с монитором порта.
  2. Затем записываем данные разных типов в EEPROM (boolean, char, byte, int, float и строку).
  3. После записи данных мы ожидаем некоторое время (1 секунда) перед чтением, чтобы вы могли видеть результаты в мониторе порта.
  4. Затем мы считываем данные из EEPROM и выводим их в мониторе порта.

Затем мы считываем данные из EEPROM и выводим их в мониторе порта.

Этот код демонстрирует, как записывать и читать различные типы данных в EEPROM, включая строки (char array). Вы можете использовать этот пример как отправную точку для работы с EEPROM на вашей плате Arduino.

Очистка памяти EEPROM.

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

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/176/arduino-i-eeprom-energonezavisimoe-hranilishche.html
*/

#include <EEPROM.h>

void setup() {
  Serial.begin(9600);
    // Если вы хотите очистить EEPROM, то запустите эту функцию один раз и закомментируйте её после выполнения.
  clearEEPROM();
}

void loop() {
  // Здесь можно разместить вашу основную логику программы.
}

void clearEEPROM() {
  Serial.println("Очистка EEPROM...");
  for (int i = 0; i < EEPROM.length(); i++) {
    EEPROM.write(i, 255);
  }
  Serial.println("EEPROM очищена.");
  delay(1000);
}

Этот код выполняет очистку всей EEPROM, устанавливая каждый байт в ней в значение 255. Вызовите функцию clearEEPROM() в setup() один раз, чтобы очистить EEPROM при необходимости. После очистки вы можете закомментировать вызов clearEEPROM().

Этот код выполняет очистку всей EEPROM, устанавливая каждый байт в ней в значение 255.

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

В этой статье мы рассмотрели основы работы с памятью EEPROM (Electrically Erasable Programmable Read-Only Memory) на платах Arduino.

Заключение.

В этой статье мы рассмотрели основы работы с памятью EEPROM (Electrically Erasable Programmable Read-Only Memory) на платах Arduino. Мы изучили основные функции библиотеки EEPROM и создали пример программы, демонстрирующей запись и чтение данных разных типов, таких как boolean, char, byte, int, float и строки (с использованием массива символов), в EEPROM.

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

Знание работы с EEPROM позволяет сохранять и восстанавливать важные настройки и данные на вашей Arduino-плате, делая её более функциональной и адаптированной к вашим потребностям. Эта память полезна для хранения параметров, калибровочных данных, настроек и другой информации, которая должна сохраняться даже после перезапуска устройства.

Надеемся, что данная статья поможет вам легче освоить работу с EEPROM на Arduino и использовать её в ваших проектах. Помните о том, что EEPROM имеет ограниченное количество циклов записи/стирания, поэтому используйте её осторожно и рационально.


]]>
Работа с библиотекой EEPROM на ESP32, ESP8266. http://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html Константин Portal-PK 2023-08-10T17:49:51+03:00 EEPROM (Electrically Erasable Programmable Read-Only Memory) - это технология энергонезависимой памяти, которая позволяет хранить данные даже после отключения питания. В ESP32 и ESP8266 флэш-память используется для эмуляции EEPROM, что позволяет сохранять данные даже при перезагрузке устройства.

В ESP32 и ESP8266 флэш-память используется для эмуляции EEPROM, что позволяет сохранять данные даже при перезагрузке устройства.

Применение флэш-памяти: Флэш-память на ESP32 и ESP8266 может быть использована для сохранения различных типов данных, таких как последнее состояние переменной, настройки устройства, количество активаций и многое другое. Это особенно полезно, когда необходимо сохранить данные на длительное время.

Ограничения флэш-памяти: Одним из ограничений флэш-памяти является ограниченное количество операций записи. Вы можете записать данные в нее ограниченное количество раз (обычно 100,000 - 1,000,000 операций записи). Однако вы можете считывать данные сколько угодно раз без ограничений.

Библиотека EEPROM: Для работы с флэш-памятью ESP32 и ESP8266 в Arduino IDE используется библиотека EEPROM. Эта библиотека позволяет вам легко записывать и считывать данные из флэш-памяти, подобно тому, как вы делали это с Arduino EEPROM.

Список всех функций библиотеки EEPROM для ESP32, ESP8266 с подробными описаниями:

1. EEPROM.begin(size):

Инициализирует эмулированную EEPROM с указанным размером size (в байтах). Обычно вызывается в функции setup().

2. EEPROM.end():

Завершает работу с эмулированной EEPROM и освобождает зарезервированные ресурсы. Необходимо вызывать, когда вы закончили работу с EEPROM.

3. EEPROM.write(address, value):

Записывает значение value (байт) в указанный адрес address в эмулированной EEPROM.

4. EEPROM.read(address):

Считывает байт данных из указанного адреса address в эмулированной EEPROM и возвращает это значение.

5. EEPROM.update(address, value):

Обновляет значение в указанном адресе address в эмулированной EEPROM. Если новое значение отличается от текущего, то происходит запись нового значения.

6. EEPROM.get(address, data):

Считывает данные из указанного адреса address в эмулированной EEPROM и сохраняет их в переменную data. Может использоваться для считывания структур или пользовательских типов данных.

7. EEPROM.put(address, data):

Записывает данные из переменной data в указанный адрес address в эмулированной EEPROM. Может использоваться для записи структур или пользовательских типов данных.

8. EEPROM.commit():

Сохраняет все изменения, внесенные в эмулированную EEPROM, во флэш-памяти. Это необходимо вызвать после операций записи, чтобы изменения вступили в силу.

Пример использования библиотеки EEPROM на ESP32, ESP8266.

Библиотеки включена в стандартный набор библиотек Arduino IDE, предназначенных для разработки программного обеспечения для ESP32 и ESP8266. Поэтому нет необходимости дополнительно устанавливать эту библиотеку после установки платы ESP32 или ESP8266 в Arduino IDE.

При создании проекта и работы с платами ESP32 или ESP8266, вы можете сразу начать использовать функции библиотеки EEPROM, такие как EEPROM.write(), EEPROM.read(), EEPROM.commit() и другие. Эти функции позволяют вам записывать и читать данные из эмулированной памяти, сохраняя информацию даже при перезагрузке устройства.

Запись данных:

Чтобы записать данные в флэш-память, используйте функцию EEPROM.write(address, value), где address - адрес памяти для записи (от 0 до 511), а value - значение данных (от 0 до 255).

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/
#include <EEPROM.h>

void setup() {
    EEPROM.begin(512);  // Инициализация EEPROM с размером 512 байт
    int address = 0;   // адрес памяти для записи (от 0 до 511)
    byte value = 123;  // значение данных (от 0 до 255)
    EEPROM.write(address, value);  // Запись данных
    EEPROM.commit();   // Сохранение изменений
}

void loop() {
    // Ваш код здесь
}

Чтение данных:

Для чтения данных из флэш-памяти используйте функцию EEPROM.read(address), где address - адрес памяти для чтения.

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/
#include <EEPROM.h>

void setup() {
    EEPROM.begin(512);
    int address = 0;                     //адрес памяти для чтения.
    byte value = EEPROM.read(address);   // Чтение данных
    // Используйте значение данных (value) по вашему усмотрению
}

void loop() {
    // Ваш код здесь
}

Освобождение ресурсов:

EEPROM.end() - это функция из библиотеки EEPROM, которая выполняет освобождение ресурсов, занимаемых под эмуляцию EEPROM во флэш-памяти ESP32. Эта функция должна быть вызвана после того, как вы закончили работу с библиотекой и больше не планируете записывать или читать данные из EEPROM.

Принцип работы библиотеки EEPROM на ESP32 следующий: при вызове EEPROM.begin(size), где size - размер эмулируемой памяти, библиотека резервирует определенное количество флэш-памяти для эмуляции EEPROM. Когда вы вызываете EEPROM.write() для записи данных или EEPROM.read() для чтения данных, библиотека обращается к этой зарезервированной части флэш-памяти.

После того, как вы закончили работу с библиотекой EEPROM, чтобы освободить ресурсы, занятые эмуляцией EEPROM, вы должны вызвать EEPROM.end().

Пример использования EEPROM.end():

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/
#include <EEPROM.h>

void setup() {
    EEPROM.begin(512);  // Инициализация EEPROM с размером 512 байт
    // Работа с EEPROM
}

void loop() {
    // Ваш код здесь
}

void saveData() {
    // Сохранение данных
    EEPROM.commit();
    EEPROM.end();  // Освобождение ресурсов
}

Обратите внимание, что вызов EEPROM.commit() перед EEPROM.end() является важным. Функция EEPROM.commit() сохраняет все изменения, которые вы сделали в эмулируемой EEPROM, во флэш-памяти. После сохранения данных, вызов EEPROM.end() завершает работу с библиотекой и освобождает ресурсы.

Итак, освобождение ресурсов с помощью EEPROM.end() важно для эффективного управления памятью и предотвращения утечек памяти при использовании библиотеки EEPROM на ESP32.

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

Этот пример демонстрирует, как использовать библиотеку EEPROM на микроконтроллерах ESP32 и ESP8266 для создания счетчика, который подсчитывает количество включений (перезагрузок) устройства. Библиотека EEPROM позволяет нам сохранять данные в энергонезависимой памяти, которые останутся неизменными даже после выключения питания.

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/175/rabota-s-bibliotekoi-eeprom-na-esp32-esp8266.html
*/

#include <EEPROM.h>
int address = 0; // адрес памяти для записи (от 0 до 511)
byte value_w; // значение данных (от 0 до 255)

void setup() {
  Serial.begin(74880);

  EEPROM.begin(512);  // Инициализация EEPROM с размером 512 байт
  value_w = EEPROM.read(address);  // Чтение данных
  value_w++;
  EEPROM.write(address, value_w);  // Запись данных
  EEPROM.commit();                 // Сохранение изменений

  byte value_r = EEPROM.read(address);  // Чтение данных

  // Используйте значение данных (value) по вашему усмотрению
  Serial.println();
  Serial.print("Номер включения устройства: ");
  Serial.println(value_r);
}

void loop() {

}

Как это работает:

  1. Подключение библиотеки: Прежде чем начать, мы подключаем библиотеку EEPROM, чтобы получить доступ к функциям для работы с эмулированной энергонезависимой памятью.
  2. Инициализация переменных и адреса: Мы объявляем переменную address, которая будет использоваться как адрес в памяти для хранения количества включений. Мы также создаем переменную value_w, которая будет хранить текущее количество включений.
  3. Функция setup():
    • Мы настраиваем последовательное соединение для вывода данных на монитор порта с помощью Serial.begin(74880).
    • Инициализируем эмулированную EEPROM с размером 512 байт с помощью EEPROM.begin(512).
    • Читаем текущее значение (количество включений) из памяти с помощью EEPROM.read(address).
    • Увеличиваем значение на 1, чтобы учесть текущее включение.
    • Записываем новое значение обратно в память с помощью EEPROM.write(address, value_w).
    • Сохраняем изменения во флэш-памяти с помощью EEPROM.commit().
    • Читаем новое значение из памяти и выводим его на монитор порта.
  4. Функция loop(): Эта функция остается пустой, так как в ней нет необходимости для данной задачи.

Кода для подсчета количества включений устройства с использованием библиотеки EEPROM

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

Удачи в вашем эксперименте с EEPROM!

Понравился урок. Работа с библиотекой EEPROM на ESP32, ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Удаленное управление по протоколу UDP с использованием ESP8266, ESP32. http://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html Константин Portal-PK 2023-08-04T12:49:49+03:00 Приветствую вас на уроке "Удаленное управление по протоколу UDP с использованием ESP8266 и ESP32". В предыдущем уроке мы знакомились с основами протокола UDP (User Datagram Protocol), который предоставляет простой способ обмена данными между устройствами в сети. Если вы еще не ознакомились с протоколом UDP, рекомендуется посмотреть предыдущий урок, чтобы понять его основные понятия и функциональность.

В этом уроке мы продолжим использовать платы ESP8266 и ESP32 для демонстрации работы протокола UDP.

Пример работы UDP с ESP32 и ESP8266.

В этом уроке мы продолжим использовать платы ESP8266 и ESP32 для демонстрации работы протокола UDP. Мы будем управлять светодиодами на удаленных устройствах с помощью команд, отправляемых через протокол UDP.

Наши цели:

  • Ознакомиться с отправкой и приемом данных по протоколу UDP.
  • Реализовать удаленное управление светодиодами с использованием двух плат ESP8266/ESP32.
  • Изучить простой и эффективный способ обмена данными между устройствами в локальной сети.

Давайте начнем и рассмотрим детали реализации этого увлекательного проекта!

Пример работы UDP с ESP32 и ESP8266

Для урока "Удаленное управление по протоколу UDP" потребуется:

  1. Две платы ESP8266 и/или ESP32.
  2. Светодиоды.
  3. Тактовая кнопка.
  4. Резистор номиналом от 100 до 220 ом.
  5. Компьютер с Arduino IDE.

Наша система состоит из двух частей: отправителя и получателя. Отправитель будет принимать команды с последовательного порта компьютера и отправлять их на удаленный получатель по протоколу UDP. Получатель будет прослушивать UDP-пакеты и выполнять команды для управления светодиодом.

Код отправителя (udp_sender):

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html
*/

#if defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#if defined(ESP32)
#include "WiFi.h"
#endif
#include <WiFiUdp.h>

const char* ssid = "Ваш_SSID";                // Ваш SSID
const char* password = "Ваш_пароль";          // Ваш пароль
const IPAddress receiverIP(192, 168, 1, 10);  // IP-адрес #2 (Получателя)
const int receiverPort = 12345;               // Порт #2 (Получателя)

WiFiUDP udp;
char command;
void setup() {
  Serial.begin(115200);

  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);  // Изначально светодиод выключен

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Подключение к WiFi...");
  }
  Serial.println("Подключено к WiFi!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  udp.begin(receiverPort);  // Инициализация UDP для приема данных
}

void loop() {
  // Чтение данных с последовательного порта
  if (Serial.available() > 0) {
    char command = Serial.read();
    if (command != -1) {  // Проверяем, что команда считывается успешно
      // Проверка наличия символа и его действительности
      if (command != '\n' && command != '\r') {
        // Отправка команды удаленному устройству по протоколу UDP
        udp.beginPacket(receiverIP, receiverPort);
        udp.write((uint8_t)command);  // Преобразуем символ в uint8_t
        udp.endPacket();

        Serial.print("Команда: ");
        Serial.println(command);
      }
    }
  }
}

Код получателя (udp_receiver):

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html
*/

#if defined(ESP8266)
 #include <ESP8266WiFi.h>
#endif
#if defined(ESP32)
 #include "WiFi.h"
#endif
#include <WiFiUdp.h>

const char* ssid = "Ваш_SSID";             // Ваш SSID
const char* password = "Ваш_пароль";       // Ваш пароль
const int receiverPort = 12345;            // Порт 

WiFiUDP udp;

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);  // Изначально светодиод выключен

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Подключение к WiFi...");
  }
  Serial.println("Подключено к WiFi!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  udp.begin(receiverPort);  // Инициализация UDP для приема данных
}

void loop() {
  int packetSize = udp.parsePacket();
  if (packetSize) {
    char command = udp.read();

    // Обработка команды от удаленного устройства
    if (command == '2') {
      digitalWrite(LED_BUILTIN, LOW);  // Выключить светодиод
      Serial.println("Сосотоение светодиода: Выкл.");
    } else if (command == '1') {
      digitalWrite(LED_BUILTIN, HIGH);  // Включить светодиод
      Serial.println("Сосотоение светодиода: Вкл.");
    }
  }
}

Кроме возможности удаленного управления светодиодами посредством UDP, мы также можем наблюдать за происходящими событиями и взаимодействиями между устройствами, используя монитор порта (Serial Monitor) в Arduino IDE. Подключив платы ESP8266 и ESP32 к компьютеру и загрузив соответствующий код, мы можем отслеживать передаваемые и принимаемые команды, а также состояния светодиодов через монитор порта. Это позволяет более глубоко понять происходящие процессы, выявить возможные ошибки и улучшить взаимодействие между устройствами.

Кроме возможности удаленного управления светодиодами посредством UDP

Монитор порта является незаменимым инструментом для отладки и анализа работы проектов на платах ESP8266 и ESP32, помогая следить за данными и событиями в реальном времени.

Удаленное управление светодиодами по протоколу UDP с использованием ESP8266/ESP32 и тактовой кнопки.

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

Удаленное управление светодиодами по протоколу UDP с использованием ESP8266/ESP32 и тактовой кнопки.

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

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


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

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


Изменения в коде отправителя (udp_sender):

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/174/udalennoe-upravlenie-po-protokolu-udp-s-ispolzovaniem.html
*/

#if defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#if defined(ESP32)
#include "WiFi.h"
#endif
#include <WiFiUdp.h>

const char* ssid = "Ваш_SSID";                // Ваш SSID
const char* password = "Ваш_пароль";          // Ваш пароль
const IPAddress receiverIP(192, 168, 1, 10);  // IP-адрес #2 (Получателя)
const int receiverPort = 12345;               // Порт #2 (Получателя)

#if defined(ESP8266)
const int buttonPin = D1;  // Пин для кнопки ESP8266
#endif
#if defined(ESP32)
const int buttonPin = 5;  // Пин для кнопки ESP32
#endif

WiFiUDP udp;
char command;
bool buttonStatePrev = HIGH;  // Предыдущее состояние кнопки

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);  // Изначально светодиод выключен

  pinMode(buttonPin, INPUT_PULLUP);  // Настраиваем пин кнопки как вход с подтяжкой

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Подключение к WiFi...");
  }
  Serial.println("Подключено к WiFi!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  udp.begin(receiverPort);  // Инициализация UDP для приема данных
}

void loop() {
  // Чтение состояния кнопки
  int buttonState = digitalRead(buttonPin);

  // Если состояние кнопки изменилось
  if (buttonState != buttonStatePrev) {
    // Сохраняем новое состояние кнопки
    buttonStatePrev = buttonState;

    // Если кнопка нажата, отправляем команду на включение светодиода получателю
    if (buttonState == LOW) {
      udp.beginPacket(receiverIP, receiverPort);
      udp.write((uint8_t)'1');  // Отправляем команду '1' по протоколу UDP
      udp.endPacket();

      Serial.println("Команда на включение светодиода отправлена!");
    } else {  // Иначе, если кнопка не нажата, отправляем команду на выключение светодиода получателю
      udp.beginPacket(receiverIP, receiverPort);
      udp.write((uint8_t)'2');  // Отправляем команду '2' по протоколу UDP
      udp.endPacket();

      Serial.println("Команда на выключение светодиода отправлена!");
    }

    // Добавим небольшую задержку, чтобы избежать повторной отправки команды при быстром нажатии кнопки
    delay(100);
  }
}

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

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

Вывод:

В данном уроке мы познакомились с удаленным управлением светодиодами на платах ESP8266 и ESP32 с использованием протокола UDP. Мы рассмотрели, как отправлять и принимать данные по UDP, а также как создать простой механизм удаленного управления с помощью тактовой кнопки на отправителе.

Основные этапы:

  1. Ознакомление с протоколом UDP и его основными понятиями.
  2. Разработка кода отправителя и получателя для удаленного управления светодиодами.
  3. Добавление функциональности отправки команды управления светодиодом с помощью тактовой кнопки.

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

ESP8266 и ESP32 с использованием протокола UDP

Продолжайте экспериментировать с кодом, добавлять новую функциональность и адаптировать проект под свои потребности. Удаленное управление по протоколу UDP - это лишь одна из множества возможностей, которые предоставляют платы ESP8266 и ESP32.

Удачи в вашем эксперименте с протокола UDP!

Понравился урок. Удаленное управление светодиодами по протоколу UDP с использованием ESP8266, ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
Введение в ESP-NOW: Беспроводная связь на ESP8266. http://arduino-tex.ru/news/173/vvedenie-v-esp-now-besprovodnaya-svyaz-na--esp8266.html Константин Portal-PK 2023-07-25T21:12:38+03:00 ESP-NOW - это удобный протокол беспроводной связи, разработанный компанией Espressif Systems, который позволяет установить прямое соединение между устройствами на базе микроконтроллеров ESP8266, ESP32 и обмениваться данными без необходимости использования маршрутизатора или точки доступа Wi-Fi. В этой статье мы рассмотрим, что такое ESP-NOW, его преимущества и недостатки, а также основные функции для использования этого протокола.

Преимущества протокол беспроводной связи ESP-NOW

Купить NodeMcu (ESP8266) можно на AliExpress.

Преимущества протокол беспроводной связи ESP-NOW:

  1. Низкое энергопотребление: ESP-NOW оптимизирован для экономии энергии, что делает его идеальным для батарейных устройств или устройств, работающих от аккумуляторов.
  2. Простота настройки: Установка связи между устройствами с помощью ESP-NOW происходит быстро и легко. Этот протокол работает на физическом уровне Wi-Fi, что упрощает процесс настройки и обмена данными.
  3. Высокая скорость передачи данных: ESP-NOW обеспечивает низкую задержку и высокую скорость передачи данных, что делает его отличным выбором для приложений с требованиями к скорости обмена информации.
  4. Прямое соединение: ESP-NOW позволяет устанавливать прямое соединение между устройствами, минуя маршрутизатор или точку доступа Wi-Fi, что уменьшает задержки и упрощает структуру сети.
  5. Создание собственной сети: Протокол ESP-NOW позволяет создавать собственные маленькие сети устройств без необходимости подключения к сторонней инфраструктуре.

Недостатки ESP-NOW:

  1. Ограниченное расстояние передачи: Как и другие протоколы на основе Wi-Fi, дальность передачи данных ограничивается физическими ограничениями стандарта Wi-Fi.
  2. Ограничение количества подключенных устройств: Протокол ESP-NOW оптимизирован для работы с небольшим количеством подключенных устройств (максимум 20 пар), что может быть недостаточно для некоторых сценариев.
  3. Безопасность: Хотя ESP-NOW обеспечивает базовую безопасность с помощью шифрования, он не обеспечивает такого же уровня защиты, как стандартные протоколы Wi-Fi с точками доступа и шифрованием данных на уровне сетевых слоев.

ESP-NOW поддерживает следующие функции:

  1. Зашифрованная и незашифрованная связь между сопряженными парами устройств, предоставляет возможность передачи данных с использованием шифрования для повышения безопасности или без шифрования для упрощения коммуникации между сопряженными устройствами.
  2. Смешанные зашифрованная и незашифрованная связь между сопряженными устройствами, позволяет установить смешанный режим, в котором некоторые сопряженные устройства могут использовать шифрование, а другие - нет, в зависимости от требований приложения.
  3. Передача до 250 байт полезной информации, что позволяет передавать различные типы информации между устройствами.
  4. Настройка функции обратного вызова для информирования прикладного уровня, в частности, об успешности или сбое передачи: ESP-NOW предоставляет callback-функцию, которая сообщает прикладному уровню об успешности или сбое отправки данных, что позволяет реагировать на результаты передачи.

Внимание! В этой статье рассмотрим, как работать с протоколом ESP-NOW на платформе ESP8266. Однако, следует помнить, что ESP32 имеет свои собственные особенности и функции для работы с ESP-NOW, которые мы рассмотрим в следующей статье.

Основные функции ESP-NOW:

ESP-NOW предоставляет различные функции для настройки и использования протокола:

  1. esp_now_init(): Функция инициализации ESP-NOW. Необходимо предварительно инициализировать Wi-Fi до инициализации ESP-NOW. Возвращает 0 в случае успешной инициализации.
  2. esp_now_set_self_role(role): Функция установки роли устройства в сети ESP-NOW. Роль может быть: ESP_NOW_ROLE_IDLE = 0, ESP_NOW_ROLE_CONTROLLER, ESP_NOW_ROLE_SLAVE, ESP_NOW_ROLE_COMBO, ESP_NOW_ROLE_MAX.
  3. esp_now_add_peer(uint8 mac_addr, uint8 role, uint8 channel, uint8 key, uint8 key_len): Эта функция используется для сопряжения устройства с другим устройством, которое будет являться партнером по обмену данными.
  4. esp_now_send(uint8 mac_address, uint8 data, int len): Функция отправки данных по протоколу ESP-NOW на указанное устройство с определенной длиной данных.
  5. esp_now_register_send_cb(): Функция регистрации callback-функции, которая вызывается после отправки данных. Это позволяет прикладному уровню получить информацию о статусе доставки отправленного пакета.
  6. esp_now_register_rcv_cb(): Функция регистрации callback-функции, которая вызывается при приеме данных по протоколу ESP-NOW. При получении данных можно обрабатывать информацию в соответствии с логикой приложения.

Пример кода для получения MAC-адреса устройства ESP8266 в Arduino IDE.

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

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/173/vvedenie-v-esp-now-besprovodnaya-svyaz-na--esp8266.html
*/

#include <ESP8266WiFi.h>
void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.print("MAC-адрес устройства: ");
  Serial.println(WiFi.macAddress());
}
void loop() {
  // Ваш код основного цикла (если требуется)
}

Этот код использует функцию WiFi.macAddress(), которая возвращает MAC-адрес устройства ESP8266 в виде строки. Затем он выводит этот адрес в монитор последовательного порта. Вы можете открыть монитор последовательного порта, чтобы увидеть MAC-адрес вашего устройства после загрузки этого кода на ESP8266.

Пример кода для получения MAC-адреса устройства ESP8266 в Arduino IDE.

Пример кода с пояснениями передачи данных по протоколу ESP-NOW.

Пример кода с пояснениями передачи данных по протоколу ESP-NOW.

Пример кода для отправителя (передачи данных):

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/173/vvedenie-v-esp-now-besprovodnaya-svyaz-na--esp8266.html
*/

#include <ESP8266WiFi.h>
#include <espnow.h>
// Замените на MAC-адрес получателя (получателя)
uint8_t receiverMacAddress[] = {0x84, 0xF3, 0xEB, 0x25, 0xD8, 0x92};
// Структура для передачи данных
typedef struct struct_message {
  char a[42];
  int b;
  float c;
  String d;
  bool e;
} struct_message;
// Создаем экземпляр структуры struct_message с именем myData
struct_message myData;
unsigned long lastTime = 0;
unsigned long timerDelay = 2000; // Интервал между отправками данных
// Callback-функция, которая вызывается после отправки данных
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("Статус отправки пакета: ");
  if (sendStatus == 0) {
    Serial.println("Успешно");
  } else {
    Serial.println("Ошибка");
  }
}
void setup() {
  Serial.begin(115200);
  // Инициализируем Wi-Fi как режим Station
  WiFi.mode(WIFI_STA);
  // Инициализируем ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Ошибка инициализации ESP-NOW");
    return;
  }
  // Устанавливаем роль отправителя
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  // Регистрируем callback-функцию OnDataSent для отслеживания статуса отправки
  esp_now_register_send_cb(OnDataSent);
  // Добавляем получателя (партнера) по указанному MAC-адресу
  esp_now_add_peer(receiverMacAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
  if ((millis() - lastTime) > timerDelay) {
    // Заполняем структуру myData данными, которые хотим передать
    strcpy(myData.a, "Это массив символов char");
    myData.b = random(1, 20);
    myData.c = 1.2;
    myData.d = "Hello";
    myData.e = false;
    // Отправляем структуру myData по протоколу ESP-NOW на указанный MAC-адрес получателя
    esp_now_send(receiverMacAddress, (uint8_t *)&myData, sizeof(myData));
    lastTime = millis();
  }
}

Пояснения кода отправителя:

  1. Мы используем библиотеку ESP8266WiFi.h для работы с Wi-Fi и espnow.h для работы с протоколом ESP-NOW. Убедитесь, что эти библиотеки установлены в вашем Arduino IDE.
  2. В этом примере мы определяем MAC-адрес получателя (receiverMacAddress), куда мы хотим отправлять данные. Замените этот адрес на MAC-адрес вашего получателя.

 Замените этот адрес на MAC-адрес вашего получателя.

  1. Создаем структуру struct_message, которая будет использоваться для передачи данных. В этом примере она содержит несколько разных типов данных (char[], int, float, String и bool), чтобы показать, как передавать различные данные.
  2. Инициализируем ESP-NOW с помощью функции esp_now_init(). Если инициализация прошла успешно, продолжаем выполнять программу, в противном случае выводим сообщение об ошибке.
  3. Устанавливаем роль отправителя с помощью функции esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER) и регистрируем callback-функцию OnDataSent, которая будет вызываться после отправки данных.
  4. Мы добавляем получателя (партнера) с помощью функции esp_now_add_peer(), указывая его MAC-адрес, роль (здесь устанавливаем роль ESP_NOW_ROLE_SLAVE для получателя), канал (в данном случае - 1), ключ (NULL) и длину ключа (0).
  5. В функции loop() мы проверяем, прошло ли достаточно времени для отправки следующего пакета данных. Затем мы заполняем структуру myData данными, которые хотим передать, и отправляем ее с помощью функции esp_now_send() на указанный MAC-адрес получателя.

Теперь рассмотрим пример кода для получателя (приема данных):

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/173/vvedenie-v-esp-now-besprovodnaya-svyaz-na--esp8266.html
*/

#include <ESP8266WiFi.h>
#include <espnow.h>
// Структура для приема данных
typedef struct struct_message {
  char a[42];
  int b;
  float c;
  String d;
  bool e;
} struct_message;
// Создаем экземпляр структуры struct_message с именем receivedData
struct_message receivedData;
// Callback-функция, которая вызывается при приеме данных
void OnDataRecv(uint8_t *mac, uint8_t *data, uint8_t len) {
  memcpy(&receivedData, data, sizeof(receivedData));
  Serial.print("Получены данные: ");
  Serial.print("char = ");
  Serial.print(receivedData.a);
  Serial.print(", int = ");
  Serial.print(receivedData.b);
  Serial.print(", float = ");
  Serial.print(receivedData.c);
  Serial.print(", String = ");
  Serial.print(receivedData.d);
  Serial.print(", bool = ");
  Serial.println(receivedData.e);
}
void setup() {
  Serial.begin(115200);
  // Инициализируем Wi-Fi как режим Station
  WiFi.mode(WIFI_STA);
  // Инициализируем ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Ошибка инициализации ESP-NOW");
    return;
  }
  // Устанавливаем роль получателя
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  // Регистрируем callback-функцию OnDataRecv для обработки принятых данных
  esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
  // Ваш код основного цикла (если требуется)
}

Пояснения кода получателя:

  1. Используем библиотеку ESP8266WiFi.h для работы с Wi-Fi и espnow.h для работы с протоколом ESP-NOW.
  2. Определяем структуру struct_message, такую же, как у отправителя, чтобы правильно принять данные.
  3. Инициализируем ESP-NOW с помощью функции esp_now_init(). Если инициализация прошла успешно, мы продолжаем выполнять программу, в противном случае выводим сообщение об ошибке.
  4. Устанавливаем роль получателя с помощью функции esp_now_set_self_role(ESP_NOW_ROLE_SLAVE).
  5. Регистрируем callback-функцию OnDataRecv, которая будет вызываться при приеме данных. В этой функции копируем принятые данные в структуру receivedData и выводим их в монитор последовательного порта.

Регистрируем callback-функцию OnDataRecv, которая будет вызываться при приеме данных. В этой функции копируем принятые данные в структуру receivedData и выводим их в монитор последовательного порта.

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

При загрузке кода на передатчик и получатель их MAC-адреса должны быть различными.

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

После загрузки кода на оба устройства, откройте монитор последовательного порта на обоих, чтобы видеть данные, которые передаются и принимаются. Каждые 2 секунды (или согласно timerDelay в коде передатчика) вы должны видеть информацию о принятых данных на мониторе последовательного порта получателя.

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

Заключение:

В данной статье мы рассмотрели применение протокола ESP-NOW на платформе ESP8266 для обеспечения беспроводной связи между устройствами. Рассмотрели основные принципы работы ESP-NOW, преимущества и ограничения, а также шаги по настройке окружения для использования протокола. Также подробно разобрали ключевые функции ESP-NOW для передачи данных, включая инициализацию, установку роли устройства, сопряжение с другими устройствами, отправку данных и обратную связь об отправке.

В данной статье мы рассмотрели применение протокола ESP-NOW на платформе ESP8266

Важно отметить, что в данной статье мы сфокусировались исключительно на использовании ESP-NOW на платформе ESP8266. Если у вас возникнет необходимость работать с протоколом на платформе ESP32, помните, что код и функции для ESP32 могут отличаться. Мы обязательно рассмотрим работу с ESP-NOW на ESP32 в следующей статье, где проведем подробный анализ примеров кода и функций для этой платформы.

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

Мы надеемся, что данная статья помогла вам освоить протокол ESP-NOW на платформе ESP8266 и вдохновила на создание своих беспроводных проектов. Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей следующей статье, где мы рассмотрим работу с ESP-NOW на платформе ESP32 и подробно рассмотрим примеры кода для этой платформы.

Спасибо за внимание и удачи в ваших проектах с использованием ESP-NOW!

Поддержать.
Также, если вы хотите поддержать мою работу и помочь мне создавать ещё больше полезных материалов, вы можете сделать донат на моём канале на Boosty. Это поможет мне продолжать работать над новыми уроками и материалами для вас.
По QR-коду
Поддержать через Юмани
Спасибо за ваш интерес к моим проектам и урокам, я надеюсь, что они будут для вас полезными и интересными.


Понравилась статья Введение в ESP-NOW: Беспроводная связь на ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!

]]>
Типы данных в Arduino IDE и их вес (размер) в байтах. http://arduino-tex.ru/news/172/tipy-dannyh-v-arduino-ide-i-ih-ves-razmer-v-baitah.html Константин Portal-PK 2023-07-20T21:32:24+03:00 Arduino IDE - это интегрированная среда разработки (IDE), которая используется для программирования микроконтроллеров Arduino. В Arduino IDE используются различные типы данных, которые определяют, какой тип информации можно хранить и обрабатываеть микроконтроллером.

Типы данных и их вес (размер) в байтах

Типы данных и их вес (размер) в байтах:

  1. int:
    • Описание: Тип данных int (integer) представляет целые числа со знаком.
    • Размер: 2 байта (от -32,768 до 32,767).
  2. unsigned int:
    • Описание: Тип данных unsigned int представляет целые числа без знака.
    • Размер: 2 байта (от 0 до 65,535).
  3. long:
    • Описание: Тип данных long представляет длинные целые числа со знаком.
    • Размер: 4 байта (от -2,147,483,648 до 2,147,483,647).
  4. unsigned long:
    • Описание: Тип данных unsigned long представляет длинные целые числа без знака.
    • Размер: 4 байта (от 0 до 4,294,967,295).
  5. float:
    • Описание: Тип данных float представляет числа с плавающей точкой одинарной точности.
    • Размер: 4 байта (от -3.4028235E+38 до 3.4028235E+38).
  6. double:
    • Описание: Тип данных double представляет числа с плавающей точкой двойной точности.
    • Размер: 8 байт (от -1.7976931348623157E+308 до 1.7976931348623157E+308).
  7. uint8_t:
    • Описание: Тип данных uint8_t представляет беззнаковые целые числа размером 8 бит (1 байт).
    • Размер: 1 байт (от 0 до 255).
  8. int8_t:
    • Описание: Тип данных int8_t представляет целые числа со знаком размером 8 бит (1 байт).
    • Размер: 1 байт (от -128 до 127).
  9. uint16_t:
    • Описание: Тип данных uint16_t представляет беззнаковые целые числа размером 16 бит (2 байта).
    • Размер: 2 байта (от 0 до 65,535).
  10. int16_t:
    • Описание: Тип данных int16_t представляет целые числа со знаком размером 16 бит (2 байта).
    • Размер: 2 байта (от -32,768 до 32,767).
  11. uint32_t:
    • Описание: Тип данных uint32_t представляет беззнаковые целые числа размером 32 бита (4 байта).
    • Размер: 4 байта (от 0 до 4,294,967,295).
  12. int32_t:
    • Описание: Тип данных int32_t представляет целые числа со знаком размером 32 бита (4 байта).
    • Размер: 4 байта (от -2,147,483,648 до 2,147,483,647).
  13. uint64_t:
    • Описание: Тип данных uint64_t представляет беззнаковые целые числа размером 64 бита (8 байт).
    • Размер: 8 байт (от 0 до 18,446,744,073,709,551,615).
  14. int64_t:
    • Описание: Тип данных int64_t представляет целые числа со знаком размером 64 бита (8 байт).
    • Размер: 8 байт (от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807).
  15. boolean:
    • Описание: Тип данных boolean представляет логические значения true (истина) или false (ложь).
    • Размер: 1 байт (обычно хранит 0 для false и 1 для true, но фактически использует только 1 бит).
  16. char:
    • Описание: Тип данных char представляет одиночные символы или небольшие целые числа (хранит ASCII-код символа).
    • Размер: 1 байт (от -128 до 127 или от 0 до 255, в зависимости от использования со знаком или без).
  17. byte:
    • Описание: Тип данных byte представляет беззнаковые целые числа размером 8 бит (1 байт).
    • Размер: 1 байт (от 0 до 255).

Пример кода:

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/171/osnovnye-ponyatiya-protokola-udp-primer-raboty-udp-s-esp32-i.html
*/
void setup() {
  Serial.begin(9600);
  int myInt = 12345;
  unsigned int myUInt = 65535;
  long myLong = 987654321;
  unsigned long myULong = 4294967295;
  float myFloat = 3.14;
  double myDouble = 2.71828;
  uint8_t myUint8 = 255;
  int8_t myInt8 = -128;
  uint16_t myUint16 = 65535;
  int16_t myInt16 = -32768;
  uint32_t myUint32 = 4294967295;
  int32_t myInt32 = -2147483648;
  uint64_t myUint64 = 18446744073709551615;
  int64_t myInt64 = -9223372036854775808;
  boolean myBoolean = true;
  char myChar = 'A';
  byte myByte = 200;
  Serial.println("Size of int: " + String(sizeof(myInt)) + " bytes");
  Serial.println("Size of unsigned int: " + String(sizeof(myUInt)) + " bytes");
  Serial.println("Size of long: " + String(sizeof(myLong)) + " bytes");
  Serial.println("Size of unsigned long: " + String(sizeof(myULong)) + " bytes");
  Serial.println("Size of float: " + String(sizeof(myFloat)) + " bytes");
  Serial.println("Size of double: " + String(sizeof(myDouble)) + " bytes");
  Serial.println("Size of uint8_t: " + String(sizeof(myUint8)) + " bytes");
  Serial.println("Size of int8_t: " + String(sizeof(myInt8)) + " bytes");
  Serial.println("Size of uint16_t: " + String(sizeof(myUint16)) + " bytes");
  Serial.println("Size of int16_t: " + String(sizeof(myInt16)) + " bytes");
  Serial.println("Size of uint32_t: " + String(sizeof(myUint32)) + " bytes");
  Serial.println("Size of int32_t: " + String(sizeof(myInt32)) + " bytes");
  Serial.println("Size of uint64_t: " + String(sizeof(myUint64)) + " bytes");
  Serial.println("Size of int64_t: " + String(sizeof(myInt64)) + " bytes");
  Serial.println("Size of boolean: " + String(sizeof(myBoolean)) + " bytes");
  Serial.println("Size of char: " + String(sizeof(myChar)) + " bytes");
  Serial.println("Size of byte: " + String(sizeof(myByte)) + " bytes");
}
void loop() {
  // Your code here
}

Типы данных и их вес (размер) в байтах

Типы данных.

Тип данных Вес (размер) в байтах Диапазон значений
int 2 -32,768 до 32,767
unsigned int 2 0 до 65,535
long 4 -2,147,483,648 до 2,147,483,647
unsigned long 4 0 до 4,294,967,295
float 4 -3.4028235E+38 до 3.4028235E+38
double 8 -1.7976931348623157E+308 до 1.7976931348623157E+308
uint8_t 1 0 до 255
int8_t 1 -128 до 127
uint16_t 2 0 до 65,535
int16_t 2 -32,768 до 32,767
uint32_t 4 0 до 4,294,967,295
int32_t 4 -2,147,483,648 до 2,147,483,647
uint64_t 8 0 до 18,446,744,073,709,551,615
int64_t 8 -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
boolean 1 true (истина) или false (ложь)
char 1 -128 до 127 или 0 до 255
byte 1 0 до 255

Примечание:

Размеры типов данных, как указано выше, верны для микроконтроллеров AVR (например, Arduino Uno) и многих других платформ на базе AVR. Если вы используете Arduino на базе других микроконтроллеров (например, ARM) или другой версии Arduino IDE, размеры типов данных могут отличаться.

Заключение:

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


Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!


Понравилась статья Типы данных в Arduino IDE и их вес (размер) в байтах? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
Основные понятия протокола UDP. Пример работы UDP с ESP32 и ESP8266. http://arduino-tex.ru/news/171/osnovnye-ponyatiya-protokola-udp-primer-raboty-udp-s-esp32-i.html Константин Portal-PK 2023-07-19T21:28:00+03:00 Протокол UDP (User Datagram Protocol) – это простой протокол транспортного уровня в компьютерных сетях, который предоставляет возможность обмена независимыми пакетами данных (дейтаграммами) между устройствами. Протокол UDP является легковесным и обеспечивает минимальную надстройку над сетевым уровнем. В отличие от протокола TCP, UDP не гарантирует доставку пакетов в правильном порядке или проверку целостности данных. Он просто отправляет дейтаграммы на удаленное устройство и не ожидает подтверждения доставки или повторной передачи в случае потери пакета.

основные понятия протокола UDP и предоставим примеры кода работы с UDP на микроконтроллерах ESP32 и ESP8266.

В этом уроке мы рассмотрим основные понятия протокола UDP и предоставим примеры кода работы с UDP на микроконтроллерах ESP32 и ESP8266.

Особенности протокола UDP.

UDP работает на более низком уровне сетевой модели, чем протокол TCP (Transmission Control Protocol). В отличие от TCP, UDP не обеспечивает гарантированную доставку, установление соединения или контроль над порядком передачи пакетов. Вместо этого он предоставляет простую механизм отправки небольших пакетов данных между устройствами в сети.

UDP работает на более низком уровне сетевой модели, чем протокол TCP (Transmission Control Protocol).

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

Основные особенности протокола UDP:

  • Нестабильность: UDP не обеспечивает гарантии доставки пакетов или порядка их доставки. Это делает его более быстрым, чем TCP, но также менее надежным. При передаче данных через UDP следует учитывать возможность потери пакетов.
  • Без установления соединения: UDP не требует установления и разрыва соединения между отправителем и получателем. Каждый пакет рассматривается как отдельное сообщение.
  • Отсутствие заголовка UDP: В отличие от протокола TCP, который имеет сложный заголовок с различными управляющими флагами и метаданными, UDP не имеет отдельного заголовка. Вместо этого, каждая дейтаграмма содержит только минимальную информацию, необходимую для маршрутизации и доставки данных, такую как порты отправителя и получателя, длина пакета. Это делает UDP более простым и легковесным протоколом.
  • Применение: UDP широко используется во многих приложениях, где высокая скорость передачи данных важнее гарантированной доставки. Примеры включают видео- и аудиопотоки в реальном времени, онлайн-игры, протоколы потокового видео (например, UDP-based MPEG Transport Stream).

Отсутствие заголовка UDP: В отличие от протокола TCP, который имеет сложный заголовок

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

Подготовка Arduino IDE для работы с ESP32 и ESP8266.

Для работы с микроконтроллерами ESP32 и ESP8266 в среде разработки Arduino IDE, вам потребуется установить соответствующие платформы и библиотеки. Вот шаги по подготовке среды разработки Arduino IDE для работы с ESP32 и ESP8266:

Подготовка среды для работы с ESP32:

Установите Arduino IDE:

Добавьте платформу ESP32 в Arduino IDE:

  • Запустите Arduino IDE.
  • В меню "Файл (File)" выберите "Настройки (Preferences)".
  • В поле "Дополнительные ссылки для менеджера плат (Additional Boards Manager URLs)" добавьте следующую ссылку:
https://dl.espressif.com/dl/package_esp32_index.json
  • Нажмите "OK".

Дополнительные ссылки для менеджера платы

Установите платформу ESP32:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "Менеджер плат (Boards Manager)".
  • В поисковой строке введите "esp32".
  • Установите последнюю версию пакета "esp32" от Espressif Systems.

Выберите плату ESP32 в Arduino IDE:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "ESP32 Arduino" > выберите модель ESP32, которую вы используете (например, "ESP32 Dev Module").

Теперь ваша среда разработки Arduino IDE настроена для работы с микроконтроллерами ESP32.

Подготовка среды для работы с ESP8266:

Установите Arduino IDE:

Добавьте платформу ESP8266 в Arduino IDE:

  • Запустите Arduino IDE.
  • В меню "Файл (File)" выберите "Настройки (Preferences)".
  • В поле "Дополнительные ссылки для менеджера плат (Additional Boards Manager URLs)" добавьте следующую ссылку:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Нажмите "OK".

программировать NodeMCU в среде Arduino IDE

Установите платформу ESP8266:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "Менеджер плат (Boards Manager)".
  • В поисковой строке введите "esp8266".
  • Установите последнюю версию пакета "esp8266" от ESP8266 Community.

Выберите плату ESP8266 в Arduino IDE:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "Generic ESP8266 Module".

Теперь ваша среда разработки Arduino IDE настроена для работы с микроконтроллерами ESP8266.

После завершения этих шагов вы сможете разрабатывать и загружать программы на микроконтроллеры ESP32 и ESP8266 через Arduino IDE. Обратите внимание, что для каждого проекта вам также потребуется правильно подключить ESP32 или ESP8266 к компьютеру для прошивки.

Пример работы UDP на ESP32.

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/171/osnovnye-ponyatiya-protokola-udp-primer-raboty-udp-s-esp32-i.html
*/

#include <WiFi.h>
#include <WiFiUdp.h>

const char* ssid = "Ваш_SSID";             // Ваш SSID
const char* password = "Ваш_пароль";       // Ваш пароль
const char* udpServerIP = "IP_получателя"; // IP получателя
const int udpServerPort = 8888;            // Порт получателя

WiFiUDP udp;
String deviceName = "ESP32";  // Имя устройства, которое будет добавлено к отправляемому сообщению

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Подключение к WiFi...");
  }
  Serial.println("Подключено к WiFi!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  udp.begin(udpServerPort); // Инициализация UDP для приема данных
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    // Передача данных по UDP
    udp.beginPacket(udpServerIP, udpServerPort);
    udp.printf("[%s] Привет, это сообщение от %s!", deviceName.c_str(), deviceName.c_str());
    udp.endPacket();

    // Прием данных по UDP
    int packetSize = udp.parsePacket();
    if (packetSize) {
      char incomingPacket[255];
      int len = udp.read(incomingPacket, 255);
      if (len > 0) {
        incomingPacket[len] = 0;
        Serial.printf("Получено сообщение: %s\n", incomingPacket);
      }
    }
  }
  delay(1000);
}


Пример работы UDP на ESP8266.

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/171/osnovnye-ponyatiya-protokola-udp-primer-raboty-udp-s-esp32-i.html
*/

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char* ssid = "Ваш_SSID";             // Ваш SSID
const char* password = "Ваш_пароль";       // Ваш пароль
const char* udpServerIP = "IP_получателя"; // IP получателя
const int udpServerPort = 8888;            // Порт получателя

WiFiUDP udp;
String deviceName = "ESP8266";  // Имя устройства, которое будет добавлено к отправляемому сообщению

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Подключение к WiFi...");
  }
  Serial.println("Подключено к WiFi!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  udp.begin(udpServerPort); // Инициализация UDP для приема данных
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    // Передача данных по UDP
    udp.beginPacket(udpServerIP, udpServerPort);
    udp.printf("[%s] Привет, это сообщение от %s!", deviceName.c_str(), deviceName.c_str());
    udp.endPacket();

    // Прием данных по UDP
    int packetSize = udp.parsePacket();
    if (packetSize) {
      char incomingPacket[255];
      int len = udp.read(incomingPacket, 255);
      if (len > 0) {
        incomingPacket[len] = 0;
        Serial.printf("Получено сообщение: %s\n", incomingPacket);
      }
    }
  }
  delay(1000);
}

Код для ESP32 и ESP8266 примерно одинаковый, так как оба микроконтроллера используют библиотеку WiFiUdp для работы с UDP. В обоих примерах мы подключаемся к Wi-Fi, передаем сообщение по UDP и при необходимости получаем данные. В примерах кода переменная deviceName определяет имя микроконтроллера и будет добавляться к отправляемому сообщению. Это позволит вам легко определить, с какого устройства было отправлено каждое сообщение.

Код для ESP32 и ESP8266 примерно одинаковый, так как оба микроконтроллера используют библиотеку WiFiUdp для работы с UDP.

Чтобы использовать эти примеры, замените "Ваш_SSID", "Ваш_пароль" и "IP_получателя" на соответствующие значения вашей сети и устройства. Вы также можете изменить порт udpServerPort на любой другой доступный порт, если требуется.

В этих примерах кода я добавил переменную deviceName, которая определяет имя микроконтроллера и будет добавляться к отправляемому сообщению.

Теперь код отправляет сообщение с указанием имени устройства, что позволяет идентифицировать отправителя каждого сообщения. Это делает работу с протоколом UDP на ESP32 и ESP8266 более удобной и понятной.

Это делает работу с протоколом UDP на ESP32 и ESP8266 более удобной и понятной.

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

В этой уроке мы рассмотрели основные понятия протокола UDP и предоставили примеры кода для работы с UDP на микроконтроллерах ESP32 и ESP8266. UDP представляет собой простой и эффективный способ передачи данных в приложениях, где быстродействие важнее надежности.


Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!


Удачи в вашем эксперименте с протокола UDP!

Понравился урок. Основные понятия протокола UDP. Пример работы UDP с ESP32 и ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Шина OneWire: Основные понятия и сканирование устройств. http://arduino-tex.ru/news/170/shina-onewire-osnovnye-ponyatiya-i-skanirovanie-ustroistv.html Константин Portal-PK 2023-07-14T12:53:01+03:00 Шина OneWire - это простой и эффективный протокол связи, который позволяет подключать и взаимодействовать с различными устройствами посредством одного провода данных и одного провода заземления. Он широко используется во многих проектах, особенно в системах автоматизации и умного дома. Давайте рассмотрим некоторые основные аспекты шины OneWire.

Основные принципы работы шина OneWire.

Основные принципы работы шина OneWire.

Шина OneWire использует один провод для передачи данных и питания устройств. Устройства на шине подключаются последовательно, и каждое устройство имеет уникальный идентификатор (ROM-код), по которому его можно адресовать и взаимодействовать с ним.

Основные принципы работы шина OneWire.

Использование шины OneWire.

Шина OneWire нашла широкое применение во многих областях, включая:

  • Измерение температуры: Цифровые датчики температуры, такие как DS18B20 и DS18S20, используют протокол OneWire для связи с микроконтроллерами и другими устройствами.
  • Умный дом и автоматизация: Шина OneWire позволяет подключать различные устройства в умных домашних системах, такие как датчики температуры, датчики влажности, считыватели ключей и другие устройства.

Умный дом и автоматизация: Шина OneWire позволяет подключать различные устройства в умных домашних системах


Количество подключаемых устройств.

Теоретически, шина OneWire позволяет подключать до 255 устройств на одну шину. Однако практическое количество устройств может быть ограничено различными факторами, такими как потребление энергии, ёмкость шины и длина шины. Рекомендуется ограничивать количество подключаемых устройств для обеспечения стабильности и надежности передачи данных.

Теоретически, шина OneWire позволяет подключать до 255 устройств на одну шину.

Питание устройств на шине OneWire.

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

Питание устройств на шине OneWire.

Паразитное подключение питания (Parasitic Power) - это метод питания устройств, подключенных по шине OneWire, путем использования только провода данных без дополнительного провода питания. Вместо того, чтобы иметь отдельный провод для питания, устройства получают энергию из сигнального провода данных.

Паразитное подключение питания (Parasitic Power) - это метод питания устройств, подключенных по шине OneWire

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

Преимущества паразитного подключения питания включают:

  1. Упрощенная схема подключения: По сравнению с традиционным подключением, где требуется отдельный провод питания, паразитное подключение позволяет упростить схему подключения устройств.
  2. Меньшее количество проводов: При использовании паразитного подключения требуется только один провод данных и один провод заземления, что особенно полезно при ограниченном количестве доступных пинов на микроконтроллере или другом устройстве.

Преимущества паразитного подключения питания включают

Однако следует учитывать некоторые ограничения и особенности паразитного подключения питания:

  • Ограниченное питание: В режиме паразитного подключения, устройства получают ограниченное количество энергии, которое остается после передачи сигнала данных. Это может оказывать влияние на производительность некоторых устройств, особенно если они потребляют большое количество энергии.
  • Ограничения длины провода: При использовании паразитного подключения, длина провода может оказывать влияние на эффективность передачи питания. Большая длина провода может привести к падению напряжения и ухудшению питания устройств.
  • Поддержка устройств: Не все устройства OneWire поддерживают паразитное подключение питания. Перед использованием паразитного подключения следует проверить документацию и спецификации конкретного устройства, чтобы убедиться в его совместимости.

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

Длина проводов.

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

  1. Для большинства устройств, включая датчики температуры (например, DS18B20), максимальная длина проводов составляет около 100 метров. Это позволяет вам располагать устройства на значительном расстоянии от вашего микроконтроллера или центральной системы.
  2. Если вы планируете подключать более одного устройства, рекомендуется использовать разветвители шины OneWire. Это позволяет вам создать сеть устройств с несколькими ветвями и уменьшить общую длину проводов.
  3. Если вам требуется большая длина проводов, более 100 метров, рекомендуется использовать усилители сигнала или усилители питания для компенсации потерь сигнала на больших расстояниях.

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

При использовании шины OneWire, длина проводов может оказывать влияние на стабильность и качество передачи данных.

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

  • Купить ESP32 можно на AliExpress.
  • Купить Arduino Uno можно на AliExpress.
  • Купить Датчик температуры DS18B20 можно на AliExpress.

Пример сканера устройств на шине OneWire.

Пример сканера устройств на шине OneWire.

Пример кода для сканирования устройств на шине OneWire с использованием библиотеки OneWire:

/*
   Сайт автора https://arduino-tex.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html
   Страница урока https://arduino-tex.ru/news/170/shina-onewire-osnovnye-ponyatiya-i-skanirovanie-ustroistv.html
*/
#include <OneWire.h>
// Пин, к которому подключена шина OneWire
const int oneWirePin = 2;
OneWire oneWire(oneWirePin);
byte deviceAddress[8];  // Declare the deviceAddress array
void setup() {
  Serial.begin(115200);
  scanDevices();
}
void loop() {
  // В этом примере кода мы выполняем сканирование устройств только один раз в функции setup(),
  // но вы можете изменить логику и вызывать scanDevices() в любое время по вашему усмотрению.
}
void scanDevices() {
  byte deviceCount = 0;
  Serial.println("Searching for OneWire devices...");
  // Старт поиска устройств на шине OneWire
  oneWire.reset_search();
  // Пока есть устройства на шине
  while (oneWire.search(deviceAddress)) {
    deviceCount++;
    Serial.print("Device ");
    Serial.print(deviceCount);
    Serial.print(" - Address:");
    // Выводим адрес устройства в шестнадцатеричном формате
    for (byte i = 0; i < 8; i++) {
      Serial.write(' ');
      if (deviceAddress[i] < 16) {
        Serial.print("0");
      }
      Serial.print(deviceAddress[i], HEX);
    }
    Serial.println();
  }
  Serial.print("Found ");
  Serial.print(deviceCount);
  Serial.println(" OneWire devices.");
}

Пример сканера устройств на шине OneWire.

Вывод:

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

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Удачи в вашем эксперименте с шиной OneWire и Arduino!

Понравился урок. Шина OneWire: Основные понятия и сканирование устройств? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Сравнение дисплеев NEXTION NX3224F028 и DWIN DMG32240F028_02WTR. http://arduino-tex.ru/news/169/sravnenie-displeev-nextion-nx3224f028-i-dwin-dmg32240f028_02wtr.html Константин Portal-PK 2023-07-07T07:21:43+03:00 Дисплеи NEXTION NX3224F028 и DWIN DMG32240F028_02WTR представляют собой 2.8-дюймовые сенсорные HMI дисплеи с разрешением 320x240 пикселей. Оба дисплея обладают уникальными характеристиками и функциональностью, которые заслуживают сравнения для определения наилучшего варианта.

Цель данного исследования - провести сравнительный анализ характеристик и функциональности дисплеев NEXTION NX3224F028 и DWIN DMG32240F028_02WTR. Мы рассмотрим технические характеристики: память, процессор, сенсор, а также наличии и стоимости аксессуаров. Также, для объективности, создадим единый интерфейс на обоих дисплеях, с помощью кторого будем управлять подсветкой на адресных светодиодах ws2812b. В интерфейсе предусмотрено 8 режимов и 8 цветов, которые можно будет изменять.

Результаты сравнения помогут сделать обоснованный выбор и выбрать оптимальный вариант для дальнейшего использования.

Купить:

Технические характеристики дисплеев NEXTION NX3224F028 и DWIN DMG32240F028_02WTR.

NEXTION NX3224F028

Давайте сравним технические характеристики дисплеев NEXTION NX3224F028 и DWIN DMG32240F028_02WTR:

 DWIN DMG32240F028_02WTR

Размер и разрешение:

  • NEXTION: 2.8'', разрешение 320x240 пикселей.
  • DWIN: 2.8'', разрешение 320x240 пикселей.

Матрица и сенсор:

  • Оба дисплея используют TFT TN матрицу.
  • Оба оборудованы резистивным (RTP) сенсором.

Число цветов и яркость:

  • NEXTION: 65K цветов, яркость 300nit.
  • DWIN: 262K цветов, яркость 250nit.

Память и процессор:

  • NEXTION: Flash - 4 Mb, RAM - 3,5 Kb, MCU - 64 MHz.
  • DWIN: Flash - 8 Mb, RAM - 32 Kb, MCU - 250 MHz.

Периферийные интерфейсы:

  • NEXTION: UART (TTL).
  • DWIN: 22 IO, 3 UART, 1 CAN, 5 AD, 2 PWM.

Питание:

  • NEXTION: Рабочее напряжение 5 В, диапазон 4.5 - 6 В.
  • DWIN: Рабочее напряжение 5 В, диапазон 3.6 - 5.5 В.

Потребление энергии:

  • NEXTION: Потребляемый ток при 100% яркости до 105 mA.
  • DWIN: Потребляемый ток при 100% яркости до 110 mA.

Программное обеспечение:

  • NEXTION: Поставляется с программным обеспечением Nextion Editor. Только на Английском языке.
  • DWIN: DGUSII / TA. Поддерживает Русский язык, перевод от ArduBlock DGUS V7.624.

Аксессуары и стоимость:

  • NEXTION: Предоставляются бесплатные аксессуары.
  • DWIN: Большое разнообразие дополнительных аксессуаров за дополнительную стоимость US$14,01.

DWIN: Большое разнообразие дополнительных аксессуаров за дополнительную стоимость US$14,01.

Рабочая температура:

  • NEXTION: -20~70℃.
  • DWIN: -10~60℃.

Структура:

  • NEXTION: COB (Chip-on-Board) - это метод монтажа, при котором микросхемы располагаются прямо на плате дисплея. Это обеспечивает компактность и надежность соединений.

NEXTION: COB (Chip-on-Board)

  • DWIN: COF (Chip-on-Film) - это метод монтажа, при котором микросхемы располагаются непосредственно на гибкой пленке, которая связывает дисплейные пиксели. Это обеспечивает гибкость и тонкость конструкции.

DWIN: COF (Chip-on-Film)

При выборе между структурами COB и COF важно учитывать требования вашего проекта, особенности монтажа и конструкции, а также преимущества, которые каждая структура может предложить.

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

Больше информации по техническим характеристикам дисплеев можно найти в следующей таблице:

Технические характеристики дисплеев NEXTION NX3224F028 и DWIN DMG32240F028_02WTR.

Указанные характеристики позволяют более подробно сравнить два дисплея и выбрать наиболее подходящий вариант для вашего проекта.


Создадим два одинаковых проекта на NEXTION NX3224F028 и DWIN DMG32240F028_02WTR.

Давайте разделим процесс создания одинаковых проектов управления подсветкой на адресных светодиодах ws2812b и дисплеях NEXTION NX3224F028, DWIN DMG32240F028_02WTR на несколько шагов:

Создание интерфейса в средах разработки:

  • Для дисплея NEXTION NX3224F028 можно использовать программное обеспечение Nextion Editor, доступное на официальном сайте NEXTION. Воспользуйтесь документацией и руководством пользователя, предоставленными на сайте.

Для дисплея NEXTION NX3224F028 можно использовать программное обеспечение Nextion Editor

  • Для дисплея DWIN DMG32240F028_02WTR можно использовать программное обеспечение DGUSII, доступное на официальном сайте DWIN. Опять же, руководствуйтесь документацией и инструкциями, предоставленными на сайте производителя.

Для дисплея DWIN DMG32240F028_02WTR можно использовать программное обеспечение DGUSII

Подключение электроники по схеме:

  • Следуйте схеме подключения. Согласно которой нужно подключить WeMos D1, дисплей и адресные светодиоды ws2812b.
  • Для дисплея DMG32240F028_02WTR схема подключения будет такой.

Для дисплея DMG32240F028_02WTR схема подключения будет такой.

  • Схема для NX3224F028 будет незначительно отличаться.

Схема для NX3224F028 будет незначительно отличаться.

Загрузка прошивки на дисплей и на WeMos D1:

  • Следуйте инструкциям, предоставленным средой разработки для каждого дисплея, чтобы загрузить созданную вами прошивку на соответствующий дисплей. Как подготовить карту памяти читайте в статье.
  • Загрузите прошивку на плату WeMos D1. Как это сделать подробно рассмотрено в моем предыдущем проекте.

Загрузите прошивку на плату WeMos D1.

Сравнение и оценка:

  • Теперь, когда оба проекта созданы и загружены, вы можете приступить к сравнению и оценке их работы.

Теперь, когда оба проекта созданы и загружены, вы можете приступить к сравнению и оценке их работы.

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

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

  • Проанализируйте преимущества и недостатки каждого дисплея на основе выполненных проектов.


Результаты сравнения двух дисплеев:

1. DWIN DMG32240F028_02WTR демонстрирует более высокую производительность и более быструю обновляемую картинку на дисплее. Его сенсор также более отзывчивый по сравнению с NEXTION NX3224F028.

2. Среда разработки DGUSII, предоставляемая DWIN, предлагает больше инструментов, чем Nextion Editor. Однако, Nextion Editor более легка в освоении и использовании.

3. Благодаря структуре COF, DMG32240F028_02WTR очень тонкий и можно разместить его в самом небольшом корпусе.

4. Несмотря на то, что заявленная яркость у дисплея NX3224F028 выше, визуально он выглядит более тусклым.

Несмотря на то, что заявленная яркость у дисплея NX3224F028 выше, визуально он выглядит более тусклым.

5. Преимуществом дисплея NEXTION является наличие минимального набора аксессуаров для подключения к внешнему микроконтроллеру, которые идут в комплекте. Для дисплея DWIN требуется дополнительная покупка аксессуаров.

6. Дисплей DMG32240F028_02WTR может использоваться как самостоятельное устройство без использования внешнего микроконтроллера благодаря доступным 22 IO общего назначения, 5 входам с АЦП и 2 пина, поддерживающим ШИМ. Однако программирование происходит на KeilC, что не доступно каждому.

7. Цена DMG32240F028_02WTR значительно ниже. Однако, из-за аксессуаров стоимость отдельного продукта практически сравнима. Если дисплей покупается для масштабного производства без аксессуаров, разница ощутима.

Цена DMG32240F028_02WTR значительно ниже.

Вывод:

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

Вернемся к сравнению NEXTION NX3224F028 и DWIN DMG32240F028_02WTR. Мое мнение заключается в следующем: если вы планируете выполнить небольшой проект и у вас нет времени на изучение среды разработки, то стоит обратить внимание на NX3224F028. Однако, если вы планируете создать мелкосерийное устройство (крупносерийное), то однозначно стоит использовать DWIN DMG32240F028_02WTR. Это позволит вам создать более функциональное устройство и сэкономить финансы.

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


Понравилась статья Сравнение дисплеев NEXTION NX3224F028 и DWIN DMG32240F028_02WTR? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Сканирование устройств на шине I2C с помощью Arduino. http://arduino-tex.ru/news/168/skanirovanie-ustroistv-na-shine-i2c-s-pomoshchyu-arduino.html Константин Portal-PK 2023-07-06T17:00:10+03:00 Шина I2C (Inter-Integrated Circuit) - это протокол связи, который позволяет микроконтроллеру взаимодействовать с различными устройствами, подключенными к одной шине. Шина I2C является одной из наиболее распространенных и удобных способов подключения датчиков, дисплеев и других периферийных устройств к Arduino и другим МК.

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

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

Цель этого урока - научиться сканировать устройства, подключенные к шине I2C, и определять их адреса с помощью Arduino.

На шине I2C можно подключить широкий спектр устройств, включая:

  • Датчики температуры и влажности, такие как датчик BME280 или BMP180.
  • Датчики освещенности, например BH1750.
  • Акселерометры и гироскопы, например MPU-6050.
  • OLED дисплеи (LCD) с контроллером типа SSD1306.
  • Адаптеры расширения портов, такие как MCP23017.
  • Потенциометры и датчики силы нажатия, например ADS1115.
  • Многоканальные аналогово-цифровые преобразователи (ADC), такие как ADS1015.
  • EEPROM-память для хранения данных.
  • Магнитные компасы, например HMC5883L.
  • И многие другие устройства.

На шине I2C можно подключить широкий спектр устройств

Знание адресов подключенных устройств на шине I2C крайне важно для успешного взаимодействия с ними. Каждое устройство на шине I2C имеет уникальный адрес, который необходимо знать, чтобы отправлять и получать данные от него. Пример сканировании шины I2C с использованием Arduino из данного урока, поможет определить адреса подключенных устройств и использовать их в дальнейшей работе.

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

Шаг 1: Подготовка оборудования

Перед тем, как начать, вам понадобятся следующие компоненты:

  • Arduino (любая модель, совместимая с библиотекой Wire).
  • Компьютер с установленной Arduino IDE.
  • Устройства, у которых вы хотите узнать адресс на шине I2C. Убедитесь, что они поддерживают протокол I2C.

Подготовка оборудования

Подключите ваш Arduino к компьютеру с помощью USB-кабеля. Затем подключите устройства к шине I2C на Arduino. Обычно, пины A4 и A5 используются в качестве пинов SDA и SCL соответственно.

Затем подключите устройства к шине I2C на Arduino. Обычно, пины A4 и A5 используются в качестве пинов SDA и SCL соответственно.

Шаг 2: Загрузка (обновить) библиотеку Wire.

В большинстве случаев, библиотека Wire уже поставляется вместе с платами Arduino AVR и должна быть доступна без необходимости дополнительной установки.

Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR

Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR, следуя этим шагам:

  • Откройте Arduino IDE на вашем компьютере.
  • Нажмите на меню "Инструменты" (Tools) в верхней части окна Arduino IDE.
  • Наведите курсор на "Плата" (Board) в выпадающем меню.
  • В появившемся подменю выберите "Плата Arduino AVR" (Arduino AVR Boards).

Пожалуйста, обратите внимание, что указанные инструкции предназначены для Arduino IDE и плат Arduino AVR. Если вы используете другую IDE или другие платы Arduino, процесс установки и наличие библиотек могут незначительно отличаться.

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

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

#include <Wire.h> //библиотека Wire. 

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("I2C Scanner");
}

void loop() {
  byte error, address;
  int devices = 0;

  Serial.println("Scanning...");

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("Device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println();
      devices++;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println();
    }
  }

  if (devices == 0) {
    Serial.println("No I2C devices found");
  } else {
    Serial.println("Scan complete");
  }

  delay(5000);  // Пауза в 5 секунд между сканированиями
}

Шаг 4: Загрузка и запуск кода

  • Подключите Arduino к компьютеру с помощью USB-кабеля.
  • Откройте Arduino IDE и убедитесь, что выбран правильный тип платы и порта в меню "Инструменты" (Tools).

Откройте Arduino IDE и убедитесь, что выбран правильный тип платы и порта в меню "Инструменты" (Tools).

  • Скопируйте код выше в окно Arduino IDE.
  • Нажмите кнопку "Загрузить" (Upload) для загрузки кода на Arduino.

Нажмите кнопку "Загрузить" (Upload) для загрузки кода на Arduino.

  • Откройте монитор порта (Serial Monitor) в Arduino IDE, чтобы просмотреть результаты сканирования.

Откройте монитор порта (Serial Monitor) в Arduino IDE, чтобы просмотреть результаты сканирования.

После загрузки кода, Arduino будет сканировать шину I2C и отображать найденные устройства в мониторе порта. Если устройства обнаружены, их адреса будут выводиться на мониторе порта.

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

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

Удачи в вашем эксперименте с шиной I2C и Arduino!

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился урок. Сканирование устройств на шине I2C с помощью Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Создание дизайна интерфейса для дисплея DWIN без использования графического редактора. http://arduino-tex.ru/news/167/sozdanie-dizaina-interfeisa-dlya-displeya-dwin-bez.html Константин Portal-PK 2023-06-29T08:14:32+03:00 В настоящее время разработка собственного пользовательского устройства стала доступной для широкой аудитории благодаря доступности инструментов и ресурсов в Интернете.

В нашем проекте мы выбрали дисплей DWIN структуры COF размером 2,8 дюйма с резистивным сенсором. Этот дисплей имеет компактные размеры, что делает его идеальным выбором для небольших устройств, где ограниченное пространство является фактором. Кроме того, он обладает хорошей яркостью и контрастностью, что обеспечит четкое отображение информации на экране даже при ярком освещении.


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

Шаг 1: Создаем иконки в генераторе иконок и фонов.

Первым шагом в нашем процессе создания пользовательского устройства является создание иконок с помощью генератора иконок и фонов, доступного на веб-сайте Portal-pk.ru. Для этого перейдите по ссылке

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

E:\Материалы для сайта\Arduino TEX\Проекты\DWIN проекты\#11 Интерфейс на конструкторе

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

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

Шаг 2: Создание иконок для режимов управления подсветкой.

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

Шаг 2: Создание иконок для режимов управления подсветкой.

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

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

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

Шаг 3: Создание иконок для переключения цвета подсветки

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

Шаг 3: Создание иконок для переключения цвета подсветки

Созданные иконки будут помогать пользователям быстро определить выбранный цвет подсветки. Цветные круги в центре каждой иконки явно указывают на цвет, который будет использоваться в подсветке, делая процесс выбора цвета простым и интуитивно понятным.

Созданные иконки будут помогать пользователям быстро определить выбранный цвет подсветки.

Шаг 4: Создание плашек с надписями для заголовков страниц

Для улучшения визуального вида нашего пользовательского устройства мы создадим плашки с надписями для заголовков страниц "Режим" и "Цвет". Это поможет организовать информацию на экране и сделать его более читаемым и понятным для пользователей.

Шаг 4: Создание плашек с надписями для заголовков страниц

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

выравнивание элементов с помощью неразрывных пробелов (html пробел nbsp).

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

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

Шаг 5: Создание интерфейса для дисплея DWIN в среде DGUS.

Теперь, имея готовые графические элементы, такие как иконки, плашки и фон, мы переходим к созданию интерфейса для дисплея DWIN в среде разработки DGUS. Если вы не знакомы с этой средой, не волнуйтесь, в разделе сайта вы можете найти уроки, которые помогут вам освоить основы работы с DGUS.

DGUS (DWIN Graphic Utilized Software) - это среда разработки, специально предназначенная для создания пользовательского интерфейса на дисплеях DWIN. Она обладает множеством инструментов и функций, которые позволяют создавать интерактивные элементы управления, анимацию, изменять внешний вид и многое другое.

Шаг 5: Создание интерфейса для дисплея DWIN в среде DGUS.

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

Создание интерфейса в среде DGUS - это важный этап, который позволит вам превратить вашу электронику

Шаг 6: Подбор электроники для проекта.

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

Плата WeMos D1: WeMos D1 является мощной и компактной платформой на базе микроконтроллера ESP8266.

Плата WeMos D1: WeMos D1 является мощной и компактной платформой на базе микроконтроллера ESP8266. Она обладает встроенным модулем Wi-Fi, что позволяет осуществлять беспроводное подключение и коммуникацию с другими устройствами. WeMos D1 является популярным выбором для разработки интернет-вещей (IoT) проектов.

Адресные светодиоды ws2812b

Адресные светодиоды ws2812b: Адресные светодиоды ws2812b (также известные как NeoPixel) позволяют контролировать каждый светодиод по отдельности, что обеспечивает возможность создания ярких и эффектных эффектов освещения. Они просты в использовании и подключении, и широко применяются в проектах, связанных с подсветкой и декорацией.

Дисплей DWIN структуры COF 2,8 дюйма с резистивным сенсором

Дисплей DWIN структуры COF 2,8 дюйма с резистивным сенсором: Дисплей DWIN COF представляет собой цветной сенсорный дисплей, который позволяет визуализировать информацию и взаимодействовать с устройством. Резистивный сенсорный экран позволяет регистрировать касания и управлять устройством через него. Дисплей DWIN обладает хорошим разрешением и широкими возможностями настройки интерфейса.

Купить дисплей DWIN можно на AliExpress.

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

Шаг 7: Схема подключения электроники.

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

Плата WeMos D1:

  • Подключите питание (обычно 5 В) к выводу 5V и заземление к выводу GND на плате WeMos D1.
  • Соедините пины платы WeMos D1 с другими компонентами согласно требованиям проекта.

Адресные светодиоды ws2812b:

  • Подключите питание к выводу 5V и заземление к выводу GND на светодиодах ws2812b.
  • Подключите сигнальный провод (обычно называется "Data") светодиодов к выбранному пину D1 на плате WeMos D1.
  • Учтите необходимость использования дополнительного источника питания, если подключает большое количество светодиодов.

Дисплей DWIN структуры COF:

  • Следуйте инструкциям производителя по подключению дисплея DWIN COF к плате WeMos D1. Обычно это включает подключение питания, заземления и коммуникационных проводов rx и tx.

Шаг 7: Схема подключения электроники.

Важно следовать документации и руководству производителя по каждому компоненту для правильного подключения. Также рекомендуется проверить электрическую совместимость и напряжение работы каждого компонента, чтобы избежать повреждения.

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

Шаг 8: Загрузка прошивки на дисплей DWIN структуры COF.

Для загрузки прошивки на дисплей DWIN структуры COF следуйте указанным ниже инструкциям:

  • Скачайте прошивку для дисплея DWIN внизу статьи, в разделе «Файлы для скачивания».
  • Подготовьте SD-карту для загрузки прошивки, следуя инструкциям, предоставленным в статье. Этот урок подробно описывает процесс выбора и подготовки SD-карты для загрузки прошивки на дисплей DWIN.
  • Установите SD-карту в дисплей.

Вставляем SD карту в HMI модуль.

  • Включите питание дисплея и дождитесь загрузки. Дисплей должен обнаружить прошивку на SD-карте и начать процесс загрузки.

Вы увидите синий экран надписи. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

  • По завершении загрузки прошивки, отключите питание и достаньте SD-карту.

В случае возникновения сложностей при загрузке прошивки на дисплей DWIN, обратитесь к инструкции, предоставленной в статье. Этот урок содержит подробные сведения о процессе выбора и подготовки SD-карты для загрузки прошивки и может помочь вам разрешить проблемы, с которыми вы столкнулись.

По завершении загрузки прошивки, отключите питание и достаньте SD-карту.

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

Шаг 9: Загрузка прошивки на плату WeMos D1.

После успешной загрузки прошивки на дисплей DWIN структуры COF, перейдем к загрузке прошивки на плату WeMos D1 (ESP8266). Для этого следуйте инструкциям, приведенным ниже:

  • Скачайте прошивку для ESP8266 из раздела "Файлы для скачивания", расположенного внизу статьи.
  • Подготовьте среду разработки Arduino IDE для работы с ESP8266, следуя указаниям в статье. Этот материал предоставляет необходимую информацию о том, как настроить среду разработки Arduino IDE для работы с модулем ESP8266.
  • Подключите плату WeMos D1 к компьютеру с помощью USB-кабеля.
  • Запустите Arduino IDE и откройте загруженную прошивку для ESP8266.
  • Убедитесь, что выбрана правильная плата (WeMos D1) и порт (COM-порт, к которому подключена плата).

Убедитесь, что выбрана правильная плата (WeMos D1) и порт (COM-порт, к которому подключена плата).

  • Нажмите кнопку "Загрузить" (или "Загрузить в плату") в Arduino IDE, чтобы начать процесс загрузки прошивки на плату WeMos D1. Во время загрузки вы увидите индикатор прогресса.

Нажмите кнопку "Загрузить" (или "Загрузить в плату") в Arduino IDE, чтобы начать процесс загрузки прошивки на плату WeMos D1. Во время загрузки вы увидите индикатор прогресса.

  • По завершении загрузки прошивки на плату WeMos D1, убедитесь, что прошивка успешно загружена и плата готова к работе.

Важно следовать инструкциям, предоставленным в статье по настройке среды разработки Arduino IDE для работы с ESP8266, чтобы обеспечить правильную загрузку прошивки на плату WeMos D1.

Обратите внимание, что процесс загрузки прошивки на плату WeMos D1 может незначительно отличаться в зависимости от версии Arduino IDE и используемой операционной системы.

Шаг 10: Проверка возможностей и функционала устройства.

Шаг 10: Проверка возможностей и функционала устройства.

После загрузки прошивок на дисплей DWIN структуры COF и плату WeMos D1 пришло время проверить возможности и функционал получившегося устройства. Убедитесь, что иконки и плашки отображаются корректно, а управление подсветкой и переключение цвета работают в соответствии с заданными настройками.

После загрузки прошивок на дисплей DWIN структуры COF и плату WeMos D1 пришло время проверить возможности и функционал получившегося устройства.

Вывод:

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

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

Генератор иконок и фонов на веб-сайте Portal-pk.ru предоставляет удобный инструмент для создания уникальных иконок, а также возможность добавления фоновых изображений, чтобы придать вашему устройству желаемый вид.

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

Желаю вам приятного творчества и успехов в вашем проекте! Пусть ваше пользовательское устройство станет полезным и уникальным, отвечающим всем вашим потребностям и требованиям.


Понравился проект Создание дизайна интерфейса для дисплея DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Введение в UART на ESP32. Работа с UART1 на ESP32. http://arduino-tex.ru/news/166/vvedenie-v-uart-na-esp32-rabota-s-uart1-na-esp32.html Константин Portal-PK 2023-05-31T15:55:52+03:00 UART (Universal Asynchronous Receiver/Transmitter) - это последовательный протокол связи, который обеспечивает простой обмен данными между двумя устройствами. Микроконтроллер ESP32 предоставляет три шины UART: UART0, UART1 и UART2. Их можно использовать для общения с различными устройствами, такими как сенсоры, Arduino, Raspberry Pi и компьютеры.

Микроконтроллер ESP32 предоставляет три шины UART: UART0, UART1 и UART2.

Использование UART0 на ESP32.

UART0 является основным UART на ESP32 и по умолчанию подключается к пинам GPIO1 (TX0) и GPIO3 (RX0). Он часто используется для связи с компьютером через серийный монитор и также используется для прошивки платы ESP32 новыми программами. Сообщения могут выводиться в консоль с помощью Serial.println().

Возможности UART2 на ESP32.

Чтобы использовать UART2, достаточно добавить Serial2.begin() в функцию setup(), а для отправки сообщений использовать Serial2.println(). По умолчанию UART2 подключен к пинам GPIO16 (RX2) и GPIO17 (TX2), но вы можете изменить эти пины в процессе настройки, что может быть полезно при использовании модуля Wrover. В следующем примере кода показано, как использовать UART2:

void setup() {
  Serial2.begin(115200);
}
void loop() {
  Serial2.println("Hello from UART2");
  delay(100);
}

Обратите внимание: Сообщение, отправленное через UART2, не будет отображаться в мониторе порта, так как UART2 не подключен к USB компьютера. Вместо этого он будет передаваться через указанные пины.

Работа с UART1 на ESP32: Использование выбранных пинов для последовательного интерфейса.

Работа с UART1 на ESP32: Использование выбранных пинов для последовательного интерфейса.

UART1 по умолчанию не привязан к конкретным пинам, так как использует те же пины, что и память flash на ESP32. Однако вы можете использовать UART1, выбрав нужные пины с помощью функции "GPIO matrix" на ESP32. В следующем примере кода показано, как настроить серийный интерфейс на пинах GPIO14 и GPIO12 с использованием UART1:

void setup() {
  /*
  * UART1  -> Serial1
  * RX Pin -> GPIO 14
  * TX Pin -> GPIO 12
  * UART Configuration -> SERIAL_8N1
  */
  Serial1.begin(115200, SERIAL_8N1, 14, 12);
}
void loop() {
  Serial1.println("Hello from UART1");
  delay(100);
}

В приведенном коде сообщение "Hello from UART1" будет отправлено через UART1 с использованием GPIO12 в качестве пина передачи (TX) и GPIO14 в качестве пина приема (RX).

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

Вывод:

В статье был представлен обзор UART-коммуникации на микроконтроллере ESP32. Особое внимание уделено использованию UART1, что является полезной информацией, которую не просто найти.

Управление UART1 на ESP32 требует некоторых дополнительных настроек, так как по умолчанию он не привязан к конкретным пинам из-за его совместного использования с памятью flash. Однако, статья приводит пример кода, в котором показано, как выбрать желаемые пины с использованием функции "GPIO matrix" и настроить UART1 для передачи и приема данных.

В целом, статья предоставляет полезные сведения о применении UART на ESP32 и особенно подчеркивает использование UART1, что делает ее ценным ресурсом для разработчиков, ищущих информацию о работе с UART на ESP32.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!
]]>
Урок 9: Создаем интерфейс управления реле для HMI дисплея DWIN в бесплатном Онлайн-конструкторе http://arduino-tex.ru/news/165/urok-9-sozdaem-interfeis-upravleniya-rele-dlya-hmi.html Константин Portal-PK 2023-04-14T08:14:41+03:00 Для того, чтобы создать интерфейс управления реле для HMI дисплея DWIN, нам понадобится использовать бесплатный Онлайн-конструктор, а также программы Pinta и DGUS_V7.642. В этом уроке мы покажем вам, как создать графические элементы и страницу интерфейса для дисплея, а также как загрузить прошивку на дисплей и протестировать его работу.


Шаг 1: Использование бесплатного Онлайн-конструктора.

Первым шагом для создания интерфейса управления реле для HMI дисплея DWIN является использование бесплатного Онлайн-конструктора. В этом конструкторе можно создавать различные элементы интерфейса, такие как кнопки, фоны, иконки и т.д.

Первым шагом для создания интерфейса управления реле для HMI дисплея DWIN является использование бесплатного Онлайн-конструктора.

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

Создание графических элементов интерфейса управления реле

Внимание! Кликни по изображения чтобы сохранить.


Шаг 2: Создание графических элементов интерфейса управления реле

Далее мы создаем графические элементы интерфейса управления реле для HMI дисплея DWIN. Эти элементы включают в себя кнопки для включения и выключения реле, а также индикатор состояния реле и фон.

Для начала работы вам нужно создать необходимые элементы для вашего интерфейса.

Мы можем использовать бесплатный Онлайн-конструктор для создания кнопок и фона. Для этого мы можем выбрать нужный элемент и настроить его внешний вид.

Мы можем использовать бесплатный Онлайн-конструктор для создания кнопок и фона.

Шаг 3: Использование программы Pinta для сборки страницы интерфейса.

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

Скачать программу Pinta можно бесплатно с официального сайта.

использовать программу Pinta для сборки страницы интерфейса для HMI дисплея DWIN.

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

Шаг 4: Используя среду разработки DGUS_V7.642 создаем интерфейс для HMI дисплея DWIN.

После того, как мы собрали страницу интерфейса в программе Pinta, мы можем использовать среду разработки DGUS_V7.642 для создания интерфейса для HMI дисплея DWIN.

Скачать программу DGUS_V7.642 можно бесплатно с официального сайта или на нашем сайте.

DGUS_V7.642 - это бесплатная среда разработки, которую можно использовать для создания интерфейсов для HMI дисплеев DWIN. В этой среде мы можем загрузить нашу страницу интерфейса и настроить функциональность кнопок и индикаторов.

создания интерфейсов для HMI дисплеев DWIN

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

Для создания интерфейса нам нужно выбрать ненужное разрешение дисплей из списка поддерживаемых устройств и создать новый проект.

И используя инчструмент «Incremental Adjustment» добавим события нажатия на сенсор.

И используя инчструмент «Incremental Adjustment» добавим события нажатия на сенсор.

Описание всех инструментов, используемых в уроке, вы можете найти в разделе сайте Статьи о компании и дисплеях DWIN.


Шаг 5: Загрузка прошивки на дисплей и тестирование

После того, как мы создали интерфейс для HMI дисплея DWIN в среде разработки DGUS_V7.642, мы можем загрузить прошивку на дисплей и протестировать его работу.

Для загрузки прошивки на дисплей нам нужно скопировать папку DWIN_SET на карту памяти. Как выбрать карту памяти и подготовить её опасно вот тут. Затем мы можем загрузить созданную нами прошивку и запустить ее на дисплее.

Вставляем SD карту в HMI модуль.

После загрузки прошивки мы можем протестировать работу интерфейса, нажимая на кнопки . Если все работает корректно, то мы успешно создали интерфейс управления реле для HMI дисплея DWIN в бесплатном Онлайн-конструкторе.

Код для Arduino к данному проекту вы можете скачать тут.


Заключение.

В данном уроке мы научились создавать интерфейс управления реле для HMI дисплея DWIN с помощью бесплатного Онлайн-конструктора и программы Pinta. Мы также использовали бесплатную среду разработки DGUS_V7.642 для создания интерфейса и загрузки его на дисплей.

Создание собственного интерфейса для HMI дисплея может быть очень полезным для управления различными устройствами и процессами. Благодаря использованию бесплатных инструментов, как Онлайн-конструктор, Pinta и DGUS_V7.642, мы можем создавать интерфейсы без необходимости приобретения дорогостоящего программного обеспечения.

Double click window border to quit

В целом, создание интерфейса управления реле для HMI дисплея DWIN может быть полезным уроком для тех, кто хочет изучать основы создания интерфейсов и применять их в различных проектах.

Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравилася урок Создаем интерфейс управления реле для HMI дисплея DWIN в бесплатном Онлайн-конструкторе? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Подключение GPS NEO-6M к ESP32 с примерами кода. http://arduino-tex.ru/news/163/podklyuchenie-gps-neo-6m-k-esp32-s-primerami-koda.html Константин Portal-PK 2023-03-20T14:32:05+03:00 GPS NEO-6M - это модуль GPS, который позволяет определять местоположение и получать информацию о времени и скорости при помощи спутниковой навигации. Он работает на основе системы GPS (Global Positioning System), которая состоит из сети спутников, вращающихся вокруг Земли и передают сигналы в приемники GPS на земле. GPS NEO-6 может работать как автономно, так и в составе более крупных проектов.

GPS NEO-6M - это модуль GPS, который позволяет определять местоположение и получать информацию о времени

Технические параметры

  • GPS модуль: U-Blox NEO-6M-0-001;Встроенная батарейка для быстрого, холодного старта;
  • Чувствительность: -161 dBm;
  • Скорость обновления: 5 Гц;
  • Интерфейсы: UART (выведен), SPI, DDC, IIC;
  • Передает координаты в формате: NMEA;
  • Скорость подключения по умолчанию по UART: 9600 бод;
  • Есть активная антенна;
  • Напряжение питания: 3 – 5 В;
  • Возможность работы с программами: U-Center и т.п.;
  • Размеры платы: 57 х 25 x 15 мм;
  • Вес комплекта: 18 г.

Для урока понадодиться:

Протокол NMEA (National Marine Electronics Association) - это стандарт обмена данными, который используется в морской электронике и навигации. GPS NEO-6M поддерживает протокол NMEA и может получать информацию о местоположении, времени, скорости и других параметрах. Сообщения NMEA начинаются со знака "$" и состоят из нескольких полей, разделенных запятой. Каждое сообщение имеет уникальный идентификатор, например $GPGGA (Global Positioning System Fix Data) или $GPRMC (Recommended Minimum Specific GPS/Transit Data). Различные сообщения содержат разную информацию о местоположении и времени, и могут использоваться для разных целей, например, для навигации, картографии или мониторинга транспорта. При работе с GPS NEO 6 важно знать, какие сообщения нужны для вашей задачи и как их правильно обрабатывать.

Протокол NMEA (National Marine Electronics Association) - это стандарт обмена данными


Подключение GPS NEO-6M к ESP32.

Чтобы подключить GPS NEO-6M к ESP32, необходимо использовать один из портов UART, которые поддерживаются на плате. Рекомендуется использовать порт Serial2, который доступен на выводах GPIO16 (RX) и GPIO17 (TX) на плате ESP32. На модуле GPS NEO 6 также есть выходы RX и TX, которые нужно соединить с соответствующими пинами на ESP32.

Схема подключения GPS NEO-6M к ESP32.

Схема подключения GPS NEO-6M к ESP32.

Светодиодный индикатор NEO-6M:
На модуле NEO-6M установлен светодиод, который показывает состояние определения местоположения.

  • Не мигает — поиск спутников.
  • Мигает каждые 1 с — определение местоположения найдено (модуль видит достаточно спутников).

UART (Universal Asynchronous Receiver-Transmitter) - это протокол последовательной связи, который используется для передачи данных между устройствами. UART работает в режиме асинхронного обмена данными, то есть данные передаются без использования внешней тактовой сигнализации. Вместо этого каждый байт данных отправляется со своим собственным стартовым битом и стоповым битом, чтобы получатель мог синхронизироваться с передатчиком.

Настройка порта Serial2 для работы с GPS NEO 6 может быть выполнена в следующем коде на языке Arduino:

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, 16, 17); // скорость 9600, формат 8 бит данных,  пины RX и TX на 16 и 17 выводах
}
void loop() {
  if (Serial2.available()) {
    Serial.println("-------------------");
    String data = Serial2.readStringUntil('\n');
    Serial.println("-------------------");
    Serial.println(data);
  }
}

Аргументы функции begin() определяют скорость передачи данных, формат данных и пины RX и TX, соединенные с модулем GPS NEO 6. В основном цикле loop() можно использовать функцию available() для проверки наличия данных в Serial2, и если они есть, то использовать функцию readStringUntil() для чтения строковых данных, отправленных от модуля GPS NEO 6. Затем можно обработать эти данные в соответствии с требованиями вашего проекта.

Получение данных от GPS NEO-6M.


Получение данных от GPS NEO-6M.

Чтение данных от GPS NEO 6 через порт Serial2 можно осуществить с помощью функции Serial2.readStringUntil(), которая читает строку символов из порта, пока не встретит указанный символ (в данном случае это символ новой строки '\n'). Пример кода:

void loop() {
  if (Serial2.available()) {
    Serial.println("-------------------");
    String data = Serial2.readStringUntil('\n');
    Serial.println("-------------------");
    // обработка данных GPS NEO 6
  }
}

Получение данных от GPS NEO-6M.


Сообщения NMEA содержат информацию о координатах, времени, скорости, высоте и других параметрах, которые могут быть полезны для навигации. Каждое сообщение начинается с символа '$', за которым следует идентификатор сообщения (например, GPRMC, GPVTG, GPGGA и т. д.) и набор полей, разделенных запятыми. Пример NMEA сообщения:

-------------------
$GPGGA,115954.00,5806.00000,N,05747.00000,E,1,08,1.30,210.4,M,-4.8,M,,*48
-------------------

Чтобы извлечь информацию из NMEA сообщений, можно использовать функцию split(), которая разбивает строку на отдельные поля и возвращает массив строк. Пример кода:

void loop() {
  if (Serial2.available()) {
    String data = Serial2.readStringUntil('\n');
    Serial.println(data);
    Serial.println("-------------------");
    delay(1000);
    // обработка данных GPS NEO 6
    if (data.startsWith("$GPGGA")) {  // проверяем, является ли сообщение GGA
      String* fields = split(data, ',', qtde);  // разбиваем сообщение на поля
      float lat = fields[2].toFloat();  // извлекаем широту
      float lon = fields[4].toFloat();  // извлекаем долготу
      float alt = fields[9].toFloat();  // извлекаем высоту
      // обработка полученных данных
      // --  выводим широту
      Serial.print("lat: ");
      Serial.println(lat);
      // --  выводим долготу
      Serial.print("lon: ");
      Serial.println(lon);
      // --  выводим высоту
      Serial.print("alt: ");
      Serial.println(alt);
      Serial.println("-------------------");
      delay(1000);
    }
  }
}
String* split(String& v, char delimiter, int& length) {
  length = 1;
  bool found = false;
  // Figure out how many itens the array should have
  for (int i = 0; i < v.length(); i++) {
    if (v[i] == delimiter) {
      length++;
      found = true;
    }
  }
  // If the delimiter is found than create the array
  // and split the String
  if (found) {
    // Create array
    String* valores = new String[length];
    // Split the string into array
    int i = 0;
    for (int itemIndex = 0; itemIndex < length; itemIndex++) {
      for (; i < v.length(); i++) {
        if (v[i] == delimiter) {
          i++;
          break;
        }
        valores[itemIndex] += v[i];
      }
    }
    // Done, return the values
    return valores;
  }
  // No delimiter found
  return nullptr;
}

В этом примере кода мы сначала проверяем, является ли прочитанное сообщение сообщением GGA, используя функцию startsWith(). Затем мы разбиваем строку на поля с помощью функции split() и сохраняем результат в массив строк fields[]. Затем мы извлекаем нужную информацию из полей массива fields[] с помощью функции toFloat() и сохраняем результат в соответствующие переменные. Кроме широты, долготы и высоты, из других сообщений можно извлекать информацию о скорости и времени, используя аналогичный подход. Например, чтобы получить информацию о скорости, можно использовать сообщение VTG:

-------------------
$GPVTG,,T,,M,0.732,N,1.355,K,A*27
-------------------

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

if (data.startsWith("$GPVTG")) { // проверяем, является ли сообщение VTG
  String* fields = split(data, ',', qtde);  // разбиваем сообщение на поля
  float speed = fields[5].toFloat(); // извлекаем скорость в узлах
}

Кроме того, можно использовать сообщение RMC для получения информации о времени:

-------------------
$GPRMC,120009.00,A,5806.00000,N,05747.00000,E,0.187,,200323,,,A*78
-------------------

В этой строке время находится в первом поле (120009.00), которое представляет собой время UTC в формате HHMMSS.ss. Чтобы извлечь это время, мы можем использовать следующий код:

if (data.startsWith("$GPRMC")) { // проверяем, является ли сообщение RMC
   String* fields = split(data, ',', qtde);  // разбиваем сообщение на поля
    String time = fields[1]; // извлекаем время в формате HHMMSS.ss
}

Таким образом, используя различные NMEA сообщения и функцию split(), можно извлекать различную информацию о координатах, времени, скорости и других параметрах из GPS NEO 6 и использовать эту информацию для навигации, геопозиционирования и других приложений.


Пример кода, который позволяет получать данные от GPS NEO 6 с использованием библиотеки TinyGPS++.

Для упрощения процесса чтения данных от GPS NEO 6 мы можем использовать библиотеку TinyGPS++. Она предоставляет удобные функции для обработки NMEA сообщений и извлечения информации о координатах, времени и других параметрах.

Установка библиотек:
Первым делом необходимо установить библиотеку "TinyGPSPlus", скачать ее можно в конце статьи или с сайта github.com.

Пример кода для получения данных от GPS NEO 6 с использованием библиотеки TinyGPS++ выглядит следующим образом:

#include <TinyGPS++.h>
// Создаем объект GPS
TinyGPSPlus gps;
void setup() {
  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);
}
void loop() {
  while (Serial2.available() > 0) {
    if (gps.encode(Serial2.read())) {
      // Если есть данные
      if (gps.location.isValid() && gps.date.isValid() && gps.time.isValid() && gps.speed.isValid()) {
        // Выводим координаты
        Serial.print("Latitude: ");
        Serial.print(gps.location.lat(), 6);
        Serial.print(" Longitude: ");
        Serial.println(gps.location.lng(), 6);
        // Выводим время
        Serial.print("Time: ");
        Serial.print(gps.time.hour());
        Serial.print(":");
        Serial.print(gps.time.minute());
        Serial.print(":");
        Serial.println(gps.time.second());
        // Выводим скорость
        Serial.print("Speed: ");
        Serial.print(gps.speed.kmph());
        Serial.println(" km/h");
        delay(1000);
      }
    }
  }
}

Здесь мы создаем объект GPS и настраиваем порты Serial и Serial2. В цикле loop() мы проверяем, есть ли данные от GPS в порте Serial2. Если есть, мы передаем эти данные в функцию encode() библиотеки TinyGPS++, которая обрабатывает сообщения NMEA и извлекает из них нужную информацию. Затем мы проверяем, есть ли данные для получения информации о координатах, скорости и времени, и если да, то выводим эту информацию в монитор порта.

Пример кода, который позволяет получать данные от GPS NEO 6 с использованием библиотеки TinyGPS++.

В этом примере мы использовали методы объекта gps, такие как gps.location.lat() и gps.speed.kmph(), для извлечения информации о координатах и скорости. Эти методы возвращают значения в удобном для нас формате, который мы можем вывести в монитор порта с помощью методов Serial.print() и Serial.println().

Также мы использовали методы объекта gps, такие как gps.date.isValid() и gps.time.isValid(), для проверки, есть ли данные для получения информации о времени.

Заключение.

В данной статье мы рассмотрели процесс подключения и использования GPS-модуля NEO 6 с контроллером ESP32. Мы изучили, что такое GPS, как работает протокол NMEA и как обрабатывать данные GPS, используя библиотеку TinyGPS++.

В данной статье мы рассмотрели процесс подключения и использования GPS-модуля NEO 6 с контроллером ESP32.

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

Понравился урок: Подключение GPS NEO-6M к ESP32 с примерами кода? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Информер стоимости биткоина (BTC) своими руками на ESP8266. http://arduino-tex.ru/news/162/informer-stoimosti-bitkoina-btc-svoimi-rukami-na-esp8266.html Константин Portal-PK 2023-03-14T08:44:17+03:00 Стоимость биткоина (BTC) может быстро колебаться, поэтому для криптовалютных инвесторов важно быть в курсе своих BTC/USD. Информация о стоимости биткоина может быть невероятно полезной для того, чтобы помочь инвесторам понять изменения на рынке и принять обоснованные решения.

В этом проекте рассмотрим, как создать свой собственный информер BTC, используя ESP8266 и матрицу MAX7219.


Для проекта понадобится:

  • ESP8266 — это недорогой микроконтроллер, который можно использовать для управления различными устройствами;
  • Матрица MAX7219 — это устройство отображения, которое можно легко запрограммировать для отображения текста или графики;
  • Соединительные провода;
  • Блок питания 5 В;
  • Корпус напечатаем на 3D принтере.

Корпус напечатаем на 3D принтере.

Настройка среды Arduino IDE для работы с ESP8266.

Для работы с ESP8266 в среде Arduino IDE требуется произвести необходимые настройки.

В пункте меню Файл → Настройки.

программировать NodeMCU в среде Arduino IDE

В поле «Дополнительные ссылки для менеджера плат» пишем такую ссылку:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Жмём ОК и переходим в окно менеджера плат.

 менеджер плат Arduino IDE

В самом низу будет нужный нам пакет «esp8266 by ESP8266 Community». Выбираем его и жмём кнопку «Установка».

«esp8266 by ESP8266 Community

Более подробное описание вы можете почитать тут.

Получаем стоимость биткоина (BTC) из интернета.

Первым шагом в создании собственного индикатора BTC является создание программы для получения текущей цены BTC. Это можно сделать, используя ESP8266 и подключив его к интернету. Для того чтобы ваше устройство подключилось к интернету, укажите логин и пароль от вашей Wi-Fi сети.

укажите логин и пароль от вашей Wi-Fi сети.

Больше ничего менять не нужно. Информер будет автоматически подключаться к вашей сети и получать данные стоимости биткоина из интернета. Но для того, чтобы было понятнее, откуда получаем информацию о стоимости криптовалюты, и для того, чтобы вы смогли самостоятельно изменить выводимую криптовалюту, опишу данный момент.

После подключения ESP8266 может отправить запрос на сервер криптовалютной биржи, чтобы получить текущую цену BTC. Я использую бесплатные API Coinlore.

использую бесплатные API Coinlore.

Coinlore предоставляет бесплатный API для криптовалют, который не требует ключей API и доступен публично. Сервис является независимым агрегатором данных и включает более 9486 монет и более 400 бирж. И приятный бонус – нет ограничений по скорости, но рекомендуется совершать 1 запрос в секунду.

использую бесплатные API Coinlore.

Запрос имеет вид: https://api.coinlore.net/api/ticker/?id=90 (BTC),

  • где id – номер цифровой валюты.

Узнать список доступных монет можно по запросу: https://api.coinlore.net/api/tickers/

Список id нескольких цифровых валют:

  • 90 – Bitcoin;
  • 80 – Ethereum;
  • 518 – Tether;
  • 2 - Dogecoin;
  • 1 – Litecoin;
  • 33422 - Wrapped Bitcoin;
  • 118 - Ethereum Classic.
  • Полный список на сайте https://api.coinlore.net/api/tickers/

Полный список на сайте https://api.coinlore.net/api/tickers/

Затем ESP8266 может сохранить эту информацию в своей памяти и вывести на светодиодную матрицу.

Затем ESP8266 может сохранить эту информацию в своей памяти и вывести на светодиодную матрицу.

Далее создаём программу для управления матрицей MAX7219. Программа должна быть способна отображать текущую цену BTC на матрице. Также можно использовать матрицу MAX7219 для отображения другой информации, такой как тенденция изменения цены и цены других криптовалют.

Для работы с матрицей нужно установить 2 дополнительные библиотеки: «ArduinoJson», «Adafruit_GFX» и «Max72xxPanel»

Для работы с матрицей нужно установить 2 дополнительные библиотеки: «ArduinoJson», «Adafruit_GFX» и «Max72xxPanel», которые можно скачать внизу статьи в разделе «файлы для скачивания» или установить через менеджер библиотек.

Остальные библиотеки устанавливаются вместе с платой ESP8266.

Настройка информера под себя.

Настройка информера под себя.

В коде можно произвести дополнительные настройки, что поможет настроить информер под вас.

Переменная mode = 3 – отвечает за режим вывода стоимости криптовалюты на матрицу:

Переменная mode = 3 – отвечает за режим вывода стоимости криптовалюты на матрицу:
  1. Постоянно скролит текст.
  2. Показывает статическое число без скрола.
  3. Скролит, после чего показывает статическое число стоимости.

Значение wait = 100 позволяет настроить скорость движения текста в режиме скрола. Чем меньше значение, тем быстрее текст будет перемещаться по матрице.

Код прокомментирован, если вам нужно произвести другие настройки, разобраться не сложно.

Схема подключения ESP8266 и матрицы MAX7219.

Наконец, нужно соединить ESP8266 и матрицу MAX7219 вместе. Это можно сделать с помощью соединительных проводов. Затем ESP8266 может отправить текущую цену BTC/USD на матрицу MAX7219, которая затем отобразит её на экране.

Схема подключения ESP8266 и матрицы MAX7219.


Схема подключения получается очень простая, так как соединить нужно всего 2 компонента: ESP8266 и матрицу MAX7219.

Корпус для Информера BTC/USD.

Для данного проекта был разработан специальный корпус. Благодаря подпружиненному крепежу устройство можно закрепить на монитор или ноутбук. Для того чтобы информер не прикрывал веб-камеру на ноутбуке сделан специальный вырез.

Корпус для Информера BTC/USD.

Если убрать зажим, то данное устройство можно поставить на стол или на тумбочку, чтобы отслеживать стоимость криптовалюты в том месте, где нет доступа к ПК или телефону.

Если убрать зажим, то данное устройство можно поставить на стол или на тумбочку, чтобы отслеживать стоимость криптовалюты в том месте, где нет доступа к ПК или телефону.

Корпус сделан таким образом, что матрица прикрыта пластиком и в выключенном состоянии передняя панель устройства выгладит как одно целое. Но стоит включить устройство, как становится видно точки матрицы. Благодаря чему свет матрицы рассеивается и не так сильно раздражает глаза в тёмное время суток.

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

Подведём итог.

В целом, создание собственного информер BTC относительно простое и требует лишь нескольких основных компонентов. Соединив компоненты вместе, вы сможете легко создать информер Bitcoin, способный отображать текущую цену BTC. Кроме того, вы также можете использовать матрицу MAX7219 для отображения цен других криптовалют и другой информации. В целом, создание собственного информер BTC с помощью ESP8266 и матрицы MAX7219 — это отличный способ оставаться в курсе событий на криптовалютном рынке.

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

Понравился проект Информер стоимости биткоина (BTC) своими руками на ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Настольная RGB-лампа, напечатанная на 3D-принтере — идеальный ночник для любой комнаты http://arduino-tex.ru/news/161/nastolnaya-rgb-lampa-napechatannaya-na-3d-printere-—.html Константин Portal-PK 2023-02-17T08:32:13+03:00 Настольная лампа — отличный способ добавить уникальности любой комнате.

Эта напечатанная на 3D-принтере настольная лампа RGB — отличный способ добавить цвет и свет в любую комнату.

Эта напечатанная на 3D-принтере настольная лампа RGB — отличный способ добавить цвет и свет в любую комнату. Лампа имеет три различных режима, что позволяет настроить свет в соответствии с вашим настроением. Лампа питается через microUSB разъём и может быть размещена на любой плоской поверхности, что делает ее идеальной для прикроватной тумбочки или письменного стола. Корпус, напечатанный на 3D-принтере, прочен, а различные цвета создают уникальный и современный вид. Эта лампа отлично подходит для любой комнаты и обеспечивает успокаивающее окружающее свечение.

Лампа имеет три различных режима, что позволяет настроить свет в соответствии с вашим настроением.

Купить лампу-ночник

Настольная лампа-ночник, процесс разработки и 3Д печати

С помощью 3D-печати и 3D-моделирования теперь можно создать собственную настольную лампу-ночник с уникальным дизайном.

Процесс разработки настольной лампы-ночника начинается с 3D-моделирования, где можно создать желаемую форму и дизайн светильника. Затем следует 3D-печать, при которой модель печатается слоями с использованием 3D принтера. Наконец, печатный продукт собирается и тестируется для обеспечения качества.

Настольная лампа-ночник, процесс разработки и 3Д печати

Комбинируя технологию 3D-печати с креативным дизайном, можно создать собственную уникальную настольную лампу-ночник, которая добавит дополнительный блеск любой комнате. С помощью такого процесса разработки можно гарантировать что лампа ночник обеспечивает качественное освещение, а также приятную атмосферу.

Динамические световые эффекты настольной RGB лампы-ночника

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

Динамические световые эффекты настольной RGB лампы-ночника

83 статических цвета лампы-ночника, легко подобрать то, что хочется

Так же лампа-ночник имеет набор из 83 статических цветов и оттенков, что позволяет легко найти правильный цвет для любого случая или настроения. Вы также можете настроить уровень яркости в соответствии с вашими потребностями, что позволит вам настроить атмосферу в вашей комнате. Если вам нужен успокаивающий эффект или более яркие цвета, эта лампа обязательно даст вам то, что нужно!

83 статических цвета лампы-ночника, легко подобрать то, что хочется

Автоматическая смена режимов, для разнообразия и эффекта присутствия

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

Автоматическая смена режимов, для разнообразия и эффекта присутствия

Вы ищете идеальный ночник для своей комнаты? Не упустите шанс приобрести настольную RGB-лампу, напечатанную на 3D-принтере. Благодаря яркому и красочному освещению эта лампа может стать отличным дополнением вашего домашнего декора. Кроме того, ее легко установить и обслуживать! Получите свою настольную лампу с RGB-подсветкой, напечатанную на 3D-принтере, прямо сейчас и преобразите свою комнату.

Купить лампу-ночник

Понравился проект настольная RGB-лампа, напечатанная на 3D-принтере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Конструктор проектов на ESP32, Arduino и дисплее DWIN - DWIN Box. http://arduino-tex.ru/news/160/konstruktor-proektov-na-esp32-arduino-i-displee-dwin---dwin-box.html Константин Portal-PK 2023-02-17T08:21:02+03:00 Дисплеи компании DWIN достаточно недорогие и функциональные, что делает их интересным решением при реализации своих проектов и DIY. Но, несмотря на плюсы, есть и минусы — это среда разработки DGUS, которая на английском языке, и при разработке интерфейса требуется подготовить графические элементы. Эти небольшие особенности приводят к сложностям быстрой реализации проекта на дисплее от компании DWIN Technology. Исходя из этого, было принято решение сделать простой конструктор, который позволит без программирования и отрисовки кнопок, слайдеров, плашек под текст создать проект с использованием дисплея DWIN. Конструктор DWIN Box был интегрирован с блочным программированием. Ниже вы можете посмотреть презентацию от разработчика ArduBlock.


Онлайн редактор интерфейса DWIN Box.

Онлайн редактор интерфейса DWIN Box.

Онлайн редактор DWIN Box можно протестировать тут.

Онлайн редактор DWIN Box можно протестировать тут.

Для создания интерфейса необходимо:

  • выбрать разрешение экрана ;
  • разместить нужные элементы на дисплее;
  • настроить каждый элемент;
  • сохранить для работы с ESP32 или Arduino (ESP Block или ArduBlock).

Так просто делается визуальный интерфейс для дисплея DWIN.

Как будет выглядеть кнопка или другой графический элемент на дисплее?

Для удобства все элементы подписаны, и изменить вы их можете не только в визуальном редакторе, но и при создании программы блоками в ArduBlock или ESP Block.

На экране можно отобразить текст и графические элементы:

  • Кнопки с фиксацией и без фиксации 3-х размеров и 3-х цветов (можно изменить надпись на кнопке и цвет надписи).

Кнопки с фиксацией и без фиксации 3-х размеров и 3-х цветов (можно изменить надпись на кнопке и цвет надписи)

  • Набор кнопок с иконками.

Набор кнопок с иконками.

  • 50 графических элементов для оформления интерфейса.

50 графических элементов для оформления интерфейса.

  • 3 прогресс бара.

3 прогресс бара.

  • Вывод текста и цифровых значений (набор из 8 цветов для текста).

Вывод текста и цифровых значений (набор из 8 цветов для текста).

  • Поля для оформления выведенного текста.

Кроме этого, можно добавить в проект:

1. изменения яркости подсветки дисплея DWIN;

2. звуковое уведомление с временем звучания от 0 до 255 мс.

изменения яркости подсветки дисплея DWIN;

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

Создание проекта блочным программированием - ESP Block 2.0.

Петров Виталий Николаевич создал блоки для данного конструктора и интегрировал в свой проект ESP Block 2.0 и ArduBlock 2.0. Что позволяет создать не только интерфейс для дисплея DWIN, но и подключить датчики и исполнительные механизмы к микроконтроллеру.

Создание проекта блочным программированием - ESP Block 2.0.

Нами была написана книга «DWIN Box Быстрый старт в тач мир», в которой содержится 20 примеров использования конструктора.

Как изменить оформление интерфейса DWIN Box?

Нами было разработано 7 наборов скинов для DWIN Box.Посмотреть скины можно вот в этом разделе сайта.

Как изменить оформление интерфейса DWIN Box?

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

Каждый набор также имеет описание и нумерацию элементов. Что, в свою очередь, даёт понимание, как будет выглядеть интерфейс при смене скина.

Также вы можете заказать скин для вашего проекта. Для этого пишите мне в личку в ВК.

Где можно найти примеры работы с DWIN Box?

С примерами использования конструктора вы можете ознакомиться в книге «DWIN Box Быстрый старт в тач мир». В книге приведено 20 примеров создания интерфейса и управления периферийными устройствами с дисплея. От простого мигания светодиодами до создания клавиатуры и управления шаговым двигателем.

книга «DWIN Box Быстрый старт в тач мир».

С книгой идут все необходимые исходные материалы.

С книгой идут все необходимые исходные материалы.

Также Петров Виталий Николаевич снимает видео ролики по данной теме и выкладывает на свой канал.

Также Петров Виталий Николаевич снимает видео ролики по данной теме и выкладывает на свой канал.

На нашем сайте и канале также будут материалы по контракту с DWIN Box.

Какие дисплеи поддерживает конструктор интерфейсов DWIN Box?

DWIN Box поддерживает практически все дисплеи компании DWIN серии COB – это дисплеи на плате. Выглядят вот так.

DWIN серии COB – это дисплеи на плате. Выглядят вот так.

Также поддерживаются все дисплеи серии COF, кроме одного - DMG10600F070-01W**.

 сенсорный дисплей DWIN COF 4,3”.

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

Список всех моделей разместить в статье нет возможности, поэтому список дисплеев совместимых с нашим конструктором

Если дисплей присутствует в списке, то его можно покупать для создания проекта с использованием DWIN Box. У модели дисплея могут отличаться только последние 1-2 буквы:

  • DMG80480C070_03WTR
  • DMG80480C070_03WN
  • DMG80480C070_03WTC

Последние буквы в маркировке означают тип сенсора:

  • N - без сенсорной панели
  • T - сенсорная панель есть
  • TR - резистивная сенсорная панель
  • TC – ёмкостная сенсорная панель

Подробнее о типе сенсора можете почитать вот в этой статье.

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Менеджер DWIN в России Сергей

Tелеграмм: https://t.me/Segey_DWIN (@Segey_DWIN)

WhatsApp: +7 995 278 76 20

Понравилась статья Конструктор проектов на ESP32, Arduino и дисплее DWIN - DWIN Box? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ОТКРЫТЫЙ ПРОЕКТ: РЕШЕНИЕ ИНТЕЛЛЕКТУАЛЬНОЙ СИСТЕМЫ УПРАВЛЕНИЯ ВОДООЧИСТИТЕЛЕМ НА ОСНОВЕ ИНТЕЛЕКТУАЛЬНОГО ЭКРАНА DWIN T5L http://arduino-tex.ru/news/159/otkrytyi-proekt-reshenie-intellektualnoi-sistemy.html Константин Portal-PK 2023-01-30T09:09:46+03:00 Решение основано на базе оценочной платы EKT043, обработка данных сенсорного экрана и внешней системы управления основана на одном чипе T5L.

Основные функции:

(1) Прием и обработка сигналов переключения высокого и низкого напряжения, контролируемых датчиком высокого напряжения, и отображение значений на экране в режиме реального времени;

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

1. Обзор программы

1) Принцип работы водоочистителя

Принцип работы водоочистителя

2. Блок-схема основного управляющего чипа T5L

Блок-схема основного управляющего чипа T5L

3. Состав системы

Оценочная плата EKT043 + устройство управления (1 насос подачи воды, 1 насос отвода воды, реле высокого и низкого давления и реле высокого и низкого уровня жидкости).

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

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

4. Разработка программы

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

С помощью программного обеспечения DGUS II создание пользовательского интерфейса и конфигурация сенсорных функций могут быть выполнены без кода.

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

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

С помощью программного обеспечения DGUS II создание пользовательского интерфейса и конфигурация сенсорных функций могут быть выполнены без кода.


С помощью программного обеспечения DGUS II создание пользовательского интерфейса и конфигурация сенсорных функций могут быть выполнены без кода.

(2) Развитие системных функций

Разработайте ядро ОС чипа T5L с помощью программного обеспечения keil для реализации хранения паролей и управления внешними устройствами.


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Часы-ночник с функцией плеера на ESP8266 и дисплее COF от компании DWIN. http://arduino-tex.ru/news/158/chasy-nochnik-s-funkciei-pleera-na-esp8266-i-displee-cof-ot.html Константин Portal-PK 2023-01-27T11:40:01+03:00 Сегодня мы поговорим об устройстве, сочетающем в себе часы, плеер, термометр и ночник, которое мы разработали и изготовили с нуля на ESP8266 и дисплее COF от компании DWIN. Рассмотрим основные этапы разработки, а также подведём итоги розыгрыша данного устройства в нашей группе во ВКонтакте.


Подбор комплектующих часов-ночника.

Какими свойствами должен обладать ночник, рассмотрели в предыдущей статье. Почитать её можно тут. Имея конкретную идею, мы знаем, какой функционал нам нужен. Исходя из функционала, мы можем подобрать комплектующие, которые необходимы для реализации. Чтобы всем управлять и обрабатывать всю информацию, нужен микроконтроллер, будем использовать Wemos D1 Mini (ESP8266).

будем использовать Wemos D1 Mini (ESP8266).

Для вывода всех данных и удобного управления возьмём сенсорный дисплей DWIN COF 4,3”.

 сенсорный дисплей DWIN COF 4,3”.

Чтобы получать температуру, влажность и давление, будем использовать датчик BME280.

Датчик BME280 имеет несколько разновидностей и в зависимости от модуля может подключаться к I2C и SPI

Для воспроизведения музыки будем использовать Dfplayer mini и динамик 3W.

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

адресные светодиоды

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

 Комплектующие должны быть подключены по следующей схеме.

Для того чтобы схема была более читаемая, схема без дисплея будет выглядеть вот так.

Для того чтобы схема была более читаемая, схема без дисплея будет выглядеть вот так.

Разработка корпуса часов плеера.

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

Разработка корпуса часов плеера.

В итоге получим вот такую 3D модель, которую остаётся напечатать.

В итоге получим вот такую 3D модель, которую остаётся напечатать.

Разработка графического интерфейса.

Раз у нас используется большой сенсорный экран, нам нужно сделать для него интерфейс. Весь интерфейс отрисовывается в Photoshop.

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

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

графические элементы необходимо подготовить для создания графического интерфейса в среде разработки DGUS.

Также отрисовка каждого элемента очень важна, потому что их нужно будет нарезать под дисплей DWIN, даже для такого не очень сложного интерфейса получается большое количество графических элементов.

Разработка интерфейса в DGUS.

создаём интерфейс в среде разработки DGUS

После нарезки создаём интерфейс в среде разработки DGUS. Здесь нам и понадобятся все элементы, которые мы нарезали на предыдущем этапе. Собираем интерфейс и прописываем адреса элементов управления.

Написание кода для ESP8266.

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

Написание кода для ESP8266.

Скачать исходный код проекта можно внизу статьи в разделе «Файлы для скачивания». В архиве вы найдёте все необходимые библиотеки для проекта.

Тестовая сборка для отладки часов-ночника.

После чего загружаем прошивку и пользуемся устройством.

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

Сборка конечного изделия.

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

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

Розыгрыш!

Данное устройство было разыграно среди наших подписчиков в группе во Вконтакте. Константин Сергеевич лично вручил устройство победителю.

Данное устройство было разыграно среди наших подписчиков в группе во Вконтакте. Константин Сергеевич лично вручил устройство победителю.

Поздравляем победителя!

Исходники.

Если вы хотите собрать такое же устройство, все исходные материалы данного проекта вы можете скачать внизу статьи в разделе «файлы для скачивания».

Исходные материалы для дисплея DWIN вы можете скачать по подписке на сайте Бусти.

Исходные материалы для дисплея DWIN вы можете скачать по подписке на сайте Бусти.

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Часы-ночник с функцией плеера на ESP8266 и дисплее COF от к омпании DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Как на Dwin DGUS смарт экранах легко реализовать 3D -анимацию http://arduino-tex.ru/news/157/kak-na-dwin-dgus-smart-ekranah-legko-realizovat-3d.html Константин Portal-PK 2023-01-27T09:06:48+03:00 3D визуальные эффекты широко использовались в HMI. Реалистичный эффект отображения трехмерной графики часто может напрямую передавать визуальную информацию и уменьшать порог для понимания информации.

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

Обработка 3D:

  1. Обработка вершин: GPU считывает данные вершины, описывающие внешний вид трехмерной графики, и определяет зависимость и позиционирование 3D -графики в соответствии с данными вершины и устанавливает скелет трехмерной графики, состоящей из многоугольников.
  2. Расчет растризации: изображение, фактически отображаемое на мониторе, состоит из пикселей, а процесс растризации будет преобразовать векторную графику в серию пикселей.
  3. Пиксельная обработка: заполнительный расчет и обработка пикселей, определение окончательных атрибутов каждого пикселя.
  4. Сопоставление текстуры: отображение текстуры осуществляется на скелете 3D -графики для генерации «реальных» графических эффектов.

Чипы серии T5L, независимо разработанные DWIN, имеют встроенное высокоскоростное аппаратное декодирование изображений JPEG, а программное обеспечение DGUS применяет метод наложения и отображения нескольких слоев JPEG для достижения богатых эффектов пользовательского интерфейса. Ему не нужно рендерить 3D -изображения в режиме реального времени, нужно только отображать 3D статические/динамические изображения при выводе на экран, решение для интеллектуального экрана DGUS подходит для того, чтобы очень удобно и быстро реализовывать эффекты 3D-анимации и действительно восстанавливать эффекты 3D-рендеринга.

Интеллектуальный экран DGUS 3D-анимация


Как реализовать 3D -анимацию через интеллектуальный экран DGUS?

1. Спроектируйте 3D модель и создайте 3D-анимационные файлы и экспортируйте их в виде последовательностей изображений JPEG.

Спроектируйте 3D модель и создайте 3D-анимационные файлы и экспортируйте их в виде последовательностей изображений JPEG.

2. Импортируйте созданную выше последовательность изображений в программное обеспечение DGUS, добавьте изображение в управление анимацией, установите скорость анимации и другие параметры, и всё готово.

Импортируйте созданную выше последовательность изображений в программное обеспечение DGUS, добавьте изображение в управление анимацией, установите скорость анимации и другие параметры, и всё готово.

Генерирует файл проекта и загружает его на экран DGUS Smart, чтобы посмотреть эффект анимации

И наконец, генерирует файл проекта и загружает его на экран DGUS Smart, чтобы посмотреть эффект анимации. В практических приложениях пользователи могут управлять анимацией, запуская/останавливая ее, скрывая/показывая, ускоряя/замедляя и т. д. по мере необходимости.


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
ОТКРЫТЫЙ ПРОЕКТ: СХЕМА УПРАВЛЕНИЯ ГРАВИРОВАЛЬНОГО СТАНКА GRBL_ESP32 НА ОСНОВЕ ЭКРАНА COF http://arduino-tex.ru/news/156/otkrytyi-proekt-shema-upravleniya-gravirovalnogo.html Константин Portal-PK 2023-01-25T08:20:40+03:00 Решение принимает чип T5L в качестве основного элемента управления, управляет GRBL через последовательный порт 2 и приводит в действие драйвера для управления основными двигателями гравировального станка для создания базовой траектории гравировки по осям X, Y и Z, чтобы реализовать автоматические операции гравировки. Он имеет красивый интерфейс, точное управление, многоосевое управление и автоматическую настройку инструмента.

ОТКРЫТЫЙ ПРОЕКТ: СХЕМА УПРАВЛЕНИЯ ГРАВИРОВАЛЬНОГО СТАНКА GRBL_ESP32 НА ОСНОВЕ ЭКРАНА COF

Описание:

  1. Управление GRBL через последовательный порт 2 DWIN;
  2. Последовательный порт GRBL реализует отображение сообщений, сегментацию и перехват;
  3. Экран управляет различными функциями, такими как движение, отправляя инструкции;
  4. Поддержка управления шпинделем, совместимая с определением интерфейса шпинделя Weihong;
  5. Параметры экрана сохраняются после отключения питания;
  6. Управление WS2812 для отображения индикаторов состояния, таких как бездействие, остановка и работа;

Дизайн решения:

(1) Дизайн интерфейса DGUS

Дизайн интерфейса DGUS

Дизайн интерфейса DGUS

СХЕМА УПРАВЛЕНИЯ ГРАВИРОВАЛЬНОГО СТАНКА GRBL_ESP32 НА ОСНОВЕ ЭКРАНА COF

Дизайн интерфейса DWIN DGUS - клавиатура

Дизайн интерфейса DGUS


(2) Схема объединительной платы

Схема объединительной платы


Схема объединительной платы

Схема объединительной платы

Плата GRBL ESP


Информация:

  1. ESP32 GRBL может использовать исходную версию без изменений;
  2. Откройте вложение для загрузки файла печатной платы экрана с помощью Easytron, и его схематическая диаграмма и печатная плата могут быть проверены напрямую;
  3. Файл ядра должен быть последним. В этом проекте используется версия ядра во вложении, и ядро нужно обновлять отдельно.


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
ОТКРЫТЫЙ ПРОЕКТ: РЕШЕНИЕ ДЛЯ ТЕРМОСТАТА PID НА ОСНОВЕ DWIN T5L SMART SCREEN http://arduino-tex.ru/news/155/otkrytyi-proekt-reshenie-dlya-termostata-pid-na-osnove-dwin.html Константин Portal-PK 2023-01-24T08:06:06+03:00 Решение термостата основано на дизайне интеллектуального экрана DMG80480C043_02W. С помощью DS18B20 и MLX90614 осуществляется сбор значений температуры на входе и выходе оборудования соответственно и отправки их на чип T5L для обработки и отображения значений температуры на экране в режиме реального времени. В то же время для управления нагревательным устройством используется алгоритм ПИД-регулирования температуры, благодаря чему температура на выходе стабилизируется на заданном значении и достигается эффект нагрева с постоянной температурой.

ОТКРЫТЫЙ ПРОЕКТ: РЕШЕНИЕ ДЛЯ ТЕРМОСТАТА PID НА ОСНОВЕ DWIN T5L SMART SCREEN

На экране отображается кривая изменения температуры на выходе, что удобно для настройки параметров ПИД.

На экране отображается кривая изменения температуры на выходе, что удобно для настройки параметров ПИД.

1. Устройство

(1) Блок-схема

Блок-схема: РЕШЕНИЕ ДЛЯ ТЕРМОСТАТА PID НА ОСНОВЕ DWIN T5L SMART SCREEN

(2) Чертеж конструкции оборудования

Аппаратное обеспечение состоит из платы измерения температуры PID-Main, интеллектуального экрана DMG80480C043_02W.

Аппаратное обеспечение состоит из платы измерения температуры PID-Main

Аппаратное обеспечение состоит из интеллектуального экрана DMG80480C043_02W.

(3) Дизайн интерфейса экрана

Дизайн интерфейса экрана

Дизайн интерфейса экрана DMG80480C043_02W

(4) Среда разработки

Разработка интерфейса: система DGUS;

Разработка контроля температуры: Keil C51 или TKStudio.


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Подключаем дисплей DWIN к ARDUINO по rs232. http://arduino-tex.ru/news/154/podklyuchaem-displei-dwin-k-arduino-po-rs232.html Константин Portal-PK 2023-01-13T10:02:10+03:00 У компании DWIN есть линейка дисплеев в корпусе, которые имеют пылевлагозащиту IP65 и удобные крепежи для монтирования. К таким дисплеям относятся дисплеи серии DMG*****_15W* различного размера с резистивным сенсором. Например: DMG80480T070_15WTR, DMG10600C101_15WTR, DMG80600T080_15WTR.

И дисплеи серии DMG*****_A5W* различного размера с ёмкостным и резистивным сенсором. К ним относятся следующие модели: DMG80480T043_A5WTC или DMG80480T043_A5WTR, DMG80480T050_A5WTC или DMG80480T050_A5WTR, DMG10600T070_A5WTC или DMG10600T070_A5WTR, DMG10600T101-A5WTC или DMG10600T101-A5WTR.


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

Дисплеи DWIN в корпусе имеют интерфейс RS232 и RS485 и не имеют TTL. Это приводит к невозможности подключить Arduino, ESP8266 или ESP32 напрямую к дисплею.

Дисплеи DWIN в корпусе имеют интерфейс RS232 и RS485 и не имеют TTL. Это приводит к невозможности подключить Arduino, ESP8266 или ESP32 напрямую к дисплею.

На каком порту какой интерфейс подключен, можно узнать из datasheet на соответствующую модель дисплея.

На каком порту какой интерфейс подключен, можно узнать из datasheet на соответствующую модель дисплея.

Пример для дисплея промышленного класса в пластиковом корпусе.

Но есть простое решение, о чём и поговорим в данной статье.

Как можно подключить дисплеи DMG80480T070_15WTR, DMG10600T070_A5WTC и другие к ARDUINO по RS232?

Самый простой способ подключить дисплеи в корпусе (DMG80480T070_15WTR, DMG10600T070_A5WTC и другие модели) по RS232. Так как при данном способе подключения не нужно дополнительно вносить изменения в код. Достаточно использовать конвертор TTL – RS232. После чего можно взять любой урок с моего сайта и использовать с данными дисплеями DWIN.

Достаточно использовать конвертор TTL – RS232.

Виды конверторов TTL - RS232 для DWIN и ARDUINO.

Существует конвертор, который можно подключить напрямую по RS232 проводу.

Существует конвертор, который можно подключить напрямую по RS232 проводу.

Данные интерфейсы раньше широко применялись для подключения периферийных устройств к ПК.

Данные интерфейсы раньше широко применялись для подключения периферийных устройств к ПК.

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

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

Но, к сожалению, у меня не было в наличии провода RS232, поэтому я использовал TTL –RS232 конвертор вот такого компактного исполнения. Но тут без пайки не обойтись.

не было в наличии провода RS232, поэтому я использовал TTL –RS232 конвертор

Припаял я необходимые проводники и подключил к ESP8266, так как на данный момент я тестировал новые эффекты для светодиодной гирлянды.

Схема подключения TTL - RS232 конвертора к ESP8266 (NodeMCU) и дисплею DWIN.

Схема подключения TTL - RS232 конвертора к ESP8266 (NodeMCU) и дисплею DWIN.

Схема подключения TTL - RS232 конвертора к ESPЗ32 и дисплею DWIN.

Схема подключения TTL - RS232 конвертора к ESPЗ32 и дисплею DWIN.

Схема подключения TTL - RS232 конвертора к ARDUINO и дисплею DWIN.

Схема подключения TTL - RS232 конвертора к ARDUINO и дисплею DWIN.

Внимание! На стороне TTL (Arduino) – НЕ подключайте к 5 В, используйте 3,3 В, так как это приводит к нагреву конвертора.

Тестирование работы передачи данных с ARDUINO через TTL - RS232 конвертор на дисплей DWIN.

Для тестирования можно взять любой пример из моих уроков про дисплеи DWIN или проект с использованием дисплея DWIN. Но для простоты тестирования я сделаю небольшой пример, который будет изменять значения при нажатии на кнопки на дисплее и отправлять их на Arduino, ESP8266 или ESP32. Скачать прошивку для дисплея можно внизу статьи в разделе «Файлы для скачивания».

Тестирование работы передачи данных с ARDUINO через TTL - RS232 конвертор на дисплей DWIN.

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

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

Код для ESP8266 и ESP32 можно скачать внизу статьи в разделе «Файлы для скачивания».

Как видим из примера, синхронно меняются 2 первых цифровых поля и включается и выключается светодиод на отладочной плате. Если изменять только второе значение, то первое не меняется. Это говорит о том, что данные первого и второго поля обновляются синхронно благодаря микроконтроллеру (если отключить микроконтроллер, то изменение будет проходить только в первом поле).

Код для ESP8266 и ESP32 можно скачать внизу статьи

Также работу можно отследить в мониторе порта.

Также работу можно отследить в мониторе порта.

Как видно, у нас приходят данные с дисплея, если менять значения со 2 по 4 цифровое поле. Если изменить значение первого поля, то получим в мониторе порта не только входящее значение от дисплея, но и ответ о том, что данные были переданы на дисплей. Это как раз происходит обновление второго поля данными с МК.

Это как раз происходит обновление второго поля данными с МК.

Сегодня в статье рассмотрели, как можно управлять дисплеем DWIN через RS232. В следующей статье рассмотрим, как работать по RS485. Не забывайте оставлять свои комментарии к статье. На основе ваших предложений и вопросов формируются будущие статьи и проекты.

Материал для данной статьи подготовлен командой проекта Arduino-Tex.Ru.

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.


Понравилась статья Подключаем дисплей DWIN к ARDUINO по rs232? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Обзор платы ESP12F Relay X4. http://arduino-tex.ru/news/153/obzor-platy-esp12f-relay-x4.html Константин Portal-PK 2023-01-05T12:34:51+03:00 При планировании нового проекта пришло время выбрать электронику. Так как проект должен управлять нагрузкой, соответственно, понадобится модуль из 4 реле, микроконтроллер и источник питания. После небольших поисков выбор пал на плату ESP12F Relay X4 (LC-Relay-ESP12-4R-MV – по даташиту), которая включает в себя всё необходимое. Приятным бонусом является тот момент, что плата также на борту имеет источник питания AC/DC, а это позволяет подключиться к сети 220 В и больше ни о чём не думать.

 ESP12F Relay X4 (LC-Relay-ESP12-4R-MV – по даташиту)

Обзор ESP12F Relay X4.

На плату размещены четырёхпозиционное реле и модуль ESP-12F, а также выведены порты ввода/вывода. Имеется несколько вариантов подключения источников питания AC90-250V / DC7-30V / 5V.

ESP12F Relay X4

Запрограммировать устройство можно в среде разработки Arduino IDE, а благодаря микроконтроллеру ESP8266 устройство имеет Wi-Fi, это позволит использовать устройство в системах "умным домом" и в других случаях, где требуется управление по Wi-Fi.

Характеристики ESP12F Relay X4:

1. Используется Wi-Fi модуль ESP-12F, флэш-память объёмом 4 М байт;

2. Порты ввода-вывода и порт загрузки программы по UART разведены на плате для облегчения разработки;

3. Встроенный модуль питания с коммутацией переменного и постоянного тока, режим питания поддерживает AC90-250V/DC7-30V/5V;

4. Кнопка перезагрузки модуля;

5. ESP-12F поддерживает инструменты разработки, такие как Eclipse / Arduino IDE;

6. На плате имеется 4 реле 5 В, подходящие для управления нагрузками, рабочее напряжение которого находится в пределах 250 В переменного тока / 30 В постоянного тока;

7. Встроенный индикатор питания, 1 программируемый светодиод и индикаторы реле.

Габаритные размеры и вес:

  • Размер платы: 93 на 87 мм
  • Вес: 90 г

Характеристики ESP12F Relay X4

Интерфейс.

Порт программирования:

GND, RX, TX, 5V ESP8266 подключены к GND, TX, RX, 5V внешнего модуля последовательного порта TTL.

Внимание! При загрузке прошивку необходимо IO0 соединить с GND, а затем отключить соединение между IO0 и GND после завершения загрузки прошивки.

Релейный выход:

  • NC: нормально замкнутый контакт реле – замкнут на контакт COM, при подаче управляющего сигнала размыкается;
  • COM: общий контакт;
  • NO: нормально разомкнутый контакт реле - контакт разомкнут, при подаче управляющего сигнала замыкается на COM.

Описание GPIO распаянных на плате.

Прежде чем приступать к рассмотрению распаянных GPIO на плате, давайте рассмотрим распиловку модуля ESP-12F.

Прежде чем приступать к рассмотрению распаянных GPIO на плате, давайте рассмотрим распиловку модуля ESP-12F.

И часть схемы модуля ESP12F Relay X4, по которой видно, как разведены GPIO ESP8266.

И часть схемы модуля ESP12F Relay X4, по которой видно, как разведены GPIO ESP8266.

Колодка подключения программатора.

Колодка подключения программатора.

Pin

Описание

5V

Питание 5V

TX

Подключить к RX программатора

RX

Подключить к TX программатора

GPIO0

Подтянут к GND для программирования

GND

Пин для подтяжки GPIO0 к GND

GND

Пин подключения к GND программатора

Колодка подключения периферийных устройств и датчиком.

Колодка подключения периферийных устройств и датчиком.


Pin

Описание

3V3

Для подключения датчиков и сенсоров 3,3 В

3V3

Для подключения датчиков и сенсоров 3,3 В

5V

Для подключения датчиков и сенсоров 5 В

5V

Для подключения датчиков и сенсоров 5 В

GND

GND

GND

GND



GPIO5

SCL – контакт шины i2c(Синий светодиод (перевернутая логика))

GPIO4

SDA – контакт шины i2c

GPIO0

(IO0 имеет внешний подтягивающий резистор на плате!)

GPIO2

UART1 - TX1

GPIO15

IO15 имеет внешний стягивающий резистор на плате!

GND

GND

Колодка подключения перемычек для реле и аналоговый вход.

Колодка подключения перемычек для реле и аналоговый вход.


Pin

Описание

ADC

Аналоговый вход. Диапазон входного напряжения 0 ~1В, диапазон значений: 0 ~1024

EN

Включить pin-код, подтянуть по умолчанию

GPIO16

Используйте перемычку RY1, чтобы включить реле 1

GPIO14

Используйте перемычку RY2, чтобы включить реле 2

GPIO12

Используйте перемычку RY3, чтобы включить реле 3

GPIO13

Используйте перемычку RY4, чтобы включить реле 4

В следующей статье разберём, как подготовить устройства к работе и запрограммировать в среде Arduino IDE.

Понравилась статья Обзор платы ESP12F Relay X4? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Новогодняя гирлянда с панелью управления на дисплее DWIN. http://arduino-tex.ru/news/152/novogodnyaya-girlyanda-s-panelyu-upravleniya-na-displee.html Константин Portal-PK 2022-12-29T08:30:11+03:00 По традиции уже несколько лет подряд я делаю новую версию новогодней гирлянды для ёлки. Но в этом году отойду от концепции гирлянды с управлением с приложения для телефона, так как приложение — не самое оптимальное и удобное управление гирляндой. Также для управления гирляндой делал сенсорную кнопку, которая больше пользовалась популярностью, поэтому в этом году сделаю панель управления для гирлянды на дисплее от компании DWIN.


Обзор гирлянды с управлением на дисплее DWIN.

Начну с обзора результата. Панель управления сделана в корпусе с возможностью повесить устройство на стену. Интерфейс позволяет управлять гирляндой с выбором одного из 18 режимов или выбором статического цвета с помощью слайдера.

Обзор гирлянды с управлением на дисплее DWIN.

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

Управление звездой также дополнил в этом году. Сделал выбор 4 цветов и 4 режимов.

Что нового?

  • Выбор одного статического цвета гирлянды из 255 цветов;
  • Изменение скорости эффектов гирлянды и звезды;
  • 4 эффекта для звезды с возможностью комбинировать с одним из 4 цветов.

4 эффекта для звезды с возможностью комбинировать с одним из 4 цветов.

Панель управления гирляндой 2023.

Интерфейс панели управления будет выглядеть следующим образом.

Панель управления гирляндой 2023.

Правая часть отвечает за управление гирляндой. Левая - за управление звездой.

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

Для стабильной работы устройства использую два источника питания.

Первый — для ESP32 + DWIN. Второй — для ленты на адресных светодиодах ws2812b.

Первый — для ESP32 + DWIN. Второй — для ленты на адресных светодиодах ws2812b.

Прошивка для дисплея DWIN и для ESP32.

Скачать прошивку для дисплея DWIN с разрешением 1024 х 600 вы можете внизу статьи в разделе «Файлы для скачивания».

Прошивка для дисплея DWIN и для ESP32.

Также вы можете скачать бинарный файл для ESP32 DEVKIT V1 с различным количеством светодиодов:

  • 30 светодиодов гирлянда – 5 звезда;
  • 60 светодиодов гирлянда – 5 звезда;
  • 90 светодиодов гирлянда – 5 звезда;
  • 150 светодиодов гирлянда – 7 звезда;
  • 300 светодиодов гирлянда – 7 звезда.

Исходные материалы для дисплея DWIN и код для ESP32 в среде Arduino IDE вы можете скачать по подписке на сайте Бусти.

Исходные материалы на сайте Бусти.

С Новым Годом!


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Новогодняя гирлянда с панелью управления на дисплее DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 8. Управление звуком и подсветкой, перезагрузка, переход по страницам дисплея DWIN с микроконтроллера. http://arduino-tex.ru/news/151/upravlenie-zvukom-i-podsvetkoi-perezagruzka-perehod.html Константин Portal-PK 2022-12-23T07:30:24+03:00 При создании проектов с использованием сенсорного HMI дисплея DWIN часто возникает потребность управлять функциями дисплея с микроконтроллера (МК), такого как Arduino, ESP8266, ESP32, STM32 и других. Параметров для управления достаточно много. Сегодня рассмотрим основные и часто используемые: управление яркостью подсветки, включение и выключение звукового уведомления при нажатии на тачскрин, переход по страницам проекта и перезагрузка дисплейного модуля с помощью команды с микроконтроллера.

Где посмотреть, какими параметрами можно управлять с МК?

Перед тем как приступить к практике, давайте рассмотрим теорию. А именно, какие параметры можно изменять и где найти информацию в документации к HMI дисплеям DWIN?

Для ответа на данный вопрос давайте обратимся к документу «T5L_DGUSII Application Development Guide», который можно скачать на официальном сайте компании или внизу статьи в разделе «Файлы для скачивания».

На 45 странице приведён список системных переменных. Диапазон адресов системных переменных от 0x0000 до 0x0FFF. В связи с этим диапазон адресов для использования в проекте начинается с 0x1000. Об этом коротко рассказано ранее в уроках по дисплеям DWIN.

При создании проектов с использованием сенсорного HMI дисплея DWIN часто возникает потребность управлять функциями дисплея с микроконтроллера

Один из частых вопросов: какую команду отправить на микроконтроллер для управления дисплейным модулем? Поэтому давайте на примере рассмотрим по порядку, как пользоваться этими данными.

Один из частых вопросов: какую команду отправить на микроконтроллер для управления дисплейным модулем?

Пример команд для управления HMI дисплеем DWIN с МК.

1. Перезагрузить дисплей с помощью команды.

Пример команд для управления HMI дисплеем DWIN с МК.

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

5A A5 07 82 00 04 55 AA 5A A5

Это приведёт к сбросу микроконтроллера T5L, очистит все данные, что эквивалентно отключению питания дисплея.

2. Вывести идентификатор текущей страницы.

Для того чтобы определить, какая страница проекта на данный момент активна, используется команда:

5A A5 04 83 0014 01

В ответ придут следующие данные:

5AA5 06 83 00 14 01 0007

, где 0007 - id страницы 07.

3. Переход между страницами проекта при помощи команды с МК.

Переход между страницами проекта при помощи команды с МК.

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

5A A5 07 82 00 84 5A 01 00 02

, где 02 – id страницы, на которую нужно перейти (если нет id в файле .ICL, переход не будет выполнен).

4. Включение/выключение звукового уведомления (звучание зуммера) при нажатии на сенсор.

Включение и выключение звукового уведомления (звучание зуммера) при нажатии на сенсор является одним из параметров системных настроек, которые располагаются по адресу 0x80. Ниже приведён перечень параметров, которые позволят изменить системные настройки.

Включение/выключение звукового уведомления (звучание зуммера) при нажатии на сенсор.

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

5A A5 07 82 0080 5A 00 00 38

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

5A A5 07 82 00 80 5A 00 00 30

5. Кроме управления звучанием зуммера можно отправить команду для воспроизведения звука (WAE -файл).

Про создание звуковых уведомлений из mp3 файлов при нажатии на активные элементы рассказано в следующем уроке.

Про создание звуковых уведомлений из mp3 файлов при нажатии на активные элементы рассказано в следующем уроке. А сегодня рассмотрим, как управлять данными параметрами с МК. Для этого используется команда:

5AA5 07 82 00 A0 1001 4000

0x5AA5: Заголовок фрейма;

0x07: Длина данных;

0x82: Инструкция по записи;

0x00A0: Адрес воспроизведения звука. Позиция аудиофайла, диапазон 0x00-0xFF;

0x01: Воспроизводится вся музыка целиком;

0x40: Объём, единица измерения 1/64. К устройству можно подключить динамик мощностью 3-5 Вт, импедансом 8 Ом;

0x00: Ход воспроизведения.

6. Отключаем передачу данных в порт.

Также можно отключить передачу данных в порт. Для этого нужно выполнить команду:

5A A5 07 82 00 80 5A 00 00 28

7. Определить версию программного обеспечения.

Определить версию программного обеспечения.

Иногда нужно определить версию программного обеспечения, для этого используется команда:

5A A5 04 83 000 F01

которая вернёт значение:

5AA5 06 83 000 F01 1110

, где 11 - версия программного обеспечения с графическим интерфейсом, 10 - версия программного обеспечения DWIN OS.

Как управлять данными параметрами через графический интерфейс среды разработки DGUS?

Я уже предвижу вопрос: «Как управлять данными параметрами не с микроконтроллера, а из графического интерфейса, созданного в среде разработки DGUS?». Давайте рассмотрим несколько примеров.

Изменение яркости подсветки дисплея DWIN.

Самый простой способ инидикации уровня яркости подсветки - с помощью слайдера Slider Display. Ниже пример настроек.

Изменение яркости подсветки дисплея DWIN.

Для считывания позиции перемещения по сенсору используется инструмент Drag Adjustment. На картинке ниже приведены основные настройки для этой задачи.

Для считывания позиции перемещения по сенсору используется инструмент Drag Adjustment.

Включить и выключить зуммер дисплея DWIN.

Для включения и выключения зуммера дисплея DWIN в среде разработки DGUS используем инструмент Synchrodata return.

Включить и выключить зуммер дисплея DWIN.

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

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

Для выключения зуммера настройки аналогичные со следующими параметрами.

Перезагрузка дисплея.

Для того чтобы перезагрузить дисплей DWIN, поможет инструмент Synchrodata return. Для этого нужно указать следующие параметры.

Для того чтобы перезагрузить дисплей DWIN, поможет инструмент Synchrodata return.

В данной статье описаны только основные моменты. Более подробное описание всех возможностей вы можете прочитать в инструкции «T5L_DGUSII Application DevelopmentGuide», которую можно скачать на официальном сайте компании или внизу статьи в разделе «Файлы для скачивания».

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

Материал для данной статьи подготовлен командой проекта Arduino-Tex.Ru.

Смотрите также другую полезную информацию про дисплеи DWIN:

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравилась статья Управление звуком и подсветкой, перезагрузка, переход по страницам дисплея DWIN с микроконтроллера? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
НОВИНКА! СЕНСОРНЫЙ ЭКРАН DWIN С ПОВЕРХНОСТНОЙ АКУСТИЧЕСКОЙ ВОЛНОЙ СКОРО БУДЕТ ВЫПУСКАТЬСЯ СЕРИЙНО http://arduino-tex.ru/news/150/novinka-sensornyi-ekran-dwin-s-poverhnostnoi.html Константин Portal-PK 2022-12-19T11:00:27+03:00 Недавно компания DWIN Technology успешно разработала сенсорный экран на поверхностных акустических волнах. Он обладает высокими характеристиками надежности, такими как устойчивость к пульсациям, коррозионная стойкость и защита от электромагнитных помех. Он может быть применен в интеллектуальных экранах DGUS или встроенных экранах систем, таких как Linux, Android и Windows, которые подходят для терминалов обслуживания продаж, таких как торговые автоматы, банковские терминалы самообслуживания, интерактивные игровые автоматы и промышленные панели управления. Пользователи могут связаться с торговым персоналом DWIN для получения образцов для тестового использования.

СЕНСОРНЫЙ ЭКРАН DWIN С ПОВЕРХНОСТНОЙ АКУСТИЧЕСКОЙ ВОЛНОЙ СКОРО БУДЕТ ВЫПУСКАТЬСЯ СЕРИЙНО

Особенности:

1) Сенсорный экран с поверхностной акустической волной использует технологию ультразвукового позиционирования на поверхности стекла для реализации сенсорного восприятия, и обладает отличной способностью противостоять электромагнитным помехам.

2) Стекло сенсорного экрана может быть изготовлено от 4 мм до 10 мм из закаленного стекла или другого специального стекла, которое имеет 98% светопропускаемость, устойчивость к коррозии, царапинам и другим повреждениям.

3)Высокая плотность распределения точек касания, более 10 000 точек касания на квадратный дюйм, отсутствие смещения касания и автоматическая коррекция.

4)Поддержка касания пальцем, мягкой ручкой, перчаткой, срок службы может достигать более 50 миллионов одноточечных касаний, что подходит для высокоинтенсивных и частотных сенсорных касаний.

5) Сенсорный экран может быть изготовлен на заказ в различных размерах, от 21,5 до 100 дюймов.

СЕНСОРНЫЙ ЭКРАН DWIN С ПОВЕРХНОСТНОЙ АКУСТИЧЕСКОЙ ВОЛНОЙ СКОРО БУДЕТ ВЫПУСКАТЬСЯ СЕРИЙНО

Технические характеристики

Характеристики сенсора

Точки касания

Одно касание

Сенсорный ввод

Пальцы, перчатки, стилус

Точность определения местоположения

<2,5 мм

Стандартная сила активации при касании

Менее 1 унции (15 грамм)

Скорость передачи данных

200 Гц

Смещение

Нет

Интерфейс

Стандартный интерфейс USB

Оптические свойства

Обработка поверхности

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

Защита от бликов

Поддерживается

Светопропускаемость

≥98%

Механические параметры

Толщина

от 4 до 10 мм

Диапазон размеров

от 21.5 до 100 дюймов

Прочность и выносливость

Твердость стекла

Твердость поверхности по Моосу составляет 6,5

Устойчивость к царапинам

Высокая твердость не легко поцарапать, и оно может нормально работать даже в случае царапин

Химическая стойкость

Устойчивость к любым химическим веществам, которые не разъедают стекло

Условия эксплуатации

Рабочая температура

от -20°C до 70°C (без конденсации влаги)

Температура хранения

от -40°C до 85°C (без конденсации влаги)

Влажность

240 часов при относительной влажности от 60% до 80%

Срок службы

50 миллионов нажатий

Операционные системы

DGUS, Apple OS, Google Android, Linux, Windows


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Урок 7. Отключаем ответ дисплея DWIN на входящие данные. http://arduino-tex.ru/news/149/otklyuchaem-otvet-displeya-dwin-na-vhodyashchie-dannye.html Константин Portal-PK 2022-12-16T08:38:36+03:00 При отправке данных на дисплей DWIN дисплей в ответ оправляет "5A A5 03 82 4F 4B". Это сигнализирует о том, что данные получены. Если организовать проверку, прислал дисплей данные "5A A5 03 82 4F 4B" или нет, это поможет определить, поступили данные на дисплей или нет. Жалко, что нет контроля целостности данных, но тема статьи совсем о другом. Сегодня поговорим о том, как отключить подтверждение принятого пакета данных. Сейчас расскажу, где это может понадобиться и как восстановить подтверждение принятого пакета данных.

При отправке данных на дисплей DWIN дисплей в ответ оправляет "5A A5 03 82 4F 4B".

Для чего нужно отключать подтверждение принятого пакета данных дисплеем DWIN.

Давайте разберёмся, в каких случаях нужно отключать подтверждение принятого пакета данных дисплеем DWIN. При каждой отправке данных дисплей возвращает значение "5A A5 03 82 4F 4B". Это достаточно удобно, так как можно определить, что данные были отправлены на дисплей. Но при отладке проекта, когда данные отправляются достаточно часто и при этом нам нужно отследить, например, при нажатии кнопки приходят данные с дисплея, в большом потоке данных отследить нужную команду достаточно сложно. Поэтому можно временно отключить отправку данных о получении пакета данных дисплеем.

Для чего нужно отключать подтверждение принятого пакета данных дисплеем DWIN.

Как отключить подтверждение принятого пакета данных "5A A5 03 82 4F 4B"?

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

Как отключить подтверждение принятого пакета данных "5A A5 03 82 4F 4B"?

  • Первый файл подойдёт для дисплеев, у которых нет модуля реального времени RTC «T5L_OS_V20_NO RTC_V20_20220914.BIN».
  • Второй предназначен для дисплеев с RTC «T5L_OS_V20_RX8130 RTC_V20_20220914.BIN».

Добавляем файл к файлам проекта или, если проект уже загружен на дисплей, достаточно добавить файл на карту памяти в папку DWIN_SET и загрузить файл(ы) проекта на дисплей.

 добавить файл на карту памяти в папку DWIN_SET

После чего в монитор порта не будут выводиться данные "5A A5 03 82 4F 4B".

После чего в монитор порта не будут выводиться данные "5A A5 03 82 4F 4B".

Как подобрать карту памяти и загрузить прошивку, читайте в следующей статье.

Как восстановить подтверждение принятого пакета данных "5A A5 03 82 4F 4B"?

Для того чтобы восстановить подтверждение принятого пакета данных HMI дисплеем DWIN, достаточно зайти на официальный сайт и скачать интересующую вас версию или скачать файл внизу статьи в разделе «Файлы для скачивания».

Как восстановить подтверждение принятого пакета данных "5A A5 03 82 4F 4B"?

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

Аналогичным способом, как и при отключении подтверждения, загружаем скаченный файл на дисплей DWIN

Материал для данной статьи подготовлен командой проекта Arduino-Tex.Ru.


Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.


Понравилась статья Отключаем ответ Дисплея DWIN на входящие данные? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Структура flash-памяти дисплеев DWIN и особенности распределения данных. http://arduino-tex.ru/news/148/struktura-flash-pamyati-displeev-dwin-i-osobennosti.html Константин Portal-PK 2022-12-09T07:51:15+03:00 На нашем сайте Arduino-Tex.Ru много полезной информации по работе с дисплеями DWIN. От описания инструментов среды разработки DGUS, которые вы можете найти в разделе «Статьи про DWIN» до проектов, реализованных на дисплеях DWIN. Сегодня рассмотрим структуру flash-памяти дисплеев DWIN и как правильно распределить память. А также рассмотрим, в какой области памяти нужно хранить шрифты, конфигурационные файлы, файлы с картинками .icl и звуковые файлы .wae.


В чём отличие распределения памяти дисплеев серии COF и COB.

Рассмотрим кратко, чем отличаются дисплеи COF от COB.

Рассмотрим кратко, чем отличаются дисплеи COF от COB.

Дисплеи серии COF очень тонкие и имеют гибкий шлейф, на котором располагаются электронные компоненты. В связи с чем место ограничено и flash-памяти всего 8 МБ.

Панель управления шаговым двигателем на основе дисплея DWIN.

Дисплеи COB собираются на плате, на которой распаивается от 16 МБ памяти. В связи с этим структура памяти отличается.


16 МБ flash-памяти имеет 64 ячейки памяти по 256 КБ.

16 МБ flash-памяти имеет 64 ячейки памяти по 256 КБ.

8 МБ flash-памяти имеет 32 ячейки памяти по 256 КБ.

8 МБ flash-памяти имеет 32 ячейки памяти по 256 КБ.


Как правильно использовать flash-памяти дисплеев DWIN для загрузки файлов.

Одна ячейка памяти имеет размер 256 килобайт. Если нужно загрузить файл размером 174 килобайта в 26 ячейку памяти, ячейка памяти занята не полностью. Но для загрузки другого файла её использовать нельзя.

Как правильно использовать flash-памяти дисплеев DWIN для загрузки файлов.

Следующий файл нужно загружать в 27 ячейку. При загрузке файла больше 256 килобайт, например, 430, данный файл займёт 26 ячейку и 174 килобайта 27-ой ячейки. При этом 26 и 27 ячейка памяти уже заняты. Загружать следующий файл можно в 28 ячейку памяти.

Особенности работы с файлами дисплеев на T5L1 и T5L2 DWIN.

При создании .icl файлов доступен выбор «Core Type», где можно выбрать T5L1 или T5L2. В чём же отличия?

Особенности работы с файлами дисплеев на T5L1 и T5L2 DWIN.

Для платформы T5L1 размер одного файла изображения, упакованного в .ICL файл, не должен превышать 248 КБ, а для T5L2 – 760 КБ. Обратите внимание, имеется в виду размер одного файла изображения (JPG, PNG, BMP, ICO), а не файла .ICL.

Для платформы T5L1 размер одного файла изображения, упакованного в .ICL файл, не должен превышать 248 КБ

Материал для данной статьи подготовлен командой проекта Arduino-Tex.Ru.

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Структура flash-памяти дисплеев DWIN и особенности распределения данных? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
ОТКРЫТЫЙ ПРОЕКТ: СИСТЕМА ПОДАЧИ ВОДЫ ПОСТОЯННОГО НАПОРА НА ОСНОВЕ COF ДИСПЛЕЯ — ОТ ПОЛЬЗОВАТЕЛЯ DWIN ФОРУМА http://arduino-tex.ru/news/147/otkrytyi-proekt-sistema-podachi-vody-postoyannogo.html Константин Portal-PK 2022-12-06T12:52:27+03:00 1. Принцип работы

В проекте используется дисплей COF DMG80480F070_01WTR, который использует микросхему T5L в качестве основного элемента управления для получения и обработки данных о подаче воды, собранных датчиками, управления ЖК-экраном для отображения данных и управления инвертором для регулировки скорости двигателя насоса для достижения постоянного и стабильного давления системы водоснабжения. Имеются функции аварийного предупреждения и настройки начального давления по времени.

ОТКРЫТЫЙ ПРОЕКТ: СИСТЕМА ПОДАЧИ ВОДЫ ПОСТОЯННОГО НАПОРА НА ОСНОВЕ COF ДИСПЛЕЯ — ОТ ПОЛЬЗОВАТЕЛЯ DWIN ФОРУМА

2. Схема проектирования

(1) Блок-схема

(2) Блок-схема оборудования

Блок-схема оборудования

(3) Дизайн графического пользовательского интерфейса DGUS

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

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

(4) Схема проектирования

1.AD

В основном собирает обычные 4-20 мА/0-5 В с датчиков, преобразует тип напряжения-ток в 0-3 В, и после расчета AD может получить соответствующие данные датчика.

Работа с сенсорами AD

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

Справочный код ADСправочный код AD

2.DA

ШИМ используется для управления аналоговым напряжением и выводит управляющий сигнал 0-10 В через операционный усилитель.

Схема обнаружения постоянного тока

Схема обнаружения постоянного тока

Аппаратная схема постоянного тока

Аппаратная схема постоянного тока

Справочный код постоянного тока

Справочный код постоянного тока

3. Раздел ввода-вывода

В основном входы оптопары, T5L обнаруживает соответствующие изменения уровня.

Схема оборудования ввода-вывода

Схема оборудования ввода-вывода

Справочный код ввода-вывода

Справочный код ввода-вывода

4.Ввод-вывод

Главный транзистор ввода-вывода Дарлингтона производит управляющие реле, а система ввода-вывода управляет высоким и низким уровнями.

Схема оборудования реле

Схема оборудования реле

Справочный код реле

Справочный код реле

5.РТК

RX8130, двухпроводная связь.

Схема оборудования часов реального времени

Схема оборудования часов реального времени

Справочный код часов реального времени

Справочный код часов реального времени

6.485

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

485 Аппаратная схема

485 Аппаратная схема

7.ПИД

В основном используется позиционный ПИД-алгоритм, выходной сигнал ограничен, обратите внимание на насыщение интегрального члена, а результатом является регулирование аналогового напряжения для ШИМ.

ПИД

8.Другие коды

Автоматическая установка начального давления в зависимости от времени.

Автоматическая установка начального давления в зависимости от времени.


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
ОТКРЫТОЕ РЕШЕНИЕ: СИСТЕМА УПРАВЛЕНИЯ ИНТЕЛЛЕКТУАЛЬНЫМ ШКАФОМ НА ОСНОВЕ ДИСПЛЕЯ DWIN T5L http://arduino-tex.ru/news/146/otkrytoe-reshenie-sistema-upravleniya.html Константин Portal-PK 2022-12-06T10:06:33+03:00 В качестве основного элемента управления используется микросхема T5L на дисплей DWIN. Которая по последовательной шине управляет сервоприводом, а тот в свою очередь управляет открыванием двери, а также обрабатывает данные датчика, собранные вспомогательным контроллером, и управляет ЖК-экраном для отображения данных. Он имеет функцию предупреждения о нештатных ситуациях и автоматическую систему освещения, которую можно использовать в условиях слабого освещения.

СИСТЕМА УПРАВЛЕНИЯ ИНТЕЛЛЕКТУАЛЬНЫМ ШКАФОМ НА ОСНОВЕ ДИСПЛЕЯ DWIN T5L

1. Описание программы

(1) Экран T5L используется в качестве основного элемента управления для прямого управления сервоприводом. При использовании сервопривода серии FEETECH STS крутящий момент варьируется от 4,5 кг до 40 кг, а протокол является универсальным.

(2) Сервопривод имеет функции защиты по току, крутящему моменту, температуре и напряжению, и его безопасность выше, чем у обычных двигателей;

(3) Один последовательный порт поддерживает одновременное управление 254 сервоприводами.

2.Схема проектирования

(1) Блок-схема

Блок схема. СИСТЕМА УПРАВЛЕНИЯ ИНТЕЛЛЕКТУАЛЬНЫМ ШКАФОМ НА ОСНОВЕ ДИСПЛЕЯ DWIN T5L

(2) Схема механической структуры

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

Схема открывающей конструкции

Схема открывающей конструкции

Схема замыкающей конструкцииСхема замыкающей конструкции

(3) DGUS GUI дизайн

DGUS GUI дизайн
DGUS GUI дизайн

(4) Схема цепи

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

Главная печатная платаГлавная печатная плата

Понижающая схемаПонижающая схема

Схема освещенияСхема освещения

3. Пример программы

Обнаружение и обновление температуры и влажности, обновление времени (AHT21 управляется вспомогательным контроллером, а данные о температуре и влажности записываются на экран DWIN)

/*****************Temperature and humidity update**********************/
void dwin_Tempe_humi_update( void)
{
        uint8_t  Tempe_humi_date[20];  //Commands sent to the LCD screen
        AHT20_Read_CTdata(CT_data);  //Read temperature and humidity
        Tempe_humi_date[0]=0x5A;
        Tempe_humi_date[1]=0xA5;
        Tempe_humi_date[2]=0x07;
        Tempe_humi_date[3]=0x82;
        Tempe_humi_date[4]=(ADDR_TEMP_HUMI>>8)&0xff;
        Tempe_humi_date[5]=ADDR_TEMP_HUMI&0xff;
        Tempe_humi_date[6]=((CT_data[1] *200*10/1024/1024-500)>>8)&0xff;
        Tempe_humi_date[7]=((CT_data[1] *200*10/1024/1024-500))&0xff;//Calculate the temperature value (enlarged by 10 times, if t1=245, it means that the temperature is now 24.5°C)
        Tempe_humi_date[8]=((CT_data[0]*1000/1024/1024)>>8)&0xff;
   Tempe_humi_date[9]=((CT_data[0]*1000/1024/1024))&0xff;  //Calculate the humidity value (magnified 10 times, if c1=523, it means that the humidity is 52.3% now)
        Usart_SendString( USART_DWIN,Tempe_humi_date,10);
}


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
ПРОЕКТ С ОТКРЫТЫМ ИСХОДНЫМ КОДОМ: РЕШЕНИЕ ДЛЯ КАМЕРЫ НА БАЗЕ DWIN T5L0 ASIC http://arduino-tex.ru/news/145/proekt-s-otkrytym-ishodnym-kodom-reshenie-dlya-kamery.html Константин Portal-PK 2022-11-01T07:39:40+03:00 Решение для камеры на базе DWIN T5L0 ASIC использует T5L0 в качестве основного блока управления камерой. T5L0 непосредственно обрабатывает информацию, собранную модулем OV2640, и передает изображение с камеры в режиме реального времени на смарт-экран по витой паре (режим связи с несущей FSK) для синхронного отображения. Модуль камеры оснащен функциями инфракрасного ночного видения и фоточувствительного обнаружения, а ночное видение обеспечивает четкое качество изображения круглосуточно. Дисплей с камерой может широко использоваться в сельскохозяйственной технике, санитарных транспортных средствах, мониторинге безопасности, новых электро-скутерах и других сценариях.

ПРОЕКТ С ОТКРЫТЫМ ИСХОДНЫМ КОДОМ: РЕШЕНИЕ ДЛЯ КАМЕРЫ НА БАЗЕ DWIN T5L0 ASIC

1. Особенности

(1) Высокая производительность:

1) Скорость связи до 35 Мбит/с с плавным отображением и без задержек;

2) Поддерживает 31 камеру параллельно, и изображение с камер отображается на том же экране;

3) Поддержка кабеля длиной до 300 метров.

(2) Быстрая разработка:

1) Камера напрямую подключается к экрану DGUS серии DWIN T5L через 2-контактный кабель витой пары;

2) Используйте инструмент DGUS "управление наложением слоев" для завершения разработки функций.

3) Поддержка регулировки яркости, зума, зеркального отображения, замораживания, регулировки инфракрасного света и других методов настройки.

2. Схематическая диаграмма

Схематическая диаграмма T5L0

Принципиальная схема платы драйвера T5L0

Проектирование печатных плат

Проектирование печатных плат

Проектирование печатных плат

Проектирование печатных плат

3. Аппаратный состав камеры

Она состоит из чипа T5L0, светочувствительного чипа OV2640, корпуса, объектива, ламп, проводов и т.д.

Аппаратный состав камеры

Аппаратный состав камеры

4. Загрузка

1) Программа для записи платы драйвера камеры: T5L_UI_Bus camera_V21_20220929

2) Метод записи: Запись программы на плату драйвера через T5L JTAG burner; если используется готовая камера, запишите программу на смарт-экран через T5L JTAG burner для обновления.

3) Код OV2640.


Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Описание инструмента «Artistic variables». Справочник среды разработки DGUS. http://arduino-tex.ru/news/144/opisanie-instrumenta-artistic-variables-spravochnik-sredy.html Константин Portal-PK 2022-10-21T07:21:14+03:00 При реализации проектов с использованием HMI дисплеев требуется выводить цифровую информацию. Иногда требуется вывод цифр в определённом стиле. Например, как сделано в проекте «Часы с функцией плеера и ночника на сенсорном дисплее».

Функции часов

В среде разработки DGUS дисплеев DWIN есть инструмент «Artistic variables», который позволяет подменить цифры на иконки, которые можно создать самостоятельно. Для этого достаточно создать 10 иконок и загрузить их в дисплей. И программа автоматически выведет однозначное, двухзначное, трёхзначное число и больше символов без дополнительного написания кода или манипуляций. Достаточно удобно, не правда ли!

Описание инструмента «Artistic variables».

Инструмент «Artistic variables» позволяет использовать свои шрифты при выводе цифровой информации. Это может быть полезно не только для вывода красивых цифр, но и для вывода специальных символов. Например, для того чтобы скрыть пароль, можно использовать символ звёздочки для цифрового значения, тем самым скрыть вводимый пароль от посторонних глаз.

Это может быть полезно не только для вывода красивых цифр, но и для вывода специальных символов

Найти инструмент «Artistic variables» можно на панели «ICON Display» в версии DGUS_V7.640 и последующих.

В более ранних версиях среды разработки инструмент находился на вкладке «Display Control»

В более ранних версиях среды разработки инструмент находился на вкладке «Display Control».

В более ранних версиях среды разработки инструмент находился на вкладке «Display Control».

Ниже представлено описание инструмента «Artistic variables» на русском языке.

Ниже представлено описание инструмента «Artistic variables» на русском языке.

Окно выбора первой иконки.

Окно выбора первой иконки.


Особенность работы с данным инструментом в том, что выбрать нужно первую иконку, которая будет соответствовать цифре 0. Остальные иконки берутся по порядку. Это нужно учитывать при добавлении иконок в проект. Если ID первой иконки 20, значит на ней должен быть изображен 0, на 21 – 1, 22 – 2 и так далее.

Пример использования «Artistic variables». Вывод красивых цифр времени.

При реализации проекта «Часы с функцией плеера и ночника на сенсорном дисплее» было принято решение сделать вывод времени в виде цифр, как на электронных часах. В этом как раз помог инструмент «Artistic variables».

Приступаем к добавлению. Первым делом нужно сделать .ICL файл с набором иконок.

Приступаем к добавлению. Первым делом нужно сделать .ICL файл с набором иконок.

Для данного проекта было сделано несколько наборов иконок вывода цифровых значений. Их все можно упаковать в один .ICL файл. После чего выбираем инструмент «Artistic variables» и выделяем область на экране, где будем выводить значения.

 И указываем нужные параметры, не забывая указать id первой иконки.

И указываем нужные параметры, не забывая указать id первой иконки.

 И указываем нужные параметры, не забывая указать id первой иконки. И указываем нужные параметры, не забывая указать id первой иконки.

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


Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Artistic variables»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
ДАВАЙТЕ ПОПРОБУЕМ! ОБНОВЛЕННОЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ DGUS V7 http://arduino-tex.ru/news/143/davaite-poprobuem-obnovlennoe-programmnoe.html Константин Portal-PK 2022-10-19T12:31:09+03:00 Недавно DWIN Technology оптимизировала и обновила программное обеспечение DGUSII V7 (применимо к T5 и T5L), что делает процесс отладки и разработки более удобным и приносит больше комфорта в процесс разработки.

Описание обновлений:

1. Быстрая организация элементов управления

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

2.Поддержка последовательной связи во время предварительного просмотра

Эта функция может имитировать последовательную связь на основе предварительного просмотра результатов проекта DGUS.

3. Добавлена функция пакетного добавления элементов управления

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

4.Добавлен инструмент генерации шрифтов

Библиотека шрифтов ASCII, библиотека шрифтов GBK и библиотека шрифтов Unicode объединены в инструмент создания библиотеки шрифтов, что упрощает процесс создания библиотеки шрифтов.

5. Добавлен инструмент управления распределительной сетью

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

(Примечание: Эта функция поддерживает только распределительную сеть модуля DWIN WIFI-10)

Добавлен инструмент управления распределительной сетью

Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
СКОРО ПОЯВИТСЯ НОВЫЙ ПРОДУКТ — КРУГЛЫЙ 1,5-ДЮЙМОВЫЙ ЭКРАН DWIN С ЭНКОДЕРОМ! http://arduino-tex.ru/news/142/skoro-poyavitsya-novyi-produkt-—-kruglyi-15-dyuimovyi.html Константин Portal-PK 2022-10-13T11:43:52+03:00

Компания DWIN выпустила 1,5-дюймовый продукт с круглым экраном в ответ на потребности взаимодействия с пользовательским интерфейсом небольшого размера. Продукт основан на чипе DWIN T5L0, цветном экране с разрешением 240 * 240, а переключение осуществляется вращением и нажатием энкодера. Всё устройство имеет изящный внешний вид, компактную конструкцию и простое управление, что подходит для различных умных бытовых приборов, например, стиральных машин с экраном.

КРУГЛЫЙ 1,5-ДЮЙМОВЫЙ ЭКРАН DWIN С ЭНКОДЕРОМ

1. Особенности

1) Изысканный и компактный: элегантная рамка из алюминиевого сплава сочетается с круглой чёрной панелью, что улучшает визуальное восприятие. Рамка не занимает много места.

2) Простое управление: оснащён высокоточным, помехоустойчивым магнитным энкодером; функции переключения осуществляются вращением и нажатием, с точным управлением и быстрым откликом.

3) Простота разработки: на основе платформы разработки DGUS II легко воссоздать различные идеи дизайна пользовательского интерфейса, помогая пользователям быстро завершить разработку полноценного продукта.

4) Простота установки: установка на защёлках, бесшовное соединение с оборудованием, это обеспечивает хороший эстетический вид.

5) Прочность и долговечность: энкодер рассчитан минимум на 30000 оборотов.

2. Примеры пользовательского интерфейса

Примеры пользовательского интерфейса — КРУГЛЫЙ 1,5-ДЮЙМОВЫЙ ЭКРАН DWIN С ЭНКОДЕРОМ

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Урок 6. Спидометр на дисплее DWIN. Стрелочный индикатор. http://arduino-tex.ru/news/141/urok-6-spidometr-na-displee-dwin-strelochnyi-indikator.html Константин Portal-PK 2022-09-29T09:45:20+03:00 Дисплеи DWIN бывают не только с резистивным и ёмкостными тачскрином. Но есть дисплеи без сенсора, которые предназначены для вывода информации. Такие дисплеи можно использовать, например, для создания приборной панели в авто. В рамках данного урока сделаем спидометр для автомобиля, а показание будем изменять с помощью двух потенциометров. На практике можно использовать делитель напряжения для получения данных в нужном диапазоне.


Создаём интерфейс будущего спидометра на дисплее DWIN.

Прежде чем приступить к проекту, нужно подготовить графические элементы. Для данного урока потребуется 1 фоновое изображение и 1 иконка в виде стрелки.

Создаём интерфейс будущего спидометра на дисплее DWIN.

Небольшой совет. Иконку для стрелки лучше делать с определённым (цветным) фоном, а не PNG без фона. Дисплей видит картинки без фона как будто с белым фоном, поэтому пытается его удалить. В ряде случаев это выглядит хуже, чем если нарисовать картинку изначально с фоном. Цвет фона нужно подбирать в зависимость от цветовой палитры иконки.

 Иконку для стрелки лучше делать с определённым (цветным) фоном, а не PNG без фона.

Создаём проект в среде разработки DGUS.

Изображения подготовили, теперь их нужно добавить в проект. Нам нужно создать один .ICL файл с одним фоновым изображением и один .ICL файл с иконкой. Как создать файлы ICL, рассказывал в предыдущем уроке.

Создаём проект в среде разработки DGUS.

«Icon Rotation» — инструмент для создания стрелочных индикаторов.

Описание данного инструмента вы можете найти на русском языке на этой странице сайта. Ниже приведено изображение с описанием «Icon Rotation» из данной статьи.

Инструмент среды разработки DGUS «Icon Rotation».

Добавить стрелку достаточно просто. Нужно выбрать иконку, которую нам нужно вращать. Верхний левый угол выделенной области (красный квадрат) будет центром вращения иконки на фоновом изображении.

 Верхний левый угол выделенной области (красный квадрат)

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

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

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

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

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

Небольшой лайфхак. Откройте предпросмотр вашего проекта и произведите настройки.

Затем нужно указать начальный угол и конечный угол поворота стрелки. Для этого также в открытом окне предпросмотра смотрим расположение стрелки и выставляем первоначальное положение. Сохраним полученное значение. Затем тут же повернём стрелку до конечного положения. Полученное значение угла поворота запишем в поле «конечное положение угла».

Затем нужно указать начальный угол и конечный угол поворота стрелки.

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

Как загрузить прошивку в дисплей, читайте в предыдущем уроке.

Дизайн готов. Сейчас можно перейти к коду для Arduino, ESP8266, ESP32.

Дизайн готов. Сейчас можно перейти к коду для Arduino, ESP8266, ESP32.

Схема подключения дисплея DWIN Arduino NANO и двух потенциометров.

Схема подключения дисплея DWIN Arduino NANO и двух потенциометров.

Схема подключения дисплея DWIN Arduino NANO и двух потенциометров достаточно простая и сложностей, я думаю, возникнуть не должно. Аналогичным образом подключается два потенциометра к ESP32.

 Аналогичным образом подключается два потенциометра к ESP32.

Но вот с ESP8266 ситуация немного иная, так как там всего 1 аналоговый вход. Но при желании можно получать данные с двух потенциометров и по одному аналоговую входу.

Но вот с ESP8266 ситуация немного иная, так как там всего 1 аналоговый вход.

Код для Arduino, ESP32.

Несмотря на то, что пример написан для Arduino NANO, данный код можно использовать и с другими микроконтроллерами практически без изменений. Но я бы посоветовал при работе с ESP32 перенести подключение дисплея на UART2 микроконтроллера.

Код для Arduino, ESP32

Код получился небольшой, и ничего сложного в нём нет.

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

Код получился небольшой, и ничего сложного в нём нет.

Для того чтобы не передавать данные постоянно, сделал таймер, который считывает показания с потенциометров и передаёт их на дисплей через 10 мс.

Пример работы.

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

Такой небольшой пример позволит создать достаточно красивый спидометр

Ниже приведён второй пример интерфейса спидометра. Так уж получилось, что сделано было 2 варианта.

Ниже приведён второй пример интерфейса спидометра.

Скачать исходные материалы вы можете в разделе «Файлы для скачивания».


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравился урок Спидометр на дисплее DWIN. Стрелочный индикатор? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
DWIN ВЫПУСКАЕТ НОВЫЙ СМАРТ-ЭКРАН 2K HD DGUS http://arduino-tex.ru/news/140/dwin-vypuskaet-novyi-smart-ekran-2k-hd-dgus.html Константин Portal-PK 2022-09-29T07:37:49+03:00 Основываясь на новой архитектуре драйвера dual T5L2, компания DWIN выпустила целый ряд смарт-экранов DGUS высокой чёткости с разрешением 1920*1080 пикселей.

Изображение продукта:

DWIN ВЫПУСКАЕТ НОВЫЙ СМАРТ-ЭКРАН 2K HD DGUS

Основываясь на новой архитектуре драйвера dual T5L2

Примечание: Стандартные продукты не имеют динамиков и камер шины, только зарезервированные интерфейсы.

Каталог моделей:

Модель

Диагональ

(дюйм)

Разрешение

(пиксели)

Режим разработки

DMG19108C116_05W

11.6

1920*1080

DGUS

DMG19108C140_05W

14

DMG19108C156_05W

15.6

DMG19108C173_05W

17.3

DMG19108C185_05W

18.5

DMG19108C215_05W

21.5

Особенности:

1. Основная схема драйвера экрана — это два чипа T5L2 (работают на основной частоте 384 МГц). Дополнительный сопроцессор дисплея, DDR и прочее не требуется. Аппаратное обеспечение значительно упрощено, а стабильность продукта улучшена.

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

Стандартные продукты оснащены интерфейсом камеры шины FSK и интерфейсом динамика

3. Стандартные продукты оснащены интерфейсом камеры шины FSK и интерфейсом динамика. Это удобно для быстрой реализации мультимедийных функций, таких как воспроизведение аудио, воспроизведение видео с камеры, а также короткого видео с нулевым кодом.

4. Стандартный образец по умолчанию использует 32 Мбайт флэш-памяти, а для расширения памяти зарезервирован дополнительный бит. Максимальный размер может быть расширен до 48 Мбайт + 512 Мбайт, что удобно для хранения видеофайлов.

Источник: Официальный сайт DWIN


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Программатор для прошивки (сброса) чипов Mimaki. http://arduino-tex.ru/news/139/programmator-dlya-proshivki-sbrosa-chipov-mimaki.html Константин Portal-PK 2022-09-22T07:46:58+03:00 Сегодня речь пойдет об обновленной версии программатора для сброса чипов Mimaki. В новой версии появились дополнительные функции, а также получили изменения внешняя и аппаратная части. Сейчас программатор оснащён 2,8 дюймовым дисплеем с ёмкостным сенсором от компании DWIN. Дисплей достаточно быстро работает, что делает работу более комфортной.


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

При касании сенсора на событие нажатия кнопки предусмотрены звуковые эффекты

Все возможности программатора для сброса чипов Mimaki:

  • Чтение данных с чипа и вывод на дисплей;
  • Сброс года;
  • Сброс объёма чернил;
  • Смена типа краски картриджа (синий, красный, желтый, черный, белый, лак);
  • Смена типа чернил LH-100 на LF-140 и наоборот;
  • Обновление HEX суммы;
  • Защита паролем, с возможностью выбора входа с паролем или без;
  • Демонстрационная версия доступна по паролю «1234»;
  • Интерфейс на русском языке;
  • Зажимы в виде крабов позволяют легко подключить чип для прошивки;
  • Источник питания – зарядное устройство от телефона или Power bank;
  • Звуковое уведомление при нажатии кнопки на дисплее.

Все возможности программатора для сброса чипов Mimaki

Что появилось в новой версии?

Это уже вторая версия программатора. Информацию о предыдущей версии вы можете посмотреть вот в этой статье: «Программатор чипов Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160.»

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

Данный программатор (на текущий момент времени) поддерживает принтеры Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160.

Сейчас интерфейс стал светлый и более красочный.

Сейчас интерфейс стал светлый и более красочный.

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

В новая версия программатора оснащена ёмкостным сенсором дисплеем и работает он гораздо быстрее.


Дополнения в функционале программатора:

  • Добавлена демонстрационная версия работы программатора.
  • Добавлена возможность смены типа чернил LH-100 на LF-140 и наоборот.

Добавлена демонстрационная версия работы программатора.

Для каких моделей Mimaki подойдёт программатор?

Данный программатор (на текущий момент времени) поддерживает принтеры Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160. Обязательно нужно обратить внимание на микросхему. Поддерживаются чипы с микросхемой серии DS2430 или DS2430а. С микросхемой DS2431 не поддерживается!!!


Поддерживаются чипы с микросхемой серии DS2430 или DS2430а. С микросхемой DS2431 не поддерживается!!!

Купить программатор VK

Купить программатор Avito

Планируется ли версия программатора под чипы DS2431?

Планируется ли версия программатора под чипы DS2431?

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


Понравился проект Программатор для прошивки (сброса) чипов Mimaki? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ДОЖДАЛИСЬ! КРУГЛЫЙ СМАРТ-ЭКРАН DWIN. http://arduino-tex.ru/news/138/dozhdalis-kruglyi-smart-ekran-dwin.html Константин Portal-PK 2022-09-19T08:42:30+03:00 Учитывая различные потребности клиентов в дисплеях, компания DWIN выпустила 2,1-дюймовый круглый смарт-экран на базе чипа T5L1.

Характеристики:

  • 2,1-дюймовый круглый ЖК-экран, разрешение 480*480, широкий угол обзора IPS, чёткий и тонкий дисплей;
  • Круглый сенсорный экран с GFF-структурой идеально сочетает в себе эстетику и округлую зону дисплея;
  • Продукт по-прежнему поддерживает стандартный режим разработки DGUS. Пользователям нужно только создать изображение пользовательского интерфейса в виде круга, что довольно удобно и быстро.

КРУГЛЫЙ СМАРТ-ЭКРАН DWIN

Модель: DMG48480C021_03WTC

Модель: DMG48480C021_03WTC КРУГЛЫЙ СМАРТ-ЭКРАН DWIN

Технические характеристики

Технические характеристики КРУГЛЫЙ СМАРТ-ЭКРАН DWIN

АКСЕССУАРЫ


АКСЕССУАРЫ КРУГЛЫЙ СМАРТ-ЭКРАН DWIN

Информация об ASIC

T5L1 ASIC

Разработан компанией DWIN.

Серийное производство в 2019 году.

1 МБ без флэш-памяти на чипе.

Для хранения пользовательской базы данных используется 512 КБ.

Цикл перезаписи: более 100 000 раз.


Дисплей

Цвет

16, 7 миллионов цветов

Тип ЖК-дисплея

IPS

Угол обзора

Широкий угол обзора, 85°/85°/85°/85°(L/R/U/D)

Область отображения (A.A)

D=53.3mm

Разрешение

480*480

Подсветка

светодиодная

Яркость

350 нит


Параметры сенсора

Тип

CTP (Ёмкостная сенсорная панель)

Структура

Структура G+FF с поверхностным покрытием из закалённого стекла

Режим касания

Поддержка точечного касания и перетаскивания

Твёрдость поверхности

6H

Светопропускание

более 90%

Срок службы

более 1,000,000 касаний


Проверка надёжности

Рабочая температура

-10~60℃

Температура хранения

-20~70℃

Рабочая влажность

10%~90%RH

Защитное покрытие

Отсутствует


Напряжение и ток

Напряжение питания

4.5~5.5V

Рабочий ток

VCC = +5V, подсветка включена: 130mA

VCC = +5V, подсветка выключена: 60mA


Интерфейс

LCM-интерфейс

FPC40_0.5mm, интерфейс RGB

CTP-интерфейс

FPC6_0.5mm, интерфейс IIC

Скорость передачи данных

3150~3225600bps, стандартное значение: 115200bps

Выходное напряжение

Выход 1, Iout = -4mA; 2.7~3.2V

Выход 0, Iout = 4mA; 0.1~0.4 V

Входное напряжение
(RXD)

Вход 1, 2.4~5.5V

Вход 0, 0~1.0V

Интерфейс

UART2: ON=TTL/CMOS; OFF=RS232
UART4: ON=TTL/CMOS; OFF=RS232
(доступно только после настройки ОС)

Пользовательский интерфейс

10Pin_1.0mm

Память

флэш-память NOR на 16 МБ для шрифтов, изображений и аудио файлов. Цикл перезаписи: более 100 000 раз

Расширенный интерфейс флэш-памяти

Возможность расширения NOR Flash до 64 МБ или 48 МБ NOR Flash + 512 МБ NAND Flash

SD-интерфейс

FAT32. Загрузка файлов через интерфейс SD может быть отображена в статистике. Скорость загрузки: 4 Мб/с


Упаковка и размеры

Габариты

75.0(Ш)мм × 85.0(В)мм × 12.3(Д)мм

Вес нетто

70 грамм


Источник: Официальный сайт DWIN

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
ВЫСОКОНАДЕЖНЫЙ СМАРТ-ЭКРАН DWIN СО СВЕРХШИРОКИМ ТЕМПЕРАТУРНЫМ ДИАПАЗОНОМ http://arduino-tex.ru/news/137/vysokonadezhnyi-smart-ekran-dwin-so-sverhshirokim.html Константин Portal-PK 2022-09-13T08:25:23+03:00 СОВСЕМ СКОРО! ВЫСОКОНАДЕЖНЫЙ СМАРТ-ЭКРАН DWIN СО СВЕРХШИРОКИМ ТЕМПЕРАТУРНЫМ ДИАПАЗОНОМ.

В ответ на требования к дисплеям для использования в суровых условиях, компания DWIN выпустила 7 смарт-экранов, которые могут непрерывно работать в условиях экстремально низких и сверхвысоких температур (-40~+85°C). Эта серия продуктов обеспечивает отсутствие смазанности и задержки, имеет плавную анимацию и чувствительный сенсор даже при -40°C; все продукты оснащены УФ-защитой, конформным антибликовым покрытием AG, что позволяет использовать их в условиях высоких температур, длительного солнечного воздействия, сильных электромагнитных помех, а также в высокогорье и тропиках.

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

Модель

DMG80480S050_03W

DMG80480S070_03

DMG10600S070_03W

DMG80600S080_03W

DMG10768S097_03W

DMG10600S101_03W

DMG80600S104_03W

Размер (дюйм)

5,0

7,0

7,0

8,0

9,7

10.1

10.4

Разрешение (Ш * В)

800*480

800*480

1024*600

800*600

1024*768

1024*600

800*600

ЖК

TN

IPS

IPS

TN

TN

IPS

TN

Яркость (нит)

900

1000

500

900

300

400

400

Ядро

T5L1

T5L1

T5L2

T5L1

T5L2

T5L2

T5L1

Уровень продукта

Применение в неблагоприятных условиях (серии S)

Рабочая температура (℃)

-40~+85

Напряжение (V)

6-36

12-36

12-36

12-36

12-36

12-36

12-36

Анти-УФ, AG

Есть

Защитное покрытие

Есть

Время устаревания

Высокотемпературное старение при температуре 50°c с электричеством - 72 часа

Надёжность

Уровень ESD4.

Волна ±1KV.

Быстрые импульсы ±2KV Класс B.

Проводимость 0.15-80M 10Vrms Класс A.

Устойчивость к радиации Класс А.

Хранилище

16 МБ

16 МБ

32 МБ

16 МБ

32 МБ

32 МБ

16 МБ

Возможность расширения до 48 МБ NOR Flash + 512 МБ NAND Flash

Зуммер

Пассивный зуммер 3V

RTC

Суперконденсатор 2.7V 1F для питания

Режим разработки

Система DGUS II или система TA (totally automated)

 ВЫСОКОНАДЕЖНЫЙ СМАРТ-ЭКРАН DWIN СО СВЕРХШИРОКИМ ТЕМПЕРАТУРНЫМ ДИАПАЗОНОМ

 ВЫСОКОНАДЕЖНЫЙ СМАРТ-ЭКРАН DWIN СО СВЕРХШИРОКИМ ТЕМПЕРАТУРНЫМ ДИАПАЗОНОМ

Источник: Официальный сайт DWIN



Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

]]>
Урок 9. Подключение TFT дисплея к Arduino MEGA. http://arduino-tex.ru/news/136/urok-9-podklyuchenie-tft-displeya-k-arduino-mega.html Константин Portal-PK 2022-09-12T09:16:11+03:00 Возможно, вы задумывались, как при помощи Arduino и TFT дисплея можно красиво и удобно вывести большой объём текстовой и графической информации? В данном уроке мы постараемся ответить на этот вопрос и даже написать программу для небольшого интерфейса. Использовать для этого мы будем TFT дисплей напрямую подключаемый к Arduino.

Цель урока: Подключение TFT дисплея.

Познакомится с TFT дисплеями. Научится работать с библиотекой UTFT.

Что из себя представляет TFT дисплей?

TFT расшифровывается, как Thin-film-transistor (тонкоплёночный транзистор), своё название он получил за то, что каждый пиксель на дисплее представляет из себя небольшой полевой транзистор, который выглядит, как тонкая плёнка покрывающая дисплей.

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

Что из себя представляет TFT дисплей?


Как подключить дисплей к Arduino MEGA?

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

Как подключить дисплей к Arduino MEGA?

Также подключим две кнопки к пинам 7 и 8, как показано на схеме ниже.

Как подключить дисплей к Arduino MEGA?

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


Поэтому стоит использовать самодельные провода, которые можно изготовить с помощью обычного макетного провода и ножниц


Первый скетч для дисплея.

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

Начнём с самой главной функции, без которой не будут работать все остальные. InitLCD(), эта функция инициализирует дисплей, для начала работы с ним, её необходимо прописать в setup(). В данной функции, так же можно указать ориентацию экрана, указав, как аргумент одну из констант PORTRAIT (вертикальная ориентация) или LANDSCAPE (горизонтальная).

Далее идёт функция fillSrc(Color), эта функция заливает весь дисплей одним цветом.

Функция setColor(Color) можно выбрать цвет, которым будут выводится текст, фигуры и т.д. В библиотеке предустановлено несколько констант, отвечающих за цвет, но вы можете так же использовать любой цвет в RGB. Например, setColor(255,255,255).

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

Функция setFont(Font), используется для выбора шрифта, которым будет выводиться текст. Изначально в библиотеке предустановлено 3 шрифта, это:

  • SmallFont
  • BigFont
  • SevenSegNumFont

Дополнительные шрифты, а также информацию об их размере и какие символы в них входят, вы можете найти здесь.

Для установки шрифта сначала нужно перейти на сайт, и скачать любой выбранный шрифт.

Для установки шрифта сначала нужно перейти на сайт, и скачать любой выбранный шрифт

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

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

И в конце нужно просто подключить шрифт прописав перед setup(), следующую команду extern uint8_t Название шрфита[ ];

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

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


#include <UTFT.h>
UTFT LCD(TFT32MEGA_2, 38, 39, 40, 41);
extern uint8_t DotMatrix_M[];
void setup() 
{
  LCD.InitLCD();
  LCD.setFont(DotMatrix_M);
}
void loop() {
  // put your main code here, to run repeatedly:
}


Для того, чтобы вывести на экран какую-либо информацию, необходимо использовать одну из трёх функций, print(char[ ], x, y, [ r ]), printNumI(int, x, y, [len], [sym]), printNumF(float , dec, x , y, [sym1], [len], [sym2]).

Разница между ними в типе выводимых данных, одна функция выводит только строки, типа char[ ], другая только целочисленные переменные, а последняя только переменные с плавающей точкой.


print(char[ ], x, y[r ]);

char[ ] – строковая переменная;

x, y – координаты начала строки;

r – угол поворота строки относительно координат x,y. (необязательный параметр)


printNumI(int, x, y, [len], [sym]);

int – целочисленная переменная;

x, y – координаты начала строки;

len – количество выводимых разрядов числа (необязательный параметр);

sym – Символы заменяющий недостающие разряды, если len больше, чем количество разрядов в числе (необязательный параметр).


printNumF(float , dec, x , y, [sym1], [len], [sym2]);

float – переменная с плавающей точкой;

dec – Количество выводимых разрядов, после запятой;

x, y – Координаты;

sym1 – Символ вместо запятой, разделитель (необязательный параметр);

len – Количество выводимых разрядов. Учитываются разряды, как перед запятой, так и после (необязательный параметр);

sym2 – Символы заменяющий недостающие разряды, если len больше, чем количество разрядов в числе (необязательный параметр).


Как итог, мы вывели 4 строки разными шрифтами, вручную настроенным цветом и с разным типом данных:

  • Для вывода значка батареи мы использовали шрифт «battery_24x48», а также указали, что строку необходимо повернуть на 90 градусов. Для вывода этого значка мы использовали стандартную функцию print().
  • Обычную строку типа char[ ], «Hello World!», мы вывели стандартным шрифтов «BigFont» при помощи функции print().
  • Целочисленную переменную мы вывели шрифтом «DotMatrix_M», и указали в функции, что количество разрядов равно 5, а пустые разряды необходимо заменить на 0. Для вывода этого числа использовалась функция printNumI().
  • Переменную с плавающей точкой мы вывели функцией, printNumF(), используя шрифт «Inconsola». В этой функции мы указали, что после разделителя должно быть два разряда, а всё число содержит 6 разрядов. Так же мы заменили стандартный разделить на тире.
#include <UTFT.h>
UTFT LCD(TFT32MEGA_2, 38, 39, 40, 41);
extern uint8_t battery_24x48[];
extern uint8_t BigFont[];
extern uint8_t DotMatrix_M[];
extern uint8_t Inconsola[];
int integer = 256;
float floating = 2.56789;
void setup()
{
  LCD.InitLCD();
  LCD.fillScr(VGA_BLACK);
  LCD.setColor(0, 255, 0);        //Вывод "уровня заряда"
  LCD.setFont(battery_24x48);
  LCD.print("8",32, 32,90);
  LCD.setColor(162, 0, 254);      //Вывод надписи "Hello Wrold!"
  LCD.setFont(BigFont);
  LCD.print("Hello World!", 240, 160);
  LCD.setColor(255, 169, 2);     //Вывод целочисленной переменной
  LCD.setFont(DotMatrix_M);
  LCD.printNumI(integer, 240, 192, 5, '0');
  LCD.setColor(255, 255, 255);    //Вывод переменной с плавающей запятой
  LCD.setFont(Inconsola);
  LCD.printNumF(floating, 2, 240, 224, '-', 6, '0');
}
void loop()
{
}


Как итог, мы вывели 4 строки разными шрифтами, вручную настроенным цветом и с разным типом данных.


Немного усложним задачу.

Теперь попробуем вывести прямоугольник, а также цифры, переключаемые кнопками.

В предыдущем примере информация выводилась один раз в функции setup(), теперь попробуем обновлять выводимые данные в процессе работы программы. Если просто выводить данные, то при каждом обновлении дисплей будет мерцать, чтоб решить данную проблему, есть два способа.

Первый — это обновлять экран только по необходимости, для этого используются две булевые переменные, start и upd. Первая используется для вывода рамки по краям экрана, вторая для переключения счётчика. Устанавливаем значение переменной в true, когда требуется обновить экран и после обновления сбрасываем в false.

Второй способ, это обновление экрана частями, как вы можете увидеть в условии if(upd), мы сначала рисуем черный прямоугольник и только потом уже выводим текст, это также помогает избавится от проблемы, когда куски более длинного числа остаются на экране, если вывести поверх более короткое число.

Ниже представлен пример, где сначала выводится число 123 зелёного цвета, а потом на тех же координатах число 45 красного цвета. Как вы можете увидеть, получилось число 453, где отлично видно, что 3 осталась от предыдущего числа.


#include <UTFT.h>
UTFT LCD(TFT32MEGA_2, 38, 39, 40, 41);
extern uint8_t SevenSegNumFont[];
void setup() 
{
  LCD.InitLCD();
  LCD.fillScr(VGA_BLACK);
  LCD.setFont(SevenSegNumFont);
  LCD.setColor(VGA_GREEN);
  LCD.printNumI(123,240,160);
  delay(30000);
  LCD.setColor(VGA_RED);
  LCD.printNumI(45,240,160);
}
void loop()
{ 
}


Теперь попробуем вывести прямоугольник, а также цифры, переключаемые кнопками.

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

Устранение дребезга.

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

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

После чего уже в функции setup(), мы конфигурируем кнопки, указываем, что мы используем пины 7 и 8 в режиме входа с подтягивающим резистором, а также интервал 25 мс, это время необходимое для считывания состояния кнопки.

Далее в функции loop(), мы каждый цикл обновляем состояние кнопки при помощи функции update(). Считываем же состояние при помощи функции fell(), она проверяет уровень логического сигнала, и если на кнопке уровень логического нуля, то возвращает ИСТИНА.

Давайте пройдёмся по алгоритму работу программы.

В начале мы инициализируем дисплей. Затем идёт конфигурация пинов 7 и 8 при помощи библиотеки Bounce2. После чего идёт вывод рамки и строки «Counter:» и настройка цвета и шрифта последующего текста.

Далее мы проверяем нажаты ли кнопки и в зависимости от того, какая кнопка нажата мы увеличиваем или уменьшаем переменную-счётчик. А также выставляем флаг обновления дисплея, upd в значение true.

В конце программы, мы проверяем значение переменной upd, если true, то мы выводим новое значение поверх старого, но так как переменная counter имеет тип uint8_t она может принимать значения от 0 до 255, включительно. Зная это, мы в функции printNumI указываем, что всегда выводим трёхзначное число с нулём вместо пустых разрядов.


#include <UTFT.h>
#include <Bounce2.h>
UTFT LCD(TFT32MEGA_2, 38, 39, 40, 41);
//Объявление дисплея, для работы с библиотекой.
//В функции указывается к каким пинам Ардуино подключены пины дисплея
//TFT32MEGA_2 - тип дисплея
//38 - RS - Register Select
//39 - WR - Write/Read
//40 - CS - Chip Select
//41 - RST - Reset
//   - ALE - ОПЦИОНАЛЬНО! Используется для переключаемых 16-и битных плат
//Подключение шрифта
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
Bounce * buttons = new Bounce[2];       //Создаём массив типа "Bounce" для работы с кнопками
bool upd = true;
uint8_t counter = 0;
void setup()
{
  LCD.InitLCD();                  
  buttons[0].attach( 7 , INPUT_PULLUP  );    //Настраиваем пин 7   
  buttons[0].interval(25);
  buttons[1].attach( 8 , INPUT_PULLUP  );   //Настраиваем пин 8   
  buttons[1].interval(25);
  LCD.fillScr(VGA_BLACK);           //Заливаем фон чёрным цветом
  LCD.setColor(VGA_WHITE);          //выводим красивую рамку по краям
  LCD.drawRoundRect(10, 10, 470, 310);
  LCD.setFont(BigFont);        //Выводим надпись "Counter:"
  LCD.print("Counter:", 128, 0);
  LCD.setFont(SevenSegNumFont);   //Вывод счётчика
  LCD.setColor(VGA_WHITE);
}
void loop()
{
  buttons[0].update();            //Обновляем кнопку (Необходимо производить каждый цикл)
  buttons[1].update();
  if (buttons[0].fell())          //увеличиваем счётчик, если кнопка нажата
  {
    counter++;
    upd = true;                 //Устанавливаем флаг
  }
  if (buttons[1].fell())        //Уменьшаем счётчик, если кнопка нажата
  {
    counter--;
    upd = true;                //Устанавливаем флаг
  }
  if (upd)
  {
    LCD.printNumI(counter, 178, 110, 3, '0');
    upd = false;                  //Сбрасываем флаг
  }
}
Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!
]]>
Премия DWIN «Лучший учитель» http://arduino-tex.ru/news/135/premiya-dwin-luchshii-uchitel.html Константин Portal-PK 2022-09-08T14:31:42+03:00 19 августа 2022 года в Пекинском технологическом институте успешнопрошло 7-е совещание по подведению итогов премии "DWIN Excellent TeacherAward". В совещании приняли участие вице-президент Пекинскоготехнологического института Ван Сяофэн, помощник генерального директора DWIN Technology Гао Ань и другие члены жюри.

19 августа 2022 года в Пекинском технологическом институте успешнопрошло 7-е совещание по подведению итогов премии "DWIN Excellent TeacherAward".

На этом совещании были выбраны 3 лауреата первой премии, 5 лауреатов второй премии, 8 лауреатов третьей премии и 4 преподавателя по инновационной практической деятельности. В общей сложности награды получили 20 преподавателей. На премию было выделено почти 1 миллион юаней.

Премия «DWIN Excellent Teacher Award» проводится ежегодно с 2015 года. Она состоит из двух категорий: классные занятия и инновационная практическая деятельность. Она направлена на поощрение работающих преподавателей, которые внесли значительный вклад и добились выдающихся успехов в преподавании в бакалавриате и руководстве инновационной и исследовательской деятельностью студентов колледжа.

Источник: Официальный сайт DWIN

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился нвость Премия DWIN «Лучший учитель»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 5. Заставка со скроллингом изображения на дисплее DWIN. http://arduino-tex.ru/news/134/urok-5-zastavka-so-skrollingom-izobrazheniya-na-displee.html Константин Portal-PK 2022-08-23T13:56:43+03:00 Для того чтобы покупатель знал, кто произвел оборудование, часто на устройствах с дисплеями делают приветственную страницу. Также данная страница служит защитой от ошибок, которые могут возникнуть, пока микроконтроллер не загрузился, а управление с дисплея уже доступно. Поэтому во многих проектах делаю заставку.


Чаще всего это просто картинка, которая появляется на определённое время. Обычно на 3-5 секунд. Или пока не загрузится микроконтроллер и будет готов к работе.

Создаём страницу со скроллингом части изображения.

Благодаря инструменту «Zone Scrolling» скучную заставку можно сделать с анимацией. При этом используется также всего 1 изображение. Данный инструмент позволяет скролить выделенную зону на экране в одном из 4 направлений.

Создаём страницу со скроллингом части изображения.

Для урока нам понадобится всего 1 изображение.

Создаём страницу со скроллингом части изображения. Для урока нам понадобится всего 1 изображение.

Добавляем изображение в проект и упаковываем .ICL.

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

Формируем фоновый файл для дисплея. Для этого переходим на вкладку «Welcome» и нажимаем на «DWIN ICL Generator».

Упаковка изображений фонов в .ICL.

  • Открывается окно формирования .ICL - файла.
  • Выбираем директорию, где сохранены изображения, в нашем случае \DWIN_SET.
  • Выставляем качество изображения на 100%.
  • Выбираем пункт «Применить ко всем».
  • Проверяем, чтобы на всех изображениях применились новые параметры.

Выбираем директорию, где сохранены изображения, в нашем случае \DWIN_SET.

Генерируем файл .ICL в папку \DWIN_SET.

Генерируем файл ICL в папку \DWIN_SET.

Внимание! Файл фона должен начинаться с цифры 32 (это связанно с архитектурой памяти). Можно оставить 32.ICL.

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

Добавляем скроллинг изображения на страницу.

Добавить скроллинг достаточно просто: выбираем инструмент «Zone Scrolling» на панели инструментов.

Добавить скроллинг достаточно просто: выбираем инструмент «Zone Scrolling» на панели инструментов.

Выделяем ту область, которую нужно скролить.

Выделяем ту область, которую нужно скролить.

Затем нужно выбрать скорость и направление перемещения.

Затем нужно выбрать скорость и направление перемещения.

Это все настройки. Вот так просто делается скроллинг изображения на дисплеях DWIN.

Загрузка проекта на дисплей.

Несмотря на то, что я рассказывал, как загрузить проект на дисплей уже неоднократно, и у меня есть отдельная статья: «Выбор и подготовка SD карты для HMI дисплеев DWIN, Nextion», у многих возникают проблемы при загрузке проекта. Поэтому повторю данную информацию.

HMI модуль по умолчанию читает данные по следующему пути: «SD карта/DWIN_SET».

Загрузка прошивки на HMI дисплей на примере дисплея компании DWIN.

Причём имя папки можно изменить через конфигурационный(.cfg) файл. Про данные настройки поговорим в следующий раз.

Для загрузки примера нужен «демо пример», который можно скачать внизу статьи в разделе «Файлы для скачивания». Пример сделал для дисплеев разрешением 800x480 px. Соответственно, он подойдёт для дисплеев 5 и 7 дюймов с данным разрешением экрана, но не ко всем. Смотрите разрешение своего дисплея в даташите к нему. Если разрешение дисплея больше, чем 800x480 px, то по краям вы увидите чёрные полосы.

В архиве демо проекта нужно скопировать папку DWIN_SET на карту памяти. Файлы должны располагаться на карте по пути: «/DWIN_SET/».

В архиве демо проекта нужно скопировать папку DWIN_SET на карту памяти. Файлы должны располагаться на карте по пути: «/DWIN_SET/».

Вставляем SD карту в HMI модуль.

Вставляем SD карту в HMI модуль.

Подайте питание.

Вы увидите синий экран надписи. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Вы увидите синий экран надписи. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Если загрузка прошла успешно, вы увидите следующую информацию.

Если что-то пошло не так, то информация на дисплее будет следующая.

Если что-то пошло не так, то информация на дисплее будет следующая.

Так как файлы на флешке в соответствующей папке, значит, проблема в SD карте. Нужно вернуться к пункту выбора карты памяти и, возможно, форматировать SD карту повторно. Затем снова загрузить файлы и повторить прошивку.

Пример работы.

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

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

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

Фотография этого, конечно, не передаёт, но всё же видно, что происходит смещение изображения.

Скачать все материалы урока вы можете внизу статьи в разделе «файлы для скачивания».

Переход на другую страницу через указанное время.

Заставка — это, конечно, хорошо. Но через некоторое время желательно перейти на другую страницу. Можно сделать возможность нажатия на экране и перенаправлять на интерфейс управления или сделать свайп «Page sliding». Но самый оптимальный вариант — это отправить команду с микроконтроллера через нужное время и перейти на нужную страницу. Например, в своём проекте «программатор чипов Mimaki» я сделал возможность перехода на страницу ввода пароля или вход без пароля.

проекте «программатор чипов Mimaki» я сделал возможность перехода на страницу ввода пароля

Соответственно, в зависимости от условий, перенаправление происходит на разные страницы. Как это реализовать, будем рассматривать в следующем уроке.


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравился урок Выводим кнопку на дисплей DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Часы с функцией плеера и ночника на сенсорном дисплее. http://arduino-tex.ru/news/133/chasy-s-funkciei-pleera-i-nochnika-na-sensornom-displee.html Константин Portal-PK 2022-08-18T07:40:43+03:00 Дело было вечером. Сидел я и размышлял: «Стоит у меня на прикроватной тумбочке 3 устройства: часы, термометр и ночник. Вот бы объединить всё в одно устройство. И ещё не плохо было бы, чтобы часы умели воспроизводить музыку. И места меньше займёт на тумбочке, и всё нужное под рукой. Было бы просто классно и удобно!».


После чего было принято решение сделать своё устройство на сенсорном дисплее. Я уже собирал подобное устройство на дисплее Nextion, но с меньшим набором функций и не очень красивое. Данное устройство планирую собрать вот в такой корпус, а информация будет выводиться на 4.3” сенсорный COF дисплей от компании DWIN.

выводиться на 4.3” сенсорный COF дисплей от компании DWIN.

Если у вас есть желание повторить данный проект, вы можете получить дисплей от компании DWIN практически бесплатно. На данный момент компания DWIN проводит розыгрыш двух дисплеев 4.3”, а вам нужно будет заплатить только за доставку. Для того чтобы принять участие в розыгрыше, вам нужно:

Розыгрыш пройдёт 5 сентября 2022 с использованием приложения для выбора победителей KonkursVK.

Собираем часы с функцией плеера и ночника на сенсорном дисплее.

Планировал собрать часы вот в таком корпусе.

Собираем часы с функцией плеера и ночника на сенсорном дисплее.

В корпус уже вмонтированы адресные светодиоды в верхней и нижней частях так, чтобы свет попадал на стену за часами и на стол. Но, к сожалению, не успел собрать всю электронику в корпус, а время выкладывать видео для конкурса уже пришло. Поэтому часы собраны на макетной плате и информация выводится на 7” дисплей. Это ещё раз демонстрирует, что прошивка от одного дисплея отлично подойдёт для другого. Нужно помнить, что у дисплеев COF всего 8 Мб памяти, поэтому не все проекты можно загрузить на данный дисплей.

часы собраны на макетной плате и информация выводится на 7” дисплей

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

Функции часов:

  • Часы подключаются по Wi-fi к интернету и получают текущую дату и время из сети. Поэтому не нужно беспокоиться о том, что часы могут отстать или сбиться при отключении питания.
  • Красивые стилизованные цифровые значения выводят время.
  • Под часами располагаются 3 значения, которые получаем с датчика BME280/BMP280: температура, влажность и атмосферное давление.
  • Вторая страница интерфейса позволяет управлять музыкой. Тут есть кнопки, позволяющие включить или выключить воспроизведение музыки, переключать между альбомами с музыкой, включить случайное воспроизведение треков. Также представлена стилизованная система регулирования громкостью.
  • На следующей странице можно управлять подсветкой. А именно: выбрать 1 из 8 цветов, а также 1 из 8 режимов световых эффектов. При этом при изменении цвета подсветки меняется цветовое оформление на странице вывода времени и управления музыкой на цвет, который установлен для светодиодов. Внизу два бегунка позволяют регулировать яркость подсветки дисплея и яркость светодиодов.
  • Перелистывание между страницами происходит с помощью свайпов. Достаточно провести пальцем в нужном направлении, и страница перелистнётся.

Функции часов

В корпусе данное устройство будет выглядеть более компактно и эффектно.

Для проекта понадобятся следующие комплектующие, которые вы можете купить на AliExpress:

  • Плата Wemos D1 Mini (Для прототипирования использовал NodeMCU);
  • Dfplayer mini;
  • Дисплей DWIN COF 4,3” ;
  • Датчик BME280;
  • Адресные светодиоды;
  • Динамик 3W;
  • Резисторы 1 кОм;
  • Соединительные провода;
  • Блок питания 5 В.

Для демонстрации проекта использовал дисплей 7”, который стоит около 3000 рублей с доставкой.

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

Для того чтобы собрать данный проект, подключаем все элементы вот по такой схеме.

Для того чтобы собрать данный проект, подключаем все элементы вот по такой схеме.

В данной схеме используется дисплей 7”, так как его я использую на данный момент. Схема с дисплеем COF 4,3” будет доступна после того, как я соберу всё в корпус. Несмотря на то, что дисплеи значительно отличаются друг от друга, подключение практически ничем не отличается.

Код для проекта.

Прошивка дисплея подойдёт для дисплея 7” и для COF 4,3”. Но, кроме этого, данную прошивку можно использовать для любого дисплея компании DWIN с разрешением 800 на 480 px.

Прошивка дисплея подойдёт для дисплея 7” и для COF 4,3”.

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

Вставляем SD карту в HMI модуль.

Код для Wemos D1 Mini (NodeMCU) сделал в среде Arduino IDE. О том, как подготовить среду разработки для работы с ESP8266, читайте вот тут.

программировать NodeMCU в среде Arduino IDE

Перед загрузкой кода в плату нужно указать логин и пароль от вашей Wi-Fi сети. В противном случае у вас не будет обновляться дата и время.

Перед загрузкой кода в плату нужно указать логин и пароль от вашей Wi-Fi сети.

После чего загружаем прошивку и пользуемся устройством.

После чего загружаем прошивку и пользуемся устройством.

Скачать исходные материалы проекта можете внизу статьи в разделе «файлы для скачивания».

3D модель корпуса часов.

Для удобства демонстрации работы дисплея 7” распечатал вот такую подставку. 3D модели для печати вы можете скачать внизу статьи в разделе «файлы для скачивания».

3D модель корпуса часов.

Модель для дисплея COF 4,3” выложу в следующей статье, когда устройство будет полностью собрано в том корпусе, в котором планировалось изначально.

Модель для дисплея COF 4,3”

Подведём итог.

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


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Часы с функцией плеера и ночника на сенсорном дисплее? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Page sliding». Справочник среды разработки DGUS. http://arduino-tex.ru/news/132/opisanie-instrumenta-page-sliding-spravochnik-sredy.html Константин Portal-PK 2022-08-15T09:04:28+03:00 В большинстве проектов с использованием сенсорных дисплеев необходимо реализовывать несколько страниц управления. Для перехода между ними используется обычная кнопка. Урок по работе с кнопкой можно посмотреть тут. В дисплеях от компании DWIN есть возможность перелистывать страницы, для чего необходимо сделать движение пальцем в нужном направлении. Для этого в среде разработки DGUS используется инструмент «Page sliding».

Описание инструмента «Page sliding».

Инструмент «Page sliding» позволяет сделать навигацию между страницами на дисплее DWIN. Данный инструмент поддерживает вертикальное и горизонтальное пролистывание страниц. Для того чтобы перейти на другую страницу, достаточно провести пальцем по дисплею в соответствующем направлении.

Инструмент «Page sliding» позволяет сделать навигацию между страницами на дисплее DWIN.

Ниже представлено описание инструмента «Page sliding» на русском языке.

Описание инструмента «Page sliding».

Пример использования «Page sliding».

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

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

В связи с тем, что страниц управления много, я сделал перелистывание между основными страницами управления с помощью инструмента «Page sliding».

В связи с тем, что страниц управления много, я сделал перелистывание между основными страницами управления с помощью инструмента «Page sliding».

Данный инструмент достаточно простой в использовании, но предоставляет дополнительные возможности по навигации на дисплеях DWIN.

Данный инструмент достаточно простой в использовании, но предоставляет дополнительные возможности по навигации на дисплеях DWIN

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Page sliding»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Data variables». Справочник среды разработки DGUS. http://arduino-tex.ru/news/131/opisanie-instrumenta-data-variables-spravochnik-sredy.html Константин Portal-PK 2022-08-04T13:46:19+03:00 При реализации проектов с использованием сенсорного дисплея сложно обойтись без вывода цифровых данных. Вывод целочисленных и дробных значений на дисплеи DWIN осуществляется с помощью инструмента «Data variables». В среде разработки DGUS также предусмотрен инструмент «Artistic variables», который позволяет вывести свои цифры в виде иконок. Про него поговорим в следующий раз, а сегодня подробнее разберём инструмент «Data variables».

Описание инструмента «Data variables».

Инструмент «Data variables» предназначен для вывода числовых значений на дисплей DWIN. Это могут быть целочисленные значения и значения с запятой. Обратите внимание на тип числа, который вы будете выводить.

Ниже представлено описание инструмента «Data variables» на русском языке.

Ниже представлено описание инструмента «Data variables» на русском языке.

Пример вывода целого и дробного числа на дисплей с использованием инструмента «Data variables».

Для демонстрации вывода целого и дробного числа сделал небольшой проект «Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN», в котором вывел температуру, влажность воздуха и давление окружающей среды, а также высоту над уровнем моря.

Пример вывода целого и дробного числа на дисплей с использованием инструмента «Data variables».

На данном примере наглядно видно, как можно вывести целочисленное значение на дисплей, а также дробное значение. Для Arduino написал небольшие функции, которые позволяют выводить значения типа int и float, написав вызов соответствующей функции и передав в неё адрес ячейки памяти и значение.

Код для Arduino NANO (UNO).

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Data variables»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Basic Touch». Справочник среды разработки DGUS. http://arduino-tex.ru/news/130/opisanie-instrumenta-basic-touch-spravochnik-sredy.html Константин Portal-PK 2022-08-02T07:50:12+03:00 Одной отличительной особенностью дисплеев DWIN является возможность создания собственной текстовой и цифровой клавиатуры. Вывод цифровой клавиатуры рассмотрели при разборе работы с инструментом «Data Input», а для создания обработчика нажатия на клавиши цифровой клавиатуры используется инструмент «Basic Touch». Также данный инструмент можно использовать для решения других задач.

Инструмент среды разработки DGUS «Basic Touch».

Для создания событий нажатия на клавишу цифровой клавиатуры используется инструмент «Basic Touch» среды разработки DGUS.

На картинке ниже приведено описание инструмента «Basic Touch» на русском языке.

На картинке ниже приведено описание инструмента «Basic Touch» на русском языке.

Оригинального описания инструмента «Basic Touch» на английском языке нет.

Список передаваемых значений кнопок для создания цифровой клавиатуры:

  • 0x0030-0x0039 соответствуют цифрам от 0 до 9;
  • 0x00F0 – отмена;
  • 0x00F1 – ввод;
  • 0x00F2 – стереть символ;
  • 0x002D – смена знака +/-;
  • 0x002E – точка (.).

Пример создания цифровой клавиатуры с помощью инструмента «Basic Touch».

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

Панель управления шаговым двигателем на основе дисплея DWIN.

Оживить клавиатуру помог инструмент «Basic Touch».

Оживить клавиатуру помог инструмент «Basic Touch».

Для создания всплывающей клавиатуры на дисплее DWIN необходимо использовать два инструмента: «Data Input» и «Basic Touch». При этом для решения многих задач необходимо комбинировать работу нескольких инструментов среды разработки.

Для создания всплывающей клавиатуры на дисплее DWIN необходимо использовать два инструмента: «Data Input» и «Basic Touch».

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Basic Touch»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Панель управления шаговым двигателем на Arduino (ESP32). http://arduino-tex.ru/news/129/panel-upravleniya-shagovym-dvigatelem-na-arduino-esp32.html Константин Portal-PK 2022-07-27T12:45:15+03:00 Достаточно часто делаю проекты с использованием шаговых движителей. Панель управления делаю с использованием сенсорного дисплея. Благо, дисплеи DWIN стоят недорого. Например, семи дюймовый дисплей можно купить с ёмкостным сенсором от 3000 рублей, а с резистивным от 2500 рублей. Так как дисплей достаточно большого размера стоит приемлемых денег, решил сделать панель управления одним шаговым двигателем. Возможно, кому-то пригодится или будет основой для реализации своего проекта.


Панель управления шаговым двигателем на основе дисплея DWIN.

Для проекта буду использовать COF дисплей 4.3 дюйма. Данный дисплей достаточно удобно монтировать в корпус благодаря гибкой плате. Но, несмотря на это, данную прошивку можно использовать и для других дисплеев с разрешением 800 на 480 пикселей.

Панель управления шаговым двигателем на основе дисплея DWIN.

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

  • dmg80480c050 _ 03wtc
  • dmg80480c070 _ 03wtc
  • DMG80480T040_01WTC
  • DMG80480F043_01WTC
  • DMG80480T03501WTC

Я распечатал вот такой корпус, в который отлично устанавливается мой дисплей. Если вы планируете повторить проект, то скачать 3D модель для печати корпуса можете внизу статьи в разделе «файлы для скачивания».

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

Если у вас нет опыта работы с дисплеем DWIN, рекомендую прочитать следующие статьи:

Прошивка для дисплея DWIN.

Прошивка для дисплея готова, и вам делать ничего не нужно. Достаточно скачать её внизу статьи в разделе «файлы для скачивания», скопировать на карту памяти и загрузить на свой дисплей. Как подобрать карту памяти и прошить дисплей DWIN, рассказывал вот в этой статье.

Вставляем SD карту в HMI модуль.

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

Для создания всех кнопок с фиксацией я использовал инструменты «Bit icon» и «Incremental Adjustment». Как пользоваться данными инструментами, рассказывал в уроке «Урок 3. Создаём переключатели (кнопки с фиксацией) на дисплее DWIN».

Для создания всех кнопок с фиксацией я использовал инструменты «Bit icon» и «Incremental Adjustment». К

Кнопка запуска сделана с помощью инструмента «Return Key code». Про данный инструмент так же есть отдельный урок.

Кнопка запуска сделана с помощью инструмента «Return Key code».

Для ввода цифровых значений использовал всплывающую клавиатуру. Её создать можно с помощью инструмента «Data Input». Урока по использованию данного инструмента на момент выхода этой статьи нет (возможно уже выложил, посмотрите в разделе «Уроки»), но есть описание на русском языке.

Для ввода цифровых значений использовал всплывающую клавиатуру.

Для того чтобы оживить клавиши на клавиатуре ввода, я использовал инструмент «Basic Touch». Описание данного инструмента на русском языке вы можете найти в следующей статье.

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

Прошивку для дисплея вы можете скачать внизу статьи в разделе «Файлы для скачивания».

Схема подключения дисплея DWIN, драйвера A4988 и двигателя Nema 17 к Arduino NANO.

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

Схема подключения дисплея DWIN, драйвера A4988 и двигателя Nema 17 к Arduino NANO.

Как видим из схемы, нам нужно 2 источника питания на 5 и 12 В.

Как видим из схемы, нам нужно 2 источника питания на 5 и 12 В.

Библиотека для работы с шаговым двигателем.

Для работы с шаговыми двигателями я использую различные библиотеки «AccelStepper» для работы с Arduino. В небольших проектах пишу свои функции без использования библиотек. Для ESP32 библиотека «AccelStepper» не подходит.

Для ESP32 библиотека «AccelStepper» не подходит.

Поэтому в этом проекте решил использовать библиотеку, которую можно использовать и для Arduino, и для ESP32. При тестировании неплохо показала себя библиотека от Алекса Гайвера «GyverStepper», поэтому в проекте будем использовать её. По ней есть полное описание с примерами на русском языке, которые вы можете посмотреть на сайте разработчика alexgyver.ru.

библиотека от Алекса Гайвера «GyverStepper»

Библиотеку можно установить через менеджер библиотек или скачать с официального сайта разработчика. Также прикреплю библиотеку внизу статьи в разделе «Файлы для скачивания».

Описание кода Панели управления шаговым двигателем.

Если вы используете двигатель с драйверами step-dir, то в коде менять ничего не нужно. Возможно, только отключить режим отладки «#define DEBUG 0».

Если вы используете двигатель с драйверами step-dir,Если вы планируете использовать драйвер с 4 пинами, то вам нужно изменить подключение двигателя на следующее.

Если вы планируете использовать драйвер с 4 пинами, то вам нужно изменить подключение двигателя на следующее.

Также возможно использовать пин «EN» для отключения питания двигателя. Это поможет снизить нагрев и потребление электроэнергии.

Также возможно использовать пин «EN» для отключения питания двигателя. Это поможет снизить нагрев и потребление электроэнергии.

Для этого в документации к библиотеке есть подробное описание, как это сделать.

Для этого в документации к библиотеке есть подробное описание, как это сделать.

Остальные параметры изменяем по мере необходимости.

Всё, что касается работы с дисплеем, вынес на вкладку «display». Также написал 3 функции:

1 отправляет байтовую информацию на дисплей;

2. отправляет целочисленные значения типа int на дисплей;

3. получает с дисплея целочисленные значения типа int.

Всё, что касается работы с дисплеем, вынес на вкладку «display». Также написал 3 функции:

Для работы с шаговым двигателем написал 2 функции.


Корпус под дисплей COF DWIN.

Для удобства тестирования была разработана простая 3D модель для печати на принтере. Скачать модель для печати в .SLT формате можно внизу статьи в разделе «файлы для скачивания».

Корпус под дисплей COF DWIN.

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

Пишите ваши предложения.

Интересует ли вас корпуса для дисплеев DWIN?

Интересует ли вас корпуса для дисплеев DWIN?

Подведём итог.

Планировал сделать горячую смену типа подключаемого двигателя с драйвером step-dir на 4-пиновый. Но, к сожалению, библиотека не позволяет реализовать данный функционал, поэтому в дизайне есть переключатель двигателей, но он не работает. Поменять тип подключаемого драйвера можно вручную, о чём рассказывал ранее.

Интересует ли вас корпуса для дисплеев DWIN?

Несмотря на некоторые недоработки, реализовать панель управления шаговым двигателем получилось с написанием минимального объёма кода. Вы можете дополнить эти базовые функции или изменить данный пример под свои задачи.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Панель управления шаговым двигателем на Arduino (ESP32)? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Вакуумный формовочный пресс на Arduino. http://arduino-tex.ru/news/128/vakuumnyi-formovochnyi-press-na-arduino.html Константин Portal-PK 2022-07-26T09:21:17+03:00 Недавно закончил очередной проект на Arduino и сенсорном дисплее. Получился замечательный станок для вакуумной формовки на базе Arduino. Станок в автоматическом режиме выполняет процесс вакуумной формовки из листового пластика. А благодаря сенсорному дисплею можно произвести все необходимые настройки: время нагрева, время вакуумирования, через какое время включить вентиляторы охлаждения и так далее. Оператору нужно поставить матрицу, установить пластик и нажать кнопку «Пуск». После чего станок самостоятельно сделает всё остальное. По завершению нужно достать готовое изделие и повторить процесс.


Панель управления вакуумным прессом на Arduino.

Управление станком разделено на 2 экрана: управление и настройка.

Панель управления вакуумным прессом на Arduino.

На странице настроек можно включить или выключить зону нагрева. Также задать параметры времени работы нагрева, вакуума, давления и через какое время включить вентиляторы охлаждения.

На странице настроек можно включить или выключить зону нагрева.

На основной странице находятся инструменты для ручного управления станком: перемещение стола и нагревателя, а также проверки работы клапана вакуума и давления.

На основной странице находятся инструменты для ручного управления станком

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

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

Так же на странице управления реализован вывод основных параметров работы и таймер отсчёта времени нагрева.

И имеются основные кнопки: «Стоп», «Пуск», выполненная в виде ракеты.

Принцип работы вакуумного пресса.

У станка предусмотрена следующая защита. Он не будет работать, пока не будет опущена рамка зажима листа. После чего можно нажать кнопку «Пуск». Нагреватель перемещается и устанавливается над листом пластика. После этого начитается отсчёт времени нагрева. Счётчик выведен на дисплей, а время нагрева устанавливается на странице настроек станка.

Принцип работы вакуумного пресса.

По истечению времени нагреватель отъезжает и поднимается стол с матрицей, следом включается вакуум на указанное время. Так же в процесс можно добавить создание давления под листом пластика, если вдруг на нём создаются складки.

После того, как включился вакуум, начинается отсчёт до включения вентиляторов охлаждения. Включаются вентиляторы охлаждения и на этом процесс формования заканчивается.

После того, как включился вакуум, начинается отсчёт до включения вентиляторов охлаждения. Включаются вентиляторы охлаждения и на этом процесс формования заканчивается.

Включаются вентиляторы охлаждения и на этом процесс формования заканчивается.

Можно снимать изделие с матрицы.

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

У меня есть опыт разработки:

  • термопластавтомата;
  • управления пузыревыми панелями;
  • заточного станка для коньков;
  • станок для гибки проволоки.

Помимо этого, богатый опыт:

  • создания различных панелей управления;
  • создания пресса формирования при высоких температурах;
  • создания различных систем подсветок с панелью управления и другие проекты.

станок для гибки проволоки.

Подведём итог.

Вакуумный формовочный пресс получился достаточно функциональным, с большим количеством настроек. Данный функционал можно при желании расширить или изменить.Если вас интересует разработка проектов с использованием сенсорных дисплеев Nextion или DWIN, более подробную информацию читайте на моём сайте.


Понравился проект Вакуумный формовочный пресс на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Data Input». Справочник среды разработки DGUS. http://arduino-tex.ru/news/127/opisanie-instrumenta-data-input-spravochnik-sredy.html Константин Portal-PK 2022-07-25T12:59:51+03:00 В проектах с использованием дисплея часто требуется устанавливать цифровые значения. Для этого можно использовать инструмент «Incremental Adjustment», который позволяет увеличивать или уменьшать значение на указанное число. Но такое решение не всегда применимо. Например, если нужно задавать значения в большом диапазоне. Для решения данной задачи отлично подойдёт цифровая клавиатура, которую можно сделать с помощью «Data Input». Подробное описание данного инструмента можно найти в официальной инструкции среды разработки DGUS, скачать которую можно с официального сайта компании DWIN или внизу статьи в разделе «файлы для скачивания».

Описание инструмента «Data Input».

Инструмент «Data Input» предназначен для создания собственной цифровой клавиатуры, которую нужно создать, самостоятельно расположив требуемый набор кнопок.

Ниже представлено описание инструмента «Data Input» на русском языке.

Ниже представлено описание инструмента «Data Input» на русском языке.

А ниже на картинке приведено оригинальное описание данного инструмента на английском языке из инструкции.

А ниже на картинке приведено оригинальное описание данного инструмента на английском языке из инструкции.

Настройка клавиатуры. Выбор изображения.

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

Окно установки области отображения клавиатуры.

Для выбора изображения с клавиатурой нужно обязательно поставить галочку «Displayed Keyboard».

Окно установки области отображения клавиатуры.

Окно установки области клавиатуры, с помощью которой будет осуществляться ввод данных.

Пример создания цифровой клавиатуры с помощью инструмента «Data Input».

Для управления шаговым двигателем необходимо задавать различные параметры: скорость, ускорение, количество шагов для совершения перемещения на 1 мм., расстояние перемещения. При этом данные значения могут быть в пределах 1-10 или же несколько тысяч. Для удобства установки данных параметров реализовал всплывающую клавиатуру с помощью инструмента «Data Input».

Для выбора изображения с клавиатурой нужно обязательно поставить галочку «Displayed Keyboard».

Для создания обработчика нажатия на клавиши будем использовать инструмент «Basic Touch».

Для создания обработчика нажатия на клавиши будем использовать инструмент «Basic Touch».

Так как на данный момент его ещё не рассматривали, я кратко распишу, как им пользоваться. Ниже приведены значения кнопок для создания цифровой клавиатуры:

  • 0x0030-0x0039 соответствуют цифрам от 0 до 9;
  • 0x00F0 – отмена;
  • 0x00F1 – ввод;
  • 0x00F2 – стереть символ;
  • 0x002D – смена знака +/-;
  • 0x002E – точка (.).

Для ввода разных значений используется цифровая клавиатура

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

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Data Input»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Return Key code». Справочник среды разработки DGUS. http://arduino-tex.ru/news/126/opisanie-instrumenta-return-key-code-spravochnik-sredy.html Константин Portal-PK 2022-07-19T13:33:30+03:00 Данный инструмент позволяет создавать меню для перехода между страницами проекта. А также создавать кнопки, которые позволяют взаимодействовать с другими элементами на экране и отправлять данные по UART на микроконтроллер. Более полное описание данного инструмента можно прочитать в инструкции на английском языке, а скачать её можно внизу статьи в разделе «файлы для скачивания».

Инструмент среды разработки DGUS «Return Key code».

На картинке ниже приведено описание инструмента «Return Key code» на русском языке.

На картинке ниже приведено описание инструмента «Return Key code» на русском языке.

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

При необходимости можно отправить другое значение, например, цифру или букву, для этого нужно нажать на кнопку «Set».

Ниже приведено оригинальное описание данного инструмента на английском языке.

Ниже приведено оригинальное описание данного инструмента на английском языке.

Применение инструмента «Return Key code».

Инструмент «Return Key code» применяется для создания меню, с помощью которого можно переходить по страницам проекта.

Инструмент «Return Key code» применяется для создания меню, с помощью которого можно переходить по страницам проекта.

Также данный инструмент можно использовать для создания кнопок различного назначения. Кроме этого, «Return Key code» можно использовать для решения нестандартных задач.

Также данный инструмент можно использовать для создания кнопок различного назначения. Кроме этого, «Return Key code»

На сайте вы можете найти проекты, в которых использовался инструмент управления «Return Key code».

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Return Key code»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
Урок 4. Выводим кнопку на дисплей DWIN. Среда разработки DGUS. http://arduino-tex.ru/news/125/urok-4-vyvodim-knopku-na-displei-dwin-sreda-razrabotki.html Константин Portal-PK 2022-07-18T13:15:09+03:00 Продолжаем изучать среду разработки DGUS (DWIN Graphic Utilized Software). Данное программное обеспечение позволяет создавать красивые интерфейсы для HMI дисплеев компании DWIN. Сегодня на уроке научимся создавать кнопки. В этом нам поможет инструмент «Return Key code». Информацию о других инструментах среды разработки DGUS вы можете прочитать в разделе сайта «DWIN».


Создаём кнопку на дисплее DWIN.

Так же, как и в дисплее Nextion, для создания кнопки достаточно использовать всего один инструмент - «Return Key code». Как вывести кнопку на дисплей Nextion, я рассказывал в одном из своих уроках. Для дисплея Nextion можно сделать кнопку без картинки или с помощью иконки или двух фоновых изображений. Для дисплеев DWIN создание кнопки происходит с использованием двух фоновых изображений. Т.е. на одном изображении располагаются кнопки, которые находятся в пассивном состоянии (кнопка не нажата).

Создаём кнопку на дисплее DWIN.

На втором изображении располагаются кнопки в активном состоянии (кнопка нажата).

 На втором изображении располагаются кнопки в активном состоянии (кнопка нажата).

Как происходит подмена изображений, рассмотрим подробнее ниже при рассмотрении работы с инструментом «Return Key code».

Инструмент Return Key code.

В инструкции по работе со средой DGUS есть подробное описание «Return Key code» на английском языке. Скачать инструкцию на английском языке вы можете внизу статьи в разделе «файлы для скачивания». Давайте подробнее рассмотрим инструмент «Return Key code» и постараемся понять, как с помощью данного инструмента сделать кнопку.

Инструмент Return Key code.

Как создать кнопку с фиксацией, я уже рассказывал в проекте «Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32». В данном проекте используются 2 кнопки, которые помогают включить и выключить все реле.

На картинке ниже приведено описание «Return Key code» с переводом на русский язык.

На картинке ниже приведено описание «Return Key code» с переводом на русский язык.

Для того чтобы при нажатии на кнопку данные предавались по UART, необходимо поставить галочку «Data auto-uploading».

Для того чтобы при нажатии на кнопку данные предавались по UART, необходимо поставить галочку «Data auto-uploading».

Эффект нажатия на кнопку создаётся сменой изображения, в этом помогает параметр «Button effect». Тут нужно выбрать изображение, на котором располагается кнопка в активном состоянии. Работает это следующим образом: при нажатии на область, которая выделана элементом «Return Key code», она [область] меняется на фрагмент, изображение которое выбрано в поле «Button effect».

«Return Key code», она [область] меняется на фрагмент, изображение которое выбрано в поле «Button effect».

Следующий параметр «Page switching» использовать в данном уроке не будем, так как он нужен для создания кнопки перехода на другую страницу. Это может быть страница настроек или дополнительные инструменты управления. Для этого в данном параметре нужно выбрать изображение, на которое требуется сделать переход. И данное изображение будет новой страницей, на которой можно расположить различные инструменты управления. Как видим, среда разработки DGUS работает в основном с изображениями.

Следующий параметр «Page switching» использовать в данном уроке не будем

В проекте «Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32» необходимо при нажатии на кнопку включать или выключать все реле. Также менять состояние всех кнопок - переключателей. Про переключатели (кнопки с фиксацией) вы можете почитать в предыдущем уроке.

Поэтому для включения всех реле отправляем значение «0xFFFF»

Поэтому для включения всех реле отправляем значение «0xFFFF», а для выключения реле - значение «0x0000».

Поэтому для включения всех реле отправляем значение «0xFFFF», а для выключения реле - значение «0x0000».

При необходимости можно отправить другое значение, например, цифру или букву, для этого нужно нажать на кнопку «Set». В открывшемся окне выбираем нужный символ. В поле получаем символ в системе ASCII строчной и заглавной буквы. Правда, значения не совпадают с таблицей ASCII, но это не страшно. Можно без проблем выводить любые символы, даже русский текст. Об этом расскажу в следующем уроке.

При необходимости можно отправить другое значение, например, цифру или букву, для этого нужно нажать на кнопку «Set».

Также можно отправить байтовые значения.

Также можно отправить байтовые значения.

Код Arduino для работы с кнопками на дисплее DWIN.

На примере проекта «Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32» рассмотрим работу кнопки и разберём код, позволяющий понять, что кнопка была нажата и выполнить необходимые действия. В данном проекте это включение всех реле при нажатии на одну кнопку и выключение всех реле при нажатии на вторую кнопку.

Код Arduino UNO (NANO) для управления 8 – 16 реле с сенсорного дисплея DWIN.

Схема подключения Arduino, модуля 8 реле и дисплея DWIN.

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

Схема подключения Arduino модуля 8 реле и дисплея DWIN.

Также можно использовать данный код с ESP32. Посмотреть схемы подключения и код вы можете на странице проекта «Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32».

Описание кода обработки нажатия на кнопку.

Данный проект является не очень хорошим примером для разбора работы кнопки. Так как мы получаем значения 0xFFFF и 0x0000, что соответствует «1111111111111111» или «0» в двоичной системе счисления, тем самым мы отправляем команду на включение 16 реле. А одни нули выключают все реле. Код из прошлого урока будет обрабатывать нажатия кнопки включения и выключения всех реле. При этом дописывать ничего не нужно.

Для того чтобы выполнять определённое действие, можно отправлять 1 байт информации на микроконтроллер, как показано на картинке ниже. Это позволит сделать обычную кнопку, например, для включения 1 реле или другого устройства. С данным примером мы ещё встретимся в следующих проектах и уроках.

Для того чтобы выполнять определённое действие, можно отправлять 1 байт информации на микроконтроллер


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.


Понравился урок Выводим кнопку на дисплей DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Icon Rotation». Справочник среды разработки DGUS. http://arduino-tex.ru/news/124/opisanie-instrumenta-icon-rotation-spravochnik-sredy.html Константин Portal-PK 2022-07-18T10:39:53+03:00 Инструмент «Icon Rotation» позволяет вращать иконку относительно выбранной точки, что в свою очередь, позволяет сделать стрелки для: часов, спидометра, датчиков со стрелками и так далее. Также, возможно, вы найдёте другое применение данному инструменту в своих проектах на дисплее DWIN. Описание данного инструмента можно найти в официальной инструкции, которую можно скачать с сайта компании DWIN или внизу статьи в разделе «файлы для скачивания».

Инструмент среды разработки DGUS «Icon Rotation».

На картинке ниже приведено описание инструмента «Icon Rotation» на русском языке.

Инструмент среды разработки DGUS «Icon Rotation».

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

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

Ниже приведено оригинальное описание данного инструмента на английском языке.

Ниже приведено оригинальное описание данного инструмента на английском языке.

Применение инструмента «Icon Rotation» при выводе стрелок на дисплей DWIN.

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

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

С дисплеем серии COF получается очень красиво и удобно вмонтировать в приборную панель автомобиля.

 С дисплеем серии COF получается очень красиво и удобно вмонтировать в приборную панель автомобиля.

Для того чтобы добавить стрелку, нужно выбрать инструмент «Icon Rotation» и указать область вращения стрелки это будет верхний левый угол выделкой обрасти (красный квадрат).

Для того чтобы добавить стрелку, нужно выбрать инструмент «Icon Rotation» и указать область вращения стрелки

Затем нужно выбрать файл с иконками, а после этого выбрать саму иконку. На ней нужно указать точку вращения.

Затем нужно выбрать файл с иконками, а после этого выбрать саму иконку. На ней нужно указать точку вращения.

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

Настраиваем все дополнительные параметры и получаем вращающийся элемент. В моём случае - стрелка спидометра и тахометра автомобиля.

Настраиваем все дополнительные параметры и получаем вращающийся элемент. В моём случае - стрелка спидометра и тахометра автомобиля.

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Icon Rotation»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Дисплеи DWIN. Описание инструмента «Incremental Adjustment». http://arduino-tex.ru/news/123/displei-dwin-opisanie-instrumenta-incremental-adjustment.html Константин Portal-PK 2022-07-14T07:37:52+03:00 Так как я ориентируюсь на разработку проектов на Arduino и ESP32, мои проекты повторить могут люди, которые не очень хорошо знают английский язык. А так как инструкция среды разработки дисплеев DWIN написана на английском языке, которую можно скачать внизу статьи в разделе «файлы для скачивания», мы постоянно переводим инструкцию, когда делам уроки. Сегодня перевели описание инструмента «Incremental Adjustment».

Описание инструмента «Incremental Adjustment».

Инструмент «Incremental Adjustment» предназначен для определения нажатия на тачскрин дисплея DWIN и при необходимости передать нужную информацию по UART.

Ниже подставлено описание на русском языке инструмента «Incremental Adjustment».

Ниже подставлено описание на русском языке инструмента «Incremental Adjustment».

А ниже на картинке приведено оригинальное описание данного инструмента на английском языке из инструкции.

А ниже на картинке приведено оригинальное описание данного инструмента на английском языке из инструкции.

Применения инструмента «Incremental Adjustment».

Несмотря на то, что инструмент «Incremental Adjustment» используется для обработки нажатия на тачскрин, он является не единственным инструментом для работы с тачскрином. О них мы поговорим в следующий раз, а сейчас рассмотрим данный инструмент на практическом применение на примере проекта: "Панель управления подсветкой на дисплее DWIN.", "Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32." , а также урока: "Урок 3. Создаем переключатели (кнопки с фиксацией) на дисплее DWIN.".

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Описание инструмента «Incremental Adjustment»? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 3. Создаем переключатели (кнопки с фиксацией) на дисплее DWIN. http://arduino-tex.ru/news/122/urok-3-sozdaem-pereklyuchateli-knopki-s-fiksaciei-na.html Константин Portal-PK 2022-07-13T13:07:05+03:00 В предыдущем уроке мы познакомились со средой разработки DGUS (DWIN Graphic Utilized Software). Подготовили фоновые изображения и иконки, после чего проверили отображение графики на дисплее. Сегодня научимся создавать кнопки с фиксацией или переключатели на дисплее DWIN. В этом нам помогут два инструмента: «Bit icon», «Incremental Adjustment».



Инструменты для создания переключателя (кнопки с фиксацией) в среде разработки DGUS.

Для реализации кнопки с фиксацией на дисплее Nextion требуется всего один инструмент, о чём я рассказывал в своих уроках про данный модуль. С дисплеями DWIN ситуация немного иная. Для реализации кнопки с фиксацией потребуется 2 инструмента: «Bit icon» и «Incremental Adjustment». Это связано с тем, что инструменты в среде DGUS разлеплены на две группы:

1. Визуальное отображение элемента.

Визуальное отображение элемента.

2. Инструменты обработки нажатия на тачскрин.

Инструменты обработки нажатия на тачскрин.

И немного теории про элементы «Bit icon» и «Incremental Adjustment».

Инструмент Bit icon.

Из названия понятно, что данный инструмент позволяет работать с иконками. В инструкции по работе со средой DGUS есть подробное описание «Bit icon» на английском языке. Скачать инструкцию на английском языке вы можете внизу статьи в разделе «файлы для скачивания».

Применение данного инструмента на практике я уже показывал в проекте «Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32». Ниже представлено описание элементов инструмента «Bit icon» на русском языке.

На картинке ниже приведено описание инструмента «Bit icon» на русском языке.Для работы с битами открывается отдельно всплывающее окно, которое выглядит следующим образом.

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

Здесь нужно поставить галочку нулевого бита для первой кнопки, первого бита для второй

Наверное, вы подумали, что это ограничение дисплея DWIN, и мы можем использовать всего 16 кнопок с фиксацией в проекте! Это не так, 16 ячеек памяти по адресу 5000. А для другой ячейки памяти, например, для 5001, также можно сделать 16 кнопок и так далее.

Наверное, вы подумали, что это ограничение дисплея DWIN

И, наконец, нам нужно добавить иконки. Сами иконки загружены в проект в прошлом уроке. Сейчас мы просто выбираем файл с иконками «34.icl». Из него выбираем иконку для первичного состояния (пассивного) и вторую для активного состояния (кнопка нажата). ICON0E и ICON1E можно оставить без изменения, данные параметры нужны для создания эффекта анимации.

Иконки достаточно просто выводятся на дисплей DWIN.

Иконки достаточно просто выводятся на дисплей DWIN.

Создавать управления и изменять иконки при нажатии на тачскрин будем с помощью следующего инструмента «Incremental Adjustment».

Инструмент «Incremental Adjustment».

Инструмент «Incremental Adjustment» обрабатывает нажатие на сенсор. Более подробное описание данного инструмента на английском языке вы можете найти в инструкции, которая прикреплена к данной статье. А ниже на картинке приведено описание на русском языке данного инструмента.

Инструмент «Incremental Adjustment»

Данный элемент накладываем поверх «Bit icon».

Данный элемент накладываем поверх «Bit icon».

Также нам нужно поставить галочку «Data auto-uploading» для того, чтобы при нажатии на сенсор отправлять данные по UART на микроконтроллер. В нашем случае это ESP32 или Arduino.

Также нам нужно поставить галочку «Data auto-uploading»

Адрес элементов будет один и тоже - «5000» такой же, как и у инструмента «Bit icon».

Адрес элементов будет один и тоже - «5000» такой же, как и у инструмента «Bit icon».

Чтобы нажатия на тачскрин приводило к изменению нужной иконки, необходимо указать номер бита, с которым мы будем работать. Для первой кнопки это 0, для второй 1, для третей 2 и так далее. Для восьмой кнопки это будет 7, что соответствует биту иконки, поверх которой наложен инструмент «Incremental Adjustment».

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

И самое главное — правильно настроить обработку нажатия на сенсор. Устанавливаем увеличение при нажатии на кнопку на 1. Выставляем минимальное значение 0, максимальное — 1. Также обязательно нужно сделать циклическое изменение, тем самым при нажатии у нас будет менять 1 на 0, а 0 на 1. Что позволит менять иконку и оправлять на микроконтроллер информацию о состоянии кнопки.

И самое главное — правильно настроить обработку нажатия на сенсор.

Также важный параметр — это «Touch effect», тут нужно выбрать «Disposable» — однократное увеличение значение. Это означает, что при касании тачскрина кнопка изменит своё состояние всего 1 раз.

Также важный параметр — это «Touch effect», тут нужно выбрать «Disposable»

Описание кода для обработки нажатия на кнопку с фиксацией.

Код я разделил на 2 вкладки. Всё, что касается работы с дисплеем, находится на вкладке «display».

Код я разделил на 2 вкладки. Всё, что касается работы с дисплеем, находится на вкладке «display».

Для чтения получаемых данных по UART сделал функцию ReadSerial(), которую вызываем в основном цикле loop().

Для чтения получаемых данных по UART сделал функцию ReadSerial(),

В функции ReadSerial(), если были получены данные по UART, сохраняем их в массив Buffer[Buffer_Len]. И поднимаем флаг «flag».

В функции ReadSerial(), если были получены данные по UART

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

Если данные не поступают с дисплея, переходим к их обработке

Убедимся, что получили правильный байт пакета данных. Затем переходим к проверке адреса данных.

Убедимся, что получили правильный байт пакета данных. Затем переходим к проверке адреса данных.

Если первое значение адреса — 50, то в цикле проверяем полученные данные.

Возможно, в кода не понятно, что происходит, так как используется сокращённая форма записи.

Возможно, в кода не понятно, что происходит, так как используется сокращённая форма записи. Если всё расписать полностью без сокращения, то получим вот такой цикл. Я думаю, так будет более понятно для новичков.

Если кратко, то в цикле мы пробегаем по всем контактам, к которым подключены реле

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

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

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

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

В коде прописал функцию отладки, которая помогает понять, какие данные получаем с дисплея и как это всё работает.

Таким образом можно включать/выключать одно реле. А также при нажатии на одну кнопку выключить /включить всё реле. Это достаточно удобно. Но для включения и выключения всех реле используется другой инструмент, который рассмотрим в следующем уроке.

Схема подключения к Arduino модуля 8 реле и дисплея DWIN.

Схема подключения Arduino модуля 8 реле и дисплея DWIN.

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

Схема подключения ESP32 модуля 8 реле и дисплея DWIN.Также можно использовать данный код с ESP32. Посмотреть схемы подключения и код вы можете на странице проекта «Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32».


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравился урок Создаем переключатели (кнопки с фиксацией) на дисплее DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание инструмента «Bit icon». Справочник среды разработки DGUS. http://arduino-tex.ru/news/121/opisanie-instrumenta-bit-icon-spravochnik-sredy.html Константин Portal-PK 2022-07-12T08:59:09+03:00 Описание среды разработки DGUS написано на английском языке. Полную инструкцию можно скачать внизу статьи в разделе «файлы для скачивания». Но для того, чтобы русскоговорящим разработчикам было проще разобраться с данной средой, перевели и оформили описание инструмента «Bit icon».

DWIN инструмента «Bit icon».

На картинке ниже приведено описание инструмента «Bit icon» на русском языке.

На картинке ниже приведено описание инструмента «Bit icon» на русском языке.

Для работы с битами открывается отдельно всплывающее окно, которое выглядит следующим образом.

Для работы с битами открывается отдельно всплывающее окно, которое выглядит следующим образомНиже приведено оригинальное описание данного инструмента на английское языке.

Ниже приведено оригинальное описание данного инструмента на английское языке.

Применение инструмента «Bit icon».

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

Применение инструмента «Bit icon».

И подробнее о практическом применении вы может узнать из проекта: "Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32." или урока.

Смотрите также другую полезную информацию про дисплеи DWIN:


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Описание инструмента «Bit icon». Справочник среды разработки DGUS? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Описание конфигурационного файла. Утилита CFG Edit. http://arduino-tex.ru/news/120/opisanie-konfiguracionnogo-faila-utilita-cfg-edit.html Константин Portal-PK 2022-07-11T14:07:12+03:00 У дисплеев DWIN есть конфигурационный файл .CFG, который отвечает за ориентацию дисплея, яркость подсветки, скорость передачи данных, работу зуммера и другие настройки. Редактировать данные параметры можно с помощью встроенной утилиты CFG Edit.

Где находится утилита CFG Edit?

Для того чтобы начать редактировать конфигурационный файл, нужно открыть утилиту CFG Edit. Её можно найти в среде разработки DGUS на странице «Welcome». Подробнее узнать про все инструменты, которые находятся на странице «Welcome» можно в уроке «Знакомство со средой разработки DGUS - DWIN. Подготовка изображений».

Основная страница программы DGUS.

После нажатия на «Config Generator» откроется утилита CFG Edit, с помощью которой производится настройка конфигурационного файла.

После нажатия на «Config Generator» откроется утилита CFG Edit

Описание утилиты CFG Edit.

С помощью утилиты CFG Edit можно произвести настройки следующих параметров конфигурационного файла:

  • Работу с Modbus.
  • Отправлять или нет данные в Serisal.
  • Включить или выключить звуковое уведомление при касании тачскрина.
  • Выбор звучания зуммера или звукового файла.
  • Настройка тональности зуммера.
  • Поворот ориентации экрана на: 0, 90, 180, 270 градусов против часовой стрелки.
  • Включить или выключить режим ожидания.
  • Настроить яркость подсветки в активном состоянии и яркость подсветки в режиме ожидания.
  • Длительность активного режима.
  • В более ранних версиях DGUS есть доступ к настройкам железа. Данные параметры изменять я не рекомендую.

На картинке ниже представлено изображение с описанием блока настроек на русском языке.

На картинке ниже представлено изображение с описанием блока настроек на русском языке.

Последние версии DGUS имеют меньше настроек. Например, в версии V7640 удалены настройки железа и настройка тональности зуммера.

Последние версии DGUS имеют меньше настроек. Например, в версии V7640 удалены настройки железа и настройка тональности зуммера.

Живые примеры использования настроек дисплея можно найти в уроках. Например, настройка работы со звуковыми уведомлениями при касании тачскрина подробнее рассмотрена в уроке «MP3 звуки при касании сенсора дисплея DWIN».

Как часто нужно обновлять .cfg файл?

После того как вы отредактировали конфигурационный файл, его нужно сохранить в папку с проектом /DWIN_SET, после чего загрузить на дисплей. Как подобрать карту памяти и загрузить прошивку на дисплей, я рассказывал в статье «Выбор и подготовка SD карты для HMI дисплеев DWIN, Nextion».

Как часто нужно обновлять .cfg файл?

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

Читайте другие полезные статьи про дисплей DWIN.


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Описание конфигурационного файла. Утилита CFG Edit? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN. http://arduino-tex.ru/news/119/mini-meteostanciya-na-esp32-arduino-i-bme280-s-vyvodom-dannyh-na.html Константин Portal-PK 2022-07-07T08:02:43+03:00 В этом проекте сделаем мини-метеостанцию используя ESP32 (Arduino) и датчик барометрического давления BME280, который может предоставлять информацию об атмосферном давлении, температуре и влажности в режиме реального времени. С помощью BME280 также можно измерить высоту над уровнем моря. Полученные значения выведем на дисплей DWIN.


Кратко о датчиках давления, температуры и влажности BME280 (BMP280).

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

Кратко о датчиках давления, температуры и влажности BME280 (BMP280).

Виды датчиков BME280 (BMP280).

Датчик BME280 имеет несколько разновидностей и в зависимости от модуля может подключаться к I2C и SPI шинами микроконтроллера и работать от 3-5В.

Как узнать, какое рабочее напряжение модуля? Если на плате есть стабилизатор, его можно запитать от источника напряжением 5В. Если на плате нет стабилизатора, то подключить можно только к источнику питания 3В.

Датчик BME280 имеет несколько разновидностей и в зависимости от модуля может подключаться к I2C и SPI

На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BME, в которой нет влажности. Как их различить, если недобросовестный продавец не поставил галочку? Они отличаются по корпусу датчика:На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BMEИнформация о типах модулей взята с сайта.

Датчики я покупал себе с сопутствующим товаром на будущее и информацию предварительно не почитал. Я повёлся на низкую стоимость и в результате стал счастливым обладателем BMP280. Кстати, покупал 2 модуля, и галочки нет ни на одном. Это, конечно, не критично, но есть некоторые сложности с тем, чтобы заставить датчик работать. Помогла библиотека Гайвера.

Распиновка модуля BME280 без стабилизатора на борту.

Интерфейс BME280 I2C использует следующие контакты:

Интерфейс BME280 I2C использует следующие контакты:

  • VCC: от 1,71 В до 3,6 В
  • GND: подключение к GND
  • SCL: последовательные часы (SCK)
  • SDA: последовательные данные (SDI)
  • CSB: должен быть подключен на VDDIO, чтобы выбрать интерфейс I2C.
  • SDO: контакт определяет I2C адрес устройства. Если SDO подключается к GND (0), то адрес равен 0x76. Если он подключается к VDDIO(1), то адрес равен 0x77. В этом модуле мы подключили его к VDDIO, поэтому адрес должен быть 0x77.

Интерфейс I2C.

Модуль оснащён простым двухпроводным интерфейсом I2C, который можно легко соединить с любым выводом I2C микроконтроллера. Адрес I2C модуля BME280 по умолчанию 0x76, и его можно легко изменить на 0x77.

На рынке доступен ещё один модуль, который имеет только 4 контакта. Чтобы изменить его адрес I2C, найдите перемычку для пайки рядом с микросхемой.

На рынке доступен ещё один модуль, который имеет только 4 контакта. Чтобы изменить его адрес I2C

Благодаря данной перемычке можно изменить адрес I2C.

Благодаря данной перемычке можно изменить адрес I2C.

По умолчанию средний медный контакт площадки подключён к левой контактной площадке. Поэтому вам нужно поцарапать соединение между средней и левой медными контактными площадками, чтобы отсоединить их. Затем вы можете добавить каплю припоя между средней и правой медными площадками, чтобы соединить их. Это позволит вам установить адрес I2C 0x77.

При необходимости мы можем изменить адрес датчика и подключить 2 модуля к одному микроконтроллеру.

Схема подключения дисплея DWIN, модуля BME280 к ESP32.

Датчик барометрического давления BME280 взаимодействует с ESP32 для создания простой мини-метеостанции.

Схема подключения дисплея DWIN, модуля BME280 к ESP32.

Подключите контакты SDA SCL BME280 к соответствующим контактам ESP32, то есть к контактам GPIO22 и GPIO21 соответственно. Дисплей DWIN подключаем ко второму UART порту ESP32, то есть к контактам GPIO16 и GPIO17.

Библиотека для работы с BME280.

Самая распространённая библиотека для работы с BME280 является Adafruit BME280 (для работы также нужно установить Adafruit Sensor). Но она не работает с BMP280, поэтому пришлось искать альтернативное решение.

GyverBME280 – библиотека более удобная и лёгкая. Также поддерживает датчики BMP280. То, что мне требовалось для данного проекта.

Библиотека для работы с BME280.

Библиотеку можно установить через менеджер библиотек или скачать с официального сайта разработчика. Также прикреплю библиотеку внизу статьи в разделе «Файлы для скачивания».

Код метеостанции на DWIN, модуле BME280 и ESP32.

В коде менять ничего не нужно. Максимум посмотреть, чтобы был выключен DEBUG. В противном случае вместо влажности воздуха у вас будет выводиться информация со счётчика. Счётчик я добавил для того, чтобы можно было отследить, что всё работает и информация обновляется на дисплее. А также в связи с тем, что у меня датчик BMP280 и значение влажности выводит 0.

Код метеостанции на DWIN, модуле BME280 и ESP32.

Остальные данные меняйте по мере необходимости. Например, адрес устройства по умолчанию 0x76. Возможно, вам нужно будет поменять на 0x77.

Например, адрес устройства по умолчанию 0x76. Возможно, вам нужно будет поменять на 0x77.

Прошивка для дисплея DWIN.

Для данного проекта подайте дисплей без сенсора. Благо, практически для всех моделей дисплеев DWIN доступна версия без сенсора.

Для данного проекта подайте дисплей без сенсора. Благо, практически для всех моделей дисплеев DWIN доступна версия без сенсора.

Для вывода информации будем использовать всего один инструмент - «Data variables». С данным инструментом мы уже знакомы из проекта «Панель управления подсветкой на дисплее DWIN».

Для вывода информации будем использовать всего один инструмент - «Data variables».

Но его мы использовали только для вывода целочисленных значений. Сегодня в проекте будем выводить дробные значения.

Для вывода информации будем использовать всего один инструмент - «Data variables».

Для этого данные для вывода нужно настроить следующим образом.

Для этого данные для вывода нужно настроить следующим образом.

Как видим, настройки изменились не сильно. Аналогичным образом выводим все остальные параметры.

Мини-метеостанция на Arduino и BME280 с выводом данных на дисплей DWIN.

И если у вас нет в наличии ESP32, можно сделать проект, используя классическую отладочную плату Arduino UNO или Arduino NANO.

Мини-метеостанция на Arduino и BME280 с выводом данных на дисплей DWIN.

Код для Arduino NANO (UNO).

Внизу статьи в разделе «файлы для скачивания» вы можете скачать код для Arduino NANO (UNO). Обратите внимание, что данный код я не тестировал на железе. Если у вас будут вопросы, пишите в комментариях.

Код для Arduino NANO (UNO).

Схема подключения дисплея DWIN и модуля BME280 к Arduino NANO.

Схема подключения дисплея DWIN и модуля BME280 к Arduino NANO.

Подключаем электронику дисплея DWIN, модуля BME280 к Arduino NANO по схеме.

Вывод.

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


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Как использовать промокод на AliExpress при покупке дисплея DWIN http://arduino-tex.ru/news/118/kak-ispolzovat-promokod-na-aliexpress-pri-pokupke.html Константин Portal-PK 2022-07-04T08:12:53+03:00 Сенсорные дисплеи компании DWIN стоят относительно недорого, но можно ещё сэкономить при покупке дисплея на AliExpress. Для этого нужно при покупке использовать промокод, но, как показывает практика, не все знают, как правильно это сделать на AliExpress при покупке дисплея DWIN. Поэтому в этой статье я расскажу поэтапно, что нужно сделать, чтобы получить дополнительную скидку.

Сенсорные дисплеи компании DWIN стоят относительно недорого

Добавляем дисплей DWIN в корзину на AliExpress.

Прежде чем добавить товар в корзину, нужно помнить, что купон действует только при покупке дисплеев в официальном магазине DWIN Technology на AliExpress. Если вы купите в магазине партнёре, то скидку вы не получите.

Добавляем дисплей DWIN в корзину на AliExpress.

Затем выбираем интересующий нас дисплей и добавляем его в корзину. Как пример, я добавлю распространённую модель HMI дисплея DMG80480C070_04WTC.

распространённую модель HMI дисплея DMG80480C070_04WTC

Затем заходим в корзину, ставим галочку около товара и нажимаем кнопку «Купить». После чего вы попадаете на страницу, где нужно вводить купон.

Затем заходим в корзину, ставим галочку около товара и нажимаем кнопку «Купить».

Чтобы быстро попасть на страницу ввода купона, можно на странице выбора товара нажать на кнопку «Купить сейчас», и вы автоматически попадёте на страницу, где нужно вводить купон.

Чтобы быстро попасть на страницу ввода купона, можно на странице выбора товара нажать на кнопку «Купить сейчас»

Теперь можно оформить заказ и получить скидку.

Как использовать промокод на AliExpress для получения скидки.

Сейчас в форме заказа заполняем поле «Промокод», указываем купон ARDUINOTEX или ARDUINOTEX1 и нажимаем кнопку «Применить». Купон можно скопировать и вставить или написать самостоятельно.

Как использовать промокод на AliExpress для получения скидки.

Если вы указали купон правильно, вы увидите, что стоимость к оплате уменьшилась. Внизу под товаром вы увидите, что в поле «Промокод или купон продавца» появилась скидка.

 Внизу под товаром вы увидите, что в поле «Промокод или купон продавца» появилась скидка.

Осталось нажать на кнопку «Оформить заказ» и произвести оплату.

Осталось нажать на кнопку «Оформить заказ» и произвести оплату.

Остаётся самое сложное — это дождаться, когда прейдет дисплей и вы сможете его протестировать и сделать отличные проекты. А тут вы можете найти примеры проектов, которые можно реализовать с использованием дисплея DWIN.

Вот так просто вы можете получить дополнительную скидку на товары компании DWIN.

Понравилась статья Как использовать промокод на AliExpress при покупке дисплея DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 2. MP3 звуки при касании сенсора дисплея DWIN. http://arduino-tex.ru/news/117/urok-2-mp3-zvuki-pri-kasanii-sensora-displeya-dwin.html Константин Portal-PK 2022-06-21T20:24:45+03:00

В проектах с дисплеем DWIN я уже показывал, что можно сделать звук при касании сенсора. Это привычное для всех пищание зуммера. Иногда данный звук даже нет желания использовать, так как он достаточно противный. В конфигурационном файле .CFG можно настроить тональность, но это тоже не то, что нужно. Хотелось бы использовать свой звук, желательно в .mp3 формате. Для этого дисплей DWIN имеет возможность загрузить свои звуки. Что для этого нужно и как использовать, сейчас разберём в данном уроке.


Подготовка звуковых эффектов для дисплея DWIN.

Чтобы использовать свои звуки, их нужно упаковать с помощью «Упаковщика аудио». Данный инструмент находится на главной странице среды разработки DGUS. Подробнее о том, какие инструменты есть на главной странице среды разработки я рассказывал в прошлом уроке.

Основная страница программы DGUS.

Сегодня нас интересует «WAE Generator».

Сегодня нас интересует «WAE Generator».

Генерируем файл со звуковыми эффектами.

В открывшемся окне нужно добавить файлы, которые мы планируем использовать в своём проекте. Для этого нажимаем на кнопку «Select Files».

Генерируем файл со звуковыми эффектами.

В открывшемся окне выбираем файлы. Важный момент: файлы должны начинаться с числа в шестнадцатеричной системе счисления от 0 до F. Это даёт возможность использовать до 16 файлов. Данное число используется как индификатор дорожки в программе DGUS. Об этом поговорим подробнее немного позднее.

Данное число используется как индификатор дорожки в программе DGUS.

Затем нажимаем кнопку «Generate WAE» - Упаковщик аудио сжимает аудиофайлы в один WAE файл. В открывшемся окне указываем название файла «40» и нажимаем кнопку «Сохранить».

Затем нажимаем кнопку «Generate WAE» - Упаковщик аудио сжимает аудиофайлы в один WAE файл. В открывшемся окне указываем название файла «40» и нажимаем кнопку «Сохранить».

Поздравляю, звуки мы добавили в проект.

Настройка конфигурационного файла .CFG для использования звуковых уведомлений.

Далее нам нужно указать в конфигурационном файле, будем ли мы использовать звуковое уведомление при касании или нет, а также выбрать тип звучания: «Buzzer» или «Music». Про конфигурационный файл на данный момент нет отдельного урока или статьи, но в ближайшее время напишу статью, найти которую можно будет тут.

Настройка конфигурационного файла .CFG для использования звуковых уведомлений.

Вы можете скачать конфигурационный файл данного урока для дисплея разрешением 800 на 480 px и самостоятельно менять ничего не нужно. Если у вас другое разрешение экрана, то вам потребуется самостоятельно внести необходимые изменения.

Для редактирования конфигурационного файла переходим на главную страницу среды разработки и выбираем инструмент «Config Generator» - Редактор .CFG файла.

Настройка конфигурационного файла .CFG для использования звуковых уведомлений.

Можно создать новый конфигурационный файл и настроить всё самостоятельно.

Можно создать новый конфигурационный файл и настроить всё самостоятельно.

Но если у вас недостаточно опыта, откройте готовый конфигурационный файл и внесите те изменения, о которых я сейчас расскажу.

Но если у вас недостаточно опыта, откройте готовый конфигурационный файл и внесите те изменения, о которых я сейчас расскажу.

Для того чтобы включить звуковые уведомления при нажатии на тачскрин, нужно в пункте «Touch Sound» выбрать «on».

Для того чтобы включить звуковые уведомления при нажатии на тачскрин, нужно в пункте «Touch Sound»

Затем включаем воспроизведение музыки. Для этого в пункте «Buzzer/Music Play» Выбираем параметр «Music». И самое главное - нужно указать правильно файл с музыкой. Для этого пропишем в поле «WAE Address» число «40». Это идентификатор файла, который мы создали ранее.

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

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

Интерфейс для создания пианино на дисплее DWIN.

Все графические элементы для урока вы можете скачать внизу в разделе «файлы для скачивания».

Интерфейс для создания пианино на дисплее DWIN.

Для создания интерфейса будем использовать всего один инструмент — «Return Key code». При этом настройки для данного урока минимальные: нужно добавить картинку для смены при нажатии на кнопку, поставить галочку «Audio ID» и выбрать номер трека. У вас, наверное, возник резонный вопрос. Что за номер трека? У нас же используется всего 1 файл! Помните, в начале урока я говорил, что для каждой дорожки необходимо вначале прописать ID от 0 до F. И для того, чтобы из файла с музыкой выбрать нужный трек, потребуется указать как раз этот идентификатор.

Для создания интерфейса будем использовать всего один инструмент — «Return Key code».

Для следующей клавиши изменится только 1 параметр — это номер трека. Такими образом можно создать пианино. Звучит оно у меня не очень громко. На видео я немного увеличил звук, но есть дисплеи DWIN с установленным динамиком. Это позволит воспроизводить звуки гораздо громче и качественнее, чем в моём случае с помощью зуммера.

Звуковые эффекты при нажатии на кнопку.

Звуковые эффекты при нажатии на кнопку.

Звуковые эффекты нажатия на кнопку создаются аналогичным образом. Только меняется ID страницы и ID треков.

Звуковые уведомления.

Также планировал сделать страницу со звуковыми уведомлениями. Звуковые дорожки более длительного времени воспроизведения, и, видимо, что-то я посчитал неправильно. Можно использовать всего 16 треков в проекте, а я уже использовал 15 и остался всего 1. Поэтому на странице со звуковыми эффектами всего 1 звуковой эффект, а остальное — звуки из предыдущих пунктов.

Звуковые уведомления.

Настройки такие же, как и в предыдущем случае, отличается только ID страницы и ID треков.

Важно понимать!

Как видим, подготовка звуков и настройка занимает больше времени, чем сам процесс использования звуковых треков. Но важно понимать, что настройки дисплея можно произвести всего 1 раз и в дальнейшем использовать данные настройки для разных проектов. Также файл со звуками можно подготовить всего 1 и в разных проектах использовать разные звуки. Благо их можно подгрузить до 16 штук.

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

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

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

Вывод.

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


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравился Урок MP3 звуки при касании сенсора дисплея DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Панель управления подсветкой на дисплее DWIN. http://arduino-tex.ru/news/116/panel-upravleniya-podsvetkoi-na-displee-dwin.html Константин Portal-PK 2022-06-14T10:38:40+03:00 Для реализации красивой подсветки я использую адресные светодиоды WS2812. На данный момент у меня дома сделано 3 различных подсветки длиной до 5 метров. Для управления я использую сенсорную кнопку и приложение для телефона. Но моему сыну данные варианты управления не очень нравятся, поэтому я решил сделать пульт управления подсветкой на дисплее DWIN.


Если вам нравится данный проект, и вы хотели бы, чтобы я сделал версию с круговым выбором статического цвета, с выбором времени автоматического переключения режимов и, конечно же, добавил новые световые эффекты, пишите ваши пожелания в комментариях. Чем больше будет откликов, тем скорее я сделаю вторую версию управления подсветкой. Если вы не понимаете, о чём идёт речь, читайте статью дальше.

решил сделать пульт управления подсветкой на дисплее DWIN.

Приобрести дисплей можно в официальном магазине DWIN Technology на AliExpress. Например, 7-дюймовый дисплей с резистивным сенсором можно купить от 2500 рублей. С ёмкостным сенсором от 3000 руб. (Цена указана с учётом доставки, действительна на момент публикации статьи).

Подготовка дисплея DWIN для прошивки.

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

Подготовка дисплея DWIN для прошивки.

Если перемычка замкнута/спаяна - режим TTL/UART. Если перемычка разъединена - режим RS232.С завода дисплеи идут без перемычки, поэтому её нужно замкнуть, можно просто спаять или припаять smd резистор номиналом 0 Ом.

Затем нужно подготовить карту памяти. Про этот этап у меня есть отдельная статья, в которой всё подробно расписано.

После этого можно приступить к прошивке дисплея.

Прошивка дисплея компании DWIN.

Для загрузки примера нужна прошивка, которую можно скачать внизу статьи в разделе «Файлы для скачивания». Пример сделал для дисплеев разрешением 800x480 px. Соответственно, он подойдёт для дисплеев 5 и 7 дюймов с данным разрешением экрана, но не ко всем. Смотрите разрешение своего дисплея в даташите к нему. Если разрешение дисплея больше, чем 800x480 px, то по краям вы увидите чёрные полосы.

В архиве проекта нужно скопировать папку DWIN_SET на карту памяти. Файлы должны располагаться на карте по пути: «/DWIN_SET/».

Вставляем SD карту в HMI модуль. Подайте питание.

Вставляем SD карту в HMI модуль. Подайте питание.

Вставляем SD карту в HMI модуль. Подайте питание.

Вы увидите синий экран с надписями. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Вы увидите синий экран с надписями. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Если загрузка прошла успешно, вы увидите следующую информацию. Если что-то пошло не так, то информация на дисплее будет следующая.

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

Делаем прошивку для дисплея DWIN.

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

Для управления нам понадобиться создать 2 фоновых изображения и набор иконок,

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

Управление режимами подсветки.

Для управления и вывода информации о режимах подсветки будем использовать следующие инструменты: «VAR Icon», «Incremental Adjustment», «Data variables».

Управление режимами подсветки.

С «Incremental Adjustment» мы уже знакомы. В данном случае его нужно настроить следующим образом.

С «Incremental Adjustment» мы уже знакомы. В данном случае его нужно настроить следующим образом.

Для кнопки увеличения значений режима настройки аналогичные, только изменяем параметр «Adjust method» на «++». Т.е. увеличение значения на 1 при нажатии на кнопку.

Для кнопки увеличения значений режима настройки аналогичные,

Для вывода целочисленных значений будем использовать инструмент «Data variables».

Для вывода целочисленных значений будем использовать инструмент «Data variables».

Тут, я думаю, ни чего сложного нет.

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

Далее переходим к выводу названий эффектов. Для этого будем использовать иконки с названием эффектов.

Иконки нужно изменять в заданном диапазоне, в этом нам поможет «VAR Icon».

Иконки нужно изменять в заданном диапазоне, в этом нам поможет «VAR Icon».

Здесь нужно выбрать ICL-файл иконок. В моём случае это «46.icl». Минимальное и максимальное значение — это количество эффектов, у меня их 18. Также нужно указать диапазон id иконок.

Добавляем переключатели в проект.

Как добавлять переключатели, я подробно рассмотрел в прошлом уроке. В данном проекте будет 2 переключателя. Один включает автоматическое переключение режимов подсветки. Второй включает управление статическим цветом. Для реализации переключателей будем использовать инструменты «Incremental Adjustment» и «Bit icon».

Добавляем переключатели в проект.

Настройки «Bit icon» будут следующие.

Настройки «Bit icon» будут следующие.

Параметры настройки «Incremental Adjustment».

Параметры настройки «Incremental Adjustment».

Добавляем слайдеры в проект.

Для создания слайдера нужно использовать два инструмента «Slider Display» и «Drag Adjustment».

Добавляем слайдеры в проект.

Зачем нужно использовать 2 инструмента?

Например, в Nextion Editor используется один элемент. Почему тут нужно 2? Да, у меня возникли такие же вопросы. Но на самом деле всё очень просто. Один элемент «Slider Display» выводит графическую часть, и с его помощью можно сделать прогресс бар. А второй «Drag Adjustment» работает с тачскрином и передаёт первому элементу значения, что мы провели пальцем по дисплею. Данная информация будет передана в элемент «Slider Display» и бегунок слайдера переместиться.

Настраиваем «Slider Display» следующим образом.

Настраиваем «Slider Display» следующим образом.

Настроек у инструмента «Drag Adjustment» мало, и они выглядят следующим образам.

Настроек у инструмента «Drag Adjustment» мало, и они выглядят следующим образам.

Вывод значения яркости.

Для управления яркостью используется слайдер. Настраивается по тому принципу, о котором я рассказывал ранее.

Вывод значения яркости.

Только одна особенность — это цифровое значение яркости. Как вывести данное значение, будет вам домашним заданием. Тем более инструмент для этого «Data variables» мы уже рассмотрели.

Схема подключения Arduino, дисплея DWIN и адресных светодиодов WS2812.

Схема подключения Arduino, дисплея DWIN и адресных светодиодов WS2812.

Схема подключения ESP32, дисплея DWIN и адресных светодиодов WS2812.

Схема подключения ESP32, дисплея DWIN и адресных светодиодов WS2812.

Установить нужно библиотеку FastLED.

Установить нужно всего одну дополнительную библиотеку FastLED.

ВНИМАНИЕ! Версия библиотеки должна быть не ниже версии FastLED 3.1. В противном случае при компиляции вы увидите предупреждение «warning "Requires FastLED 3.1 or later; check github for latest code.», а загрузка кода будет приостановлена.

Установить библиотеку можно через менеджер библиотек.

Установить библиотеку можно через менеджер библиотек. В таком случае у вас установится последняя версия и всё будет работать как надо. Если у вас уже установлена данная библиотека, то её нужно обновить. Для этого вам необходимо выбрать версию больше 3,1 из списка доступных версий и обновить.

как установить библиотеку с помощью менеджера библиотек

Если вы не знаете, как установить библиотеку с помощью менеджера библиотек, можете скачать библиотеку внизу статьи в разделе «файлы для скачивания» и установить её, переместив в папку с библиотеками, которая располагается тут: «Документы\Arduino\libraries».

Скетч для Arduino UNO (NANO) управление подсветкой с сенсорного дисплея DWIN.

За основу взял код из моего предыдущего проекта «Светодиодный ночник с управлением по Wi-Fi».

Скетч для Arduino UNO (NANO) управление подсветкой с сенсорного дисплея DWIN.

Как и в предыдущем примере, я вынес переменные, которые можно поменять:

  • DEBUG – режим отладки: 1- включен, 0 – отключен.
  • DATA_PIN – пин Arduino, к которому подключена лента.
  • TIMER_MS – время длительности одного эффекта в секундах. Используется для переключения эффектов в автоматическом режиме.
  • SPEED – скорость выполнения эффектов. Чем она больше, тем медленнее будут световые эффекты. Применяется ко всем световым эффектам.
  • LED_TYPE – тип светодиодов может быть APA102, WS2801 или WS2812B.
  • GRB – расположение цветов. Если вы выставили красный цвет, а на ленте светит зелёный, значит нужно поменять данный параметр.
  • NUM_LEDS – количество светодиодов в ленте.

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

Скетч для Arduino UNO (NANO) управление подсветкой с сенсорного дисплея DWIN.

Внимание! При загрузке кода в Arduino UNO (NANO) необходимо отключать информационные провода RX и TX подключения дисплея. Иначе среда Ardino IDE выдаст ошибку при загрузке.

Такой проблемы нет при работе с платами, где есть несколько аппаратных UART. Например, Arduino MEGA или ESP32.

Скетч для ESP32 управление подсветкой с сенсорного дисплея DWIN.

Код для ESP32 практически не имеет отличий. Настройки точно такие же, как и для Arduino UNO.

Скетч для ESP32 управление подсветкой с сенсорного дисплея DWIN.

Только одна особенность. Обновить код можно при собранной схеме. Что позволит обновить код, даже если у вас всё уже работает и все проводники припаяны. Хотя ESP32 можно прошить и по воздуху.

 Хотя ESP32 можно прошить и по воздуху.

Подведём итог.

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


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Панель управления подсветкой на дисплее DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 1. Знакомство со средой разработки DGUS - DWIN. Подготовка изображений. http://arduino-tex.ru/news/115/urok-1-znakomstvo-so-sredoi-razrabotki-dgus---dwin.html Константин Portal-PK 2022-05-25T09:49:38+03:00 В данном уроке познакомимся со средой разработки DGUS (DWIN Graphic Utilized Software). Рассмотрим, как подготовить изображения для проекта с использованием дисплея компании DWIN. Подробно разберём, как загрузить изображения в проект и подготовить основные файлы проекта.



Среда разработки DGUS.

Давайте рассмотрим программу DGUS (сокращение от DWIN Graphic Utilized Software) и основные формируемые файлы для работы. Ниже представлена краткая диаграмма разработки ПО.

Давайте рассмотрим программу DGUS (сокращение от DWIN Graphic Utilized Software)

С системой на кристалле T5L можно работать напрямую, программируя ядро, например, через Keil и с помощью программы DGUS через визуальный интерфейс.

С системой на кристалле T5L можно работать напрямую, программируя ядро, например, через Keil и с помощью программы DGUS

В программу DGUS загружаются изображения, иконки, аудиофайлы, шрифты. Далее при работе формируются взаимодействия элементов дисплея, элементов сенсорной панели, размечается область памяти для переменных. После загрузки файлов на дисплей происходит взаимодействие через графический интерфейс и через асинхронный порт UART (TTL/RS232/RS485).

Процесс разработки в среде DGUS сводится к созданию проекта на компьютере без написания кода, затем генерируются конфигурационные файлы, готовые для загрузки в HMI модуль.

роцесс разработки в среде DGUS сводится к созданию проекта на компьютере без написания кода, затем генерируются конфигурационные файлы

Принцип разработки проекта состоит в работе с множеством картинок. DGUS может брать части разных изображений и отображать итог на экране.
В программе предусмотрены 2 основных типа изображений:

  • Иконки - нужны для создания анимации, переключателей, кнопок и пр.
  • Фоновые изображения - являются страницами проекта. Также можно брать части фона для создания различных эффектов: нажатия кнопок, анимации и пр.

Для того чтобы начать работу, необходимо скачать программу DGUS внизу статьи в разделе «Файлы для скачивания» или на сайте компании.

После того как архив скачен, его нужно разархивировать и записать программу.

После того как архив скачен, его нужно разархивировать и записать программу.

Если интерфейс программы на китайском языке, необходимо перейти в последнюю вкладу и в поле "Language" выбрать "English".

Если интерфейс программы на китайском языке, необходимо перейти в последнюю вкладу и в поле "Language" выбрать "English".

Основная страница программы DGUS.

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

Основная страница программы DGUS.

В нижней части есть утилиты:

  • Упаковщик изображений для создания сжатий изображений фонов и иконок, создаёт ICL-файл на выходе.
  • Упаковщик шрифтов для упаковки ASCII шрифтов.
  • Упаковщик аудио сжимает аудиофайлы в один WAE файл.
  • Редактор .CFG файла, его подробное описание вы сможете найти в статье.
  • Конвертер изображений изменяет изображения до нужного размера.
  • Загрузка по UART.

В нижней части есть утилиты

Создание проекта.

Необходимо запустить программу DGUS и нажать на значок «New», в появившемся окне выбрать разрешение экрана 800х480 px и папку, где будет храниться проект. У меня "D:\DWIN\My projects \Lesson-1".

Необходимо запустить программу DGUS и нажать на значок «New»

Разрешение вашего дисплея может отличаться, его нужно выбрать из списка. Также можно выбрать ориентацию расположения:

  • Для альбомного проекта нужно указать 800х480 px
  • Для портретного проекта нужно указать 480х800 px

Для портретного расположения нужно указать поворот отображения в настройках файла .CFG. О настройках дисплея с использованием глобальных данных расскажу в отдельной статье.

Для портретного расположения нужно указать поворот отображения в настройках файла .CFG. О настройках дисплея с использованием глобальных данных расскажу в отдельной статье.

Разрешение экрана можно в последствии отредактировать на вкладке «Settings».

Разрешение экрана можно в последствии отредактировать на вкладке «Settings».

Подготовка фоновых изображений.

Создать фоновые изображения можно с помощью любого графического редактора, к которому вы привыкли. Я делаю в бесплатной программе Inkscape. Про создание фонов и иконок для дисплея Nextion у меня есть урок, поэтому вы можете воспользоваться моим способом подготовки изображений. А для данного урока все графические элементы вы можете скачать внизу статьи в разделе «Файлы для скачивания».

Исходные графические элементы для данного урока в векторном варианте (для программы Inkscape) доступны для скачивания моим подписчикам на сайте boosty.

Упаковка изображений фонов в .ICL.

Формируем фоновый файл для дисплея. Для этого переходим на вкладку «Welcome» и нажимаем на «DWIN ICL Generator».

Упаковка изображений фонов в .ICL.

  • Открывается окно формирования ICL - файла.
  • Выбираем директорию, где сохранены изображения, в нашем случае \DWIN_SET.
  • Выставляем качество изображения на 100%.
  • Выбираем пункт «Применить ко всем».
  • Проверяем, чтобы на всех изображениях применились новые параметры.

Выбираем директорию, где сохранены изображения, в нашем случае \DWIN_SET.

Генерируем файл ICL в папку \DWIN_SET.

Генерируем файл ICL в папку \DWIN_SET.

Внимание! Файл фона должен начинаться с цифры 32 (это связанно с архитектурой памяти). Можно оставить 32.ICL.

Упаковка иконок в .ICL.

Точно также формируем файл иконок. Директория хранения изображений иконок будет \Icon. Генерируемый файл, сохраняем в папку \DWIN_SET, но присваиваем имя 46.ICL.

Точно также формируем файл иконок. Директория хранения изображений иконок будет \Icon. Генерируемый файл, сохраняем в папку \DWIN_SET,

Создание шрифтов.

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

Для формирования шрифта необходимо на вкладке «Welcome» в поле «DGUS config tool» нажать «0# word bank generating».

Создание шрифтов.

Откроется окно генерации шрифта. Нажатием на кнопку «Font» выбираем подходящий шрифт и выставляем параметры так, чтобы все буквы не были срезаны, отследить это можно в левой половине окна.

Откроется окно генерации шрифта. Нажатием на кнопку «Font» выбираем подходящий шрифт

Далее нажатием на кнопку «Create 0_DWIN_ASC.HZK» формируем файл шрифта. Файл генерируется в корневой папке программы DGUS, его необходимо перенести в папку «Lesson-1\DWIN_SET».

Далее нажатием на кнопку «Create 0_DWIN_ASC.HZK» формируем файл шрифта. Файл генерируется в корневой папке программы DGUS

На этом можно заканчивать урок, но напоследок давайте сохраним проект. Для этого нужно на вкладке «File» нажать на кнопку «Save».

На этом можно заканчивать урок, но напоследок давайте сохраним проект. Для этого нужно на вкладке «File» нажать на кнопку «Save».

И для создания дополнительных конфигурационных файлов нужно нажать на кнопку «Generate». В папке проекта «DWIN_SET» появятся бинарные файлы: 13TouchFile.bin, 14ShowFile.bin, 22_Config.bin.

И для создания дополнительных конфигурационных файлов нужно нажать на кнопку «Generate».

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


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress. Воспользуйтесь промокодом ARDUINOTEX или ARDUINOTEX1 и получите хорошую скидку. А также гарантированную техническую поддержку.

Понравился урок Знакомство со средой разработки DGUS - DWIN. Подготовка изображений? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32. http://arduino-tex.ru/news/114/upravlenie-rele-s-pomoshchyu-sensornogo-displeya-dwin-i-arduino.html Константин Portal-PK 2022-05-19T10:25:29+03:00 Это уже не первый проект про управление реле с помощью сенсорного дисплея. Ранее я рассказывал про управление 16 реле с помощью дисплея Nextion. Сегодня рассмотрим управление реле с помощью более дешёвого, но не менее функционального дисплея компании DWIN. Сделаю два варианта прошивки: первый для Arduino UNO (NANO) и второй для ESP32 (Arduino MEGA). Зачем и почему 2 варианта кода сейчас расскажу.



Подготовка дисплея DWIN для прошивки.

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

Подготовка дисплея DWIN для прошивки.

Если перемычка замкнута/спаяна - режим TTL/UART. Если перемычка разъединена - режим RS232.С завода дисплеи идут без перемычки, поэтому её нужно замкнуть, можно просто спаять или припаять smd резистор номиналом 0 Ом.

Затем нужно подготовить карту памяти. Про этот этап у меня есть отдельная статья, в которой всё подробно расписано.

После этого можно приступить к прошивке дисплея.

Прошивка дисплея компании DWIN.

Для загрузки примера нужна прошивка, которую можно скачать внизу статьи в разделе «Файлы для скачивания». Пример сделал для дисплеев разрешением 800x480 px. Соответственно, он подойдёт для дисплеев 5 и 7 дюймов с данным разрешением экрана, но не ко всем. Смотрите разрешение своего дисплея в даташите к нему. Если разрешение дисплея больше, чем 800x480 px, то по краям вы увидите чёрные полосы.

В архиве проекта нужно скопировать папку DWIN_SET на карту памяти. Файлы должны располагаться на карте по пути: «/DWIN_SET/».

Вставляем SD карту в HMI модуль. Подайте питание.

Вставляем SD карту в HMI модуль. Подайте питание.

Вставляем SD карту в HMI модуль. Подайте питание.

Вы увидите синий экран с надписями. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Вы увидите синий экран с надписями. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Если загрузка прошла успешно, вы увидите следующую информацию. Если что-то пошло не так, то информация на дисплее будет следующая.

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

Прошивка для дисплея DWIN.

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

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

Подробнее о подготовке к работе дисплея рассказывать не буду, так как по данному проекту сделаю уроки программирования дисплея DWIN. Расскажу только основные моменты, которые помогут расширить или уменьшить количество управляемых реле. Максимальное количество реле, которыми можно управлять - 16.

Для создания элемента управления одним реле буду использовать инструмент «Bit icon».

Для создания элемента управления одним реле буду использовать инструмент «Bit icon».

Его нужно настроить следующим образом.

 Его нужно настроить следующим образом.

Установить бит для управления и выбирать иконки для двух состояний. Для остальных элементов управления делаем по аналогии и увеличиваем только бит управления.

Для остальных элементов управления делаем по аналогии и увеличиваем только бит управления.

Поверх иконки устанавливаем элемент обработки нажатия на тачскрин «Incremental Adjustment».

Поверх иконки устанавливаем элемент обработки нажатия на тачскрин «Incremental Adjustment».

Производим следующие настройки. Необходимо обратить внимание на параметр «Bit».

 Производим следующие настройки. Необходимо обратить внимание на параметр «Bit»

Его нужно изменить таким образом, чтобы он соответствовал биту, который выставили в элементе «Bit icon». Для первого элемента это 0, для второго 1 и т.д.

Его нужно изменить таким образом, чтобы он соответствовал биту, который выставили в элементе «Bit icon».

Вот так будут выглядеть элементы управления реле в редакторе «DWIN DGUS».

Вот так будут выглядеть элементы управления реле в редакторе «DWIN DGUS».

Для кнопок включения и выключения всех реле буду использовать инструмент «Return Key code».

Для кнопок включения и выключения всех реле буду использовать инструмент «Return Key code».

Тут нужно обратить внимание на следующие параметры.

Тут нужно обратить внимание на следующие параметры.

Основной параметр — это обнуление и заполнение всех бит. Соответственно, для выключения или включения всех реле.

Основной параметр — это обнуление и заполнение всех бит. Соответственно, для выключения или включения всех реле.

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

Схема подключения Arduino модуля 8 реле и дисплея DWIN.

Схема подключения Arduino модуля 8 реле и дисплея DWIN.

Подключим к Arduino модуль 8 реле и дисплей DWIN. Реле можно подключить и к другим пинам, этот параметр настраивается в прошивке.

Схема подключения ESP32 модуля 8 реле и дисплея DWIN.

Схема подключения ESP32 модуля 8 реле и дисплея DWIN.

В данном случае подключаем ко второму UART микроконтроллера, что позволяет достаточно комфортно производить отладку. Программный UART, к сожалению, у меня не заработал. Возможно, я что-то упустил. Если у вас есть решение, пишите в комментарии.

По аналогии ко второму UART подключение осуществляется у Arduino MEGA.

Код Arduino UNO (NANO) для управления 8 – 16 реле с сенсорного дисплея DWIN.

Код Arduino UNO (NANO) для управления 8 – 16 реле с сенсорного дисплея DWIN.

В коде можно поменять всего несколько параметров или оставить без изменений.

  • DEBAG - Отвечает за вывод в монитор порта отладочной информации. 1 - вкл.0 - выкл.
  • Level – отвечает за тип подключённого реле. 1 - реле высокого уровня, 0 - реле низкого уровня.
  • relays_num – Количество подключённых реле. Максимум 16.
  • relays[relays_num] – массив пинов, к которым подклеены реле.

Если вам нужно увеличить количество подключённых реле, для этого необходимо поменять переменную relays_num и дописать пины дополнительно подключённых реле в массиве relays[relays_num]. Так же для дисплея нужно будет добавить кнопки управления, увеличив бит последующих кнопок.

Скачать код можно внизу статьи в разделе «файлы для скачивания».

Код Arduino MEGA и ESP32 для управления 8 – 16 реле с сенсорного дисплея DWIN.

Данный код практически ничем не отличается кроме того, что для подключения дисплея используется Serial2, а для отладки Serial.

Код Arduino MEGA и ESP32 для управления 8 – 16 реле с сенсорного дисплея DWIN.

Коды для ESP32 и Arduino MEGA имеют небольшие отличия, поэтому к статье я прикреплю для каждой платы свои файлы.

Подведём итог.

Постарался сделать максимально универсальный код, чтобы его можно было использовать с разными платами: Arduino UNO, NANO, MAGA, ESP32, ESP8266. Кроме этого, реализовал поддержку реле разного типа: высокоуровневого и низкоуровневого реле.

Постарался сделать максимально универсальный код, чтобы его можно было использовать с разными платами: Arduino UNO, NANO, MAGA, ESP32, ESP8266.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Управление реле с помощью сенсорного дисплея DWIN и Arduino, ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Ёмкостный или резистивный сенсор? Преимущества и недостатки. http://arduino-tex.ru/news/113/emkostnyi-ili-rezistivnyi-sensor-preimushchestva-i.html Константин Portal-PK 2022-05-18T16:31:38+03:00 В данной статье рассмотрим преимущества и недостатки ёмкостных или резистивных типов сенсоров на примере дисплеев компании DWIN.

Купить в розницу недорогие дисплеи компании DWIN можно в официальном магазине на AliExpress. Не забывайте про купон ARDUINOTEX, который позволит получить дополнительную скидку на товары компании Beijing DWIN Technology.

В данной статье рассмотрим преимущества и недостатки ёмкостных или резистивных типов сенсоров на примере дисплеев компании DWIN.

Преимущества и недостатки резистивных сенсоров (тачскринов).

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

Преимущества и недостатки резистивных сенсоров (тачскринов).

На фото изображён 7-дюймовый дисплей DMG80480C070_03WTR. Как видим, характерной визуальной особенностью резистивных сенсоров является характерная серая (металлическая) рамка.

Характерные особенности.

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

Первые сенсорные телефоны комплектовались резистивными сенсорами.

Преимущества резистивного сенсора:

  • Реагирует на нажатия как пальцами, специальными перчатками, так и предметами (карандашом, ручкой и т.д.).
  • Простой и надёжный конструктив, меньшая вероятность поломки при ударе экрана.
  • Имеет повышенную устойчивость к высокочастотным электромагнитным импульсам.
  • Не реагирует на капли воды.

Недостатки:

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

Преимущества и недостатки ёмкостных сенсоров (тачскринов).

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

Преимущества и недостатки ёмкостных сенсоров (тачскринов).

На фото представлен 7-дюймовый дисплей DMG80480C070_03WTC. Как видно, характерной визуальной особенностью, в отличии от металлической рамки резистивного сенсора, является чёрная рамка.

Характерные особенности.

Характерные особенности.

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

Преимущества ёмкостных тачскринов

Преимущества ёмкостных тачскринов:

  • Реагирует только на касания пальцем или специальными перчатками, стилусами.
  • Позволяет установить защитное стекло толщиной более 5 мм.
  • Высокая скорость реакции.
  • Имеет высокую светопроницаемость. Цвета сохраняют свою насыщенность.

Недостатки ёмкостных сенсоров:

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

Как определить какой сенсор стоит на дисплее компании DWIN?

Как определить какой сенсор стоит на дисплее компании DWIN?

Давайте рассмотрим пример маркировки 7-дюймового дисплея компании DWIN:

  • DMG80480C070_03WTR
  • DMG80480C070_03WN
  • DMG80480C070_03WTC

Последние буквы в маркировке означают тип сенсора:

  • N - без сенсорной панели
  • T - сенсорная панель есть
  • TR - резистивная сенсорная панель
  • TC – ёмкостная сенсорная панель

Исходя из маркировки, первый дисплей DMG80480C070_03WTR с резистивным сенсором. Третий DMG80480C070_03WTC оснащён ёмкостным тачскрином, а второй DMG80480C070_03WN не имеет сенсора, его можно использовать только для вывода информации.


Вывод.

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


И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Ёмкостный или резистивный сенсор. Преимущества и недостатки? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Выбор и подготовка SD карты для HMI дисплеев DWIN, Nextion. http://arduino-tex.ru/news/112/vybor-i-podgotovka-sd-karty-dlya-hmi-displeev-dwin-nextion.html Константин Portal-PK 2022-05-17T16:48:50+03:00 Загрузить прошивку в HMI дисплей можно через UART или с SD карты. Первый способ рассмотрим в следующий раз, а сегодня подробно остановимся на том, как выбрать SD карту памяти, как её подготовить и загрузить код в HMI дисплей компании DWIN.

Купить в розницу недорогие дисплеи компании DWIN можно в официальном магазине на AliExpress. Не забывайте про купон ARDUINOTEX, который позволит получить дополнительную скидку на товары компании Beijing DWIN Technology.


Выбор SD карты для HMI дисплеев DWIN, Nextion.

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

Большинство модулей имеют разъём для micro-SD карт, однако, бывают модули и со стандартным SD.

Большинство модулей имеют разъём для micro-SD карт, однако, бывают модули и со стандартным SD.

Если вы заказали карту у DWIN, то они присылают карты от KIOXIA — компания была выделена из конгломерата Toshiba.

KIOXIA — это ребренд PHILIPS.

Многие рекомендуют к использованию SD карты известных производителей: SanDisk, Kingston, Transcend, KIOXIA/PHILIPS, но я пользуюсь Smartbuy и Mirex, и проблем у меня не возникало.

Поддерживаются SD карты размером от 1 ГБ до 16 ГБ.

Поддерживаются SD карты размером от 1 ГБ до 16 ГБ. Если вы будете использовать карту памяти больше 16 ГБ, например, 32 ГБ, то прошивку загрузить не получится.

Правильно отформатировать SD карту.

Чтобы HMI дисплей увидел карту, она должна быть правильно отформатирована. Для этого нужно перейти в раздел «Мой компьютер». Правой кнопкой мыши нажать на «SD карту» → выбрать пункт «Форматировать...».

Правильно отформатировать SD карту.

Затем выбрать параметры файловой системы FAT32 и размер блока 4096, после чего нажать кнопку "Начать".

Затем выбрать параметры файловой системы FAT32 и размер блока 4096, после чего нажать кнопку "Начать".

После форматирования можно приступить к загрузке прошивки на дисплей.

Правильный формат это:

  • Файловая система: FAT32
  • Размер кластера: 4096 байт

Загрузка прошивки на HMI дисплей на примере дисплея компании DWIN.

HMI модуль по умолчанию читает данные по следующему пути: «SD карта/DWIN_SET».

Загрузка прошивки на HMI дисплей на примере дисплея компании DWIN.

Причём имя папки можно изменить через конфигурационный(.cfg) файл. Про данные настройки поговорим в следующий раз.

Для загрузки примера нужен «демо пример», который можно скачать внизу статьи в разделе «Файлы для скачивания». Пример сделал для дисплеев разрешением 800x480 px. Соответственно, он подойдёт для дисплеев 5 и 7 дюймов с данным разрешением экрана, но не ко всем. Смотрите разрешение своего дисплея в даташите к нему. Если разрешение дисплея больше, чем 800x480 px, то по краям вы увидите чёрные полосы.

В архиве демо проекта нужно скопировать папку DWIN_SET на карту памяти. Файлы должны располагаться на карте по пути: «/DWIN_SET/».

В архиве демо проекта нужно скопировать папку DWIN_SET на карту памяти. Файлы должны располагаться на карте по пути: «/DWIN_SET/».

Вставляем SD карту в HMI модуль.

Вставляем SD карту в HMI модуль.

Подайте питание.

Вы увидите синий экран надписи. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Вы увидите синий экран надписи. Необходимо дождаться пока не появится строчка с надписью «SD Card Process... END!».

Если загрузка прошла успешно, вы увидите следующую информацию.

Если что-то пошло не так, то информация на дисплее будет следующая.

Если что-то пошло не так, то информация на дисплее будет следующая.

Так как файлы на флешке в соответствующей папке, значит, проблема в SD карте. Нужно вернуться к пункту выбора карты памяти и, возможно, форматировать SD карту повторно. Затем снова загрузить файлы и повторить прошивку.

После успешной загрузки.

По завершению загрузки прошивки необходимо извлечь SD карту и перезагрузить дисплей.

Вы увидите демо проект. Он сделан для экранов размером 800x480 px, поэтому при большем размере экрана вокруг будут чёрные рамки. Сейчас можно понажимать на кнопки на дисплее и проверить, что всё работает.

После успешной загрузки.

После того как убедились в работоспособности дисплея, можно переходить к разработке собственного ПО. Для этого используется программное обеспечение DGUS (DWIN Graphic Utilized Software), о котором подробнее будет рассказано в следующих статьях.

И полезная информация для тех, кто дочитал до конца статьи. У вас есть уникальная возможность заказать тестовый образец дисплея компании DWIN Technology. Подробнее тут.


Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравилась статья Выбор и подготовка SD карты для HMI дисплеев DWIN, Nextion? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Управление 16 реле с компьютера http://arduino-tex.ru/news/111/upravlenie-16-rele-s-kompyutera.html Константин Portal-PK 2022-05-04T12:44:05+03:00 Управление нагрузкой - тема интересная и имеет широкое применение. Сегодня рассмотрим 2 варианта управления модулем 16 реле:

  • С помощью Arduino и матричной клавиатуры.
  • С компьютера. Для этого напишем программу на Python.


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

В предыдущей статье я рассматривал управление 16 реле с сенсорного дисплея Nextion.

Что понадобится для проекта управления 16 реле.

Чтобы управлять модулем 16 реле с компьютера, достаточно модуля RoboIntellect controller 001. Купить RoboIntellect controller 001 можно на OZON. Про данный модуль на канале у меня есть отдельное видео.


Рекомендую посмотреть его, после чего приступать к данному проекту.

Также планирую сделать управление 16 реле с использованием Arduino и матричной клавиатуры. Про матричную клавиатуру у меня есть отдельный урок, ознакомиться с которым можно тут.

Также планирую сделать управление 16 реле с использованием Arduino и матричной клавиатуры.

Подключить 16 реле и матричную клавиатуру в Arduino UNO или Arduino NANO не получится, недостаточно пинов для подключения. Нам нужно 16 для реле и 8 для подключения матричной клавиатуры и того 24 пина. Можно использовать Arduino MEGA. Но если нет данной платы под рукой, воспользуемся модулем RoboIntellect controller 001, который можно получить через 7-8 дней после заказа.

Подключить 16 реле и матричную клавиатуру в Arduino UNO или Arduino NANO не получится

С набором электроники определились. Можно приступить к сборке и программированию.

Подключение RoboIntellect controller 001, матричной клавиатуры 4х4 к Arduino.

Давайте подключим RoboIntellect controller 001, матричную клавиатуру 4х4 к Arduino и проверим, чтобы всё работало как нужно. А благодаря светодиодам по каждому каналу управления на плате RoboIntellect controller позволит визуально определить, что всё сделано правильно.

Подключение RoboIntellect controller 001, матричной клавиатуры 4х4 к Arduino.

Схема подключения RoboIntellect controller 001, матричной клавиатуры 4х4 к Arduino.

Схема подключения RoboIntellect controller 001, матричной клавиатуры 4х4 к Arduino.

Данная схема подключения позволяет управлять 16 реле с использованием матричной клавиатуры с 16 кнопками. Это даёт возможность назначить для каждой реле свою кнопку для управления.

Управление 16 реле с помощью Arduino и матричной клавиатуры.

В связи с тем, что реле низкоуровневые, для включения нужно подать сигнал низкого уровня GND. Поэтому светодиоды на модуле RoboIntellect выключаются для того, чтобы включалось реле на плате. Эту особенность нужно учесть при программировании, однако на электрическую схему это никак не повлияет.

Управление 16 реле с помощью Arduino и матричной клавиатуры.

Схема подключения модуля 16 реле.

Схема подключения модуля 16 реле.

Программа Arduino управления 16 реле с помощью матричной клавиатуры.

Первым делом нужно установить необходимые библиотеки. Скачать их можно внизу статьи в разделе «Файлы для скачивания»Программа Arduino управления 16 реле с помощью матричной клавиатуры. Если у вас модуль клавиатуры такой же, как у меня, то менять в коде ничего не нужно. Но я всё же вкратце рассмотрю основные моменты в коде.

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

Для работы с матричной клавиатурой нужно установить количество рядов и строк клавиатуры

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

В функцию releOn(1) отправляем номер реле, состояние которого нужно изменить.

В функцию releOn(1) отправляем номер реле, состояние которого нужно изменить.

Сейчас можно приступить к управлению реле. При нажатии на клавишу матричной клавиатуры включается или выключается соответствующее реле.

Сейчас можно приступить к управлению реле.

При желании данный пример можно расширить, подключив светодиоды для индикации состояния реле или подключить OLED - дисплей и выводить состояния реле на него. Вариантов доработки и применения данного проекта очень большое.

Управление 16 реле с компьютера.

Управлять реле с компьютера без микроконтроллера нам поможет RoboIntellect controller 001, на борту которого распаян адаптер USB to I2C.

 RoboIntellect controller 001, на борту которого распаян адаптер USB to I2C.

Для того чтобы приступить к управлению платой с ПК, нужно установить SDK разработчика, которую можно скачать с сайта.

Для того чтобы приступить к управлению платой с ПК, нужно установить SDK разработчика, которую можно скачать с сайта.

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

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


Затем скачайте пример кода на Python внизу статьи.

Для того чтобы воспользоваться программой, её необходимо извлечь из архива. Откройте папку с программой и запустите в ней командную строку. Для запуска скрипта на Python пишем следующую команду: python setBit.py

Python пишем следующую команду: python setBit.py

Далее необходимо ввести модель i2c адаптера (ch341/cp2112). В моём случае это «ch341».

Далее необходимо ввести модель i2c адаптера (ch341/cp2112). В моём случае это «ch341».

Программа произведёт инициализацию устройства.

Программа произведёт инициализацию устройства.

После нужно ввести команду (on – для включения реле, off – для выключения) и номер порта (1 - 16), к которому подключено реле.Но так как у меня модуль низкоуровневого реле, включение и выключение происходит в обратном порядке.

После нужно ввести команду (on – для включения реле, off – для выключения) и номер порта (1 - 16)

Нажатием клавиши Enter запускаем выполнение команды. Команды успешно выполняются.

Для выхода из программы введите Q и нажмите Enter. Также выйти из программ можно с помощью сочетания клавиш Ctrl + C.

Для выхода из программы введите Q и нажмите Enter. Также выйти из программ можно с помощью сочетания клавиш Ctrl + C.

Исходный пример на Python можно дополнить, например, сделать графический интерфейс управления реле.

Исходный пример на Python можно дополнить, например, сделать графический интерфейс управления реле. Область применения ограничиваться только вашей фантазией. Удачных экспериментов!

Вывод.

Исходя из данного проекта, можно сделать следующий вывод: реализовать управление реле не так и сложно. Но если нам нужно сделать управление большим количеством реле, в этом отлично поможет RoboIntellect controller 001. Его плюсом является тот фактор, что данный модуль можно использовать как в Arduino проекте, так и самостоятельно для управления с реле или другими устройствами с компьютера.

Понравился проект Управление 16 реле с компьютера? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Управляем 16 реле с дисплея Nextion. http://arduino-tex.ru/news/110/upravlyaem-16-rele-s-displeya-nextion.html Константин Portal-PK 2022-05-04T07:52:46+03:00 Сегодня речь пойдёт о том, как с помощью дисплея можно управлять модулем 16 реле. Расскажу, как выполнять операции включения и выключения, программно задавая различные функции работы с кнопками на дисплее Nextion: кнопки с фиксацией, кнопки без фиксации.


Рассмотрим подробнее проект «Управляем 16 реле с дисплея Nextion».

Недавно сделал проект, в котором нужно управлять модулем 16 реле с помощью сенсорного дисплея Nextion.

модулем 16 реле с помощью сенсорного дисплея Nextion

По заданию нужно организовать различные алгоритмы работы:

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

Кроме основного экрана управления, предусмотрен второй экран, на котором первые 2 кнопки продублированы с первого.

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

Электроника проекта «Управляем 16 реле с дисплея Nextion».

Электроника проекта «Управляем 16 реле с дисплея Nextion».

Для стабильной работы к ESP32 не желательно подключать 16 реле, поэтому я решил использовать плату расширения портов ввода-вывода MCP23017. Это позволило подать на неё 5 В и управлять реле по линии 5 В, что в свою очередь, позволило использовать всего 4 пина на ESP32, чтобы подключить дисплей и плату MCP23017. На плате ESP32 остаётся большое количество незанятых GPIO, а это позволит подключить дополнительные устройства к плате. Также возможно использовать беспроводное управление реле по средствам Bluetooth или Wi-Fi. Например, с помощью приложения на телефоне или с помощью M5 Stack core 2, как я делал в своём предыдущем проекте.

Схема подключения ESP32 MCP23017 и дисплея Nextion.

Схема подключения ESP32 MCP23017 и дисплея Nextion.

Подключается ESP32 MCP23017 и дисплей Nextion вот по такой схеме.

Подключается ESP32 MCP23017 и дисплей Nextion вот по такой схеме.

Вывод.

Это не первый проект, в котором я использую плату MCP23017. Она очень хорошо зарекомендовала себя ранее в проектах с использованием микроконтроллеров ESP8266 и ESP32. Что мне нравится, так это то, что время срабатывания очень быстрое. Сделал проект с 3 платами MCP23017 для создания световых эффектов, всё работает очень качественно и быстро. Возможно, будет время, расскажу и про этот проект.

Сделал проект с 3 платами MCP23017 для создания световых эффектов

Понравился проект Управляем 16 реле с дисплея Nextion? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Программатор чипов Mimaki серий UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160. http://arduino-tex.ru/news/109/programmator-chipov-mimaki-serii-ujf-3042-ujf-6042-jfx-1615-jfx-1631.html Константин Portal-PK 2022-04-20T11:44:21+03:00 Новая версия Программатора чипов Mimaki тут.

Купить программатор VK

Купить программатор Avito

На сайте уже есть статья, посвящённая программатору чипов Mimaki. Сегодня, продолжая эту тему, расскажу о том, какие доработки я сделал с данным программатором, а также о том, как сделал корпус для него. Я не разрабатывал специально новый корпус, а взял его от старого проекта «Часы-плеер на дисплее Nextion». Но, несмотря на это, программатор в данном корпусе выглядит отлично и, кажется, что корпус разработан именно для данного проекта.


Программатор чипов Mimaki серий UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160.

Данный программатор (на текущий момент времени) поддерживает принтеры Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160. Обязательно нужно обратить внимание на микросхему. Поддерживаются чипы с микросхемой серии DS2430 или DS2430а. С микросхемой DS2431 не поддерживается!!!

Данный программатор (на текущий момент времени) поддерживает принтеры Mimaki серий: UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160.

Возможности программатора:

  • Чтение данных с чипа и вывод на дисплей;
  • Сброс года;
  • Сброс объёма чернил;
  • Смена типа краски картриджа;
  • Обновление HEX суммы;
  • Защита паролем;
  • Интерфейс на русском языке;
  • Зажимы в виде крабов позволяют легко подключить чип для прошивки.

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

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

Как пользоваться зажимами для чипов?

Чтобы запрограммировать, достаточно чип подключить зажимами в виде коробов. Кстати, крабы я немного доработал, подточив зубья у основания зажима, поэтому чип фиксируется надёжно и острые зубья на краю зажима обеспечивают жёсткую фиксацию.

Чёрный краб нужно подключать к длинной контактной пластине, а красный краб к короткой. После этого можно приступать к программированию чипа Mimaki.

Чёрный краб нужно подключать к длинной контактной пластине, а красный краб к короткой. После этого можно приступать к программированию чипа Mimaki.

Заказать программатор чипов Mimaki.

Вы можете заказать у меня программатор чипов Mimaki, но обратите внимание на то, что данный программатор подходит для Mimaki серий UJF-3042, UJF-6042, JFX-1615, JFX-1631, JFX200-2513, JFX500-2131, UJV500-160, UJV-160.

Также нужно обратить внимание на микросхему на чипе. Программатор поддерживает чипы с микросхемой DS2430 или DS2430а. С микросхемой DS2431 не поддерживается!!!

Заказать программатор чипов Mimaki.

Новая версия Программатора чипов Mimaki тут.

Купить программатор VK

Купить программатор Avito


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

Понравился проект Программатор чипов Mimaki серий UJF-3042, UJF-6042, JFX-1615, UJV500-160, UJV-160? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Автономный программатор чипов картриджей Mimaki на Arduino. http://arduino-tex.ru/news/108/avtonomnyi-programmator-chipov-kartridzhei-mimaki-na-arduino.html Константин Portal-PK 2022-04-20T11:30:28+03:00

Новая версия Программатора чипов Mimaki тут.

Купить программатор VK

Купить программатор Avito


Автономный программатор чипов картриджей Mimaki разработан самостоятельно на базе микроконтроллера Arduino NANO и дисплее Nextion. Данный программатор подойдёт для чипов от принтеров Mimaki UJF-3042 и Mimaki UJF-6042.


Программатор чипов картриджей Mimaki UJF-3042 и Mimaki UJF-6042 на Arduino.

Программатор чипов картриджей Mimaki UJF-3042 и Mimaki UJF-6042 на Arduino выглядит следующим образом.

Программатор чипов картриджей Mimaki UJF-3042 и Mimaki UJF-6042 на Arduino

На фото представлена электроника программатора без корпуса. В планах реализовать программатор в более эстетичном виде.

Чипы картриджей принтера Mimaki.

Если вы не сталкивались с данным принтером, вам, наверное, интересно узнать, как выглядят чипы для данного принтера и в чём их различия.

Чипы картриджей принтера Mimaki.

Как видим, чипы картриджей Mimaki выглядят одинаково, но у них есть одно отличие — это микросхема, на основе которой сделана плата. Существуют чипы с микросхемой: DS2430, DS2430а и DS2431. Внешне данные чипы не имеют различий, но программно различия значительные. Данный программатор может работать с чипами на базе DS2430 и DS2430а.

 Существуют чипы с микросхемой: DS2430, DS2430а и DS2431.

Возможности программатора:

  • Чтение данных с чипа и вывод на дисплей;
  • Сброс года;
  • Сброс объёма чернил;
  • Смена типа краски картриджа;
  • Обновление HEX суммы.

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

 сделать копию данного программатора

Также вы можете заказать разработку проектов на Arduino, ESP8266, ESP32, Nextion, Android и программное обеспечение для компьютера.


Новая версия Программатора чипов Mimaki тут.

Купить программатор VK

Купить программатор Avito


Понравился проект Автономный программатор чипов картриджей Mimaki на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 5. Управление двигателем постоянного тока ESP32 и MicroPython. http://arduino-tex.ru/news/107/urok-5-upravlenie-dvigatelem-postoyannogo-toka-esp32-i.html Константин Portal-PK 2022-02-15T13:15:32+03:00 Приветствую вас на очередном уроке по программированию ESP32 на MicroPython. Сегодня мы разберём код, который можно применить на практике. Будем вращать двигатель постоянного тока в одну сторону до срабатывания кнопки. После чего включим реверс вращения двигателя и вращать он будет до тех пор, пока не сработает вторая копка. Вместо кнопок можно использовать конечные выключатели и данный пример использовать для цикличного выполнения перемещения.


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

Приветствую вас на очередном уроке по программированию ESP32 на MicroPython.

Для начала давайте немного уменьшим код, а именно избавимся от постоянного написания «machine» в коде.

Для начала давайте немного уменьшим код, а именно избавимся от постоянного написания «machine» в коде.

Для этого поменяем код подключения модуля с

import machine

на

from machine import Pin

То есть получим функцию Pin из модуля machine. И сейчас в коде будет достаточно написать «Pin» вместо «machine.Pin».

То есть получим функцию Pin из модуля machine.

Прерывания на микроконтроллере ESP32 с помощью языка MycroPython.

Для использования внешнего прерывания в MycroPython используется следующая функция.

button.irq(trigger=Pin.IRQ_FALLING, handler=my_button)

button.irq(trigger=Pin.IRQ_FALLING, handler=my_button) – настраивает обработчик прерываний, который будет вызван при появлении сигнала запуска. Если контакт работает в режиме Pin.IN, то источником сигнала запуска будет служить внешнее значение контакта. Если контакт работает в режиме Pin.OUT, то источником сигнала запуска будет служить выходной буфер контакта. Но если контакт будет работать в режиме Pin.OPEN_DRAIN, то источником сигнала запуска будет служить выходной буфер (для «0») и внешнее значение контакта (для «1»).

trigger – определяет условие, при котором должно срабатывать прерывание:

  • Pin.IRQ_FALLING – прерывание на заднем фронте.
  • Pin.IRQ_RISING – прерывание на переднем фронте.

handler – функция, которую необходимо вызвать при возникновении прерывания, в моём случае это функция my_button. Функция handler должна принимать лишь один аргумент, которым должен быть экземпляр класса Pin.

В качестве примера напишем код включения встроенного светодиода при нажатии на кнопку «boot» по аналогии с примером из прошлого урока, но уже с использованием прерывания.

Прерывания на микроконтроллере ESP32 с помощью языка MycroPython.

При вызове функции my_button меняем логическое стояние контакта, к которому подключен светодиод. Тем самым включаем и выключаем его.

При нажатии на кнопку, в консоли видим информацию о номере пина, к которому подключена кнопка.

При нажатии на кнопку, в консоли видим информацию о номере пина, к которому подключена кнопка.

Если поменять trigger=Pin.IRQ_RISING и проверить, то увидим, что информация появляется, когда мы отпускам кнопку. Вот в чём различие данных условий срабатывания прерывания.

Если поменять trigger=Pin.IRQ_RISING и проверить, то увидим, что информация появляется

Также можно использовать данные условия одновременно.

trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING

Также можно использовать данные условия одновременно.

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


Управление двигателем постоянного тока с помощью ESP32 и MycroPython.

Управление двигателем постоянного тока с помощью ESP32 и MycroPython.

Давайте применим на практике полученные значения. Для этого подключим к ESP32 драйвер L298n и двигатель. Я буду использовать мотор редуктор от машинки, которую собирал и программировал на MycroPython вот в этом проекте.

Схема подключения ESP32, драйвера L298n и двигателя постоянного тока.

Схема подключения ESP32, драйвера L298n и двигателя постоянного тока.

В коде определим контакты подключения кнопок. Чтобы не использовать подтягивающие резисторы, воспользуемся подтягивающими резисторами платы ESP32. Для этого инициализируем пины с использованием Pin.PULL_UP.

Для этого инициализируем пины с использованием Pin.PULL_UP.

Инициализируем два пина для работы с драйверами.

Инициализируем два пина для работы с драйверами.

Создадим две глобальные переменные:

  • press - будет хранить флаг стояния кнопки.
  • n_pin – номер контакта кнопки (pin).

Функция my_button будет поднимать флаг нажатия кнопки и сохранять в переменной n_pin номер пина нажатой кнопки. Для того чтобы получить номер пина в виде числа, нужно взять из строки символы после четвёртого и без последнего символа строки и преобразовать в целочисленное значение.

Функция my_button будет поднимать флаг нажатия кнопки и сохранять в переменной n_pin номер пина

Создадим прерывание для каждой кнопки с вызовом функции my_button.

Создадим прерывание для каждой кнопки с вызовом функции my_button.

В бесконечном цикле будем выполнять следующие действия.

В бесконечном цикле будем выполнять следующие действия.

Сперва мы проверяем переменную press. Если кнопка была нажата, тогда выводим в монитор номер контакта нажатой кнопки и отпускаем флаг press.

Сперва мы проверяем переменную press. Если кнопка была нажата, тогда выводим в монитор номер контакта нажатой кнопки и отпускаем флаг press.

Далее проверяем, какая кнопка была нажата. Если левая кнопка, то начинаем вращать двигатель вправо и выводим в монитор надпись о направлении вращения. Если сработала правая кнопка, то меняем направление вращения и выводим в монитор надпись «Влево».

Далее проверяем, какая кнопка была нажата. Если левая кнопка, то начинаем вращать двигатель вправо и выводим в монитор надпись о направлении вращения.

В противном случае ничего не делаем.

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

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

В следующем уроке начнём изучать работу с ШИМ.


Понравился Урок 5. Управление двигателем постоянного тока ESP32 и MicroPython? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Светодиодный ночник своими руками. http://arduino-tex.ru/news/106/svetodiodnyi-nochnik-svoimi-rukami.html Константин Portal-PK 2022-02-10T10:49:32+03:00 Сегодня я расскажу, как можно сделать светодиодный ночник своими руками из материалов, которые чаще всего выбрасывают. Полученное изделие можно запитать от небольшого пауэрбанка благодаря своему небольшому потреблению. Управлять ночником можно с телефона, установив приложение. Светильник имеет 18 световых эффектов, а также можно установить один из 16 статических цветов по вашему выбору.


Сборка светодиодного ночника своими руками.

Корпусом светильника будет прозрачная банка из-под соли для ванной. Также я буду использовать старый нерабочий USB провод от телефона. Мозгом будет ESP8266 в виде отладочной платы NodeMCU. А источником света послужит адресная светодиодная гирлянда в виде капель.

Сборка светодиодного ночника своими руками.

Отрезаем нерабочую часть USB провода.

Отрезаем нерабочую часть USB провода.

Снимаем изоляцию и отрезаем зелёный и жёлтые провода. Они нам не понадобятся.

Снимаем изоляцию и отрезаем зелёный и жёлтые провода. Они нам не понадобятся.

Для того чтобы убедиться в работоспособности кабеля, подключим красный и чёрный провода к мультиметру. Произведём измерение напряжения. На мультиметре видим напряжение 5,1 В. Провод целый, его можно использовать в проекте.

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

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

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

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

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

Продергиваем в отверстие крышки провод зачищенными краями во внутрь крышки. Необходимо сделать узел из провода, чтобы провод нельзя было продёрнуть обратно через отверстие.

Продергиваем в отверстие крышки провод зачищенными краями во внутрь крышки

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

 Затем припаиваем к NodeMCU гирлянду и USB Затем припаиваем к NodeMCU гирлянду и USB провод вот по такой схеме.

 Затем припаиваем к NodeMCU гирлянду и USB провод вот по такой схеме.


На двухсторонний скотч приклеиваем плату во внутрь крышки, предварительно вытянув провод до узла.

На двухсторонний скотч приклеиваем плату во внутрь крышки, предварительно вытянув провод до узла.

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

Укладываем светодиодную гирлянду в банку.

Чтобы прикрыть электронику, в крышку укладываем немного ваты.

Чтобы прикрыть электронику, в крышку укладываем немного ваты.

Закрываем крышку и ставим изделие на стол. Светильник готов.

Закрываем крышку и ставим изделие на стол. Светильник готов.

Прошивка для ESP8266.

В данном проекте можно использовать не только NodeMCU, но и другие отладочные платы на базе микроконтроллеров ESP8266 и ESP32.

Для того чтобы загрузить прошивку в ESP, нужно настроить среду разработки Arduino IDE. Для платы ESP8266 есть инструкция по настройке, которую можно посмотреть тут. Если у вас плата ESP32, то инструкция по добавлению данной платы в среду разработки тут.

Установить нужно всего одну дополнительную библиотеку FastLED.

Установить нужно всего одну дополнительную библиотеку FastLED.

ВНИМАНИЕ! Версия библиотеки должна быть не ниже версии FastLED 3.1. В противном случае при компиляции вы увидите предупреждение «warning "Requires FastLED 3.1 or later; check github for latest code.», а загрузка кода будет приостановлена.

Установить библиотеку можно через менеджер библиотек.

Установить библиотеку можно через менеджер библиотек. В таком случае у вас установится последняя версия и всё будет работать как надо. Если у вас уже установлена данная библиотека, то её нужно обновить. Для этого вам необходимо выбрать версию больше 3,1 из списка доступных версий и обновить.

как установить библиотеку с помощью менеджера библиотек

Если вы не знаете, как установить библиотеку с помощью менеджера библиотек, можете скачать библиотеку внизу статьи в разделе «файлы для скачивания» и установить её, переместив в папку с библиотеками, которая располагается тут: «Документы\Arduino\libraries».

В прошивке также нужно настроить подключение к вашей Wi-Fi сети, указав логин и паролВ прошивке также нужно настроить подключение к вашей Wi-Fi сети, указав логин и пароль.

Если вы не укажите логин и пароль, устройство автоматически поднимет точку доступа (свою сеть), к которой нужно будет подключиться с вашего телефона. Название сети "ATGarland", пароль по умолчанию "012345678". В таком случае в приложении нужно указывать IP «192.168.4.1» поднимет точку доступа (свою сеть)Если вы указали логин и пароль от вашей сети, то после подключения светильника появится в разделе сетевых устройств на вашем компьютере в категории «Другие устройства». Узнать IP-адрес вашего устройства можно двумя способами:

  • Два раза кликнуть по устройству с именем "ATGarland". Откроется страница в браузере, в которой будет написан адрес вашего устройства.

Узнать IP-адрес вашего устройства можно двумя способами

  • Нажать правой кнопкой мыши по устройству "ATGarland". Следом нажать на кнопку «Свойства» и откроется описание устройства, IP прописан в поле «Веб-страница». Указываем данный IP-адрес в приложении.Нажать правой кнопкой мыши по устройству ATGarland

Указываем данный IP-адрес в приложении.

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

настройка источника питания

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

Приложение для управления светодиодным ночником.

Приложение для управления светодиодным ночником.

Приложение сделано на основе приложения для управления ёлочной гирляндой, но с несколькими изменениями:

  • Сделал вывод статического цвета на всю ленту.
  • В приложении сделал возможность скрыть панель палитры цветов.
  • Расширил палитру статического цвета до 16.
В приложении сделал возможность скрыть панель палитры цветов.

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

https://skr.sh/sCReNDN19FY

Сейчас можно приступить к управлению ночником. В верхний блок отображается текущий режим, а с помощью кнопок можно переключать режимы.

В верхний блок отображается текущий режим, а с помощью кнопок можно переключать режимы.

Ниже располагается палитра цветов, которая по умолчанию в свёрнутом состоянии. При нажатии на переключатель открывается палитра цветов, при этом скрывается панель авторежима.

Ниже располагается палитра цветов, которая по умолчанию в свёрнутом состоянии. При нажатии на переключатель открывается палитра цветов, при этом скрывается панель авторежима.

Для того чтобы появилась панель управление с автоматическим переключением режимов, нужно свернуть палитру цветов.

Для того чтобы появилась панель управление с автоматическим переключением режимов, нужно свернуть палитру цветов.

Под панелью управления автоперелистыванием режимов располагается панель управления яркостью светильника. Яркость можно изменять с помощью слайдера или двух кнопок: «плюс» и «минус».

 Яркость можно изменять с помощью слайдера или двух кнопок: «плюс» и «минус».

Пример работы светодиодного ночника.

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

Пример работы светодиодного ночника.

Сейчас проверим работу статического цвета. Цвет меняется, осталось проверить изменения яркости.

Сейчас проверим работу статического цвета. Цвет меняется, осталось проверить изменения яркости.

Автолисталка будет переключать автоматически все режимы, кроме статического цвета. Время длительности режима до переключения настраивается в прошивке ESP8266.

Автолисталка будет переключать автоматически все режимы, кроме статического цвета.

Светильник получился очень красивый, но всей красоты камера не предаёт.

Светильник получился очень красивый, но всей красоты камера не предаёт.

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

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

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

Понравился проект Светодиодный ночник своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 4. Кнопка в MicroPython. Условия, циклы и функции. http://arduino-tex.ru/news/105/urok-4-knopka-v-micropython-usloviya-cikly-i-funkcii.html Константин Portal-PK 2022-02-03T10:24:23+03:00 В этом уроке научимся работать с кнопкой в MicroPython. Разберём 2 примера, позволяющих включать светодиод при нажатии на кнопку. Также в данном уроке рассмотрим основы создания функций, циклов и условий на практических примерах.


Цикл while в Python.

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

Цикл while в Python.

За основу возьмём пример из предыдущего урока. Добавим дополнительную глобальную переменную «counter» равную 0 и к циклу добавим условие «counter <5». В конце цикла добавим к переменной «counter» единицу, что позволит нам выполнить цикл 5 раз.

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

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

Функции в Python.

Давайте изменим предыдущий пример таким образом, чтобы количество включений светодиода и время свечения можно было задать из консоли или вызвать в любом месте программы. Для этого создадим функцию «blink_led», в которую передадим 2 значения. Первое значение - «num» - количество включений светодиода, второе - «delay» - время свечения светодиода. Остальной код в функции будет аналогичным предыдущему примеру.

Функции в Python.

Тут есть 2 отличия: переменная «counter» в данном примере локальная и используется только в цикле. В условии цикла используем переменную «num», а не целое число.

Запустим программу и выполним в консоли следующий код «blink_led(5, 0.3)»

Запустим программу и выполним в консоли следующий код «blink_led(5, 0.3)»: мигание светодиодом 5 раз с интервалом 0,3 сек между включением и выключением. По завершению работы программы увидим надпись «Светодиод включился 5 раз». Сейчас можно поэкспериментировать и задавать разные значения, чтобы разобраться, как работает функция.

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

Чтобы вызвать функцию в самой программе, достаточно выполнить данный код «blink_led(7, 0.5)», например, в конце данного примера.

Запустим программу и увидим, что светодиод мигает без ввода данных в консоль. Вот так устроены функции в MicroPython.

Запустим программу и увидим, что светодиод мигает без ввода данных в консоль. Вот так устроены функции в MicroPython.

Цикл for.

Чтобы сделать код из предыдущего примера меньше, давайте заменим цикл while на for.Этим мы избавимся от локальной переменной и счётчика.

Чтобы сделать код из предыдущего примера меньше, давайте заменим цикл while на for.Этим мы избавимся от локальной переменной и счётчика.

Для того чтобы выполнить мигание светодиодом строго определённое число раз, воспользуемся функцией range().

Для того чтобы выполнить мигание светодиодом строго определённое число раз, воспользуемся функцией range().

Функцию range() можно представлять, как функцию, что возвращает последовательность чисел, регулируемую количеством переданных в неё аргументов. Их может быть 1, 2 или 3:

range(stop);
range(start, stop);
range(start, stop, step);

Здесь start — это первый элемент последовательности (включительно), stop — последний (не включительно), а step — разность между следующим и предыдущим членами последовательности.

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

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

Включаем светодиод при нажатии кнопки.

В следующем примере рассмотрим, как можно включать встроенный светодиод на ESP32 при нажатии кнопки «boot» на плате.

Включаем светодиод при нажатии кнопки.

Так как кнопка «boot» подключена к GPIO 0, в коде инициализируем данный пин как вход. Считывается состояние контакта аналогичной функцией value(), которую мы использовали в предыдущем уроке для определения состояния светодиода. При нажатии кнопки на контакте получаем логический ноль. Это связано с подключением кнопки. В таком случае мы включаем светодиод, а иначе - выключаем.

При подключении внешнего светодиода и тактовой кнопки вот по такой схеме.

При подключении внешнего светодиода и тактовой кнопки вот по такой схеме.

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

Логика работы изменится. При нажатии на кнопку на контакте будет логическая единица.

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

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

В следующем уроке продолжим работать с тактовой кнопкой.

Понравился Урок 4. Кнопка в MicroPython. Условия, циклы и функции? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 3. Переменные и математические операции в MicroPython. http://arduino-tex.ru/news/104/urok-3-peremennye-i-matematicheskie-operacii-v-micropython.html Константин Portal-PK 2022-01-28T09:31:29+03:00 Сегодня в уроке рассмотрим переменные и математические операции в MicroPython. Научимся попеременно включать 2 светодиода, написав всего 14 строчек кода, и оптимизируем пример из прошлого урока «мигание светодиода» до нескольких строчек кода.


Переменные в MicroPython.

Переменные в MicroPython.

MicroPython основан на Python 3, поэтому типы данных и работа с переменными будет точно такой же, как и в Python. Переменная в Python – это имя, которое используется для обозначения ячейки памяти. Переменные также известны как идентификаторы и используются для хранения значений. Более подробно изучить переменные в Python вы можете самостоятельно. Данную информацию можно легко найти в интернете.

Переменные разделяются на два типа: локальные и глобальные.

Переменные разделяются на два типа: локальные и глобальные.

Глобальные переменные можно использовать в любом месте программы, а локальные можно использовать только в определённой функции, определённом условии или цикле, в зависимости от того, где они были объявлены.

Рассмотрим пример из прошлого урока и добавим глобальную переменную delay = 0.5

import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
delay = .5 # глобальная переменная
while True:
    delay = delay + 0.1
    led.value(1)
    time.sleep(delay)
    led.value(0)
    time.sleep(delay)
    srt = "delay = " # локальная переменная
    print(srt)
    print(delay)

Данную переменную можно использовать в любом месте программы. Например, в цикле, прибавляя к ней значение 0,1 и в дальнейшем использовать полученное значение как время задержки между включением и выключением светодиода. Для понимания, что получилось, значение выводим с помощью команды print(delay).

И создадим локальную строковую переменную

И создадим локальную строковую переменную srt = "delay = ", которую можно использовать только в цикле, где переменная была объявлена. Если попробовать получить значения данной переменой в другом месте, то получим ошибку. Также в консоль выводим значение переменной srt.

Запустим программу и получим в консоли следующую информацию.

Запустим программу и получим в консоли следующую информацию.

Типы данных в Python.

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

Типы данных в Python.

Особенностью Python является возможность в процессе выполнения программы присвоить переменной любое значение, не зависимо от того, какого типа она была объявлена. Давайте присвоим дробное число переменой, которая изначально была объявлена как целочисленное значение и выведем результат в консоль. Затем переприсвоим переменной строку и затем снова целочисленное значение. Все промежуточные значения выведем в консоль.

Особенностью Python является возможность в процессе выполнения программы присвоить переменной любое значение

Ещё одна важная операция, которая используется для объединения строк, называется Конкатенация.

Ещё одна важная операция, которая используется для объединения строк, называется Конкатенация.

Для того чтобы к строке добавить переменную, нужно использовать символ «+». Если нужно добавить к строке переменную другого типа, её необходимо перевести в строку. Для этого используется функция str(). Данную особенность нужно запомнить. В противном случае при запуске программы вы получите ошибку.

Проверим, что у нас получилось. Как видим, всё выводится.

Проверим, что у нас получилось. Как видим, всё выводится.

Математические операции в MicroPython.

Математических операций в Python много, поэтому рассмотрим только основные.

Математические операции в MicroPython.

Чтобы сложить, умножить, вычесть число используются операторы, как и в математике: +, -, *. Деление обозначается вот таким символов «/».

Математические операции можно выполнять как с переменными, так и с числами, как показано в примерах.

Математические операции можно выполнять как с переменными, так и с числами, как показано в примерах.

#Целочисленное деление (//)
print(15//2)

Целочисленное деление обозначается символом «//», и в ответ получаем целое число без учёта остатка от деления.

#Остаток от деления (%)
print(21 % 3)

Чтобы найти остаток от деления, используется оператор «%». Ответом будет остаток от делания числа. Если остатка нет, то ответ будет равен нулю.

#Возведение в степень (**)
a = 2
b = 10
print(a ** b)

И возведение в степень «**». Возведём 2 в 10 степень. Результат будет 1024.

В Python есть и другие математические операции, но их использовать будем редко.

В Python есть и другие математические операции, но их использовать будем редко.

Мигание светодиодом. Оптимизируем код.

Давайте оптимизируем код «мигание светодиодом», используя полученные знания в данном уроке.Создадим две глобальные переменные «x = True» – состояние светодиода и «delay = 0.5» - время задержки между включением и выключением светодиода.

Мигание светодиодом. Оптимизируем код.

В цикле инвертируем булеву переменную, то есть меняем значения с True на False и наоборот. Для этого используется оператор «not». Так как цикл бесконечный, данное значение будет постоянно меняться. Если переменная равна «True», то она поменяет своё значение на «False» и, если была «False», измениться на «True».

И, чтобы переменную «x» можно было использовать для включения светодиода, её нужно перевести в целочисленное значение.

И, чтобы переменную «x» можно было использовать для включения светодиода, её нужно перевести в целочисленное значение. В этом нам поможет функция int(x). В конце цикла выведем значения переменой «x», чтобы отследить работу программы.

При каждом выполнении цикла состояние светодиода меняется. И в консоли видим значение переменной «x» на данный момент.

При каждом выполнении цикла состояние светодиода меняется. И в консоли видим значение переменной «x» на данный момент.

Программу сделали немного меньше, но её можно сделать более компактной, написав всего 8 строчек кода.

 Программу сделали немного меньше, но её можно сделать более компактной, написав всего 8 строчек кода.

Домашнее задание: разобраться, как работает данный пример программы. Пишите ваши варианты в комментариях. В следующем уроке разберём ваши ответы.

Мигание двумя светодиодами на ESP32 и MicroPython.

Мигание двумя светодиодами на ESP32 и MicroPython.

Давайте подключим два внешних светодиода к ESP32 вот по такой схеме.

Давайте подключим два внешних светодиода к ESP32 вот по такой схеме.

Как видно из схемы, светодиоды подключены к 4 и 5 GPIO микроконтроллера.Возьмём предыдущий пример и на его основе реализуем задачу. Управлять будем двумя светодиодами красного и синего цвета, инициализируем pins для работы с ними.

Как видно из схемы, светодиоды подключены к 4 и 5 GPIO микроконтроллера.

Немного изменим основной цикл программы. Первым делом включим красный светодиод. Затем инвертируем переменную «x» и выключим синий светодиод. Подождём заданное количество времени. Это вся программа.

Немного изменим основной цикл программы. Первым делом включим красный светодиод. Затем инвертируем переменную «x» и выключим синий светодиод.

Почему же светодиоды включаются и выключаются поочерёдно? Всё просто, так как цикл выполняется бесконечное количество раз при повторном выполнении цикла «x = False», что приведёт к выключению красного светодиода. Затем мы инвертируем переменную «x» и тем самым включаем синий светодиод. Ждём заданное время и повторно выполняем цикл. Включаем красный, выключаем синий и так далее, бесконечное количество раз.

Таким образом получилась реализовать простую мигалку на MicroPython и ESP32.

Таким образом получилась реализовать простую мигалку на MicroPython и ESP32.

Таким образом получилась реализовать простую мигалку на MicroPython и ESP32.

Понравился Урок 3. Переменные и математические операции в MicroPython? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Wi-Fi машинка с пультом управления на M5Stack. http://arduino-tex.ru/news/103/wi-fi-mashinka-s-pultom-upravleniya-na-m5stack.html Константин Portal-PK 2022-01-26T09:18:03+03:00 Последнее время увлёкся программированием ESP32, ESP8266 на MicroPython, разрабатываю различные проекты. Кроме этого, делаю уроки по программированию ESP32, ESP8266 на MicroPython. И, чтобы закрепить свои знания на практике, решил сделать Wi-Fi машинку с пультом управления на базе M5Stack, конечно же, всё запрограммировав на MicroPython. И для тех, у кого нет M5Stack написал программу для ПК, которая позволяет управлять машинкой.


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

Что понадобится для сборки Wi-Fi машинки с пультом управления.

В проекте я буду использовать L293D Shield для платы NodeMCU. Но это у моего шилда не работает драйвер. Это распространённая проблема. По идее L293D Shield можно использовать в проекте без внешнего драйвера, но я буду использовать дополнительный драйвер L298n.

Что понадобится для сборки Wi-Fi машинки с пультом управления.

Что понадобится для проекта:

  • NodeMCU
  • драйвер L298n
  • Робо платфорам.
  • 2 бокса под аккумуляторы формата 16850
  • 2 аккумулятора 16850.

При сборке с рабочим L293D Shield понадобятся следующие материалы.

Если вам повезло, и драйвер на шилде работает как нужно, можно обойтись без внешнего драйвера. В таком случае вам понадобятся:

  • NodeMCU
  • L293D Shield
  • Робо платфорам.
  • 2 бокса под аккумуляторы формата 16850
  • 2 аккумулятора 16850.

Пульт для Wi-Fi машинки.

Пульт для Wi-Fi машинки.

Пульт реализовал на M5Stack Core2. Данное устройство сделано на микроконтроллере ESP32, имеет сенсорный дисплей и аккумулятор для автономной работы. Этот набор свойств пригодится при создании пульта для нашей машинки. Более подробное описание M5Stack Core2 читайте тут.

Запрограммировать пульт можно в среде UIFlow или на MicroPython. Внизу статьи вы можете скачать прошивку пульта управления для UIFlow и MicroPython.

Запрограммировать пульт можно в среде UIFlow или на MicroPython.

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

Программируем M5Stack Core2 в Visual Studio Code.

Для удобства программирования M5Stack Core2 на MicroPython я использую редактор Visual Studio Code. Для его настройки нужно установить расширение «vscode-m5stack-mpy».

Для удобства программирования M5Stack Core2 на MicroPython я использую редактор Visual Studio Code.

Внизу программы появится надпись «Add M5Stack», при нажатии на которую откроется выбор порта, к которому подключено устройство.

Внизу программы появится надпись «Add M5Stack», при нажатии на которую откроется выбор порта

Выбираем порт и нажимаем кнопку «Ок».

Выбираем порт и нажимаем кнопку «Ок».

В проводнике появится устройство со всеми доступными файлами на нём. Сейчас можно приступать к написанию программы.

В проводнике появится устройство со всеми доступными файлами на нём.

Дизайн можно сделать в UIFlow, скопировав полученный код. А остальной код написать на MicroPython в Visual Studio Code.

Дизайн можно сделать в UIFlow, скопировав полученный код. А остальной код написать на MicroPython в Visual Studio Code.

Сохраняем программу и проверяем, как всё работает. После этого можно приступить к сборке машинки.

Схема подключения Wi-Fi машинки на ESP8266.

Если вы планируете использовать внешний драйвер, например L298n, подключить электронику в таком случае нужно по схеме, приведённой ниже.

Схема подключения Wi-Fi машинки на ESP8266.

А при использовании L293D Shield схема подключения будет выглядеть вот таким образом.

А при использовании L293D Shield схема подключения будет выглядеть вот таким образом.

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

Так как программа будет написана на MicroPython, её можно установить и на ESP32, прописав правильно пины подключения. Схему отдельно рисовать не буду. Надеюсь, что смысл понятен и вы без проблем при необходимости всё подключите.

Программа для Wi-Fi машины на MicroPython.

Скачать код Wi-Fi машины на MicroPython можно внизу статьи в разделе «Файлы для скачивания».

Чтобы загрузить код на ESP8266, нужно установить прошивку для вашей платы. А также установить Thonny Python IDE. Подробнее как это сделать, можно узнать в уроке MicroPython Windows. Установка и настройка IDE.

Скачать код Wi-Fi машины на MicroPython

В коде нужно указать логин и пароль для подключения к вашей Wi-Fi сети. После чего загружаем код на ESP8266. Чтобы программа запускалась при следующей подаче питания на устройство, нужно сохранить её под именем «main.py». Почему именно так и как это устроено рассказываю в уроке № 2.

После загрузки кода, в терминале вы увидите IP- адрес вашей машинки.

После загрузки кода, в терминале вы увидите IP- адрес вашей машинки. Его нужно указать в программе для пульта управления.


В связи с тем, что в среде разработки UIFlow можно указать GET запрос только текстом. Без возможности использовать переменные. IP машинки придётся указывать в каждом запросе. Соответственно, нужно будет прописать ваш IP 8 раз.

В связи с тем, что в среде разработки UIFlow можно указать GET запрос только текстом

В программе на MicroPython гораздо всё проще. Указать URL нужно только в переменной "url_car".


Программа управления Wi-Fi машинкой с компьютера.

Так как M5Stack Core2 есть не у каждого, я решил написать программу для компьютера. Чтобы проверить работоспособность Wi-Fi машинки смог каждый желающий. В программе нужно также указать IP машинки в переменной url_car = "192.168.1.10".

Программа управления Wi-Fi машинкой с компьютера.

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

Программа управления Wi-Fi машинкой с компьютера.

Запустить программу можно из файла «Car_PC_test.py». НО нужно установить Python 3 и все необходимые модули. Для создания интерфейса я использовал модули «kivy» и «kivymd».

Запустить программу можно из файла «Car_PC_test.py».

В программе PyCharm зависимости устанавливать очень легко. При подсвечивании библиотеки красным цветом наводим на неё курсор мыши, после чего появляется надпись о том, что нужно установить зависимость. Кликаем по ссылке, и модуль устанавливается самостоятельно, без ввода команд через терминал. С помощью PyCharm можно запустить программу, нажав правой кнопкой мыши на файл с кодом и выбрать «Run Car_PC_test.py».

С помощью PyCharm можно запустить программу, нажав правой кнопкой мыши на файл с кодом и выбрать «Run Car_PC_test.py»

Также вы можете всё сделать через терминал. Как установить модули «kivy» и «kivymd» написано на официальном сайте. Для запуска файла открываем терминал в папке с файлом «Car_PC_test.py». Для этого кликам правой кнопкой мыши и выбираем «Открыть окно команд».

Для этого кликам правой кнопкой мыши и выбираем «Открыть окно команд».

Вводим команду «python Car_PC_test.py», где Car_PC_test — это имя файла Python.

Вводим команду «python Car_PC_test.py», где Car_PC_test — это имя файла Python.

Программа запустится, и вы сможете управлять машинкой с ПК.

Программа запустится, и вы сможете управлять машинкой с ПК.

Пример управления машинкой с пульта управления.

Пришло время проверить проделанную работу. Включаем машинку. На дисплее пульта в правом нижнем углу есть надпись, которая указывает процент зарядки аккумулятора.

На дисплее пульта в правом нижнем углу есть надпись, которая указывает процент зарядки аккумулятора.

А также на дисплее располагаются 4 большие кнопки, которые помогают управлять машинкой. Функционал достаточно простой. Машинка едет, пока нажата кнопка «Вперёд». При отпускании кнопки машинка останавливается.

 Функционал достаточно простой. Машинка едет, пока нажата кнопка «Вперёд». При отпускании кнопки машинка останавливается.

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

Если нажать поворот, машинка поворачивается до тех пор, пока мы удерживаем кнопку.

Управлять достаточно комфортно. У меня ребёнок играл машинкой несколько дней, не выпуская пульт из рук. Так же его друзья, когда приходили в гости, оценили Wi-Fi машинку.

Управление машинкой с ПК.

Пульт управления 5х5 см. Это гораздо удобнее, чем управление с компьютера. Но данная программа пригодится для тестирования, если у вас нет в наличии M5Stack Core2. А я на данном примере начал изучать написание программ для ПК на Python, хотя используемые библиотеки подходят и для создания мобильных приложений, но это уже совсем другая история.

Управление машинкой с ПК.


Понравился проект Wi-Fi машинка с пультом управления на M5Stack? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 2. ESP32 MicroPython. Первая программа. http://arduino-tex.ru/news/102/urok-2-esp32-micropython-pervaya-programma.html Константин Portal-PK 2022-01-21T09:18:57+03:00

Что такое MicroPython и его особенности рассмотрели на вводном уроке, а на первом уроке познакомились со средой разработки Thonny Python IDE и установили прошивку на ESP32 и ESP8266. Пришло время научиться писать программы на MicroPython. В качестве первого примера чаще всего показывают мигание встроенным светодиодом на отладочной плате, поэтому и я не буду отклоняться от данной традиции. На этом уроке мы научимся мигать светодиодом на плате ESP32 и ESP8266.


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

Распиновка плат.

Для того чтобы понимать какими контактом на плате будем управлять, рассмотрим распиновку плат ESP32 и ESP8266.

рассмотрим распиновку плат ESP32 и ESP8266

Распиновка ESP32.

На изображении серым цветом обозначены номера GPIO, которые мы будем использовать при написании кода. В большинстве случаев на плате они имеют обозначение с буквой D перед номером пина.

ESP32 DEVKIT V1 с 36 контактами

Более подробно про назначение контактов вы можете прочитать в статье «Распиновка ESP32, какие контакты GPIO можно использовать, а какие нет?».

Распиновка NodeMCU.

С NodeMCU всё немного сложнее, так как контакты D0 - D8 не соответствуют GPIO микроконтроллера, который будем использовать.

Распиновка NodeMCU.

Например, если нам нужно управлять контактом, который на плате называется «D4», он соответствует GPIO2. В коде нам нужно указывать «2», а не 4. Вот такая путаница при работе с данной платой.

«D4», он соответствует GPIO2

Подробное описание и распиновку плат NodeMCU, WeMos D1 Mini и ESP-01 смотрите вот в этой статье.

Программа на MicroPython «мигание светодиодом».

Для того чтобы управлять контактами микроконтроллера, нужно подключить библиотеку «machine». Делается это с помощью команды:

import machine

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

команды будем отправлять через консоль REPL

Затем нужно инициализировать пин как выход. Для ESP32 DEVKIT V1 и NodeMCU встроенный светодиод подключен к GPIO2.

led = machine.Pin(2, machine.Pin.OUT)

Сейчас мы можем отправить команду на включение светодиода.

led.on()

Затем отправим команду на выключение светодиода.

led.off()

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

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

Включить и выключить светодиод можно также выполнив следующие команды.

led.value(1)
led.value(0)

Для включения светодиода отправляем значение 1, для выключения значение 0. Или True – логическая единица, False - логический ноль.

led.value(True)
led.value(False)

Если вызвать данную команду «led.value()» без передачи значения, то в ответ получим логическое состояние контакта 1 или 0 (3,3В или 0).

Если вызвать данную команду «led.value()» без передачи значения

Как мы видим, через консоль управлять светодиодом достаточно просто. Как же сделать мигание светодиода постоянным, как в примере «Blink» в среде Arduino IDE?

Очерёдность исполнения файлов в MicroPython.

Для того чтобы код выполнялся на микроконтроллере, нужно создать файл с кодом. Но тут есть один момент, который нужно учитывать. Если открыть проводник файлов, то увидим, что на микроконтроллере уже есть один файл «boot.py».

Очерёдность исполнения файлов в MicroPython.

Он создаётся автоматически при прошивке микроконтроллера и изменять его нельзя на данном этапе обучения. Данный файл выполняется в первую очередь при подаче питания на ESP32.

Затем микроконтроллер выполняет файл «main.py».

Затем микроконтроллер выполняет файл «main.py». Его то мы и создадим для нашей программы.

Программа MicroPython. Мигаем светодиодом на плате ESP32.

Давайте напишем программу. Для этого подключим необходимые библиотеки: machine и time.

import machine
import time

С библиотекой «machine» мы уже знакомы. Библиотека «time» понадобится для создания задержки времени между включением и выключением светодиода. Далее в коде инициализируем второй пин (GPO2) как выход.

led = machine.Pin(2, machine.Pin.OUT)

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

while True:
  • В цикле включим светодиод.
led.on()
  • Подождём 0,5 секунды или 500 миллисекунд.
time.sleep(0.5)
  • Затем выключим светодиод.
led.off()
  • Подождём ещё 0,5 сек.
time.sleep(0.5)

Так как цикл будет выполняться бесконечное количество раз, пока на микроконтроллер подаётся питание, то включение и выключение светодиода будет повторяться. Сейчас осталось сохранить код на ESP32 с названием «main.py».

Сейчас осталось сохранить код на ESP32 с названием «main.py».

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

Как видим, светодиод мигает и, если мы отключим питание и снова подключим микроконтроллер к источнику питания

В следующем уроке рассмотрим переменные и основные математические действия.


Понравился Урок 2. ESP32 MicroPython. Первая программа? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Симулятор Arduino, Raspberry Pi Pico, ESP32, FastLED, MicroPython. http://arduino-tex.ru/news/101/simulyator-arduino-raspberry-pi-pico-esp32-fastled-micropython.html Константин Portal-PK 2022-01-19T10:42:55+03:00 У меня на сайте и на канале есть блок уроков по программированию Arduino с использованием симулятора, который входит в состав TinkerCad: Circuits Arduino. В данном симуляторе небольшая элементная база, а из микроконтроллеров доступны Arduino UNO, Attiny85 и ещё несколько малоизвестных. А хочется создавать проекты на ESP32, без ожидания долгой компиляции. Также последнее время становится популярным программирование на MicroPython Raspberry Pi Pico и ESP32. Всё это и многое другое есть в онлайн симуляторе wokwi. Создавать и проверять проекты можно без регистрации и в последствии поделиться ссылкой на свой проект. Невероятно полезно, не правда ли!?


Как начать работать с онлайн симулятором Arduino, Raspberry Pi Pico, ESP32, FastLED, MicroPython?

Для того чтобы начать создавать свои проекты с использованием различных плат Arduino, Raspberry Pi Pico, ESP32, Attiny85 достаточно прейти на сайт wokwi.com и выбрать нужную плату для разработки.

Как начать работать с онлайн симулятором Arduino, Raspberry Pi Pico, ESP32, FastLED, MicroPython?

Также можно производить разработку проектов на MicroPython с использованием следующих отладочных плат: Raspberry Pi Pico и ESP32.

Создаём первый проект в симуляторе wokwi.

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

Создаём первый проект в симуляторе wokwi.

Откроется рабочая область. С левой стороны поля для написания кода и вкладка для редактирования внешнего вида проекта в формате json.

Откроется рабочая область. С левой стороны поля для написания кода и вкладка для редактирования внешнего вида

С левой стороны находится поле сборки электрической схемы, на которое размещена Arduino MEGA. Для того чтобы добавить нужные элементы, нажимаем на кнопку со знаком «Плюс». Откроется список с доступными элементами. Добавим на рабочее поле потенциометр и servo.

 Добавим на рабочее поле потенциометр и servo.

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

Теперь нужно соединить все элементы проводниками.

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

Как видим, проводники 5В автоматически создаются красного цвета, а проводники GND -чёрного. Все остальные зелёного.

Как видим, проводникиавтоматически создаются красного цвета, а проводники GND -чёрного. Все остальные зелёного.

Для того чтобы изменить цвет проводника или свойства элементов электрической схемы нужно перейти на вкладку «diagram.json».

Для того чтобы изменить цвет проводника или свойства элементов электрической схемы нужно перейти на вкладку «diagram.json». Для изменения цвета проводника меняем значение «green» на «blue».

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

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

Для сервопривода можно изменить тип качалки и первоначальное положение.

Для сервопривода можно изменить тип качалки и первоначальное положение.

Для сервопривода можно изменить тип качалки и первоначальное положение.

У потенциометра в виде слайдера можно изменить его длину и начальное значение.

Затем пишем код для управления сервоприводом. Пример можно взять из моего урока, указав нужные pins подключения servo и потенциометра.

#include <Servo.h>
Servo myservo;  
int potpin = 0;  
int val;   
void setup() {
  myservo.attach(9); 
}
void loop() {
  val = analogRead(potpin);            
  val = map(val, 0, 1023, 0, 180);     
  myservo.write(val);                  
  delay(15);                           
}

Для проверки проекта нажимаем на зелёную кнопку «Пуск».

Для проверки проекта нажимаем на зелёную кнопку «Пуск».

После чего можно подвигать бегунок потенциометра. При изменении положения потенциометра изменяется положение качалки сервопривода.

После чего можно подвигать бегунок потенциометра.

Проект собран и проверен, сейчас им можно поделиться, нажав на кнопку «Share». Также можно сохранить проект на компьютер, нажав на кнопку «Download project ZIP».

роект собран и проверен, сейчас им можно поделиться, нажав на кнопку «Share».

Проект скачается на ваш ПК в архиве, который содержит скетч и файл настроек для симулятора «diagram.json».

Проект скачается на ваш ПК в архиве, который содержит скетч и файл настроек для симулятора «diagram.json».

В симуляторе wokwi много готовых примеров, которые рассмотрим далее.

Создание светодиодных эффектов с использованием библиотеки FastLED в симуляторе.

Нашел я симулятор wokwi при разработке проекта светодиодной гирлянды на ESP32. При создании проекта с большим количеством световых эффектов достаточно сложно проверить каждый. В первую очередь это связано с тем, что компиляция и загрузка кода в плату ESP32 может занимать 5-7 мин.

Создание светодиодных эффектов с использованием библиотеки FastLED в симуляторе.

Поэтому симулятор просто незаменим для написания световых эффектов с использованием библиотеки FastLED.

Пример работы со светодиодными лентами.

В симуляторе есть несколько примеров использования библиотеки FastLED для создания световых эффектов с использованием светодиодных лент. Вот один из примеров.

#include <FastLED.h>

#define LED_PIN     5
#define NUM_LEDS    50
#define BRIGHTNESS  64
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

#define UPDATES_PER_SECOND 100

CRGBPalette16 currentPalette;
TBlendType    currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
    delay( 3000 ); // power-up safety delay
    FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
    FastLED.setBrightness(  BRIGHTNESS );

    currentPalette = RainbowColors_p;
    currentBlending = LINEARBLEND;
}


void loop()
{
    ChangePalettePeriodically();

    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */

    FillLEDsFromPaletteColors( startIndex);

    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);
}

void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
    uint8_t brightness = 255;

    for( int i = 0; i < NUM_LEDS; i++) {
        leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 3;
    }
}

void ChangePalettePeriodically()
{
    uint8_t secondHand = (millis() / 1000) % 60;
    static uint8_t lastSecond = 99;

    if( lastSecond != secondHand) {
        lastSecond = secondHand;
        if( secondHand ==  0)  { currentPalette = RainbowColors_p;         currentBlending = LINEARBLEND; }
        if( secondHand == 10)  { currentPalette = RainbowStripeColors_p;   currentBlending = NOBLEND;  }
        if( secondHand == 15)  { currentPalette = RainbowStripeColors_p;   currentBlending = LINEARBLEND; }
        if( secondHand == 20)  { SetupPurpleAndGreenPalette();             currentBlending = LINEARBLEND; }
        if( secondHand == 25)  { SetupTotallyRandomPalette();              currentBlending = LINEARBLEND; }
        if( secondHand == 30)  { SetupBlackAndWhiteStripedPalette();       currentBlending = NOBLEND; }
        if( secondHand == 35)  { SetupBlackAndWhiteStripedPalette();       currentBlending = LINEARBLEND; }
        if( secondHand == 40)  { currentPalette = CloudColors_p;           currentBlending = LINEARBLEND; }
        if( secondHand == 45)  { currentPalette = PartyColors_p;           currentBlending = LINEARBLEND; }
        if( secondHand == 50)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;  }
        if( secondHand == 55)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; }
    }
}

void SetupTotallyRandomPalette()
{
    for( int i = 0; i < 16; i++) {
        currentPalette[i] = CHSV( random8(), 255, random8());
    }
}

void SetupBlackAndWhiteStripedPalette()
{
    // 'black out' all 16 palette entries...
    fill_solid( currentPalette, 16, CRGB::Black);
    // and set every fourth one to white.
    currentPalette[0] = CRGB::White;
    currentPalette[4] = CRGB::White;
    currentPalette[8] = CRGB::White;
    currentPalette[12] = CRGB::White;

}

void SetupPurpleAndGreenPalette()
{
    CRGB purple = CHSV( HUE_PURPLE, 255, 255);
    CRGB green  = CHSV( HUE_GREEN, 255, 255);
    CRGB black  = CRGB::Black;

    currentPalette = CRGBPalette16(
                                   green,  green,  black,  black,
                                   purple, purple, black,  black,
                                   green,  green,  black,  black,
                                   purple, purple, black,  black );
}


const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
    CRGB::Red,
    CRGB::Gray, // 'white' is too bright compared to red and blue
    CRGB::Blue,
    CRGB::Black,

    CRGB::Red,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Black,

    CRGB::Red,
    CRGB::Red,
    CRGB::Gray,
    CRGB::Gray,
    CRGB::Blue,
    CRGB::Blue,
    CRGB::Black,
    CRGB::Black
};

В данном примере поочерёдно выводятся несколько световых режимов:

  • Радуга в движении;

Радуга в движении

  • Движущиеся цвета: синий, красный, черный;

Движущиеся цвета: синий, красный, черный;

  • Цветные сегменты;

Цветные сегменты;

  • Белые сегменты и пр.

Белые сегменты и пр.

В данном примере много разнообразных эффектов. Возможно, я добавлю некоторые в проект новогодней гирлянды.

Пример работы со светодиодной матрицей.

Кроме программирования адресных светодиодных лент, можно запрограммировать светодиодные матрицы, создавая различные красивые эффекты, например, эффект матрицы.

#include "FastLED.h"

// Matrix size
#define NUM_ROWS 16
#define NUM_COLS 16
// LEDs pin
#define DATA_PIN 3
// LED brightness
#define BRIGHTNESS 255
#define NUM_LEDS NUM_ROWS * NUM_COLS
// Define the array of leds
CRGB leds[NUM_LEDS];
byte rain[NUM_LEDS];
byte counter = 1;
int speed = 1;

void setup() {
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  raininit();
}

void loop() {
  EVERY_N_MILLISECONDS(100) {
    updaterain();
    FastLED.show();
  }
  EVERY_N_MILLISECONDS(30) {
    changepattern();
  }
} //loop

void changepattern () {
  int rand1 = random16 (NUM_LEDS);
  int rand2 = random16 (NUM_LEDS);
  if ((rain[rand1] == 1) && (rain[rand2] == 0) )   //simple get two random dot 1 and 0 and swap it,
  {
    rain[rand1] = 0;  //this will not change total number of dots
    rain[rand2] = 1;
  }
} //changepattern

void raininit() {                               //init array of dots. run once
  for (int i = 0; i < NUM_LEDS; i++) {
    if (random8(20) == 0) {
      rain[i] = 1;  //random8(20) number of dots. decrease for more dots
    }
    else {
      rain[i] = 0;
    }
  }
} //raininit

void updaterain() {
  for (byte i = 0; i < NUM_COLS; i++) {
    for (byte j = 0; j < NUM_ROWS; j++) {
      byte layer = rain[XY(i, ((j + speed + random8(2) + NUM_ROWS) % NUM_ROWS))];   //fake scroll based on shift coordinate
      // random8(2) add glitchy look
      if (layer) {
        leds[XY((NUM_COLS - 1) - i, (NUM_ROWS - 1) - j)] = CHSV(110, 255, BRIGHTNESS);
      }
    }
  }

  speed ++;
  fadeToBlackBy(leds, NUM_LEDS, 40);
  blurRows(leds, NUM_COLS, NUM_ROWS, 16);      //if you want
} //updaterain

uint16_t XY (uint8_t x, uint8_t y) {
  return (y * NUM_COLS + x);
}

Данный пример в симуляторе выглядит вот так.

эффект матрицы.

Но делать эффекты не очень интересно. Куда интереснее сделать анимацию на светодиодной матрице. Давайте рассмотрим готовые примеры анимации:

  • Анимация персонажей из игр;

Анимация персонажей из игр;

  • Шагающий рыцарь;

Шагающий рыцарь;

  • Вывод текста;

Вывод текста;

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

Движение разнообразных геометрических фигур

Кроме этого, можно собрать матрицу из отдельных адресных светодиодов или купить светодиодную гирлянду и сделать анимацию на окне. Предварительно проверив в симуляторе, как это будет выглядеть.

собрать матрицу из отдельных адресных светодиодов

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

Программирование Arduino в симуляторе wokwi.

Симулятором Arduino UNO, Attiny85 никого не удивить. В симуляторе wokwi можно запрограммировать проект с использованием отладочной платы Arduino MEGA, NANO, Raspberry Pi Pico. А также приятная новость: можно сделать проект в среде Arduino IDE с использованием отладочной платы ESP32, которая последнее время набирает популярность благодаря высокой производительности и относительно небольшой стоимости.

Arduino IDE с использованием отладочной платы ESP32

Данный симулятор позволяет собрать и протестировать достаточно интересные проекты в среде Arduino IDE без использования железа.

Симулятор проектов на MicroPython.

Симулятор MicroPython по умолчанию рассчитан на работу с Raspberry Pi Pico. Об этом говорит следующий факт: при нажатии на кнопку создания проекта на MicroPython открывается поле разработки с платой Raspberry Pi Pico.

Симулятор MicroPython по умолчанию рассчитан на работу с Raspberry Pi Pico

Для создания проектов MicroPython с использованием ESP32 предусмотрена отдельная кнопка.

Для создания проектов MicroPython с использованием ESP32 предусмотрена отдельная кнопка.

При нажатии на неё открывается поле для создания проектов на ESP32. У меня есть серия уроков по программированию ESP32 на MicroPython. Надеюсь, что данный симулятор поможет вам в изучении данных уроков.

Какие библиотеки присутствуют в симуляторе wokwi?

Как вы уже поняли, в симуляторе предустановлена библиотека для работы с адресными светодиодами FastLED. Кроме неё предустановлены следующие библиотеки: Adafruit_NeoPixel, Adafruit_SSD1306, DHT-sensor-library, LiquidCrystal_I2C, MD_Parola, RTClib, Servo, SevSeg, ssd1306, SSD1306Ascii и другие.

библиотеки: Adafruit_NeoPixel, Adafruit_SSD1306, DHT-sensor-library, LiquidCrystal_I2C, MD_Parola, RTClib, Servo, SevSeg, ssd1306, SSD1306Ascii

Полный список библиотек с примерами кода вы можете посмотреть вот на этой странице.

Подведём итоги.

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

  • отсутствие русского языка интерфейса;
  • для изменения параметров элементов необходимо редактирование файла «diagram.json». Это не очень удобно.

Понравилась статья Симулятор Arduino, Raspberry Pi Pico, ESP32, FastLED, MicroPython? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 1. MicroPython Windows. Установка и настройка IDE. http://arduino-tex.ru/news/100/urok-1-micropython-windows-ustanovka-i-nastroika-ide.html Константин Portal-PK 2022-01-13T16:38:29+03:00 В этом уроке поговорим о том, с чего начать работу с MicroPython на компьютере с операционной системой Windows. Установим необходимое программное обеспечение, в том числе Thonny Python IDE. Рассмотрим, что необходимо сделать для того, чтобы начать работу с платами ESP8266 и ESP32.


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

Установка программного обеспечения для написания программ MicroPython.

Установка Python 3.

Несмотря на то, что MicroPython основан на Python 3, устанавливать на ПК Python 3 не нужно, так как мы установим интерпретатор на ESP8266 или ESP32. Как это работает, я рассказывал во вводном уроке.

1. Установка Thonny Python IDE.

Приступаем к установке IDE для написания кода. В своих уроках я буду использовать Thonny Python.

Приступаем к установке IDE для написания кода. В своих уроках я буду использовать Thonny Python.

Данная программа очень простая и русифицирована. Она имеет дополнительные инструменты, например, проводник, который позволяет посмотреть загруженные файлы на микроконтроллер.

Она имеет дополнительные инструменты, например, проводник, который позволяет посмотреть загруженные файлы на микроконтроллер.

Кроме этого, данную программу легко настроить для работы с платами ESP8266 и ESP32. Скачать Thonny IDE можно на официальном сайте или внизу статьи в разделе «файлы для скачивания».

Скачать Thonny IDE можно на официальном сайте

Устанавливается Thonny Python как обычная программа.

Устанавливается Thonny Python как обычная программа.

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

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

После чего программу нужно перезагрузить.

2. USB-драйвер для ESP8266 и ESP32.

Для ESP8266, так и для ESP32 могут использоваться разные чип конвертора USB to UART. Как определить какой драйвер нужен устоновить?

Драйвер CH341SER

Если вы видите на плате продолговатый чип конвертора USB to UART, как показано на фото ниже.

Если вы видите на плате продолговатый чип конвертора USB to UART, как показано на фото ниже.

В таком случае нужно устанавливать драйвер CH341SER. Скачать его можно внизу статьи в разделе «файлы для скачивания».

Установка драйвера CH341SER:

В таком случае нужно устанавливать драйвер CH341SER.

  • Скачайте драйвер;
  • Распакуйте архив;
  • Запустите исполнительный файл CH341SER.EXE;
  • В открывшемся окне нажмите кнопку Install;
  • На этом установка завершена.

После удачной установки в диспетчере устройств вы увидите отладочную плату. Необходимо запомнить, к какому COM - порту она подключена.

После удачной установки в диспетчере устройств вы увидите отладочную плату.

Драйвер CP210x.

Если вы на плате видите квадратный чип конвертора USB to UART, как показано на фото ниже, нужно установить драйвер CP210x. Скачать его можно внизу статьи в разделе «файлы для скачивания» или на официальном сайте.

Если вы на плате видите квадратный чип конвертора USB to UART, как показано на фото ниже, нужно установить драйвер CP210x.

Установка драйвера CP210x:

Установка драйвера CP210x:

  • Скачайте драйвер;
  • Распакуйте архив;
  • Запустите исполнительный файл CP210xVCPInstaller_x64.exe для 64-разрядной операционной системы и CP210xVCPInstaller_x86.exe для 32-разрядной операционной системы;
  • В открывшемся окне нажмите кнопку «Далее»;
  • На этом установка завершена.

При подключении к компьютеру ESP8266 или ESP32 в диспетчере устройств вы должны увидеть, что устройство подключено

При подключении к компьютеру ESP8266 или ESP32 в диспетчере устройств вы должны увидеть, что устройство подключено. Необходимо запомнить, к какому COM -порту подключено данное устройство.

Лайфхак. Можно установить оба драйвера и при подключении ESP8266 или ESP32 система автоматически определит драйвер для вашей платы.

3. Загрузите прошивку MicroPython.

Сейчас нам нужно установить прошивку на ESP8266 или ESP32, которую можно скачать на официальном сайте. Но новичку сложно определить, какая версия нужна, поэтому внизу статьи вы можете скачать прошивку для ESP32 и прошивку для ESP8266 с памятью 512 Kб, 1 Мб и 2+ Мб. В уроках я буду использовать NodeMCU с памятью 4 Мб.

скачать прошивку для ESP32 и прошивку для ESP8266 с памятью 512 Kб, 1 Мб и 2+ Мб. В уроках я буду использовать NodeMCU с памятью 4 Мб.

Установка прошивки для ESP32 с помощью Thonny Python.

Затем запускаем программу Thonny Python. Переходим в меню «Инструменты -> Параметры».

Установка прошивки для ESP32 с помощью Thonny Python.

Переходим на вкладку «Интерпретатор».

Переходим на вкладку «Интерпретатор».

Внизу видим надпись «install or update firmware».

В открывшейся вкладке выбираем порт устройства и скаченную прошивку, нажимаем кнопку «Установить».

В открывшейся вкладке выбираем порт устройства и скаченную прошивку, нажимаем кнопку «Установить».

В левом нижнем углу увидим зелёную шкалу и статус процесса установки. При нажатии на данную надпись откроется окно, в которой можно отслеживать процесс установки прошивки.

В левом нижнем углу увидим зелёную шкалу и статус процесса установки. При нажатии на данную надпись откроется окно, в которой можно отслеживать процесс установки прошивки.

По завершению прошивки вы увидите надпись «Done!».

По завершению прошивки вы увидите надпись «Done!».

Сейчас можно закрыть все вкладки и перейти к программированию ESP32.

Сейчас можно закрыть все вкладки и перейти к программированию ESP32.

Поздравляю! Установка и настройка прошла успешна.

Установка прошивки ESP8266 происходит аналогичным образом. Выбираем порт и прошивку для вашей платы. После чего загружаем прошивку. По завершению процесса прошивки можно приступать к программированию ESP8266 на MicroPython.

Установка прошивки ESP8266 происходит аналогичным образом

4. Первая программа на MicroPython ESP32.

Чтобы можно было проверить работоспособность, давайте загрузим пример: «Мигание светодиодами» на подобии «Blink» в среде Arduino IDE.

import machine
import time

led = machine.Pin(2, machine.Pin.OUT)

while True:
    led.on()
    time.sleep(0.5)
    led.off()
    time.sleep(0.5)

Код данной программы разберём на следующем уроке.

Понравился Урок 1. MicroPython Windows. Установка и настройка IDE? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Программирование ESP32 в среде Arduino IDE. Структура кода. http://arduino-tex.ru/news/99/programmirovanie-esp32-v-srede-arduino-ide-struktura-koda.html Константин Portal-PK 2022-01-12T08:13:43+03:00 Чтобы начать программировать ESP32 в среде Arduino IDE, необходимо изучить структуру кода. В данном уроке постараюсь объяснить структуру кода в среде Arduino IDE. Данная структура применима при программировании и других микроконтроллеров в данной среде разработки. Вы можете убедиться в этом, посмотрев мой урок по программированию Arduino.

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

  • Модуль ESP32. Я буду использовать ESP32 DEVKIT V1.
  • USB кабель для подключения к ПК.

Модуль ESP32. Я буду использовать ESP32 DEVKIT V1.

Базовая структура кода.

Код ESP32 (также называют скетч, который имеет ту - же структуру, что и код Arduino). Он включает в себя две основные части.

Базовая структура кода.

Блок настроек (setup)

  • Код прописывается в функции setup().
  • Код выполняется сразу поле включения питания или перезагрузки.
  • Данный код выполняется только один раз.
  • Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д.

Основной цикл (loop).

  • Код основного цикла прописываться в функции loop().
  • Данный код выполняется сразу после выполнения кода настроек.
  • Код в функции loop() выполняется бесконечное количество раз.

Пример.

void setup() {
  // put your setup code here, to executed once:
  Serial.begin(9600);
  Serial.println("This is ESP32 setup code");
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("This is ESP32 loop code");
  delay(1000);
}

Загрузка и проверка кода ESP32.

  • Если вы используете ESP32 в первый раз, смотрите статью «Настройка Arduino IDE для работы с ESP32».
  • Скопируйте приведенный код выше.
  • Скомпилируйте и загрузите код на плату ESP32, нажав на кнопку загрузить.
  • Откройте последовательный монитор порта.
  • Вы увидите вывод следующей информации.

Загрузка и проверка кода ESP32.

Как вы видите фраза «This is ESP32 the setup code» напечатана в порте всего 1 раз. Но фраза«This is ESP32 loop code» выводиться много раз. Это наглядно демонстрирует, что код настроек выводиться 1 раз, а код цикла выполняется повторно. Причём, сперва выполнился код настроек.

Как вы видите фраза «This is ESP32 the setup code» напечатана в порте всего 1 раз. Но фраза«This is ESP32 loop code»

ВНИМАНИЕ! Функции setup() и loop() обязательно должны использоваться в коде. Иначе вы увидите ошибку при компиляции кода.

Другие разделы кода.

Другие разделы кода.

Помимо кода настроек и основного цикла, скетч ESP32 может включать в себя дополнительные разделы кода:

  • Блок комментариев. Обычно используется для указания: информации об авторе, инструкцию по подключению, лицензиюи т.д. Данная информация не используется при компиляции и может располагаться в любом месте кода.
  • Подключение библиотек. Используется для подключения сторонних библиотек в скетче.
  • Константы. Используются для определения необходимых констант.
  • Глобальные переменные.

Вот мы с вами и рассмотрели структуру кода в среде Arduino IDE на примере скетча для ESP32.

Вот мы с вами и рассмотрели структуру кода в среде Arduino IDE на примере скетча для ESP32.

Смотрите также уроки по программированию ESP8266:

Понравился урок: Программирование ESP32 в среде Arduino IDE. Структура кода? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Светодиодная гирлянда на ёлку своими руками. http://arduino-tex.ru/news/98/svetodiodnaya-girlyanda-na-elku-svoimi-rukami.html Константин Portal-PK 2021-12-29T14:40:11+03:00 Новый год уже у порога, и пора готовиться к празднику-покупать подарки, украшать елку.

По традиции сделал к новогоднему празднику новую версию новогодней гирлянды. Как и предыдущая версия, эта прошивка поддерживает платы ESP8266 и ESP32. В новой версии полностью переписал приложение для телефона на Xamarin C#. Добавил функцию быстрого определения IP-адреса устройства. Сейчас подробнее расскажу, что ещё нового сделал и какая светодиодная гирлянда на ёлку своими руками у меня получилась.


В этом году гирлянда у меня будет сделана из светодиодной ленты WS2812. В этот раз я ничего паять не буду, только добавлю звезду, про которую рассказывал вот в этой статье. Если вам интересно, как сделать уникальную новогоднюю гирлянду своими руками, читайте предыдущую статью по данной теме.

как сделать уникальную новогоднюю гирлянду своими руками

Возможность самодельной гирлянды на новый год.

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

Возможность самодельной гирлянды на новый год.

Функции гирлянды:

1. 18 световых эффектов (можно расширять).

2. Авторежим. Автоматически переключает режимы по кругу. Продолжительность одного режима настраивается в прошивке.

3. Управление яркостью гирлянды.

4. Внешнее управление с помощью тактовой кнопки: переключение режимов и изменение яркости.

5. Выбор цвета звезды. Палитра из 8 цветов.

6. Добавлена функция, позволяющая установить ток источника питания, что в свою очередь позволяет управлять лентой любой длины, не боясь, что ваш блок питания перегреется.

Что добавлено в новой версии:

Что добавлено в новой версии:

1. Возможность найти гирлянду в разделе «Сетевые устройства» благодаря SSDP.

2. Благодаря SSDP появилась функция быстрого определения IP гирлянды.

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

4. Переписал все эффекты для гирлянды. Они сейчас небольшие и при этом работают отлично на больших лентах.

5. Прописал настройку изменения скорости эффектов. На данный момент изменять скорость можно только в прошивке.

Схема подключения гирлянды на ёлку.

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

Схема подключения гирлянды на ESP8266 (NodeMCU).

Схема подключения гирлянды на ESP8266 (NodeMCU).

Также в этом году сделал управление эффектами и яркостью подсветки с помощью кнопки и для ESP32.

Схема подключения гирлянды реализованной на ESP32 (Devkit).

Схема подключения гирлянды реализованной на ESP32 (Devkit).

Мобильное приложение для управления новогодней гирляндой.

В этом году переписал полностью приложение на новой платформе Xamarin C#. Это открывает дополнительные возможности в управлении, но, к сожалению, мне не хватило времени, чтобы реализовать задуманное. У меня есть много идей по реализации светильника с использованием светодиодной ленты, поэтому дорабатывать приложение буду при создании новых проектов с использованием адресных светодиодов. Планирую доработать прошивку для ESP и выйти на более интересную систему управления подсветкой, но обо всём вы узнаете по мере реализации моих планов.

Приложение для управления гирляндой на ESP8266 (ESP32)

Приложение сделанное в прошлом году выглядело вот так.

В этом году оно выглядит по-другому. Я сделал его в бело-синей цветовой гамме и добавил немного ярких праздничных кнопок.

В этом году оно выглядит по-другому. Я сделал его в бело-синей цветовой гамме и добавил немного ярких праздничных кнопок.

Какое оформление вам больше нравится? Пишите ваши мнения и предложения в комментариях.

Рассказывать про возможности приложения не буду, а по интерфейсу и так всё понятно. Одна особенность - изменение яркости с помощью дополнительных кнопок «-» и «+», которые изменяют яркость с шагом 10%. Переход на страницу настроек перенёс в подвал приложения.

 изменение яркости с помощью дополнительных кнопок «-» и «+»

На странице настроек на данный момент только одно поле для ввода IP- адреса устройства.

На странице настроек на данный момент только одно поле для ввода IP- адреса устройства

Прошивка новогодней гирлянды на ESP32 (ESP8266).

Для того чтобы загрузить прошивку новогодней гирлянды в ваше ESP, нужно настроить среду разработки Arduino IDE. Для платы ESP8266 есть инструкция по настройке, которую можно посмотреть тут. Если у вас плата ESP32, то инструкция по добавлению данной платы в среду разработки тут.

Установить нужно всего одну дополнительную библиотеку FastLED.

Установить нужно всего одну дополнительную библиотеку FastLED.

ВНИМАНИЕ! Версия библиотеки должна быть не ниже версии FastLED 3.1. В противном случае при компиляции вы увидите предупреждение «warning "Requires FastLED 3.1 or later; check github for latest code.», а загрузка кода будет приостановлена.

Установить библиотеку можно через менеджер библиотек.

Установить библиотеку можно через менеджер библиотек. В таком случае у вас установится последняя версия и всё будет работать как надо. Если у вас уже установлена данная библиотека, то её нужно обновить. Для этого вам необходимо выбрать версию больше 3,1 из списка доступных версий и обновить.

как установить библиотеку с помощью менеджера библиотек

Если вы не знаете, как установить библиотеку с помощью менеджера библиотек, можете скачать библиотеку внизу статьи в разделе «файлы для скачивания» и установить её, переместив в папку с библиотеками, которая располагается тут: «Документы\Arduino\libraries».

В прошивке также нужно настроить подключение к вашей Wi-Fi сети, указав логин и паролВ прошивке также нужно настроить подключение к вашей Wi-Fi сети, указав логин и пароль.

Если вы не укажите логин и пароль, устройство автоматически поднимет точку доступа (свою сеть), к которой нужно будет подключиться с вашего телефона. Название сети "ATGarland", пароль по умолчанию "012345678". В таком случае в приложении нужно указывать IP «192.168.4.1» поднимет точку доступа (свою сеть)Если вы указали логин и пароль от вашей сети, то после подключения гирлянда появится в разделе сетевых устройств на вашем компьютере в категории «Другие устройства». Узнать IP-адрес вашего устройства можно двумя способами:

  • Два раза кликнуть по устройству с именем "ATGarland". Откроется страница в браузере, в которой будет написан адрес вашего устройства.

Узнать IP-адрес вашего устройства можно двумя способами

  • Нажать правой кнопкой мыши по устройству "ATGarland". Следом нажать на кнопку «Свойства» и откроется описание устройства, IP прописан в поле «Веб-страница». Указываем данный IP-адрес в приложении.Нажать правой кнопкой мыши по устройству ATGarland

Указываем данный IP-адрес в приложении.

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

настройка источника питания

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

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

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

Как видно по фото для управления гирляндами я использую разные платы на микроконтроллере ESP8266:

  • ESP-01
  • NodeMCU
  • Также использую Wemos, которая не попала в кадр =)

Помимо вышеуказанных я использую плату ESP32 Devkit v1. Кроме неё есть у меня ещё один модуль на базе ESP32. Он без опознавательных знаков, но работает также отлично.

Варианты использования самодельной гирлянды

Варианты использования самодельной гирлянды:

  • ESP8266 с кнопкой, без приложения.
  • ESP8266 с кнопкой и приложение.
  • ESP8266 с приложения.
  • ESP32 с кнопкой, без приложения.
  • ESP32с кнопкой и приложение.
  • ESP32 с приложения.

Также можно использовать управление последними пикселями ленты, установив статический цвет для звезды или вовсе не использовать данную функцию. Как видим, одна прошивка, а спектр применения достаточно большой.

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

Следующая версия будет управляться с помощью мыслей. Это конечно же шутка! Но с современным темпом развития электроники всё, что кажется нереальным, возможно, через десять лет будет обыденным делом. Желаю, чтобы вам не пришлось ждать десять лет, пусть ваши самые смелые желания сбудутся в Новом году! С наступающим!

С новым Годом!

Понравился проект Светодиодная гирлянда на ёлку своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Вводный урок по программированию ESP32, ESP8266 на MicroPython. http://arduino-tex.ru/news/97/vvodnyi-urok-po-programmirovaniyu-esp32-esp8266-na-micropython.html Константин Portal-PK 2021-12-23T14:04:55+03:00 По многочисленным просьбам начинаю цикл уроков по программированию ESP32, ESP8266 на MicroPython. В данном вводном уроке рассмотрим, что такое MicroPython, чем отличается от Arduino IDE, а также обозначим его плюсы и минусы.


Что такое MicroPython?

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

Что такое MicroPython?

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

История создания языка MicroPython с сайта Википедия.

«MicroPython создан австралийским программистом Дэмиеном Джорждем. Средства на разработку были собраны на Kickstarter кампании в 2013 году. Изначально MicroPython разрабатывался для основанной на чипе STM32F4 плате разработки PyBoard, но позднее стал поддерживаться большим количеством других платформ.»

На данный момент MicroPython поддерживает несколько десятков плат. Об этом кратко я расскажу в следующем уроке.

История создания языка MicroPython с сайта Википедия.

Собственные библиотеки MicroPython:

  • btree — библиотека для работы с BTree базами данных
  • framebuf — библиотека для создания двоичного изображения для внешних экранов
  • machine — библиотека для работы с микроконтроллером
  • micropython — библиотека для работы с собственными типами данных MicroPython
  • network — библиотека для работы с сетью
  • ubluetooth — библиотека для работы с Bluetooth
  • ucryptolib — библиотека для шифрования
  • uctypes — библиотека для взаимодействия с бинарными структурами

Собственные библиотеки MicroPython

Так же в сборках под некоторые платформы есть специфичные только для них библиотеки.

Особенности и отличия MicroPython от Arduino:

Особенности и отличия MicroPython от Arduino

  1. В MicroPython исходный код создается и/или редактируется на компьютере с помощью редактора, такого как Thonny Python, который аналогичен традиционному программированию Arduino с использованием Arduino IDE.
  2. В MicroPython код хранится во флэш-памяти микроконтроллеров, в то время как в Arduino код хранится на вашем компьютере.
  3. В MicroPython компиляция исходного кода происходит внутри микроконтроллера или более правильно называть это интерпретацией исходного кода. Интерпретатор Python преобразует исходный код в байтовый код и сохраняет его в оперативной памяти и, следовательно, выполняет программу, в то время как в Arduino компиляция исходного кода происходит на компьютере. Компилятор Cpp преобразует код в машинный код. Машинный код передается на микроконтроллер через последовательный интерфейс и записывается во флэш-память. Флэш - память перезаписывается каждый раз при загрузке исходного кода.
  4. В MicroPython время, необходимое от компиляции кода до его выполнения, очень минимально и практически выполняется немедленно. И поскольку MicroPython — это интерпретируемый язык, когда вы изменяете свой исходный код, ему не нужно компилировать все, что ему необходимо просто изменить часть в соответствии с изменениями в исходном коде, в то время как в Arduino каждый раз, когда вы изменяете свой исходный код, вам также необходимо все перекомпилировать, чтобы изменение вступило в силу.
  5. Но поскольку MicroPython интерпретируется во время выполнения кода, быстродействие не является эффективным, в то время как традиционное программирование имеет преимущество в использовании уровня машинного кода.

Но поскольку MicroPython интерпретируется во время выполнения кода, быстродействие не является эффективным

Еще одной интересной особенностью MicroPython является добавление REPL. REPL расшифровывается как «Read-Evaluate-Print-Loop», что можно перевести как «цикл чтение-вычисление-вывод». REPL позволяет вам подключиться к плате разработки и тестировать код без какой-либо необходимости компиляции.

MicroPython является добавление REPL. REPL расшифровывается как «Read-Evaluate-Print-Loop»

REPL использует последовательного интерфейса UART, который обычно имеют почти все отладочные платы, доступные на рынке.

REPL использует последовательного интерфейса UART

Понравился Вводный урок по программированию ESP32, ESP8266 на MicroPython? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Автоматический полив комнатных растений на M5Stack (ESP32). http://arduino-tex.ru/news/96/avtomaticheskii-poliv-komnatnyh-rastenii-na-m5stack-esp32.html Константин Portal-PK 2021-12-20T08:58:24+03:00 Наверное, каждый сталкивался с проблемой полива комнатных растений во время отпуска, когда вы запланировали поездку на 1-2 неделю. На данное время приходиться искать того, кто мог бы поливать ваши растения. Я сталкивался с такой проблемой и поэтому решил сделать автоматический полив комнатных растений на M5Stack (ESP32). Данное устройство оснащено дисплеем, на котором отображается влажность почвы и состояние работы помпы полива. Но не всегда удобно смотреть на двухдюймовый дисплей. Поэтому я сделал приложение для телефона, которое позволит информировать о процессе полива и отследить, когда нужно добавлять воду в резервуар.


Что понадобиться для системы автоматического полива растений?

Для того, чтобы проект можно было легко повторить, я буду использовать M5Stack Core 2 на базе микроконтроллера ESP32. Обзор на данное устройство можно посмотреть тут.

Что понадобиться для системы автоматического полива растений?

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

Купить все для данного проекта со скидкой можно на сайте https://m5stack.pro. Для моих читателей предусмотрена скидка 10% в данном магазине, которая действует до 31.12 2021. Купон на сидку: PORTAL.

Купить все для данного проекта со скидкой можно на сайте https://m5stack.pro.

На сайте m5stack.pro также идет предновогодняя акция на новогодние наборы. Подробнее смотрите тут.

На сайте m5stack.pro также идет предновогодняя акция на новогодние наборы.

Схема подключения системы автополива комнатных растений.

Несмотря на то, что M5Stack Core 2 и юнит «Watering» соединяются между собой одним проводом, тут ожидал меня один сюрприз. «Watering» нужно подключать к Порту В, но у Core 2 есть только порт А. А при подключении к порту А показания с датчика не считываются. Можно купить модуль основания для расширения портов, но в магазине меня уверили, что все будет работать и от порта А.

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

Схема подключения системы автополива комнатных растений.

Также можно оставить питание в разъёме порта А, а информационные контакты подключить в основную колодку, как показано на схеме ниже.

Также можно оставить питание в разъёме порта А, а информационные контакты подключить в основную колодку

Калибровка датчика влажности почвы.

Калибровка датчика влажности почвы.

Так как датчик влажности аналоговый его нужно откалибровать. Взять диапазон чувствительности и перевести в процент (%) влажности. Для этого я написал небольшую программу, которая считывает показания и выводит данные значения на дисплей. Внизу статьи вы можете скачать данную программу для UIFlow и среды разработки Arduino IDE.

Калибровка датчика влажности почвы.

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

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

Затем производим замеры при погруженном в воду датчике. Полученные значения также указываем в программе.

На этом калибровка завершена, осталось перевести показания в процент (%) влажности

На этом калибровка завершена, осталось перевести показания в процент (%) влажности, что мы и сделаем в программе.

Программа полива комнатных растений в среде UIFlow.

Сделать систему полива в среде разработки UIFlow достаточно просто. Самый сложный момент — это перевод полученных значений при калибровки в процент (%) влажности почвы. И тот факт, что при погружении в воду значение минимальное, потребуется применение некоторых математических знаний. Но вам не нужно писать формулы и разбираться, что к чему. Я уже все прописал, а вам достаточно в программе указать минимальное и максимальное значения при калибровке, загрузить программу в M5Stack. Программу постарался сделать максимально универсальную: её можно использовать не только для M5Stack Core 2, но и для M5Stack GRAY, M5Stack FIRE и других базовых моделей с двухдюймовыми дисплеями и тремя кнопками.

Программа полива комнатных растений в среде UIFlow.

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

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

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

Для комфортной работы вывел следующую информацию на дисплей:

  • Уровень влажности почвы;
  • Состояние помпы: включена или выключена;
  • Уровень заряда батареи – полив может работать от встроенного аккумулятора и даже, если выключат электричество, устройство будет работать автономно ещё некоторое время.

Для комфортной работы вывел следующую информацию на дисплей:

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

В программе добавил принудительное включение и выключение помпы при нажатии кнопки «А»

Также добавил регулировку яркости подсветки дисплея, при нажатии на сенсорную кнопку «С» яркость изменяется от 20 до 100 %.

Также добавил регулировку яркости подсветки дисплея, при нажатии на сенсорную кнопку «С»

Интерфейс получился достаточно красивый, но вот вывести текст на русском языке нельзя. Для Arduino IDE есть пример «Display_Unicode», который позволяет вывести текст на русском. Сейчас проверим так ли это.

Программа автоматического полива комнатных растений в среде Arduino IDE.

Для начала проверил вывод русского текста на дисплей M5Stack. Да, действительно, текст выводится на русском языке, но есть небольшая проблема: использовать можно только подгруженный шрифт в определенной кодировке. При работе с динамическим обновлением значений происходит наложение символов. Похоже, фон текста не поддерживается. Решил использовать костыль, а именно: закрашивать область прямоугольником и затем выводить текст. Но предыдущий текст также не закрывается. В чём проблема и как её решить пока не знаю. Если у вас есть предложения по решению данной проблемы, пишите их в комментариях.

вывести текст на русском языке нельзя. Для Arduino IDE есть пример «Display_Unicode», который позволяет вывести текст на русском.

Как и писал раннее, для Arduino IDE написал скетч калибровки датчика влажности. Скачать его можно внизу статьи в разделе «файлы для скачивания».

В среде Arduino IDE сделать красивый интерфейс сложнее. У меня получился вот такой результат.

В среде Arduino IDE сделать красивый интерфейс сложнее.

Программа по функциональности получилась точно такая же, как и в UIFlow. И на дисплей выводится аналогичная информация. С помощью сенсорных кнопок можно управлять яркостью подсветки дисплея, узнать IP адрес устройства, принудительно включить помпу.

управление устройством по Wi-Fi сети с помощью приложения для телефона на операционной системе Android

Так как растение может стоять в труднодоступном месте, я решил сделать управление устройством по Wi-Fi сети с помощью приложения для телефона на операционной системе Android.

Настройка среды Arduino IDE для работы с платой M5Stack Core 2.

Для того, чтобы начать программировать M5Stack Core 2 в среде Arduino IDE необходимо установить драйвера и добавить плату в среду разработки. Об этом подробно рассказано на официальном сайте. Все по аналогии с настройкой платы ESP32.

Настройка среды Arduino IDE для работы с платой M5Stack Core 2.

После этого можно загрузить скетч в устройства.

После этого можно загрузить скетч в устройства.

Внимание! Скетч нужно обязательно разархивировать. Запускаем нужный файл «WATERING_1.1.ino». После этого должно открыться несколько вкладок, как показано на картинке ниже.

Скетч нужно обязательно разархивировать. Запускаем нужный файл «WATERING_1.1.ino»

Что нужно настроить в прошивке автоматического полива?

Скетч нужно обязательно разархивировать. Запускаем нужный файл «WATERING_1.1.ino»

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

 Это процент поддерживаемой влажности почвы и калибровочные данные.

Затем настроить подключение к вашей Wi-Fi сети. Если данные не указывать, устройство поднимет свою точку доступа с именем «ATPomp» и паролем по умолчанию «012345678». В таком случае в приложении нужно указать IP «192.168.4.1».

 Это процент поддерживаемой влажности почвы и калибровочные данные.

Приложение для телефона для управления поливом комнатных растений.

После того, как всё настроено и прошивка загружена в M5Stack, нажимаем на кнопку «В», которая располагается по середине. После чего на экране выше кнопки увидим IP – адрес устройства. Если вам выдаст одни нули, это означает, что устройство не подключилось к вашей Wi-Fi сети и подняло свою точку доступа. Как подключиться к ней я рассказывал ранее.

Сейчас можно перейти к приложению, скачать которое можно внизу статьи в разделе «файлы для скачивания».

В приложении на странице настроек указываем полученный IP- адрес.

В приложении на странице настроек указываем полученный IP- адрес.

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

На основной странице приложения отображается точно такая же информация, что и на дисплее. Однако тут добавлено поле «яркость». Это позволит проконтролировать, чтобы дисплей не светился ярко, когда этого не нужно.

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

Тут есть особенность в управление помпой с приложения. Одна кнопка включает помпу, а вторая выключает, поэтому нужно быть внимательнее, чтобы не оставить включённым насос полива.

Проверка работоспособности системы полива растений.

Все подключено и запрограммировано. Далее подключаем капиллярные шланги к помпе, наливаем воды в резервуар. Я буду использовать стеклянную банку объёмом 1 литр.

Подопытное растение у меня будет каланхоэ, которое раньше у меня цвело, но последние 2 года не цветет.

Подопытное растение у меня будет каланхоэ, которое раньше у меня цвело, но последние 2 года не цветет. Возможно, как раз ему нахватает влаги. Вот заодно и проверю.

Установил измерительный зонд в почву рядом с растением.

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

Затем проверил скетч, написанный в среде Arduino IDE.

Затем проверил скетч, написанный в среде Arduino IDE. Результат аналогичный. Теперь пришло время проверить работу приложения. Как я и ожидал, информация отображается, помпа включается и выключается.

проверить работу приложения.

Пришло время поставить растение на место и забыть про полив. Главное не забыть про то, что нужно добавлять воду в резервуар.

Пока делал данную самоделку, придумал несколько доработок которые можно сделать, если данная тема будет интересна:

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

Полезные ссылки:

  1. Онлайн компилятор UIFlow
  2. Англоязычный сайт
  3. Полезные видеоматериалы, русскоязычные описания устройств линейки M5Stack
  4. Настройка UIFlow - M5Core2
  5. Настройка Arduino IDE
  6. Описание Watering
  7. LCD Screen Arduino IDE

Если у вас есть предложения по данному проекту, пишите их в комментарии.

Понравился проект Автоматический полив комнатных растений на M5Stack? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Обзор M5Stack Core2. Настройка UIFlow M5Stack http://arduino-tex.ru/news/95/obzor-m5stack-core2-nastroika-uiflow-m5stack.html Константин Portal-PK 2021-12-13T14:35:12+03:00 Сегодня в обзоре рассмотрим M5Stack Core2 на базе микроконтроллера esp32. Данный девайс оснащен двухдюймовым ёмкостным сенсорным дисплеем, тремя сенсорными кнопками, микрофоном, динамиком, разъёмом под карту памяти формата microSD, Wi-Fi, Bluetooth. И это еще не все, что имеется на борту данного устройства размером 54 x 54 x 16 мм. Запрограммировать M5Stack можно с помощью Arduino IDE, MicroPython и UIFlow. Но обо всем по порядку.


Технические характеристики M5Stack Core2.

В отличие от предшественников M5Stack GRAY, M5Stack FIRE и других, модель M5Stack Core2 оснащена двухдюймовым ёмкостным экраном. Традиционные 3 кнопки устройства сделаны также сенсорными. В связи с тем, что устройство реализовано на ESP32, оно имеет Wi-Fi и Bluetooth. Для автономной работы устройство оснащено батареей ёмкостью 390 мАч.

Технические характеристики M5Stack Core2.

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

Параметр Значение
Отличительные особенности микроконтроллера ESP32-D0WD-V3 Два ядра с тактовой частотой 240 МГц, синтетический тест производительности 600 DMIPS, SRAM-память ёмкостью 520 Кбайт, беспроводные интерфейсы Wi-Fi, и двухрежимный Bluetooth
Объём флеш-памяти, Мбайт 16
Объём PSRAM-памяти, Мбайт 8
Напряжение питания и ток потребления, В @ мА 5 @ 500
Проводные интерфейсы USB Type-C x 1 шт., GROVE (I2C + I/O + UART) x 1 шт.
Жидкокристаллический дисплей Тип IPS. Диагональ 2 дюйма. Разрешение 320 x 240 пикселей. Модель ILI9342C
Модель сенсорного источника ввода FT6336U
Модель динамика 1W-0928
Светодиодная индикация Индикатор заряда аккумулятора зелёного цвета
Кнопки Физические кнопки питания и перезагрузки. Три сенсорные программируемые кнопки.
Вибрация Есть вибромотор
Модель цифрового микрофона SPM1423
Модель усилителя цифрового аудиосигнала на шине I2S NS4168
Модель 6-осевого инерциального датчика (IMU) MPU6886
Модель часов реального времени (RTC) BM8563
Модель микросхемы управления питанием (PMU) AXP192
Модель преобразователя USB-UART CP2104
Модель стабилизатора постоянного напряжения (DC-DC) SY7088
Максимально допустимая ёмкость TF-карты памяти, Гбайт 16
Литиевый аккумулятор. Ёмкость и напряжение, мА·ч @ В 390 @ 3,7
Антенна Объёмная (3D). Рабочая частота 2,7 ГГц
Диапазон рабочих температур от 0 до 40 °C (32 ~ 104 °F)
Масса нетто, г 52
Масса брутто, г 70
Размеры изделия, мм 54 x 54 x 18
Размеры упаковки, мм 75 x 60 x 20
Материал пластик поликарбонат

Комплектация M5Stack Core2. Где купить m5stack?

Для жителей России с быстрой доставкой купить M5Stack Core2 можно на сайте https://m5stack.pro. Кроме Core2 тут есть и другие базовые модели, юниты и расходные материалы. Для моих читателей предусмотрена скидка в данном магазине 10%, которая действует до 31.12 2021. Купон на скидку: PORTAL.

Комплектация M5Stack Core2. Где купить m5stack?

На сайте m5stack.pro также идет предновогодняя акция на новогодние наборы. Подробнее смотрите тут.

На сайте m5stack.pro также идет предновогодняя акция на новогодние наборы.

M5Stack Core2 приходит в пластиковой коробке. В ней находится не только устройство, но и кабель USB Type-C длиной 20 см, с помощью которого можно заряжать устройства и загружать программы с компьютера.

M5Stack Core2 приходит в пластиковой коробке. В ней находится не только устройство, но и кабель USB Type-C

На устройство предустановлена демонстрационная программа, которая позволяет проверить основные возможности. Для этого достаточно включить M5Stack Core2.

включить M5Stack Core2.

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

купить M5Stack Core2

Это достаточно долго и по цене выйдет дороже, поэтому лучше купить M5Stack Core2 и начать создавать интересные проекты.

Настройка M5Stack Core2 для работы в UIFlow.

Демонстрационная информация — это хорошо. Но как начать делать свои проекты на M5Stack Core2?

Тут есть 2 пути:

- использовать Arduino IDE (о чем расскажу в следующем проекте);

- воспользоваться UIFlow.

Настройка M5Stack Core2 для работы в UIFlow.

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

Настройка UIFlow.

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

  • Первым делом нужно установить драйвера для вашей операционной системы, которые можно скачать тут или внизу страницы в разделе «файлы для скачивания»

  • После установки драйверов и подключения устройства к ПК по USB, заходим в диспетчер устройств Windows. Необходимо убедиться, что устройство M5Stack Core2 подключено и компьютер его видит

ПК по USB, заходим в диспетчер устройств Windows

  • Далее дважды щёлкните по иконке M5Burner.

Далее дважды щёлкните по иконке M5Burner.

  • Выберите соответствующий тип устройства в меню слева.

Выберите соответствующий тип устройства в меню слева.

  • Выберите нужную версию прошивки и нажмите кнопку загрузить «Download».

Выберите нужную версию прошивки и нажмите кнопку загрузить «Download».

  • Затем подключите устройство M5 к компьютеру с помощью кабеля Type-C, выберите соответствующий COM-порт, скорость передачи данных и нажмите кнопку «Burn», чтобы начать прошивку устройства для работы с UIFlow.

нажмите кнопку «Burn», чтобы начать прошивку устройства для работы с UIFlow.

  • Также можно указать информацию о подключении к вашей Wi-Fi.

Также можно указать информацию о подключении к вашей Wi-Fi.

  • По завершению вы увидите надпись о том, что все выполнено успешно «Burn Successfully».

По завершению вы увидите надпись о том, что все выполнено успешно «Burn Successfully».

Если вам нужно изменить настройки, для этого нужно нажать кнопку «Configuration».

Платформа программирования UIFlow и получение КЛЮЧА API.

Платформа программирования UIFlow и получение КЛЮЧА API.

Программирование — это режим подключения между устройством M5 и платформой веб-программирования UIFlow. На экране отобразится текущее состояние сетевого подключения устройства.

В ситуации «по умолчанию» после первой успешной настройки сети Wi-Fi устройство автоматически перезагрузится

В ситуации «по умолчанию» после первой успешной настройки сети Wi-Fi устройство автоматически перезагрузится и перейдет в режим программирования. Если вы не знаете, как повторно войти в режим программирования после запуска других приложений, вы можете проделать следующие действия.

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

Где указывать КЛЮЧ API в программе UIFlow?

КЛЮЧ API — это учетные данные для связи устройств M5 и UIFlow. Эти данные необходимо указать на сайте flow.m5stack.com в веб-браузере компьютера, чтобы войти на страницу программирования UIFlow. При входе на сайт во всплывающем окне вам будет предложено выбрать тип устройства, язык интерфейса и поля ввода ключа. После чего необходимо нажать кнопку «Ок». Если вы сделали все правильно, откроется среда для разработки.

Где указывать КЛЮЧ API в программе UIFlow?

В случае, если вы зашли на сайт и вам нужно поменять настройки, нажмите на кнопку «Setting».

В случае, если вы зашли на сайт и вам нужно поменять настройки, нажмите на кнопку «Setting».

Создание первой программы в UIFlow.

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

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

Мы увидим элемент на дисплее и его координаты расположения.

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

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

Для проверки, что получилось нажимаем на кнопку «Пуск» в верхнем правом углу.

Для проверки, что получилось нажимаем на кнопку «Пуск» в верхнем правом углу. После удачной загрузки на устройство, вы увидите надпись об удачной загрузке кода, а на M5Stack Core2 увидите созданный интерфейс.

Для того чтобы интерфейс выполнял различные действия достаточно в меню блочного программирования перейти в раздел «UI». Тут появляются все добавленные элементы на экран. Кликаем на элемент, после этого откроется список доступных блоков программирования для данного элемента.

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

Если у вас блоки отображаются не так, как у меня (не корректно), необходимо поменять язык интерфейса программы на английский. После этого все блоки будут отображены в виде списка.

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

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

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

Пример программы вы можете скачать внизу статьи и загрузить для проверки на свое устройство M5Stack Core2.

ример программы вы можете скачать внизу статьи и загрузить для проверки на свое устройство M5Stack Core2.

В среде разработки UIFlow представлен пример программы позволяющей рисовать на экране.

В среде разработки UIFlow представлен пример программы позволяющей рисовать на экране.

Выбираем данную программу и загружаем на устройство.

Выбираем данную программу и загружаем на устройство.

После чего на дисплее M5Stack Core2 можно нарисовать различные рисунки. Например, вот такой смайлик.

 После чего на дисплее M5Stack Core2 можно нарисовать различные рисунки. Например, вот такой смайлик.

Программирование M5Stack в UIFlow на MicroPython.

Помимо вышеперечисленных преимуществ, мне еще понравилась возможность UIFlow программировать блоками и посмотреть полученную программу на MicroPython. Достаточно нажать на кнопку «Python».

Достаточно нажать на кнопку «Python».

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

Под изображением устройства есть «Файловый менеджер», в котором находятся файлы написанные на Python.

Под изображением устройства есть «Файловый менеджер», в котором находятся файлы написанные на Python. Суда можно добавлять, редактировать и удалять файлы. Данные файлы можно запускать напрямую с устройства. Для этого при загрузке нужно выбрать раздел «App».

Более подробно ознакомиться со средой разработки UIFlow вы можете на официальном сайте в разделе «Документация».

Более подробно ознакомиться со средой разработки UIFlow

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

Полезные ссылки:

  1. Онлайн компилятор UIFlow
  2. Англоязычный сайт
  3. Полезные видеоматериалы, русскоязычные описания устройств линейки M5Stack
  4. Настройка UIFlow - M5Core2
  5. Настройка Arduino IDE

Подведём итог.

M5Stack Core2 мне понравился большим набором функций. Достаточно хорошая документация и большое количество примеров.

Но есть и минусы:

  • Маленький размер экрана.
  • Есть некоторые проблемы с работой в среде UIFlow. О некоторых я рассказал в данном обзоре.
  • Нет возможности вывода русского текста. Есть костыль для Arduino IDE.

Как мы видим, минусы относительные и напрямую не связаны с самим устройством. И при желании их можно избежать. Вы скажете: «Как же размер экрана?» И тут есть пути решения! Обо всем этом я расскажу в следующих статьях про данное устройство.

Понравилась статья Обзор M5Stack Core2. Настройка UIFlow M5Stack? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Arduino напряжение на выходе с точностью до 0,01 В. http://arduino-tex.ru/news/94/arduino-napryazhenie-na-vyhode-s-tochnostyu-do-001-v.html Константин Portal-PK 2021-12-07T15:19:46+03:00 Делал недавно один небольшой заказ на Arduino. По заданию нужно регулировать напряжение в диапазоне от 0 В до 4,5 В с точностью 0,01 В. Задача несложная, но есть одна проблема. ШИМ Ardiono всего 8 bit, что позволяет нам получить 256 шагов изменения выходного сигнала. Как выйти из данной ситуации рассмотрим в данной статье.


Регулирование выходного напряжения с помощью ESP32.

Самое простое решение данной задачи — это использовать отладочную плату на базе ESP32, которая имеет ШИМ сигнал 16 bit. Но заказчик сказал, что у него в наличии только Arduino UNO. И использовать ESP32 нет возможности. Пришлось искать варианты решения с использованием Arduino.

Регулирование выходного напряжения с помощью ESP32.

16 бит ШИМ Arduino вместо стандартных 8.

Поискал я в интернете с помощью чего же можно увеличить рабочий диапазон ШИМ. И в этом мне помогла статья AlexGyver «Увеличение частоты ШИМ». Также у него есть библиотека, которая позволяет управлять частотой и PWM, что упрощает работу. Скачать библиотеку «GyverPWM» можно тут.

Библиотека достаточно хорошо описана и разобраться как ей пользоваться несложно. На странице описания библиотеки есть таблица «Таблица №1 частот для расширенной генерации ШИМ (PWM_resolution)», которая позволит настроить нужную разрядность.

Таблица №1 частот для расширенной генерации ШИМ (PWM_resolution)

Я использовал 12 бит для регулирования напряжения 5 В и 16 бит для регулирования напряжения 12 В.

Я использовал 12 бит для регулирования напряжения 5 В и 16 бит для регулирования напряжения 12 В.

Для работы нужно выставить разрядность pin Arduino.

// запустить ШИМ на D10, разрядность 12 бит (0-4095), частота 3.9 кГц, режим FAST_PWM
  PWM_resolution(10, 12, FAST_PWM);

Затем установить выходное значение с помощью следующей функции.

PWM_set(10, 2048);

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

Описание работы регулятора напряжения на Arduino.

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

Схема работы регулятора напряжения на Arduino.

Первым делом нужно замерить опорное напряжение, так как источники питания имеют погрешность, а на выходе нужно получить достаточно точное значение. Провел эксперимент и замерил напряжения различных источников питания 5 В, которые были у меня. Напряжение варьирует от 5,12 В до 4,7 В. Вот почему важно использовать опорное напряжение.

Чтобы получить на выходе напряжения не забудьте использовать RC фильтр, на частоту среза в 100 раз меньше чем частота ШИМ.

Сохраняем данное значение. Для этого у меня сделана отдельная страница настроек.

Сейчас можно приступить к регулированию напряжения.

Сейчас можно приступить к регулированию напряжения. Но нужно помнить, что регулировать можно от 0 В до опорного напряжения. Если оно составляет 4,7 В, то больше значения выставлять нельзя.

Регулирование 12 В с помощью Arduino.

Так как я понимаю, что будут вопросы о регулировании напряжения больше опорного напряжения Arduino. Рассмотрим пример регулирования 12 В. Для этого в схему добавил IRF520N MOSFET модуль 140C07.

ассмотрим пример регулирования 12 В. Для этого в схему добавил IRF520N MOSFET модуль 140C07.

По аналогии с предыдущим примером нужно замерить опорное напряжение и указать его в настройках. Затем можно приступать к регулированию. В данном примере я уже использовал 16 bit PWM.

 Затем можно приступать к регулированию. В данном примере я уже использовал 16 bit PWM.

Как видим при изменении, напряжения больше на 0,43 – 0,45 В установленного на дисплее управления. Это скорее всего связанно с тем, что у меня не очень точный мультиметр, и при измерении опорного напряжения показания получены не совсем верные. Для таких работ нужны более точные приборы, но в целом результат неплохой. И при необходимости можно получить нужный диапазон регулирования. Но так как 12 В я протестировал только ради эксперимента, искать в чем погрешность не стал.

Подведём итоги.

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

Понравился проект Arduino напряжение на выходе с точностью до 0,01 В? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
4 канальное Wi-Fi реле на esp8266 (NodeMCU) с приложением http://arduino-tex.ru/news/93/4-kanalnoe-wi-fi-rele-na-esp8266-nodemcu-s-prilozheniem.html Константин Portal-PK 2021-12-02T14:07:21+03:00 Продолжаю тему беспроводного управления реле. В предыдущем проекте я делал управление реле с помощью bluetooth. Сегодня рассмотрим, как можно реализовать 4 канальное Wi-Fi реле на esp8266. Для удобства управления устройством, написал приложения для телефона на Xamarin C#. А в прошивке для esp8266 (NodeMCU) реализовал поддержку высокоуровневого и низкоуровневого реле. С возможностью использовать для управления реле внешней кнопки с фиксацией и без фиксации. Для чего все это нужно, сейчас подробно рассмотрим.


Приложение для управления WiFi реле на esp8266 (NodeMCU).

Давайте рассмотрим приложение, которое позволит управлять WiFi реле на esp8266 (NodeMCU). На главной странице приложения расположены элементы управления реле. Тут присутствуют кнопки, позволяющие включать и выключать 4 реле. Ниже есть 2 кнопки, которые позволяют включить и выключить все реле одновременно.

Приложение для управления WiFi реле на esp8266 (NodeMCU).

Если вдруг не получилось подключиться к устройству или нет подключения к Wi-Fi сети, внизу появится надпись «Нет подключения».

нет подключения к Wi-Fi сети, внизу появится надпись «Нет подключения»

Вторая страница - «Настройки». Для того чтобы перейти к настройкам, нужно нажать на кнопку с иконкой шестерёнки, в верхнем правом углу.

Вторая страница - «Настройки».

На странице настроек можно задать IP-адрес устройства о том, как его узнать, об этом расскажу позднее.

На странице настроек можно задать IP-адрес устройства

После того, как IP адрес указан, можно нажать кнопку «Сохранить», что позволяет сохранить данные, и их уже не нужно будет вводить при следующем запуске приложения.

Внизу выводится статус подключения к сети.

Внизу выводится статус подключения к сети. Если подключение к устройству не установлено, выводится надпись «Нет подключения». После подключения, надпись меняется на «Соединение установлено».

Также планировал вынести в настройки выбор типа подключённого реле:

  • Высокого уровня
  • Низкого уровня.

И выбор внешнего управления:

  • Кнопка с фиксацией
  • Кнопка без фиксации.

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

Схема подключения WiFi реле на NodeMCU.

Давайте рассмотрим схему подключения. Чтобы в дальнейшем было понятно, для чего у нас та или иная строчка кода в прошивке. В проекте буду использовать отладочную плату NodeMCU. Вы можете использовать любую плату на ESP8266, с достаточным количеством pins для данного проекта.

Схема подключения WiFi реле на NodeMCU.

Как видим, в данной схеме используются обычные тактовые кнопки. Вместо которых, можно использовать выключатели. Они будут выступать в роли кнопки с фиксацией. Для сборки на стенде использовал 2 выключателя и 2 лампочки, которыми буду управлять. Схема для тестирования проекта WiFi реле на NodeMCU будет выглядеть следующим образом.

Схема для тестирования проекта WiFi реле на NodeMCU

Прошивка Wi-Fi реле на esp8266 (NodeMCU).

Давайте перейдем к прошивке Wi-Fi реле на esp8266 (NodeMCU). И рассмотрим основные параметры, которые стоит изменить. В первую очередь, нужно настроить среду Arduino IDE для поддержки плат ESP8266, как это сделать - подробно рассказываю вот в этой статье.

Внимание! Перед тем как открыть скетч код, обязательно нужно разархивировать. Запускать надо файл «Relay-1.2.ino». Если вы сделали все правильно, откроется несколько вкладок с кодом.

Прошивка Wi-Fi реле на esp8266 (NodeMCU)

В самой прошивке необходимо настроить подключение к вашей Wi-Fi сети, указав логин и пароль.

подключение к вашей Wi-Fi сети, указав логин и пароль.

Если у вас нет возможности подключиться к сети, оставьте данные поля без изменения, и настройте поля ниже, которые отвечают за точку доступа, которая автоматически поднимется. Для подключения к которой, на телефоне нужно найти Wi-Fi сеть с указанным названием. В моем случае это "ATRelay". При подключении указать пароль, который изменили в прошивке. При таком подключении в приложении нужно указать IP-адрес «192. 168. 4. 1». Который вы также можете поменять в прошивке.

Wi-Fi сеть с указанным названием. В моем случае это "ATRelay".

Если же вы подключаетесь к домашней Wi-Fi сети, после загрузки нужно открыть монитор порта, в котором увидите IP-адрес устройства, его то и нужно указать в приложении.

открыть монитор порта, в котором увидите IP-адрес устройства

 его то и нужно указать в приложении

Сеть настроили, давайте перейдём к настройке работы с реле. Для этого есть переменная «level» ,которая отвечает, какое реле будем использовать:

  • 0 – подключено низкоуровневое реле;
  • 1 – подключено высокоуровневое реле.

Сеть настроили, давайте перейдём к настройке работы с реле. Для этого есть переменная «level»

Затем нужно выбрать внешний источник управления, тип которого задается в переменной «fixing»:

  • 1 -кнопка с фиксацией (можно использовать обычный выключатель);
  • 0 – кнопка без фиксации.

Если вы будете иcпользовать не NodeMCU в своем проекте, то вам скорее всего нужно будет поменять пины подключения, которые находятся в следующих массивах.

Если вы будете иcпользовать не NodeMCU в своем проекте

Можно данную прошивку Wi-Fi реле использовать в ESP32?

Уже предчувствую кучу подобных вопросов. К сожалению, использовать прошивку Wi-Fi реле с ESP32 не получится. Тут нужно внести некоторые изменения в схеме подключения или написать очень много кода для адаптации прошивки. Что я, к сожалению, не предусмотрел. Но в следующей версии прошивки обязательно сделаю поддержку ESP32.

Исходники приложения для телефона на Xamarin C# «Wi-Fi реле».

В связи с тем, что приложение написано на Xamarin C# в коде есть некоторые моменты, которые нужно настраивать, и даже если я выложу исходники в открытый доступ. Помочь всем у меня просто не будет времени. Поэтому исходники можно скачать по подписке, на сайте Бусти. Там же проконсультирую по всем возникшим вопросам.

Wi-Fi реле управления двумя лампочками.

Так как мой стенд сделан под 2 выключателя и 2 лампочки, пример работы покажу на 2 источниках управления.

Wi-Fi реле управления двумя лампочками.

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

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

И на низкоуровневом электромагнитном реле.

И на низкоуровневом электромагнитном реле.

Все работает отлично. Можно включать свет с выключателя и при этом параллельно управлять с приложения. Но тут есть небольшой нюанс. Приоритет у приложения, и мы можем управлять реле с его помощью, как пожелаем. Даже если свет был включен или включен с помощью выключателя. Но если включить свет с помощью выключателя и выключить с помощью приложения, для того чтобы свет снова включить, выключателем нужно сперва перевести включатель в положения выключения света и после чего произвести включение. Это, конечно, немного не удобно, но вы можете управлять светом не вставая с дивана. И не нужно думать: «в правильном положении выключатель или нет».

 Приоритет у приложения, и мы можем управлять реле с его помощью, как пожелаем.

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

Перед сборкой на стенде, проверил работоспособность устройства на макетной плате.

Перед сборкой на стенде, проверил работоспособность устройства на макетной плате. Протестировал работу всех 4 каналов управления. И все 4 комбинации реле и кнопок. Так что проект готов к любым ситуациям ;).

Подведем итог.

4 канальное Wi-Fi реле на esp8266 (NodeMCU) с приложением получилось достаточно функциональное и легко настраиваемое под разные варианты применения, но не смотря на это, можно сделать ряд дополнений в приложении и в коде. Например: добавить таймеры, расписание, подключение различных датчиков и пр. Также планирую сделать универсальную прошивку под платы ESP8266, ESP32.

4 канальное Wi-Fi реле на esp8266 (NodeMCU) с приложением получилось достаточно функциональное

Если у вас есть предложения, пишите их в комментариях.

Понравился проект 4 канальное Wi-Fi реле на esp8266 (NodeMCU) с приложением? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Умный Wi-Fi замок своими руками. http://arduino-tex.ru/news/92/umnyi-wi-fi-zamok-svoimi-rukami.html Константин Portal-PK 2021-11-24T16:04:12+03:00 После того как я сделал электронный замок с дисплеем, мне написали, что лучше сделать беспроводной замок. Дешевле и менее заметный. Поэтому я решил сделать Умный Wi-Fi замок своими руками на базе ESP8266. Управлять данным замком можно с помощью мобильного приложения. Что понадобится для того чтобы сделать такой замок сейчас расскажу.


Электроника умного Wi-Fi замка.

В предыдущем примере использовал следующую электронику для управления замком:

  • Электромагнитная защелка
  • MOSFET транзистора IRF520N
  • Конечный выключатель
  • Arduino UNO
  • Дисплей Nextion

Электроника умного Wi-Fi замка.

В данном проекте электроника будет совсем другая это связано со спецификой управления. Также решил поменять MOSFET транзистора IRF520N на драйвер L298n. Это связанно с тем, что на борту драйвер имеется стабилизатор на 5 В. Поэтому не нужно использовать дополнительные понижающие DC-DC преобразователи. Достаточно подвести линию 12 В. Или подключить аккумуляторный блок питания данного номинала по напряжению.

Мозгом данного проекта будет плата NodeMCU на базе микроконтроллера ESP8266

Мозгом данного проекта будет плата NodeMCU на базе микроконтроллера ESP8266. В итоге понадобятся следующие комплектующие:

  • Электромагнитная защелка
  • Драйвер L298n
  • Конечный выключатель
  • NodeMCU

Схема подключения Wi-Fi замка.

Схема подключения Wi-Fi замка.

Электронику Wi-Fi замка собираем вот по такой схеме.

Собираем электронный замок.

Для тестов собрал всю электронику будущего замка на макетной плате.

Для тестов собрал всю электронику будущего замка на макетной плате.

Протестировал на работоспособность. Сейчас можно приступить к установке на макет двери.

Установил драйвер L298n

Установил драйвер L298n

Затем подключил все провода к NodeMCU.

Затем подключил все провода к NodeMCU.

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

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

Протестировал. Все подключено правильно. Можно приступать к съёмкам видео.

Протестировал. Все подключено правильно. Можно приступать к съёмкам видео.

Прошивка Wi-Fi замка.

Для того чтобы загрузить прошивку нужно настроить среду Arduino IDE для работы с платой NodeMCU. Как это сделать, подробно расписано вот в этой статье.

Затем нужно указать название вашей wi-fi сети и пароль от нее. Если вас интересует более подробная информация по данной теме смотрите мои уроки по ESP866.

Затем нужно указать название вашей wi-fi сети и парольЗатем настраиваем следующие параметры:

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

Затем настраиваем следующие параметры

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

Внимание! Пины с прификсом «D» работают только для платы NodeMCU, если вы используете другую отладочную плату на ESP8266, смотрите распиловку платы.

Описание приложения управления замком для телефона.

Приложение для телефона написал на xamarin c#. Это мое первое приложение для телефона написанное на данном языке. Правда, я уже делал приложение для ПК на c#. Но, не смотря на небольшой навык, приложение сделано не совсем красиво. С достаточным набором функций для того, чтобы можно было комфортно управлять wi-fi замком.

Описание приложения управления замком для телефона.

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

В приложении можно указать IP адрес устройства, который можно узнать, если после загрузки прошивки

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

Ниже поле ввода пароль, который указали в прошивке для ESP8266.

Ниже поле ввода пароль, который указали в прошивке для ESP8266.

Кнопка «Открыть» отправляет данными на устройстве. Под кнопкой надпись сигнализирует «Зарыта» дверь или «Открыта».

Если пароль введён неверно, внизу появится надпись «Неверный пароль 1». Цифра в конце указывает, сколько неверных попыток ввести пароль, было совершено. После указанного числа попыток в прошивке, устройство блокируется на время, которое также указывается в прошивке. В приложении появится надпись «Заблокировано». По истечению времени надпись сигнализирующая о блокировке устройства исчезнет. После чего можно снова водить пароль.

Если вы не подключились к Wi-Fi сети

Если вы не подключились к Wi-Fi сети или устройство не доступно, в приложении вы увидите надпись «Нет соединения».

Подписаться на закрытый канал можно тут.

Подведём итоги.

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

При этом данную реализацию Wi-Fi замка можно спрятать от любопытных глаз.

При этом данную реализацию Wi-Fi замка можно спрятать от любопытных глаз.

Понравился проект Умный Wi-Fi замок своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Сенсорный кодовый замок на мебель или дверь. http://arduino-tex.ru/news/91/sensornyi-kodovyi-zamok-na-mebel-ili-dver.html Константин Portal-PK 2021-11-04T12:13:33+03:00 Тему контроля доступа я уже затрагивал в одном из предыдущих проектов. А сегодня рассмотрим пример реализации сенсорного кодового замка, который можно установить на мебель. А если внести небольшие доработки. Установить кнопку для открытия двери изнутри, то данное устройство можно поставить на входную дверь. На дисплее отображается состояние, закрыт замок или открыт, также статус блокировки ввода пароля. Кроме этого есть другие элементы упрощающие работу с замком, но обо всем по порядку.


Создаем интерфейс для сенсорного замка.

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

Создаем интерфейс для сенсорного замка.

Для дизайна нам понадобиться 4 картинки:

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

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

Основные надписи и кнопки в пассивном состоянии.

Основные надписи и кнопки в пассивном состоянии.

Кнопки в активном состоянии, т.е. при нажатии.

Кнопки в активном состоянии, т.е. при нажатии.

Фон с надписью «Заблокировано» - используется только для вывода одной надписи, которую можно вывести просто текстом и данное изображение не понадобится. Но я решил использовать одинаковый стиль текста. Что не позволяют сделать стандартные шрифты.

Фон с надписью «Заблокировано»

Далее понадобится программа Nextion Editor для создания интерфейса замка. Про процесс создания интерфейса я снял отельное видео и написал урок, который можно посмотреть тут. Поэтому останавливаться на этом моменте не буду.


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

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

Так как закрывать и открывать будет электромагнитная защелка понадобится источник питания на 12 вольт. Записать Arduino можно через понижающий DC-DС преобразователь. Конечно Arduino UNO имеет стабилизатор на боту и запитать можно напрямую от 12 В. Но стабилизатор рассчитан на небольшое потребление, а нам нужно подключить сенсорный экран к линии 5В. Поэтому я не стал экспериментировать и подал отельное питание 5В.

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

Настройка прошивки для Arduino.

После того как все подключено по схеме, приведенной выше. Нужно загрузить прошивку в дисплей и в Arduino.

После того как все подключено по схеме, приведенной выше. Нужно загрузить прошивку в дисплей и в Arduino. В прошивке для Arduino менять ничего не нужно, разве что задать пароль, который поменять можно в 13 строчке кода.

В прошивке для Arduino менять ничего не нужно, разве что задать пароль, который поменять можно в 13 строчке кода.

Пароль может быть любое число от 1 до 4 символов. Длину пароля можно поменять в прошивке дисплея и при необходимости сделать 5,6,7 или более символов. Также можно сделать более продвинутую клавиатуру добавив буквы или спец символы. И пароль сделать более сложным. Но все зависит, где вы планирует использовать данное устройство.

После того как пароль задан загружаем код в Arduino.

После того как пароль задан загружаем код в Arduino.

Проверка работоспособности кодового замка на Arduino.

Для проверки работоспособности кодового замка на Arduino попробуем ввести неверный пароль.

Для проверки работоспособности кодового замка на Arduino попробуем ввести неверный пароль.

Как видим выводится надпись «Заблокировано» И время обратного отчета. Также кнопка отправки пароля блокируется. Это поможет защитить от подбора пароля. Время блокировки также можно настроить в прошивке дисплея.

После ввода верного пароля выводится надпись «Открыто»

После ввода верного пароля выводится надпись «Открыто». И пока мы не откроем дверь, защелка находится в открытом состоянии. Как только дверь открыта, с защелки снимается напряжение и она находится в закрытом состоянии.

И при закрытии двери надпись на дисплее меняется на «Закрыто».

И при закрытии двери надпись на дисплее меняется на «Закрыто». Для открытия двери нужно заново вводить пароль.

Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI.

Подведём итог.

Сенсорный кодовый замок для мебели или дверь получился функциональным при всей простоте его исполнения.

Сенсорный кодовый замок для мебели или дверь получился функциональным при всей простоте его исполнения.

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

Это всего лишь несколько идей, где можно использовать данный замок.

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

Понравился проект Сенсорный кодовый замок на мебель или дверь? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Сенсорная клавиатура для компьютера на Arduino своими руками http://arduino-tex.ru/news/90/sensornaya-klaviatura-dlya-kompyutera-na-arduino-svoimi.html Константин Portal-PK 2021-10-26T12:58:22+03:00

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


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

Давайте сделаем сенсорную клавиатуру для компьютера с функционалом «дополнительной клавиатуры».

Что такое «дополнительная клавиатур» и как она выглядит? На рисунке ниже можно увидеть обозначение основных блоков клавиатуры. Желтым цветом выделены клавиши «дополнительной клавиатуры». Данный набор клавиш используется чаше всего при работе с калькулятором на компьютере или для заполнения цифровой информации, например в таблице excel.

Давайте сделаем сенсорную клавиатуру для компьютера с функционалом «дополнительной клавиатуры».

Что понадобится для проекта «сенсорная клавиатура для ПК»?

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

Что понадобится для проекта «сенсорная клавиатура для ПК»?

Мозгом будет Arduino pro Micro, потому что данную отладочную плату можно использовать как периферийное устройство и не нужно использовать дополнительное программное обеспечение, чтобы использовать данную плату в качестве клавиатуры или компьютерной мыши.

Схема подключения самодельной сенсорной клавиатуры на Arduino Leonardo.

Подключение дисплея Nextion к Arduino pro micro осуществляется по 4 проводам. Благодаря чему данную конструкцию можно поместить в небольшой корпус или вмонтировать в стол.

Схема подключения самодельной сенсорной клавиатуры на Arduino pro Micro.

Но нужно помнить одно ограничение! Не все контакты на Arduino Leonardo и Micro поддерживают прерывания, поэтому для RX можно использовать только следующие pin: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Необходимые библиотеки для Arduino pro micro.

Необходимые библиотеки для Arduino pro micro.

Для реализации проекта нужно установить 2 библиотеки, которые можно скачать внизу статьи в разделе «файлы для скачивания»:

  1. SoftwareSerial - библиотека для эмуляции Serial порта. (Можно обойтись и без нее, но лучше аппаратный Serial порта не занимать, вдруг нужно будет выводить информацию при отладке программы).
  2. Keyboard - эти базовые библиотеки позволяют платам Arduino Leonardo, Micro или Due при подключении к компьютеру определяться как обычная мышь и/или клавиатура. Данная библиотека встроена в Arduino IDE, и дополнительно устанавливать ее не нужно.

Дизайн клавиатуры для дисплея Nextion.

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

Для данного проекта понадобится 2 картинки в пассивном состоянии кнопок.Для данного проекта понадобится 2 картинки в пассивном состоянии кнопок.

И состояние кнопок при нажатии.

Для данного проекта понадобится 2 картинки в пассивном состоянии кнопок.

Чтобы команды нажатия на клавишу передавались Arduino, для каждой кнопки нужно прописать уникальную команду, например для клавиши «0» она будет следующей:

Чтобы команды нажатия на клавишу передавались Arduino,

Можно использовать более простые команды для общения дисплея с Arduino, но как показывает опыт, при использовании коротких команд бывают проблемы.

Также можно упростить интерпретатор, тем самым уменьшить код для Arduino. Но я не стал усложнять код. Чтобы понять мог каждый, кто читал моиуроки про программирование Arduino и дисплея Nextion.

Но я не стал усложнять код. Чтобы понять мог каждый, кто читал моиуроки про программирование Arduino и дисплея Nextion.


Скетч для создания клавиатуры на Arduino pro micro.

Как пользоваться библиотекой «SoftwareSerial» уже рассказывал тут. Подробнее рассмотрим библиотеку «Keyboard», которая отвечает за передачу информации на компьютер о нажатии той или иной клавиши.

Первым делом нам нужно подключить библиотеку.

#include "Keyboard.h"

Инициализируем работу с библиотекой.

// initialize control over the keyboard:
  Keyboard.begin();

И сейчас нам нужно передать нажатие той или иной клавиши на ПК. Для этого будем использовать команду.

Keyboard.write('0');

По аналогии предаем значение других символов.

...
Keyboard.write('8');
Keyboard.write('9');
...

Передача нажатия клавиши «Enter» передаётся следующей командой.

// Enter:
    Keyboard.write(KEY_RETURN);

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

Key Шестнадцатеричное значение Десятичное значение
KEY_LEFT_CTRL 0x80 128
KEY_LEFT_SHIFT 0x81 129
KEY_LEFT_ALT 0x82 130
KEY_LEFT_GUI 0x83 131
KEY_RIGHT_CTRL 0x84 132
KEY_RIGHT_SHIFT 0x85 133
KEY_RIGHT_ALT 0x86 134
KEY_RIGHT_GUI 0x87 135
KEY_UP_ARROW 0xDA 218
KEY_DOWN_ARROW 0xD9 217
KEY_LEFT_ARROW 0xD8 216
KEY_RIGHT_ARROW 0xD7 215
KEY_BACKSPACE 0xB2 178
KEY_TAB 0xB3 179
KEY_RETURN 0xB0 176
KEY_ESC 0xB1 177
KEY_INSERT 0xD1 209
KEY_DELETE 0xD4 212
KEY_PAGE_UP 0xD3 211
KEY_PAGE_DOWN 0xD6 214
KEY_HOME 0xD2 210
KEY_END 0xD5 213
KEY_CAPS_LOCK 0xC1 193
KEY_F1 0xC2 194
KEY_F2 0xC3 195
KEY_F3 0xC4 196
KEY_F4 0xC5 197
KEY_F5 0xC6 198
KEY_F6 0xC7 199
KEY_F7 0xC8 200
KEY_F8 0xC9 201
KEY_F9 0xCA 202
KEY_F10 0xCB 203
KEY_F11 0xCC 204
KEY_F12 0xCD 205

Полный код проекта клавиатуры для ПК своими руками можно скачать внизу статьи в разделе «Файлы для скачивания».

Проверка работоспособности самодельной клавиатуры на дисплее Nextion и Arduino.

Пришло время проверить работоспособность клавиатуры на дисплее Nextion и Arduino. Так как я сделал «дополнительную клавиатуру» проверять работоспособность будем на калькуляторе. Подключаем устройства к ПК и открываем калькулятор.

Подключаем устройства к ПК и открываем калькулятор.

Давайте попробуем что-то подсчитать. Нажимаем число знак, например «+». Второе число и нажимаем клавишу «Ent». И получаем результат сложения.

И получаем результат сложения.

Как видим, все работает. Возможно, не хватает еще пару клавиш. Но зная, как это все делается, добавить дополнительные команды не составит труда. И реализовать выносную клавиатуру под необходимые требования.

Сделать самодельную USB клавиатуру достаточно просто с использованием отладочной платы Arduino pro micro.

Подведём итог.

Сделать самодельную USB клавиатуру достаточно просто с использованием отладочной платы Arduino pro micro. Также можно реализовать полноценную клавиатуру. Только возникает вопрос.А зачем? Сегодня USB клавиатура стоит не так и дорого. Если делать самодельную клавиатуру только для нестандартных задач. Например, при нажатии на 1 кнопку передавать сочетание клавиш. Например «CTRL + Backspace». А также сделать дополнительное сенсорное поле, как показано на картинке ниже.

Понравился проект Сенсорная клавиатура для компьютера на Arduino своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 10. Строим графики waveform - дисплей Nextion. http://arduino-tex.ru/news/89/stroim-grafiki-waveform---displei-nextion.html Константин Portal-PK 2021-10-22T12:31:13+03:00 Сегодня в уроке рассмотрим инструмент Waveform Nextion. Который позволит строить графики на сенсорном дисплее Nextion. Посмотрим, какие особенности нужно учитывать при построении графиков. Сгенерируем сигнал для построения 4 графиков. А также выводим график на основе показаний с Arduino.

Строим график на дисплее Nextion по сгенерированным данным таймера.

Для того чтобы посмотреть график нужно добавить в Nextion Editor поле Waveform. А также поля для вывода числа и таймер. Как пользоваться данными элементами рассказывал в предыдущих уроках про дисплей Nextion.

посмотреть график нужно добавить в Nextion Editor поле Waveform. А также поля для вывода числа и таймер.vv

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

стандартный внешний вид отображения графика

А сперва рассмотрим ограничения, о которых написано в официальной документации к дисплею Nextion:

  • Выводимый диапазон на один график от 0 до 255.
  • Один столбец пикселей выводит одно значение.

документации к дисплею Nextion

Также хотелось бы отметить параметр «dis», который отвечает за масштаб отображения данных по высоте. В предыдущих версиях Nextion Editor данного параметра не было. При этом как он влияет не совсем понятно. При уменьшении масштаб выводимых значений на графике растет. И наоборот. И не совсем понятно для чего данный параметр добавили, мы все равно ограничены в диапазоне от 0 до 255.

Также хотелось бы отметить параметр «dis», который отвечает за масштаб отображения данных по высоте.

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

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

Для этого увеличим числовое значение каждый раз по истечению времени. Таймер я настроил на минимально допустимое время 50 миллисекунд.

Таймер я настроил на минимально допустимое время 50 миллисекунд.

Чтобы график выводился нужно предать следующие параметры:


add 1,0,n0.val

  • add – кодовое слово
  • 1 – id элемента, на который предаём данные. В моем случае это 1.
  • 0 – номер графика, который будет строиться (от 0 до 3).
  • n0.val – значения которые будут выводиться на графике. (в нашем случае числовое значение, которое мы увеличиваем на единицу при каждом срабатывании таймера.)

Чтобы график выводился нужно предать следующие параметры:

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

В итоге получаем пилообразный график.

Строим максимальное количество графиков на дисплее Nextion.

Сколько можно одновременно вывести графиков на дисплей Nextion? Ответ на данный вопрос можно найти в одном из параметров настроек элемента Waveform. А именно свойство «ch» отвечает за количество выводимых графиков. Получается, что одновременно можно вывести до 4 графиков на одно поле Waveform.

одновременно можно вывести до 4 графиков на одно поле Waveform.

Также можно настроить цвет каждого графика.

Также можно настроить цвет каждого графика.

В настройках таймера сделал сдвиг графиков, чтобы они не наслаивались друг на друга, и было наглядно.

В настройках таймера сделал сдвиг графиков, чтобы они не наслаивались друг на друга, и было наглядно.

Как видим, графики строятся и все выглядит достаточно красиво.

Как видим, графики строятся и все выглядит достаточно красиво.

Вывод графиков на дисплее Nextion по полученным данным с Arduino.

Для построения графиков по данным полученным с Arduino добавил дополнительные поля «Показание» и цифровое поле для вывода значений полученных от Arduino.

Для построения графиков по данным полученным с Arduino добавил дополнительные поля «Показание»

Данные с Arduino буду выводить на первый график. Поэтому его нужно закомментировать в таймере дисплея.

Данные с Arduino буду выводить на первый график.

Сейчас осталось написать код для Arduino. Чтобы упростить передачу данных на дисплей с Arduino, написал функцию, которая передает данные в нужной последовательности на дисплей.

Чтобы упростить передачу данных на дисплей с Arduino, написал функцию

SendAdd(1, 0, Value);

  • 1 – id элемент,на который предаём данные. В моем случае это 1.
  • 0 – номер графика, который будет строиться (от 0 до 3).
  • Value – значения которые будут выводиться на графике. (в моем случае это данные с потенциометра).

Данный пример не получится проверить через Debug, нужно загрузить прошивку tft nextion в дисплей и код в Arduino.

Данный пример не получится проверить через Debug, нужно загрузить прошивку tft nextion в дисплей и код в Arduino.

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

предыдущие 3 графика также отображаются

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

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

Внимание! Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI, код для Arduino.


Вывод по Nextion Tutorial.

Как видим работать с графиками можно, при этом есть возможности строить несколько графиков независимых друг от друга. Но ограничение в 255 сильно омрачает работу с графиками на Nextion Display.

Понравился Урок Строим графики waveform - дисплей Nextion? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
9 урок Nextion на русском. Красивый дизайн из 2 картинок. tft Nextion 3.5 http://arduino-tex.ru/news/88/9-urok-nextion-na-russkom-krasivyi-dizain-iz-2-kartinok-tft.html Константин Portal-PK 2021-10-05T13:04:57+03:00 При создании дизайна интерфейса для дисплея Nextion можно столкнуться с рядом сложностей. Первый недочет, на мой взгляд, нет возможности использовать изображения без фона. Кроме этого, как рассказывал в предыдущих уроках, для реализации 1 красивой кнопки нужно 2 картинки. А если в проекте не один экран управления с большим количеством кнопок. Картинок нужно очень много и в них можно запутаться. Как же сделать красивый дизайн для экрана Nextion 3.5 дюйма (в моем случае, у вас может быть другой размер дисплея) и сохранить полученный результат tft Nextion, для дальнейшей загрузки прошивки на дисплей? Об этом расскажу сегодня в уроке Nextion на русском.

Что нужно для реализации красивого дизайна интерфейса дисплея Nextion?

При создании дизайна интерфейса дисплея Nextion приходилось постоянно учитывать одну особенность. Скругление углов кнопок нужно делать в цвет фона. А при сложном фоне тут вообще речи идти не могло. Конечно, можно, но приходилось постоянно позиционировать кнопку в нужном месте фона и сохранять. На создание красивого оформления уходило очень много времени. После чего все элементы нужно размесить в редакторе Nextion Editor с точностью до пикселя. Это просто адская работа. Но, к счастью, есть более простой способ создания дизайна для Nextion hmi. Что же нам понадобится для реализации красивого дизайна для дисплея Nextion?

Для начала нам нужно сделать 2 картинки для активного и пассивного состояния кнопок. У меня получились вот такие Nextion картинки.

Активное состояние элементов на экране.

Активное состояние элементов на экране.

Пассивное состояние кнопок на Nextion 3.5.

Пассивное состояние кнопок на Nextion 3.5.

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

При необходимости можно сделать пустой фон для дисплея.

Также можно использовать вывод красивого текста, так как стандартные шрифты не очень краевые. Для этого добавляем в нужном месте элемент. Вы скажете, как же это может работать? Сейчас посмотрим на примере!

Также можно использовать вывод красивого текста, так как стандартные шрифты не очень краевые.

Создаем красивый дизайн в Nextion Editor.

Для начала добавляем в проект созданные изображения. Где скачать Nextion Editor рассказывал в первом урке. Также у меня есть урок по подготовке графики и загрузки картинок в проект.

Где скачать Nextion Editor рассказывал в первом урке. Также у меня есть урок по подготовке графики и загрузки картинок в проект.

После загрузки фоновых изображений.

После загрузки фоновых изображений.

Получаем вот такой результат.

Получаем вот такой результат.

Добавляем первую кнопку на экран Nextion.

Добавляем первую кнопку на экран Nextion.

Настроем некоторые параметры кнопки:

  • sta: crop images
  • txt: (удалить все символы)
  • picc: (выбираем картинку с элементами в пассивном состоянии, у меня 2)
  • picc2: (выбираем картинку с элементами в активном состоянии, у меня 1)

Настроем некоторые параметры кнопки:

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

Затем нам нужно спозиционировать выделение на месте расположения кнопки.

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

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

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

 Но также есть и другие способы. Для вывода статических элементов можно использовать инструмент «Crop»

Выбираем область и изображение, на котором расположен элемент.

Выбираем область и изображение, на котором расположен элемент.

Также можно вывести текст, который прописан на изображении. Данный метод можно использовать для смены надписей. Причем нет никаких ограничений по оформлению.

Также можно вывести текст, который прописан на изображении.

Чтобы вывести текстовое поле с нужным фоном добавляем текст.

Чтобы вывести текстовое поле с нужным фоном добавляем текст.

И настраиваем свойства:

  • sta: crop images
  • txt: 1234(пример текста)
  • pco: (цвет текста)
  • pw: Password (для отображения ввода пароля)
  • picc: (выбираем картинку на которой расположен нужный элементам, у меня это 1)

И настраиваем свойства: sta: crop images

Сейчас можно проверить, как все у нас отображается и работает. Нажмем на кнопку «Debug». Откроется окно отладки. Понажимаем на кнопки. Как видим, все работает отлично.

Сейчас можно проверить, как все у нас отображается и работает. Нажмем на кнопку «Debug».

Как менять текст с помощью подготовленных картинок?

Добавил я в проект еще одно изображение, на котором есть надпись «Заблокировано». После чего можно вывести на дисплей 4 различных состояния в блоке «q1».

  • Пустое поле
  • Надпись «Закрыто»
  • Надпись «Открыто»
  • И надпись «Заблокировано»

Как менять текст с помощью подготовленных картинок?

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

Внимание! По данному уроку скоро будет доступен проект. Не забудьте добавить сайт в закладки, чтобы не пропустить!

Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI.

Подведем итоги.

Как видим, для дизайна одной страницы мы использовали всего 4 картинки. По идее можно обойтись всего двумя изображениями. Данный подход упрощает процесс создания красивого дизайна на дисплее Nextion. Но подготавливать изображения нужно максимально точно. Так как смещение элемента на 1-2 пиксель будет видно на дисплее Nextion. И для реализации красивого дизайна нужно уметь работать в таких программах как Photoshop, Gimp или других.

Понравился Урок Nextion на русском. Красивый дизайн из 2 картинок. tft Nextion 3.5? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
HTTP-сервер ESP8266. Выводим информацию HTML, Javascript и CSS http://arduino-tex.ru/news/87/http-server-esp8266-vyvodim-informaciyu-html-javascript-i-css.html Константин Portal-PK 2021-10-01T09:41:01+03:00 Цель этого урока - объяснить, как работать с HTML, Javascript и CSS на веб-сервере ESP8266 HTTP.

Важно учитывать, что HTML, Javascript и CSS - это языки, которые выполняются / отображаются на стороне клиента. Поскольку мы собираемся выполнять HTTP-запросы из веб-браузера, он будет отвечать за рендеринг HTML и CSS и выполнение Javascript.

Это означает, что мы узнаем, как интерпретировать HTML, CSS или Javascript. Как увидим ниже, этот код будет храниться в строках, которые будут возвращены в ответах HTTP, почти так же, как мы это делали бы для возврата любого другого типа контента.

В этом простом примере мы создадим главную страницу на HTML. Страницу с кодом Javascript на которой будет запускаться окно предупреждения при нажатии кнопки. И страницу с кнопкой, стилизованной с помощью CSS.

Код HTTP-сервера Arduino.

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

Итак, самая важная часть, о которой нам нужно помнить, это то, что нам нужно указать функцию обработки для каждого URL-адреса нашего сервера. Возьмём код из последнего урока, нам нужно объявить глобальную переменную класса ESP8266WebServer и передать в качестве аргумента номер порта, на котором сервер будет прослушивать входящие HTTP-запросы.

ESP8266WebServer server (80);

Затем для каждого URL-адреса указываем функцию обработки, которая будет выполняться при отправке запроса по этому пути. Для этого мы вызываем метод on объекта server.

Для простоты предположим, что код HTML, Javascript и CSS будет статическим. Это означает, что мы можем объявить его в строке и просто вернуть, когда HTTP-запрос выполняется по желаемому URL-адресу.

Снова вспомним код из последнего урока, вызываем метод send объекта server. В качестве аргументов передаем ему код возврата для запроса, тип возвращаемого содержимого и само содержимое.

Итак, сначала мы хотим вернуть код HTTP 200 (код ОК). Затем нам нужно убедиться, что мы указали возвращаемый контент как «text / html», чтобы браузер знал, что он должен интерпретироваться и отображаться html. Тип содержимого всегда будет таким, потому что в случае отправки кода CSS или Javascript он будет встроен в код HTML.

Наконец, передадим строку с кодом HTML / Javascript / CSS. Функция будет выглядеть следующим образом.

server.on("/", []() {                     //Определите функцию обработки корневого пути (HTML-сообщение)
    server.send(200, "text/html", htmlMessage);
  });

HTML-код страницы для вывода HTTP-сервер ESP8266.

В нашем случае будем предполагать, что корневой URL («/») будет отображать страницу HTML. На которой будет текст с описанием и 2 ссылки. Каждая из этих ссылок перенаправляет пользователя на URL-адрес, с примером работы Javascript или CSS-кода. Код страницы приведён ниже.

const char * htmlMessage = " <!DOCTYPE html> "
                           "<html lang=\"ru\"> "
                           "<head>"
                           "<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">"
                           "<title>HTML ESP8266</title>"
                           "</head>"
                           "<body> "
                           "<p>Это Основная страница только в формате HTML. Пожалуйста, выберите кнопку ниже.</p>"
                           "<a href=\"/javascript\">Javascript Код</a>"
                           "</br>"
                           "<a href=\"/cssButton\">CSS Код</a>"
                           "</body> "
                           "</html> ";

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

<! DOCTYPE HTML> тег сообщает браузеру, что это HTML документ, что браузер знает чего ожидать. Элемент <html> представляет корень HTML-документа. Все остальные элементы должны быть потомками этого элемента. В <body> теге выводим видимые элементы страницы. В <head> указываем вспомогательные элементы страницы, которые не выводятся в браузере.

<p> тег указывает абзац, мы используем его, чтобы показать описание на странице.

<a> тег позволяет создать гиперссылку, указав адрес страницы. В атрибуте href мы указываем URL-адрес, на который хотим, чтобы пользователь был перенаправлен, а между двумя тегами указываем текст гиперссылки.

В этом случае указываем путь в текущем адресе, поэтому нам не нужно указывать IP и порт. Итак, когда пользователь щелкает гиперссылку, браузер знает, что ему нужно будет перенаправить пользователя на http: // IP: port / {href value}.

Как увидим позже, пути, которые указываем в href, будут соответствовать путям, по которым ESP8266 будет запрограммирован на возврат соответствующего кода.

<br> тег переноса строки. Будем использовать для написания ссылок с новой строки.

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

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

Наконец, каждая цитата, являющаяся частью HTML-кода (например, кавычки вокруг URL-адресов в теге <a> ), должна быть экранирована с помощью символа «\». Итак, символы «\», которые мы видим перед кавычками, также не являются частью HTML-кода, а являются механизмом экранирования.

Эти свойства будут такими же для остальной части кода, описанного ниже.

Код JavaScript для вывода HTTP-сервера ESP8266.

Для кода Javascript следуем тому же подходу к объявлению его в строке, как показано ниже.

const char * javascriptCode = " <!DOCTYPE html> "
                              "<html lang=\"ru\"> "
                              "<head>"
                              "<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">"
                              "<title>script получить сообщение от ESP8266</title>"
                              "</head>"
                              "<body> "
                              "<p>Нажмите на кнопку, чтобы получить сообщение от ESP8266:</p> "
                              "<button onclick=\"buttonFunction()\">Сообщение</button> "
                              "<script>"
                              "function buttonFunction() { "
                              " alert(\"Привет от ESP8266!\"); "
                              "} "
                              "</script>"
                              "</body> "
                              "</html> ";

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

<button> тег для создания кнопки. Одно из его свойств позволяет указать функцию, которая будет выполняться при нажатии кнопки (событие onclick). В этом случае назначаем этому событию выполнение функции Javascript под названием «buttonFunction».

Затем используем тег <script>, который позволяет указать код Javascript. В данном случае именно там указываем код упомянутой функции buttonFunction. Данный код соответствует всплывающему окну предупреждения, которое выведет сообщение «Привет от ESP8266!».

Код CSS для декорирования Html элементов.

Следуя ранее упомянутому подходу, мы также объявляем CSS как строку.

const char * cssButton = "<!DOCTYPE html>"
                         "<html lang=\"ru\"> "
                         "<head>"
                         "<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">"
                         "<title>style ESP8266</title>"
                         "<style>"
                         ".button {"
                         "background-color: #990033;"
                         "border: none;"
                         "color: white;"
                         "padding: 7px 15px;"
                         "text-align: center;"
                         "cursor: pointer;"
                         "} "
                         ".button:hover {"
                         "background-color: #c26175;"
                         "}"
                         "</style>"
                         "</head>"
                         "<body>"
                         "<input type=\"button\" class=\"button\" value=\"Нажми меня\">"
                         "</body>"
                         "</html>";

У нас есть элемент <style>, в котором указываем, как элементы HTML должны отображаться в браузере. В данном случае указываем стиль кнопки, изменяя некоторые из ее атрибутов по умолчанию, таких как цвет фона, тип курсора, которые меняются при наведении курсора. CSS помогает изменить множество различных настроек, которые выходят за рамки этого урока.

Наконец, у нас есть тег <input>, который определяет поле ввода, в него пользователь может вводить данные. В этом конкретном случае мы определили, что нашим вводом будет кнопка. Эта кнопка будет иметь свойства, указанные в CSS.

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

Основной код HTTP-сервера на ESP8266.

Полный код Arduino, необходимый для запуска HTTP-сервера, показан ниже. Опущено только объявление строк, содержащих код HTML, Javascript и CSS, чтобы этот пост оставался небольшим. Не забудьте объявить их как глобальные переменные, чтобы они были доступны в функциях обработки.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);    //Webserver Object
const char* ssid = "NetworkName";
const char* password =  "NetworkPass";
byte tries = 10;  // Попыткок подключения к точке доступа
void setup() {
  Serial.begin(9600);                                             //Открыть последовательное соединение
  WiFi.begin(ssid, password);
  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
  delay(500);
  Serial.println("Waiting to connect…");
  server.on("/", []() {                     //Определите функцию обработки корневого пути (HTML-сообщение)
    server.send(200, "text/html", htmlMessage);
  });
  server.on("/javascript", []() { //Определите функцию обработки для пути javascript
    server.send(200, "text/html", javascriptCode);
  });
  server.on("/cssButton", []() { //Определите функцию обработки для пути CSS
    server.send(200, "text/html", cssButton);
  });
  server.begin(); //Start the server
  Serial.println("Server listening");
}
void loop() {
  server.handleClient(); //Обработка входящих запросов
}

Обратите внимание, что пути, которые определили для кода CSS и Javascript – это те пути, которые мы указали в URL-адресах тегов <a>, которые определили в HTML-коде для главной страницы. Таким образом, когда пользователь щелкает по гиперссылке, он перенаправляется по существующим адресам и ESP8266 вернет нужный контент.

Проверка работы отображения HTML страниц, Javascript и CSS.

Для проверки кода, загрузите его в ESP8266 и откройте монитор порта, и скопируйте выведенный IP-адрес, и перейдите в браузере по следующему URL-адресу, изменив {IP} на ваш IP:

http://{IP}/

Ниже вы можете увидеть ожидаемый результат в последовательном порту с выводом IP-адреса. Обратите внимание, что IP-адрес, который вы получите, скорее всего, будет другим, в зависимости от того, какой ваш маршрутизатор назначен ESP8266 при регистрации в беспроводной сети.

Проверка работы отображения HTML страниц, Javascript и CSS.

Итак, когда мы обращаемся к URL-адресу в браузере (в моем случае http://192.168.1.48/), попадаем на главную HTML страницу, как показано ниже. Затем можем щелкнуть одну из гиперссылок, чтобы перейти на страницу с Javascript или CSS.

 Затем можем щелкнуть одну из гиперссылок, чтобы перейти на страницу с Javascript или CSS.

На рисунке ниже видим страницу обработки кода Javascript. Если нажмем кнопку, мы получим окно предупреждения со строкой, которую мы определили ранее.

На рисунке ниже видим страницу обработки кода Javascript.

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

кнопка, стилизованная с использованием CSS

При наведении курсора на кнопку меняется цвет кнопки и курсор мыши.

При наведении курсора на кнопку меняется цвет кнопки и курсор мыши.

Заключение и примечание.

Как видно, ESP8266 обладает всеми инструментами для настройки простого веб-сервера HTTP и подготовку вывода HTML, Javascript и CSS очень простым способом. Тем не менее, нужно учитывать, что мы работаем с микроконтроллером со значительно ограниченными ресурсами.

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

Лично я вижу такую функциональность для реализации простой конфигурации или интерфейса отладки устройств. Например, если реализуем температурный сервер, мы можем создать простую веб-страницу, чтобы настроить, сколько измерений в секунду будем выполнять.

Также смотрите другие уроки по данной теме:

Понравился ESP8266 уроки. HTTP-сервер ESP8266. Выводим информацию HTML, Javascript и CSS? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. Настройка простого HTTP веб-сервера. http://arduino-tex.ru/news/86/urok-esp8266-nastroika-prostogo-http-veb-servera.html Константин Portal-PK 2021-09-30T16:10:07+03:00 Цель этого урока - объяснить, как настроить веб-сервер HTTP на ESP8266 и делать к нему простые запросы с помощью веб-браузера.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Как настроить Arduino IDE для поддержки ESP8266, узнать можно здесь.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE.

Тесты проводились с использованием платы NodeMCU, очень дешевая и простая в использовании плата ESP8266.

Код простого HTTP веб-сервера на ESP8266.

Прежде всего, подключим библиотеку ESP8266WiFi, которая содержит необходимые функции для подключения ESP8266 к сети Wi-Fi. Вы можете прочитать более подробное описание того, как подключить ESP8266 к сети Wi-Fi в предыдущем уроке.

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

#include "ESP8266WiFi.h"
#include "ESP8266WebServer.h"

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

В качестве аргумента для конструктора этого класса мы передадим порт, который сервер будет слушать. Поскольку 80 - порт по умолчанию для HTTP. Будем использовать это значение, поэтому нам не нужно будет указывать номер порта в URL-адресе при доступе к нашему серверу ESP8266 с помощью браузера.

ESP8266WebServer server(80);

Нам нужно предварительно настроить HTTP-сервер перед его запуском.

Также открываем последовательное соединение для отладки.

Serial.begin(115200);

Затем будет подключаться к сети Wi-Fi, как показано в приведенном ниже коде. Если вам нужно подробное объяснение того, как подключиться к сети Wi-Fi ESP8266, посмотрите предыдущий урок по данной теме.

#include <ESP8266WiFi.h>

const char* ssid = "NetworkName"; const char* password =  "NetworkPass";
byte tries = 10;  // Попыткок подключения к точке доступа void setup() {

  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

Поскольку мы собираемся выполнять HTTP запросы, нам нужно знать IP-адрес, на котором ESP8266 прослушивает входящие запросы, это будет локальным IP-адресом назначенным в сети Wi-Fi.

Чтобы получить это значение просто вызываем метод localIP для глобальной переменной WiFi и затем выведем его в последовательный порт, чтобы мы знали, какой URL-адрес вызывать в нашем веб-браузере.

Serial.println(WiFi.localIP());

Чтобы получить это значение просто вызываем метод localIP для глобальной переменной WiFi

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

Более элегантный метод заключается в определении функции обработки где-нибудь в нашем коде и передаче ее функции on вместе с URL-адресом, который будет запускать выполнение этой функции.

server.on("/", handleRootPath);

Таким образом, код указывает, что когда HTTP-запрос получен по корневому («/») пути, он инициирует выполнение функции «handleRootPath». Обратите внимание, что мы не указываем IP-адрес или порт, на который ESP8266 прослушивает, а только путь URL-адреса с этого момента.

Для простоты предположим, что функция «handleRootPath» отвечает только текстом «Greetings from the site arduino-tex.ru» на входящий HTTP-запрос. Итак, чтобы определить ответ на запрос, мы вызываем метод send.

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

void handleRootPath() {            //Обработчик для корневого пути

  server.send(200, "text/plain", "Greetings from the site arduino-tex.ru");

}

В этом случае мы отправляем код 200, который соответствует ответу «ОК». Затем мы указываем тип контента как «text/plain», поскольку мы отвечаем только простым «Greetings from the site arduino-tex.ru» фактическим текстом ответа.

Естественно, эту функцию нужно объявить вне функции настройки.

Мы также можем указать функцию обработки при вызове метода on. В этом случае нам не нужно объявлять отдельную функцию, и мы можем делать все в функции настройки, как показано ниже.

server.on("/other", []() {   //Определите функцию обработки для пути

    server.send(200, "text / plain", "Additional page");

  });

В этом случае, если мы получим HTTP-запрос по пути «/other», мы ответим выражением «Additional page».

Теперь, чтобы запустить наш сервер, мы вызываем метод begin объекта server. Это последняя строка кода, которую нам нужно включить в нашу функцию настройки.

server.begin();

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

void loop() {
 
   server.handleClient();
 
}

Скетч простого HTTP веб-сервера на ESP8266 получится следующим.

#include "ESP8266WiFi.h"
#include "ESP8266WebServer.h"

ESP8266WebServer server(80);
const char* ssid = "NetworkName";
const char* password =  "NetworkPass";
byte tries = 10;  // Попыткок подключения к точке доступа

void setup() {

  Serial.begin(9600);
  WiFi.begin(ssid, password);

  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }



  server.on("/other", []() {   //Определите функцию обработки для пути

    server.send(200, "text / plain", "Additional page");

  });

  server.on("/", handleRootPath);    //Свяжем функцию обработчика с путем
  server.begin();                    //Запускаем сервер
  Serial.println("Server listening");

}

void loop() {

  server.handleClient();         //Обработка входящих запросов

}

void handleRootPath() {            //Обработчик для корневого пути

  server.send(200, "text/plain", "Greetings from the site arduino-tex.ru");

}

Проверка HTTP веб-сервера на ESP8266.

Чтобы протестировать код, нам просто нужно открыть наш браузер и сделать HTTP-запрос на IP-адрес ESP8266, по пути, который мы определили ранее. Формат показан ниже:

http://serverIP:port/path

Как указывалось ранее, мы прослушиваем порт 80, браузер примет его по умолчанию, поэтому нам не нужно его указывать:

http://serverIP/path

Итак, заменяем serverIP на IP, который получаем в мониторе порта, и делаем запрос, как показано на рисунке ниже.

Итак, заменяем serverIP на IP, который получаем в мониторе порта, и делаем запрос

В этом случае отображается только IP, потому что браузер удалил «/» из корневого пути. Кроме того, браузер удалил http: //. Хотя некоторые браузеры выполняют запрос, когда мы указываем только IP, другие предполагают, что мы хотим найти что-то в поисковой системе. Итак, самый безопасный способ - всегда указывать http: // перед IP.

Пример на рисунке ниже показывает запрос по пути «/other», который мы также прописали в коде.

ример на рисунке ниже показывает запрос по пути «/ other», который мы также прописали в коде.

Наконец, обратите внимание, что если мы укажем путь, который не определен, ESP вернет сообщение, указывающее, что ресурс не был найден, как мы можем видеть на рисунке ниже, где отправили HTTP-запрос по пути «/not».

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

Важно! IP-адрес, который будет выводить ESP8266 в монитор порта, является локальным IP-адресом в сети. Клиент вне сети не сможет связаться по этому IP-адресу (и, следовательно, URL-адрес не будет работать). Чтобы клиент мог связаться с ESP8266 из-за пределов своей сети, ему необходимо будет использовать внешний IP-адрес сети, а маршрутизатор должен быть настроен для переадресации запросов с общедоступного IP-адреса на локальный IP ESP8266. Поскольку переадресация портов зависит от используемого маршрутизатора, объяснение того, как это сделать выходит за рамки этого урока.

Понравился ESP8266 уроки. Настройка простого HTTP веб-сервера? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
Как Arduino подключить к компьютеру и вывести график температуры. http://arduino-tex.ru/news/85/kak-arduino-podklyuchit-k-kompyuteru-i-vyvesti-grafik.html Константин Portal-PK 2021-09-28T10:41:09+03:00 Для реализации своих задумок, мне нужно с компьютера управлять Arduino. Поэтому стал изучать программы, которые помогут реализовать обмен данных между ПК и Arduino. Сперва начал с самой распространённой программы для данных целей Processing. Сделал программу, которая позволяет управлять реле. Но когда я приступил к реализации более сложных проектов, столкнулся с проблемой возможности реализации на Processing задуманных функций. Поэтому я стал думать какой язык и IDE будем оптимальным для быстрого освоения и реализации связи Arduino с компьютером. После некоторого времени поисков и тестирования остановился на Visual Studio и языке программирования C#. Первый проект, который я реализовала это подключение Arduino к компьютеру и передача данных с датчика температуры DS18B20.

Visual Studio приложение Windows Forms для получения данных от Arduino.

Первое приложение Visual Studio буду делать Windows Forms C#. Для этого нужно создать новый проект и выбрать язык программирования C#. И соответственно Windows Forms.

Первое приложение Visual Studio буду делать Windows Forms C#.

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

Также вы можете скачать исходные материалы проекта и приложение в формате .exe внизу статьи в разделе «Файлы для скачивания».

Описание приложения построения графиков по данным с датчика температуры.

Описание приложения построения графиков по данным с датчика температуры.

Для получения данных с датчика температуры достаточно запустить приложения, для этого откроем файл «Monitor temperature.exe».

 файл «Monitor temperature.exe».

При загрузке мы сразу получаем список всех доступных com-портов.

список всех доступных com-портов.

За это отвечает вот этот кусок кода.

За это отвечает вот этот кусок кода.

Если вы подключили Arduino поле запуска программы и не видите нужный порт для подключения, список портов можно обновить с помощью кнопки «Обновить список портов».

обновить с помощью кнопки «Обновить список портов».

После выбора нужного порта нажимаем кнопку «Подключиться». При подключении увидим, как мигнут светодиоды на плате Arduino. Это означает, что подключение прошло успешно.

После выбора нужного порта нажимаем кнопку «Подключиться». При подключении увидим, как мигнут светодиоды на плате Arduino.

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

Например, код подключения будет следующим.

Для работы с монитором порта добавим невидимый компонент в проект и назовем его «mySerialPort».

Для работы с монитором порта добавим невидимый компонент в проект и назовем его «mySerialPort».

Для получения данных от Arduino добавим функцию «mySerialPort_DataReceived».

Для получения данных от Arduino добавим функцию «mySerialPort_DataReceived».

В данной функции реализуем считывание полученных данных из порта и выведем температуру в текстовое поле.

https://skr.sh/sAGPbuZcf8P

А также вывод значений полученных с датчика на график.

А также вывод значений полученных с датчика на график.

Чтобы график был читабельным при получении данных длительное время, сделаем ограничение выводимых значений на график. Для этого создадим еще один выводящий список «comboBox» и пропишем необходимые значения для выбора.

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

В коде ограничим диапазон в зависимости от выбора «Диапазона времени».

 В коде ограничим диапазон в зависимости от выбора «Диапазона времени».

Также сделал вывод текущего времени и даты.

Также сделал вывод текущего времени и даты.

Но это просто как дополнительный параметр, который можно и не выводить в данном проекте.

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

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

Пример изменения диапазона времени на графике.

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

Пример изменения диапазона времени на графике.

На график значение температуры выводиться по умолчанию 30 секунд. Данное значение мы можем изменить на 60, 90 120 сек. Данные диапазоны задаются в программе и их можно изменить и дополнить.

На график значение температуры выводиться по умолчанию 30 секунд. Данное значение мы можем изменить на 60, 90 120 сек.

Изменяя данное значение, например, на 120 сек. На графике будем видеть изменение температуры, уже не 30 сек, а минимум 120 сек. Почему минимум? Это связанно с тем, что сдвиг графика происходит при достижении числа кратного значению 10. И диапазон выводимых значений будет на 9 секунд больше до момента сдвига.

Скетч для Arduino отправки значений температуры в монитор порта.

Измерять температуру будем датчиком DS18B20 выполненного в виде модуля KY-001. По работе с данным модулем у меня есть отдельный урок. Скетч возьмем из урока и немного подправим для нашего проекта.

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void) {
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  static uint32_t tmr2;
  if (millis() - tmr2 > 1000) {
    tmr2 = millis();
    Serial.println(sensors.getTempCByIndex(0)); //  в Цельсиях:
  }
}

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

В связи с тем, что будим использовать модуль KY-001 (DS18B20) подключение к Arduino будет достаточно простым и понадобиться всего 3 соединительных провода.

Подведем итог.

Как видим сделать в Visual Studio приложение Windows Forms достаточно просто. А при сочетании с C# возможности взаимодействия Arduino с компьютером становятся достаточно большими. Можно реализовать не только получение данных с Arduino, но и реализовать управление, получая данные с ПК, Интернета и т.д.

Если вам интересны уроки по данной теме, пишите в комментарии. При заинтересованности сделаю блок уроков Visual Studio Arduino.

Понравился проект Пульт для презентаций своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. Управление двигателем постоянного тока. NodeMCU + MX1508 http://arduino-tex.ru/news/84/upravlenie-dvigatelem-postoyannogo-toka-nodemcu-mx1508.html Константин Portal-PK 2021-09-22T10:42:51+03:00 Цель этого урока - объяснить, как управлять двигателем постоянного тока и изменять скорость вращения, с помощью ESP8266 и драйвера MX1508. Подробное описание драйвера можно посчитать в моем уроке по подключению MX1508 к Arduino.

управлять двигателем постоянного тока и изменять скорость вращения, с помощью ESP8266 и драйвера MX1508.

Поскольку цифровые выводы микроконтроллера могут подавать только ограниченный ток (в случае ESP8266, максимум 12 мА), мы не можем напрямую использовать их для управления двигателем постоянного тока. Поэтому будем использовать драйвер MX1508, чтобы обеспечить ток, необходимый для вращения двигателя.

Схема подключения NodeMCU, MX1508 и двигатель постоянного тока.

Схема подключения для данного примера очень проста и ее можно увидеть на рисунке ниже. Мы просто используем цифровой вывод ESP8266 для управления MX1508 и, следовательно,двигателем.

Схема подключения NodeMCU, MX1508 и двигатель постоянного тока.

Наверное, понятно, что MX1508 будет действовать как переключатель, включающий или выключающий соединение двигателя с GND, когда соответствующий вывод находится в состоянии HIGH или LOW. Естественно, это ВЫСОКОЕ или НИЗКОЕ напряжение контролируется ESP8266.

Таким образом, ток необходимый для работы двигателя, обеспечивается источником питания 5 В и управление двигателем производит драйвер MX1508, что помогает не вывести ESP8266 из строя. Поскольку MX1508 может управляться сигналами 3,3 В, он будет нормально работать с ESP8266.

Простой пример кода управления двигателем постоянного тока и NodeMCU + MX1508.

Простой пример кода управления двигателем постоянного тока и NodeMCU + MX1508.

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

int motorPin = D3; //Pin, который будет управлять двигателем
void setup() {
  pinMode(motorPin, OUTPUT);  //Инициализируйте pin как выходной
}

Основной цикл loop().

Код для управления двигателем постоянного тока очень прост, как мы увидим ниже.

Чтобы контролировать, включен или выключен двигатель, нам просто нужно изменить значения цифрового вывода с HIGH на LOW. Таким образом, он будет либо работать на полной скорости, либо останавливаться.

  digitalWrite(motorPin, HIGH); //Включите двигатель на полную скорость
  delay(5000);
  digitalWrite(motorPin, LOW); //Выключить двигатель
  delay(5000);

Теперь, если хотим контролировать скорость двигателя, мы можем использовать ШИМ, вызвав функцию analogWrite. Эта функция принимает в качестве входных данных вывод, на котором генерируется сигнал ШИМ, и значение скважности. Нам просто нужно помнить из предыдущего урока, что диапазон значений рабочего цикла по умолчанию для реализации ESP8266 составляет от 0 до 1023.

При значении 0 на выводе ESP8266, который управляет MX1508, всегда будет 0 В (GND), и поэтому на двигатель не будет подаваться напряжение. Для значения 1023, напряжение на выводе ESP8266 всегда будет 3,3 В, таким образом, MX1508 будет выдавать 5 В.

 ESP8266 всегда будет 3,3 В, таким образом, MX1508 будет выдавать 5 В.

Для любого промежуточного значения между 0 и 1023 скважность прямоугольной волны, создаваемой ESP8266, будет воспроизведен MX1508, таким образом, двигатель будет иметь смоделированное аналоговое напряжение между 0 и 5 В, что будет соответственно изменять его скорость.

Итак, мы должны вызвать функцию analogWrite, как показано ниже, для промежуточного значения.

analogWrite(motorPin, 950);

Нужно иметь в виду, что существует минимальное значение напряжения, при котором двигатель начинает вращаться. Таким образом, это нормально, что при низких значениях ШИМ он не вращается, и только после порогового значения (который будет зависеть от используемого двигателя) он начнет вращаться.

Окончательный код можно увидеть ниже. В этом случае мы сначала выключаем двигатель на полной скорости, а затем выключаем его с помощью функции digitalWrite. Затем начинаем с 0 В и постепенно увеличиваем подаваемое напряжение до 5 В с помощью функции analogWrite.

  digitalWrite(motorPin, HIGH); //Включите двигатель на полную скорость
  delay(5000);
  digitalWrite(motorPin, LOW); //Выключить двигатель
  delay(5000);
  int i;
  for ( i = 0; i < 1023; i = i + 5) {
    analogWrite(motorPin, i); //Постепенно увеличивайте скорость
    delay(100);
  }
  for (; i > 0; i = i - 5) {
    analogWrite(motorPin, i); //Постепенно уменьшайте скорость
    delay(100);
  }
  analogWrite(motorPin, 0); //Отключить ШИМ

После достижения 5 В начинаем постепенно уменьшать напряжение до 0 В. Кроме того, в конце цикла выполняется вызов функции analogWrite со значением 0.

После достижения 5 В начинаем постепенно уменьшать напряжение до 0 В.

Тестирование кода.

Результат показан на видео ниже. Как указывалось ранее, сразу после определенного рабочего цикла, смоделированное аналоговое напряжение становится достаточно высоким, чтобы двигатель начал движение. А шум, который слышен перед запуском двигателя, является результатом приложения напряжения к его клеммам, которого недостаточно для его движения.

Пример вращения двумя двигателями постоянного тока с помощью NodeMCU + MX1508.

Пример вращения двумя двигателями постоянного тока с помощью NodeMCU + MX1508.

Вращать одним двигателем в одном направлении хорошо. Но чаще всего требуется управлять вращением двигателя в разных направлениях (реверс). А при разработке радиоуправляемых моделей, чаще всего приходится управлять двумя или четырьмя двигателями. Сейчас рассмотрим пример, как можно вращать два двигателя с реверсом. Также посмотрим, как можно задать скорость вращения двигателей с помощью ШИМ.

Схема подключения NodeMCU, MX1508 и два двигателя постоянного тока.

Схема подключения NodeMCU, MX1508 и два двигателя постоянного тока.

Пример возьмём из урока для Arduino. И подправим для использования с ESP8266.

const int PinA1 = D4;  // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = D3;  // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = D5; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = D6;  //(ШИМ) вывод 11 соединен с выводом (pin)B2
int speed = 1023;  // измените это значение (0-1023), 
                  //чтобы управлять скоростью вращения двигателей
void setup() {
  pinMode(PinA1, OUTPUT); // установите контакты на выход
  pinMode(PinA2, OUTPUT);
  pinMode(PinB1, OUTPUT);
  pinMode(PinB2, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  Serial.println("Avanti");
  forward();
  delay(2000);
  STOP();
  Serial.println("Indietro");
  backward();
  delay(2000);
  STOP();
  Serial.println("Sinistra");
  left();
  delay(2000);
  STOP();
  Serial.println("Destra");
  right();
  delay(2000);
  STOP();
}
void backward() // Вперед.
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void forward() //Назад...
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, 0);
  delay (2000);
}

Основное отличие данного примера это изменение скорости вращения. Как мы уже знаем из предыдущего урока ШИМ на ESP8266 можно менять от 0 до 1023, а для Arduino всего от 0 до 255.

int speed = 1023;  // измените это значение (0-1023),
...
analogWrite(PinA2, speed);

Как видим, двигателя вращаются по загнанному алгоритму и с указанной скоростью вращения. На данном примере можно реализовать Wi-Fi машинку или другое умное устройство.

На данном примере можно реализовать Wi-Fi машинку или другое умное устройство.

Смотрите примеры проектов с использованием двигателей постоянного тока:

Понравился Урок ESP8266. Управление двигателем постоянного тока. NodeMCU + MX1508? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Пульт для презентаций своими руками на Arduino. http://arduino-tex.ru/news/83/pult-dlya-prezentacii-svoimi-rukami-na-arduino.html Константин Portal-PK 2021-09-21T11:59:30+03:00 Сегодня сделаем пульт для презентаций своими руками на базе Arduino (DigiSpark). Данный девайс отличная вещь и пригодиться может в самый неожиданней момент. Благо собрать недорогой вариант беспроводного управления презентацией достаточно просто. Подробно рассматривать техническую часть не будем. Разберём, какая электроника нужна и основные настройки скетча. Более подробнее о прошивке и электронике вы можете почитать в предыдущем проекте и уроке.

Пульт для презентаций своими руками на Arduino, что понадобится?

Для пульта управления презентацией понадобится следующая электроника:

Что понадобится для управления компьютером через USBКак видим, для проекта нужно минимум комплектующих и если их покупать в Китае, то можно уложиться в 2-5 $.

Схема подключения электроники пульт для проведения презентаций.

Рассмотрим два варианта схем пульта для проведения презентаций. Первая схема подключения состоит из 2 модулей, и собрать ее можно без пайки элементов. Но при этом будет не очень красивая реализация.

Схема подключения устройства удаленного управления ПК.Второй вариант без пайки не собрать. Припаять нужно всего 3 ножки IR приемника. В данном варианте получим небольшое USB устройство, которое можно подключать к компьютеру.

Второй вариант схемы устройства удаленного управления ПК более компактный

Для более красивого и эстетичного вида можно напечатать на 3D принтере корпус для устройства. Также данный вариант выйдет немного дешевле.

Для более красивого и эстетичного вида можно напечатать на 3D принтере корпус

Если возникли сложности и не понятно, что куда припаивать смотрите распиновку IR приемника тут и распиновку DigiSpark тут.

Прошивка для пульта управления презентацией на Arduino.

Сперва, необходимо настроить среду Arduino IDE для работы с платой DigiSpark.

Пошаговую инструкцию вы можете посмотреть в статье DigiSpark ATtiny85 настройка Arduino IDE и установка драйвера. А в данном уроке вкратце расскажу про данные настройки.

  • Добавляем DigiSpark в список отладочных плат Arduino IDE.

В открывшемся окне настроек нам нужно добавить ссылку для менеджера плат.

  • Устанавливаем драйвер для DigiSpark.

Установка драйверов для DigiSpark.

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

Установка библиотеки Adafruit Trinket USB.

Библиотека Adafruit Trinket USB содержит различные функции позволяющие использовать микроконтроллер, такой как DigiSpark, Arduino Micro, Arduino Leonardo в качестве клавиатуры, мышки для ПК. В данном уроке будем использовать библиотеку TrinketHidCombo, которая идет в составе набора библиотек Adafruit Trinket USB. Давайте приступим к её установке.

Для того чтобы установить библиотеку Adafruit Trinket USB необходимо её скачать с сайта GitHub.

 библиотеку Adafruit Trinket USB необходимо её скачать

После чего с помощью инструмента «Скетч -> Подключить библиотеку -> Добавить ZIP библиотеку..». Загружаем библиотеку в среду разработки.

Скетч Подключить библиотеку Добавить ZIP библиотеку..

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

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

А затем загрузить код в плату.

//отладка. Установите значение 0 после поиска ваших кодов
#define DEBUG 0
//Укажите свои коды здесь:
#define REMOTE_OK 0x61D66897  // Enter (подтвердить действие)
#define REMOTE_LEFT 0x61D618E7 // Left  (стрелка влево на клавиатуре)
#define REMOTE_RIGHT 0x61D630CF // Right (стрелка вправо на клавиатуре)
#define REMOTE_DOWN 0x61D6A857  // Down (стрелка вниз на клавиатуре)
#define REMOTE_UP 0x61D6D02F    // Up (стрелка вверх на клавиатуре)
#define REMOTE_MOUSE_SWITCH 0x61D68877 // Mouse On/Off (включить или выключить Мышь. Аналогов на клавиатуре нет)
#define REMOTE_ESC 0x61D638C7      // Esc (отмена)
#define REMOTE_VOL_UP 0x61D650AF   // увеличит звук 
#define REMOTE_VOL_DOWN 0x61D628D7 // уменьшить звук 
#define REMOTE_BACKSPACE 0x61D6B04F   // BACKSPACE (удалить)
#define REMOTE_PLAYPAUSE 0x61D6D827 // Play/Pause (пуск / пауза воспроизведения) 
#define REMOTE_NEXT 0x61D67887     // Next (след композиция)
#define REMOTE_PREV 0x61D6F807     // Prev (Предыдущая композиция)
#define REMOTE_F5 0x61D6F00F     // F5 (Развернуть презентацию)
#define MOUSE_SENSITIVITY 1
#define REPEAT_DELAY 220
volatile uint8_t m = 0, tcnt = 0, startflag = 0;
uint32_t irdata = 0, keydata = 0 ;
bool mouse = false;
bool pressed = false;
bool complete = false;
int lastMouseX = 0, lastMouseY = 0;
#include <avr/delay.h>
#include "TrinketHidCombo.h"
void setup() {
  DDRB |= (1 << DDB1);      //P1 (LED) OUT в скетче не использован
  PORTB |= 1 << PB2;        // подтяжка PB2 не помешает.
  GIMSK |= 1 << INT0;       //прерывание int0 включить
  MCUCR |= 1 << ISC00;      //Любое логическое изменение в INT0 генерирует запрос на прерывание
  GTCCR |= 1 << PSR0; TCCR0A = 0;
  TCCR0B = (1 << CS02) | (1 << CS00);
  TIMSK = 1 << TOIE0;       //таймер прерывания
  TrinketHidCombo.begin(); // запустите механизм USB-устройства
}
void loop() {
  if (complete) { // если код был получен
    if (keydata != 0) //если код новый
    {
      Action(keydata);
      pressed = true;
    }
    else if (mouse) //Ускоряем движения мыши
    {
      lastMouseX *= 2;
      if (lastMouseX > 64)
        lastMouseX = 64;
      else if (lastMouseX < -64)
        lastMouseX = -64;
      lastMouseY *= 2;
      if (lastMouseY > 64)
        lastMouseY = 64;
      else if (lastMouseY < -64)
        lastMouseY = -64;
    }
    TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0);
    complete = false;
    ms_delay(REPEAT_DELAY); // для балансировки задержки повторения/ввода пульта дистанционного управления
  }
  else if (pressed)
  {
    digitalWrite(1, LOW);
    if (mouse)
      TrinketHidCombo.mouseMove(0, 0, 0);
    else
      TrinketHidCombo.pressKey(0, 0);
    pressed = false;
  }
  else
  {
    _delay_ms(1);//ограничьте опрос USB на пустых циклах
    TrinketHidCombo.poll(); // проверьте, не нужно ли что-нибудь сделать с USB
  }
}
ISR (INT0_vect) {
  if (PINB & 1 << 2) {
    TCNT0 = 0;
  }
  else {
    tcnt = TCNT0;
    if (startflag) {
      if (30 > tcnt  && tcnt > 2) {
        if (tcnt > 15 && m < 32) {
          irdata |= (2147483648 >> m);
        }
        m++;
      }
    }
    else  startflag = 1;
  }
}
ISR (TIMER0_OVF_vect) {
  if (m)
    complete = true; m = 0; startflag = 0; keydata = irdata; irdata = 0; // if the index is not 0, then create an end flag
}
void ms_delay(uint16_t x)
{
  for (uint16_t m = 0; m < (x / 10); m++) {
    _delay_ms(10);
    TrinketHidCombo.poll();
  }
}
void Action(uint32_t keycode)
{
  switch (keycode)
  {
    case REMOTE_OK:
      if (mouse)
      {
        lastMouseX = 0;
        lastMouseY = 0;
        TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, MOUSEBTN_LEFT_MASK);
      }
      else
        TrinketHidCombo.pressKey(0, KEYCODE_ENTER);
      break;
    case REMOTE_LEFT:
      if (mouse)
      {
        lastMouseX = -MOUSE_SENSITIVITY;
        lastMouseY = 0;
        TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0);
      }
      else
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_LEFT);
      break;
    case REMOTE_RIGHT:
      if (mouse)
      {
        lastMouseX = MOUSE_SENSITIVITY;
        lastMouseY = 0;
        TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0);
      }
      else
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_RIGHT);
      break;
    case REMOTE_DOWN:
      if (mouse)
      {
        lastMouseX = 0;
        lastMouseY = MOUSE_SENSITIVITY;
        TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0);
      }
      else
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_DOWN);
      break;
    case REMOTE_UP:
      if (mouse)
      {
        lastMouseX = 0;
        lastMouseY = -MOUSE_SENSITIVITY;
        TrinketHidCombo.mouseMove(lastMouseX, lastMouseY, 0);
      }
      else
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_UP);
      break;
    case REMOTE_ESC:
      TrinketHidCombo.pressKey(0, KEYCODE_ESC);
      break;
    case REMOTE_F5:
      TrinketHidCombo.pressKey(0, KEYCODE_F5);
      break;
    case REMOTE_BACKSPACE:
      TrinketHidCombo.pressKey(0, KEYCODE_BACKSPACE);
      break;
    case REMOTE_MOUSE_SWITCH:
      mouse = !mouse;
      lastMouseX = 0;
      lastMouseY = 0;
      break;
    case REMOTE_VOL_UP:
      TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
      break;
    case REMOTE_VOL_DOWN:
      TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
      break;
    case REMOTE_PREV:
      TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_PREV_TRACK);
      break;
    case REMOTE_NEXT:
      TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_NEXT_TRACK);
      break;
    case REMOTE_PLAYPAUSE:
      TrinketHidCombo.pressMultimediaKey(MMKEY_PLAYPAUSE);
      break;
    /*   case REMOTE_F5:
         TrinketHidCombo.pressKey(0, KEYCODE_F5);
         break;*/
    default:
      if (DEBUG)
        TrinketHidCombo.println(keydata, HEX);
      else
        return;
  }
  digitalWrite(1, HIGH);
}

Как получить код с пульта дистанционного управления?

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

  • REMOTE_OK - Enter (подтвердить действие)
  • REMOTE_LEFT - Left (стрелка влево на клавиатуре)
  • REMOTE_RIGHT - Right (стрелка вправо на клавиатуре)
  • REMOTE_DOWN - Down (стрелка вниз на клавиатуре)
  • REMOTE_UP - Up (стрелка вверх на клавиатуре)
  • REMOTE_MOUSE_SWITCH - Mouse On/Off (включить или выключить Мышь. Аналогов на клавиатуре нет)
  • REMOTE_ESC - Esc (отмена)
  • REMOTE_VOL_UP - увеличит звук
  • REMOTE_VOL_DOWN - уменьшить звук
  • REMOTE_BACKSPACE - BACKSPACE (удалить)
  • REMOTE_PLAYPAUSE - Play/Pause (пуск / пауза воспроизведения)
  • REMOTE_NEXT - Next (след композиция)
  • REMOTE_PREV - Prev (Предыдущая композиция)
  • REMOTE_F5 - F5 (Развернуть презентацию)

Добавил основные клавиши, которые понадобятся при управлении презентацией, а также добавил кнопки управления медиа файлами. При показе презентации часто требуется включать ролики и/или звуковое сопровождение. Также стоит выделить команду REMOTE_MOUSE_SWITCH - Mouse On/Off, данная команда переключает управление с клавиш стрелки перемещения влево, вправо, вверх, вниз. На перемещение курсора мыши. После чего, при нажатии на соответствующую клавишу у нас перемещается курсор мыши по экрану в нужном направлении. При частом нажатии скорость перемещения увеличивается, что позволяет достаточно быстро навести курсор на нужный элемент на экране.

После чего нам нужно получить код с пульта ДУ. Так как пульты у всех разные и коды у каждого уникальны.

//отладка. Установите значение 0 после поиска ваших кодов 
#define DEBUG 1

Для получения кода кнопок в скетче есть переменная DEBUG, если установить значение данной переменой 1 и загрузить прошивку в DigiSpark то при нажатии на клавиши на пульте в текстовом документе увидим код данной кнопки. Можно установить курсов в скетче, где нужно задать код кнопки пульта, и нажать на кнопку и у вас автоматически заполнятся нужные поля.

Как получить код с пульта дистанционного управления?

После повторной прошивки платы с отключенным режимом DEBUG, можно приступить к управлению презентацией.

//отладка. Установите значение 0 после поиска ваших кодов 
#define DEBUG 0

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

С помощью пульта можно перемещаться по элементам в папке и выбирать нужный файл.

С помощью пульта можно перемещаться по элементам в папке и выбирать нужный файл.

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

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

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

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

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

Так и управление музыкой, которую включили в браузере. Например, на сайте Вконтакте.

Это набор функция которые, по моему мнению, пригодятся при показе презентаций. Возможно, что-то лишнее или чего-то не хватает. Свое мнение и предложения пишите в комментариях.

Планирую сделать еще пару интересных проектов управления ПК с помощью Arduino. Если данная тема вам интересна, пишите свои предложения и пожелания.

Понравился проект Пульт для презентаций своими руками на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. Использование широтно-импульсной модуляции (ШИМ). http://arduino-tex.ru/news/82/urok-esp8266-ispolzovanie-shirotno-impulsnoi-modulyacii.html Константин Portal-PK 2021-09-16T14:40:57+03:00 Цель этого урока - объяснить, как использовать метод широтно-импульсной модуляции (ШИМ) с ESP8266 и основные отличия реализации от Arduino.

Широтно-импульсная модуляция - Pulse Width Modulation (PWM).

В методе PWM мы создаем прямоугольную волну с контролируемым рабочим циклом. Это означает, что мы можем контролировать для каждого периода волны, сколько времени он находится в состоянии VCC (HIGH) или GND (LOW). Таким образом, обычно рабочий цикл указывается как процент времени, в течение которого находится в ВЫСОКОМ состоянии по отношению к периоду.

Таким образом, ШИМ позволяет кодировать аналоговое значение в цифровом виде и управлять аналоговой схемой. Другими словами, мы можем моделировать аналоговые напряжения между GND и VCC.

Широтно-импульсная модуляция - Pulse Width Modulation (PWM).

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

ШИМ сигнал ESP8266 и основные отличия от Arduino.

Будем использовать библиотеки ESP8266 для Arduino IDE. Вы можете посмотреть здесь, как настроить Arduino IDE для поддержки ESP8266.

Итак, чтобы использовать ШИМ, мы можем вызвать функцию analogWrite, которая также доступна (и часто используется) при программировании плат Arduino. Тем не менее, есть некоторые различия между реализацией для Arduino и для ESP8266.

В обоих случаях эта функция получает в качестве аргументов пин, на котором должен генерироваться сигнал ШИМ, и параметр для указания рабочего цикла.

В случае реализации ESP8266, можем передать значение от 0 (GND) до 1023 (VCC) для рабочего цикла. Тем не менее, этот диапазон можно изменить с помощью вызова функции analogWriteRange.

analogWriteRange(range);

Для реализации большинства плат Arduino можно определить только значение от 0 до 255 для рабочего цикла, что является более низким разрешением, чем для ESP8266. Тем не менее, для некоторых плат, таких как Arduino Due, можем вызвать функцию AnalogWriteResolution, чтобы увеличить это значение.

Что касается частоты прямоугольной волны, создаваемой ESP8266, значение по умолчанию составляет 1 кГц. Данное значение можно изменить с помощью вызова функции analogWriteFreq.

analogWriteFreq(frequency);

Для реализации Arduino частота зависит от используемой платы.

Схема для проверки изменения свечения светодиода с помощью ШИМ сигнала ESP8266.

Схема для проверки изменения свечения светодиода с помощью ШИМ сигнала ESP8266.

После загрузки кода, подключите светодиод к ESP8266, как показано на следующей принципиальной схеме.

Если используете ESP-01, вы можете проверить распиновку платы здесь .

Код ESP8266 NodeMCU PWM.

const int ledPin = 2;

void setup() {

}

void loop() {
  // увеличение яркости светодиода
  for (int dutyCycle = 0; dutyCycle < 1023; dutyCycle++) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

  // уменьшиние яркости светодиода
  for (int dutyCycle = 1023; dutyCycle > 0; dutyCycle--) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }
}

Скопируйте код в свою Arduino IDE и загрузите в ESP8266.

Описание кода ESP8266 NodeMCU PWM.

Начните с определения того, к какому выводу подключен светодиод. В этом случае светодиод присоединяется к GPIO 2 (D4).

const int ledPin = 2;

В loop(), изменяем значение от 0 до 1023 в цикл for, чтобы увеличить яркость светодиода.

// увеличение яркости светодиода
  for (int dutyCycle = 0; dutyCycle < 1023; dutyCycle++) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

Затем от 1023 до 0 для уменьшения яркости.

// уменьшиние яркости светодиода
  for (int dutyCycle = 1023; dutyCycle > 0; dutyCycle--) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

Чтобы установить яркость светодиода, нужно использовать функцию analogWrite (), которая принимает в качестве аргументов GPIO, на котором хотим получить сигнал ШИМ, и значение от 0 до 1023, чтобы установить рабочий цикл.

analogWrite(pin, value);

При работе свечение светодиода сперва увеличивается, а затем уменьшается.

При работе свечение светодиода сперва увеличивается, а затем уменьшается.


Некоторые отладочные платы подключены, имеют подключения встроенного светодиода к GPIO 2 (D4). Ниже приведены фото изменения свечения встроенного светодиода следующих плат:

  • Клон NodeMcu v2

Клон NodeMcu v2

  • WeMos D1

WeMos D1

  • ESP-01 (из 3 различных модификаций всего одна имеет подключение к GPIO 2).

ESP-01 (из 3 различных модификаций всего одна имеет подключение к GPIO 2).


Понравился Урок ESP8266. Использование широтно-импульсной модуляции (ШИМ)? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. Подключение сдвигового регистра 74HC595. http://arduino-tex.ru/news/81/urok-esp8266podklyuchenie-sdvigovogo-registra-74hc595.html Константин Portal-PK 2021-09-02T13:08:34+03:00 Цель этого урока - объяснить, как подключить 8-битный сдвиговый регистр 74HC595 к ESP8266 для управления светодиодами. Также рассмотрим код позволяющий осуществлять управление сдвиговым регистром. Как настроить работу с платой ESP8266 в среде Arduino IDE, описано здесь.

Также у меня есть урок по подключению сдвигового регистра 74HC595 к Arduino, подробнее читайте тут.

Описание сдвигового регистра 74HC595.

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

74HC595 — восьмиразрядный (это означает, что он имеет 8 управляемых выходов) с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой.

Описание сдвигового регистра 74HC595

Описание контактов сдвигового регистра 74HC595.

Как видим, сдвиговый регистр подключается по 3 пинам, а к нему можно подключить 8 светодиодов. Также управлять можно не только светодиодами, но и реле, драйверами,транзисторами и тд.

Для проверки работоспособности предположим, что нужно управлять тремя светодиодами, но можно использовать и другое количество, позднее рассмотрим подключение 8 светодиодов. Номинал резисторов может отличаться для разных подключаемых устройств, потому что они должны быть рассчитаны в соответствии с потребляемым током используемых устройств. В Интернете есть множество руководств и инструкций о том, как рассчитать значения резисторов.

Просто убедитесь, что ток не превышает максимальный 35 мА на выходной контакт и максимальный общий ток 70 мА. Данные значения можете проверить в даташите сдвигового регистра 74HC595.

Описание контактов сдвигового регистра 74HC595.

Для управления устройством нам понадобится всего 3 контакта микроконтроллера. В этом случае используем GPIO12 ESP8266 в качестве вывода данных, который подключен к выводу DS или SER интегральной схемы.

Тактовая частота регистра управляется GPIO15 и подключена к выводу SH_Cp или SCK. Передача данных между регистром сдвига и регистром хранения 75HC595 управляется GPIO13, который подключен к выводу ST_CP или RCK.

Вывод OE напрямую подключен к GND, для того чтобы выводы Q0 – Q7 были активны все время, а MR подключен к VCC, потому что не хотим очищать регистр сдвига с помощью управляемого сигнала.

Поскольку мы не объединяем несколько микросхем 75HC595 в цепочку, контакт OE можно оставить неподключенным.

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

  • GPIO15 - контакт D8 NodeMCU
  • GPIO13 - контакт D7 NodeMCU
  • GPIO12 - контакт D6 NodeMCU

Схема подключения сдвигового регистра 74HC595 к NodeMCU.

Для простоты подключения в уроке будем использовать плату NodeMCU. Подключим сдвиговый регистр к 74HC595 к NodeMCU по схеме.

Схема подключения сдвигового регистра 74HC595 к NodeMCU.

Как видим, у нас используется всего 3 контакта NodeMCU для подключения сдвигового регистра, а на выходе управляем 8 светодиодами. Что позволяет расширить возможности ESP8266.

Основные настройки для работы с сдвиговым регистром.

Как объяснялось ранее, нам понадобятся всего 3 контакта ESP8266 для управления 74HC595. Объявим их как глобальные переменные, а затем инициализируем их как выходные контакты в функции настройки setup().

int dataPin = D6; //Пин подключен к DS входу 74HC595
int latchPin = D7; //Пин подключен к ST_CP входу 74HC595
int clockPin = D8; //Пин подключен к SH_CP входу 74HC595
void setup() { //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

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

Управление сдвиговым регистром 74HC595 при помощи NodeMCU.

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

byte data = B00000001;    // B00000001, B00000010, B00000100,B00001000, ...

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

data = 2; //B00000010;
int integerData = 3; //B00000011;

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

Если же просто хотим включать по одному светодиоду за раз и не хотим беспокоиться о преобразовании двоичного кода в десятичное, мы можем просто использовать функцию bitWrite(). По сути, она позволяет установить значение (HIGH или LOW) определенного бита.

byte bitSpecified = 0;
int bitNumber = 2;
bitWrite (bitSpecified, bitNumber, HIGH);

В этом случае мы записываем значение HIGH (которое соответствует значению 1) в третий бит переменной (младший бит - это бит 0), что будет соответствовать B00000100.

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

digitalWrite (loadPin, LOW); // устанавливаем синхронизацию "защелки" на LOW

Затем мы позаботимся о фактической передаче данных на устройство. Самый простой способ связи со сдвиговым регистром - использовать функцию shiftOut от Arduino.

Эта функция позволяет задавать байт данных (8 бит) побитно. Чтобы достичь этого, каждый бит (представленный сигналом HIGH или LOW) записывается по очереди на ранее указанный вывод, после чего на тактовый вывод подается импульс (принимается HIGH, а затем LOW).

Благодаря этому мы можем легко реализовать процесс загрузки 8 битов в сдвиговый регистр 74HC595. Вызов функции указан ниже.

shiftOut(dataPin, clockPin, MSBFIRST, data); //Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита

Первый аргумент соответствует контакту, на который мы будем передавать данные. Таким образом, именно цифровой вывод микроконтроллера будет подключен к выводу DS интегральной схемы.

Второй аргумент соответствует контакту микроконтроллера, который будет генерировать тактовый сигнал для управления передачей данных на 74HC595.

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

Четвертый и последний аргумент соответствует байту данных, который мы хотим переместить.

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

digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах

Последний пример управления 3 светодиодами с помощью сдвигового регистра приведен ниже.

void loop() {
  byte data = B00000001;    // B00000001, B00000010, B00000100,B00001000, ... 
  digitalWrite(latchPin, LOW);// устанавливаем синхронизацию "защелки" на LOW
  shiftOut(dataPin, clockPin, MSBFIRST, data);// Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита
  digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
  delay(1000);
  data = 2; //B00000010;
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, data);
  digitalWrite(latchPin, HIGH);
  delay(1000);
  int integerData = 3; //B00000011;
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, integerData);
  digitalWrite(latchPin, HIGH);
  delay(1000);
  byte bitSpecified = 0;
  int bitNumber = 2;
  bitWrite(bitSpecified, bitNumber, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, bitSpecified);
  digitalWrite(latchPin, HIGH);
  delay(1000);
  data = 0;
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, data);
  digitalWrite(latchPin, HIGH);
  delay(1000);
}

В коде мы предаём следующие данные в сдвиговый регистр:

  • Первый светодиод горит (B00000001)
  • Второй светодиод горит (B00000010)
  • Горят первый и второй светодиоды (B00000011)
  • Горит третий светодиод (B00000100)
  • Все светодиоды выключены (B00000000)

Пример бегущих огней на сдвиговом регистре 74HC595 и NodeMCU.

Схема подключения остается такой же, как и в предыдущем примере.

Пример бегущих огней на сдвиговом регистре 74HC595 и NodeMCU.

Используя полученные знания, дополним предыдущий пример, в котором передавать значения будем в цикле, поочерёдно включая светодиоды, друг за другом.

int dataPin = D6; //Пин подключен к DS входу 74HC595 
int latchPin = D7; //Пин подключен к ST_CP входу 74HC595 
int clockPin = D8; //Пин подключен к SH_CP входу 74HC595
void setup() { //устанавливаем режим OUTPUT 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
} 
void loop() { 
  byte byteToSend = 0; //Создаем пустой байт B00000000 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
}

Во втором цикле будем включать светодиоды в обратном порядке. В этом нам поможет изменение значение LSBFIRST на MSBFIRST.

int dataPin = D6; //Пин подключен к DS входу 74HC595 
int latchPin = D7; //Пин подключен к ST_CP входу 74HC595 
int clockPin = D8; //Пин подключен к SH_CP входу 74HC595
void setup() { //устанавливаем режим OUTPUT 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
} 
void loop() { 
  byte byteToSend = 0; //Создаем пустой байт B00000000 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    //byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000011, при bitPos=2 - B00000100 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
  for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
    //byteToSend = 0; // Обнуляем байт при каждом проходе 
    bitWrite(byteToSend, bitPos, LOW); // При bitPos=0 получим B11111110, при bitPos=1 - B11111100, при bitPos=2 - B11111000 и т.д. 
    digitalWrite(latchPin, LOW);  // устанавливаем синхронизацию "защелки" на LOW
    shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
    digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    delay(150); 
  } 
}

Пример 2 бегущие огни на сдвиговом регистре 74HC595 и NodeMCU.

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

Вывод.

Как видим сдвиговый регистр достаточно простой в использовании и его можно использовать, когда у нас не хватает пинов на плате ESP8266 (NodeMCU).

Понравился Урок ESP8266.Подключение сдвигового регистра 74HC595? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP8266 уроки. Кодирование сообщений JSON - Encoding JSON messages. http://arduino-tex.ru/news/80/esp826-uroki-kodirovanie-soobshchenii-json.html Константин Portal-PK 2021-08-27T05:06:45+03:00 Цель этого урока - объяснить, как кодировать сообщение JSON (Encoding JSON messages) при помощи ESP8266, используя библиотеку ArduinoJson. Предполагаем, что библиотеки ESP8266 для Arduino IDE были ранее установлены. Вы можете узнать, как это сделать, здесь.

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

Подключение библиотеки ArduinoJson.

Подключение библиотеки ArduinoJson.

Прежде всего, подключим библиотеку ArduinoJson, реализующую функцию синтаксического анализа. Которую можно установить с помощью диспетчера библиотек Arduino IDE.

библиотеку ArduinoJson

#include "ArduinoJson.h"

В целях отладки запускаем последовательное соединение в «функции-настройки» setup().

Serial.begin(115200);
Serial.println();  //Перенос на новую строку

Кодирование сообщений JSON.

Как и в декодировании, сообщение JSON, также объявим объект класса StaticJsonDocument для кодирования. Нам нужно указать размер, достаточный для структуры, которую собираемся создать. В данном случае указываем 300 байт.

StaticJsonDocument<300> JSONencoder;

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

{
"SensorType" : "Temperature",
"Value" : [20,21,23]
}

Чтобы создать простую пару «имя : значение» в структуре JSON, используем оператор индекса или, другими словами, мы используем квадратные скобки.

JSONencoder["sensorType"] = "Temperature";

Для создания массивов, вызываем createNestedArray метод.

JsonArray values = JSONencoder.createNestedArray("values");

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

  values.add(20);
  values.add(21);
  values.add(23);

Наконец, выводим результат в монитор порта, используя serializeJson метод. Также можем напрямую передать последовательное соединение этому методу, чтобы контент печатался напрямую.

serializeJson(JSONencoder, Serial);

Полный код кодирования сообщения JSON приведен ниже.

void loop() {

  Serial.println("—————");
  StaticJsonDocument<300> JSONencoder;

  JSONencoder["sensorType"] = "Temperature";
  JsonArray values = JSONencoder.createNestedArray("values");

  values.add(20);
  values.add(21);
  values.add(23);

  serializeJson(JSONencoder, Serial);

  Serial.println();

  delay(5000);

}

После загрузим кода в плату ESP8266 и откроем монитор порта. Увидим следующий результат.

После загрузим кода в плату ESP8266 и откроем монитор порта. Увидим следующий результат.

Как видим, буквально несколько строк кода помогают кодировать нужные данные в формат JSON (Encoding JSON messages).

Понравился ESP8266 урок. Кодирование сообщений JSON? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Нестандартное удаленное управление реле. Контроль доступа http://arduino-tex.ru/news/79/nestandartnoe-udalennoe-upravlenie-rele-kontrol.html Константин Portal-PK 2021-08-26T11:53:39+03:00 Сегодня в проекте рассмотрим, как можно реализовать нестандартное управление реле с использованием дисплея Nextion и радио модуля NRF24. Благодаря таким нехитрым компонентам можно реализовать контроль доступа и при этом дисплей будет расположен на удаленном расстоянии, от 2 до десятков метров. Давайте рассмотрим, как это будет работать.

Беспроводное управление реле для ограничения доступа.

Для организации контроля доступа будем использовать дисплей Nextion.

Для организации контроля доступа будем использовать дисплей Nextion.

По техническому заданию нужно ограничить доступ по паролю и при этом количество паролей должно быть не менее 100 (желаемое количество 500). При вводе любого правильного пароля попадаем на экран беспроводного управления реле.

При вводе любого правильного пароля попадаем на экран беспроводного управления реле

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

Описание интерфейса дисплея Nextion.

Интерфейс управления состоит из 3 экранов (разделов управления):

  • Первый экран в виде приветственной заставки при клике на любое место происходит перенаправление на экран ввода пароля.

приветственной заставки

  • Второй экран контроля доступа, имеет клавиатур, тестовое поле и кнопку для оправки ввода пароля.

экран контроля доступа

  • Третий экран имеет всего 1 кнопку, которая как раз и включает и включает реле.

Третий экран имеет всего 1 кнопку

Такой небольшой и незамысловатый интерфейс Nextion позволяет организовать контроль доступа к управлению беспроводным реле.

Особенности алгоритма радиореле с пультом в виде дисплея Nextion.

Особенности алгоритма радиореле с пультом в виде дисплея Nextion.

Не смотря на простую схему реализации, алгоритм радиореле с пультом имеет некоторые особенности, которые необходимо учесть при разработке программы.

Обратная связь радио модулей NRF24.

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

Обратная связь радио модулей NRF24.

Хранение и проверка большого количества паролей.

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

Внимание! Проект разрабатывался под заказ и исходные материалы выложить не могу. Группа заказчика на Facebook.

Подведём итоги по беспроводному реле.

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

Также можно расширить каналы управления, например, управлять освещением по всей квартире с одного дисплея, который можно разместить в прихожей, в спальной и тд.

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

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

Понравился проект Нестандартное удаленное управление реле. Контроль доступа? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP8266 уроки. Анализ массивов JSON. http://arduino-tex.ru/news/78/esp826-uroki-analiz-massivov-json.html Константин Portal-PK 2021-08-24T05:36:13+03:00 В этом уроке ESP8266 создадим простую программу для анализа строки JSON, которая включает в себя массив целых чисел. Все необходимые библиотеки ESP8266 для Arduino IDE были ранее установлены в предыдущей статье, подробнее здесь.

Кроме того, объяснения, как использовать библиотеку анализа простых пар JSON «имя : значение», можно прочитать в предыдущим уроке.

Подготовка для анализа массива JSON.

Прежде всего, подключим библиотеку, реализующую функцию синтаксического анализа JSON. Которую можно установить с помощью диспетчера библиотек Arduino IDE.

библиотеку ArduinoJson

#include "ArduinoJson.h"

В целях отладки запускаем последовательное соединение в функции настройки setup().

Serial.begin(115200);
Serial.println();  //Перенос на новую строку

Основной цикл программы.

Остальные функции реализуем в основном цикле loop().

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

char JSONMessage[] = "{\"SensorType\":\"Temperature\", \"Value\": [20,21,23]}";

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

{
"SensorType" : "Temperature",
"Value" : [20,21,23]
}

Затем нам нужно объявить объект класса StaticJsonDocument, который будет содержать дерево объектов. Мы указываем значение размера, которое достаточно велико для структуры, которую мы хотим проанализировать (в данном случае это 300 байт).

 StaticJsonDocument<300> parsed;   //Пул памяти

После этого вызываем объект DeserializationError, передавая строку JSON в качестве аргумента.

// Десериализация документа JSON
  DeserializationError error = deserializeJson(parsed, JSONMessage);

Чтобы проверить, успешно ли был проанализирован JSON, проверим, удалось ли выполнить синтаксический анализ.

// Проверьте, удастся ли выполнить синтаксический анализ.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  else {   //Вывести если ошибок нет
    Serial.println("There are no errors");
    delay(5000);
  }

Поскольку процедура получения проанализированного значения из простой пары «имя / значение» была объяснена в предыдущем уроке, сразу перейдем к тому, как получить значения из массива JSON.

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

int value0=parsed["Value"][0];
int value1=parsed["Value"][1];
int value2=parsed["Value"][2];

В библиотеке ArduinoJson есть несколько полезных методов, которые можно увидеть здесь. Естественно, один из доступных методов позволяет нам получить элемент определенного индекса.

JsonArray& values= parsed["Value"];

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

int arraySize =  parsed["Value"].size();
  for (int i = 0; i< arraySize; i++){
  int sensorValue=parsed["Value"][i];
  Serial.println(sensorValue);
}

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

Serial.println(parsed["Value"][i].as<int>());

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

Вывод параметром полученных из массива JSON.

Итак, чтобы подвести итог, рассмотрим окончательный код, который включает еще несколько дополнительных примеров и проверку на наличие ошибок.
void loop() {

  Serial.println("——————");

  char JSONMessage[] = "{\"SensorType\":\"Temperature\", \"Value\": [20,21,23]}";//Исходное сообщение
  Serial.print("Initial string value: ");
  Serial.println(JSONMessage);

  StaticJsonDocument<300> parsed;   //Пул памяти
  // Десериализация документа JSON
  DeserializationError error = deserializeJson(parsed, JSONMessage);
  // Проверьте, удастся ли выполнить синтаксический анализ.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  else {   //Вывести если ошибок нет

    Serial.println("There are no errors");
    delay(5000);
  }

  const char* sensorType = parsed["SensorType"]; //Получить значение типа датчика
  Serial.println(sensorType);


  int arraySize = parsed["Value"].size();   //получить размер массива JSON
  Serial.print("\nSize of value array: ");
  Serial.println(arraySize);

  Serial.println("\nArray values without explicit casting");
  for (int i = 0; i < arraySize; i++) { 

    int sensorValue = parsed["Value"][i];  //Значения массива без явного приведения
    Serial.println(sensorValue);

  }

  Serial.println("\nArray values with explicit casting");
  for (int i = 0; i < arraySize; i++) {  

    Serial.println(parsed["Value"][i].as<int>());//Значения массива с явным приведением

  }

  Serial.println();
  delay(5000);
}

Вывод параметром полученных из массива JSON.

Откроем монитор порта, и мы должны увидеть следующий результат.

Как видим, вывод массивов JSON не сильно усложняет работу с JSON.

Как видим, вывод массивов JSON не сильно усложняет работу с JSON.

Понравился ESP8266 урок. Анализ массивов JSON? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Дешёвое и простое дистанционное управление ПК. http://arduino-tex.ru/news/77/deshevoe-i-prostoe-distancionnoe-upravlenie-pk.html Константин Portal-PK 2021-08-20T12:30:57+03:00 Сегодня в проекте рассмотрим самое простое и дешёвое дистанционное управление ПК, которое можно сделать самостоятельно буквально за 20-30 минут. В этом нам помогут знания, которые были получены из предыдущих статей и Arduino уроков:

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

Сегодня в проекте рассмотрим самое простое и дешёвое дистанционное управление ПК

Что понадобится для управления компьютером через USB?

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

Что понадобится для управления компьютером через USB

Как видим, для проекта нужно минимум комплектующих и если их покупать в Китае, то можно уложиться в 2-5 $.

Схема подключения устройства удаленного управления ПК.

Сперва, рассмотрим схему подключения устройства удаленного управления ПК с использованием модуля KY-022. Данный вариант более простой в подключении и можно обойтись без пайки.

Схема подключения устройства удаленного управления ПК.

Второй вариант схемы устройства удаленного управления ПК более компактный и представляется в виде девайса, у которого нет дополнительных проводов.

Второй вариант схемы устройства удаленного управления ПК более компактный

Все элементы распаиваются на плате и устройство можно подключить в любой доступный USB разъем. Главное, чтобы IR приемник был в пределах видимости.

Также пригодятся знания о распиновке IR приемника.

Также пригодятся знания о распиновке IR приемника.

Код управления компьютером с помощью пульта ДУ.

Код управления компьютером с помощью пульта дистанционного управления сделан на основе урока: DigiSpark attiny85 считываем код пульта ДУ. Поэтому подробно рассказывать про библиотеку и что откуда берётся не буду. Если вам интересно посмотрите урок.

Как получить код с пульта дистанционного управления?

//отладка. Установите значение 0 после поиска ваших кодов
#define DEBUG 1

Для получения кода кнопок в скетче есть переменная DEBUG, если установить значение данной переменой 1 и загрузить прошивку в DigiSpark то при нажатии на клавиши на пульте в текстовом документе увидим код данной кнопки. Можно установить курсов в скетче, где нужно задать код кнопки пульта, и нажать на кнопку и у вас автоматически заполнятся нужные поля.

Как получить код с пульта дистанционного управления?

Таким образом, можно добавить все коды с пульта.

//Укажите свои коды здесь:
#define REMOTE_OK 0x61D66897
#define REMOTE_LEFT 0x61D618E7
#define REMOTE_RIGHT 0x61D630CF
#define REMOTE_DOWN 0x61D6A857
#define REMOTE_UP 0x61D6D02F
#define REMOTE_ESC 0x61D638C7
#define REMOTE_VOL_UP 0x61D650AF
#define REMOTE_VOL_DOWN 0x61D628D7
#define REMOTE_RETURN 0x61D6B04F
#define REMOTE_PLAYPAUSE 0x61D6D827
#define REMOTE_NEXT 0x61D67887
#define REMOTE_PREV 0x61D6F807

После того как все коды вашего пульта указаны в скетче, верните значение переменой #define DEBUG 0. И загрузите код повторно. После чего можно управлять вашим компьютером с помощью пульта ДУ.

//отладка. Установите значение 0 после поиска ваших кодов
#define DEBUG 1
//Укажите свои коды здесь:
#define REMOTE_OK 0x61D66897
#define REMOTE_LEFT 0x61D618E7
#define REMOTE_RIGHT 0x61D630CF
#define REMOTE_DOWN 0x61D6A857
#define REMOTE_UP 0x61D6D02F
#define REMOTE_ESC 0x61D638C7
#define REMOTE_VOL_UP 0x61D650AF
#define REMOTE_VOL_DOWN 0x61D628D7
#define REMOTE_RETURN 0x61D6B04F
#define REMOTE_PLAYPAUSE 0x61D6D827
#define REMOTE_NEXT 0x61D67887
#define REMOTE_PREV 0x61D6F807

Пример, чем можно управлять с помощью данного девайса.

Первое и самое распространённое, чем можно управлять это музыка. Причем ограничений тут нет. Управлять можно как вашим встроенным музыкальным плеером. Например, я использую VLС.

Управлять можно как вашим встроенным музыкальным плеером.

Так и управление музыкой, которую включили в браузере. Например, на сайте Вконтакте.

Так и управление музыкой, которую включили в браузере. Например, на сайте Вконтакте.

Также без проблем можно регулировать общую громкость на компьютере.

регулировать общую громкость на компьютере.

Второе, что приходит на ум это игры. Да, можно настроить для беспроводного управления в некоторых играх. Но тут есть свои ограничения. Устройство не может предавать удержание клавиши. Что приводит к уменьшению спектра игр, где можно было бы использовать данное устройства.

беспроводного управления в некоторых играх

Третье применение это управление системой: можно выключить ПК, перезагрузить или перевести в режим сна.

case REMOTE_OK:
        TrinketHidCombo.pressKey(0, KEYCODE_ENTER);
      break;
    case REMOTE_LEFT:
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_LEFT);
      break;
    case REMOTE_RIGHT:
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_RIGHT);
      break;
    case REMOTE_DOWN:
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_DOWN);
      break;
    case REMOTE_UP:
        TrinketHidCombo.pressKey(0, KEYCODE_ARROW_UP);
      break;
    case REMOTE_ESC:
      TrinketHidCombo.pressKey(0, KEYCODE_ESC);
      break;
    case REMOTE_RETURN:
      TrinketHidCombo.pressKey(0, KEYCODE_BACKSPACE);
      break;
    case REMOTE_VOL_UP:
      TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP);
      break;
    case REMOTE_VOL_DOWN:
      TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_DOWN);
      break;
    case REMOTE_PREV:
      TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_PREV_TRACK);
      break;
    case REMOTE_NEXT:
      TrinketHidCombo.pressMultimediaKey(MMKEY_SCAN_NEXT_TRACK);
      break;
    case REMOTE_PLAYPAUSE:
      TrinketHidCombo.pressMultimediaKey(MMKEY_PLAYPAUSE);
      break;

Вы можете самостоятельно расширить функционал беспроводного управления ПК. А чтобы вам не пришлось искать команды, которые можно использовать. Ниже приведён файл библиотеки TrinketHidCombo.h в котором расписаны все доступные команды.

// helps translate ASCII characters into keycode and modifier combinations, while taking into account whether or not caps lock is on
void ASCII_to_keycode(uint8_t ascii, uint8_t ledState, uint8_t* modifier, uint8_t* keycode);
// an instance that the user can use
extern Trinket_Hid_Combo TrinketHidCombo;
// use these masks with the "move" function
#define MOUSEBTN_LEFT_MASK        0x01
#define MOUSEBTN_RIGHT_MASK        0x02
#define MOUSEBTN_MIDDLE_MASK    0x04
// LED state masks
#define KB_LED_NUM            0x01
#define KB_LED_CAPS            0x02
#define KB_LED_SCROLL        0x04
// some convenience definitions for modifier keys
#define KEYCODE_MOD_LEFT_CONTROL    0x01
#define KEYCODE_MOD_LEFT_SHIFT        0x02
#define KEYCODE_MOD_LEFT_ALT        0x04
#define KEYCODE_MOD_LEFT_GUI        0x08
#define KEYCODE_MOD_RIGHT_CONTROL    0x10
#define KEYCODE_MOD_RIGHT_SHIFT        0x20
#define KEYCODE_MOD_RIGHT_ALT        0x40
#define KEYCODE_MOD_RIGHT_GUI        0x80
// some more keycodes
#define KEYCODE_LEFT_CONTROL    0xE0
#define KEYCODE_LEFT_SHIFT        0xE1
#define KEYCODE_LEFT_ALT        0xE2
#define KEYCODE_LEFT_GUI        0xE3
#define KEYCODE_RIGHT_CONTROL    0xE4
#define KEYCODE_RIGHT_SHIFT        0xE5
#define KEYCODE_RIGHT_ALT        0xE6
#define KEYCODE_RIGHT_GUI        0xE7
#define KEYCODE_1                0x1E
#define KEYCODE_2                0x1F
#define KEYCODE_3                0x20
#define KEYCODE_4                0x21
#define KEYCODE_5                0x22
#define KEYCODE_6                0x23
#define KEYCODE_7                0x24
#define KEYCODE_8                0x25
#define KEYCODE_9                0x26
#define KEYCODE_0                0x27
#define KEYCODE_A                0x04
#define KEYCODE_B                0x05
#define KEYCODE_C                0x06
#define KEYCODE_D                0x07
#define KEYCODE_E                0x08
#define KEYCODE_F                0x09
#define KEYCODE_G                0x0A
#define KEYCODE_H                0x0B
#define KEYCODE_I                0x0C
#define KEYCODE_J                0x0D
#define KEYCODE_K                0x0E
#define KEYCODE_L                0x0F
#define KEYCODE_M                0x10
#define KEYCODE_N                0x11
#define KEYCODE_O                0x12
#define KEYCODE_P                0x13
#define KEYCODE_Q                0x14
#define KEYCODE_R                0x15
#define KEYCODE_S                0x16
#define KEYCODE_T                0x17
#define KEYCODE_U                0x18
#define KEYCODE_V                0x19
#define KEYCODE_W                0x1A
#define KEYCODE_X                0x1B
#define KEYCODE_Y                0x1C
#define KEYCODE_Z                0x1D
#define KEYCODE_COMMA            0x36
#define KEYCODE_PERIOD            0x37
#define KEYCODE_MINUS            0x2D
#define KEYCODE_EQUAL            0x2E
#define KEYCODE_BACKSLASH        0x31
#define KEYCODE_SQBRAK_LEFT        0x2F
#define KEYCODE_SQBRAK_RIGHT    0x30
#define KEYCODE_SLASH            0x38
#define KEYCODE_F1                0x3A
#define KEYCODE_F2                0x3B
#define KEYCODE_F3                0x3C
#define KEYCODE_F4                0x3D
#define KEYCODE_F5                0x3E
#define KEYCODE_F6                0x3F
#define KEYCODE_F7                0x40
#define KEYCODE_F8                0x41
#define KEYCODE_F9                0x42
#define KEYCODE_F10                0x43
#define KEYCODE_F11                0x44
#define KEYCODE_F12                0x45
#define KEYCODE_APP                0x65
#define KEYCODE_ENTER            0x28
#define KEYCODE_BACKSPACE        0x2A
#define KEYCODE_ESC                0x29
#define KEYCODE_TAB                0x2B
#define KEYCODE_SPACE            0x2C
#define KEYCODE_INSERT            0x49
#define KEYCODE_HOME            0x4A
#define KEYCODE_PAGE_UP            0x4B
#define KEYCODE_DELETE            0x4C
#define KEYCODE_END                0x4D
#define KEYCODE_PAGE_DOWN        0x4E
#define KEYCODE_PRINTSCREEN        0x46
#define KEYCODE_ARROW_RIGHT        0x4F
#define KEYCODE_ARROW_LEFT        0x50
#define KEYCODE_ARROW_DOWN        0x51
#define KEYCODE_ARROW_UP        0x52
// multimedia keys
#define MMKEY_KB_VOL_UP            0x80 // do not use
#define MMKEY_KB_VOL_DOWN        0x81 // do not use
#define MMKEY_VOL_UP            0xE9
#define MMKEY_VOL_DOWN            0xEA
#define MMKEY_SCAN_NEXT_TRACK    0xB5
#define MMKEY_SCAN_PREV_TRACK    0xB6
#define MMKEY_STOP                0xB7
#define MMKEY_PLAYPAUSE            0xCD
#define MMKEY_MUTE                0xE2
#define MMKEY_BASSBOOST            0xE5
#define MMKEY_LOUDNESS            0xE7
#define MMKEY_KB_EXECUTE        0x74
#define MMKEY_KB_HELP            0x75
#define MMKEY_KB_MENU            0x76
#define MMKEY_KB_SELECT            0x77
#define MMKEY_KB_STOP            0x78
#define MMKEY_KB_AGAIN            0x79
#define MMKEY_KB_UNDO            0x7A
#define MMKEY_KB_CUT            0x7B
#define MMKEY_KB_COPY            0x7C
#define MMKEY_KB_PASTE            0x7D
#define MMKEY_KB_FIND            0x7E
#define MMKEY_KB_MUTE            0x7F // do not use
// system control keys
#define SYSCTRLKEY_POWER        0x01
#define SYSCTRLKEY_SLEEP        0x02
#define SYSCTRLKEY_WAKE            0x03
#endif

И по аналогии вы можете сделать любое количество функциональных клавиш. При желании можно сделать полноценную клавиатуру или мышь.

Плюсы самодельного устройства:

  • Небольшой размер
  • Небольшая стоимость
  • Простота сборки
  • Можно сделать устройства под конкретные задачи.

Минусы удаленного управления компьютером.

  • Самый основной минус это канал связи. С помощью IR пульта можно управлять только в приделах видимости приемника и относительно на небольшом расстоянии. (Можно реализовать связь и по другим каналам связи).
  • Нет возможности передавать удержание клавиши. Что уменьшает спектр применения. (возможно можно передавать, но я не нашел в документации к библиотеки об этом информации. Если у вас есть информация по данному вопросу, пишите в комментарии.)

Минусы удаленного управления компьютером.

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

Понравился проект Дешёвое и простое дистанционное управление ПК? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
DigiSpark attiny85 считываем код пульта ДУ. http://arduino-tex.ru/news/76/digispark-attiny85-schityvaem-kod-pulta-du.html Константин Portal-PK 2021-08-19T05:52:14+03:00 Сегодня в уроке рассмотрим, как можно считать код клавиш с пульта ДУ при помощи DigiSpark на микроконтроллере attiny85. Боле подробно познакомиться с отладочной платой DigiSpark attiny85 вы можете вот в этой статье.

Сегодня в уроке рассмотрим, как можно считать код клавиш с пульта ДУ при помощи DigiSpark на микроконтроллере attiny85.

Программировать DigiSpark будем в среде Arduino IDE. Для получения кода клавиш с инфракрасного пульта дистанционного управления необходимо установить дополнительную библиотеку, но обо всем по порядку.

Настройка Arduino IDE для работы с DigiSpark и установка библиотеки Adafruit Trinket USB.

Для начала нам необходимо настроить Arduino IDE для работы с платой DigiSpark. Пошаговую инструкцию вы можете посмотреть в статье DigiSpark ATtiny85 настройка Arduino IDE и установка драйвера. А в данном уроке вкратце расскажу про данные настройки.

  • Добавляем DigiSpark в список отладочных плат Arduino IDE.

В открывшемся окне настроек нам нужно добавить ссылку для менеджера плат.

  • Устанавливаем драйвер для DigiSpark.

Установка драйверов для DigiSpark.

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

Установка библиотеки Adafruit Trinket USB.

Библиотека Adafruit Trinket USB содержит различные функции позволяющие использовать микроконтроллер, такой как DigiSpark, Arduino Micro, Arduino Leonardo в качестве клавиатуры, мышки для ПК. В данном уроке будем использовать библиотеку TrinketHidCombo, которая идет в составе набора библиотек Adafruit Trinket USB. Давайте приступим к её установке.

Для того чтобы установить библиотеку Adafruit Trinket USB необходимо её скачать с сайта GitHub.

 библиотеку Adafruit Trinket USB необходимо её скачать

После чего с помощью инструмента «Скетч -> Подключить библиотеку -> Добавить ZIP библиотеку..». Загружаем библиотеку в среду разработки.

Скетч Подключить библиотеку Добавить ZIP библиотеку..

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

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

Схема подключения к DigiSpark IR приемника в виде модуля KY-022.

Для простоты использования в уроке будем использовать модуль IR приемника KY-022. Про данный модуль у меня есть отдельный урок, почитать который вы сможете тут. Итак, берем модуль KY-022 и подключаем его к DigiSpark по схеме приведённой ниже.

Схема подключения к DigiSpark IR приемника в виде модуля KY-022.

Схема подключения ИК приёмника (IRremote) KY-022 к DigiSpark и пульт ДУ.

Схема подключения ИК приёмника (IRremote) KY-022 к DigiSpark и пульт ДУ.

Вот так будет схематично выглядеть передача сигнала с пульта ДУ. Сейчас перейдем к программной части и передадим полученный код с пульта ДУ на компьютер.

Скетч DigiSpark attiny85 считывания кода с пульта ДУ.

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

#include "TrinketHidCombo.h"

Затем в блоке setup() сделаем все необходимые настройки.

  DDRB |= (1 << DDB1);      //P1 (LED) OUT в скетче не использован
  PORTB |= 1 << PB2;        // подтяжка PB2 не помешает.
  GIMSK |= 1 << INT0;       //прерывание int0 включить
  MCUCR |= 1 << ISC00;      //Любое логическое изменение в INT0 генерирует запрос на прерывание
  GTCCR |= 1 << PSR0; TCCR0A = 0;
  TCCR0B = (1 << CS02) | (1 << CS00); 
  TIMSK = 1 << TOIE0;       //таймер прерывания
  TrinketHidCombo.begin(); // запустите механизм USB-устройства

Напишем 2 вспомогательные функции.

ISR (INT0_vect) {
  if (PINB & 1 << 2) { // Если лог1
    TCNT0 = 0;
  }
  else {
    tcnt = TCNT0; // если лог 0
    if (startflag) {
      if (30 > tcnt  && tcnt > 2) {
        if (tcnt > 15 && m < 32) {
          irdata |= ((uint32_t)1 << m);
        }
        m++;
      }
    }
    else  startflag = 1;
  }
}
ISR (TIMER0_OVF_vect) {
  //если сработало это прерывание, значит конец посылки
  if (m) {
    complete = 1; m = 0; startflag = 0; keydata = irdata; irdata = 0; // если индекс не 0, то создать флаг конца
  }
}

И в основном цикле loop() получение значения с IR приемника выведем на ПК в любом текстовом редакторе.

if (complete) {         // получили что то сприемника
    TrinketHidCombo.println(keydata, HEX); 
    TrinketHidCombo.pressKey(0, 0); // печатем полуенное значение
    delay(200);           // во избежание слишком частого повтора ввода клавиш
    complete = 0;
  }

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

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

Получим список команд всех клавиш в текстовом документе,

У вас, наверное, возник резонный вопрос: Зачем это нужно? Ведь с помощью Arduino UNO получить коды клавиш пульта ДУ проще. Так и есть. Но данный урок это подготовка базы для реализации управления приложениями на ПК с помощью Digispark. О чем расскажу в ближайшем проекте.

Появились вопросы или предложения оставляйте их в комментариях.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился урок. DigiSpark attiny85 считываем код пульта ДУ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP8266 уроки. Анализ JSON в среде Arduino IDE. http://arduino-tex.ru/news/75/esp826-uroki-analiz-json-v-srede-arduino-ide.html Константин Portal-PK 2021-08-17T05:43:27+03:00 В этом уроке ESP8266 создадим простую программу для синтаксического анализа строки JSON, имитирующей данные с датчика, и вывод полученных значений в последовательный порт. Для данного урока вам нужно установить библиотеки ESP8266 для Arduino IDE, о чем рассказывал здесь.

Чтобы избежать ручного декодирования строки в пригодные для использования значения, будем использовать библиотеку ArduinoJson, которая предоставляет простые в использовании классы и методы для синтаксического анализа JSON. С библиотекой и ее возможностями можно ознакомиться на GitHub.

Эта очень полезная библиотека позволяет, как кодировать, так и декодировать JSON, она очень эффективна и работает на ESP8266. Её можно установить через «менеджер библиотек» Arduino IDE, как показано на рисунке ниже.

библиотеку ArduinoJson

Основные настройки для работы esp8266 json http.

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

#include "ArduinoJson.h"

Поскольку в этой библиотеке есть некоторые приемы, позволяющие избежать проблем при ее использовании, в этом уроке будет показано, как анализировать локально созданную строку, и поэтому мы не будем использовать функции WiFi. Итак, мы просто запустим последовательное соединение. Но вы можете использовать esp8266 json http на основании предыдущих уроков.

void setup() {
  Serial.begin(115200);
  Serial.println();  //Перенос на новую строку
}

Основной код разбора JSON с помощью ESP8266.

В функции основного цикла loop() объявим сообщение JSON, которое будет проанализировано. Символы «\» используются для экранирования двойных кавычек в строке, поскольку имена JSON требуют двойных кавычек.

char JSONMessage[] ="{\"SensorType\":\"Temperature\", \"Value\": 10}";

Эта простая структура состоит из 2 пар «имя : значение», соответствующих типу датчика и значению для этого датчика. Для удобства чтения, структура JSON данных показана ниже без экранирования символов.

{
"SensorType" : "Temperature",
"Value" : 10
}

Затем нам нужно объявить объект класса StaticJsonDocument. Он будет соответствовать предварительно выделенному пулу памяти для хранения дерева объектов, и его размер указывается в параметре шаблона (значение между <> ) в байтах.

StaticJsonDocument<300> parsed;   //Пул памяти

В этом случае мы объявили размер 300 байт, что более чем достаточно для строки, которую хотим проанализировать. Автор библиотеки указывает здесь два подхода к определению размера буфера. Лично я предпочитаю объявлять буфер, имеющий достаточный размер для ожидаемой полезной нагрузки сообщения, и проверять наличие ошибок на этапе синтаксического анализа.

Библиотека также поддерживает динамическое выделение памяти, но такой подход не рекомендуется.

Затем вызываем объект DeserializationError, передавая строку JSON в качестве аргумента.

// Десериализация документа JSON
  DeserializationError error = deserializeJson(parsed, JSONMessage);

Чтобы проверить, успешно ли был проанализирован JSON, проверим, удалось ли выполнить синтаксический анализ.

// Проверьте, удастся ли выполнить синтаксический анализ.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  else {   //Вывести если ошибок нет

    Serial.println("There are no errors");
    delay(5000);
  }

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

  const char* sensorType = parsed["SensorType"]; //Получить значение типа датчика
  int value = parsed["Value"];                    //Получить значение измерения датчика

Код основного цикла программы показана ниже. Мы включили несколько дополнительных выводов информации, чтобы отделить каждую итерацию функции цикла и показать, как исходная строка изменяется при синтаксическом анализе. Нам нужно напечатать значения char из char, потому что синтаксический анализатор включает символы «\0», и поэтому, если бы мы использовали Serial.println (JSONMessage), мы бы просто видели содержимое до первого символа «\0».

void loop() {

  Serial.println("——————");

  char JSONMessage[] = " {\"SensorType\": \"Temperature\", \"Value\": 10}"; //Исходное сообщение
  Serial.print("Initial string value: ");
  Serial.println(JSONMessage);

  StaticJsonDocument<300> parsed;   //Пул памяти
  // Десериализация документа JSON
  DeserializationError error = deserializeJson(parsed, JSONMessage);
  // Проверьте, удастся ли выполнить синтаксический анализ.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  else {   //Вывести если ошибок нет

    Serial.println("There are no errors");
    delay(5000);
  }

  const char* sensorType = parsed["SensorType"]; //Получить значение типа датчика
  int value = parsed["Value"];                    //Получить значение измерения датчика

  Serial.println(sensorType);
  Serial.println(value);

  Serial.print("Final string value: ");

  for (int i = 0; i < 35; i++) { //Выведите измененную строку после синтаксического анализа

    Serial.print(JSONMessage[i]);
    Serial.print(" ");
  }

  Serial.println();
  delay(5000);
}

Проверка кода вывода значений полученных из JSON с помощью ESP8266 (NodeMCU).

Чтобы протестировать код, просто скомпилируйте его, и загрузите на плату ESP8266 (NodeMCU). После этого откройте последовательный монитор Arduino IDE. На рисунке ниже показан результат, вывода данных в последовательный порт.

Проверка кода вывода значений полученных из JSON с помощью ESP8266 (NodeMCU).

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

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

Заключение к уроку Arduino json esp8266.

Заключение к уроку Arduino json esp8266.

В этом уроке показано, как легко анализировать JSON при помощи ESP8266 в среде Arduino. Естественно, это позволяет изменять данные в хорошо известном структурированном формате, который может быть легко интерпретирован другими приложениями, без необходимости реализации определенного протокола.

Поскольку микроконтроллеры и устройства IoT имеют ограниченные ресурсы, JSON создает гораздо меньше расходов ресурсов, чем, например, XML, и поэтому является очень хорошим выбором.

Тем не менее, нужно иметь в виду, что для некоторых интенсивных приложений даже JSON может создавать недопустимые нагрузки, и поэтому нам может потребоваться перейти на байтовые протоколы. Но для простых приложений, таких как чтение данных с датчика и отправка их на удаленный сервер или получение набора конфигураций, JSON является очень хорошей альтернативой.

Понравился ESP826 урок. Анализ JSON в среде Arduino IDE? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Управление реле с компьютера при помощи Arduino и bluetooth. http://arduino-tex.ru/news/74/upravlenie-rele-s-kompyutera-pri-pomoshchi-arduino-i-bluetooth.html Константин Portal-PK 2021-08-13T09:22:11+03:00 Сегодня в проекте рассмотрим беспроводное управление реле с компьютера при помощи Arduino NANO и bluetooth модуля hc-06. Приложение для компьютера сделал в программе Processing. Не смотря на свой простой дизайн приложения можно использовать для управления от 1 до 5 реле. Для этого достаточно в приложении и в прошивке для Arduino изменить одну переменную. При этом в интерфейсе приложения будет отображать нужное количество кнопок управления и сопутствующей информации.


Описание программы для управления реле с компьютера при помощи Arduino и bluetooth.

Пред тем как делать программу, нужно определиться с её функциями и возможностями. По планам, мое приложение для ПК должно иметь кнопку включения и выключения реле или светодиода. Изначально планировал сделать по 2 кнопки управления, одна включает, вторая выключает реле. Но потом понял, что гораздо нагляднее будет сделать 1 кнопку для управления реле и вывести статус «включено» или «выключено» реле. В итоге получился вот такой интерфейс.

Изначально планировал сделать по 2 кнопки управления, одна включает, вторая выключает реле.

Чтобы сделать программу более функциональной, решил изменить количество управляемого оборудования. Для этого достаточно поменять 1 значение в коде и количество элементов меняется от 1 до 5.

Описание программы для управления реле с компьютера при помощи Arduino и bluetooth.

При нажатии на кнопку происходит изменение цвета обводки. Что наглядно отображает работу кнопки. А также при смене состояния реле меняется цвет шрифта на кнопке и изменяется статус: ВКЛ или ВЫКЛ.

Это мое первое приложение, сделанное в Processing, поэтому прошу строго не судить. Если вдруг увидите костыли, прошу указать на более правильное решение. Оставляйте ваши предложения в «Комментариях».

Для проекта понадобиться следующая электроника:

- ARDUINO NANO

- HC-05 hc-06 Bluetooth

- Релейный модуль 5 в 1, 2,4, 6, 8 каналов

Описание кода Processing IDE для создания программы управления Arduino.

Сначала подключаем библиотеку для работы с последовательным портом и создадим объект, чтобы включить последовательное соединение, а также создадим массив для хранения статуса реле. Самая важная переменная это int n = 5; Отвечающая за количество управляемых реле.

boolean flag[] = new boolean[n];
boolean flagOld[] = new boolean[n];
int step = 70;
void setup() {
  size(450, 480);
  myPort = new Serial(this, "COM18", 9600); // Запускает последовательное соедениние
  myPort.bufferUntil('\n'); // Определяет, до какого символа будут считываться данные с последовательного порта. Символ "\n" или "Новая строка"
}

В разделе настройки нам нужно установить размер окна программы и запустить последовательное соединение. Что касается номера COM-порта. Необходимо перейти в раздел «Панель управления\Оборудование и звук\Устройства и принтеры».

Панель управления\Оборудование и звук\Устройства и принтеры

Посмотреть свойства вашего устройства, нажав на иконку правой кнопкой мыши и выбрав в выпадающем меню «Свойства».

Посмотреть свойства вашего устройства, нажав на иконку правой кнопкой мыши

В открывшемся окне переходим на вкладку «Службы». Тут мы увидим «Последовательный порт», в моем случае это «COM18». У вас будет другой.

увидим «Последовательный порт», в моем случае это «COM18»

В основной функции draw (), которая постоянно повторяется, мы делаем всю графику и функции программы. Итак, сначала нам нужно установить цвет фона, цвет заливки, размер и цвет обводки, а затем с помощью функции rect () рисуем кнопку. Используя функцию text (), мы выводим весь текст, включая строку ledStatus.

  background(227, 230, 231);
  textSize(26);
  fill(20, 160, 133);
  text("Управление реле с компьютера", 15, 35);
  textSize(24);
  fill(33);
  text("№", 12, 80);
  text("Реле", 80, 80);
  text("Состояние", 230, 80);

    textSize(24);
    fill(33);
    text(i+1, 12, 135+i*step);

    fill(20, 160, 133); // Зеленый Цвет
    stroke(33);
    strokeWeight(1);
    rect(50, 100+i*step, 150, 50, 10);  
    fill(255);
    textSize(28);
    text("Включить", 60, 135+i*step);

Теперь осталось сделать кнопки работоспособными. Для этого используем оператор «if», при нажатии кнопки символ команды будет отправлен через последовательный порт на Arduino, и это включит или выключит реле. Следующие строки используются для выделения кнопки при ее нажатии.

// Если нажата кнопка 
    if (mousePressed && mouseX>50 && mouseX<200 && mouseY>100+i*step && mouseY<150+i*step) {

      // Выделяет кнопки красным цветом при нажатии
      stroke(255, 0, 0);
      strokeWeight(3);
      noFill();
      rect(50, 100+i*step, 150, 50, 10);
      if (!flagOld[i])
      {
        flag[i] = !flag[i];
        flagOld[i] = true;
        int s;
        if (flag[i])
          s = i;
        else
          s = i+n;
        myPort.write(str(s)); // Посылает символ 
      }
    } else {

      flagOld[i] = false;
    }

Изменения значения flag в массиве, изменяет состояние кнопки и статуса которые выводим ниже.

if (flag[i]) {
      fill(20, 160, 133); // Зеленый Цвет
      stroke(33);
      strokeWeight(1);
      rect(50, 100+i*step, 150, 50, 10);  
      fill(255);
      textSize(26);
      text(onButton, 60, 135+i*step);
      ledStatus[i] = "ВКЛ.";
    } else
    {
      fill(20, 160, 133); // Зеленый Цвет
      stroke(33);
      strokeWeight(1);
      rect(50, 100+i*step, 150, 50, 10);  
      fill(255, 255, 0);
      textSize(26);
      text(offButton, 60, 135+i*step);
      ledStatus[i] = "ВЫКЛ.";
    }

И для вывода определённого количества элементов управления необходим цикл.

for (int i=0; i< n; i++) {
...
}

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

Схема подключения модуля с четырьмя реле и bluetooth hc-06 к Arduino.

Схема подключения модуля с четырьмя реле и bluetooth hc-06 к Arduino.

Подключить реле можно в количестве от 1 до 5 шт. На схеме приведен пример подключения модуля с 4 реле и bluetooth hc-06 к Arduino. Вы можете использовать другое количество реле и другой модуль bluetooth. А также подключить твердотельное реле. В связи с тем, что твердотельное реле чаще всего высокоуровневое, в прошивке есть переменная, отвечающая за выбор логического уровня реле.

Пример исходного кода Arduino управления реле по Bluetooth.

Пример исходного кода Arduino управления реле по Bluetooth.

В связи с тем, что программа для ПК получилась универсальная и можно изменять количество управляемых реле. Скетч для Arduino нужно также сделать максимально универсальным.

Первым делом подключим библиотеку для создания программного Serial порта. И укажем переменные, к которым подключим модуль Bluetooth.

#include <SoftwareSerial.h>
const int rx = 3;
const int tx = 4;
SoftwareSerial mySerial (rx, tx);

Также в скетче я предусмотрел настройки для изменения типа рел. Значение 1 – позволит управлять реле высокого уровня. Значение 0 – в свою очередь позволит управлять реле низкого уровня.

const bool level = 1; // 1 - реле высокого уровня 0 - реле низкого уровня
int relay_num = 4;     // количество реле 1-5
int sdvig_pin = 5;     // начальный пин подключения

Следующие 2 переменные определяют, сколько реле мы планируем подключить и номер пина, с которого будет вестись подключение. Соответственно, если мы начинаем с 5 pin и подключим 2 реле, это означает, что реле нужно будет подключить к пинам 5,6. Если нам нужно подключить 4 реле, то для этого будем использовать уже pin 5,6,7,8. И так далее.

Это основные настройки которые нужно знать. Всю программу разбирать не буду. Если вы разбираетесь в программировании, то вы без труда в ней разберётесь. Также в программе есть один костыль. Если у вас есть решение как его исправить пишите в комментариях.

Беспроводное управление светом с 2 мест с помощью bluetooth и переключателя.

Есть у меня на сайте проект, в котором я рассказываю, как можно управлять светом с 3 мест с помощью: Пульта ДУ, Радиопульта, Переключателя. Данное управление можно переделать. И вместо или помимо Пульт ДУ + Радиопульт подключить bluetooth. И управлять освещением еще и с компьютера. Достаточно удобно! Давайте рассмотрим, как это сделать.

Схема подключения Arduino NANO, bluetooth модуля hc-06 и модуля с двумя реле.

Схема подключения Arduino NANO, bluetooth модуля hc-06 и модуля с двумя реле.

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

Приложение для компьютера с двумя кнопками управления будет выглядеть следующим образом.

Приложение для компьютера с двумя кнопками управления будет выглядеть следующим образом.

Описание работы управлением светом с компьютера по bluetooth.

Как видим на фото ниже, вместо радиоуправления подключил bluetooth модуль hc-06. Код использую тот же, что привел выше безо всяких изменений. Только указал нужное количество реле и тип сигнала низкого уровня. После чего можно приступать к управлению светом, включать с компьютера посредством беспроводной связи по bluetooth и переключателя, который можно установить в монтажную коробку как обычный выключатель.

писание работы управлением светом с компьютера по bluetooth.

Вариант отличный, но имеет ряд минусов, о которых я рассказывал в проекте про управление светом с 3 мест.

Вариант отличный, но имеет ряд минусов, о которых я рассказывал в проекте

Подведём итог.

Управление реле с компьютера, скорее всего не очень востребовано, так как мы редко нуждаемся в управлении светом за компьютером. Хотя… Это возможно только мое мнение!

В свези с тем, что это мое первое приложение для компьютера учтены не все моменты и имеются некоторые недочеты. Также есть смысл сделать управление реле по Wi-fi. Жду ваши мнение и предложения.

Понравился проект Управление реле с компьютера при помощи Arduino и bluetooth? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Определение скорости работы bluetooth-модулей HC-05/06. http://arduino-tex.ru/news/73/opredelenie-skorosti-raboty-bluetooth-modulei-hc-05-06.html Константин Portal-PK 2021-08-13T05:49:20+03:00 При настройке bluetooth-модулей HC-05/06 часто возникает вопрос, на какой скорости работает модуль. Если вы купили модуль, скорость, на которой он работает, можно посмотреть в Datasheet устройства. А если устройство уже настраивали и какую скорость устанавливали в предыдущий раз забыли, то тут уже без сканера скорости не обойтись.

При настройке bluetooth-модулей HC-05/06 часто возникает вопрос, на какой скорости работает модуль.

В одной из предыдущих статей я рассказывал, как настроить bluetooth-модули HC-05/06. Какие AT команды для этого используются. Но данная инструкция бесполезна, если мы не знаем скорость, на которой работает модуль.

Сканер скорости bluetooth-модулей HC-05, HC-06.

В данной статье рассмотрим небольшой код, который поможет просканировать все допустимые скорости, на которых работают bluetooth-модули HC-05/06.

#include <SoftwareSerial.h>
SoftwareSerial hc06(2, 3);

void setup() {
  //инициализируем работу с портом
  Serial.begin(9600);
  // сканер
  scanBaudrate();
}

void loop() {}

void scanBaudrate() {
  unsigned long bauds[12] = {300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000};
  for (int i = 0; i < 12; i++) {
    hc06.begin(bauds[i]);
    delay(10);
    Serial.print(F("Baudrate "));
    Serial.println(bauds[i]);
    command("AT", 2000);

  }
}
String command(const char *toSend, unsigned long milliseconds) {
  String result;
  Serial.print("Sending: ");
  Serial.println(toSend);
  hc06.print(toSend);
  unsigned long startTime = millis();
  Serial.print(F("Received: "));
  while (millis() - startTime < milliseconds) {
    if (hc06.available()) {
      char c = hc06.read();
      Serial.write(c);
      result += c;  // добавить в строку результата
    }
  }
  Serial.println();  // новая строка.
  return result;
}

Если возникли трудности с поиском скорости передачи вашего модуля, вот код, который инициализирует Bluetooth и отправляет AT-команду для каждого значения скорости передачи.

Схема подключения bluetooth-модулей HC-06 к Arduino для настройки.

Схема подключения bluetooth-модулей  HC-06 к Arduino для настройки.

При обнаружении правильной скорости передачи данных, модуль Bluetooth должен ответить «ОК». Данный пример кода определяет, правильно ли работает модуль и какую скорость он использует.

модуль Bluetooth должен ответить «ОК»

Как видим из картинки выше, мой bluetooth-модуль HC-06 работает на заводских настройках на скорости 9600 бод.

Как видим из картинки выше, мой bluetooth-модуль HC-06 работает на заводских настройках на скорости 9600 бод.

Понравилась статья Определение скорости работы bluetooth-модулей HC-05/06? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP8266 уроки. HTTP-запрос POST http://arduino-tex.ru/news/72/esp826-uroki-http-zapros-post.html Константин Portal-PK 2021-08-11T05:36:41+03:00 Цель этого урока - объяснить, как выполнять запросы POST от ESP8266, используя Arduino IDE и библиотеки ESP8266. Все показанные здесь тесты, были выполнены на плате NodeMCU.

Для данного урока нужно подключить некоторые библиотеки, которые должны быть доступны после установки поддержки ESP8266 в среде Arduino IDE.

Нам понадобится ESP8266WiFi.h, чтобы была возможность подключить ESP8266 к сети Wi-Fi, и ESP8266HTTPClient.h, который делает доступными методы, необходимые для выполнения запроса POST.

#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>

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

Serial.begin(115200);

После этого позаботимся о подключении ESP8266 к сети Wi-Fi, чтобы позже мы могли отправить HTTP-запрос. Для этого нужно только вызвать метод begin для переменной WiFi, передав в качестве первого значения, имя сети (SSID), а второй параметр - пароль.

WiFi.begin(ssid, password);

Внимание, используйте учетные данные вашей сети.

Подробное руководство о том, как подключить ESP8266 к сети Wi-Fi, можно прочитать здесь.

Чтобы завершить настройку, будем опрашивать статус WiFi-соединения, пока оно не будет установлено. Для простоты используем здесь метод опроса, так как начать выполнение HTTP-запросов POST можно только после того, как будет установлено соединение с сетью Wi-Fi. Естественно, в реальном приложении мы должны учитывать, что при попытке подключения к сети могут возникнуть некоторые проблемы.

Полная настройка приведена ниже.

#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>

const char* ssid = "yourSSID";
const char* password = "yourPASS";
byte tries = 10;  // Попыткок подключения к точке доступа

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

Описание кода HTTP-запросы POST.

В этом разделе проанализируем код, выполняемый в функции основного цикла Arduino для выполнения запроса HTTP POST. Будем разбивать код на части и анализировать его шаг за шагом, но окончательный результат подведен в конце этого раздела.

Прежде всего, нам нужно определить объект класса HTTPClient, из которого будем вызывать различные методы для подготовки заголовков и содержимого запроса, отправки его и проверки результата. Будем называть этот объект просто «http».

HTTPClient http;

После этого вызовем метод begin для объекта http и передадим URL-адрес, к которому мы хотим подключиться, и сделаем запрос HTTP POST. В этом случае я отправляю запрос на веб-сайт, указав его доменное имя, как показано ниже (целевой веб-сайт, используемый во фрагменте кода, реализует фиктивный REST API для тестирования и прототипирования).

http.begin("http://jsonplaceholder.typicode.com/users");

Затем можем определить заголовок для запроса с помощью метода addHeader. В этом случае указываем тип содержимого как «text/plain», поскольку мы просто отправим простую строку в теле.

http.addHeader("Content-Type", "text/plain");

Тело запроса указывается в качестве параметра при вызове метода POST для объекта HTTPClient. В этом случае просто отправим строку «Message from ESP8266». Возвращаемое значение этого метода соответствует коду ответа HTTP, поэтому важно проверить обработку ошибок.

Учтите, что если значение больше 0, оно соответствует стандартному коду HTTP. Если это значение меньше 0, это соответствует ошибке ESP8266, связанной с подключением. Вы можете проверить список возможных ошибок здесь.

int httpCode = http.POST("Message from ESP8266");

Теперь можем получить полезную нагрузку, вызвав метод getString, который вернет информацию ответа в виде строки.

String payload = http.getString();

Выведем полезную нагрузку и код HTTP в монитор порта.

Serial.println(httpCode);
Serial.println(payload);

В завершение нам нужно вызвать метод end объекта http, чтобы гарантировать закрытие TCP-соединения. Это очень важно для освобождения ресурсов.

http.end();

Полный код показан ниже. В скетч добавим 30-секундную задержку между каждым выполнение цикла Arduino, чтобы избежать постоянного опроса сервера.

Обратите внимание, что для упрощения кода и сосредоточения внимания на основной теме отправки запроса HTTP POST мы не проверяли, меньше ли значение переменной httpCode нуля, что указывает на ошибку в соединении. Тем не менее, мы должны сделать это в окончательном коде приложения.

#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>

const char* ssid = "yourSSID";
const char* password = "yourPASS";
byte tries = 10;  // Попыткок подключения к точке доступа

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

void loop() {

  HTTPClient http;    //Объявить объект класса HttpClient

  http.begin("http://jsonplaceholder.typicode.com/users");      //Укажите адрес запроса
  http.addHeader("Content-Type", "text/plain");  //Укажите заголовок типа содержимого

  int httpCode = http.POST("Message from ESP8266");   //Отправьте запрос
  String payload = http.getString();                  //Получите полезную нагрузку ответа

  Serial.println(httpCode);   //Распечатать код возврата HTTP
  Serial.println(payload);    //Полезная нагрузка для ответа на запрос печати

  http.end();  //Закрыть соединение


  delay(30000);  //Ждем 30 сек.

}

Тестирование кода POST запроса с помощью ESP8266.

На рисунке ниже показан результат для запроса POST. Чтобы избежать необходимости настраивать собственный сервер для тестирования кода ESP8266, вы можете просто отправить запрос в API тестирования.

Тестирование кода POST запроса с помощью ESP8266.

Заключительные и примечания по POST-запросу с помощью ESP8266.

В качестве альтернативы использованный ранее метод begin может быть вызван с другими наборами параметров, что можно увидеть в спецификации класса HTTPClient. Например, мы можем передать IP-адрес хоста, порт и путь как 3 разных.

Класс HTTPClient также имеет метод, упрощающий отладку ответа на запрос. Итак, если хотим вывести полезную нагрузку ответа в последовательный порт, можем просто вызвать метод writeToStream и в качестве аргумента указать на последовательный порт, который мы инициализировали ранее в функции настройки. Итак, приведенный ниже код является альтернативой методу getString:

http.writeToStream(&Serial);

Это всего лишь 2 альтернативных примера реализации. У класса HTTPClient есть много других полезных методов, не используемых в этом уроке. Вы можете посмотреть их здесь.

Понравился ESP826 урок. HTTP-запрос POST? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP8266 уроки. HTTP-запрос GET http://arduino-tex.ru/news/71/esp826-uroki-http-zapros-get.html Константин Portal-PK 2021-08-07T08:49:10+03:00 Цель данного урока - объяснить, как выполнять HTTP-запрос GET с помощью ESP8266. Примеры из этого урока были выполнены с использованием NodeMCU – одна из недорогих плат и самая простая в использовании среди линейки ESP8266.

Описание скетча отправки GET запроса с помощью ESP8266.

Во-первых, нам нужно подключить необходимые библиотеки. Естественно, нам нужна библиотека ESP8266WiFi, которая предоставляет нам методы для подключения к сети Wi-Fi.

Затем понадобится библиотека ESP8266HTTPClient, которая предоставляет методы для отправки HTTP-запросов.

#include <esp8266wifi.h>
#include <esp8266httpclient.h>

Чтобы подключиться к сети Wi-Fi, нам потребуются учетные данные. Итак, мы определим две глобальные переменные, содержащие имя сети (SSID) и пароль.

const char* ssid = "NetworkName";
const char* password = "NetworkPassword";

Внимание, используйте учетные данные вашей сети.

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

Затем вызываем метод begin для объекта WiFi, передавая в качестве аргументов SSID (имя сети) и переменную пароля, указанные ранее. Это инициализирует подключение к сети. Более подробная информация о том, как подключиться к сети Wi-Fi с помощью ESP8266, объяснял в предыдущем уроке.

Также инициализируем работу с последовальным портом, чтобы вывести результат работы программы. Полный код функции setup() Arduino приведён ниже.

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

Код, который добавим в этом уроке.

Код запроса будет указан в функции основного цикла loop() Arduino. Сначала мы объявляем объект класса HTTPClient, который назовем http. Этот класс предоставляет методы для создания и отправки HTTP-запроса.

HTTPClient http;

После этого мы вызовем метод begin для объекта http и передадим URL-адрес, к которому хотим подключиться, и сделаем HTTP-запрос GET.Указанный здесь целевой веб-сайт реализует фиктивной API для тестирования и создания прототипов.будет возвращать полезную нагрузку JSON в качестве ответаОбратите внимание, что конечный результат, которого мы достигнем, будет возвращать полезную нагрузку JSON в качестве ответа, имитируя возможную «пользовательскую» структуру данных. Вы можете напрямую получить доступ к URL-адресу и проверить результат в веб-браузере. Позже, при тестировании кода ESP8266, мы должны получить такой же ответ.

http.begin("http://jsonplaceholder.typicode.com/users/1");

Затем отправляем запрос, вызывая метод GET для объекта http.

Затем отправляем запрос, вызывая метод GET для объекта http. Этот метод вернет статус операции, который важно сохранить для обработки ошибок. Если значение больше 0, то это стандартный код HTTP. Если значение меньше 0, то это ошибка клиента, связанная с подключением. Все доступные коды ошибок для этого метода приведены здесь.

int httpCode = http.GET();

Итак, если код больше 0, мы можем получить полезную нагрузку ответа, вызвав метод getString для объекта http. Ответ возвращается в виде строки, которую выведим в монитор порта.

String payload = http.getString();
Serial.println(payload);

Наконец, вызовем метод end. Это очень важно для закрытия TCP-соединения и освобождения ресурсов.

http.end();

Окончательный полный код показан ниже. Обратите внимание, что мы добавили небольшую задержку в 30 секунд между каждым выполнением основного цикла loop(), чтобы избежать постоянного опроса сервера.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "NetworkName";
const char* password = "NetworkPassword";
byte tries = 10;  // Попыткок подключения к точке доступа

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }

}

void loop() {

  if (WiFi.status() == WL_CONNECTED) { //Проверьте состояние подключения Wi-Fi

    HTTPClient http;  //Объявите объект класса HttpClient

    http.begin("http://jsonplaceholder.typicode.com/users/1");  //Укажите адрес назначения запроса
    int httpCode = http.GET();                                  //Отправьте запрос

    if (httpCode > 0) { //Проверьте код возврата

      String payload = http.getString();   //Получите полезную нагрузку для ответа на запрос
      Serial.println(payload);             //Распечатайте полезную нагрузку ответа

    }

    http.end();   //Закрыть соединение

  }

  delay(30000);    //Ждем 30 сек.
}

Тестирование HTTP-запрос GET.

Чтобы протестировать код, просто скомпилируйте его и загрузите на свое устройство с помощью Arduino IDE.

После завершения процедуры загрузки откройте последовательный монитор IDE и дождитесь установления соединения c Wi-Fi. После выполнения этой процедуры ESP8266 должен начать периодически отправлять HTTP-запрос GET на сервер.

ESP8266 должен начать периодически отправлять HTTP-запрос GET на сервер

Ожидаемый результат программы показан на рисунке ниже. Ответ, выведенный в последовательном мониторе порта, соответствует полезной нагрузке JSON, возвращаемой сервером. ESP8266 будет продолжать выполнять HTTP-запрос GET каждые 30 секунд.

ESP8266 будет продолжать выполнять HTTP-запрос GET каждые 30 секунд.

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

Понравился ESP826 уроки. HTTP-запрос GET? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP8266 уроки. Подключение к сети Wi-Fi. http://arduino-tex.ru/news/70/esp826-uroki-podklyuchenie-k-seti-wi-fi.html Константин Portal-PK 2021-08-04T14:19:37+03:00 Цель этого урока - объяснить, как подключить ESP8266 к сети Wi-Fi с помощью Arduino IDE.

Возможность подключения устройства к сети Wi-Fi - очень мощная функция, которая открывает возможность использования интернет-протоколов для связи с другими устройствами. Например, после подключения к сети можем выполнять HTTP-запросы к серверу, что позволяет нам публиковать измерения датчиков, собранные ESP8266. И многое другое.

как подключить ESP8266 к сети Wi-Fi с помощью Arduino IDE.

Это делает ESP8266 очень хорошим микроконтроллером для реализации Интернета вещей. Другой важный фактор - это относительно дешевая стоимость устройства реализованных на ESP8266.

В предыдущем уроке рассказал, как можно подключиться к сети Wi-Fi с помощью ESP32.

Прежде чем приступить к уроку, нужно настроить Arduino IDE для работы с ESP8266.

Описание скетча подключение к сети Wi-Fi ESP8266.

Прежде всего, подключаем библиотеку ESP8266WiFi.h, которая сделает доступной глобальную переменную с именем WiFi, она является объектом класса ESP8266WiFiClass. В этом классе есть методы, необходимые для подключения к сети Wi-Fi.

#include <ESP8266WiFi.h>

Чтобы сделать код более читабельным, создадим две глобальные переменные для хранения учетных данных, необходимых для регистрации в сети. Первый соответствует SSID (Service Set IDentifier), который является именем беспроводной сети, к которой мы хотим подключиться. Естественно, чтобы иметь возможность подключиться, нам также необходимо указать пароль от сети.

const char* ssid = "NetworkName";
const char* password =  "NetworkPass";

Внимание, используйте учетные данные вашей сети.

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

Затем вызываем метод begin для объекта WiFi, передавая в качестве аргументов SSID (имя сети) и переменную пароля, указанные ранее. Это инициализирует подключение к сети.

WiFi.begin(ssid, password);

После этого выполним цикл while, пока соединение не будет установлено. Для этого можем вызвать метод status для объекта WiFi и дождаться, пока результат не совпадет с перечислением WL_CONNECTED. Между каждой итерацией мы вводим небольшую задержку, чтобы избежать постоянного опроса.

while (WiFi.status() != WL_CONNECTED) {
  
  delay(1000);
  Serial.println("Connecting..");
  
}

После успешного установления соединения можем проверить IP-адрес, назначенный ESP8266, вызвав метод localIP . Это полезно, если мы хотим отправлять данные на ESP8266 из этой сети. Имейте в виду, что это локальный IP-адрес, и поэтому мы не можем связаться с устройством из-за пределов этой сети.

Serial.println(WiFi.localIP());

Полная функция настройки setup() показана ниже.

void setup (){
  
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
  
    delay(1000);
    Serial.println("Connecting..");
  
  }
  
  Serial.println(WiFi.localIP());
  
}

Данный скетч не выводит информацию, если ESP8266 не подключилась к сети. Это может произойти, если у нас отключено сетевое оборудование или указаны неверные данные для подключения. Давайте дополним код и ограничим попытки подключения до 10, и вывод сообщения, если подключиться не удалось.

#include <ESP8266WiFi.h>

const char* ssid = "NetworkName";
const char* password =  "NetworkPass";
byte tries = 10;  // Попыткок подключения к точке доступа
void setup() {

  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }

}

void loop() {}

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

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

И вот такое уведомление, если ESP8266 не удалось подключиться к Wi-Fi сети.

И вот такое уведомление, если ESP8266 не удалось подключиться к Wi-Fi сети.

Этот пример показывает только основы подключения к сети Wi-Fi. В следующем уроке рассмотрим, как выполнять более сложные процедуры, такие как отправка HTTP-запросов.

Описание скетча подключение к сети Wi-Fi ESP8266.

Понравился ESP8266 уроки. Подключение к сети Wi-Fi? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Arduino машинка своими руками. Управление с помощью джойстика. http://arduino-tex.ru/news/69/arduino-mashinka-svoimi-rukami-upravlenie-s-pomoshchyu.html Константин Portal-PK 2021-08-04T12:23:39+03:00 Arduino машинку собрать своими руками достаточно просто и в интернете есть много примеров с исходными материалами и с инструкций по сборке. Я также собирал машинку с радио управлением на Arduino. Подробнее читайте тут.

Сегодня речь пойдет про Arduino машину, которую просто собрать при относительно небольшой стоимости комплектующих. Для управления будем использовать ни bluetooth и ни Wi-Fi, а обычную проводную связь. В качестве пульта будет выступать джойстик. Давайте рассмотрим подробнее этапы сборки и программирования машинки на Arduino.

Собираем Arduino машину.

Машинку можно собрать на базе «робоплатформы на ардуино», которую можно купить тут. Или самостоятельно напечатать на 3D принтере раму. Исходные материалы вы можете скачать внизу статьи в разделе «Файлы для скачивания».

Для проекта робот машина на Arduino понадобиться:

Кратко о робоплатформе.

Кратко о робоплатформе.

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

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

Описание драйвера L298n

Описание драйвера L298n:

  • OUT1 и OUT2 – разъёмы для подключения первого щёточного двигателя;
  • OUT3 и OUT4 – разъёмы для подключения второго щёточного двигателя;
  • VSS – вход для питания двигателей (максимальный уровень +35V);
  • GND – общий провод (не забываем соединить с аналогичным входом Arduino);
  • Vs – вход для питания логики +5V. Через него непосредственно запитывается сама микросхема L298N. Есть ещё второй способ питания, при котором 5V для L298N берётся от встроенного в модуль стабилизатора напряжения. В таком случае на разъём подаётся только питание для двигателей (Vss), контакт Vs остаётся не подключенным, а на плате устанавливается перемычка питания от стабилизатора, который ограничит питающее моторы напряжение до приемлемых 5V.
  • IN1, IN2 – контакты управления первым щёточным двигателем.
  • IN3, IN4 – контакты управления вторым щёточным.
  • ENA, ENB –контакты для активации / деактивации первого и второго двигателей. Подача логической единицы на эти контакты разрешает вращение двигателей, а логический ноль – запрещает.

В связи с тем, что на борту драйвера есть стабилизатор на 5 В. Записать Arduino UNO можно от драйвера.

Также нам понадобиться подключить джойстик по схеме, которую рассмотрим ниже. Провода сделал самодельные. Если у вас нет Dupont разъёмов, можно провода припаять к джойстику и Arduino.

Схема подключения электроники робота машину на Ардуино.

Всю электронику робо машины на Ардуино подключаем по следующей схеме. Красным с пунктиром, который отмечен проводник, подключает питание драйвера L298n от аккумулятора 18650. Красным проводником обозначено питание 5В.

Схема подключения электроники робота машину на Ардуино.

У драйвера убираем перемычки, что позволяет плавно регулировать скорость вращения и подключаем 6 проводов управления драйвером L298n к Arduino. Но в связи с тем, что ход перемещения джойстика не большой, плавное регулирование скорости практически не заметно. Поэтому подключить можно и по 4 провода и использовать другие драйвера, например L9110S.

Поэтому подключить можно и по 4 провода и использовать другие драйвера, например L9110S.

Для управления подключаем джойстик по 4 проводам. Пятый контакт на джойстике нужен для получения сигнала нажатия на джойстик. Данную функцию использовать не будем. Поэтому достаточно 4 провода для подключения.

Описание кода Arduino машинки.

Если вы раньше не работали с Arduino, рекомендую прочитать статьи:

А также ознакомиться с уроками для начинающих.

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

Первым делом в скетче управления машинкой на Arduino инициализируем пины подключения джойстика. Подключаем к 2 аналоговым входам A0, A1.

#define pinX A0 // Горизонтальное положение джойстика (аналоговый пин)
#define pinY A1 // Вертикальное положение джойстика (аналоговый пин)

Затем инициализируем пины подключения драйвера L298n. Можно подключить и к другим драйверам по 4 проводам. В таком случае не нужно подключаться к выводам ENA и ENB, вернув перемычки на место. При таком подключении не будет плавного изменения скорости вращения двигателя.

int ENA = 9; // Включение 1 движка (цифровой пин ШИМ)
int in1 = 7;// Поворот 1 движка (цифровой пин)
int in2 = 8; // Поворот 1 движка (цифровой пин)
int ENB = 10; // Включение 2 движка (цифровой пин ШИМ)
int in3 = 5; // Поворот 2 движка (цифровой пин)
int in4 = 6;// Поворот 2 движка (цифровой пин)

Затем добавим 4 переменные необходимые для определения центрального положения джойстика для авто калибровки и выделения зоны чувствительности джойстика.

int x_min;   //нижняя граница нейтрали по оси x
int x_max;   //верхняя граница нейтрали по оси x
int y_min;   //нижняя граница нейтрали по оси y
int y_max;   //верхняя граница нейтрали по оси y

В блоке setup() инициализируем пины подключения драйвера как выход.

int x_min;   //нижняя граница нейтрали по оси x
int x_max;   //верхняя граница нейтрали по оси x
int y_min;   //нижняя граница нейтрали по оси y
int y_max;   //верхняя граница нейтрали по оси y

Затем считываем значения с джойстикаи сохраняем в созданные ранее переменные с увеличением и уменьшением полученного значения на 30. Тем самым определим рабочие зоны для каждой оси.

  int x = analogRead(pinX);
  int y = analogRead(pinY);
  x_min = x - 30;
  x_max = x + 30;
  y_min = y - 30;
  y_max = y + 30;

Также необходимо создать небольшую функцию Motor(), которая позволит управлять двумя моторами постоянного тока.

void Motor(byte enb, bool n1,bool n2, bool n3, bool n4) {
  analogWrite(ENA, enb);
  digitalWrite(in1, n1);
  digitalWrite(in2, n2);
  analogWrite(ENB, enb);
  digitalWrite(in3, n3);
  digitalWrite(in4, n4);
}

В основном цикле loop() считываем положение джойстика и определяем ШИМ сигнал, приводим полученное значению к диапазону от 0 до 255. Что позволяет плавно изменить скорость двигателей.

  int x = analogRead(pinX);       // считываем положение джойстика
  int y = analogRead(pinY);
  if (y < y_min ) {
    int sh = map(y, y_min, 0, 0, 255);
    Motor(sh, HIGH, LOW, HIGH, LOW);
  }
  else if (y > y_max ) {
    int sh = map(y, y_max, 1024, 0, 255);
    Motor(sh, LOW, HIGH, LOW, HIGH);
  }

В зависимости от положения джойстика по оси Y двигателя вращаются вперёд или назад.

При изменение положения по оси X вращаем двигатели на встречу друг другу, что позволяет производить поворот машины на Arduino влево и вправо.

  else if (x < x_min ) {
    int sh = map(x, x_min, 0, 0, 255);
    Motor(sh, HIGH, LOW,  LOW, HIGH);
  }
  else if (x > x_max ) {
    int sh = map(x, x_max, 1024, 0, 255);
    Motor(sh, LOW, HIGH, HIGH, LOW);
  }

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

И последние строки кода отключают двигатели машинки при расположении джойстика в центральном положении.

 else
  {
    Motor(0, LOW, LOW, LOW, LOW);
  }

Скетч прост и его можно доработать или дополнить по вашему желанию.

Подведем итог.

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

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

  • Проводное управление ограничивает перемещение и при повороте больше чем на 360 градусов провод попадает под колеса.
  • Машинка умеет только ездить и поворачивать. На этом ее возможности заканчиваются.

Но благодаря этому есть и преимущества которые оценят новички впервые решившие сделать машинку на Arduino:

  • Недорогие комплектующие.
  • Простота сборки электроники.
  • Несложная программа.
  • Не используются сторонние библиотеки, не нужно ни чего дополнительно устанавливать. Достаточно взять код и загрузить его в Arduino.

Если вас интересуют более сложные реализации машин на радиоуправлении или беспроводном управлении, смотрите предыдущие проекты:

Понравился проект Arduino машинка своими руками. Управление с помощью джойстика? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP32 уроки. Подключение к сети Wi-Fi. http://arduino-tex.ru/news/68/esp32-uroki-podklyuchenie-k-seti-wi-fi.html Константин Portal-PK 2021-08-02T08:17:24+03:00 Цель этого урока - объяснить, как подключить ESP32 к сети Wi-Fi с помощью Arduino IDE. К счастью для тех, кто имеет опыт работы с библиотеками ESP8266 Arduino IDE, процедура очень похожа.

Если вы еще не установили поддержку ESP32 в среде Arduino IDE, как это сделать рассказываю здесь. Также в предыдущем уроке рассказывал, как загрузить первый скетч в DOIT ESP32 DEVKIT V1. Распиловку плату можно посмотреть тут.

В данном уроке будем использовать также плату DOIT ESP32 DEVKIT V1.

В данном уроке будем использовать также плату DOIT ESP32 DEVKIT V1.

Описание скетча подключение к сети Wi-Fi ESP32.

Прежде всего, нам нужно подключить библиотеку WiFi.h, которая позволит подключиться к сети. Интересно отметить, что разработчики выбрали более общее имя библиотеки, в отличие от ESP8266, где библиотека называлась ESP8266WiFi.h.

#include "WiFi.h"

Функциональность также представлена, как внешняя переменная с именем WiFi, в данном случае это класс WiFiClass.

Чтобы наш код было легко редактировать, мы объявим две глобальные переменные для хранения имени сети Wi-Fi, к которой мы хотим подключиться, так же и ее пароля.

const char* ssid = "NetworkName";
const char* password =  "NetworkPass";

Внимание, используйте учетные данные вашей сети.

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

Затем вызываем метод begin для объекта WiFi, передавая в качестве аргументов SSID (имя сети) и переменную пароля, указанные ранее. Это инициализирует подключение к сети.

Serial.begin(115200);
WiFi.begin(ssid, password);

После этого выполним цикл while, пока соединение не будет установлено. Для этого можем вызвать метод status для объекта WiFi и дождаться, пока результат не совпадет с перечислением WL_CONNECTED. Между каждой итерацией мы вводим небольшую задержку, чтобы избежать постоянного опроса.

while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.println("Connecting to WiFi..");
}

После цикла ESP32 должен успешно подключиться к сети Wi-Fi. Полный исходный скетч приведён ниже.

#include "WiFi.h"
 
const char* ssid = "yourNetworkName";
const char* password =  "yourNetworkPass";
 
void setup() {
 
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
 
  Serial.println("Connected to the WiFi network");
 
}
 
void loop() {}

Тестирование скетча, подключение к сети Wi-Fi ESP32.

Чтобы проверить код, просто загрузите его в плату ESP32 и откройте последовательный порт. Вы должны получить результат, аналогичный показанному на рисунке ниже. Это означает, что подключение в Wi-Fi выполнено успешно.

Тестирование скетча, подключение к сети Wi-Fi ESP32.

Давайте немного дополним код. При подключении выведем Ip адрес, который получит ESP32. А если подключиться не удалось в течение 10 попыток, выведем сообщение об этом.

#include "WiFi.h"

const char* ssid = "NetworkName";
const char* password =  "NetworkPass";
byte tries = 10;  // Попыткок подключения к точке доступа
void setup() {

  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }

}

void loop() {}

В итоге должны получить вот такой результат.

Смотрите также другие уроки по программированию ESP32

Смотрите также другие уроки по программированию ESP32:

Понравился Урок ESP32: Подключение к сети Wi-Fi? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
DigiSpark ATtiny85 настройка Arduino IDE и установка драйвера. http://arduino-tex.ru/news/67/digispark-attiny85-nastroika-arduino-ide-i-ustanovka-draivera.html Константин Portal-PK 2021-07-17T04:10:19+03:00 DigiSpark – это Ардуино подобная отладочная плата на ATtiny85. Имеет небольшой размер и минимум pin для подключения периферийных устройств. Программирование также отличается от классической Arduino UNO. Давайте рассмотрим все по порядку.

DigiSpark – это Ардуино подобная отладочная плата на ATtiny85.

Характеристики Digispark

  • Поддержка Arduino IDE 1.0 и более поздних (OS X, Windows и Linux)
  • Питание от USB или внешнего источника - 5 В или 7-35 V (автоматический выбор)
  • Регулятор на 5В 500мА
  • Встроенный USB
  • 6 портов ввода / вывода (2 используются для USB, только если ваша программа активно общается по USB, в противном случае вы можете использовать все 6, даже если вы программируете с помощью USB)
  • 8KB флэш-памяти (около 6КБ под программу, 2 КБ заняты загрузчиком)
  • ОЗУ (SRAM) - 512 байт
  • Энергонезависимая память (EEPROM) - 512 байт
  • I²C и SPI интерфейс
  • 4-х канальный 10-разрядный АЦП
  • Аналоговый компаратор
  • 2 8-битных таймера-счетчика
  • Сторожевой таймер
  • PWM на 3 вывода (больше ШИМ выходов можно обеспечить программным способом)
  • сделан на базе ATtiny85-20SU

Купить Digispark можно тут.

Обратите внимание! Digispark есть 2 модели А и В. Как они отличаются можно прочитать тут.

Все выводы могут быть использованы в качестве цифровых входов/выходов:

Pin 0 → I2C SDA, PWM (LED on Model B)

Pin 1 → PWM (LED on Model A)

Pin 2 → I2C SCK, Analog

Pin 3 → Аналоговый вход (Занят контактом USB+, в случае использования USD)

Pin 4 → PWM (Занят контактом USB-, в случае использования USD)

Pin 5 → Аналоговый вход

Добавляем DigiSpark в список отладочных плат Arduino IDE.

Для начала нам нужно установить Arduino IDE, как это сделать, можно посмотреть тут.

Затем переходим в пункт меню «Файл -> Настройки»

Для начала нам нужно установить Arduino IDE, как это сделать, можно посмотреть тут.

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

В открывшемся окне настроек нам нужно добавить ссылку для менеджера плат.

http://digistump.com/package_digistump_index.json

Затем можно зайти в «Менеджер плат».

Затем можно зайти в «Менеджер плат».

Ищем плату «digispark». И устанавливаем плату.

Ищем плату «digispark». И устанавливаем плату.

Установка драйверов для DigiSpark.

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

Распакуйте скаченный архив и запустите файл «DPinst64.exe» для 64 битной ОС и «DPinst.exe» для 32 битной Windows.

Установка драйверов для DigiSpark.

Процесс установки не сложный и напоминает установку обычной программы.

Процесс установки не сложный и напоминает установку обычной программы.

В процессе потребуется подтверждение установки драйверов.

В процессе потребуется подтверждение установки драйверов.

На этом установка драйверов для DigiSpark закончена.

Загрузка тестового скетча в DigiSpark.

Сейчас можно перейти к загрузке первого скетча в DigiSpark. Для этого открываем Arduino IDE. В разделе «Инструменты» выбираем плату «DigiSpark (Default - 16.5mhz)». Порт выбирать не нужно.

Загрузка тестового скетча в DigiSpark.

Загружать будем вот такой тестовый скетч, который позволяет мигать встроенным светодиодам. Так как у разных моделей DigiSpark (A, B) светодиод подключен к разным пинам, в скетче реализовано изменение положения с высокого уровня на низкий для пинов 0 и 1. Что позволят сделать данный код универсальным и применимым для обоих типов плат.

void setup()
{
  //Установите контакты 0 и 1 в качестве выходов
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
}
void loop()
{
  //Установите контакты светодиода на ВЫСОКОЕ ЗНАЧЕНИЕ. Это дает питание светодиоду и включает его
  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);
  //Ждем сек
  delay(1000);
  //Set the LED pins to LOW. This turns it off
  digitalWrite(0, LOW);
  digitalWrite(1, LOW);
  //Ждем сек
  delay(1000);
}

Важно! Загрузка проходит не как Arduino UNO. Подключать плату к ПК не нужно. Сперва нажимаем кнопку «Загрузить» и после того как мы увидим надпись

Plug in device now... (will timeout in 60 seconds)

Важно! Загрузка проходит не как Arduino UNO. Подключать плату к ПК не нужно.

Можно подключать DigiSpark к компьютеру. После чего вы должны увидеть проценты загрузки кода. Как видим, текст выводится оранжевым цветом. Это нормально.

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

У меня на DigiSpark реализовано несколько интересных проектов:

Но на этом планирую не останавливаться в освоении отладочной платы DigiSpark ATtiny85.

Понравилась статья DigiSpark ATtiny85 настройка Arduino IDE и установка драйвера? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. DS3231 RTC вывод температуры. http://arduino-tex.ru/news/66/urok-esp8266-ds3231-rtc-vyvod-temperatury.html Константин Portal-PK 2021-07-16T10:46:35+03:00 Цель этого урока - объяснить, как измерить температуру RTC DS3231 с помощью ESP8266, используя Arduino библиотеку.

Для урока вывод температуры с DS3231 понадобится.

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

Для урока вывод температуры с DS3231 понадобится.

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

часы реального времени DS3231 к ESP8266 (Node MCU)Чтобы работать с RTC используя плату ESP8266, нужно установить библиотеку, которая скрывает детали реализации протокола I2C, предоставляя нам простые в использовании функции. Эту же библиотеку мы использовали в предыдущем уроке, в котором рассмотрели процедуру настройки времени и даты, и их считывания. Её можно установить с помощью диспетчера библиотек Arduino IDE, как показано на рисунке ниже.

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

Аппаратная схема подключения платы DS3231 к ESP8266 очень проста и показана на рисунке ниже.

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

Как видно на схеме, DS3231 использует интерфейс I2C для взаимодействия с микроконтроллерами. Поскольку мы используем IDE Arduino, у нас есть библиотека Wire для обработки протокола I2C, которую позже будем использовать при создании программы для взаимодействия с RTC.

Скетч вывода температуры с DS3231 в монитор порта.

Для демонстрации вывода температуры напишем простую программу, которая считывает температуру с DS3231 каждые 10 секунд и выводит ее в последовательный порт.

Во-первых, нам нужно подключить библиотеку Wire , которая будет использоваться для связи I2C, и библиотеки RTC.

#include <Wire.h>       //I2C библиотека 
#include <RtcDS3231.h>  //RTC библиотека

Функции для взаимодействия с RTC предоставляются, как методы класса RtcDS3231:

RtcDS3231<TwoWire> rtcObject(Wire); //библиотека rtc

В функции setup() сначала инициализируем последовательное соединение, а затем вызываем метод Begin для объекта RtcDS3231, который мы ранее объявили. Этот метод запустит библиотеку I2C Wire.

void setup() {
  Serial.begin(115200);  //Запуск последовательного подключения
  rtcObject.Begin();     //Запуск I2C
}

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

В функции loop() будем получать измерения, вызывая метод GetTempera для rtcObject. Этот метод получает значение температуры из регистров, которые хранят их в часах реального времени.

RtcTemperature temperature = rtcObject.GetTemperature();  //считывание температуры

Температура хранится в двух регистрах RTC и представляется в виде 10-битного кода с разрешением 0,25 ° C . Опять же, нам не нужно беспокоиться об этих деталях, что является преимуществом использования этой замечательной библиотеки.

Serial.print(temperature.AsFloatDegC());  //вывод температуры в монитор порта
Serial.println(" C");

Как видно метод GetTempera вернет объект класса RtcTemperature. В этом классе есть метод AsFloatDegC(), который возвращает температуру, как показано в приведенном ниже коде.

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

Полный скетч вывода температуры с DS3231 в монитор порта.

#include <Wire.h>       //I2C библиотека
#include <RtcDS3231.h>  //RTC библиотека

RtcDS3231<TwoWire> rtcObject(Wire); //библиотека rtc

void setup() {
  Serial.begin(115200);  //Запуск последовательного подключения
  rtcObject.Begin();     //Запуск I2C
}

void loop() {

  RtcTemperature temperature = rtcObject.GetTemperature();  //считывание температуры
  Serial.print(temperature.AsFloatDegC());  //вывод температуры в монитор порта
  Serial.println(" C");

  delay(1000);  //10 сек

}

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

Полный скетч вывода температуры с DS3231 в монитор порта.

Заключение.

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

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

Лично я использовал DS3231 не только для измерения времени, но и для измерения температуры во многих проектах. Например, в проекте часов матрица.

 проект часов матрица

Понравился Урок DS3231 RTC вывод температуры? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP32: Простой скетч в Arduino IDE http://arduino-tex.ru/news/65/esp32-prostoi-sketch-v-arduino-ide.html Константин Portal-PK 2021-07-13T11:56:04+03:00 Цель этого урока - объяснить, как написать простой скетч «Hello World» для ESP32, используя ядро Arduino. Это очень простое введение, поэтому данное руководство будет просто состоять из вывода сообщения в последовательный порт Arduino IDE.

Для работы с ESP32 в среде Arduino IDE необходимо установить дополнительные библиотеки. Это можно сделать через «Менеджер плат». Подробнее читайте тут.

Код ESP32 Hello World.

Код этого урока очень прост, особенно если у вас есть опыт работы с Arduino или ESP8266.

В функции настройки Arduino мы начинаем с открытия последовательного соединения со скоростью передачи 115200 бод. Для этого просто вызываем метод begin объекта Serial и передаем в качестве входных данных указанную скорость передачи.

void setup() {
   Serial.begin(115200);
}

Затем в функции цикла вызываем метод println, чтобы напечатать сообщение «Hello World» с новой строки. После этого делаем небольшую задержку в 2 секунды (2000 миллисекунд), используя функцию delay().

void loop() {
   Serial.println("Hello World");
   delay(2000);
}

Загрузка кода в ESP32.

Для работы будем использовать отладочную плату DOIT ESP32 DEVKIT V1.

Для работы будем использовать отладочную плату DOIT ESP32 DEVKIT V1.

Подключите плату ESP32 к компьютеру. Открываем Arduino IDE и выполним следующие действия:

1. Выбираем плату в меню «Инструменты > Плата (в моем случае это DOIT ESP32 DEVKIT V1 )».

Плата (в моем случае это DOIT ESP32 DEVKIT V1 )

2. Затем выбираем порт (если вы не видите COM-порт в Arduino IDE, вам необходимо установить драйверы CP210x USB to UART Bridge VCP).

3. Нажимаем кнопку Загрузить в Arduino IDE. Подождите несколько секунд, пока код компилируется и загружается на вашу плату.

Нажимаем кнопку Загрузить в Arduino IDE

Внимание! Если у вас бежит строка с повторяющимися точками и линиями. Нажмите кнопку Boot на плате и удерживайте ее пока не побегут проценты загрузки. После чего кнопку можно отпустить.

4. Откройте последовательный монитор Arduino IDE со скоростью передачи данных 115200.

Как видно на рисунке ниже, получаем правильный вывод «Hello World» в последовательный порт. Не забудьте использовать правильную скорость передачи данных, определенную в коде, как показано на рисунке.

правильный вывод «Hello World» в последовательный порт

Понравился Урок ESP32: Простой скетч в Arduino IDE? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. Подключение DS3231 к NodeMCU. http://arduino-tex.ru/news/64/urok-esp8266-podklyuchenie-ds3231-k-nodemcu.html Константин Portal-PK 2021-07-08T07:05:23+03:00 Цель этого урока - объяснить, как подключить часы реального времени DS3231 к ESP8266 (Node MCU). В статье рассмотрим, как создать простую программу для настройки времени и даты RTC и выведем данные в монитор порта.

Для урока подключения DS3231 к NodeMCU понадобится.

Модуль реального времени DS3231 бывает нескольких твипов. Самый распространённый приведён на картинке ниже.

часы реального времени DS3231 к ESP8266 (Node MCU)

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

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


Также есть версия DS3231 mini.

версия DS3231 mini

Распиновка DS3231 mini.

Распиновка DS3231 mini

Которую я уже использовал в своих Arduino проектах. Не зависимо от вида модуля подключаются и работают они одинаково.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Вы можете посмотреть здесь, как настроить Arduino IDE для поддержки ESP8266.

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

Аппаратная схема подключения платы DS3231 к ESP8266 очень проста и показана на рисунке ниже.

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

Как видно на схеме, DS3231 использует интерфейс I2C для взаимодействия с микроконтроллерами. Поскольку мы используем IDE Arduino, у нас есть библиотека Wire для обработки протокола I2C, которую позже будем использовать при создании программы для взаимодействия с RTC.

Как описано в документации библиотек ESP8266 для Arduino IDE, контакты по умолчанию I2C в библиотеке Wire - это контакты 4 (SDA) и 5 (SCL). Если вы используете плату NodeMCU, примите во внимание, что контакты платы не соответствуют контактам ESP8266. Подключать нужно к контактам D2 (SDA) и D1 (SCL).

Вот краткий обзор распиновки ESP-12E NodeMCU

Библиотека для работы с DS3231.

Среда Arduino предоставляет широкий спектр библиотек для взаимодействия с различными устройствами, и DS3231 не является исключением. Итак, мы используем библиотеку, показанную на рисунке ниже, которая, как указано в описании, протестирована на ESP8266.

Библиотека для работы с DS3231.

Её можно установить с помощью менеджера библиотек Arduino IDE.

менеджера библиотек Arduino IDE

Эта библиотека предоставляет простые в использовании функции для взаимодействия с RTC, при этом программисту не нужно беспокоиться о низкоуровневых деталях протокола I2C. Кроме того, в ней есть несколько примеров кода, которые помогут начать работу с DS3231.

Скетч вывода даты и время с DS3231 в монитор порта.

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

Скетч вывода даты и время с DS3231 в монитор порта.

Во-первых, нам нужно подключить недавно установленную библиотеку, которая позволяет взаимодействовать с DS3231, а также библиотеку Arduino, которая реализует связь с устройствами I2C.

#include <Wire.h>       //I2C библиотека
#include <RtcDS3231.h>  //RTC библиотека

Функции для взаимодействия с RTC предоставляются, как методы класса RtcDS3231:

RtcDS3231<TwoWire> rtcObject(Wire); //библиотека rtc

Библиотека RTC использует класс RtcDateTime, который позволяет нам создавать объекты для хранения информации о дате и времени.

Итак, объявляем объект этого класса и передаем в конструктор данных от года до секунд. Наконец, мы вызываем метод setDateTime для объекта RtcDS3231 и передаем ему объект RtcDateTime, содержащий информацию о дате и времени.

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

void setup() {

  Serial.begin(115200);  //Запуск последовательного подключения
  rtcObject.Begin();     //Запуск I2C
  /* Установка времени */
  RtcDateTime currentTime = RtcDateTime(21, 07, 18, 10, 20, 0); //2021/7/18 10:20:0
  rtcObject.SetDateTime(currentTime); //Сохраняем время

}

Чтобы получить текущее время и дату, вызываем метод GetDateTime для нашего ранее определенного объекта RtcDS3231 (который мы назвали «rtcObject»). Этот метод вернет объект RtcDateTime, как использовали ранее в функции настройки.

Класс RtcDateTime имеет метод для получения каждого из параметров даты и времени. Мы будем использовать эти методы, чтобы получить их в виде строки (с помощью функции sprintf ).

Когда у нас есть вся информация о дате и времени в строке, отправляем ее в последовательный порт.

void loop() {

  RtcDateTime currentTime = rtcObject.GetDateTime();    //получите время от RTC

  char str[20];   //объявите строку как массив символов

  sprintf(str, "%d/%d/%d %d:%d:%d",     //%d позволяет вывести целое число в строку
          currentTime.Year(),   //год
          currentTime.Month(),  //месяц
          currentTime.Day(),    //день
          currentTime.Hour(),   //час
          currentTime.Minute(), //минуты
          currentTime.Second()  //секунды
         );

  Serial.println(str); //выводим строку в последовательный порт

  delay(5000); // ждем 5 сек.

}

В конце основного цикла ставим задержку в 5 секунд.

Примечание. Хотя в этом примере используется массив символов, мы также можем использовать строковый объект для вывода параметров времени и даты. Тем не менее, важно знать, что мы можем использовать массивы символов как строки, что более эффективно. Кроме того, в чистом C нет объектов, поэтому строки всегда являются массивами символов.

Полный Скетч вывода даты и время с DS3231 в монитор порта, располагается ниже. Также скетч вы можете скачать внизу статьи в разделе «Файлы для скачивания»

#include <Wire.h>       //I2C библиотека
#include <RtcDS3231.h>  //RTC библиотека

RtcDS3231<TwoWire> rtcObject(Wire); //библиотека rtc

void setup() {

  Serial.begin(115200);  //Запуск последовательного подключения
  rtcObject.Begin();     //Запуск I2C
  /* Установка времени */
  RtcDateTime currentTime = RtcDateTime(21, 07, 18, 10, 20, 0); //2021/7/18 10:20:0
  rtcObject.SetDateTime(currentTime); //Сохраняем время

}

void loop() {

  RtcDateTime currentTime = rtcObject.GetDateTime();    //получите время от RTC

  char str[20];   //объявите строку как массив символов

  sprintf(str, "%d/%d/%d %d:%d:%d",     //%d позволяет вывести целое число в строку
          currentTime.Year(),   //год
          currentTime.Month(),  //месяц
          currentTime.Day(),    //день
          currentTime.Hour(),   //час
          currentTime.Minute(), //минуты
          currentTime.Second()  //секунды
         );

  Serial.println(str); //выводим строку в последовательный порт

  delay(5000); // ждем 5 сек.

}

Тестирование Подключения DS3231 к NodeMCU.

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

Тестирование Подключения DS3231 к NodeMCU.

Заключение.

Это был простой пример по базовым возможностям DS3231.

Это был простой пример по базовым возможностям DS3231. Тем не менее, у этого RTC модуля есть еще несколько функций, которые будем изучать в следующих уроках.

Понравился Урок Подключение DS3231 к NodeMCU? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Сварочный полуавтомат на Arduino своими руками. http://arduino-tex.ru/news/63/svarochnyi-poluavtomat-na-arduino-svoimi-rukami.html Константин Portal-PK 2021-07-06T13:39:41+03:00 Сегодня речь пойдет о том, как сделать сварочный полуавтомат на Arduino своими руками. Вернее, систему подачи проволоки для сварочного аппарата. Все необходимая информация выводится на дисплей LCD 1602. Настройка происходит с помощью энкодера. Управляет механизмом подачи – драйвер L298n. Давайте рассмотрим устройства поподробнее.

Объект автоматизации.

Перед разработкой нужно определиться с механической частью, чем будем подавать проволоку. В этом нам поможет механизм подачи SSJ-29А со следующими характеристиками:

  • Питание: DC 24 В.
  • Скорость подачи проволоки: 2-15 м/мин.
  • Номинальный ток мотора: 2А.
  • Номинальная мощность мотора: 25 Вт.
  • Размер ролика (OD * ID * H): 30*10*10 мм.

механизм подачи SSJ-29А

По техническому заданию нужно настроить скорость подачи от 1- 8 м/мин. Не смотря на то, что скорость подачи заявлена от 2 м/мин. Механизм отлично работает при скорости 1 м/мин.

Определение скорости подачи проволоки сварочного автомата.

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

Определение скорости подачи проволоки сварочного автомата.

Меню для сварочного полуавтомата на Ардуино и дисплее LCD 1602.

Информация на дисплее LCD 1602 выводиться на русском языке. На главном экране отображаются основные параметры.

Меню для сварочного полуавтомата на Ардуино и дисплее LCD 1602.

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

Режимы меняются с помощью трех позиционного переключателя.

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

При нажатии на кнопку экодера происходит переключение параметров настройки.

Первый параметр - это настройки скорости подачи проволоки от 1 до 8 м/мин.

Первый параметр - это настройки скорости подачи проволоки от 1 до 8 м/мин.

Второй параметр отвечает за время подачи проволоки. От 0,5 до 5 сек.

Второй параметр отвечает за время подачи проволоки. От 0,5 до 5 сек.

Третий параметр – время прерывания в цикле. От 0 до 5 сек.

Третий параметр – время прерывания в цикле. От 0 до 5 сек.

Четвертый – позволяет реализовать возврат проволоки. От 0 до 10 мм.

Четвертый – позволяет реализовать возврат проволоки. От 0 до 10 мм.

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

Электроника сварочного полуавтомата на Arduino

Электроника сварочного полуавтомата на Arduino

Для тестирования использовал следующую электронику:

Алгоритм работы подачи сварочной проволоки.

Тумблер включает перемотку проволоки и включает рабочий режим.

Тумблер включает перемотку проволоки и включает рабочий режим.

Энкодер производит настройку режима роботы подачи проволоки.

Энкодер производит настройку режима роботы подачи проволоки.

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

включается двигатель подачи проволоки

Также возможны другие режимы работы:

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

Исходные материалы.

Данный проект сделал под заказ, поэтому исходных материалов выложить не могу. Отдельная благодарность заказчику за то, что разрешил рассказать о проекте. Так как в 95 процентах случаев заказчики против огласки информации о проекте.

Понравился проект Сварочный полуавтомат на Arduino своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-022 – модуль ИК приёмника (IRremote). Подключение к Arduino. http://arduino-tex.ru/news/62/ky-022---modul-ik-priemnika-podklyuchenie-k-arduino.html Константин Portal-PK 2021-07-04T19:53:14+03:00 Продолжаем изучать модули из набора «37 in 1 Sensors Kit for Arduino». В предыдущих уроках мы рассмотрели модуль ИК-передатчика KY-005. Сегодня рассмотрим модуль ИК приёмника KY-022. Который позволит получать сигнал с ИК-передатчика и управлять периферийными устройствами. У меня уже есть ряд проектов на Arduino с использованием ИК приёмника.

Описание модуля ИК-приемника KY-022.

Модуль ИК-приемника Arduino KY-022, реагирует на инфракрасный свет 38 кГц.

Модуль ИК-приемника Arduino KY-022

KY-022 Технические характеристики.

Этот модуль состоит из ИК-приемника на базе «VS1838B», резистора 1 кОм и светодиода. Работает вместе с модулем ИК-передатчика KY-005. Совместимость с популярными электронными платформами, такими как Arduino, Raspberry Pi и ESP8266.

Рабочее напряжение

От 2,7 до 5,5 В

Рабочий ток

От 0,4 до 1,5 мА

Расстояние приема

18м

Угол приема

± 45º

Несущая частота

38 кГц

Напряжение низкого уровня

0,4 В

Напряжение высокого уровня

4,5 В

Фильтр окружающего света

до 500 люкс

Схема подключения KY-022 к Arduino.

Подключите линию питания (посередине) и землю (-) к +5 и GND соответственно. Также, необходимо подключить сигнал (S) к контакту 11 на Arduino. Сигнал на приемник будем отправлять с помощью пульта ДУ.

пульта ДУ

Подключение KY-022:

  • S – сигнальный контакт
  • VСС – «+» питания
  • GND – общий

Схема подключения KY-022 к Arduino UNO.

Схема подключения KY-022 к Arduino UNO.

Схема подключения KY-022 к Arduino NANO.

Схема подключения KY-022 к Arduino NANO.

KY-022 скетч для Arduino.

В следующем скетче Arduino используется библиотека IRremote для приема и обработки инфракрасных сигналов. В уроке использую пульт ДУ для последовательной отправки данных на модуль KY-022.

#include "IRremote.h"
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  Serial.println("Enabling IRin");
  irrecv.enableIRIn();      // ииничиализируем работу с IR
  Serial.println("Enabled IRin");
}
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Ждем следующее значение от пульта ДУ
  }
  delay(100);
}

Ссылки на необходимые материалы и библиотеку для данного примера KY-022 Arduino можно найти в разделе «Файлы для скачивания».

После того как скетч загружен и IR приемник подключен, можно проверить, какой код соответствует той или иной кнопке пульта ДУ. Поочередно нажимаем на кнопки, и в мониторе последовательного порта (Ctrl+Shift+M) вы уведите следующее.

 скетч загружен и IR приемник подключен

У вас скорее всего возник вопрос: "Что за повторяющая команда FFFFFFFF"? Эта команда выводится, когда мы долго удерживаем кнопку на пульте и на Ардуино приходит одинаковая команда. В этом нет ничего страшного, а иногда это даже полезно. На основе получения данных в таком виде, я сделал управление машинкой, с помощью пульта ДУ. При этом машинка едет только тогда, когда нажата кнопка пульта. Отпускаем и машина перестает ехать или поворачивать.

включение и выключения встроенного светодиода на плату Arduino при помощи пульта дистанционного управления

Само простое, чем можно управлять - это включение и выключения встроенного светодиода на плату Arduino при помощи пульта дистанционного управления и инфракрасного приемника KY-022.

Схема подключения, как и в примере выше. Коды кнопок моего пульта, которые я буду использовать для примера:

//FF10EF   — стрелочка вправо
//FF5AA5   — стрелочка влево

У вашего пульта команды будут другие, если он не такой же модели, как у меня. Большинство наборов для Arduino оснащены пультом данной модели.

Скетч включения светодиода с помощью пульта ДУ.

//FF10EF   — стрелочка вправо
//FF5AA5   — стрелочка влево
#include "IRremote.h"
IRrecv irrecv(11); // указываем вывод, к которому подключен приемник
decode_results results;
void setup() {
  irrecv.enableIRIn(); // запускаем прием
}
void loop() {
  if ( irrecv.decode( &results )) { // если данные пришли
    switch ( results.value ) {
    case 0xFF10EF:
        digitalWrite( 13, HIGH );
        break;
    case 0xFF5AA5:
        digitalWrite( 13, LOW );
        break;
    }    
    irrecv.resume(); // принимаем следующую команду
  }
  delay(100);
}

Вот так можно легко научить Arduino принимать команды с пульта.

Понравился Урок KY-022 – модуль ИК приёмника. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Умные шторы. Управление шаговым двигателем на Arduino через bluetooth. http://arduino-tex.ru/news/61/umnye-shtory-upravlenie-shagovym-dvigatelem-na-arduino.html Константин Portal-PK 2021-07-02T10:38:11+03:00 В своей повседневной жизни мы все чаще и чаше используем беспроводные устройства, которые облегчают нам работу и быт. Сегодня поговорим о том, как можно сделать управление шаговым двигателем на Arduino через bluetooth. На основе чего можно реализовать достаточно интересные проекты, такие как умные шторы.Давайте разберемся, как это можно сделать своими руками.

Приложение для телефона позволяющее управлять шаговым двигателем.

Планировал сделать приложение в mit app inventor, но, к сожалению что-то случилось с данным сервисом и приложение для тестирования перестало работать. Возможно, на данный момент все работает, но на момент, когда я делал проект «управление шаговым двигателем по bluetooth» наблюдалась данная проблема. Поэтому сделал приложение в APP Thunkable, по функционалу они очень похожи и исходные материалы приложений будут работать в обоих сервисах.

Интерфейс приложения достаточно простой. Несколько текстовых полей, кнопок, бегунок и список.

Интерфейс приложения достаточно простой. Несколько текстовых полей, кнопок, бегунок и список.

Блоки программы для mit app inventor.

Блоки программы для mit app inventor.

Эта часть программы, отвечающая за подключение по bluetooth.

Эта часть программы, отвечающая за подключение по bluetooth.

Управление шаговыми двигателями происходит с помощью данных элементов.

Управление шаговыми двигателями происходит с помощью данных элементов.

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

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

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

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

Для проекта понадобиться следующая электроника:

Схема подключения шагового двигателя 28BYJ-48, Bluetooth модель HC-05 к Arduino.

Схема подключения шагового двигателя 28BYJ-48, Bluetooth модель HC-05 к Arduino.

Как видно из схемы к Arduino NANO, подключаем шаговый двигатель 28BYJ-48, Bluetooth модель HC-05. Драйвер шагового двигателя ULN2003 запитать лучше от отдельного блока питания 5-12 В.

схема Arduino NANO, подключаем шаговый двигатель 28BYJ-48, Bluetooth модель HC-05. Драйвер шагового двигателя ULN2003 з

Если делать умные рулонные шторы, то желательно добавить в схему конечный выключатель. А лучше геркон или KY-003 модуль датчика Холла. На штору поместить магнит. Что позволит определять границы перемещения полотна.

Код (скетч) управления шаговым двигателем на Arduino через bluetooth.

В коде всего 2 переменные, которые нужно поменять в том случае если вы будете использовать другой шаговый двигатель. Первая переменная устанавливает скорость по умолчанию – это 5 оборотов в минуту. Вторая определяет сколько нужно шаговому двигателю сделать шагов, чтобы совершить 1 оборот вала.

int currentHeading = 5; // кол-во оборотов в мин
int sh = 2048; // колияество шагов для совершения 1 оборота

В следующем блоке кода подключаем библиотеку AccelStepper, которую можно скачать внизу статьи в разделе «Файлы для скачивания».

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>

Затем определяем тип двигателя (точнее тип драйвера шагового двигателя), данное подключение можно использовать с другими драйверами, такими как L293, L298 и пр.

// Определение тип интерфейса двигателя
#define motorInterfaceType 4
// подключаем двигатель
#define motorPin1  8
#define motorPin2  9
#define motorPin3  10
#define motorPin4  11
AccelStepper mySt(motorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);

Дальше идут переменные, которые нужны для работы алгоритма.

String  val; // строка для получения команд с телефона
bool flag = false; // флаг получения данных
bool flagAuto = false; // флаг бесконечного вращения ШД
bool flagLeft = false; // флаг направления вращения
bool flagStart = false; // флаг старта вращения шд

В блоке setup() определяем параметры скорости и ускорения шагового двигателя.

// Устанавливаем коэффициент ускорения,
  // начальную скорость
  mySt.setMaxSpeed(1000);
  mySt.setAcceleration(400); // Установка ускорения, в шагах в секунду за секунду.
  mySt.setSpeed(currentHeading * 68.33); // Установить скорость (в шагах за секунду). Само движение запускается функцией runSpeed().

И инициализируем соединение с Bluetooth модулем и скорость работы. У вашего Bluetooth модуля скорость работы может быть другая.

Serial.begin(9600);  //соединение и задает скорость передачи данных в бит/c (бод)

В основном цикле loop() проверяем, пришли данные или нет. Если данные получили, сохраняем их в переменную val и поднимаем флаг.

if (Serial.available() > 0) // пришли данные
  {
    val = Serial.readString(); // получаем строку из порта
    flag = true;
  }

После поднятия флага проверяем, какую команду получили. Если ни одна не совпадает, то проверяем, возможно, это число скорости вращения шагового двигателя.

if (flag)
  {
    if (val == "auto")       // если 1 то включаем светодиод
    {
      flagAuto = true;
      Serial.println("auto"); // вывод данных с переносом строки
      flag = false;
    }
    else if (val == "non")       // если 0 то выключаем светодиод
    {
      flagAuto = false;
      Serial.println("non");  // вывод данных с переносом строки
      flag = false;
    }
    else if (val == "left")       // если 0 то выключаем светодиод
    {
      flagLeft = true;
      Serial.println("left");  // вывод данных с переносом строки
      flag = false;
      flagStart = true;
      mySt.setCurrentPosition (0); // обнулить позицию двигателя
    }
    else if (val == "right")       // если 0 то выключаем светодиод
    {
      flagLeft = false;
      Serial.println("right");  // вывод данных с переносом строки
      flag = false;
      flagStart = true;
      mySt.setCurrentPosition (0); // обнулить позицию двигателя
    }
    else
    {
      currentHeading = val.toInt();
      Serial.println(currentHeading);  // вывод данных с переносом строки
      flag = false;
    }
  }

Затем переходим к алгоритму управления шаговым двигателем, в котором определяем статус запуска вращения шагового двигателя «flagStart».

if (flagStart) {

После чего, проверяем направление вращения двигателя и устанавливаем скорость вращения с учетом направления.

if (flagLeft) {
      if (sh > 0)
        sh = -1 * sh;
      mySt.setSpeed(-currentHeading * 68.33);
    }
    else {
      if (sh < 0)
        sh = -1 * sh;
      mySt.setSpeed(currentHeading * 68.33);
    }

Следующие 2 строчки заставляют шаговый двигатель сделать один оборот.

mySt.moveTo(sh);
mySt.runSpeed();  // Ждем пока двигатель не встанет в заданную позицию

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

if (mySt.currentPosition() == sh )
    {
      if (!flagAuto)
        flagStart = false;
      mySt.setCurrentPosition (0); // обнулить позицию двигателя
      Serial.println("zero");  // вывод данных с переносом строки
    }

Такой небольшой код, который можно дополнить и сделать управление рулонными шторами с помощью телефона. А также другие интересные проекты с использованием Arduino и шагового двигателя.

Умные рулонные шторы своими руками на Arduino.

На основе приложения и кода можно сделать своими руками умные рулонные шторы на Arduino. Даже без добавления дополнительных элементов. Для этого достаточно замерить, сколько оборотов делает штора, чтобы достигнуть конечного положения. И добавить в программу данное значение, вместо значения перемещения на 1 оборот. И после чего, при нажатии у вас будет сворачиваться, и разворачиваться штора. Но для безопасной работы лучше установить конечный выключатель или, как рассказывал ранее датчик холла. Чтобы определять конечное положение.

Механическая часть умной рулонной шторы.

Чтобы реализовать механизм умной рулонной шторы можно воспользоваться готовыми 3D моделями для печати и модернизировать обычную штору.

Чтобы реализовать механизм умной рулонной шторы можно воспользоваться готовыми 3D моделями для печати

Используя электронику из проекта, получится вот такая умная рулонная штора.

Используя электронику из проекта, получится вот такая умная рулонная штора.

Заключение.

Управление шаговым двигателем через Bluetooth имеет ряд ограничений. Самое главное ограничение – это возможность подключиться только к одному устройству. Соответственно управлять сможем одновременно только одним устройством. А в случае со шторой, как правило, их в квартире 3-4 и больше и управлять ими желательно одновременно, что можно реализовать с помощью Wi-Fi управления. Если вам интересно продолжение данной темы, пишите в комментарии.

Понравился проект Умные шторы. Управление шаговым двигателем на Arduino через bluetooth? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. Подключаем зуммер к NodeMCU. http://arduino-tex.ru/news/60/urok-esp8266-podklyuchaem-zummer-k-nodemcu.html Константин Portal-PK 2021-07-01T15:06:50+03:00 Цель этого урока - объяснить, как управлять модулем пассивного зуммера с помощью ESP8266. Мы будем программировать ESP8266, используя ядро Arduino. Вы можете посмотреть урок по подключению зуммера к Arduino UNO тут.

Что понадобится для урока управления зуммером с помощью NodeMCU.

В этом уроке ESP8266 будем использовать пассивного зуммера, в виде модуля KY-006, что позволяет нам напрямую управлять им, с помощью вывода GPIOмикроконтроллера.

Важно! Не подключайте цифровой вывод ESP8266 напрямую к зуммеру без использования транзистора или любого другого метода подачи тока на устройство. GPIO ESP8266 могут подавать только 12 мА, а большинство зуммеров потребляет значительно больше, что может повредить микроконтроллер.

Характеристики модуля KY-006:

  • Ток: 10мА
  • Рабочее напряжение: 1,5 ~ 15 В постоянного тока
  • Диапазон генерации тона: 1,5 ~ 2,5 кГц
  • Размеры 18,5 x 15 мм

Как видим, ток необходимый для работы модуля KY-006 меньше 12 мА. Поэтому его можно подключить напрямую к контактам NodeMCU.

Итак, подключаем ESP8266 к модулю зуммера, как показано на рисунке ниже. Если вы используете плату NodeMCU, обратите внимание, что номера контактов, указанные на плате, не соответствуют контактам на ESP8266.

Схема подключения модуля зуммера KY-006 к NodeMCU.

Схема подключения модуля зуммера KY-006 к NodeMCU.

Поскольку используем пассивный зуммер, нам нужно сгенерировать прямоугольную волну, чтобы контролировать звук, который он будет издавать. Частота прямоугольной волны, создаваемой на выводе GPIO, будет частотой звука. Таким образом, управление зуммером будет немного сложнее, поскольку он не будет включаться / выключаться, как светодиод, но у нас будет больше возможностей, поскольку мы сможем изменять частоту.

Скетч управления зуммером с помощью NodeMCU. Библиотека Tone.

Код этого урока очень прост, поскольку мы будем использовать функцию tone(), которая выполняет большую часть работы за нас. Убедитесь, что вы используете последнюю версию основных библиотек ESP8266 Arduino, чтобы гарантировать доступность функции tone().

Эта функция принимает 2 аргумента: первый соответствует контакту, на котором будет генерироваться прямоугольная волна, управляющая зуммером, а второй соответствует используемой частоте.

tone(buzzPin, frequency);

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

Предположим, что наш зуммер будет воспроизводить частоту 1000 Гц, и он будет гудеть в течение 1 секунды, затем останется выключенным в течение 1 секунды, а затем данный алгоритм повторяется заново.

Чтобы код было легко изменить, мы сначала объявляем 4 глобальные переменные и присваиваем им соответствующие значения.

int frequency = 1000; //частота Hz
int buzzPin = 2;
int timeOn = 1000; //время работы в milliseconds
int timeOff = 1000; //время ожидания в millisecods

В этом простом примере мы можем перейти к функции настройки и поместить в наш цикл, следующий код:

void loop() {
  tone(buzzPin, frequency);
  delay(timeOn);
  noTone(buzzPin);
  delay(timeOff);
}

Итак, активируем прямоугольную волну 1000 Гц на контакте 2, вызывая функцию тона, и начинает звучать зуммер. Ждем 1 секунду, затем выключаем зуммер функцией noTone. Затем ждем еще 1 секунду и повторяем процесс.

Пример кода (скетч) для генерирования трех разных тонов звучания.

Следующий скетч ESP8266 будет генерировать три разных тона, путем включения и выключения зуммера KY-006 на разных частотах, с использованием функции tone().

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

void setup ()
  {
    //Настройка вывода платы в режим "Выход"
    pinMode (PinBuzzer, OUTPUT);
    tone(PinBuzzer, 1500); // включаем звук частотой 1500 Гц
      delay(200);
      tone(PinBuzzer, 1000); // включаем звук частотой 1000 Гц
      delay(200);
      tone(PinBuzzer, 500); // включаем звук частотой 500 Гц
      delay(200);

    noTone(PinBuzzer); // выключаем звук
    delay(2000);
  }

Если нам нужно, чтобы звуковой сигнал воспроизводился постоянно, то добавляем код в основной цикл loop ().

void setup ()
  {
    //Настройка вывода платы в режим "Выход"
    pinMode (PinBuzzer, OUTPUT);
    tone(PinBuzzer, 1500); // включаем звук частотой 1500 Гц
      delay(200);
      tone(PinBuzzer, 1000); // включаем звук частотой 1000 Гц
      delay(200);
      tone(PinBuzzer, 500); // включаем звук частотой 500 Гц
      delay(200);

    noTone(PinBuzzer); // выключаем звук
    delay(2000);
  }

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

Пассивный звуковой излучатель использовал в проекте, который собирал вместе с сыном: «Часы-будильник на Arduino»

Пассивный звуковой излучатель использовал в проекте, который собирал вместе с сыном: «Часы-будильник на Arduino». Корпус сделан из конструктора LEGO.

Понравился Урок Подключаем зуммер к NodeMCU? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок ESP8266. DHT11 Подключение к ESP8266. http://arduino-tex.ru/news/59/dht11-podklyuchenie-k-esp8266.html Константин Portal-PK 2021-06-28T17:28:50+03:00 Цель данного урока - показать, как подключить датчик DHT11 к ESP8266 и написать простую программу для измерения температуры и влажности. Будем использовать Arduino IDE для программирования ESP8266.

Аппаратные средства урока DHT11 Подключение к ESP8266.

Для урока нам понадобиться модуль DHT11. Как подключить модуль DHT11 к Arduino у меня на сайте есть отдельный урок KY-015 - Модуль с датчиком температуры и влажности DHT11. Подключение к Arduino. Кроме этого вы можете найти подробный урок по выводу значений температуры и влажности с датчика DHT11 в браузер. А сегодня мы рассмотрим самый простой пример использования датчика DHT11 с отладочной платой ESP8266.

пример использования датчика DHT11 с отладочной платой ESP8266.

DHT11 может измерять как температуру, так и влажность, и идеально подходит для простых проектов по мониторингу окружающей среды. Он имеет точность измерения 1ºC для температуры и 1% RH (относительной влажности). И диапазон измерения температуры от 0 ° C до 50 ° C.

Подключение датчика к ESP8266 очень простое, как показано на рисунке ниже. В этом случае мы предполагаем использование GPIO2 (который является одним из немногих, доступных при использовании платы ESP-01 ). Тем не менее, вы можете подключить его к другому контакту GPIO. В случае использования платы NodeMCU примите во внимание, что порядок выводов на плате не соответствует выводам ESP8266, что может привести к ошибочным результатам (вы можете проверить распиловку ESP-01и NodeMCU здесь ).

Также примите во внимание, что разные модули DHT11 могут иметь разное расположение сигнального контакта «S».

Установка библиотеки DHT11 для работы с ESP8266.

Как указывалось ранее, предполагаем использование IDE Arduino для программирования ESP8266. Пожалуйста, ознакомьтесь с подробным руководством здесь, если вы еще не настроили его для поддержки плат ESP8266.

Существует несколько библиотек для Arduino, которые упрощают нашу задачу взаимодействия с DHT11. Библиотека датчиков Simple DHT очень проста в использовании и хорошо работает с ESP8266. Эту библиотеку можно легко установить с помощью диспетчера библиотек Arduino IDE Library, как показано на рисунке.

диспетчера библиотек Arduino IDE Library

Библиотека датчиков Simple DHT

Код для вывода температуры с датчика DHT11.

Чтобы импортировать только что установленную библиотеку, поместите следующий include в начало кода:

#include <SimpleDHT.h>

Также объявите глобальную переменную с номером вывода GPIO, чтобы упростить изменение. В этом примере будем использовать GPIO2:

int DHTpin = 2;

Чтобы разрешить отправку данных на компьютер, запустите последовательное соединение в функции настройки:

Serial.begin(115200);

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

byte temperature;
byte humidity;

Мы используем байтовые переменные, поскольку DHT11 имеет разрешение всего 8 бит, как для температуры, так и для влажности.

Наконец, также в функции основного цикла считываем значения и отправляем их в последовательный порт:

if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("temperature: "); Serial.print((int)temperature); Serial.println("ºC");
    Serial.print("Humidity: "); Serial.print((int)humidity); Serial.println("%");
  } else {
    Serial.print("Failed.");
  }

Всегда проверяйте, возвращает ли функция чтения ошибку, прежде чем пытаться использовать или отправлять данные другому объекту. Кроме того, как указывалось ранее, дважды проверьте подключение датчика DHT11, особенно если вы используете nodeMCU. Например, в этом случае я тестировал код, используя именно плату NodeMCU, и номер контакта 4 («D4») платы - это тот, который соответствует GPIO2 ESP8266. Для NodeMCU можно использовать подключение к контакту 4, для этого в коде прописываем контакт подключения не «GPIO2», а «D4».

 который соответствует GPIO2 ESP8266. Для NodeMCU

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

delay(2000);

Если откроете последовательный монитор Arduino IDE, вы должны увидеть что-то похожее на это.

Важно отметить, что DHT11 выполняет измерения только по запросу подключенного к нему микроконтроллера.

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

подключить DHT11 к ESP8266


Заключение.

Как видите, подключить DHT11 к ESP8266 довольно просто. Хотя в этом руководстве объясняется только, как отправлять данные на компьютер с помощью последовательного соединения, очень легко адаптировать код для отправки измерений на удаленный сервер, используя функции ESP8266. Вы можете посмотреть здесь, пример регистратора температуры, который отправляет данные на веб-сервер, используя ESP32, ESP8266 и DHT11.

Понравился Урок DHT11 Подключение к ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
ESP32 Arduino. Удалить все файлы. Форматирование SPIFFS. http://arduino-tex.ru/news/58/esp32-arduino-udalit-vse-faily-formatirovanie-spiffs.html Константин Portal-PK 2021-06-25T17:24:18+03:00 При создании различных проектов на ESP32 для хранения файлов используем файловую систему SPIFFS. А если файлы и папки созданы программой в SPIFFS, то, что там хранится, посмотреть не получится. Также бывают случаи, с которыми я столкнулся на днях при создании ЧПУ станка на ESP32. Прошивка ESP32_GRBL создает файл конфигурации, который не переписывается при переустановке GRBL. Я без проблем могу найти данный файл и удалить его по имени, но как же быть новичку. Сегодня в уроке рассмотрим, как можно отформатировать SPIFFS используя всего одну команду.

Для данного урока у вас должны быть заранее созданные файлы в файловой системе. В этом нам поможет пример SPIFFS_Test. Который располагается «Примеры -> SPIFFS -> SPIFFS_Test».

созданные файлы в файловой системе. В этом нам поможет пример SPIFFS_Test.

Данный пример нужно немного изменить: закомментируем строки, которые удаляют файлы после их создания. И получим вот такой код.

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

Загрузим пример в ESP32. Как настроить работу ESP32 в среде Arduino IDE читайте тут: Установка, прошивка платы ESP32 в Arduino IDE (Windows, Mac OS X, Linux).

Откроем монитор порта и увидим, что у нас также хранятся файлы от прошивки GRBL:

FILE: /favicon.icoSIZE: 1150  
FILE: /index.html.gzSIZE: 128570

также создались 2 файла: foo.txt, hello.txt

Загрузим пример в ESP32. Как настроить работу ESP32 в среде Arduino IDE

Код удаления всех файлов из файловой системы SPIFFS ESP32.

Начнем с подключения библиотеки SPIFFS.h, чтобы у нас был доступ к управлению файловой системой SPIFFS.

#include "SPIFFS.h"

Затем объявим функцию с именем listAllFiles, которая выведет список всех файлов файловой системы SPIFFS. В этой функции откроем корневой каталог « / », а затем будем перебирать все файлы, вызывая метод openNextFile. При обнаружении файла будем выводить в монитор порта имя текущего файла.

void listAllFiles(){
  File root = SPIFFS.open("/");
  File file = root.openNextFile();
  while(file){
      Serial.print("FILE: ");
      Serial.println(file.name());
      file = root.openNextFile();
  }
}

В основной функции setup() установим подключение к последовательному порту.

Serial.begin(115200);

Затем подключим файловую систему SPIFFS, чтобы мы могли ее использовать.

if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
}

После этого перечислим все файлы в файловой системе SPIFFS, прежде чем форматировать их.

Serial.println("\n\n----Listing files before format----");
listAllFiles();

Сейчас будем форматировать файловую систему, вызвав функцию SPIFFS.format(). Этот метод не принимает аргументов и возвращает в качестве вывода логическое значение, указывающее, была ли процедура успешной (true) или неудачной (false). Мы сохраним возвращенное значение для проверки ошибок.

bool formatted = SPIFFS.format();

Затем выполним проверку на ошибки в возвращенном значении, чтобы убедиться, что процедура прошла успешно. После чего выведем сообщение в монитор порта – успешно прошло форматирование или нет.

if(formatted){
    Serial.println("\n\nSuccess formatting");
}else{
    Serial.println("\n\nError formatting");
}

И напоследок снова выведем в монитор порта список файлов в файловой системе SPIFFS, чтобы убедиться, что они действительно были удалены. Второй вызов должен выдать пустой список.

Serial.println("\n\n----Listing files after format----");
listAllFiles();

В итоге получим вот такой код удаления всех файлов из файловой системы SPIFFS на плате ESP32.

#include "SPIFFS.h"
 
void listAllFiles(){
 
  File root = SPIFFS.open("/");
 
  File file = root.openNextFile();
 
  while(file){
 
      Serial.print("FILE: ");
      Serial.println(file.name());
 
      file = root.openNextFile();
  }
 
}
 
void setup() {
 
  Serial.begin(115200);
 
  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }
 
  Serial.println("\n\n----Listing files before format----");
  listAllFiles();
 
  bool formatted = SPIFFS.format();
 
  if(formatted){
    Serial.println("\n\nSuccess formatting");
  }else{
    Serial.println("\n\nError formatting");
  }
 
  Serial.println("\n\n----Listing files after format----");
  listAllFiles();
}
 
void loop() {}

Проверка форматирования файловой системы SPIFFS на плате ESP32.

Чтобы проверить код, сначала откройте последовательный монитор Arduino IDE, чтобы убедиться, что не пропустили вывод программы. Затем скомпилируйте код и загрузите его в ESP32, предполагая, что у нас ранее были созданы файлы в файловой системе SPIFFS.

созданы файлы в файловой системе SPIFFS

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

Проверка форматирования файловой системы SPIFFS на плате ESP32.

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

Вот такой простой способ поможет отформатировать файловую систему ESP32.

Понравился Урок ESP32 Arduino. Удалить все файлы. Форматирование SPIFFS? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-021 – Модуль на основе геркона. Подключение к Arduino. http://arduino-tex.ru/news/57/ky-021---modul-na-osnove-gerkona-podklyuchenie-k-arduino.html Константин Portal-PK 2021-06-23T07:50:40+03:00 KY-021 – Модуль на основе геркона, является датчиком магнитного поля. При попадании в магнитное поле геркона, распложеннего в стекляной колбе, замыкает цепь. Герконы широко применяются в охранных системах. Это связано с небольшим размером геркона и возможности работать датчика без прямого взаимодействия с магнитом. Магнит можем расположить за небольшой стенкой или в корпусе и при этом на работоспособность модуля KY-021 это никак не повлияет.

Описание модуля наклона KY-021.

Модуль KY-021 для Arduino оснащён герконом. Геркон представляет собой магнитный датчик, который нормально открыт и замыкается под воздействием магнитного поля.

Модуль KY-021 для Arduino оснащён герконом.

Характеристики KY-021.

Модуль мини-герконового переключателя KY-021 состоит из резистора 10 кОм и небольшого геркона, который приводится в действие магнитным полем и обычно используется в механических системах в качестве датчиков приближения. Модуль совместим с популярными отладочными платами, такими как Arduino, Teensy и ESP8266.

Рабочее напряжение

От 3,3 В до 5 В

Тип выхода

Цифровой

Размер доски

18,5 x 15 мм

Принципиальная схема модуля KY-021.

Принципиальная схема модуля KY-021.

Схема подключения модуль KY-021.

Схема подключения модуль KY-021.

Подключите линию питания (посередине) и землю (-) модуля к +5 и GND соответственно. Контакт сигнала (S) подключите к контакту 2 на Arduino.

Схема подключения модуля геркона KY-021 к Arduino UNO.

Схема подключения модуля геркона KY-021 к Arduino UNO.

Схема подключения модуля геркона KY-021 к Arduino NANO.

Схема подключения модуля геркона KY-021 к Arduino NANO.

Пример кода включения светодиода при обнаружении магнитного поля с помощью геркона.

Следующий скетч включает встроенный светодиод, который подключён к 13 pin на Arduino. Это происходит, когда модуль обнаруживает магнитное поле. Для этого поместите магнит рядом с KY-021, чтобы сработал геркон.

int led = 13 ;// назначение пина для светодиода
int miniReedSensorPin = 2; // назначение пина для геркона
int value ;// переменная для хранения положения геркона
void setup ()
{
  pinMode (led, OUTPUT) ;// пин светодиода работает как выход
    pinMode (miniReedSensorPin, INPUT) ; // пин геркона работает как вход
}
void loop ()
{
  value = digitalRead (miniReedSensorPin) ;// чтение значения с геркона
    if (value == HIGH) // когда с датчика появляется низкий уровень то светодиод гаснет
  {
    digitalWrite (led, HIGH);
  }
  else
  {
    digitalWrite (led, LOW);
  }
}

Пример2. Включение звуковой сигнализации, когда отсутствует магнитное поле. Используем модули: KY-021 и KY-012.

 Включение звуковой сигнализации, когда отсутствует магнитное поле. Используем модули: KY-021 и KY-012.

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

Схема подключения модулей KY-012, KY-021 к Arduino UNO.

Схема подключения модулей KY-012, KY-021 к Arduino UNO.

Схема подключения модулей KY-012, KY-021 к Arduino NANO.

Схема подключения модулей KY-012, KY-021 к Arduino NANO.

Пример кода для модулей KY-012, KY-021 подключенных к Arduino.

int led = 13 ;// назначение пина для светодиода
int miniReedSensorPin = 2; // назначение пина для геркона
int buzzerPin = 3; // активный звуковой модуль (зуммер)
int value ;// переменная для хранения положения геркона
void setup ()
{
  pinMode (led, OUTPUT) ;// пин светодиода работает как выход
  pinMode (buzzerPin, OUTPUT);// пин зуммера работает как выход
    pinMode (miniReedSensorPin, INPUT) ; // пин геркона работает как вход
}
void loop ()
{
  value = digitalRead (miniReedSensorPin) ;// чтение значения с геркона
    if (value == HIGH) // когда с датчика появляется низкий уровень то светодиод гаснет
  {
    digitalWrite (led, HIGH);
    digitalWrite (buzzerPin, HIGH);
  }
  else
  {
    digitalWrite (led, LOW);
    digitalWrite (buzzerPin, LOW);
  }
}

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

В данном примере можно заменить зуммер на другой модуль или устройства. Например при использовании ESP8266 или ESP32 можно отправлять уведомление в Whatsapp или Телеграм. Для этого нужно подключение к интернету по Wi-Fi.

Вывод по модулю KY-021.

Вывод по модулю KY-021.

Геркон используется уже очень долгое время и нашел применение в различных системах. Как я уже говорил выше, его можно использовать в охранной системе или в небольших устройствах, где нужно определить магнитное поле за стеной, например в резервуаре с газом или жидкостью. Вывод сделать можно один: модуль KY-021 можно применить в различных Arduino проектах.

Понравился Урок KY-021 – Модуль на основе геркона. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-020 - датчики наклона. Подключение к Arduino. http://arduino-tex.ru/news/56/ky-020---datchiki-naklona-podklyuchenie-k-arduino.html Константин Portal-PK 2021-06-16T12:25:47+03:00 При разработке Arduino проектов часто возникает необходимость определить положение объекта, его наклон или вибрацию. Реализовать контроль можно различными средствами от сложных, таких как акселерометр, до простых датчиков наклона и вибрации. В прошлом уроке мы рассмотрели ртутный датчик наклона ky-017. Сегодня в Arduino уроке поговорим о модуле KY-020 который оснащён шариковым датчиком наклона.

Описание модуля наклона KY-020.

Описание модуля наклона KY-020

Принцип работы модуля наклона KY-020 достаточно простой и основан на замыкании цепи двумя металлическими шариками. При наклоне датчика шарики перемешаются и при попадании на контакты замыкают цепь.

Принцип работы модуля наклона KY-020

Характеристики KY-020.

Характеристики KY-020

KY-020 состоит из резистора 10 кОм и шарового переключателя с двунаправленной проводимостью, который размыкает / замыкает цепь в зависимости от степени ее наклона. Угол наклона не измеряется.

Схема датчика наклона KY-020

Схема датчика наклона KY-020 исключительно простая. Здесь присутствует сопротивление, которое подтягивает сигнальный выход к питанию, а сам датчик при срабатывании замыкается на землю.

  • Рабочее напряжение: От 3,3 В до 5 В
  • Тип выхода: Цифровой

Схема подключения KY-020.

Подключите линию питания (посередине) и землю (-) модуля к +5 и GND соответственно. Сигнальный контакт (S) подключите к 3 пину на Arduino.

Схема подключения модуля наклона KY-020 к Arduino UNO.

Схема подключения модуля наклона KY-020 к Arduino UNO.

Схема подключения модуля наклона KY-020 к Arduino NANO.

Схема подключения модуля наклона KY-020 к Arduino NANO.

Код для Arduino включения светодиода при наклоне модуля KY-020.

int led = 13 ;// назначение пина для светодиода
int tiltSensorPin = 3; // назначение пина для датчика наклона
int value ;// переменная для хранения значения датчика
void setup ()
{
  pinMode (led, OUTPUT) ;// пин светодиода работает как выход
    pinMode (tiltSensorPin, INPUT) ; //пин дачика наклона работает как вход
}
void loop ()
{
  value = digitalRead (tiltSensorPin) ;// чтение значения с датчика
    if (value == HIGH) // когда с датчика появляется высокий уровень то светодиод горит
  {
    digitalWrite (led, HIGH);
  }
  else
  {
    digitalWrite (led, LOW);
  }
}

Следующий скетч включает встроенный светодиод, который подключен к 13-му контакту Arduino, когда модуль обнаруживает изменение степени наклона. Модуль наклона KY-020 включает и выключает светодиод.

Пример 2. При изменении наклона KY-020 меняем цвет светодиода на модуле KY-016.

Пример 2. При изменении наклона KY-020 меняем цвет светодиода на модуле KY-016.

Чтобы сделать живой пример, необходимо дополнительно подключить RGB светодиод в виде модуля KY-016. Данный пример сигнализирует красным цветом при наклоне модуля и зеленым, если модуль находится в горизонтальном положении.

Схема подключения модулей KY-020, KY-016 к Arduino UNO.

Схема подключения модулей KY-020, KY-016 к Arduino UNO.

Схема подключения модулей KY-020, KY-016 к Arduino NANO.

Схема подключения модулей KY-020, KY-016 к Arduino NANO.

Так как на модуле распаяна вся необходимая обвязка, дополнительные резисторы подключать не нужно. Как мы делали в уроке: KY-017 – модуль ртутного датчика наклона.

Вывод по использованию модуля наклона KY-020.

Вывод по использованию модуля наклона KY-020.

При работе с модулем наклона нужно помнить, что при соединении контактов возникает дребезг контактов, который мы уже рассмотрели в уроке: Arduino: Дребезг — программное устранение. Нажатие кнопки без ложных срабатываний.

Также можно отметить, что ртутный датчик работает гораздо быстрее и более точно. В связи с чем, можно сделать вывод, что модуль KY-020 можно использовать при обнаружения наклонов в не очень ответственных проектах. Если нужно измерять наклон боле точно стоит задуматься об использовании других средств измерения наклона, например акселерометр.

Понравился Урок KY-020 - датчики наклона. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-019 модуль одноканального реле. Подключение к Arduino. http://arduino-tex.ru/news/55/ky-019-modul-odnokanalnogo-rele-podklyuchenie-k-arduino.html Константин Portal-PK 2021-06-09T19:11:31+03:00 Сегодня в Arduino уроке рассмотрим модуль реле KY-019. Разберём несколько примеров использования реле в Arduino проектов: управление реле через Wi-Fi сеть, управление реле с помощью Bluetooth модуля HC-06 или HC-05. А также самое простое управление реле, с помощью тактовой кнопки. Ну что, приступим!

Описание модуля реле KY-019.

Описание модуля реле KY-019.

Модуль реле Arduino KY-019 используется для управления цепями переменного тока, реле действует как переключатель, который реагирует на сигнал, полученный от Arduino, он имеет встроенный светодиод, который указывает, включено или выключено реле.

Реле обычно используется для управления освещением и другими электронными приборами.

Характеристики KY-019.

KY-019 состоит из резистора 1 МОм, светодиода, диода 1N4007 и реле 5 В

KY-019 состоит из резистора 1 МОм, светодиода, диода 1N4007 и реле 5 В постоянного тока, способного выдерживать напряжение до 250 В переменного тока 10 А.

На стороне постоянного тока платы есть 3 контакта: сигнальный, питание и заземление. На стороне переменного тока есть 3 контакта: NC (нормально замкнутый), общий и NO (нормально разомкнутый).

Сигнал TTL

От 5 до 12 В постоянного тока

(некоторые платы могут работать с 3.3)

Максимальный переменный ток

10A 250 В переменного тока

Максимальный постоянный ток

10А 30В постоянного тока

Тип контакта

NC и NO

Габаритные размеры

27 мм x 34 мм

Схема подключения модуля реле KY-019.

Для управления реле с Arduino подключите S (сигнал) к контакту 3 на Arduino, а также подключите линию питания (+) и землю (-) к +5 и GND соответственно. Кроме этого подключите модель тактовой кнопки KY-004 к 2 пину Arduino.

Со стороны переменного тока подключите питание к общему контакту (средний контакт) и используйте NC или NO в соответствии с вашими потребностями.

NO (нормально разомкнутый) получает питание, когда на контакт (S) подадим высокий сигнал с Arduino, NC (нормально замкнутый) отключается, когда на контакт (S) подаем высокий сигнал.

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

Схема подключения модуля реле KY-019 и модуля тактовой кнопки KY-004 к Arduino UNO.

Схема подключения модуля реле KY-019 и модуля тактовой кнопки KY-004 к Arduino UNO.

Схема подключения модуля реле KY-019 и модуля тактовой кнопки KY-004 к Arduino NANO.

Схема подключения модуля реле KY-019 и модуля тактовой кнопки KY-004 к Arduino NANO.

Код включения реле KY-019 с помощью тактовой кнопки KY-004.

const int buttonPin = 2;      // номер входа, подключенный к кнопке
const int relayPin =  3;        // номер выхода светодиода
/* переменные */
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
boolean relayOn = false;        // текущее состояние свтодиода
void setup() // Функция setup()
{
  // инициализируем пин, подключенный к реле, как выход
  pinMode(relayPin, OUTPUT);     
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT);   
}
boolean debvance (boolean last) //убираем дребизг
{
  boolean current = digitalRead (buttonPin); // считываем данные с кнопки
  if (last != current) // Если текущее состояние отличететься от предыдущего 
  {
   delay (5);   // Ждем 5 милисек.
   current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
    return current; 
  }
}
void loop() // Функция loop
{
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW 
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    relayOn = !relayOn; // инвертируем значение 
  }
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  digitalWrite(relayPin, relayOn);   // Включаем или выключаем реле (смотря что пришло после инверсии) 
  delay (2);   // Ждем 2 милисек.
}

Из кода видно, что Arduino служит только для фиксации сигнала. Поэтому, этот пример можно использовать без микроконтроллера, установив кнопку с фиксацией.

Давайте рассмотрим 2 примера беспроводного управления реле.

Давайте рассмотрим 2 примера беспроводного управления реле.

Управление реле с помощью Bluetooth HC-06.

Данный пример рассматривать подробно не будем, так как по данной теме у меня написана отельная статья и снято видео: Bluetooth HC-06 и ардуино. Приложение андроид для управления Реле с телефона.

Приложение для телефона получилось достаточно простое.

Интерфейс программы app inventor 2

Схема подключения реле KY-019 и Bluetooth HC-06 к Arduino.

Схема подключения реле KY-019 и Bluetooth HC-06 к Arduino.

Скетч управления реле средствами bluetooth.

int LED = 5;
int val = 0;
void setup() {
  Serial.begin(9600); //Инициирует последовательное 
  //соединение и задает скорость передачи данных в бит/c (бод)
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop() {
  if (Serial.available() > 0) // пришли данные
  {
    val = Serial.read();
    if (val=='1')         // если 1 то включаем светодиод
     {
      digitalWrite(LED,LOW);
      Serial.print("Rele On - "); // вывод данных
      Serial.println("Portal-Pk.ru"); // вывод данных с переносом строки
     }
    if (val=='0')         // если 0 то выключаем светодиод
      {
        digitalWrite(LED,HIGH);
        Serial.print("Rele Off - "); // вывод данных
        Serial.println("Portal-Pk.ru");  // вывод данных с переносом строки
      }
  }
}

В итоге получаем вот такой результат, управление светом с помощью реле и bluetooth.

 Arduino из урока: Bluetooth модуль HC-06. Управление Arduino с телефона

Wi-Fi управление реле с помощью приложения для телефона.

В данном примере рассмотрим как можно с помощью Wi-Fi управление реле. В этом нам поможет приложение, которое можно сделать без знаний программирования в MIT App Inventor. Подробное описание проекта читайте тут Wi-Fi реле на NodeMCU. Управление Android приложением.

Сделаем дизайн приложения в MIT App Inventor

Программа управления реле в MIT App Inventor получится следующая.

Набросаем код блоками

Схема подключения реле KY-019 к NodeMCU.

Схема подключения реле KY-019 к NodeMCU.

Код и приложение можно скачать внизу статьи в разделе «Файлы для скачивания».

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

Вывод.

По рассмотренным примерам вывод просится сам по себе. Реле можно использовать в различных Arduino проектах и с разным оборудованием. И управлять можно не только освещением, как было рассмотрено в примерах, но и управлять другой нагрузкой. Например, удаленное включать чайник, мультиварку и другие бытовые приборы. Самым распространённым модулем беспроводного управления нагрузкой является Sonoff.

Понравился Урок KY-019 модуль одноканального реле. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Модуль фоторезистора KY-018. Подключение к Arduino http://arduino-tex.ru/news/54/modul-fotorezistora-ky-018-podklyuchenie-k-arduino.html Константин Portal-PK 2021-06-05T19:56:06+03:00 Модуль фоторезистора KY-018 знаком по уроку: "Подключение модуля освещенности к Arduino" на моем втором сайте про Arduino. Сегодня в уроке рассмотрим данный модуль и научимся подключать KY-018 к Arduino. А также рассмотрим пример сигнализации с использованием модулей KY-008, KY-004, KY-006 и KY-018.

Описание модуля ky-018.

Описание модуля ky-018.

Модуль фоторезистора Arduino KY-018, используемый для измерения интенсивности света. Он может определить наличие или отсутствие света, а также интенсивность освещения - это связано с тем, что модуль является аналоговым и считывает показание с фоторезистора. Также существуют и цифровые модули освещённости, про них вы можете прочитать в уроке "Подключение модуля освещенности к Arduino".

Технические характеристики модуля освещённости для Arduino.

Технические характеристики модуля освещённости для Arduino.

Этот модуль состоит из фоторезистора и линейного резистора 10кОм . Сопротивление фоторезистора будет уменьшаться при наличии света и увеличиваться при его отсутствии. Выходной сигнал является аналоговым и определяет интенсивность света.

  • Рабочее напряжение - от 3,3 В до 5 В
  • Тип – аналоговый

Схема подключения модуля фоторезистора KY-018 к Arduino.

Подключите линию питания (посередине) и землю (-) к +5 и GND соответственно. Сигнальный контакт (S) подключите к контакту A0 на Arduino. Для определения освещённости будем использовать светодиод, который подключаем к 7 контакту Arduino.

Схема подключения модуля KY-018 к Arduino UNO.

Схема подключения модуля KY-018 к Arduino UNO.

Скетч для модуля освещённости KY-018.

byte sensorPin = A0;
byte ledPin = 3;
// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Полученные значения на аналоговом входе A0 делим на 4 
  //чтобы уложиться в диопозон от 0 до 255
  data = value / 4;
  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
  analogWrite(ledPin, data);
}

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

Сигнализация на Arduino.

Про данный пример я уже рассказывал в уроке про лазерный модуль KY-008.

В данном примере будем использовать модули из набора: 37 in 1 Sensors Kit for Arduino. Набор датчиков и индикаторов для Arduino

Для этого понадобится:

Следующим на очереди рассмотрим использование KY-008 в качестве сигнализации.

Как это все будет работать, фоторезистор будет принимать лазерный луч от нашего модуля KY-008. Пока лазер попадает на KY-018 Фоторезистор, на его выводах будет выдаваться определенное напряжение. Как только что-то или кто-то преградит путь лазера к KY-018, на выводах фоторезистора не будет выдаваться напряжение, после чего зуммер проинформирует, что лазерный луч был пересечен. Сброс сигнализации будет осуществляться с помощью KY-004 Модуля тактовой кнопки.

Схема подключения сигнализации.

Схема подключения сигнализации.

Рассмотрим код, который нужно будет загрузить в Arduino.

#define LASER 6 // задаем имя для Pin лазера
#define SENSOR A0 // фоторезистор 
#define BUTTON 12 // кнопка 
#define BUZZER 10 // звуковой излучатель

int laserThreshold = 100;// значение при котором сробатывае сигнал

void setup() {
  pinMode(LASER, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  Serial.begin(9600);
}
boolean alarmState = false;

void loop() {
  if (! alarmState) {
    delay(500); 
    digitalWrite(LASER, HIGH);
    delay(500);
    unsigned long startTime = millis();
    while (millis() - startTime < 1000) {
      int sensorValue = analogRead(SENSOR);
      Serial.println(sensorValue);
      if (sensorValue > laserThreshold) {
        alarmState = true;
        break;
      }
      delay(10);
    }
    digitalWrite(LASER, LOW);
  }
  else {
    tone(BUZZER, 440);
    if (! digitalRead(BUTTON)) {
      alarmState = false; noTone(BUZZER);
    }
    delay(10);
  }
}

Как видим модуль KY-018 несмотря на свою простоту использования, применим в различных проектах на Arduino. Область применения модуля ограничивается только вашей фантазией.

Понравился Урок Модуль фоторезистора KY-018. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Обзор ESP8266. Знакомство с моделями NodeMCU, WeMos, ESP-01 http://arduino-tex.ru/news/53/obzor-esp8266-znakomstvo-s-modelyami-nodemcu-wemos-esp-01.html Константин Portal-PK 2021-05-31T16:50:23+03:00 Всем, кто увлекается Arduino неоднократно слышал про ESP8266. Что это такое и какие распространение модели отладочных плат (NodeMCU, WeMos, ESP-01) использую в проектах, расскажу в данной статье.

ESP8266 – это микроконтроллер, аналогичный Arduino и оснащенный Wi-Fi. Что позволяет управлять пинами через беспроводную сеть Wi-Fi, а также получать из интернета или локальной сети различные параметры: температуру, влажность, стояние исполнительных механизмов и прочую информацию. Это отлично подходит для реализации домашней автоматизации.

Что можно делать, используя модуль ESP8266?

Что можно делать, используя модуль ESP8266?

  • Отправлять электронную почту;
  • Публиковать твиты;
  • Создать веб-сервер;
  • Отправлять HTTP-запросы;
  • Получать информацию из интернета о погоде, курсе волют, количестве подписчиков на youtube и прочее

На моем сайте вы можете найти уроки и проекты с использованием ESP8266.

Технические характеристики ESP8266:

  • 02.11 b/g/n;
  • встроенный 32-битный MCU с низким энергопотреблением;
  • встроенный 10-битный АЦП;
  • встроенный стек протоколов TCP/IP;
  • встроенный РЧ коммутатор, РЧ трансформатор сопротивлений, LNA, усилитель мощности;
  • встроенные блоки ФАПЧ и управления мощностью;
  • Wi-Fi 2,4 ГГц, поддержка WPA/WPA2;
  • SDIO 2.0, (H) SPI, UART, I2C, I2S, IRDA, PWM, GPIO;
  • STBC, 1x1 MIMO, 2x1 MIMO;
  • потребление в режиме глубокого сна <10 мкА, ток утечки в выключенном режиме < 5 мкА;
  • просыпание и передача пакетов через < 2 мс;
  • выходная мощность +20 дБм в режиме 802.11b;
  • диапазон рабочей температуры: -40 – 125 ºC.

Технические характеристики ESP8266

Сравнивая ESP8266 с другими платами Wi-Fi на рынке – это отличный вариант для большинства проектов «Интернета вещей»! Легко понять, почему он так популярен: он стоит всего несколько долларов и может быть интегрирован в сложные проекты.

Версии ESP8266

ESP8266 выпускается в виде различных отладочных плат (как показано на рисунке ниже). По-моему мнению, ESP-12E NodeMCU в настоящее время является наиболее практичной версией. Но и версии WeMos и ESP-01 также достаточно популярны в проектах, где нужна небольшая плата и не требуется много пинов для подключения.

 ESP-12E NodeMCU в настоящее время является наиболее практичной версией

Распиновка ESP8266.

Распиновка ESP-12E NodeMCU.

Вот краткий обзор распиновки ESP-12E NodeMCU

Распиновка WeMos D1 Mini.

Распиновка WeMos D1 Mini

Распиновка ESP-01.

Распиновка ESP-01

Подробнее распиновку ESP8266 рассмотрим в следующей статье. А также посмотрим, как правильно использовать GPIO отладочных плат.

Программирование ESP8266 с использованием Arduino IDE.

Есть несколько способов запрограммировать ESP8266. Можно использовать Arduino IDE или MicroPython. В следующей статье рассмотрим, как настроить Arduino IDE и загрузить скетч в NodeMCU.

Понравилась статья Обзор ESP8266. Знакомство с моделями NodeMCU, WeMos, ESP-01? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-017 – модуль ртутного датчика наклона. Подключение к Arduino http://arduino-tex.ru/news/52/ky-017-modul-rtutnogo-datchika-naklona.html Константин Portal-PK 2021-05-27T17:07:09+03:00 Модуль ртутного датчика наклона ky-017 состоит из колбы, в которой расположены 2 контакта разной длины и ртутного шарика. При наклоне модуля ртутный шарик перемещается внутри колбы и замыкает или размыкает контакты. Так как данный датчик имеет всего 2 положения, его применение ограничено. Его не получится использовать в качестве датчика наклона фар, да и вибрации в машине будут приводить к непроизвольному перемещению ртути, что приведет к ложным срабатываниям ртутного датчика.

Описание модуля ky-017.

Модуль ky-017 – ртутный датчик определения наклона для Arduino.

Модуль ky-017ртутный датчик определения наклона для Arduino. Он имеет колбу, в которой перемещается небольшой ртутный шарик, замыкающий цепь, когда происходит наклонение модуля.

Внимание! В модуле используется Ртуть. Не разбивайте колбу и не давайте модуль детям!

Технические характеристики модуля наклона для Arduino.

Модуль наклона для Arduino состоит из ртутного переключателя, резистора 680 Ом и светодиода, который загорается при обнаружении наклона. Ртутный шарик размыкает / замыкает цепь при наклоне модуля.

Технические характеристики модуля наклона для Arduino.

Рабочее напряжение: от 3,3 до 5,5 В.

Схема подключения ртутного датчик наклона KY-017 к Arduino.

Подключите линию питания (посередине) и землю (-) к +5 и GND соответственно. Сигнальный контакт (S) необходимо подключить к 3 цифровому контакту на Arduino.

KY-017

Arduino

S

Пин 3

Средний контакт

+ 5В

-

GND

Схема подключения KY-017 к Arduino UNO.

Схема подключения KY-017 к Arduino UNO.

Схема подключения KY-017 к Arduino NANO.

Схема подключения KY-017 к Arduino NANO.

Arduino скетч – включение встроенного светодиода при определении наклона.

Самый простой способ проверить работоспособность датчика наклона –это написать скетч включения встроенного светодиода на плату Arduino. Так как встроенный светодиод подтянут к +5 с помощью резистора при подаче положительного сигнала (наклоне датчика), светодиод выключится, а при горизонтальном положении включится. При подключении внешнего светодиода работать будет наоборот.

int led_pin = 13; // назначение пина для светодиода
int switch_pin = 3; /// назначение пина для датчика
int val; // переменная для хранения положения
void setup()
{
  pinMode(led_pin, OUTPUT); // пин светодиода работает как выход
  pinMode(switch_pin, INPUT); // пин датчика работает как вход
}
void loop()
{
  val = digitalRead(switch_pin); // чтение значения с датчика
  if(val == HIGH)// когда с датчика появляется высокий уровень
  {
    digitalWrite(led_pin, HIGH); // встроеный led выкл.
  }
  else
  {
    digitalWrite(led_pin, LOW); // встроеный led вкл.
  }
}

Второй пример. При изменении наклона KY-017 меняем цвет модуля KY-011.

Чтобы сделать осуществимый в жизни пример, необходимо дополнительно подключить двуцветный светодиод в виде модуля KY-011. Данный пример сигнализирует красным цветом при наклоне модуля и зеленым, если модуль находится в горизонтальном положении.

Схема подключения модулей KY-017, KY-011 к Arduino UNO.

Схема подключения модулей KY-017, KY-011 к Arduino UNO.

Схема подключения модулей KY-017, KY-011 к Arduino NANO.

Схема подключения модулей KY-017, KY-011 к Arduino NANO.Для подключения модуля KY-011 нужно дополнительно установить 2 резистора на 220 Ом.

Пример кода для Arduino, изменяем цвет по событию (наклон модуля KY-017).

int interrupterPin = 3; // назначение пина для датчика
int redpin = 4; //pin red LED
int greenpin = 5;//pin green LED
void setup ()
{
  pinMode(redpin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode (interrupterPin, INPUT) ; // пин датчика работает как вход
}
void loop ()
{
  if (digitalRead (interrupterPin)) // когда с датчика появляется высокий уровень, красный светодиод загорается
  {
    digitalWrite(redpin, HIGH);
    digitalWrite(greenpin, LOW);
  }
  else                            // Иначе зеленый светодиод загорается
  {
    digitalWrite(greenpin, HIGH);
    digitalWrite(redpin, LOW);
  }
}

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

При изменении наклона KY-017 меняем цвет модуля KY-011.

Вывод по ртутному датчику наклона.

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

Понравился Урок KY-017 – модуль ртутного датчика наклона. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-016 - Модуль RGB светодиода 5 мм. Подключение к Arduino. http://arduino-tex.ru/news/51/ky-016-modul-rgb-svetodioda-5-mm-podklyuchenie-k-arduino.html Константин Portal-PK 2021-05-21T08:05:41+03:00 Светодиоды широко используются в проектах на Arduino. Сегодня рассмотрим модуль KY-016, которой оснащен RGB светодиодам 5 мм. В отличие от модуля «KY-009 RGB светодиода (SMD)», данный модуль оснащен резисторами и его можно подключать напрямую к Arduino, без дополнительной обвязки. Схема подключения и код аналогичные с модулем KY-009.

Описание модуля KY-016 - rgb led Arduino.

Описание модуля KY-016 - rgb led Arduino.

KY-016 - rgb led Arduino полноцветный 5-миллиметровый светодиод RGB, разные цвета и оттенки могут быть получены путем смешивания трех основных цветов.

Технические характеристики rgb модуля Arduino.

Технические характеристики rgb модуля Arduino.

Этот rgb модуль Arduino состоит из 5- миллиметрового RGB-светодиода и трех токоограничивающих резисторов на 150 Ом, для предотвращения перегорания. Регулировка сигнала ШИМ на каждом пине модуля приведет к изменению цвета светодиода.

Рабочее напряжение

Светодиодный режим управления

Общий катод

Диаметр светодиода

5 мм

Размер модуля

15 мм x 19 мм

Схема подключения rgb Arduino KY-016.

Подключение rgb светодиода к Arduino следующим оброзом:красный контакт (R) на KY-016 к контакту 9 на Arduino. Синий (B) к контакту 11, зеленый (G) к контакту 10 и земля (-) к GND. Обратите внимание, что вам не нужно использовать ограничивающие резисторы, поскольку они уже установлены на плату.

Схема подключения rgb Arduino KY-016.

Контакты:

  • I – общий провод, подключается к GND.

На эти контакты подается питание положительной полярности:

  • R – красный,
  • G – зеленый,
  • B – синий.

Схема подключения KY-016 к Arduino UNO.

Схема подключения KY-016 к Arduino UNO.

Схема подключения KY-016 к Arduino NANO.

Схема подключения KY-016 к Arduino NANO.

Arduino rgb скетч.

Следующий пример Arduino rgb скетч будет циклически переключаться между различными цветами, изменяя значение ШИМ для каждого из трех основных цветов.

int redpin = 9; //pin red LED
int bluepin =10; //pin blue LED
int greenpin = 11;//pin green LED
int val;
void setup() {
  pinMode(redpin, OUTPUT);
  pinMode(bluepin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  Serial.begin(9600);
}
void loop() 
{
  for(val = 255; val > 0; val--)
  {
    analogWrite(redpin, val);  //PWM red
    analogWrite(bluepin, 255 - val); //PWM blue
    analogWrite(greenpin, 128 - val); //PWM green
    Serial.println(val); //print
    delay(5); 
  }
  for(val = 0; val < 255; val++)
  {
    analogWrite(redpin, val);
    analogWrite(bluepin, 255 - val);
    analogWrite(greenpin, 128 - val);
    Serial.println(val);
    delay(5); 
  }
}

Второй вариант кода позволяет плавно изменять цвет из одного оттенка к другому и так по кругу.

#define R_PIN 9 //pin red LED
#define G_PIN 10 //pin blue LED
#define B_PIN 11 //pin green LED
void setup() {
  pinMode(R_PIN, OUTPUT);
  pinMode(G_PIN, OUTPUT);
  pinMode(B_PIN, OUTPUT);
}
void loop() {
  // плавно проходимся по всем цветам
  static int counter = 0;
  counter += 10;
  colorWheel(counter);
  delay(100);
  if (counter > 1530)
    counter = 0;
}
// включает цвет по цветовому колесу, принимает 0-1530
void colorWheel(int color) {
  byte _r, _g, _b;
  if (color <= 255) {                       // красный макс, зелёный растёт
    _r = 255;
    _g = color;
    _b = 0;
  }
  else if (color > 255 && color <= 510) {   // зелёный макс, падает красный
    _r = 510 - color;
    _g = 255;
    _b = 0;
  }
  else if (color > 510 && color <= 765) {   // зелёный макс, растёт синий
    _r = 0;
    _g = 255;
    _b = color - 510;
  }
  else if (color > 765 && color <= 1020) {  // синий макс, падает зелёный
    _r = 0;
    _g = 1020 - color;
    _b = 255;
  }
  else if (color > 1020 && color <= 1275) {   // синий макс, растёт красный
    _r = color - 1020;
    _g = 0;
    _b = 255;
  }
  else if (color > 1275 && color <= 1530) { // красный макс, падает синий
    _r = 255;
    _g = 0;
    _b = 1530 - color;
  }
  analogWrite(R_PIN, 255 - _r);
  analogWrite(G_PIN, 255 - _g);
  analogWrite(B_PIN, 255 - _b);
}

Код не оптимальный, но для понимания этого достаточно. Кроме этого, для облегчения работы с RGB светодиодами также есть библиотеки, например: RGBLed Arduino library.

Использование библиотеки RGBLed Arduino library для работы с модулем KY-016.

Скачать библиотеку RGBLed можно на github или внизу статьи, в разделе «файлы для скачивания»

Заходим в Arduino IDE и выбираем в меню: "Скетч –> Подключить библиотеку –> Добавить .ZIP библиотеку…"

Заходим в Arduino IDE и выбираем в меню

Выбираем скаченный архив RGBLed-master.zip и нажимаем кнопку «Открыть». После установки вы увидите надпись, что библиотека успешно добавлена.

Использование библиотеки RGBLed Arduino library для работы с модулем KY-016.

Для начала работы с библиотекой RGBLed ее нужно подключить.

#include <RGBLed.h>

Затем создать объект для подключения, указав пины подключения светодиода к Arduino.

RGBLed led(RED_PIN, GREEN_PIN, BLUE_PIN, RGBLed::COMMON_ANODE or RGBLed::COMMON_CATHODE);

В дальнейшем мы можем, в основном цикле loop(), оперировать цветом светодиода, для этого в библиотеке есть функции:

  • Установить цвет
led.setColor(RGBLed::RED);
// или
led.setColor(255, 0, 0);
  • Выключить свет
led.off();
  • Установить яркость
led.brightness(RGBLed::RED, 50); // 50% brightness
// или
led.brightness(255, 0, 0, 50); // 50% brightness

Для того чтобы загорелся красный светодиод на 100 мс, достаточно в коде добавить строчку:

led.flash(RGBLed::RED, 100); // Interval 100ms
// или
led.flash(255, 0, 0, 100); // Interval 100ms

Также в библиотеки есть палитра цветов.

RED
GREEN
BLUE
MAGENTA
CYAN
YELLOW
WHITE

С библиотекой идут примеры использования. Например Вспышка:

#include <RGBLed.h>

RGBLed led(9, 10, 11, RGBLed::COMMON_CATHODE);

void setup() { }

void loop() {
    
    // Flash red color, interval 100ms
    led.flash(RGBLed::RED, 100);

    // Flash green color, interval 100ms
    led.flash(0, 255, 0, 100);

    // Flash red color, during 250ms with interval 100ms
    led.flash(RGBLed::RED, 250, 100);

    // Flash green color, during 250ms with interval 100ms
    led.flash(0, 255, 0, 250, 100);
}

Как видим из кода, у нас будем c, про которую есть у меня на сайт отдельный урок: Полицейская мигалка своими руками из светодиодов на Arduino

мигать светодиод красным и синим цветами, на подобии полицейской мигалки

Вывод

Модуль KY-016 показал себя как достаточно простой в использовании, и применить его можно в различных проектах на Arduino. И главный плюс, по сравнению с модуля KY-009, — это распаянные резисторы.

Понравился Урок KY-016 - Модуль RGB светодиода 5 мм. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 8. Slider Nextion - управление яркостью подсветки (обзор) http://arduino-tex.ru/news/50/urok-8-slider-nextion---upravlenie-yarkostyu-podsvetki-obzor.html Константин Portal-PK 2021-05-20T15:45:14+03:00 Урок 8. Slider Nextion - управление яркостью подсветки (обзор)

Что понадобиться для урока:

Подписчики на сайте boosty или YouTube могут посмотреть полный вариант урока, скачать исходные файлы в формате .HMI, код для Arduino.

Предыдущие уроки про дисплея Nextion:

Урок 1. Скачать и установить Arduino IDE, Nextion Editor
Урок 2. Подготовка графики для дисплея Nextion в Inkscape
Урок 3. Кнопка Dual state Nextion Включаем выключаем подсветку.
Урок 4. Button Nextion Управление яркостью, переключение режимов
Урок 5. Передаем информацию с Arduino на дисплей Nextion
Урок 6. Клавиатура дисплей Nextion. Timer, перенаправление на страницы.
Урок 7. Управление яркостью дисплея Nextion Страница ожидания

Внимание! Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI, код для Arduino.

Понравился Урок Slider Nextion - управление яркостью подсветки? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-015 - Модуль с датчиком температуры и влажности DHT11. Подключение к Arduino. http://arduino-tex.ru/news/49/ky-015-modul-s-datchikom-temperatury-i-vlazhnosti-dht11.html Константин Portal-PK 2021-05-13T09:07:59+03:00 Для Arduino существует большое количество датчиков и модулей измерения температуры. Модули KY-001, KY-013 мы уже рассмотрели в предыдущих уроках. Сегодня поговорим о модуле KY-015, который оснащен датчиком DHT11, он может измерять не только температуру, но и влажность воздуха.

модуле KY-015, который оснащен датчиком DHT11

Описание модуля KY-015 с датчиком DHT11.

Модуль датчика температуры и влажности KY-015 обеспечен цифровым последовательным интерфейсом для измерения влажности и температуры и передачи показаний Arduino.

Технические характеристики KY-015.

Описание модуля KY-015 с датчиком DHT11

Модуль KY-015 состоит из цифрового датчика влажности и температуры DHT11 и резистора 1 кОм. DHT11 использует внутренний термистор и емкостной датчик влажности для определения условий окружающей среды, а внутренний чип отвечает за преобразование показаний в последовательный цифровой сигнал.

Рабочее напряжение

От 3,3 до 5,5 В

Диапазон измерения влажности

От 20% до 90%

Точность измерения влажности

± 5%

Разрешение измерения влажности

1%

Диапазон измерения температуры

От 0 ºC до 50 ºC

Точность измерения температуры

± 2 ºC

Разрешение измерения температуры

1 ºC

Дальность передачи сигнала

20 м

модуля KY-015 с датчиком DHT11 к Arduino UNO

Схема подключения модуля KY-015 с датчиком DHT11 к Arduino UNO.

Схема подключения модуля KY-015 с датчиком DHT11 к Arduino UNO.

Схема подключения модуля KY-015 с датчиком DHT11 к Arduino NANO.

Схема подключения модуля KY-015 с датчиком DHT11 к Arduino NANO.

Подключаем линию питания (посередине) и землю (-) к +5 и GND соответственно. Сигнал (S) подключаем к контакту 2 на Arduino.

Пример скетча KY-015 для Arduino без использования библиотек.

int DHpin = 2; // pin  ввода/вывода
byte dat[5];   

byte read_data()
{
  byte i = 0;
  byte result = 0;
  for (i = 0; i < 8; i++) {
      while (digitalRead(DHpin) == LOW); // ждать 50 микрсек. 
      delayMicroseconds(30); //Продолжительность высокого уровня оценивается для определения того, являются ли данные " 0 " или "1"
      if (digitalRead(DHpin) == HIGH)
        result |= (1 << (8 - i)); //Высоко в начале, низко в посте
    while (digitalRead(DHpin) == HIGH); //Данные '1', ожидание следующего бита приема
    }
  return result;
}

void start_test()
{
  digitalWrite(DHpin, LOW); //Потяните вниз шину, чтобы отправить сигнал запуска
  delay(30); //Задержка превышает 30 мс, так что DHT 11 может обнаружить сигнал запуска
  digitalWrite(DHpin, HIGH);
  delayMicroseconds(40); //Дождитесь ответа DHT11
  pinMode(DHpin, INPUT);
  while(digitalRead(DHpin) == HIGH);
  delayMicroseconds(80); // DHT11 реагирует, потянув шину низко на 80 микрсек.
  
  if(digitalRead(DHpin) == LOW)
    delayMicroseconds(80); //DHT11 подтянут 80 микрсек, чтобы начать отправку данных;
  for(int i = 0; i < 5; i++) //При получении данных о температуре и влажности контрольные биты не учитываются;
    dat[i] = read_data();
  pinMode(DHpin, OUTPUT);
  digitalWrite(DHpin, HIGH); //После завершения отпускаем шины данных, ожидая, когда хост начнет следующий сигнал
}

void setup()
{
  Serial.begin(9600);
  pinMode(DHpin, OUTPUT);
}

void loop()
{
  start_test();
  Serial.print("Humdity = ");
  Serial.print(dat[0], DEC); //Отображает целочисленные биты влажности;
  Serial.print('.');
  Serial.print(dat[1], DEC); //Отображает десятичные знаки влажности;
  Serial.println('%');
  Serial.print("Temperature = ");
  Serial.print(dat[2], DEC); //Отображает целочисленные биты температуры;
  Serial.print('.');
  Serial.print(dat[3], DEC); //Отображает десятичные знаки температуры;
  Serial.println('C');

  byte checksum = dat[0] + dat[1] + dat[2] + dat[3];
  if (dat[4] != checksum) 
    Serial.println("-- Checksum Error!");
  else
    Serial.println("-- OK");
 
  delay(1000);
}

Данный пример кода можно загрузить в Arduino и получать показания с датчика DHT11. Предварительно ничего настраивать и устанавливать не нужно. В мониторе порта мы увидим значения температуры и влажности с датчика DHT11.

В мониторе порта мы увидим значения температуры и влажности с датчика DHT11.

Пример кода с использованием библиотеки «DHT sensor library».

Для данного примера нам понадобиться библиотека «DHT sensor library». Установить ее можно через менеджер библиотек, для этого переходим «Скетч -> Подключить библиотеку -> Управлять библиотеками…».

понадобиться библиотека «DHT sensor library»

В строке поиска указываем «DHT11» и устанавливаем библиотеку «DHT sensor library». Для этого нажимаем на кнопку «Установка».

В строке поиска указываем «DHT11» и устанавливаем библиотеку «DHT sensor library»

Для работы библиотеки «DHT sensor library» нужна библиотека «Adafruit_Sensor», которую можно скачать с сайта github или внизу урока, в разделе «Файлы для скачивания».

Для работы библиотеки «DHT sensor library» нужна библиотека «Adafruit_Sensor»

Скачать библиотеку с github можно выбрав «Code -> Download ZIP».Скачать библиотеку с github можно выбрав


После чего в Arduino IDE выбираем «Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку…».

После чего в Arduino IDE выбираем Скетч - Подключить библиотеку - Добавить .ZIP библиотеку

Выбираем скаченный архив с библиотекой.

Выбираем скаченный архив с библиотекой.

С библиотекой устанавливается 2 примера. Один из которых мы будем использовать в нашем уроке. Для этого переходим в меню «Файл -> Примеры -> DHT sensor library -> DHTtest».

Файл - Примеры - DHT sensor library - DHTtest

В данном примере нам нужно указать пин подключения модуля. Также раскомментировать строчку подключения нашего датчика.

#include "DHT.h"
#define DHTPIN 2     // контакт, к которому подключаемся
// и расскомментировать строчку датчика:
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
// инициализируйте датчик DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  dht.begin();
}
void loop() {
  delay(2000);
  // считывание данных температуры и влажности
  float h = dht.readHumidity();
  // температура в Цельсиях:
  float t = dht.readTemperature();
  // температура в Фаренгейте:
  float f = dht.readTemperature(true);
  // проверяем, корректно ли прочитались данные,
  // и если нет, то пробуем еще раз:
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    // "Не данных с DHT!"
    return;
  }
  // рассчит теплового индекса;
  float hi = dht.computeHeatIndex(f, h);
  Serial.print("Humidity: ");  //  "Влажность: "
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");  //  "Температура: "
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");  //  "Тепловой индекс: "
  Serial.print(hi);
  Serial.println(" *F");
}

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

В данном примере нам нужно указать пин подключения модуля.

Загружаем пример и смотрим в мониторе порта.

Загружаем пример и смотрим в мониторе порта.

Как видим все работает отлично и показания выводятся. При этом значения достаточно стабильные. Точность показаний я не стал проверять, как делал с модулем KY-013. Это вы можете сделать самостоятельно.

Вывод про модуль KY-015

Вывод про модуль KY-015.

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

Понравился Урок KY-015 - Модуль с датчиком температуры и влажности DHT11? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-013 – модуль аналогового датчика температуры. Подключение к Arduino. http://arduino-tex.ru/news/48/ky-013-modul-analogovogo-datchika-temperatury.html Константин Portal-PK 2021-05-08T12:06:38+03:00 Продолжаем изучать модули из набора «37 in 1 Sensors Kit for Arduino» и сегодня рассмотрим модуль KY-013аналоговый датчик температуры. Разберем, как его подключить к Arduino, выведем показание температуры в монитор порта. А также рассмотрим, с какими проблемами можно столкнуться при работе с данным модулем.

модуль KY-013 – аналоговый датчик температуры

Неправильная маркировка и расположение выходов модуля KY-013.

У модуля KY-013 есть несколько вариантов неправильной маркировки выводов подключения.

Первый вариант это перепутанные местами сигнальный вывод (S) и GND. Если при подключении у вас не выводит показания температуры, то у вашего модуля аналогичная проблема. Меняем местами подключения данных контактов.

Первый вариант это перепутанные местами сигнальный вывод (S) и GND.

Второй вариант связан с выводом температуры в неправленом направлении. То есть если вы нагреваете датчик, а температура понижается. Вот что вы увидите в мониторе порта.

То есть если вы нагреваете датчик, а температура понижается.

В таком случае меняем местами подключения питания 5v и GND. И показания будут выводиться правильно.

Описание модуля KY-013 – аналоговый датчик температуры.

Описание модуля KY-013 – аналоговый датчик температуры.

Модуль аналогового датчика температуры KY-013 для Arduino измеряет температуру окружающей среды за счет изменения сопротивления термистора. Данный модуль можно подключать к различным микроконтроллерам (Arduino, ESP32, ESP8266, stm32 и пр.) для измерения температуры окружающей среды.

Технические характеристики KY-013

Технические характеристики KY-013:

  • Рабочее напряжение -5В;
  • Диапазон измерения температуры - от -55 до 125 ° C;
  • Точность измерения - ± 0,5 ° С;

Модуль аналогового датчика температуры KY-013 состоит из термистора NTC и резистора 10 кОм. Сопротивление термистора зависит от температуры окружающей среды, мы воспользуемся уравнением Стейнхарта – Харта, чтобы получить точную температуру термистора.

Схема подключения KY-013 аналогового датчика температуры к Arduino UNO.

Схема подключения KY-013 аналогового датчика температуры к Arduino UNO.

Схема подключения KY-013 аналогового датчика температуры к Arduino NANO.

Схема подключения KY-013 аналогового датчика температуры к Arduino NANO.

Подключаем линию питания платы (посередине) и землю (-) к 5 В и GND соответственно. Затем сигнал (S) к контакту A0 на Arduino.

Внимание! Не забывайте про вероятность, что на некоторых платах нанесена неправильная разметка контактов, о чем я рассказывал в начале урока.

Пример кода Arduino для получения значений температуры с датчика KY-013.

В следующем скетче Arduino будет вычисляться температура термистора с использованием уравнения Стейнхарта-Харта. Код вернет температуру в градусах Цельсия.

int ThermistorPin = A0;
int Vo;
float R1 = 10000; // значение R1 на модуле
float logR2, R2, T;
float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; //коэффициенты Штейнхарта-Харта для термистора

void setup() {
  Serial.begin(9600);
}

void loop() {
  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0); //вычислите сопротивление на термисторе
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); // температура в Кельвине
  T = T - 273.15; //преобразование Кельвина в Цельсия

  Serial.print("Temperature: "); 
  Serial.print(T);
  Serial.println(" C"); 

  delay(500);
}

Коэффициенты применимы только к платам с термисторами 10 кОм, некоторые редкие платы имеют термисторы на 100 кОм и требуют других коэффициентов.

Коэффициенты применимы только к платам с термисторами 10 кОм

Проверяем точность аналогового датчика температуры с помощь модуля KY-001.

Проверяем точность аналогового датчика температуры с помощь модуля KY-001

Для того чтобы определить точность измерения модуля KY-013 - аналогового датчика температуры, подключим модуль KY-001, который оснащён цифровым датчиком DS18B20. Урок по подключению модуля KY-001 смотрите тут: KY-001 модуль температуры на базе DS18B20. Подключение к Arduino.

Схема подключения модулей KY-001, KY-013 к Arduino UNO.

Схема подключения модулей KY-001, KY-013 к Arduino UNO.

Схема подключения модулей KY-001, KY-013 к Arduino NANO.

Схема подключения модулей KY-001, KY-013 к Arduino NANO.

Код Arduino получения показаний с модулей KY-001, KY-013.

#include <OneWire.h>
OneWire ds(2);

int ThermistorPin = A0;
int Vo;
float R1 = 10000; // значение R1 на модуле
float logR2, R2, T;
float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; //коэффициенты Штейнхарта-Харта для термистора

void setup() {
  Serial.begin(9600);
}

void loop() {
  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0); //вычислите сопротивление на термисторе
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); // температура в Кельвине
  T = T - 273.15; //преобразование Кельвина в Цельсия

  byte i;
  byte data[12];
  byte addr[8];
  float celsius;
  // поиск датчика
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1); // измерение температуры
  delay(1000);
  ds.reset();
  ds.select(addr);
  ds.write(0xBE); // начало чтения измеренной температуры
  //показания температуры из внутренней памяти датчика
  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  int16_t raw = (data[1] << 8) | data[0];
  // датчик может быть настроен на разную точность, выясняем её
  byte cfg = (data[4] & 0x60);
  if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
  else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
  else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
  // преобразование показаний в градусы Цельсия
  celsius = (float)raw / 16.0;
  
  
  Serial.print("KY-013 = ");
  Serial.print(T);
  Serial.println(" C");
  Serial.print("KY-001 = ");
  Serial.print(celsius);
  Serial.println(" C");
  Serial.println("------");

  delay(500);
}

В данном скетче считываем показания температуры с двух модулей KY-001, KY-013 и выводим полученные значения в монитор порта.

 показания температуры с двух модулей KY-001, KY-013 и выводим полученные значения в монитор порта.

Как видим из показаний, температура с модуля KY-013 больше почти на 1 градус цельсия, чем с модуля KY-001. Хотя производитель гарантирует точность измерения ± 0,5 ° С.

Вывод по модулю KY-013.

модуль KY-013 - аналоговый датчик температуры

Вывод про модуль KY-013 - аналоговый датчик температуры можно сделать следующий. Использовать его можно в проектах не требовательных к точности измерений температуры, с возможными отклонениями в показаниях ± 1 ° С. Это связано с значительной погрешностью измерения данного модуля.

Понравился Урок KY-013 – модуль аналогового датчика температуры? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-012 - активный звуковой модуль (зуммер). Подключение к Arduino. http://arduino-tex.ru/news/47/ky-012---aktivnyi-zvukovoi-modul-zummer-podklyuchenie-k.html Константин Portal-PK 2021-05-04T19:39:24+03:00 В данном Arduino уроке речь пойдет об активном звуковом модуле - KY-012. Данный модуль отличается от модуля KY-006 - пассивного зуммера тем, что для работы не нужно генерировать импульсы. Достаточно подать питание от 3.5 до 5,5 вольт. Что приведет к воспроизведению звукового сигнала. Но в этом и заключается минус данного модуля. Мы можем изменять интервалы звукового уведомления, но не можем менять тональность звучания.

активном звуковом модуле - KY-012

Описание модуля KY-012 (зуммер).

Модуль оснащён активным звуковым модулем (зуммером) и издает звуковое уведомление при подачи питания 5 В (3,3 В). Модуль можно использовать как в проектах с различными микроконтроллерами (Arduino, ESP32, ESP8266, stm32 и пр). Так и самостоятельно, например с тактовой кнопкой или с оптическим выключателем.

Описание модуля KY-012 (зуммер)

Технические характеристики KY-012.

Модуль активного зуммера KY-012 состоит из активного пьезоэлектрического зуммера, который генерирует звук, с частотой примерно 2,5 кГц, при подаче питания.

Рабочее напряжение

3,5 В ~ 5,5 В

Максимальный ток

30 мА / 5 В постоянного тока

Частота резонанса

2500 Гц ± 300 Гц

Минимальный звук на выходе

85 дБ

Рабочая температура

-20 ° C ~ 70 ° C [-4 ° F ~ 158 ° F]

Габаритные размеры

18,5 x 15 мм

Для подключения модуля, сигнальный выход (S) подключаем к контакту 8 на Arduino, а землю (-) к GND. Имейте в виду, что некоторые платы имеют неправильную маркировку, попробуйте перевернуть провода, если вы не слышите звука после загрузки скетча.

Схема подключения KY-012 активного зуммера к Arduino UNO.Схема подключения KY-012 активного зуммера к Arduino UNO.

Схема подключения KY-012 активного зуммера к Arduino NANO.

Схема подключения KY-012 активного зуммера к Arduino NANO.

Пример кода Arduino для подачи звукового сигнала с помощью модуля KY-012.

Схему подключения модуля KY-012 к Arduino будем использовать ту, которую рассмотрели выше.

int buzzerPin = 8;

void setup ()
{
  pinMode (buzzerPin, OUTPUT);
}

void loop ()
{
  digitalWrite (buzzerPin, HIGH);
  delay (500);
  digitalWrite (buzzerPin, LOW);
  delay (500);
}

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

Пример использования KY-012 с модулем KY-010 – оптического прерывания.

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

Пример использования KY-012 с модулем KY-010 – оптического прерывания.

Схема подключения модулей KY-012, KY-010 к Arduino UNO.

Схема подключения модулей KY-012, KY-010 к Arduino UNO.

Схема подключения модулей KY-012, KY-010 к Arduino NANO.

Схема подключения модулей KY-012, KY-010 к Arduino NANO.

Пример кода для модулей KY-012, KY-010 подключенных к Arduino.

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

int buzzerPin = 8;
int photoInterrupterPin = 10; // назначение пина для фотопрерывателя
int value ;                   // переменная для хранения положения
void setup ()
{
  pinMode (buzzerPin, OUTPUT);
  pinMode (photoInterrupterPin, INPUT) ; // пин датчика работает как вход
}

void loop ()
{
  value = digitalRead (photoInterrupterPin) ;// чтение значения с фотопрерывателя
  if (value == HIGH) // когда с фотопрерывателя появляется высокий уровень
  {
    digitalWrite (buzzerPin, LOW);
  }
  else
  {
    digitalWrite (buzzerPin, HIGH);
    delay (500);
    digitalWrite (buzzerPin, LOW);
    delay (500);

  }
}

Вместо модуля KY-010 – оптического прерывания, можно использовать конечный выключатель, тактовую кнопку, датчик расстояния, или фоторезистор с лазерным модулем, как мы уже делали в уроке:KY-008 Лазерный модуль. Подключение к Arduino.

Вместо модуля KY-010 – оптического прерывания, можно использовать конечный выключатель, тактовую кнопку, датчик расстояния

Вывод по модулю KY-012.

В связи с тем что данный модуль достаточно просто подключить, спектр его применения достаточно большой. Использовать его можно в любом Arduino проекте, где нужно звуковое уведомление или сигнализация. В домофонах также используется подобный зуммер, для подачи звукового уведомления, пока дверь открыта. Как вы будете использовать KY-012, зависит только от вашей фантазии и потребностей.

Понравился Урок KY-012 - активный звуковой модуль (зуммер)? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 7. Управление яркостью дисплея Nextion. Страница ожидания. http://arduino-tex.ru/news/46/urok-7-upravlenie-yarkostyu-displeya-nextion-stranica.html Константин Portal-PK 2021-04-20T14:32:56+03:00 Сегодня последний урок по дисплею Nextion, в котором рассмотрим, как можно изменять яркость дисплея для экономии электроэнергии. А также выведем текущее состояние подсветки при переходе на страницу управления. Кроме этого, разберём пару полезных моментов в управлении дисплеем Nextion. Для подписчиков на boosty и YouTube будут еще бонусные уроки, поэтому не забудьте подписаться.

Что понадобиться для урока:

Сегодня в уроке Nextion:

Создаем страницу ожидания.

На страницу «Sleep0», добавим элемент вывода изображения p0.

На страницу «Sleep0», добавим элемент вывода изображения p0.

Добавим картинку в поле изображения. Картинка у меня заранее подготовлена с разрешением по размеру экрана.

Добавим картинку в поле изображения. Картинка у меня заранее подготовлена с разрешением по размеру экрана

Добавляем следующий невидимый элемент «Hotspot», который определяет нажатие на экран.

Добавляем следующий невидимый элемент «Hotspot», который определяет нажатие на экран

Растягиваем его на весь экран Nextion.

Растягиваем его на весь экран Nextion.

Затем настраиваем данному элементу событие, при нажатии - переход на страницу «lock».

Затем настраиваем данному элементу событие, при нажатии - переход на страницу «lock».

Управление яркостью дисплея Nextion.

Для того чтобы установить яркость дисплея есть специальная команда «dim». Для страницы ожидания устанавливаем яркость в 5 % «dim=5».

устанавливаем яркость в 5 % «dim=5».

Чтобы при переходе на страницу клавиатуры яркость у нас снова стала 100%, добавляем аналогичную команду. Но уже устанавливаем значение 100.

Но уже устанавливаем значение 100.

Настраиваем время ожидания до переключения в режим экономии энергии.

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

дисплей будет переходить в режим ожидания

И настроем таймер на 20 сек. Можно установить другое значения по вашему усмотрению.

таймер на 20 сек

А также установим события перехода в энергосберегающий режим (режим ожидания), что позволит при завершении времени перенаправить на страницу «sleep0». Но чтобы не перенаправляло раньше того, как мы введем пароль или сделаем другие полезные действия, добавляем к каждой кнопке на экране сброс счётчика на 20 сек. Это позволит, при любом действии, дать нам еще 20 сек. на дальнейшие действия. Если ничего не делаем 20 сек., то будет перенаправление на страницу ожидания.

ничего не делаем 20 сек., то будет перенаправление на страницу ожидания

По аналогии добавим таймер на страницу «led».

По аналогии добавим таймер на страницу «led».

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

перенаправит в любой момент на страницу ожидания.

Подготавливаем дисплея для определения параметров страницы перехода.

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

добавим отправку команды на Arduino

А также удалим все надписи из полей: вывода режима и уровня яркости. И уберем с красной кнопки активный статус, который мы делали в уроке:Урок 5. Передаем информацию с Arduino на дисплей Nextion.

вывода режима и уровня яркости

Все готово, сейчас приступим к коду для Arduino.

Arduino код хранения цвета подсветки по умолчанию.

Для того чтобы Arduino понимала, какой цвет по умолчанию мы выбрали последним, добавим переменную.

добавим переменную.

Затем, к обработчикам события изменения цвета по умолчанию, добавим присваивание номера цвета от 1 до 6. Сейчас при изменении цвета мы будем знать, какой цвет установлен по умолчанию. Можно воспользоваться функциями библиотеки и возвращать цвет, но тут уже дело вкуса. Мне кажется, что данный вариант проще.

Затем, к обработчикам события изменения цвета

Код Arduino для страницы перехода, отправляем параметры на дисплей.

Для дисплея мы сделали отправление команды при переходе на экран «led». Сейчас сделаем вывод информации при получении данной команды от дисплея.

Код Arduino для страницы перехода, отправляем параметры на дисплей.

Тут мы выведем название режима. Состояние включена или нет подсветка и уровень яркости. Данные параметры рассматривали в предыдущем уроке: Урок 5. Передаем информацию с Arduino на дисплей Nextion.

Тут мы выведем название режима.

Следующее условие определяет, какой цвет выбран, и отправляет на дисплей команду, которая активирует соответствующую кнопку.

какой цвет выбран

Вот так просто управлять подсветкой с дисплея Nextion. Данный пример можно дорабатывать и улучшать. Но это вы уже сделаете самостоятельно. Также можете посмотреть бонусные видео по подписке на boosty или YouTube.

Внимание! Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI, код для Arduino.

Понравился Урок Управление яркостью дисплея Nextion. Страница ожидания? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-011 - модуль 2-цветного светодиода. Подключение к Arduino http://arduino-tex.ru/news/45/ky-011--modul-2-cvetnogo-svetodioda-podklyuchenie-k-arduino.html Константин Portal-PK 2021-04-15T16:46:41+03:00 В сегодняшнем уроке поговорим о модуле KY-011, рассмотрим способы его подключении к Arduino и несколько примеров его использования. Модуль KY-011 схож с модулем KY-009 из прошлых уроков. Правда в сегодняшнем случае, у нас под контролем всего два цвета, это красный и зеленый.

Описание модуля KY-011.

KY-011 представляет собой 2-х цветный светодиод, имеющий красный и зеленый цвета свечения. Может применяться для индикации работы какого-либо устройства, либо же для индикации событий. На плате не имеет токоограничивающих резисторов, поэтому использовать данный модуль нужно с резисторами номиналами 220 Ом.

KY-011 представляет собой 2-х цветный светодиод

Технические характеристики KY-011.

Имеет небольшие размеры, всего 25х30х15 мм. Ток питания каждого цвета 10 мА, а питающее напряжение:

  • Для красного канала 1.5 В;
  • Для зеленого канала 2 В;

Распиновка KY-011

Распиновка KY-011:

  • Первый контакт: GND – общий минусовой контакт.
  • Второй контакт: “+красного светодиода.
  • Третий контакт: “+зеленого светодиода.

Схема подключения KY-011 к Arduino UNO.

Схема подключения KY-011 к Arduino UNO.

Схема подключения KY-011 к Arduino NANO.

Схема подключения KY-011 к Arduino NANO.

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

Пример кода для Arduino плавного изменения цвета.

Подключаем модуль KY-011, как на схеме выше.

Подключаем модуль KY-011, как на схеме выше.

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

int redpin = 11; // pin красный 
int greenpin = 10; // pin зеленый 
int val;

void setup() {
  pinMode(redpin, OUTPUT);
  pinMode(greenpin, OUTPUT);
}

void loop() {
  for(val = 255; val > 0; val--) { 
    analogWrite(redpin, val); //red
    analogWrite(greenpin, 255 - val); // green
    delay(15);
  }
  for(val = 0; val < 255; val++) { 
    analogWrite(redpin, val); //red
    analogWrite(greenpin, 255 - val); //green
    delay(15);
  }
}

Схема подключения модулей KY-004, KY-011 к Arduino UNO.

Схема подключения модулей KY-004, KY-011 к Arduino.

Схема подключения модулей KY-004, KY-011 к Arduino NANO.

Схема подключения модулей KY-004, KY-011 к Arduino NANO.

Пример кода для Arduino, изменяем цвет по событию (нажатию кнопки).

Для этого примера нам понадобится модуль тактовой кнопки KY-004, мы будем изменять цвет светодиода при нажатии на кнопку.

int redpin = 11; // pin красный 
int greenpin = 10; // pin зеленый 
int button_pin = 4;     // пин кнопки
void setup() { 
    pinMode(redpin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(greenpin, OUTPUT);
    pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
}
void loop() {
   if (digitalRead(button_pin) == LOW) { // Если кнопка нажата 
      digitalWrite(greenpin, HIGH);// зажигаем светодиод
      digitalWrite(redpin, LOW);// выключаем светодиод
 }
  else { //Иначе
      digitalWrite(redpin, HIGH);// выключаем светодиод
      digitalWrite(greenpin, LOW);// зажигаем светодиод
  }
}

Пока кнопка не нажата, светодиод будет гореть зеленым цветом.

Пока кнопка не нажата, светодиод будет гореть зеленым цветом.

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

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

Также, вместо кнопки мы можем использовать модуль KY-010, который рассматривали в уроке: KY-010 – модуль с оптическим прерывателем. Подключение к Arduino. И использовать данную связку для уведомления закрытия двери, допустим зеленый цвет будет сигнализировать о закрытии двери, а красный о том, что дверь открыта. Либо же для сигнализации о положении механизмов и коленчатых валов.

Вывод

KY-011 универсальный двухцветный модуль, который найдет свое применение во множестве самоделок. Его можно также использовать для уведомления о подключении девайсов, о сигнализации окончания воды в системах автополива. Все зависит от вашей фантазии, не бойтесь экспериментировать.

Понравился Урок KY-011 – модуль 2-цветного светодиода. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 6. Клавиатура дисплей Nextion. Timer, перенаправление на страницы. http://arduino-tex.ru/news/44/klaviatura-displei-nextion-timer-perenapravlenie-na.html Константин Portal-PK 2021-04-12T14:12:06+03:00

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

Что понадобиться для урока:


Сегодня в уроке Nextion:

Создаем клавиатуру на дисплее Nextion.

Для того чтобы создать клавиатуру на дисплее Nextion, добавим кнопки. Для начала 1 ряд из 3 кнопок. Как добавить встроенную всплывающую клавиатуру, рассмотрим в конце статьи.

Для начала 1 ряд из 3 кнопок.

Далее нужно подгрузить картинки клавиатуры. Как сделать картинки для дисплея Nextion, рассказывал в уроке:#2. Подготовка графики для дисплея Nextion в Inkscape. Создание экранов.

Далее нужно подгрузить картинки клавиатуры

Добавляем иконки к кнопкам, и первый ряд будет выглядеть вот так.

Добавляем иконки к кнопкам,

Копируем строчки, чтобы получилась матрицу кнопок 3 на 4.

Копируем строчки, чтобы получилась матрицу кнопок 3 на 4.

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

поменять изображения клавиатуры

В итоге получаем клавиатуру. Я перепутал местами символы «#» и «*». Но в принципе это не критичная ошибка, и подправлю ее дальше.

В итоге получаем клавиатуру.

Добавляем поля ввода пароля. Уведомление о неверном пароле.

Добавляем иконки кнопки разблокировки и поля вывода названия экрана, в виде картинки «p0», текстовое поле «t1» и кнопку «b13» очистки введённого пароля.

 иконки кнопки разблокировки

Оформим текстовое поле, чтобы оно выглядело как поле ввода, для этого в свойстве «style» выбираем параметр «3D_Down».

Оформим текстовое поле

После чего меняем размер шрифта на 40. Как помним из предыдущее урока, id данного шрифта 1. Чтобы текст выводился в виде звёздочек, в поле «pw», выбираем атрибут «Password». Ограничим количество введенных символов, для этого в поле «txt_maxl» укажем значение 4. И для проверки отображения, укажем пароль 1234.

 Чтобы текст выводился в виде звёздочек, в поле «pw»

Вот так выглядит результат.

Вот так выглядит результат.

Для того чтобы проверить работоспособность, нужно поднять станицу «lock» на первую позицию. Чтобы она грузилась при включении дисплея.

нужно поднять станицу «lock» на первую позицию

Нажимаем кнопку «Debug» и видим результат.

Нажимаем кнопку «Debug» и видим результат.

Но клавиатура у нас не работает, да и поле ввода пароль не очищается.

Но клавиатура у нас не работает

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

Для вывода информации о том, что пароль был введен неверный

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

Для вывода информации о том, что пароль был введен неверный Настроим его так, чтобы надпись было не видно.

Настраиваем работу клавиатуры.

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

отправлять соответствующую цифру на текстовое поле

Поменяем местами кнопки «#» и «*».

Поменяем местами кнопки «#» и «*».

По аналогии с клавишей «1», добавим код добавления символа к паролю. Хотя мы и будем использовать цифровой пароль, данные клавиши могут пригодиться в других проектах. Затем научим кнопку чистить поле с паролем.

По аналогии с клавишей «1», добавим код добавления символа к паролю

Можно настроить текстовое поле, чтобы выводило символы вместо звездочек, и проверить, правильно ли добавлены обработчики нажатия кнопки.

Можно настроить текстовое поле, чтобы выводило символы вместо звездочек

Затем вернуть вывод звездочек. А также проверить очистку поля ввода пароля.

И самое главное, это команда отправки пароля на Arduino.

И самое главное, это команда отправки пароля на Arduino. К привычной конструкции добавляем отправку значения из текстового поля. В итоге получаем отправку одной строкой значение из поля ввода пароля, кодовую фразу команды и символы окончания команды.

Таймер и переменная для проверки пароля.

Для обработки пароля, перенаправления на страницу «led», а также для вывода информации о том, что пароль введен неверный, нужно добавить 2 невидимых элемента Таймер (Timer) «tm0» и переменную Variable «va0».

2 невидимых элемента Таймер (Timer) «tm0» и переменную Variable «va0»

Переменную настраивать не нужно. Оставляем все по умолчанию.

Переменную настраивать не нужно.

У таймера увеличиваем время до 2000 млс.

У таймера увеличиваем время до 2000 млс.

И в обработчик таймера добавляем код. Если цвет надписи, информирующей нас о введении неверного пароля равен 0, т.е черного цвета, то по завершению таймера 2 сек. поменяем цвет на белый. И второе условие проверяет переменную и если она хранит значение 1, то выполняем перенаправление на страницу led.

И в обработчик таймера добавляем код.

На этом все с настройками дисплея Nextion. Сейчас можно перейти к коду Arduino.

Передаем пароль с дисплея Nextion на Arduino и проводим проверку.

Несмотря на то, что на дисплее Nextion мы провели достаточно большую работу, код Arduino увеличиться на 10 строчек. Первым делом добавим целочисленную переменную, которая будет хранить пароль.

добавим целочисленную переменную

Добавляем обработки полученной команды с дисплея Nextion.

Добавляем обработки полученной команды с дисплея Nextion.

По аналогии с предыдущими уроками, проверяем команду по кодовому слову. Затем нам нужно получить значение пароля. Для этого получим позицию первого символа кодового слова. И из полученной команды возьмём все символы до кодового слова. Это и будет полученный пароль с дисплея.

Для этого получим позицию первого символа

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

 выводим в монитор порта полученное значение с дисплея

И дальше нам нужно проверить, совпадает полученное значение с установленным паролем. Если да, то отправляем значение переменой 1. Это как раз и позволит нам с помощью таймера перенаправить на страницу led. Если пароль не верный, то отправляем цвет текста 0. Что позволит вывести надпись «Неверный пароль» на дисплей. И по таймеру, через 2 секунды, надпись будет скрыта.

Что позволит вывести надпись «Неверный пароль» на дисплей

Может немного сложновато, но при этом достаточно эффективная работа клавиатуры. Аналогичным методом можно реализовать обработку более сложной информации, но для этого рекомендую использоватьESP8266, ESP32 или другие более производительные МК.

Добавляем всплывающую клавиатуру на дисплей Nextion.

Информация, про которую у меня постоянно спрашивают и не все понимают, как добавить всплывающую клавиатуру на дисплей Nextion.

Добавляем всплывающую клавиатуру на дисплей Nextion.

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

выбрать клавиатуру с английским алфавитом и цифрами

А также урезанную клавиатуру с несколькими символами на кнопку, по аналогии с реализацией на кнопочных телефонах.

После добавления клавиатуры, в проекте появиться дополнительная страница.

После добавления клавиатуры, в проекте появиться дополнительная страница. Это связанно с тем, что клавиатура — это просто отдельная страница и это ее минус. Данные передаются с одной страницы к другой. Но в нашем проекте это не будет проблемой, поэтому я оставлю обе клавиатуры, всплывающую и которую сделали самостоятельно.

Постарался подробно рассказать, как реализовать клавиатуру на дисплее Nextion. В следующем уроке закончим уроки по дисплею и сделаем страницу энергосбережения. Для подписчиков на бусти будут доступны бонусные уроки.

Внимание! Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI, код для Arduino.

Понравился Урок Клавиатура дисплей Nextion. Timer, перенаправление на страницы? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 5. Передаем информацию с Arduino на дисплей Nextion. http://arduino-tex.ru/news/43/urok-5-peredaem-informaciyu-s-arduino-na-displei-nextion.html Константин Portal-PK 2021-04-06T14:06:53+03:00 На дисплее Nextion можно разместить большое количество кнопок, и управлять неограниченным количеством элементов и свойствами исполнительных механизмов. Но не плохо было бы выводить на дисплей информацию о работе устройства, положения исполнительного механизма, конфигурацию устройства и пр. Сегодня в уроке рассмотрим, как можно передать на дисплей текстовую и цифровую информацию и выведем названия световых эффектов подсветки на адресных светодиодах. А также уровень яркости подсветки.

Что понадобиться для урока:

Сегодня в уроке Nextion:

Добавляем дополнительные шрифты.

Один шрифт мы уже добавляли в предыдущем уроке. Сегодня добавим еще 2. Для этого переходим «Tools -> Font Generator».

Один шрифт мы уже добавляли в предыдущем уроке.

В открывшемся окне указываем размер шрифта «40». В поле «Font» выбираем шрифт. Также поставим галочку полужирный шрифт «Bold». И наконец указываем название, я использую название по размеру шрифта. Вы можете указать свое название.

В открывшемся окне указываем размер шрифта «40». В поле «Font» выбираем шрифт.

Затем сохраняем файл шрифта, в качестве имени также указываем размер шрифта.

Затем сохраняем файл шрифта

После чего увидим, что шрифт успешно сгенерирован. Нажимаем на кнопку «Ok».

После чего увидим, что шрифт успешно сгенерирован. Нажимаем на кнопку «Ok».

В следующем окне у вас спросит, нужно ли добавить шрифт в проект, нажимаем на кнопку «Yes».

После чего увидим, что шрифт успешно сгенерирован. Нажимаем на кнопку «Ok».

Посмотреть доступные шрифты можно в левом нижнем углу программы, во вкладке «Fonts».

Посмотреть доступные шрифты можно в левом нижнем углу программы, во вкладке «Fonts»

Как видим, я добавил еще шрифт 18. Обратите внимание на поле «id», по данному индикатору будем использовать добавленные шрифты в проект.

Элемент «Text», добавляем в проект и настраиваем атрибуты.

Для вывода названия светового эффекта, добавим текстовое поле.

Для вывода названия светового эффекта, добавим текстовое поле.

В левом верхнем углу появиться элемент «t1».

В левом верхнем углу появиться элемент «t1».

Разместим его в нужном месте на экране.

Разместим его в нужном месте на экране.

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

 А перед этим, зайдем на странице библиотеки WS2812FX

В свойстве текстового поля указываем максимальный размер поля «txt_maxl» в 30 символов. И добавляем максимально длинное название эффекта «Color Wipe Reverse Inverse». Данный эффект имеет порядковый номер 6. Который мы установили по умолчанию в предыдущем уроке.

В свойстве текстового поля указываем максимальный размер поля «txt_maxl» в 30 символов

Как видим, данное название умещается и остаётся место. Поэтому мы можем увеличить размер шрифта.

Как видим, данное название умещается

В поле «font» указываем значение «2», это индикатор ранее созданного шрифта 18 размера. Не забываем посмотреть, чтобы текст располагался по центру.

В поле «font» указываем значение «2»,

Смотрим что у нас получилось. Как видим, текст располагается максимально красиво.

Смотрим что у нас получилось.

Элемент «Number», настраиваем свойства вывода цифровой информации.

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

Для вывода цифровых значений существует отдельный элемент «Number»

В левом верхнем углу увидим элемент «n0».

В левом верхнем углу увидим элемент «n0».

Разместим данное поле на экране в нужном месте.

Разместим данное поле на экране в нужном месте.

Сделаем фон в виде картинки, для этого в атрибутах (свойство) элемента выбираем в поле «sta» значение «image». Кликаем по полю «pic» и добавляем картинку.

Кликаем по полю «pic» и добавляем картинку.

Затем нам нужно поменять цвет шрифта на белый. Для этого кликаем по полю «pco». Выбираем белый цвет. Для выбора цвета нажмите на надпись «select…».

Для этого кликаем по полю «pco».

Размер шрифта нужно установить 40. Для этого в поле «font» выбираем 1. И напишем максимальное значение «100», которое будет выводиться в данном поле.

Размер шрифта нужно установить 40.

Проверяем результат. Все выглядит отлично.Можно перейти к коду на Arduino.

Проверяем результат.

Передаем с Arduino на дисплей Nextion цифровую информацию.

Для того чтобы в коде не писать постоянно весь набор значений, который нужен, чтобы передать цифровое значение на дисплей, создадим 2 функции:

  • SendInt() – функция, оправляющая на дисплей Nextion (номер экрана, название переменной) + данные.Передаем с Arduino на дисплей Nextion цифровую информацию.
  • comandEnd() - функция отправки конца команды. Команда, поступающая в дисплей, должна заканчиваться символами «0xFF0xFF0xFF».

comandEnd() - функция отправки конца команды.

Сейчас, чтобы отправить цифровое значения на дисплей, нужно написать всего 1 строчку кода.

Сейчас, чтобы отправить цифровое значения на дисплей, нужно написать всего 1 строчку кода.

Отправим текущее значение яркости, при нажатии кнопки увеличения яркости.

Отправим текущее значение яркости, при нажатии кнопки увеличения яркости.

Отправляем следующие параметры на дисплей:

  • Led – название экрана.
  • n0 – название поля.
  • Val – свойство поля.
  • Yarkast – значение.

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

Передаем с Arduino на дисплей название световых эффектов.

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

 функцию SendData().

И для передачи текстовой информации потребуется написать всего 1 строчку кода. Но тут есть свои нюансы. Текст должен передаваться как строка и в кавычках. В противном случае дисплей не поймет, что вы ему отправили.

И для передачи текстовой информации потребуется написать всего 1 строчку кода.

На экран предаём:

  • Led – название экрана.
  • t1 – название поля.
  • txt – свойство поля.
  • String(strip.getModeName(strip.getMode())) – Строка. В предыдущем уроке мы рассмотрели, что это за конструкция и вывели данные значения в монитор порта.
  • "\"" – кавычки, их необходимо экранировать, для этого используется символ «\».

На экран предаём

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

Проверяем работоспособность передачи информации с Arduino на дисплей Nextion.

Загружаем прошивку на дисплей Nextion и код в Arduino, и проверяем как все работает. Но перед этим, желательно, значение яркости в настройке дисплея указываем 50 %, так как в прошивке при включении яркость установлена 50. Но это нужно на данном этапе разработки. В дальнейшем это будет не важно. Особенно когда мы будем сохранять все параметры в энерго независимую память.

Проверяем работоспособность передачи информации с Arduino на дисплей Nextion.

Проект становиться более информативный. Так как мы знаем какой световой эффект выводиться на экран.

Проект становиться более информативный.

И сейчас понятно, что яркость у нас минимальная и нажимать на уменьшения не стоит. Данный вариант уже применим в ваших проектах.

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

вариант отображения изменения яркости с помощью прогресс бара.

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

Внимание! Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI, код для Arduino.

Понравился Урок Передаем информацию с Arduino на дисплей Nextion? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-010 – модуль с оптическим прерывателем. Подключение к Arduino. http://arduino-tex.ru/news/42/ky-010---modul-s-opticheskim-preryvatelem-podklyuchenie-k.html Константин Portal-PK 2021-04-05T17:31:01+03:00 Сегодня в уроке рассмотрим KY-010 модуль, он применяется для считывания оборотов движущихся частей в самоделках, либо же может работать в качестве датчика пересечения области.

Описание модуля KY-010

Описание модуля KY-010.

Модуль KY-010 представляет собой оптический датчик, позволяющий засечь прохождение частей конструкции через инфракрасное излучение. Датчик состоит из фотоприемника и светодиода, направленного в него, а также двух резисторов на обратной стороне (1 кОм и 33 Ом). Когда какой-либо непрозрачный предмет перекрывает прохождение света к фотоприемнику, уровень логического сигнала на выходе датчика меняется.

Технические характеристики KY-010.

Технические характеристики KY-010.

Модуль питается напряжением и потребляет 13 mA, имеет скромные размеры 20x15x8 мм.

Распиновка KY-010:

  • GND – общий минусовой контакт.
  • +5V - предназначен для питания модуля.
  • Signal - выходной сигнал.

Схема подключения модуля KY-010 к Arduino Uno.

Схема подключения модуля KY-010 к Arduino Uno.

Схема подключения модуля KY-010 к Arduino NANO.

Схема подключения модуля KY-010 к Arduino NANO.

KY-010 первый пример кода Arduino.

int led = 13 ;// назначение пина для светодиода
int photoInterrupterPin = 10; // назначение пина для фотопрерывателя
int value ;// переменная для хранения положения кнопки
void setup ()
{
  pinMode (led, OUTPUT) ;// пин светодиода работает как выход
  pinMode (photoInterrupterPin, INPUT) ; // пин датчика работает как вход
}
void loop ()
{
  value = digitalRead (photoInterrupterPin) ;// чтение значения с фотопрерывателя
    if (value == HIGH) // когда с фотопрерывателя появляется высокий уровень, светодиод загорается
  {
    digitalWrite (led, HIGH);
  }
  else
  {
    digitalWrite (led, LOW);
  }
}

Данный код позволяет зажигать встроенный на Arduino светодиод. Он загорается при помещении какого-либо непрозрачного предмета в область датчика.

Схема подключения модуля KY-010, KY-009 к Arduino Uno.

Схема подключения модуля KY-010, KY-009 к Arduino Uno.

Схема подключения модуля KY-010, KY-009 к Arduino NANO.

Схема подключения модуля KY-010, KY-009 к Arduino NANO.

Второй пример кода.

int interrupterPin = 10; // назначение пина для фотопрерывателя
int redpin = 9; //pin red LED
int greenpin = 11;//pin green LED

void setup ()
{
  pinMode(redpin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode (interrupterPin, INPUT) ; // пин датчика работает как вход
}
void loop ()
{
  if (digitalRead (interrupterPin)) // когда с фотопрерывателя появляется высокий уровень, светодиод загорается
  {
    digitalWrite(redpin, HIGH);
    digitalWrite(greenpin, LOW);
  }
  else
  {
    digitalWrite(greenpin, HIGH);
    digitalWrite(redpin, LOW);
  }
}

В этом примере будем использовать KY-010 для световой сигнализации, а в качестве светодиода будем использовать KY-009 - Модуль RGB. О KY-009 рассказывал в предыдущем уроке, там вы сможете найти информацию о нем, схему подключения и номиналы используемых резисторов для подключения: KY-009 - Модуль RGB светодиода (SMD). Подключение к Arduino.

Данную схему и код можно применять в своих проектах для уведомления закрытия двери.

Данную схему и код можно применять в своих проектах для уведомления закрытия двери.

Модуль KY-010 можно применить еще во множестве самоделок.

Вывод.

Модуль KY-010 можно применить еще во множестве самоделок. Благодаря тому, что на выходе у нас логический сигнал, его можно так же использовать для считывания оборотов валов, либо же на нем можно сделать простой курвиметр (измеритель расстояния с колесом).

Работать с модулем не сложно, а где его можно использовать, зависит только от вашей фантазии.

Понравился Урок KY-010 – модуль с оптическим прерывателем. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 4. Button Nextion. Управление яркостью, переключение режимов. http://arduino-tex.ru/news/41/button-nextion-upravlenie-yarkostyu-pereklyuchenie-rezhimov.html Константин Portal-PK 2021-04-04T16:36:32+03:00 Кнопку Dual-state рассмотрели в предыдущем уроке. В данном уроке про дисплей Nextion, посмотрим, как работать с обычной кнопкой (Button). Научимся изменять яркость подсветки, а также переключать режимы световых эффектов. Всего доступно 55 режимов. Настроим поочерёдный вывод каждого режима.

Сегодня в уроке Nextion:

Добавляем элемент Button на дисплей Nextion.

Добавляем элемент Button на дисплей Nextion.

Продолжаем уроки по дисплею Nextion. Возьмём пример из предыдущего урока и добавим кнопку – элемент Button.

Продолжаем уроки по дисплею Nextion.

После чего на дисплее появиться элемент «b0», в верхнем левом углу.

После чего на дисплее появиться элемент «b0», в верхнем левом углу.

Добавляем вторую кнопку и размещаем их на экране.

Добавляем вторую кнопку и размещаем их на экране.

По аналогии с элементом «Dual-state button», в поле «sta» выберем параметр «image».

поле «sta» выберем параметр «image».

Появиться 2 дополнительных поля: «pic», «pic2» добавляем картинки, которые мы делали в уроке: #3. Кнопка Dual-state - Nextion. Включаем выключаем подсветку.

Появиться 2 дополнительных поля: «pic», «pic2

Аналогичным способом добавляем кнопки управления яркостью.

Аналогичным способом добавляем кнопки управления яркостью.

Добавим иконки для каждой кнопки управления яркостью. Вот такой интерфейс получается.

Добавим иконки для каждой кнопки управления яркостью

Отправляем сигнал нажатия кнопки на Arduino.

Для каждого элемента на дисплее есть обработчик события нажатия кнопки «Tach Press Event». Чтобы предать информации по UART используются команды:

  • Print – предаём параметры.
  • Printh – предаём параметры и переводим каретку на новую строку.

Отправим с дисплея Nextion команду на ArduinoДля включения и выключения подсветки отправляем значение «power», и чтобы на стороне Arduino определить конец команды, отправим символы «0d 0a».

Аналогично добавляем команды для кнопок:

  • "prev" – предыдущий световой эффект.
  • "next" – следующий эффект.

Отправляем сигнал об изменения яркости подсветки:

  • "plus" – увеличение яркости.
  • "minus" – уменьшение яркости.

Сейчас проверим работоспособность. Нажмем на кнопку «Debug».

Сейчас можно проверить работоспособность. Нажмем на кнопку «Debug».

Понажимаем на кнопки.

Понажимаем на кнопки.

Посмотрим какие команды у нас отправляются с дисплея. Отлично, можно перейти к коду на Arduino.

Посмотрим какие команды у нас отправляются с дисплея.


Переключаем режимы подсветки. Разбираем код для Arduino.

В предыдущем уроке мы рассмотрели основной код и знаем как разобрать полученную информацию с дисплея. В функцию AnalyseString() добавим условия, определяющие новые команды с экрана Nextion.

Если получили команду "prev"

Если получили команду "prev", нам нужно переключить режим на предыдущий. Чтобы переключения режимов подсветки был цикличный, добавим условие, которое определяет, что дошли до нулевого режима и переключение начнем с последнего режима под номером 54.

Затем устанавливаем режим

Затем устанавливаем режим, чтобы он отобразился на светодиодной ленте. А также выведем в монитор порта информацию о номере режима и его названии.

выведем в монитор порта информацию о номере режима и его названии.

Данная информация нам пригодиться в следующем уроке, для вывода названия режима на экран.

При переключении на следующий режим "next"

При переключении на следующий режим "next", необходимо зациклить так, чтобы номер режима не был больше 54. Остальные параметры аналогичны переключению на предыдущий режим.

Изменяем яркость подсветки. Разбираем код для Arduino.

Изменение яркости немного отличается от переключения режимов подсветки. При получении команды, для увеличения яркости "plus", к текущему значению яркости прибавляем 10. Это позволяет нам сделать 10 режимов яркости. Можно данное значение поменять, например на 5, и уже будет 20 режимов яркости.

Изменяем яркость подсветки. Разбираем код для Arduino.

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

Яркость будем увеличивать до максимального значения

Затем нам нужно установить яркость ленты.

При уменьшении яркости "minus"

При уменьшении яркости "minus", уменьшаем яркость до минимального значения 0. При 0 подсветка отключиться и будет непонятно, уменьшили мы яркость до нулевого значения или просто отключили подсветку. Можно ограничить минимальное значение, например установить 10. И тогда яркость не будет меньше установленного значения.

Достаточно простые алгоритмы позволяют изменять яркость подсветки.

Проверяем результат управление подсветкой на ws2812 с дисплея Nextion.

Как загрузить код в Arduino и прошить дисплей Nextion, рассказывал в предыдущем уроке. Если у вас что-то не получается, пишите ваши вопросы в комментарии.

Прошивка доступна только для подписчиков на boosty и составляет символическую сумму. За данную подписку вы получите доступ к исходным материалам уроков.

Что понадобиться для урока:

Схема подключения ws2812, Arduino NANO, Nextion.

Схема подключения ws2812, Arduino NANO, Nextion.

Схема подключения ws2812, Arduino UNO, Nextion.

Схема подключения ws2812, Arduino UNO, Nextion. Подключаем питание. Включаем подсветки и можем изменять режимы световых эффектов ленты ws2812. Эффектов много, поэтому просмотр всех режимов займет какое-то время.

изменять режимы световых эффектов ленты ws2812

Затем можно поиграть с изменением яркости.

Затем можно поиграть с изменением яркости.

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

Внимание! Подписчики на сайте boosty могут скачать исходные файлы в формате .HMI, код для Arduino.

Понравился Урок Button Nextion. Управление яркостью, переключение режимов? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
#3. Кнопка Dual-state - Nextion. Включаем выключаем подсветку. http://arduino-tex.ru/news/40/3-knopka-dual-state---nextion-vklyuchaem-vyklyuchaem-podsvetku.html Константин Portal-PK 2021-03-30T18:17:17+03:00

Сегодня в уроке, про дисплей Nextion, рассмотрим такой элемент управления, как кнопка Dual-state. С помощью данной кнопки научимся включать и выключать подсветку, а также менять цвет по умолчанию. Рассмотрим, как работает код для управления элементами на дисплее Nextion, а также научимся отправлять команды на Arduino для управления подсветкой.

Сегодня в уроке Nextion рассмотрим.

Добавляем Dual-state button на дисплей.

В предыдущем уроке мы рассмотрели, как можно сделать графику для дисплея и добавили первое изображение на дисплей. Сегодня будем использовать графические элементы из предыдущего урока. Давайте приступим, а для этого откроем в Nextion Editor заготовку из второго урока.

откроем в Nextion Editor заготовку из второго урока

Добавим элемент «Dual-state button».

Добавим элемент «Dual-state button».

На рабочем поле появиться элемент «bt0».

На рабочем поле появиться элемент «bt0»

Чтобы использовать изображения для отображения кнопок, нужно в свойстве кнопки, в поле «sta», выбрать параметр «image».

 свойстве кнопки, в поле «sta», выбрать параметр «image»

Появиться 2 дополнительных поля: «pic», «pic2»:
  • «pic» - изображение первоначального состояние кнопки.
  • «pic2» - изображение состояния кнопки после первого нажатия.

Появиться 2 дополнительных поля: «pic», «pic2

Нажмем на «browse…», откроется менеджер картинок. Из списка загруженных картинок мы можем выбрать нужную.

Нажмем на «browse…», откроется менеджер картинок.

Добавим второе изображения для поля «pic2».

Добавим второе изображения для поля «pic2».

В поле «pic» видим значение 13, в поле «pic2» 14. Это id картинок. У вас будут другие значения.

Как загрузить изображения в проект

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

Например, 12 изображений переключения цвета по умолчанию.

На кнопке видим надпись «newtxt».

На кнопке видим надпись «newtxt».

Чтобы удалить надпись, в свойствах кнопки, в поле «txt», удаляем надпись «newtxt» и нажимаем кнопку «Enter» на клавиатуре.

удаляем надпись «newtxt» и нажимаем кнопку «Enter» на клавиатуре.

Аналогичным способом добавляем 6 кнопок управления цветом по умолчанию.

Аналогичным способом добавляем 6 кнопок управления цветом по умолчанию.

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

При нажатии на любую кнопку она остается в активном положении.

Код для дисплея Nextion, позволяющей отслеживать активную кнопку.

Рассмотрим подробнее свойства кнопки, а именно свойство «val», данное значение как раз отвечает за состояние кнопок. Если нажмёт на кнопку, значение «val» будет равно 1. При повторном нажатии, значение измениться на 0. И так далее.

Рассмотрим подробнее свойства кнопки, а именно свойство «val»

Мы можем прописать для любой кнопки значение 1, и при загрузке экрана данная кнопка будет активной.Сделаем красную кнопку по умолчанию активной. В дальнейшем, в коде для Arduino, сделаем красный цвет по умолчанию для светодиодной ленты WS2812.

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

Но это не решает нашу задачу. Для каждого элемента на дисплее есть обработчик события нажатия кнопки «Tach Press Event». Добавляем в данное поле код, в котором прописываем, что кнопка 1 активна при нажатии на неё, а остальные деактивируем.

обработки нажатия «Tach Press Event»

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

 По аналогии добавим код к другим кнопкам.

Сейчас можно проверить работоспособность. Нажмем на кнопку «Debug».

Сейчас можно проверить работоспособность. Нажмем на кнопку «Debug».

Как видим все работает отлично и понятно какой цвет выбран по умолчанию.

Как видим все работает отлично и понятно какой цвет выбран по умолчанию.

Код передачи информации с дисплея на Arduino.

Отправим с дисплея Nextion команду на Arduino, о нажатии той или иной кнопки. Для передачи информации по UART используются команды:

  • Print – предаём параметры.
  • Printh – предаём параметры и переводим каретку на новую строку.

Отправим с дисплея Nextion команду на Arduino

Для включения и выключения подсветки отправляем значение «power», и чтобы на стороне Arduino определить конец команды, отправим символы «0d 0a».

Аналогично добавляем команды для переключения цветов.

Аналогично добавляем команды для переключения цветов. Но нужно помнить, что каждая команда должны быть уникальной.

Добавляем библиотеки для работы с дисплеем Nextion и ws2812.

В первом уроке рассказывал, как установить Arduino IDE, для данного урока нам необходимо установить дополнительные библиотеки. К статье прикреплю необходимые библиотеки. Скачать их можно в разделе «файлы для скачивания». После того как вы загрузите библиотеки, нужно скопировать в папку «Документы\Arduino\libraries».

установить дополнительные библиотеки

В папке с библиотеками должны появиться соответствующие папки. После чего нужно перезагрузить программу Arduino IDE. Если она у вас была открыта.

В папке с библиотеками должны появиться соответствующие папки.

В коде нужно подключить библиотеки. Подключим библиотеку для эмуляции Serial порта «SoftwareSerial». Отвечу на вопрос, который у вас возникнет: «можно ли использовать аппаратный Serial порта?» Да, можно, но вы не сможете вывести отладочную информацию. А также, при подключении к компьютеру, у вам будут помехи передачи данных Serial порта. Для плат, у которых несколько аппаратных UART например ESP32, STM32 можно без проблем использовать аппаратный UART.

Подключим библиотеку для эмуляции Serial порта «SoftwareSerial»

Также нужно подключить библиотеку «WS2812FX.h» для работы с адресными светодиодами. После чего указываем количество светодиодов, и к какому пину подключен пин управления лентой.

Также нужно подключить библиотеку «WS2812FX.h»

Затем в блоке setup() открываем последовательный порт и подключаем светодиодную ленту.Тут используются переменные, которые нужно определить в начале кода.

Затем в блоке setup() открываем последовательный порт

Также 2 переменные нам нужны для работы с полученными данными с дисплея.

Затем в блоке setup() открываем последовательный порт Также 2 переменные нам нужны для работы с полученными данными с дисплея.

Получаем данные с дисплея Nextion, управляем светодиодами ws2812.

В основном цикле loop(). У нас всего 2 строки. Первая строка инициализирует работу с светодиодами. Вторая функция обрабатывает полученные данные с дисплея. Функция ReadSerial() находиться на второй вкладке. Это не отдельный скетч. Просто код разделен на несколько страниц для удобства редактирования.

В основном цикле loop(). У нас всего 2 строки.

В функции ReadSerial() мы получаем данные с дисплея, пока не получим символы конца строки.

В функции ReadSerial() мы получаем данные с дисплея

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

После чего вызываем функция обработки команд

Тут проверяем, какую команду получили. Если «power», то мы включаем светодиодную ленту. И меняем значение переменой «flag». Это необходимо делать чтобы знать, включена или нет у нас светодиодная лента на данный момент. Чтобы при следующем нажатии на кнопку выключить светодиоды.

Аналогичным способом обрабатываем команды переключения цвета по умолчанию.

Как подобрать цвет и что за непонятные символы 0x0000FF? Что они значат? Все очень просто согласно цветовой схеме «RGB»:

  • 0xFF0000 Первый 2 символа это красный цвет.
  • 0x00FF00 следующие 2 символа это зеленый цвет.
  • 0x0000FF последние 2 символа это синий цвет.

Что за непонятные значений «FF» - это значение в шестнадцатеричной системе счисления. И FF равняется максимальному значению 255 в десятеричной системе счисления.

И FF равняется максимальному значению 255 в десятеричной системе счисления.

Например, 99 ровняется 153. Данные значения можно перевести с помощью инженерного калькулятора или онлайн сервисов.

Например, 99 ровняется 153. Данные значения можно перевести с помощью инженерного калькулятора или онлайн сервисов.

Комбинируя цвета, мы получаем различные цвета и оттенки. Если вам интересна данная тема и вы хотели бы узнать подробнее, пишите об этом в комментариях.

Выбор microSD карты для загрузки прошивку на дисплей Nextion.

В документации к дисплею Nextion указаны требования к карте памяти: 10 класса и не больше 16 Gb.

На фото ниже 3 карты microSD различного объема и различных производителей. Из них работают 2. Внимание, вопрос! Какая карта памяти не работает?

На фото ниже 3 карты microSD

И тут ломается вся логика. Одного объема? НЕ! Одного производителя? НЕТ!

Как это работает не понятно. У меня Китайская карта памяти, купленная года 4 назад за копейки, работает нормально. Но 8 Gb купленная у нас в сетевом магазине цифровой техники не работает. А на 16 того же производителя работает нормально.

Поэтому какая карта заработает у вас, точно сказать не смогу. Но у меня есть предположение что нужно брать 10 класса на 16 Гб. Больше шансов что заработает.

Загрузка прошивки в Nextion с помощью microSD.

Кату памяти нужно отформатировать в формате Fat32. Проверить чтобы на ней не было никаких файлов. У меня при работе в операционной системе Linux постоянно создаётся скрытый файл. Его нужно также удалить.

Для того, чтобы скомпилировать файл для прошивки дисплея в Nextion Editor, переходим в меню «File -> TFT file output»

скомпилировать файл для прошивки дисплея в Nextion Editor

В открывшемся окне выбираем место сохранения и нажимаем на кнопку «Output».

нажимаем на кнопку «Output».

Копируем файл «Lesson3.tft» на карту памяти.

Копируем файл «Lesson3.tft» на карту памяти.

Отключаем питание дисплея. Ставим карту памяти подаем питание.

Ставим карту памяти подаем питание.

Увидим надпись с отчетом времени. После чего начинается процесс загрузки. Вы увидите проценты загрузки на дисплее.

Увидим надпись с отчетом времени.

После загрузки на дисплее будет надпись «Check Data… 100%».

После загрузки на дисплее будет надпись «Check Data… 100%»

Отключаем питание и достаём карту памяти.

Отключаем питание и достаём карту памяти.

После чего можно подать питание, и мы увидим созданный интерфейс на дисплее Nextion.

После чего можно подать питание, и мы увидим созданный интерфейс на дисплее Nextion.

Подключаем Arduino к дисплею Nextion. Проверяем результат.

Сейчас можно подключить светодиодную ленту ws2812, дисплей к Arduino. Предварительно загрузив код в Arduino.

Что понадобиться для урока:

Схема подключения ws2812, Arduino NANO, Nextion.

Схема подключения ws2812, Arduino NANO, Nextion.

Схема подключения ws2812, Arduino UNO, Nextion.

Схема подключения ws2812, Arduino UNO, Nextion.

После включения, у нас лента не работает. Это так и задумано. Нужно нажать на дисплее кнопку включения.

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

Мы можем с помощью дисплея включать и выключать подсветку.

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

Прошивка доступна только для подписчиков на сайте boosty и составляет символическую сумму. За данную подписку вы получите доступ к исходным материалам уроков.

Понравился Урок Кнопка Dual-state - Nextion. Включаем выключаем подсветку, меняем цвет? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
#2. Подготовка графики для дисплея Nextion в Inkscape. Создание экранов. http://arduino-tex.ru/news/39/2-podgotovka-grafiki-dlya-displeya-nextion-v-inkscape-sozdanie.html Константин Portal-PK 2021-03-26T11:25:46+03:00 Продолжаем изучать дисплей Nextion. И сегодня в уроке рассмотрим, как можно сделать красивые кнопки/иконки для интерфейса, в бесплатной программе Inkscape. Про Inkscape неоднократно уже рассказывал в своих проектах самодельных ЧПУ станков. Данная программа позволяет делать векторные изображения для гравировки, фрезеровки и рисования на плоттере. В рамках данного урока, в Inkscape сделаем красивые интерфейс для дисплея Nextion.

Сегодня в уроке мы рассмотрим:

Добавляем первые элементы на дисплей Nextion.

В предыдущем уроке мы выбрали дисплей, определили ориентацию дисплея. И на основе заготовки из первого урока продолжим изучать Nextion Editor.

Так как практически все элементы используют текст, нам необходимо добавить хотя бы 1 шрифт. В противном случае, при добавлении элемента у вас будет сообщение об ошибке. Для добавления шрифта переходим «Tools -> Font Generator».

нам необходимо добавить хотя бы 1 шрифт

В открывшемся окне указываем размер шрифта, для начала добавим самый маленький размер «16». В поле «Font» выбираем шрифт. Также можно использовать полужирный шрифт. Для этого нужно установить галочку «Bold». И наконец указываем название, я использую название по размеру шрифта. Вы можете указать свое название.

 В поле «Font» выбираем шрифт.

Затем сохраняем файл шрифта, в качестве имени также указываем размер шрифта.

Затем сохраняем файл шрифта, в качестве имени также указываем размер шрифта.

После чего увидим, что шрифт успешно сгенерирован. Нажимаем на кнопку «Ok».

После чего увидим, что шрифт успешно сгенерирован. Нажимаем на кнопку «Ok».

В следующем окне у вас спросит, нужно ли добавить шрифт в проект, нажимаем на кнопку «Yes».

В следующем окне у вас спросит, нужно ли добавить шрифт в проект, нажимаем на кнопку «Yes».

Посмотреть доступные шрифты можно в левом нижнем углу программы, во вкладке «Fonts».

Посмотреть доступные шрифты можно в левом нижнем углу программы, во вкладке «Fonts».

Сейчас можно добавить первые элементы:
  • Text –Текстовое поле. Применение более разнообразное, чем просто вывод текста. В уроках мы это рассмотрим.
  • Button – Кнопка.
  • Dual-state button – Кнопка с фиксированным положением. Подробнее будем рассматривать в следующем уроке.

Сейчас можно добавить первые элементы

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

Разместим кнопки на экране.

Для проверки, как это будет работать на дисплее, нажимаем на кнопку «Debag».

Для проверки, как это будет работать на дисплее, нажимаем на кнопку «Debag».

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

После чего мы увидим процесс компиляции.

В открывшемся окне может понажимать на кнопки и посмотреть как все работает.

В открывшемся окне может понажимать на кнопки и посмотреть как все работает.

Так просто добавлять элементы на дисплей. Но они выглядят не очень красиво. Для изменения визуального отображения не так уж много настроек в реакторе Nextion Editor.

Создадим необходимые экраны (страницы).

В правом верхнем углу, в поле «Page», располагаются экраны (страницы) проекта. На данный момент у нас одна page0. Давайте переименуем ее, чтобы понимать что у нас будет отображаться на данной странице. Для этого кликаем 2 раза левой кнопкой мыши.И пишем новое имя «led».

В левом верхнем углу, в поле «Page», располагаются экраны (страницы) проекта.

Для создания новой станицы, нажмем на иконку страницы с плюсом.

Для создания новой станицы, нажмем на иконку страницы с плюсом.

У вас появиться новая страница, с названием по умолчанию page0. Переименуем страницу в «lock». Таким же методом добавим еще одну страницу и назовем ее «sleep0».

У вас появиться новая страница, с названием по умолчанию page0.

Почему именно sleep0, а не просто sleep? Дело в том, что слово sleep является зарезервированным словом программы, и вы не сможете его использовать в своих проектах.

Все экраны (страницы) добавлены. К ним вернемся в следующих уроках.

Скачиваем программу Inkscape.

Для того чтобы скачать программу «Inkscape», заходим в поисковик и указываем название программы «Inkscape». Переходим на сайт разработчика Inkscape.org.

название программы «Inkscape». Переходим на сайт разработчика Inkscape.org. На сайте переходим в раздел «Download».

На сайте переходим в раздел «Download».На момент написания статьи последняя версия программы 1.0.2. Далее нужно выбрать для какой операционной системы скачиваем программу, я выбираю Windows.

 выбираю WindowsВыбираем разрядность вашей ОС. У меня 64-bit.

Выбираем разрядность вашей ОС. У меня 64-bit.

Настройка программы Inkscape для работы.

Создадим рабочее поле, равное разрешению нашего дисплея. Для этого переходим в раздел меню «Файл-> Свойства документа…».

Настройка программы Inkscape.

Выбираем единицы измерения «px». Настраиваем размер рабочего пространства, по разрешению вашего дисплея. У меня ширина 480, высота 320 px.

Выбираем единицы измерения «px»

На этом настройка закончена. При желании данный шаблон можно сохранить.

Создаем кнопку в программе Inkscape для дисплея Nextion.

Создадим кнопку с закругленными углами. Для этого на панели инструментов выбираем прямоугольник. Нарисуем прямоугольник произвольной формы. При выделении нашей фигуры в верхнем правом углу есть кругляшек, если потянуть за него то у нас происходит скругление углов фигуры.

Создаем кнопку в программе Inkscape для дисплея Nextion.

После чего зададим размер прямоугольника 60 на 60 px.

После чего зададим размер прямоугольника 60 на 60 px.

Для изменения цвета элементов используем палитру внизу программы.

Для изменения цвета элементов используем палитру внизу программы.

Затем выбираем инструмент текст и пишем символ «1».

Затем выбираем инструмент текст и пишем символ «1».

Изменим цвет шрифта, используя цвет с палитры внизу. А также изменим размер символа и расположим его по центру кнопки.

Изменим цвет шрифта, используя цвет с палитры внизу.

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

Сейчас продублируем кнопку и изменим цвет фона второй кнопки.

Создаем необходимые элементы и размещаем их.

Создадим все кнопки для клавиатуры. Для каждой кнопки нужно 2 версии иконок, для пассивного и активного состояния кнопки.

Создаем необходимые элементы и размещаем их.

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

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

Подписчики на сайте boosty могут скачать исходные файлы в формате .svg, для программы Inkscape, и изменить размер кнопок под размер своего экрана.

Сейчас необходимо сделать предварительный макет интерфейса. У меня вот что получилось. Я конечно не дизайнер, и интерфейс далек от идеала.

Сейчас необходимо сделать предварительный макет интерфейса.

А вот так будет выглядить страница разблокировки.

А вот так будет выглядить страница разблокировки.

Сохранение графики в программе Inkscape для дисплея Nextion.

Чтобы сохранить нужный элемент выделяем его.

Сохранение графики в программе Inkscape для дисплея Nextion.

Затем в меню выбираем «Файл -> Экспорт в PNG».

Затем в меню выбираем Экспорт в PNG

После чего у вас откроется панель экспорта. Размер изображения менять не нужно, но проверить стоит.

После чего у вас откроется панель экспорта. Размер изображения менять не нужно, но проверить стоит.

Указываем название файла и нажимаем кнопку «Экспорт». Подобным образом нужно сохранить все элементы.

Добавляем изображение на дисплей Nextion.

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

Сейчас нас интересует вкладка «Picture». Нажимаем на кнопку в виде плюса.

В открывшемся окне выбираем изображения и нажимаем кнопку «Открыть».

В открывшемся окне выбираем изображения и нажимаем кнопку «Открыть».

Затем нам нужно создать контейнер для добавления нашего изображения. Для этого в панели инструментов нажимаем на элемент «Picture».

Для этого в панели инструментов нажимаем на элемент «Picture».

На рабочее поле добавиться пустой прямоугольник «p0». Нажимаем на него.

На рабочее поле добавиться пустой прямоугольник «p0».

И в правой колонке видим Атрибуты (свойства) элемента. Нас интересует «pic», кликаем по данному свойству и в выпадающем списке выбираем «browse…».

И в правой колонке видим Атрибуты (свойства) элемента. Нас интересует «pic»

Откроется менеджер картинок. Из списка загруженных картинок мы можем выбрать нужную. Так как у нас всего 1 картинка, выбираем ее.

Откроется менеджер картинок.

Картинка появиться на экране. Сейчас ее можно переместить с помощью мышки или стрелками на клавиатуре.

Картинка появиться на экране. Сейчас ее можно переместить с помощью мышки или стрелками на клавиатуре.

После чего проверим проект и сохранить его под именем «Lesson2».

После чего проверим проект и сохранить его под именем «Lesson2».

Пример «Lesson2.HMI», а также другие исходные материалы урока можно скачать на boosty по подписке.

На этом второй урок, в котором мы научились создавать графические элементы в Inkscape, для дисплея Nextion, заканчиваю. В следующем уроке начнем изучать работу с активными элементами и отправим первый сигнал управления на Arduino.

Понравился Урок Подготовка графики для дисплея Nextion в Inkscape. Создание экранов? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 1. Скачать и установить Arduino IDE, Nextion Editor. http://arduino-tex.ru/news/38/urok-1-skachat-i-ustanovit-arduino-ide-nextion-editor.html Константин Portal-PK 2021-03-23T10:37:20+03:00 Сегодня в уроке начнем разбирать интересную тему, как подключить к Arduino сенсорный полноцветный экран и управлять периферийными устройствами с дисплея Nextion. Кроме этого, на дисплей выведем различную информацию. Для создания интерфейса будем использовать программу Nextion Editor. Всего будет 8 уроков по данной теме и то, что у нас получится можно посмотреть в этой статье: Подсветка на ws2812, Arduino, Nextion.

Сегодня в уроке мы рассмотрим:

Где скачать Nextion Editor?

Скачать программу Nextion Editor можно с сайта разработчика. Для этого достаточно в поисковой системе, например Яндекс, произвести поиск по слову «Nextion».

Скачать программу Nextion Editor

Первый сайт в поиске будет сайт разработчика «nextion.tech». На сайте переходим в раздел «DONLOAD -> Nextion Editor».

Первый сайт в поиске будет сайт разработчика «nextion.tech».

На открывшейся странице можно скачать последнюю версию программы. Доступны два варианта скачивания: установочный файл или архив с портабельной версией программы.

установочный файл или архив с портабельной версией программы.

Если прокрутить страницу ниже, увидим дополнительные кнопки:

Если прокрутить страницу ниже, увидим дополнительные кнопки

  • NEXTION EDITOR LTS – Страница скачивания старой версии программы. Нужна если вы редактируете старый проект. Для создания новых проектов не рекомендую.
  • LIBRARIES – библиотека для работы с дисплеем от разработчика. Но мы ее не будем использовать в наших уроках. Возможно, в следующем блоке уроков, если данные уроки будут востребованы.

Установка и настройка Nextion Editor.

После скачивания Nextion Editor устанавливаем ее как обычную программу.

осле скачивания Nextion Editor

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

Давайте запустим Nextion Editor и создадим новый проект.

Для этого в программе нажмем на кнопку «New». Сохраним наш проект под именем «Урок1».

Сохраним наш проект под именем «Урок1».

Затем нам будет предложен выбор дисплея. У меня базовая версия «Basic» с разными размерами дисплея 2,8 и 3,5 дюйма.

У меня базовая версия «Basic» с разными размерами дисплея 2,8 и 3,5 дюйма.

В уроке будем использовать дисплей 3,5 дюйма.

В уроке будем использовать дисплей 3,5 дюйма.

На вкладке «Display» выбираем ориентацию дисплея. В уроке будем использовать вертикальное расположение с углом поворота на 90 градусов. Кодировку выбираем iso-8859-5, для поддержки русского языка.

На вкладке «Display» выбираем ориентацию дисплея.

Во вкладке «project» можно установить пароль для доступа к проекту. Мы этого делать не будем.

о вкладке «project» можно установить пароль для доступа к проекту.

После создания проекта откроется рабочее поле.

После создания проекта откроется рабочее поле

  1. Главное меню программы Nextion Editor.
  2. Меню управления выравниванием и порядком элементов.
  3. Библиотека элементов.
  4. Область отображения.
  5. Список страниц проекта.
  6. Библиотека изображений/Библиотека шрифтов.
  7. Окно вывода результатов компиляции.
  8. Окно для ввода кода, выполняемого при возникновении события.
  9. Зона редактирования атрибутов выбранного элемента.

Подробнее о работе с программой вы можете прочитать в моем предыдущем уроке: Nextion Editor урок. Скачиваем и первый пример hmi.

Какую версию Arduino IDE скачать?

Сейчас прейдем ко второй программе, которая нам необходима для урока — это Arduino IDE.

На третьей позиции идем на сайт разработчика «arduino.cc».

Скачать программу можно также с сайта разработчика совершенно бесплатно. Для этого по предыдущей схеме ищем в поисковике слово «Arduino». На третьей позиции идем на сайт разработчика «arduino.cc».

На сайте переходим на страницу «SOFTWARE -> DONLOAD».

На сайте переходим на страницу

Тут вы можете скачать последнюю версию Arduino IDE для Windows, Mac OS или Linux. Но я не рекомендую использовать последнюю версию.

скачать последнюю версию Arduino IDE для Windows, Mac OS или Linux

Так как с ней есть небольшие проблемы. Конечно, в рамках нашего проекта с данными проблемами скорее всего не столкнемся. Но все же, для того чтобы избежать ненужных проблем, рекомендую использовать версию 1.8.9. Для этого на данной странице нажмите на предыдущую версию. В момент написания урока это была версия 1.8.12.

В момент написания урока это была версия 1.8.12.

После чего вы попадете на страницу с различными версиями Arduino IDE. Скачиваем версию 1.8.9 для вашей операционной системы.

После чего вы попадете на страницу с различными версиями Arduino IDE

Установка и настройка Arduino IDE.

Устанавливаем программу Arduino IDE. Процесс установки простой и проблем возникнуть не должно.

Arduino и операционная система Windows вам необходимо поставить дополнительный драйвер ch340 driverТак как большинство покупает комплектующие в Китае, нам также необходимо установить драйвер ch340 для того, чтобы компьютер распознал нашу плату.

Установка драйвера ch340 для Windows.

  1. Скачайте драйвер в разделе «файлы для скачивания».
  2. Распакуйте архив
  3. Запустите исполнительный файл CH341SER.EXE
  4. В открывшемся окне нажмите кнопку Install
  5. На этом установка завершена

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

Загрузка примера кода в Arduino NANO

Для проверки того, что мы все сделали правильно и у нас все работает, загрузим самый распространенный код, позволяющий мигать встроенным светодиодом на плате. Светодиод подключен к 13 GPIO.

Arduino IDE устанавливается с небольшим набором примеров.

Arduino IDE устанавливается с небольшим набором примеров. В том числе есть пример, который нужен нам для урока. Для того чтобы загрузить пример, необходимо перейти в меню: «Файл -> Примеры -> 01.basics -> Blink». Откроется код примера.

Выбираем нашу плату Arduino NANO,

Выбираем нашу плату Arduino NANO, данная плата бывает с разными процессорами. Я использую Китайскую версию с процессором ATmega328p. Выбираю процессор «ATmega328p (Old bootloader)» также нужно выбрать порт, к которому подключена плата, у меня это «COM8»

Для Arduino UNO все еще проще. Выбираем плату и порт подключения.

Для Arduino UNO все еще проще. Выбираем плату и порт подключения

После чего можно загрузить код в плату.

После чего можно загрузить код в плату.

 загрузить код в плату

На плате увидим мигающий светодиод. У меня он синего цвета. Чаще всего он красного цвета. Но может быть и зеленого. Все зависит от производителя платы.

На плате увидим мигающий светодиод.

На этом урок заканчиваю. В следующем уроке поговорим о графике для дисплея и посмотрим подробнее как работать с программой Nextion Editor.

Понравился Урок Скачать и установить Arduino IDE, Nextion Editor? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Подсветка на ws2812, Arduino, Nextion. http://arduino-tex.ru/news/37/podsvetka-na-ws2812-arduino-nextion.html Константин Portal-PK 2021-03-16T12:19:25+03:00

Мне на канале постоянно пишут подписчики, с просьбой продолжить снимать уроки про работу Arduino c дисплеем Nextion. Поэтому я решил сделать небольшой проект управления подсветкой на адресных светодиодах ws2812, с помощью дисплея Nextion. И по данному проекту сделать уроки.

Урок 1. Скачать и установить Arduino IDE, Nextion Editor
Урок 2. Подготовка графики для дисплея Nextion в Inkscape
Урок 3. Кнопка Dual state Nextion Включаем выключаем подсветку.
Урок 4. Button Nextion Управление яркостью, переключение режимов
Урок 5. Передаем информацию с Arduino на дисплей Nextion
Урок 6. Клавиатура дисплей Nextion. Timer, перенаправление на страницы.
Урок 7. Управление яркостью дисплея Nextion Страница ожидания

Что понадобиться для проекта ws2812, Arduino, Nextion

Что понадобиться для проекта ws2812, Arduino, Nextion:

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

Подключаем все компоненты по схеме. Дисплей Nextion подключаем к пинам 6, 7

Подключаем все компоненты по схеме. Дисплей Nextion подключаем к пинам 6, 7 (RX, TX). Светодиодную ленту ws2812 к 5 pin Arduino.

Прошивка для дисплея Nextion.

Прошивка для дисплея Nextion.

Чтобы сделать красивый дизайн для дисплея, нужно подготовить графические элементы. Для этого я использую бесплатную программу Inkscape. Для кнопки нужно делать 2 варианта изображения для пассивного и активного состояния кнопки. Поэтому графических элементов получается много, но сделать их несложно, подробнее о процессе создания графики и работы с дисплеем расскажу в уроках.

Nextion Editor создаем оформление для дисплея.

Как работать с редактором Nextion Editor делал уроки:

Прикреплю к статье инструкцию по редактору Nextion Editor на английском языке, скачать ее можно внизу статьи.

В данном проекте у нас будет 3 экрана:

В данном проекте у нас будет 3 экрана

  • Lock – экран ввода пароля. Содержит клавиатуру и кнопку разблокировки.

экран ввода пароля

  • Led – экран управление подсветкой. Кнопка включения и выключения подсветки.Регулирования яркости, переключения режимов и выбор цвета по умолчанию.

экран управление подсветкой. Кнопка включения и выключения подсветки.

  • sleep0 – экран энергосберегающего режима. К названию в конце добавлен символ ноль не случайно. Так как слово «sleep» зарезервировано и его использовать нельзя.

Подробно разбирать каждый экран будем в уроках. Примерный план уроков Nextion:

  • Скачать и установить Arduino IDE, Nextion Editor.
  • Подготовка графики для дисплея Nextion в Inkscape. Создание экранов.
  • Кнопка Dual-state - Nextion. Включаем и выключаем подсветку, меняем цвет.
  • Button Nextion. Управление яркостью, переключение режимов.
  • Передаем текстовую и цифровую информацию Arduino в Nextion.
  • Клавиатура дисплей Nextion. Ограничение доступа.
  • Timer, перенаправление на страницы в Nextion Editor.
  • Управление яркостью дисплея Nextion. Страница ожидания.

Бонусный урок.

  • Сохраняем настройки подсветки в энергонезависимую память EEPROM.
  • Авторежим переключения эффектов подсветки на Arduino IDE, Nextion.

Прошивка для Arduino NANO.

Прошивка доступна только для подписчиков на сайте boosty и составляет символическую сумму, равной одному походу в Макдональдс. За данную подписку вы получите доступ не только к исходным материалам проекта, но и к урокам.

Код для Arduino состоит из 2 вкладок. Так что не пугайтесь. Это не 2 скетча, а вкладки. Запускаем файл WS8212_Arduino.ino и у вас откроются обе вкладки. Для работы понадобится библиотека "SoftwareSerial.h", которую можно скачать внизу статьи, в разделе «файлы для скачивания».

Код для Arduino состоит из 2 вкладок.

Дисплей подключаем к пинам 6, 7 это RX, TX контакты.

Дисплей подключаем к пинам 6, 7 это RX, TX контакты.

В переменой «pass» мы можем задать пароль, который нам понадобиться для ввода с дисплея. Переменная «yarkast» позволяет хранить значение яркости по умолчанию.

Затем нам нужно установить библиотеку «WS2812FX.h»

Затем нам нужно установить библиотеку «WS2812FX.h» для работы с адресными светодиодами. Для работы этой библиотеки нужно также установить библиотеку «Adafruit NeoPixel library», все библиотеки можно скачать внизу статьи, в разделе «файлы для скачивания».

Чтобы установить библиотеки, скачайте архив libraries.zip, в разделе «файлы для скачивания», содержимое архива скопируйте в папку «Документы\Arduino\ libraries».

Чтобы установить библиотеки, скачайте архив libraries.zip, в разделе

После чего можно загрузить код в Arduino.

Также в разделе «файлы для скачивания» прикреплены .hex файлы прошивки с загрузчиком для Arduino NANO и без загрузчика. Также загрузочный файл .tft для дисплея Nextion 3.5 дюйма.

Такой небольшой, но достаточно функциональный проект получился. Также планирую сделать приложения для телефона, которое позволит управлять подсветкой на ws2812. И в дальнейшем объединить оба проекта. Чтобы информация синхронно отображалась на дисплее Nextion и в приложении на телефоне.

Понравился проект Подсветка на ws2812, Arduino, Nextion? Не забудь поделиться с друзьями в соц. сетях.


А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-009 - Модуль RGB светодиода (SMD). Подключение к Arduino. http://arduino-tex.ru/news/36/ky-009---modul-rgb-svetodioda-smd-podklyuchenie-k-arduino.html Константин Portal-PK 2021-03-01T16:54:51+03:00

Для световой индикации в Arduino проектах часто используют светодиоды, а для экономии места можно поставить RGB светодиод. Сегодня в уроке рассмотрим KY-009 модуль, который оснащён SMD RGB светодиодом. Но, к сожалению, у данного модуля нет обвязки, как у других модулей из набора «37 in 1 Sensors Kit for Arduino». На мой взгляд это не логично. На модуль достаточно просто установить 3 резистора. И в принципе KY-009 это не модуль, а просто RGB светодиод.

Описание модуля KY-009

Описание модуля KY-009

Полноцветный светодиодный модуль RGB KY-009 для Arduino излучает различные цвета, смешивая красный, зеленый и синий свет. Количество каждого цвета регулируется с помощью ШИМ. Что позволяет вывести до 255 оттенков для каждого канала.

Полноцветный светодиодный модуль RGB KY-009 для Arduino

Технические характеристики KY-009

Cветодиодный SMD-модуль KY-009 RGB состоит из светодиода SMD 5050, который используется с ограничивающими резисторами для предотвращения перегорания. Совместим с популярными платформами, такими как Arduino, Raspberry Pi и ESP8266.

Cветодиодный SMD-модуль KY-009 RGB

При сборке схемы, рассчитанной на напряжение питания 5 В, следует установить в линиях R, G и B резисторы сопротивлением:
Для красного канала (R) не менее 180 Ом.
Для зеленого (G) и синего канала (B) не менее чем по 110 Ом.

Контакты:

  • I – общий провод, подключается к GND.

На эти контакты подается питание положительной полярности:

  • R – красный,
  • G – зеленый,
  • B – синий.

Схема подключения KY-009 к Arduino UNO.

Схема подключения KY-009 к Arduino UNO

Схема подключения KY-009 к Arduino NANO.

Схема подключения KY-009 к Arduino NANO.

Для того чтобы модуль KY-009 не вышел из строя, необходимо использовать резисторы, с номиналом который рассмотрели выше. Дополнительную информацию можно найти в техническом описании SMD 5050 LED внизу статьи, в разделе «файлы для скачивания».

KY-009 Пример кода Arduino.

Следующий пример кода для Arduino будет циклически переключаться между различными цветами, изменяя значение ШИМ для каждого из трех основных цветов.

int redpin = 9; //pin red LED
int bluepin =10; //pin blue LED
int greenpin = 11;//pin green LED

int val;

void setup() {
  pinMode(redpin, OUTPUT);
  pinMode(bluepin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  for(val = 255; val > 0; val--)
  {
    analogWrite(redpin, val);  //PWM red
    analogWrite(bluepin, 255 - val); //PWM blue
    analogWrite(greenpin, 128 - val); //PWM green
    Serial.println(val); //print
    delay(5); 
  }
  for(val = 0; val < 255; val++)
  {
    analogWrite(redpin, val);
    analogWrite(bluepin, 255 - val);
    analogWrite(greenpin, 128 - val);
    Serial.println(val);
    delay(5); 
  }
}

KY-009 Пример кода Arduino.

Второй вариант кода позволяет плавно изменять цвет из одного оттенка к другому и так по кругу.

#define R_PIN 9 //pin red LED
#define G_PIN 10 //pin blue LED
#define B_PIN 11 //pin green LED
void setup() {
  pinMode(R_PIN, OUTPUT);
  pinMode(G_PIN, OUTPUT);
  pinMode(B_PIN, OUTPUT);
}
void loop() {
  // плавно проходимся по всем цветам
  static int counter = 0;
  counter += 10;
  colorWheel(counter);
  delay(100);
  if (counter > 1530)
    counter = 0;
}
// включает цвет по цветовому колесу, принимает 0-1530
void colorWheel(int color) {
  byte _r, _g, _b;
  if (color <= 255) {                       // красный макс, зелёный растёт
    _r = 255;
    _g = color;
    _b = 0;
  }
  else if (color > 255 && color <= 510) {   // зелёный макс, падает красный
    _r = 510 - color;
    _g = 255;
    _b = 0;
  }
  else if (color > 510 && color <= 765) {   // зелёный макс, растёт синий
    _r = 0;
    _g = 255;
    _b = color - 510;
  }
  else if (color > 765 && color <= 1020) {  // синий макс, падает зелёный
    _r = 0;
    _g = 1020 - color;
    _b = 255;
  }
  else if (color > 1020 && color <= 1275) {   // синий макс, растёт красный
    _r = color - 1020;
    _g = 0;
    _b = 255;
  }
  else if (color > 1275 && color <= 1530) { // красный макс, падает синий
    _r = 255;
    _g = 0;
    _b = 1530 - color;
  }
  analogWrite(R_PIN, 255 - _r);
  analogWrite(G_PIN, 255 - _g);
  analogWrite(B_PIN, 255 - _b);
}

Код не оптимальный, но для понимания этого достаточно. Кроме этого, для облегчения работы с RGB светодиодами также есть библиотеки, например: RGBLed Arduino library.

Использование библиотеки RGBLed Arduino library для работы с модулем KY-009.

Скачать библиотеку RGBLed можно на github или внизу статьи, в разделе «файлы для скачивания»

Заходим в Arduino IDE и выбираем в меню: "Скетч –> Подключить библиотеку –> Добавить .ZIP библиотеку…"

Заходим в Arduino IDE и выбираем в меню

Выбираем скаченный архив RGBLed-master.zip и нажимаем кнопку «Открыть». После установки вы увидите надпись, что библиотека успешно добавлена.

Использование библиотеки RGBLed Arduino library для работы с модулем KY-009.

Для начала работы с библиотекой RGBLed ее нужно подключить.

#include <RGBLed.h>

Затем создать объект для подключения, указав пины подключения светодиода к Arduino.

RGBLed led(RED_PIN, GREEN_PIN, BLUE_PIN, RGBLed::COMMON_ANODE or RGBLed::COMMON_CATHODE);

В дальнейшем мы можем, в основном цикле loop(), оперировать цветом светодиода, для этого в библиотеке есть функции:

  • Установить цвет
led.setColor(RGBLed::RED);
// или
led.setColor(255, 0, 0);
  • Выключить свет
led.off();
  • Установить яркость
led.brightness(RGBLed::RED, 50); // 50% brightness
// или
led.brightness(255, 0, 0, 50); // 50% brightness

Для того чтобы загорелся красный светодиод на 100 мс, достаточно в коде добавить строчку:

led.flash(RGBLed::RED, 100); // Interval 100ms
// или
led.flash(255, 0, 0, 100); // Interval 100ms

Также в библиотеки есть палитра цветов.

RED
GREEN
BLUE
MAGENTA
CYAN
YELLOW
WHITE

С библиотекой идут примеры использования. Например Вспышка:

#include <RGBLed.h>

RGBLed led(9, 10, 11, RGBLed::COMMON_CATHODE);

void setup() { }

void loop() {
    
    // Flash red color, interval 100ms
    led.flash(RGBLed::RED, 100);

    // Flash green color, interval 100ms
    led.flash(0, 255, 0, 100);

    // Flash red color, during 250ms with interval 100ms
    led.flash(RGBLed::RED, 250, 100);

    // Flash green color, during 250ms with interval 100ms
    led.flash(0, 255, 0, 250, 100);
}

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

Как видим из кода, у нас будем мигать светодиод красным и синим цветами, на подобии полицейской мигалки

Вывод.

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

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-009 - Модуль RGB светодиода (SMD). Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Протокол связи ESP-NOW. Применение для общения ESP32 или ESP8266. http://arduino-tex.ru/news/35/protokol-svyazi-esp-now-primenenie-dlya-obshcheniya-esp32-ili.html Константин Portal-PK 2021-02-26T16:52:41+03:00 Сегодня в статье узнаем, как использовать ESP-NOW для обмена данными между платами ESP32 (ESP8266), запрограммированными с помощью Arduino IDE. ESP-NOW - это протокол связи без установления соединения, разработанный Espressif, который поддерживает передачу коротких пакетов. Этот протокол позволяет нескольким устройствам легко общаться друг с другом.

Что такое ESP-NOW?

Что такое ESP-NOW?

Согласно веб-сайту Espressif, ESP-NOW - это «протокол, разработанный Espressif, который позволяет нескольким устройствам связываться друг с другом без использования Wi-Fi. Протокол аналогичен протоколу беспроводной связи с низким энергопотреблением 2,4 ГГц. Сопряжение между устройствами необходимо до их связи. После того, как соединение выполнено, соединение будет безопасным и одноранговым, без необходимости подтверждения связи».

Согласно веб-сайту Espressif, ESP-NOW - это «протокол, разработанный Espressif

Это означает, что после сопряжения устройств друг с другом соединение остается постоянным. Другими словами, если внезапно одна из ваших плат теряет питание или перезагружается, при перезапуске она автоматически подключится к своему узлу для продолжения связи.

ESP-NOW поддерживает следующие функции:

  • Зашифрованная и незашифрованная одноадресная передача;
  • Смешанные зашифрованные и незашифрованные одноранговые устройства;
  • Может передаваться полезная нагрузка до 250 байт;
  • Функция обратного вызова, которая может быть установлена для информирования прикладного уровня об успешной или неудачной передаче.

Технология ESP-NOW также имеет следующие ограничения:

  • Ограниченные зашифрованные одноранговые узлы. В режиме станции поддерживается не более 10 зашифрованных одноранговых узлов. И не более 6 в режиме SoftAP или SoftAP + Station;
  • Поддерживаются несколько незашифрованных одноранговых узлов, однако их общее количество должно быть меньше 20, включая зашифрованные одноранговые узлы;
  • Полезная нагрузка ограничена 250 байтами.

Проще говоря, ESP-NOW - это протокол быстрой связи, который можно использовать для обмена небольшими сообщениями (до 250 байт) между платами ESP32 и ESP8266.

ESP-NOW очень универсален, и вы можете иметь одностороннюю или двустороннюю связь с разными настройками.

ESP-NOW Односторонняя связь.

При одностороннем общении у вас могут быть такие сценарии:

  • Одна плата ESP32 отправляет данные на другую плату ESP32.

Одна плата ESP32 отправляет данные на другую плату ESP32

Эту конфигурацию очень легко реализовать, и она отлично подходит для

отправки данных с одной платы на другую, например, показаний датчиков

или команд включения и выключения для управления GPIO.

  • «Главный» ESP32 отправляет данные нескольким «подчиненным» ESP32.

«Главный» ESP32 отправляет данные нескольким «подчиненным» ESP32.

Одна плата ESP32 отправляет одинаковые или разные команды на разные

платы ESP32. Эта конфигурация идеально подходит для создания чего-то

вроде пульта дистанционного управления. В доме может быть несколько плат

ESP32, которые управляются одной основной платой ESP32.

  • Один «ведомый» ESP32, получающий данные от нескольких «мастеров»

Один «ведомый» ESP32, получающий данные от нескольких «мастеров»

Одна плата ESP32 отправляет одинаковые или разные команды на разные платы ESP32. Эта конфигурация идеально подходит для создания чего-то вроде пульта дистанционного управления. В доме может быть несколько плат ESP32, которые управляются одной основной платой ESP32.

Эта конфигурация идеальна, если вы хотите собрать данные с нескольких узлов датчиков на одну плату ESP32. Его можно настроить как веб-сервер, например, для отображения данных со всех других плат.

ESP-NOW Двусторонняя связь.

С ESP-NOW каждая плата может быть отправителем и получателем одновременно. Таким образом, вы можете установить двустороннюю связь между платами.

Например, у вас могут быть две платы, взаимодействующие друг с другом.

Например, у вас могут быть две платы, взаимодействующие друг с другом.

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

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

Таким образом, ESP-NOW идеально подходит для построения сети, в которой вы можете иметь несколько плат ESP32, обменивающихся данными друг с другом.

На этом с теорией все. Проверять работоспособность протокола ESP-NOW на практике будем в уроках ESP8266, ESP32.

Понравилась статья Протокол связи ESP-NOW. Применение для общения ESP32 или ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Распиновка ESP32-CAM AI-Thinker. Назначение GPIO. http://arduino-tex.ru/news/34/raspinovka-esp32-cam-ai-thinker-naznachenie-gpio.html Константин Portal-PK 2021-02-18T19:17:38+03:00 ESP32-CAM — это отладочная плата с чипом ESP32-S, камерой OV2640, слотом для карт microSD и несколькими GPIO для подключения периферийных устройств. В этом руководстве мы рассмотрим GPIO ESP32-CAM и способы использования контактов платы.

Распиновка ESP32-CAM AI-Thinker.

На рисунке ниже показана распиновка ESP32-CAM AI-Thinker.

распиновка ESP32-CAM AI-Thinker

На следующем рисунке показана принципиальная схема ESP32-CAM.

принципиальная схема ESP32-CAM

Вы можете скачать принципиальную схему в PDF-формате внизу статьи, в разделе «файлы для скачивания».

Контакты питания

ESP32-CAM имеет три GND пина (окрашены серым цветом) и два контакта питания (окрашены в красный цвет): 3,3 В и 5 В.

Вы можете подключить питание ESP32-CAM к 3,3 В или 5 В. Тем не менее, возникают ошибки в работе, при подключении питания ESP32-CAM к 3.3V, поэтому советую подключать ESP32-CAM к 5V pin питания.

Вывод питания

Также на шелкографии есть обозначение VCC (окрашен желтым прямоугольником). Вы не должны использовать этот вывод для питания ESP32-CAM. Это вывод предназначен для подключения внешних потребителей. Он может выводить 5 В или 3,3 В.

В нашем случае ESP32-CAM выдает 3,3 В независимо от того, питается он от 5 В или 3,3 В. Рядом с выводом VCC есть две контактные площадки. Одна обозначена как 3,3 В, а другая — как 5 В.

Также на шелкографии есть обозначение VCC

Если присмотреться, у вас должна быть перемычка на контактных площадках 3,3 В. Если вы хотите, чтобы на выводе VCC было выходное напряжение 5 В, вам необходимо распаять это соединение и запаять контактные площадки 5 В.

Последовательный интерфейс.

GPIO 1 и GPIO 3 — это последовательный интерфейс (контакты TX и RX). Поскольку ESP32-CAM не имеет встроенного программатора, вам необходимо использовать эти контакты для загрузки кода и связи с платой.

загрузить код в ESP32-CAM, можно использовать USB-to-UART TTL конвертер на PL2303HX

Чтобы загрузить код в ESP32-CAM, можно использовать USB-to-UART TTL конвертер на PL2303HX. Как пользоваться USB-to-UART TTL конвертером рассказываю в статье: USB-to-UART PL2303HX. Установка драйверов на Linux, Windows, Mac OS.

Для загрузки кода подключим PL2303HX к ESP32-CAM по схеме.Для загрузки кода подключим PL2303HX к ESP32-CAM по схеме.

Вы можете использовать GPIO 1 и GPIO 3 для подключения других периферийных устройств, датчиков, сенсоров и модулей, после загрузки кода. Однако вы не сможете открыть Serial Monitor и посмотреть, все ли в порядке с вашей настройкой.

GPIO 0

GPIO 0 определяет, находится ли ESP32 в режиме прошивки или нет. Этот GPIO имеет внутреннее подключение к подтягивающему резистору 10 кОм.

Когда GPIO 0 подключен к GND, ESP32 переходит в режим прошивки, и вы можете загружать код на плату.

После загрузки кода, для того чтобы ESP32 работала «нормально», вам просто нужно отключить GPIO 0 от GND.

Подключение карты MicroSD

Следующие контакты используются для взаимодействия с картой памяти microSD, когда она установлена в соответствующий разъем на плате.

MicroSD card ESP32
CLK GPIO 14
CMD GPIO 15
DATA0 GPIO 2
DATA1 / flashlight GPIO 4
DATA2 GPIO 12
DATA3 GPIO 13

Если вы не используете карту microSD, вы можете использовать эти контакты как обычные входы / выходы. Вы можете посмотреть руководство по распиновке ESP32, чтобы увидеть особенности этих контактов.

Все эти GPIO являются RTC и поддерживают ADC: GPIO 2, 4, 12, 13, 14 и 15.

Фонарик (GPIO 4)

ESP32-CAM имеет очень яркий встроенный светодиод, который может работать как вспышка при съемке.

ESP32-CAM имеет очень яркий встроенный светодиод, который может работать как вспышка при съемке.

Фонарик — этот светодиод внутренне подключен к GPIO 4.

Этот GPIO также подключен к слоту для карты microSD, поэтому у вас могут возникнуть проблемы при попытке использовать оба устройства одновременно — фонарик загорится при использовании карты microSD.

Примечание: один из наших читателей поделился, что у вас не будет этой проблемы, если вы инициализируете карту microSD следующим образом, потому что карта microSD не будет использовать эту линию данных. *

SD_MMC.begin("/sdcard", true)

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

GPIO 33 - встроенный красный светодиод

Рядом с кнопкой RST есть встроенный красный светодиод. Этот светодиод внутренне подключен к GPIO 33. Вы можете использовать этот светодиод, чтобы указать, что что-то происходит. Например, если Wi-Fi подключен, светодиод горит красным или наоборот.

Рядом с кнопкой RST есть встроенный красный светодиод. Этот светодиод внутренне подключен к GPIO 33.

Этот светодиод работает с перевернутой логикой, поэтому вы отправляете LOW сигнал на включение и HIGH сигнал, чтобы выключить его.

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

void setup() {
  pinMode(33, OUTPUT);
}
void loop() {
  digitalWrite(33, LOW);
  delay(500);
  digitalWrite(33, HIGH);
  delay(500);
}

Подключения камеры

Соединения между камерой и ESP32-CAM AI-Thinker показаны в следующей таблице.

OV2640 CAMERA ESP32 Variable name in code
D0 GPIO 5 Y2_GPIO_NUM
D1 GPIO 18 Y3_GPIO_NUM
D2 GPIO 19 Y4_GPIO_NUM
D3 GPIO 21 Y5_GPIO_NUM
D4 GPIO 36 Y6_GPIO_NUM
D5 GPIO 39 Y7_GPIO_NUM
D6 GPIO 34 Y8_GPIO_NUM
D7 GPIO 35 Y9_GPIO_NUM
XCLK GPIO 0 XCLK_GPIO_NUM
PCLK GPIO 22 PCLK_GPIO_NUM
VSYNC GPIO 25 VSYNC_GPIO_NUM
HREF GPIO 23 HREF_GPIO_NUM
SDA GPIO 26 SIOD_GPIO_NUM
SCL GPIO 27 SIOC_GPIO_NUM
POWER PIN GPIO 32 PWDN_GPIO_NUM

Итак, определение контактов для ESP32-CAM AI-Thinker в среде Arduino IDE должно быть следующим:

#define PWDN_GPIO_NUM  32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM  0
#define SIOD_GPIO_NUM  26
#define SIOC_GPIO_NUM  27
#define Y9_GPIO_NUM    35
#define Y8_GPIO_NUM    34
#define Y7_GPIO_NUM    39
#define Y6_GPIO_NUM    36
#define Y5_GPIO_NUM    21
#define Y4_GPIO_NUM    19
#define Y3_GPIO_NUM    18
#define Y2_GPIO_NUM    5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM  23
#define PCLK_GPIO_NUM  22

Заключение

Надеюсь, что вы нашли это руководство для GPIO ESP32-CAM полезным. Если у вас есть какие-либо советы или дополнительная информация о GPIO ESP32-CAM, напишите комментарий ниже.

Смотрите мои проекты с использованием ESP32-CAM:

Понравилась статья Распиновка ESP32-CAM AI-Thinker. Назначение GPIO? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-008 Лазерный модуль. Подключение к Arduino. http://arduino-tex.ru/news/33/ky-008-lazernyi-modul-podklyuchenie-k-arduino.html Константин Portal-PK 2021-02-04T13:08:45+03:00 Сегодня поговорим о подключении лазерного модуля KY-008 к Arduino. Его можно применить во многих проектах, связанных с Arduino. Но сейчас рассмотрим лишь то, как же его подключить к Arduino, поговорим о технике безопасности, при обращении с лазером.

Технические характеристики модуля KY-008.

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

Технические характеристики модуля KY-008.

Модуль расположен на плате с тремя выводами. Обозначения выводов:


  • Первый вывод – GND;
  • Средний вывод - не используется;
  • Последний вывод – сигнальный.

Характеристики модуля KY-008:

  • Питающее напряжение - 5 В;
  • Максимальная мощность - 5 мВт;
  • Длина волны - 650 нм;
  • Рабочий ток - не более 40 мА;
  • Размеры - 18,5 мм х 15 мм.
Техника безопасности при работе с лазерным модулем.

Техника безопасности при работе с лазерным модулем.

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

Схема подключения KY-008 к Arduino UNO.

Схема подключения KY-008 к Arduino UNO.


Схема подключения KY-008 к Arduino NANO.

Схема подключения KY-008 к Arduino NANO.

Первую ногу лазерного модуля подключаем к GND, вторую ногу не используем, третью ногу подключаем контакту 6.

Схема подключения KY-008 к Arduino NANO.

Примеры кода для KY-008 и Arduino.

Рассмотрим несколько вариантов кодов, к данной схеме.

Первый вариант.

#define LASER 6 // задаем имя для Pin лазера

void setup() {
  pinMode(LASER, OUTPUT); // инициализируем Pin выход
}

void loop() {
  for (int i = 0; i <= 5; i++) // мигание лазерным светодиодом
  {
    digitalWrite(LASER, HIGH);
    Delay(500);
    DigitalWrite(LASER, LOW);
    Delay(500);
  }
  delay(3000)
}

В коде, цикл for включает и выключает лазер.

Время задержки измеряется в миллисекундах, чем меньше время, тем чаще мигание светодиода.

Второй вариант с плавным включением лазера.

#define LASER 6 // задаем имя для Pin

void setup() {
   pinMode(LASER, OUTPUT); // инициализируем Pin выход
}

void loop() {
   for (int i=0; i<=255; i++) // плавное включение лазера
   {
      analogWrite(LASER, i);
      delay(5);
   }
   for (int i=255; i>=0; i--) //плавное выключение лазера
   {
      analogWrite(LASER, i);
      delay(5);
   }
}

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

Задержкой delay(5); можно управлять скоростью включения/выключения.

Следующим на очереди рассмотрим использование KY-008 в качестве сигнализации.

В данном примере будем использовать модули из набора: 37 in 1 Sensors Kit for Arduino. Набор датчиков и индикаторов для Arduino

Для этого понадобится:

Следующим на очереди рассмотрим использование KY-008 в качестве сигнализации.

Как это все будет работать, фоторезистор будет принимать лазерный луч от нашего модуля KY-008. Пока лазер попадает на KY-018 Фоторезистор, на его выводах будет выдаваться определенное напряжение. Как только что-то или кто-то преградит путь лазера к KY-018, на выводах фоторезистора не будет выдаваться напряжение, после чего зуммер проинформирует, что лазерный луч был пересечен. Сброс сигнализации будет осуществляться с помощью KY-004 Модуля тактовой кнопки.

Схема подключения сигнализации.

Схема подключения сигнализации.

Рассмотрим код, который нужно будет загрузить в Arduino.

#define LASER 6 // задаем имя для Pin лазера
#define SENSOR A0 // фоторезистор 
#define BUTTON 12 // кнопка 
#define BUZZER 10 // звуковой излучатель

int laserThreshold = 100;// значение при котором сробатывае сигнал

void setup() {
  pinMode(LASER, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  Serial.begin(9600);
}
boolean alarmState = false;

void loop() {
  if (! alarmState) {
    delay(500); 
    digitalWrite(LASER, HIGH);
    delay(500);
    unsigned long startTime = millis();
    while (millis() - startTime < 1000) {
      int sensorValue = analogRead(SENSOR);
      Serial.println(sensorValue);
      if (sensorValue > laserThreshold) {
        alarmState = true;
        break;
      }
      delay(10);
    }
    digitalWrite(LASER, LOW);
  }
  else {
    tone(BUZZER, 440);
    if (! digitalRead(BUTTON)) {
      alarmState = false; noTone(BUZZER);
    }
    delay(10);
  }
}

На этом можно заканчивать, лазерный модуль KY-008, можно применить во множестве проектов, с помощью него так же можно передавать и информацию на другое устройство, рисовать интересные фигуры и фракталы. Можете сами углубиться в эту тему и открыть множество нового для себя. Удачи вам в изучении Arduino и программирования!

Понравился Урок KY-008 Лазерный модуль. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Wi-Fi машинка с камерой на ESP32-CAM. http://arduino-tex.ru/news/32/wi-fi-mashinka-s-kameroi-na-esp32-cam.html Константин Portal-PK 2021-02-03T13:18:51+03:00 Wi-Fi машинка с камерой сегодня не новинка, и её можно купить в магазине. Но стоит она не дёшево. Так же можно купить конструктор на базе Arduino и Raspberry Pi. Которые так же позволяет управлять с помощью Wi-Fi и передавать изображение. Это достаточно неплохой конструктор, минусом является большое количество проводов и сложная схемы подключения. Сегодня в проекте мы соберём Wi-Fi машинку с камерой, используя минимальное количество компонентов. Что упростить схему подключения и сборку.

Комплектующие для сборки машины на ESP32-CAM.

Я уже делал Wifi машинку на ESP8266: «Самодельная Wifi машинка на NodeMCU. Машина делает дрифт». А также делал машинку на Ардуино. Чтобы не собирать машинку полностью шоссе возьму из старого проекта: «Машинка на радиоуправлении. Arduino + nrf24l01 + пульт.»

машинка на Arduino радио модуле nrf24l01 с пультом управления

Для реализации проекта машинка с камерой нам понадобятся следующие компоненты:

Кратко о робоплатформе.

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

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

Описание драйвера L298n

Описание драйвера L298n:

  • OUT1 и OUT2 – разъёмы для подключения первого щёточного двигателя;
  • OUT3 и OUT4 – разъёмы для подключения второго щёточного двигателя;
  • VSS – вход для питания двигателей (максимальный уровень +35V);
  • GND – общий провод (не забываем соединить с аналогичным входом Arduino);
  • Vs – вход для питания логики +5V. Через него непосредственно запитывается сама микросхема L298N. Есть ещё второй способ питания, при котором 5V для L298N берётся от встроенного в модуль стабилизатора напряжения. В таком случае на разъём подаётся только питание для двигателей (Vss), контакт Vs остаётся не подключенным, а на плате устанавливается перемычка питания от стабилизатора, который ограничит питающее моторы напряжение до приемлемых 5V.
  • IN1, IN2 – контакты управления первым щёточным двигателем.
  • IN3, IN4 – контакты управления вторым щёточным.
  • ENA, ENB –контакты для активации / деактивации первого и второго двигателей. Подача логической единицы на эти контакты разрешает вращение двигателей, а логический ноль – запрещает.

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

Но прежде чем собирать машинку, нежно загрузить код в ESP32-CAM.

Описание кода для машинки на ESP32-CAM.

Код для машинки с камерой можно скачать внизу статьи в разделе «файлы для скачивания».

Перед загрузкой кода необходимо указать подключение к вашей WI-Fi сети.

const char* ssid = "Wi-Fi";
const char* password = "12345678";

И в принципе больше настраивать ничего не нужно. Самое главное – правильно выбрать плату при загрузке кода.

правильно выбрать плату при загрузке кода.

Загрузка кода.

Для того, чтобы загрузить код, используя USB-to-UART конвертор PL2303HX. Как им пользоваться рассказал в статье: «USB-to-UART PL2303HX. Установка драйверов на Linux, Windows, Mac OS».

Для загрузки кода подключим PL2303HX к ESP32-CAM по схеме.

Для загрузки кода подключим PL2303HX к ESP32-CAM по схеме.

Нажмём на кнопку «загрузить».

Нажмём на кнопку «загрузить».

И в принципе больше делать ничего не нужно, после компиляции код автоматически загрузится в плату.

Схема подключения ESP32-CAM, L298n, servo.

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

Схема подключения ESP32-CAM, L298n, servo

Схема подключения ESP32-CAM, L298n, servo достаточно простая и понятная. Но все-таки хотелось бы напомнить, если вдруг двигатель будет вращаться не в ту сторону, нужно поменять местами информационные провода, подключения к драйверу.

Теперь можно приступить к сборке машинки.

Сборка машинки.

Так как у меня машинка частично собрана, установлены драйвера, подключены мотор-редукторы, установленные аккумуляторы

Так как у меня машинка частично собрана, установлены драйвера, подключены мотор-редукторы, установленные аккумуляторы, осталось установить сервопривод и ESP32-CAM.

С помощью 2 видов М3 прикрепляю сервопривод.

С помощью 2 видов М3 прикрепляю сервопривод.

С помощью термоклея приклеиваю качалку корпусу ESP32.

С помощью термоклея приклеиваю качалку к корпусу ESP32.

После чего нужно разделить провода сервопривода, отделив информационный провод.

После чего нужно разделить провода сервопривода, отделив информационный провод.

Зачем подключают все провода к ESP32-CAM по схеме, которую рассмотрели выше.

Зачем подключают все провода к ESP32-CAM по схеме, которую рассмотрели выше.

Устанавливаем микроконтроллер корпус. Но, к сожалению, задняя крышка не закрылась, помешались провода. Пришлось с помощью нано – инструмента исправить досадное упущение.

Пришлось с помощью нано – инструмента исправить досадное упущение.

После всех манипуляций получился вот такой результат.

После всех манипуляций получился вот такой результат.

При езде по скользкому полу: ламинату, линолеуму. Время от времени пробуксовывают колеса. И машинка постоянно заворачивает то в одну сторону, то в другую. Для улучшения сцепления на колеса надел канцелярские резинки.

Универсальное устройство поиска потерянных носков под кроватью.

Универсальное устройство поиска потерянных носков под кроватью.

Немного юмора по данной теме. Wi-Fi машинка с камерой – отличное устройство для поиска потерянных носков в тёмных местах, особенно под кроватью. Там можно найти не только носки, но и достаточно неожиданные вещи. Главное в это время не вести прямую трансляцию, а то мало ли что могла упасть под кровать. =)

Подведём итоги.

Несмотря на то, что машинка получилась достаточно функциональная и простая в сборке. Есть пару минусов:

  • Управление с помощью веб-интерфейс накладывает свои отпечатки. Нет возможности делать перемещение при нажатии на кнопку. Поэтому перемещение происходит рывками, либо в постоянном режиме.
  • Так же нужно постоянно задавать в браузере IP адрес устройства.
  • Сложность в формирование веб-страницы. Также приводит к не очень красивому интерфейса управления.

Ну, есть и плюсы. Основной плюс – это возможность управлять с любого устройства: с телефона, планшета или персонального компьютера.

Есть желание сделать приложение для телефона, чтобы управлять, стало ещё удобнее.

Понравился проект Wi-Fi машинка с камерой на ESP32-CAM? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Распиновка ESP32, какие контакты GPIO можно использовать, а какие нет? http://arduino-tex.ru/news/31/raspinovka-esp32-kakie-kontakty-gpio-mozhno-ispolzovat-a.html Константин Portal-PK 2021-01-29T14:10:33+03:00 При создании проектов на ESP32 часто возникает вопрос, какие контакты GPIO можно использовать, а какие – нет. Чип ESP32 имеет 48 контактов с различными функциями. Не все контакты доступны на различных платах, ESP32. Некоторые контакты на различных отладочных платах нельзя использовать.

Часто возникают вопросы, какие контакты GPIO можно использовать, а каких стоит избегать? В данной статье как раз это и рассмотрим.

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

распиновку ESP-WROOM-32

Примечание. Не GPIO доступны на всех отладочных платах. Но, каждый конкретно GPIO работает одинаково независимо от использованной вами платы.

Периферийные устройства ESP32.

К периферийным устройствам ESP32 относятся:

  • 18 Каналов аналого-цифрового преобразователя (АЦП )
  • 3 Интерфейса SPI3
  • Интерфейс UART2
  • Интерфейс I2C16
  • Выходные каналы ШИМ
  • 2 Цифро-аналоговых преобразователя (ЦАП)
  • 2 Интерфейса I2S10
  • Емкостные считывающие GPIO

Функции АЦП (аналого-цифровой преобразователь) и ЦАП (цифро-аналоговый преобразователь) назначены строго определённым пинам. Тем не менее, вы сами решаете, какие контакты будут отведены под интерфейсы UART, I2C, SPI, PWM и т. д. - они определяются в коде прошивки. Это возможно благодаря функции мультиплексирования чипа ESP32.

Существуют пины, назначенные по умолчанию, как показано на следующем рисунке (это пример платы ESP32 DEVKIT V1 с 36 контактами - расположение контактов может меняться в зависимости от производителя). Вы можете их переопределять.

ESP32 DEVKIT V1 с 36 контактами

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

Контакты, выделенные зеленым цветом, можно использовать. Те, которые выделены желтым, можно использовать, но вам нужно обратить внимание, потому что они могут иметь неожиданное поведение, в основном, при загрузке. Контакты, выделенные красным, не рекомендуется использовать в качестве входов или выходов.

GPIO

Ввод

Вывод

Заметки

0

pulled up

ОК

outputs PWM signal at boot

1

Контакт TX

ОК

вывод отладки при загрузке

2

ОК

ОК

подключен к встроенному светодиоду

3

ОК

Вывод RX

ВЫСОКИЙ при загрузке

4

ОК

ОК


5

ОК

ОК

outputs PWM signal at boot

6

х

х

шина SPI

7

х

х

шина SPI

8

х

х

шина SPI

9

х

х

шина SPI

10

х

х

шина SPI

11

х

х

шина SPI

12

ОК

ОК

загрузка не работает, если потянут к HIGH

13

ОК

ОК


14

ОК

ОК

outputs PWM signal at boot

15

ОК

ОК

outputs PWM signal at boot

16

ОК

ОК


17

ОК

ОК


18

ОК

ОК


19

ОК

ОК


21

ОК

ОК


22

ОК

ОК


23

ОК

ОК


25

ОК

ОК


26

ОК

ОК


27

ОК

ОК


32

ОК

ОК


33

ОК

ОК


34

ОК


только ввод

35

ОК


только ввод

36

ОК


только ввод

39

ОК


только ввод

Пины только для входа.

GPIO с 34 по 39 являются GPIO - только входные. Эти контакты не имеют внутренних подтягивающих или понижающих резисторов. Они не могут быть использованы как выходы, поэтому используйте эти контакты только как входы:

  • GPIO 34
  • GPIO 35
  • GPIO 36
  • GPIO 39

SPI-flash встроена в ESP-WROOM-32.

От GPIO 6 до GPIO 11 доступны в некоторых платах ESP32. Однако эти пины подключены к встроенной флэш-памяти SPI на микросхеме ESP-WROOM-32 и их не рекомендуется использовать для других целей. Назначение этих пинов:

  • GPIO 6 (SCK / CLK)
  • GPIO 7 (SDO / SD0)
  • GPIO 8 (SDI / SD1)
  • GPIO 9 (SHD / SD2)
  • GPIO 10 (SWP / SD3)
  • GPIO 11 (CSC / CMD)

Емкостные сенсорные GPIO.

ESP32 имеет 10 внутренних емкостных сенсорных датчиков. Они могут отслеживать всё, что содержит электрический заряд, например, они могут обнаруживать изменения, возникающие при касании пальцами GPIO. Эти контакты могут быть легко встроены в датчики касания и заменять механические кнопки. Емкостные сенсорные контакты также могут быть использованы для пробуждения ESP32 от глубокого сна.

Внутренние сенсорные датчики подключены к этим GPIO:

  • T0 (GPIO 4)
  • T1 (GPIO 0)
  • T2 (GPIO 2)
  • T3 (GPIO 15)
  • T4 (GPIO 13)
  • T5 (GPIO 12)
  • T6 (GPIO 14)
  • T7 (GPIO 27)
  • T8 (GPIO 33)
  • T9 (GPIO 32)

Аналого-цифровой преобразователь (АЦП).

ESP32 имеет входные каналы АЦП 18 x 12 бит. Это GPIO, которые можно использовать в качестве АЦП:

  • ADC1_CH0 (GPIO 36)
  • ADC1_CH1 (GPIO 37)
  • ADC1_CH2 (GPIO 38)
  • ADC1_CH3 (GPIO 39)
  • ADC1_CH4 (GPIO 32)
  • ADC1_CH5 (GPIO 33)
  • ADC1_CH6 (GPIO 34)
  • ADC1_CH7 (GPIO 35)
  • ADC2_CH0 (GPIO 4)
  • ADC2_CH1 (GPIO 0)
  • ADC2_CH2 (GPIO 2)
  • ADC2_CH3 (GPIO 15)
  • ADC2_CH4 (GPIO 13)
  • ADC2_CH5 (GPIO 12)
  • ADC2_CH6 (GPIO 14)
  • ADC2_CH7 (GPIO 27)
  • ADC2_CH8 (GPIO 25)
  • ADC2_CH9 (GPIO 26)

Примечание: контакты ADC2 нельзя использовать при использовании Wi-Fi. Поэтому, если вы используете Wi-Fi, и у вас возникают проблемы с получением значения от GPIO ADC2, вы можете вместо этого рассмотреть возможность использования GPIO ADC1. Это должно решить вашу проблему.

Входные каналы АЦП имеют разрешение 12 бит. Это означает, что вы можете получить аналоговые показания в диапазоне от 0 до 4095, в которых 0 соответствует 0 В, а 4095 - 3,3 В. У вас также есть возможность установить разрешение ваших каналов в коде, а также диапазон АЦП.

Выводы АЦП ESP32 работают не линейно. Вы не сможете отличить 0 от 0,1 В или от 3,2 до 3,3 В. Вы должны помнить об этом при использовании контактов АЦП. И получим поведение, подобное показанному на следующем рисунке:

Выводы АЦП ESP32 работают не линейно. Вы не сможете отличить 0 от 0,1 В или от 3,2 до 3,3 В.

Цифро-аналоговый преобразователь (ЦАП).

На ESP32 имеются два 8-битных канала ЦАП для преобразования цифровых сигналов в аналоговые выходные сигналы напряжения. Пины ЦАП:

  • ЦАП1 (GPIO25)
  • ЦАП2 (GPIO26)

RTC GPIO.

На ESP32 есть поддержка RTC GPIO. GPIO, маршрутизируемые в подсистему с низким энергопотреблением RTC, можно использовать, когда ESP32 находится в состоянии глубокого сна. Эти RTC GPIO могут использоваться для выхода ESP32 из глубокого сна, когда работает сопроцессор Ultra Low Power (ULP). Следующие GPIO могут быть использованы в качестве внешнего источника пробуждения.

  • RTC_GPIO0 (GPIO36)
  • RTC_GPIO3 (GPIO39)
  • RTC_GPIO4 (GPIO34)
  • RTC_GPIO5 (GPIO35)
  • RTC_GPIO6 (GPIO25)
  • RTC_GPIO7 (GPIO26)
  • RTC_GPIO8 (GPIO33)
  • RTC_GPIO9 (GPIO32)
  • RTC_GPIO10 (GPIO4)
  • RTC_GPIO11 (GPIO0)
  • RTC_GPIO12 (GPIO2)
  • RTC_GPIO13 (GPIO15)
  • RTC_GPIO14 ( GPIO13)
  • RTC_GPIO15 (GPIO12)
  • RTC_GPIO16 (GPIO14)
  • RTC_GPIO17 (GPIO27)

PWM.

ШИМ-контроллер ESP32 имеет 16 независимых каналов, которые можно настроить для генерации ШИМ-сигналов с различными свойствами. Все выводы, которые могут выступать в качестве выходов, могут использоваться в качестве выводов ШИМ (GPIO с 34 по 39 не могут генерировать ШИМ).

Чтобы установить сигнал ШИМ, вам необходимо определить эти параметры в коде:

  • Частота сигнала;
  • Рабочий цикл;
  • ШИМ-канал;
  • GPIO, на которых вы хотите вывести сигнал.

I2C.

При использовании ESP32 с Arduino IDE следует использовать выводы ESP32 I2C по умолчанию (поддерживаются библиотекой Wire):

  • GPIO 21 (SDA)
  • GPIO 22 (SCL)

Если вы хотите использовать другие контакты, вам просто нужно вызвать:

Wire.begin(SDA, SCL);

SPI.

Пины для SPI по умолчанию:

PI

MOSI

MISO

CLK

CS

VSPI

GPIO 23

GPIO 19

GPIO 18

GPIO 5

HSPI

GPIO 13

GPIO 12

GPIO 14

GPIO 15

Прерывания.

Все GPIO могут быть настроены для обработки прерываний.

Микросхема ESP32 использовать пины при загрузке:

  • GPIO 0
  • GPIO 2
  • GPIO 4
  • GPIO 5 (во время загрузки должен быть ВЫСОКИЙ)
  • GPIO 12 (во время загрузки должно быть НИЗКОЕ)
  • GPIO 15 (во время загрузки должен быть ВЫСОКИЙ)

Они используются для перевода ESP32 в режим загрузчика или в режим перепрошивки. На большинстве плат разработки со встроенным USB / Serial вам не нужно беспокоиться о состоянии этих контактов. Плата переводит контакты в правильное состояние для перепрошивки или режима загрузки.

Однако, если к этим контактам подключены периферийные устройства, у вас могут возникнуть проблемы при попытке загрузить новый код, перепрошить ESP32 или перезагрузить плату.

Пины с изменением сигнала при загрузке.

Некоторые GPIO изменяют свое состояние на HIGH или выводят ШИМ-сигналы при загрузке или сбросе. Это означает, что если у вас есть выходы, подключенные к этим GPIO, вы можете получить неожиданные результаты при перезагрузке или загрузке ESP32.

  • GPIO 1
  • GPIO 3
  • GPIO 5
  • GPIO 6 - GPIO 11 (подключены к встроенной флэш-памяти SPI ESP32 - использовать не рекомендуется).
  • GPIO 14
  • GPIO 15

Пин (EN).

Enable (EN) - Вы можете использовать этот контакт, подключенный к кнопке, например, для перезапуска ESP32.

Допустимый ток у GPIO.

Абсолютный максимальный ток, потребляемый GPIO, составляет 40 мА.

ESP32 Встроенный датчик Холла.

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

ESP32 также имеет встроенный датчик Холла

Заключение.

Мы надеемся, что вы нашли это справочное руководство по GPIO ESP32 полезным. Если у вас есть дополнительные советы по GPIO ESP32, поделитесь ими, написав комментарий ниже.

Смотрите так же уроки по ESP32:

Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE

Урок 2. Подключаем DHT11, DHT22 к ESP32, ESP8266. Показание на веб-странице.

Урок 3. ESP32 и ESP8266 с выводом статуса на веб-страницу и на OLED дисплей.

Понравилась статья Распиновка ESP32, какие контакты GPIO можно использовать, а какие нет? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Часы – матрица на Arduino и адресных светодиодах WS2812B. http://arduino-tex.ru/news/30/chasy-matrica-na-arduino-i-adresnyh-svetodiodah-ws2812b.html Константин Portal-PK 2021-01-21T13:24:18+03:00 Это уже 2 версия часов матрицы на Arduino и адресных светодиодах WS2812B. Первый вариант собирал год назад. Допустил пару ошибок. От выбора пластика до реализации рассеивателя. Но обо всем по порядку.

Печать деталей и сборка корпуса.

Распечатался детали для часов. 3D модели сам не делал, а взял готовый из интернета. Вы можете скачать модели со страницы автора или внизу страницы в разделе «файлы для скачивания».

Печатаю я на своём принтере Anet A8 на стекло. Это достаточно недорогой, но эффективный способ печати.

чтобы деталь держалась хорошо, используя клей ПВА, наношу его на стекло

Для того, чтобы деталь держалась хорошо, используя клей ПВА, наношу его на стекло. Но перед тем как печатать данный проект, у меня закончился клей, которым я мазал стекло. И решил я нанести столярный клей.

 И решил я нанести столярный клей.

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

При смывании клей не отходил, становился белым.

Это меня очень сильно расстроила. После чего положил заготовки в горячую воду и оставил на ночь. Клей так и не отошёл. Хороший клей. Но нельзя этих целей.

Принял решение покрасить часы темно – серым цветом, развёл краску.

Принял решение покрасить часы темно – серым цветом, развёл краску.

Цвет подбирать помогал сын. В итоги вот такой оттенок получился, мне очень понравился. С помощью тампона из губки нанёс краску на корпус часов в 2 слоя. И вот что получилось. Теперь можно приступить к сборке часов.

Теперь можно приступить к сборке часов.

Сборка корпуса часов матрицы.

Приступаю к сборке часов. Для этого нам понадобится светодиодная лента, 60 светодиодами на метр.

 светодиодная лента, 60 светодиодами на метр

Клеим на 2 плоские пластины-основания. Таким образом, чтобы подключение ленты была в левом нижнем углу. И укладываем ленту в виде зигзага. Важно на данном этапе не перепутать направление ленты.

Клеим на 2 плоские пластины-основания

Беру шлейф от компьютера, который раньше использовали для подключения CD-rom. Разделяю на 3 проводника. Нарезаю проводники нужной длины. И зачищаю края каждого провода.

Беру шлейф от компьютера, который раньше использовали для подключения CD-rom

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

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

Подключаю к ESP8266, в которой загружен код из предыдущего проекта: «Елочная гирлянда на ESP8266 (ESP32). Управление с приложения».

 Подключаю к ESP8266, в которой загружен код из предыдущего проекта

Тестирование показала, что все сделано правильно, и светодиоды светятся. Устанавливаю решётки поверх светодиодной ленты. На светодиоды нанёс термоклей. Чтобы усилить эффект рассеивания.

Устанавливаю решётки поверх светодиодной ленты. На светодиоды нанёс термоклей.

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

После чего приступает к сборке корпуса.

На решётку корпуса устанавливаю матовый пластик, который вырезал из коробки под нитки. Коробку под нитки купил незадорого в фикс-прайсе.

На решётку корпуса устанавливаю матовый пластик, который вырезал из коробки под нитки.

Установил внутреннюю часть со светодиодами в корпус. Затем поставил боковые накладки, которые закрывают провода. Поверх накладок устанавливаются ножки. И с помощью винтов М3 длинной 10 мм. Закрепляю корпус и ножки. По центру часов устанавливаю корпус под электронику, который также служит фиксатором конструкции.Все скрепляю винтами М3.

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

Проверка электроники часов на Arduino.

Пришло время проверить работоспособность часов на Arduino и адресных светодиодах WS2812B. Для этого собираем электронику на макетной плате.

работоспособность часов на Arduino и адресных светодиодах WS2812B.

Для проекта на Arduino понадобится следующая электроника:

Схема подключения часов матрицы на Arduino NANO.

Для тестирования и проверки кода часов матрицы собрал электронику на макетной плате по схеме.

Схема подключения часов матрицы на Arduino NANO.

Протестировал и поправил код, и вот что получилось.

Протестировал и поправил код, и вот что получилось.

Пришло время установить электронику в корпус часов. Плату решил использовать Arduino Pro Mini. Так как они есть у меня в наличии, и занимает меньше места в корпусе часов.

Установка электроники в корпус часов.

Подготовил всю необходимую электронику.Нарезал провода нужной длины. На необходимые проводники установил разъём Dupont. Загрузил прошивку в Arduino Pro Mini. Как это сделать, читайте в статье: «Прошивка Arduino Pro Mini с помощью конвертера PL2303HX». И после чего приступим к пайке.

 На необходимые проводники установил разъём Dupont. Загрузил прошивку в Arduino Pro Mini.

Схема подключения часов на Arduino Pro Mini и светодиодах WS2812B.

Паяем электронику по схеме.

Схема подключения часов на Arduino Pro Mini и светодиодах WS2812B.

Вот такой результат получился, осталось уложить все в корпус часов.

Вот такой результат получился, осталось уложить все в корпус часов. Чтобы Arduino Pro Mini и DS-3231 не стучали об корпус

Чтобы Arduino Pro Mini и DS-3231 не стучали об корпус, приклеил их на двухсторонний вспененный скотч.

Чтобы Arduino Pro Mini и DS-3231 не стучали об корпус, приклеил их на двухсторонний вспененный скотч.

Тактовые кнопки устанавливают на место и креплю специальными пластинами, распечатанными заранее. Устанавливаю крышку на бокс с электроникой.А теперь можно подключить часы к питанию и приступить к финальному тестированию.

Тактовые кнопки устанавливают на место и креплю специальными пластинами, распечатанными заранее.

А сейчас немного о прошивке часов.

Код часов на Arduino и светодиодах WS2812B.

Для начала необходимо установить 2 библиотеки: DS3232RTC –для работы с модулем реального времени DS3231 и FastLED – для управления адресными светодиодами WS2812B.

Внимание! При установке библиотеки FastLED будьте внимательны нужно ставить версию, не больше, чем 3.3.2. Если у вас уже установлена более поздняя версия библиотеки, её нужно переустановить.

Установить эти библиотеки можно из файла. Скачать их можно внизу статьи в разделе "файлы для скачивания".

Также установить данные библиотеки можно через менеджер библиотек. Для этого в Arduino IDE переходим в пункт меню Скетч > Подключить библиотеку > Управлять библиотеками ...

Для этого в Arduino IDE переходим в пункт меню Скетч


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

Отфильтруйте результаты поиска, набрав «DS3232RTC».Устанавливаем последнюю версию библиотеки.

Отфильтруйте результаты поиска, набрав «DS3232RTC». Устанавливаем последнюю версию библиотеки.

Затем установить библиотеку FastLED для этого отфильтруйте результаты поиска, набрав «FastLED».

Затем установить библиотеку FastLED для этого отфильтруйте результаты поиска, набрав «FastLED».

Выбираем версию 3.3.2. и устанавливаем. Если у вас была установлена более новая версия, её нужно переустановить что можно сделать через менеджер – библиотека. Аналогичным образом.Выбрать нужную версию и нажать, установить. Ваша версия библиотеки будет переустановлена на ту версию, которую вы выбрали.

Модуль DS-3231 подключён по шине I2C, по этому контакт SDA подключаем к пину А4 Arduino и SCL подключаем к A5.

#define LED_PIN 6                     // Пин поключения ленты 6

Контакт данных ленты подключаем к 6 пину Arduino. Тактовые кнопки подключаем к 3 и 4 пинам Arduino.

byte button_1 = 4;  // кнопка
byte button_2 = 3;  // кнопка

Данные настройки можно оставить без изменений, но про них нужно знать.

После чего можно приступить к загрузке скетча в Arduino. Код мы рассмотрели, тут ничего сложного нет, а сейчас приступим к сравнению предыдущей версии часов с текущей.

Сравнение первой версии часов с данной реализацией.

Подобные часы я уже собирал около года назад, но допустил ряд ошибок:

  • Напечатал пластиком PLA.И буквально через месяц пластик начал трескаться, и часы потеряли свою привлекательность. Данную версию напечатал пластиком PETG.
  • Размер матрицы не позволяла водить время в формате 24 часа, что было исправлено в данном весе часов.
  • В первой версии не было фальш – панелей, которые прикрывают провода. Что исправлено данной версии.
  • В данной версии также реализовал вывод температуры со встроенного датчика модуля часов DS3231.Данные не очень точные, это связано с тем, что модуль установлен в корпус. И реагировать на изменение температуры будет медленно. Но в помещении нет резких перепадов температуры, и данной точности будет достаточно.
  • Покрасил корпус часов матовым серым цветом, что делать часы более красивыми.

Сравнение первой версии часов с данной реализацией.

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

собрать часы – матрица на Arduino и адресных светодиодах WS2812B.

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

Понравился проект Часы – матрица на Arduino и адресных светодиодах WS2812B? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Елочная гирлянда на ESP8266 (ESP32). Управление с приложения. http://arduino-tex.ru/news/29/elochnaya-girlyanda-na-esp8266-esp32-upravlenie-s-prilozheniya.html Константин Portal-PK 2020-12-29T15:07:53+03:00 И вот наступает новый год, и чтобы украсить новогоднюю елку сделал новую версию гирлянды. По многочисленным просьбам, данная версия кода подходит как для ESP8266 (NodeMCU), так и для старшего брата ESP32. Код переписал полностью, так как предыдущая библиотека, которую я использовал для реализации новогодней смарт-гирлянды, не совместима с ESP32. Изменения затронули не только код для ESP, но также приложение. Поменял оформление, доработал код, что привело к более стабильной и быстрой работе приложения. А сейчас обо всем по порядку.

Функции гирлянды:

1. 15 световых эффектов (можно расширять).

2. Авторежим. Автоматически переключает режимы по кругу. Продолжительность одного режима настраивается в прошивке.

3. Настройка яркости.

4. Управление сенсорной кнопкой: переключение режимов и изменение яркости.

5. Выбор цвета звезды. Палитра из 6 цветов.

Паяем гирлянду.

Заказал спаянную гирлянду на адресных светодиодах WS2812, но как бывает, посылка застряла где-то в пути. И решил спаять гирлянду своими руками. Есть в наличии штучные светодиоды WS2812. Приступил я к пайке, сборке, поклейке обоев, покраске стен. Ой! Что-то я не о том.

старый шлейф от ПК

Так вот, взял я старый шлейф от ПК, который использовался для подключения флопиков и CD-рома к материнской плате, порезал его на лоскутки, вернее на проводники нужной длины, по 3 проводника в каждом, зачистил с обоих концов. Взял в руки паяльник и спаял светодиоды в одну гирлянду.

на проводники нужной длины, по 3 проводника в каждом

Дальше началось самое сложное, надо было сделать рассеиватель. В прошлой версии: Елочная смарт-гирлянда с управлением через мобильное приложение, приклеивал 2 куска акрила молочного цвета. Но этот вариант меня не устроил. В этом году сделал свою пресс-форму и порисовал каждый светодиод в термоклей.

Для изготовления пресс-формы разрезал шприц на 5 мл, благо шприцы остались от создания проекта: «Самодельный Лазерный гравёр с ЧПУ, в домашних условиях». Так вот, нарезал я корпус шприца на кольца одинаковой длины. С помощью напильника сделал углубления для укладки проводов, чтобы светодиод опускался ниже верхнего бортика пресс-формы.

Для изготовления пресс-формы разрезал шприц на 5 мл

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

брызнул на форму силиконовой смазкой

Установил светодиод в форму и, с помощью клеевого пистолета, нанес клей, сперва на заднюю сторону светодиода, потом с передней части заполнил форму до краев.

Установил светодиод в форму и, с помощью клеевого пистолета, нанес клей

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

нажал пальцами с двух сторон, чтобы клей выдавило

Затем приступаю к самому веселому этапу сборки. Начинаю выдавливать заготовку из формы.

Начинаю выдавливать заготовку из формы

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

И так повторяем с каждым светодиодом.

Затем, берем кусачки, удаляем все неровности. У меня получилась вот такая кучка от 45 светодиодов.

Затем, берем кусачки, удаляем все неровности

Электроника для управления гирляндой на ESP8266 (ESP32).

В этом году использую ту же самую электронику для гирлянды. И ее укладываю в ту же коробку.

Электроника для управления гирляндой на ESP8266 Тут ничего нового.

Схема подключения новогодней гирлянды на ESP8266.

Схема подключения новогодней гирлянды на ESP8266.

Как видим, подключение осталось таким же. Но я добавил версию для ESP32. Для ESP32 все то же самое, но без сенсорной кнопки. Я её вырезал из программы. Это связано с тем, что с этим куском кода были небольшие проблемы, а времени разбираться уже нет. И поэтому версия новогодней гирлянды на ESP32 без возможности внешнего управления. Но в следующей версии гирлянды постараюсь все подправить и добавить еще новых функций и возможностей.

Схема подключения новогодней гирлянды на ESP32.

Схема подключения новогодней гирлянды на ESP32.

С подключением разобрались. Давайте посмотрим, что же изменилось в приложении.

Приложение для управления гирляндой на ESP8266 (ESP32).

Приложение для управления гирляндой на ESP8266 (ESP32)

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

Регулирование яркости изменил, и добавил вывод значения в процентах. А изменение скорости эффектов убрал. По мне, эта функция не нужна. А как вы считаете? Пишите ваше мнение в комментариях.

А сейчас самое главное изменение. Добавил возможность менять цвет звезды. Как это работает? Определенное количество светодиодов, с краю гирлянды, помещаем в звезду, у меня там 5 шт. И в приложении мы можем менять цвет звезды, не зависимо от эффекта, включённого для гирлянды. Мне уже задали знакомые и друзья вопрос: «А можно для звезды режимы мигания добавить?» Да, можно. Но я не успел это сделать. Будет в следующей версии.

http://cnc-tex.ru/news/10/samodelnyi-lazernyi-graver-s-chpu-v-domashnih.html

На экране настроек все урезал до минимума. Только оставил добавление IP устройства. Есть наработки по расширению функционала, но об этом вы можете узнать, подписавшись на меня на boosty.

А сейчас самое интересное, что же изменилось в скетче? Почему появилась возможность сделать универсальную прошивку ESP8266 (ESP32)?

Код (скетч) Новогодней гирлянды на ESP8266 (ESP32).

Как писал вначале статьи, библиотеку пришлось поменять, чтобы была возможность использовать прошивку и для ESP32. В библиотеке WS2812FX много эффектов, но она менее стабильна, чем библиотека FastLED. И при этом библиотека FastLED отлично работает с ESP32, но эффектов в комплекте нет. Пришлось поискать в интернете. Подправить несколько эффектов для работы с гирляндой.

Также в прошивке стало больше настроек и возможностей. И при этом прошивать стало проще.Скачать скетч можно внизу статьи в разделе "Файлы для скачивания".

Описание кода.

Сперва устанавливаем библиотеки необходимые для работы с Wi-Fi и работы с HTTP-запросами ESP8266 и ESP32.

#if defined(ESP8266)
#include <ESP8266WiFi.h>        //Содержится в пакете
#include <ESP8266WebServer.h>   //Содержится в пакете
#endif
#if defined(ESP32)
#include <WiFi.h>
#include <WebServer.h>
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#endif

Затем подключаем библиотеку "FastLED.h".

#include "FastLED.h"
FASTLED_USING_NAMESPACE

Делаем проверку версии библиотеки, и если она ниже, чем FastLED 3.1, то выводим предупреждение.

#if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
#warning "Requires FastLED 3.1 or later; check github for latest code."
#endif

Определяем, к каким пинам подключим кнопку и светодиоды.

#ifdef ESP8266
#define DATA_PIN    6     // пин для вывода на гирлянду
byte button_rejim = D2;  // пин подключения кнопки
#else
#define DATA_PIN    19   // пин для вывода на гирлянду
byte button_rejim = 21;  // пин подключения кнопки
#endif

Определяем тип светодиодов и цветовую схему.

#define LED_TYPE WS2812B        // What kind of strip are you using (APA102, WS2801 or WS2812B)?
#define COLOR_ORDER GRB         // It's GRB for WS2812B

Указываем сколько светодиодов в гирлянде и сколько в звезде. Если у вас нет звезды, то укажите значение переменной #define NUM_LEDS_STAR0.

#define NUM_LEDS    270          // кол-во светодиодов в гирлянде 33 
#define NUM_LEDS_STAR    15      // + 5 звезда

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

#define TIMER_MS 60      // время длительности одного эффекта 
                          //в сек. для авто режима

Дальше настраиваем подключение к Wi-F сети. Расписывать подробно не буду, по данной теме у меня есть отличный урок: «Веб-сервер ESP32 (ESP8266) в среде Arduino IDE».

/* настройка wi-fi */
IPAddress apIP(192, 168, 4, 1);
// Web интерфейс для устройства
#ifdef ESP8266
// Web интерфейс для устройства
ESP8266WebServer HTTP(80);
#else
// Web интерфейс для устройства
WebServer HTTP(80);
#endif
// Определяем переменные wifi
String _ssid     = "Wi-Fi"; // Для хранения SSID
String _password = "12345678"; // Для хранения пароля сети
String _ssidAP = "ATGarland";   // SSID AP точки доступа
String _passwordAP = "012345678"; // пароль точки доступа

Следующие 2 массива нужны для определения количества эффектов и для вывода названия текущего эффекта в приложении.

String Effect(int n)  // Название эффектов выводиться в приложении
{
  char* effects[] = {
    "конфетти 2","Радуга с блестками","жонглирование 2","синелон 2",
    "конфетти","синелон", "радуга","жонглирование","синелон 3","bpm",
    "полное заполнение", "жонглирование 3", "мерцание","три цвета","матрица"  };
  return effects[n];
}
// массив функций эффектов
typedef void (*SimplePatternList[])();
 SimplePatternList gPatterns = { confetti2, rainbowWithGlitter, juggle2, sinelon2, 
    confetti, sinelon, rainbow, juggle, sinelon3, bpm, 
    cylonfill,juggle3,twinkle,three_sin,matrix };

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

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

Дальше идут вспомогательные переменные, которые лучше не трогать.

// Не менять //
uint8_t gCurrentPatternNumber = 0; // порядковый номер эффекта
uint8_t gHue = 0; // "базовый цвет" используется многими эффектами
uint8_t i = 0; // счётчик индекса в массиве эффектов
uint8_t j = 0; // Счечик яркости
boolean auto_rejim = false; // авто режим выкл.
unsigned long last_change = 0; // предыдущее значениее времени
unsigned long now = 0; //текущее значениее времени
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
long prestroMillis = 0;        // время для кнопки, до
int interval = 4000;// Время изменения яркости после выход
byte flag = 0;      // состояние кнопки

В блоке setup() есть замечательная функция, которая позволяет задать параметры блока питания, от которого работает гирлянда, и не даст превысить указанный ток. Что приводит к стабильной работе гирлянды. Первое значение в функции - это напряжение, второе, ток в мА.

// Источник питания 1A 5v 
   FastLED.setMaxPowerInVoltsAndMilliamps(5,1000);

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

#if defined(ESP8266)
      Led();
  #endif

Вы также можете отключить внешнюю кнопку и для ESP8266, для этого достаточно закомментировать строчку вызова функции Led().

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

Вывод по возможностям прошивки.

Как видим из описания кода, прошивка стала проще и более гибкой. Сейчас можно добавлять любое количество эффектов. Расчет количества происходит в автоматическом режиме. Также добавил отдельное управление звездой. Но при желании, звезду можно отключить, указав в прошивке #define NUM_LEDS_STAR0.

добавил отдельное управление звездой

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

Также добавил простой способ удаления внешней кнопки для переключения режимов.

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

Подведем итоги уходящего года.

Гирлянда получилась достаточно функциональная с гибкими настройками, но, к сожалению, это не все функции, которые я планировал сделать. Наработки уже есть, возможно, после Нового года выложу еще одну версию прошивки и приложения. Что я запланировал, вы можете узнать, подписавшись на меня в boosty. Там уже есть примеры доработки приложения, и код.

Понравился проект Елочная гирлянда на ESP8266 (ESP32). Управление с приложения? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-006 модуль с пассивным звуковым излучателем. Подключение к Arduino. http://arduino-tex.ru/news/28/ky-006--modul-s-passivnym-zvukovym-izluchatelem.html Константин Portal-PK 2020-12-26T17:05:59+03:00 Сегодня в уроке рассмотрим очередной модуль из набора «37 in 1 Sensors Kit for Arduino». Модуль KY-006 с пассивным звуковым излучателем, широко применяется в Arduino проектах для подачи звуковых сигналов. Это связано с небольшим размером излучателя и простотой подключения. Код для подачи звукового сигнала также достаточно простой и не требует установки дополнительных библиотек.

Технические характеристики модуля KY-006.

Технические характеристики модуля KY-006.

Модуль зуммера KY-006 состоит из пассивного пьезоэлектрического зуммера, он может генерировать тональные сигналы от 1,5 до 2,5 кГц, включая и выключая его на разных частотах с использованием задержек или ШИМ.

Модуль расположен на плате с тремя выводами. Обозначение выводов:

  • Крайний вывод с меткой «-» –> GNG
  • Средний вывод без метки –> не используется
  • Крайний вывод с меткой «S» –> Данные

Будьте внимательны, у меня маркировка отличается, вместо обозначения «S» написано «+». Но подключение не отличается. Видать на производстве перепутали и поставили не тот символ.

Схема модуля KY-006.

Схема модуля KY-006.

Характеристики:

  • Ток: 10мА
  • Рабочее напряжение: 1,5 ~ 15 В постоянного тока
  • Диапазон генерации тона: 1,5 ~ 2,5 кГц
  • Размеры 18,5 x 15 мм

Схема подключения KY-006 к Arduino.

Подключите сигнал (S) к контакту 8 на Arduino, а землю (-) к GND. Средний контакт на модуле не используется.

Схема подключения к Arduino UNO KY-006.

Схема подключения к Arduino UNO KY-006.

Схема подключения к Arduino NANO KY-006.

Схема подключения к Arduino NANO KY-006.

Пример кода (скетч) для «KY-006» и Arduino.

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

// Демонстрация роботы модуля KY-006 
// https://arduino-tex.ru/ 
// Номер пина на плате к которому  
// будет подключен пассивного пьезоизлучателя  
int PinBuzzer = 8;

void setup ()
  {
    //Настройка вывода платы в режим "Выход"
    pinMode (PinBuzzer, OUTPUT);
  }
void loop ()
  {
    // Выдаем звук: Тембр 1
 for(int i = 0; i <100; i++)
      {
        // Выдать звук 
        digitalWrite(PinBuzzer, HIGH);
        delay(1);
        
        // Пауза
        digitalWrite(PinBuzzer, LOW);
        delay(1);
      }
    
    // Выдаем звук: Тембр 2
    for(int i = 0; i <100; i++)
      {
        // Выдать звук
        digitalWrite(PinBuzzer, HIGH);
        delay(2);
        
        // Пауза
        digitalWrite(PinBuzzer, LOW);
        delay(2);
      }
  }

Данный пример наглядно показывает, как генерируется звуковой сигнал, но на практике не применим, так как можно использовать функцию Arduino tone(), которая позволяет генерировать звуковой сигнал, определенной частоты.

Описание функции tone().

Функция генерирует, на выводе, прямоугольный сигнал заданной частоты (с коэффициентом заполнения 50%). Функция также позволяет задавать длительность сигнала. Однако, если длительность сигнала не указана, то он будет генерироваться до тех пор, пока не будет вызвана функция noTone(). Для воспроизведения звука вывод можно подключить к зуммеру или динамику.

В каждый момент времени может генерироваться только один сигнал заданной частоты. Если сигнал уже генерируется на каком-либо выводе, то использование функции tone() для этого вывода просто приведет к изменению частоты этого сигнала. В то же время, вызов функции tone() для другого вывода не будет иметь никакого эффекта.

Использование функции tone() может влиять на ШИМ-сигнал на выводах 3 и 11 (на всех платах, кроме Mega).

ПРИМЕЧАНИЕ: для воспроизведения разных звуков на нескольких выводах, необходимо сперва вызвать noTone() на одном выводе, и только после этого использовать функцию tone() на следующем.

Плюсы и минусы функции tone() рассмотрели, пришло время написать код генерирования сигнала.

// Демонстрация роботы модуля KY-006 
// https://arduino-tex.ru/ 
// Номер пина на плате к которому  
// будет подключен пассивного пьезоизлучателя  
int PinBuzzer = 8;

void setup ()
  {
    //Настройка вывода платы в режим "Выход"
    pinMode (PinBuzzer, OUTPUT);
    tone(PinBuzzer, 1500); // включаем звук частотой 1500 Гц
      delay(200);
      tone(PinBuzzer, 1000); // включаем звук частотой 1000 Гц
      delay(200);
      tone(PinBuzzer, 500); // включаем звук частотой 500 Гц
      delay(200);

    noTone(PinBuzzer); // выключаем звук
    delay(2000);
  }
void loop ()
  { 
      tone(PinBuzzer, 1500); // включаем звук частотой 100 Гц
      delay(200);
      tone(PinBuzzer, 1000); // включаем звук частотой 100 Гц
      delay(200);
      tone(PinBuzzer, 500); // включаем звук частотой 100 Гц
      delay(200);
      noTone(PinBuzzer); // выключаем звук
      delay(2000);
  }

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

    tone(PinBuzzer, 1500); // включаем звук частотой 1500 Гц
      delay(200);
      tone(PinBuzzer, 1000); // включаем звук частотой 1000 Гц
      delay(200);
      tone(PinBuzzer, 500); // включаем звук частотой 500 Гц
      delay(200);

    noTone(PinBuzzer); // выключаем звук

Если нам нужно, чтобы звуковой сигнал воспроизводился постоянно, то добавляем код в основной цикл loop (). Также можно добавить тактовую кнопку, или другой алгоритм, и включать звуковой сигнал в определённый момент. Например, при получении данных с датчика температуры, и при повышении заданного значения подавать звуковой сигнал.

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

В своих проектах пассивный звуковой излучатель использовал в проекте, который собирал вместе с сыном: «Часы-будильник на Arduino». Корпус сделан из конструктора LEGO.

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-006 модуль с пассивным звуковым излучателем? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Замок с радиоуправлением на Arduino. http://arduino-tex.ru/news/27/zamok-s-radioupravleniem-na-arduino.html Константин Portal-PK 2020-12-16T13:51:57+03:00 Наверное, у каждого есть место, где лежат личные вещи, и вы не хотите, чтобы к ним был доступ у других. Как же защитить от несанкционированного доступа к личным вещам? Сделать навесной замок, или, может, установить врезной замок? Но мы не будем искать легких путей, и, в данном Arduino проекте, сделаем замок с радиоуправлением на Arduino. Это достаточно простой проект, и повторить его будет несложно. Но у вас должна быть возможность распечатать несколько деталей на 3D принтере. Блоги о 3Д принтере сегодня очень распространены, и также можно заказать печать в вашем городе, относительно недорого.

Описание работы механизма замка на Arduino.

Механическая часть замка взята из интернета, и называлась она «Door lock with Arduino», скачать исходные материалы можно со страницы автора. Механическая часть замка сделана неплохо, но кода управления нет, поэтому я решил сделать свою версию замка.

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

из подручных материалов собрал вот такой макет двери

Принцип работы замка.

Замок работает достаточно просто, на шпильку диаметром 8 мм надевается напечатанная деталь с зубцами, в виде реечной передачи. Так как у меня не было под рукой нужной шпильки, я использовал строительную шпильку М8 с резьбой, чтобы резьба не мешала скольжению, надел термоусадочную трубку с обоих концов шпильки. Зафиксировал шпильку с помощью винта.

Шпилька устанавливается на основание, которое прикручивается к двери. Также, на основание крепится шаговый двигатель 28BYJ-48. На вал двигателя одевается шестеренка, которая и перемещает нашу шпильку.

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

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

Электроника радиозамка на Arduino.

Как вы поняли, приводом замка будет шаговый двигатель 28BYJ-48. Шаговый двигатель продается вместе с драйвером ULN2003, что позволяет без проблем подключить шаговый двигатель к ардуино. Подробнее о подключении шагового двигателя 28BYJ-48 читайте в уроке: «Подключаем к Arduino Шаговый двигатель 28BYJ-48 на драйвере ULN2003».

Для проверки работоспособности собрал всю электронику на столе. И вот что получилось.

Для проверки работоспособности собрал всю электронику на столе

Схема для теста радиоуправляемого замка на Arduino.

Схема для теста радиоуправляемого замка на Arduino.

Для проверки работоспособности использовал, вместо конечного выключателя, обычную тактовую кнопку.

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

Алгоритм работы радиоуправляемого замка.

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

  • Когда мы закрываем, дверной замок должен срабатывать на закрытие. Для подачи сигнала установим конечный выключатель, при срабатывании которого подаем сигнал на вращение шагового двигателя для закрытия замка.
  • Дверь закрыта, о чем сигнализирует замкнутый контакт конечного выключателя. Для открытия дверей нужно нажать на кнопку на пульте управления. После чего двигатель начнет отрывать замок.
  • После открытия замка мы открываем дверь. При открытии дверей, если мы случайно нажмем на пульте на кнопку открыть, ничего не должно происходить. Это связано с тем, что дверь открыта и замок находится в открытом состоянии.
  • При закрытии дверей мы должны также запретить повторное закрытие замка. Если вдруг будет ложное срабатывание конечного выключателя, или прочий форс-мажор.

Такой нехитрый алгоритм работы замка должен быть.

Пояснение к коду замка на Arduinoс радиопультом.

Для управления шаговым двигателем будем использовать библиотеку AccelStepper library. Про работу с данной библиотекой рассказывал в уроке про драйвера шаговых двигателей: «Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека». Но еще раз повторюсь, как её установить.

Установка библиотеки AccelStepper.

Чтобы установить библиотеку, перейдите в «Скетч» -> «Подключить библиотеку» -> «Управление библиотеками». Подождите, пока диспетчер библиотек загрузит индекс библиотек, и обновит список установленных библиотек.

Установка библиотеки AccelStepper.

Отфильтруйте свой поиск, набрав «Accelstepper». Щелкните первую запись и выберите «Установка».

Отфильтруйте свой поиск, набрав «Accelstepper».

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

Скетч замка с радиоуправлением на Ардуино.

// Замок с радиоуправлением на Arduino
// https://arduino-tex.ru/
#include<AccelStepper.h>
#define HALFSTEP 8
#define buttonPin  6
#define RADIO_PIN 7
// Определение пинов для управления двигателем
#define motorPin1  8 // IN1 на 1-м драйвере ULN2003
#define motorPin2  9 // IN2 на 1-м драйвере ULN2003
#define motorPin3  10 // IN3 на 1-м драйвере ULN2003
#define motorPin4  11 // IN4 на 1-м драйвере ULN2003
boolean lastBt = HIGH;
boolean currentBt = false;
boolean debvence (boolean last)
{
  boolean current = digitalRead(buttonPin);
  if ( last != current)
  {
    delay(5);
    current = digitalRead(buttonPin);
    return current;
  }
}
// Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4
// для использования AccelStepper с 28BYJ-48
AccelStepper myStepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
  // Задаём максимальную скорость двигателя
  myStepper.setMaxSpeed(2000.0);
  // Задаём ускорение двигателя
  myStepper.setAcceleration(200.0);
  // Установим скорость в шагах за секунду
  myStepper.setSpeed(1200);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(RADIO_PIN, INPUT);
  Serial.begin(9600);
  Serial.println("Ok!");
}
void loop() {
  // Получаем состояние кнопки
  currentBt = debvence(lastBt);
  // Если кнопка нажата
  if (lastBt == HIGH && currentBt == LOW) {
    myStepper.moveTo(2000);
    myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию
    Serial.println("On");
    delay(300);  // Ждем
  }
  // Изменяем направление шаговика
  if ( digitalRead(RADIO_PIN) == HIGH && currentBt == LOW) {
    myStepper.moveTo(0);
    myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию
    Serial.println("Off");
    delay(300);  // Ждем
  }
  lastBt = currentBt;
}

Пояснение к коду.

Подключаем библиотеку AccelStepper, и указываем тип шагового двигателя, в нашем случае это «8».

#include<AccelStepper.h>
#define HALFSTEP 8

Указываем пины подключения конечного выключателя и радиомодуля HY-DJM-5V. Подробное описание радиопульта и радиоприемника HY-DJM-5V читайте в уроке: «Радиопульт с приемником HY-DJM-5V. Подключаем к Arduino».

#define buttonPin  6
#define RADIO_PIN 7

Определим пины подключения драйвера ULN2003.

// Определение пинов для управления двигателем
#define motorPin1  8 // IN1 на 1-м драйвере ULN2003
#define motorPin2  9 // IN2 на 1-м драйвере ULN2003
#define motorPin3  10 // IN3 на 1-м драйвере ULN2003
#define motorPin4  11 // IN4 на 1-м драйвере ULN2003

Создадим переменные и функцию для устранения дребезга кнопки. Она будет устранять дребезг контактов конечного выключателя.

boolean lastBt = HIGH;
boolean currentBt = false;
boolean debvence (boolean last)
{
  boolean current = digitalRead(buttonPin);
  if ( last != current)
  {
    delay(5);
    current = digitalRead(buttonPin);
    return current;
  }
}

Инициализируем с последовательностью выводы IN1-IN3-IN2-IN4, для использования AccelStepper с шаговым двигателем 28BYJ-48.

// Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4
// для использования AccelStepper с 28BYJ-48
AccelStepper myStepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

В блоке setup() устанавливаем параметры для работы с шаговым двигателем.

// Задаём максимальную скорость двигателя
  myStepper.setMaxSpeed(2000.0);
  // Задаём ускорение двигателя
  myStepper.setAcceleration(200.0);
  // Установим скорость в шагах за секунду
  myStepper.setSpeed(1200);

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

pinMode(buttonPin, INPUT_PULLUP);
pinMode(RADIO_PIN, INPUT);

Инициализируем работу с монитором порта, и выводим "Ok!". Работу с монитором порта можно закомментировать. Я использовал вывод информации в монитор порта для отладки программы.

Serial.begin(9600);
Serial.println("Ok!");

В основном цикле loop() получаем состояние кнопки из функции устранения дребезга. Что такое дребезг кнопки, и как с ним бороться, читайте в уроке: «Arduino: Дребезг — программное устранение. Нажатие кнопки без ложных срабатываний».

// Получаем состояние кнопки
  currentBt = debvence(lastBt);

Дальше проверяем, сработал конечный выключатель, или нет.

// Если кнопка нажата
  if (lastBt == HIGH && currentBt == LOW) {

Если конечный выключатель нажали, то перемещаем шаговый двигатель на 2000 шагов.

myStepper.moveTo(2000);
myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию

После чего отправляем в монитор порта информацию "On".

Serial.println("On");

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

// Если была нажата кнопка на пульте, и при этом конечный выключатель в нажатом состоянии.
  if ( digitalRead(RADIO_PIN) == HIGH && currentBt == LOW) {

То отправляем команду переместить шаговый двигатель в нулевую точку.

myStepper.moveTo(0);
myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию

Отправляем в монитор порта значение "Off".

Serial.println("Off");

В конце цикла loop() переприсваиваем прошлому состоянию кнопки текущее состояние.

lastBt = currentBt;

Тестирование работы замка.

Тестирование работы замка.

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

Проверяем работу замка на стенде.

Проверяем работу замка на стенде.

На стенде решил использовать Arduino UNO, и схема подключения будет выглядеть немного по-другому. Но пины подключения будут такие же, что и в примере с использованием Arduino NANO.

Схема подключения радиоуправления замком на Arduino UNO.

Схема подключения радиоуправления замком на Arduino UNO.

В качестве источника питания использую Powerbank 5В 1А. Пока тестировал, проверял и снимал видео, Powerbank немного разрядился, и шаговый двигатель стал пропускать шаги. Поэтому рекомендую, в качестве источника питания, использовать блок питания на 5В 1А. Можно взять зарядку от старого телефона.

Вывод.

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

Понравился проект Замок с радиоуправлением на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-005 модуль инфракрасного излучения http://arduino-tex.ru/news/26/ky-005-modul-infrakrasnogo-izlucheniya.html Константин Portal-PK 2020-12-13T12:32:56+03:00 Сегодня в уроке рассмотрим, что такое KY-005 Модуль инфракрасного излучения (передатчик), и как его подключить к Arduino.

 KY-005 Модуль инфракрасного излучения (передатчик)

KY-005 – этот модуль имеет инфракрасный излучающий светодиод, и может работать в качестве пульта дистанционного управления бытовой техники в доме по ИК каналу. Этот ИК передатчик можно использовать для передачи команд на ИК приемник. ИК приемник также входит в комплект 37 модулей для Arduino, под номером KY-022. Его мы так же будем рассматривать в будущих уроках.

Не смотря на то, что ИК передача не видна глазу, увидеть, как работает данный модуль, или пульт ДУ, можно, используя обычную камеру. Например, камеру телефона.

 работает данный модуль, или пульт ДУ, можно, используя обычную камеру

Технические характеристики модуля KY-005.

Модуль инфракрасного передатчика KY-005 состоит из 5-миллиметрового ИК светодиода. Модуль KY-005 совместим с популярными платформами, такими как Arduino, Teensy, Raspberry Pi и ESP8266.

  • Рабочее напряжение: 5 В.
  • Прямой ток: 30 ~ 60 мА.
  • Потребляемая мощность: 90 мВт.
  • Рабочая температура от -25 ° C до 80 ° C.
  • Размеры 18,5 мм x 15 мм.

Схема подключения KY-005 к Arduino.

Подключите линию питания (+) к +5 Arduino, землю (посередине) и GND, соответственно. Подключите сигнальный контакт (S) к контакту 3 на Arduino UNO, или к контакту 9 на Arduino Mega. Номер пина для инфракрасного передатчика определяется библиотекой IRremote, дополнительную информацию можно найти в разделе «Файлы для скачивания» ниже.

Схема подключения KY-005 к Arduino.

Схема подключения к Arduino UNO KY-005.

Схема подключения к Arduino UNO KY-005.

Схема подключения к Arduino NANO KY-005.

Схема подключения к Arduino NANO KY-005.

Пример кода (скетч) для “KY-005” и Arduino.

В следующем скетче Arduino используется библиотека IRremote, для последовательной отправки инфракрасных сигналов с модуля KY-005. Выходной контакт определяется библиотекой и зависит от платы, которую вы используете, проверьте документацию библиотеки IRremote, чтобы узнать о поддерживаемых платах. Для обработки сигнала вам понадобится ИК приемник, такой как KY-022. Также модуль ИК приемника может определить, какие команды отправляет пульт дистанционного управления, в данном примере отправляем сигнал включения телевизора Sony.

// KY-005 модуль инфракрасного излучения
// https://arduino-tex.ru/
#include <IRremote.h>
IRsend irsend;

void setup()
{
 Serial.begin(9600);
}

void loop() 
{
   for (int i = 0; i < 50; i++) { 
     irsend.sendSony(0xa90, 12); // Sony TV power code
     delay(40);
   }
}

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

// KY-005 модуль инфракрасного излучения
// https://arduino-tex.ru/
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results; void setup() {
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin"); } void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100); 
}

И при нажатии на кнопку пульта ДУ, в мониторе порта получите команду соответствующей кнопки. Подставляете свои команды в эти строчки кода.

FFFFFFFF
FFA857
FF02FD
FF18E7
FF38C7
FF4AB5
FF5AA5
FF10EF
FF5AA5
FFFFFFFF
FF10EF
FF5AA5

Ссылку на скачивание библиотеки IRremote для скетча использования модуля KY-005 с Arduino, можно найти в разделе «Файлы для скачивания» ниже.

Применение KY-005 модуль инфракрасного излучения.

Используя модуль KY-005 инфракрасного излучения, можно создать пульт дистанционного управления для бытовой техники. Также можно сделать систему управления бытовой техникой на расстоянии.

Применение KY-005 модуль инфракрасного излучения.

Пульт дистанционного управления и так позволяет управлять на расстоянии. Но в данном случае, я имею в виду, совсем другое расстояние. Например, включать бытовое устройство, находясь на работе или в командировке в другом городе. Вы скажете, что такое не возможно! Но на самом деле, сделать подобное управление не так и сложно. Используя плату NodeMCU можно подключаться к интернету и управлять удаленно устройствами, не исключение и ИК управление, используя, например, модуль KY-005. Для проверки работоспособности теории вы можете сделать простое устройство. Подключите к Arduino модуль реального времени и напишите небольшой код, чтобы Arduino отправляло сигнал на отключение телевизора после 22:00, и вам не нужно уже беспокоиться, потому что ваш телевизор будет выключен автоматически в указанное время. Если вас заинтересовало применение модуляKY-005, пишите ваши предложения и пожелания в комментариях.

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-005 модуль инфракрасного излучения. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Arduino управление светом с 3 мест: Пульт ДУ + Радиопульт + Переключатель. http://arduino-tex.ru/news/25/arduino-upravlenie-svetom-s-3-mest-pult-du-radiopult.html Константин Portal-PK 2020-12-06T12:38:30+03:00 Просматривая телевизор, мы постоянно переключаем с одного канала на другой в поисках интересного фильма или интересной телепередачи. При этом, наверно, многим приходила мысль, как бы сделать так, чтобы и управлять светом можно было с того же пульта, не вставая с дивана. Сегодня мы рассмотрим самый простой способ реализации подобного управления. При чем, управлять можно не только с пульта от телевизора, но и с радиопульта, который становится, в последнее время, достаточно распространённым для управления бытовой техникой, и элементами умного дома. Кроме управления света с пульта, хочется еще сохранить возможность включать и выключать свет с помощью выключателя, и при этом, сильно не углубляться в изучение программирования? Тогда этот проект для тебя!

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

Что такое проходной выключатель (переключатель)?

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

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

Что такое проходной выключатель (переключатель)

Схема включение освещения с двух мест, с использованием проходного выключателя.

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

Монтажная, или рабочая, схема подключения проходного выключателя

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

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

Замена одного проходного выключателя на реле.

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

Подключение к Arduino IR приемника, радиоприемника HY-DJM-5V и реле.

Сейчас перейдем к слаботочной части управления. Для тестирования работы установим на макетную плату Arduino NANO. Можно использовать Arduino UNO, просто NANO меньше по размеру, и поместить её в распределительную коробку будет проще.

Дальше, подключим модуль инфракрасного приемника KY-022 и радиомодуль HY-DJM-5V к Arduino. У вас может быть другой радиомодуль 433 МГц, в таком случае, код для Arduino нужно будет подправить в соответствии с вашей версией радиомодуля. У меня, на данный момент, других моделей радиомодуля нет, и протестировать их нет возможности.

Особенность радиомодуля с пультом и приемником HY-DJM-5V.

Особенность радиомодуля с пультом и приемником HY-DJM-5V.

Радиомодуль с приемником HY-DJM-5V идет с пультом, и использовать дополнительные устройства, или собирать пульт радиоуправления, не нужно. Но есть и минусы. Радиус действия не большой, и из соседней комнаты пульт уже не может передать сигнал приемнику HY-DJM-5V. Я почитал в интернете, и сделал спиральную антенну, по расчетам, но радиус действия не сильно увеличился, хотя управлять освещением в одной комнате можно.

Схема подключения к Arduino NANO, HY-DJM-5V, модуля KY-022, и модуля с двумя реле.

Подключение к Arduino IR приемника, радиоприемника HY-DJM-5V и реле.

Подключим модуль KY-022: сигнальный вывод (S) к контакту 10 на Arduino, выводы D0 и D1 радиоприемника HY-DJM-5V подключим к 3 и 4 пину Arduino. Информационные контакты реле подключаем к 5 и 6 контактам Arduino. Согласно схеме размещённой выше.

подключение к Arduino NANO, HY-DJM-5V, модуля KY-022


В цикле уроков «37 модулей и датчиков для Arduino» вы найдете описание не только модуля KY-022,но и модуля ИК-передатчика KY-005, с помощью которого можно отправлять команды управления на IR приемник, без использования пульта ДУ.

Скетч для управления двумя реле с помощью радиоприёмника HY-DJM-5V, модуль инфракрасного приемника KY-022.

Скетч получился небольшой, чуть больше 50 строчек, и понятен начинающему Ардуинщику.

// Arduino управление светом с 3 мест: Пульт ДУ + Радиопульт + Переключатель.
// https://arduino-tex.ru/
#include "IRremote.h"
#define RELAY1 5
#define RELAY2 6
#define RADIO_PIN1 3
#define RADIO_PIN2 4
boolean statusRelay1 = false;
boolean statusRelay2 = false;
IRrecv irrecv(10); // указываем вывод, к которому подключен приемник
decode_results results;
void setup() {
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RADIO_PIN1, INPUT);
  pinMode(RADIO_PIN1, INPUT);
  digitalWrite(RELAY1, HIGH);
  digitalWrite(RELAY2, HIGH);
  irrecv.enableIRIn(); // запускаем прием
  Serial.begin(9600);
  Serial.println("Relay Ok!");
}
void loop() {
  if ( digitalRead(RADIO_PIN1) == HIGH) {
    Serial.println("Relay 1");
    statusRelay1 = !statusRelay1;
    digitalWrite(RELAY1, statusRelay1);
    delay(100);
  }
  if ( digitalRead(RADIO_PIN2) == HIGH) {
    Serial.println("Relay 2");
    statusRelay2 = !statusRelay2;
    digitalWrite(RELAY2, statusRelay2);
    delay(100);
  }
  if ( irrecv.decode( &results )) { // если данные пришли
    switch ( results.value ) {
      case 0xFF10EF:
        Serial.println("Relay 1");
        statusRelay1 = !statusRelay1;
        digitalWrite(RELAY1, statusRelay1);
        break;
      case 0xFF5AA5:
        Serial.println("Relay 2");
        statusRelay2 = !statusRelay2;
        digitalWrite(RELAY2, statusRelay2);
        break;
    }
    irrecv.resume(); // принимаем следующую команду
  }
  delay(100);
}

Описание кода.

Сперва, нам нужно подключить библиотеку IRremote.h, для работы с модулем инфракрасного приемника KY-022, которую можно установить через менеджер библиотек, или скачать внизу статьи, в разделе «файлы для скачивания».

#include "IRremote.h"

Затем, создаем переменные подключения реле и входы для считывания значений с радиомодуля. А также создадим две переменные для хранения текущего состояния реле.

#define RELAY1 5
#define RELAY2 6
#define RADIO_PIN1 3
#define RADIO_PIN2 4
boolean statusRelay1 = false;
boolean statusRelay2 = false;

Затем, нужно инициализировать работу с инфракрасным приемником.

IRrecv irrecv(10); // указываем вывод, к которому подключен приемник
decode_results results;

В блоке setup() инициализируем пины, и инициализируем работу с инфракрасным приемником

  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RADIO_PIN1, INPUT);
  pinMode(RADIO_PIN1, INPUT);
  digitalWrite(RELAY1, HIGH);
  digitalWrite(RELAY2, HIGH);
  irrecv.enableIRIn(); // запускаем прием

В основном цикле loop() выполняем 2 одинаковых условия для определения, была или нет нажата кнопка на радиопульте.

if ( digitalRead(RADIO_PIN1) == HIGH) {
    Serial.println("Relay 1");
    statusRelay1 = !statusRelay1;
    digitalWrite(RELAY1, statusRelay1);
    delay(100);
  }
  if ( digitalRead(RADIO_PIN2) == HIGH) {
    Serial.println("Relay 2");
    statusRelay2 = !statusRelay2;
    digitalWrite(RELAY2, statusRelay2);
    delay(100);
  }

Если кнопка была нажата, то мы инвертируем статус реле, и включаем или выключаем реле.

statusRelay1 = !statusRelay1;
digitalWrite(RELAY1, statusRelay1);

Следующее условие полностью взято из урока «Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote». Добавляем обработку нажатия кнопки на пульте ДУ, а именно инвертирование статуса реле, и отправка сигнала на включение или выключение реле.

statusRelay1 = !statusRelay1;
digitalWrite(RELAY1, statusRelay1);

Код получился достаточно компактный и понятный.

Вы можете использовать команды с вашего пульта ДУ. Для считывания команд загрузите в плату Arduino следующий код.

#include "IRremote.h"
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results; void setup() {
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin"); } void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100); 
}

И при нажатии на кнопку пульта ДУ, в мониторе порта получите команду соответствующей кнопки. Подставляете свои команды в эти строчки кода.

FFFFFFFF
FFA857
FF02FD
FF18E7
FF38C7
FF4AB5
FF5AA5
FF10EF
FF5AA5
FFFFFFFF
FF10EF
FF5AA5

И можете включать и выключать своим пльтом не только телевизор, но и свет.

Подключение проходных выключателей и лампочек к реле.

Осталось подключить силовую часть.

Внимание! При работе с напряжением 220 В. необходимо соблюдать технику безопасности.

Собираем все по схеме ниже.

Подключение проходных выключателей и лампочек к реле.

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

Схема собрана, Arduino запрограммировано. Пришло время проверить управление с помощью радио пульта, и пульта ДУ, в связке с проходным выключателем.

Пришло время проверить управление с помощью радиопульта, и пульта ДУ, в связке с проходным выключателем.

Минусы данной схемы управления светом.

Не смотря на достаточно простую схему подключения, и небольшой код для Arduino, данная схема обладает рядом минусов:

  • Для каждого переключателя нужно прокладывать трехжильный провод. Если у вас установлен однопозиционный выключатель, вы не сможете использовать данную схему управления освещением. Если у вас двухпозиционный выключатель, то вы можете установить управление всего 1 лампой, и при этом, нужно переделать старую схему подключения.
  • Нельзя использовать твердотельное реле. Это связано с тем, что у твердотельного реле всего один нормально разомкнутый контакт.
  • Небольшая дальность действия радиопульта и пульта ДУ.
  • Необходимо место в распределительной коробке для установки всей электроники. Также, необходимо экранировать слаботочную часть, иначе возможны помехи и ложные срабатывания.

Вывод.

Схема управления достаточно интересная и жизнеспособная, не смотря на ряд минусов. Я у себя при ремонте сразу разделил на 2 распределительные коробки слаботочную часть и высокую сторону 220 В., но проложил практически ко всем однополюсным выключателям двухжильные провода. Поэтому буду искать более подходящее решения для проложенной у себя проводки.

Понравился проект Arduino управление светом с 3 мест: Пульт ДУ + Радиопульт + Переключатель? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-004 Модуль тактовой кнопки. Подключение к Arduino. http://arduino-tex.ru/news/24/ky-004-modul-taktovoi-knopki-podklyuchenie-k-arduino.html Константин Portal-PK 2020-12-04T10:41:41+03:00 Модуль KY-004 представляет собой тактовую кнопку с обвязкой. А если быть точнее, то с установленным подтягивающим резистором 10 кОм. Данный модуль подключается по аналогии с подключением тактовой кнопки к Arduino, только не нужно устанавливать подтягивающий резистор. С кодом, также нет проблем, все примеры с использованием тактовой кнопки и библиотеки можно использовать, при подключении модуля KY-004.

Характеристики модуля кнопки KY-004 для Ардуино.

Модуль состоит из тактовой кнопки (переключателя) и резистора. Совместимость с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.

Характеристики модуля кнопки KY-004 для Ардуино.

  • Температура окружающей среды от -25 ° C до 105 ° C.
  • Срок службы 100000 циклов срабатывания.
  • Рабочая сила нажатия: 180/230 (± 20 гс).
  • Размеры 18,5 x 15 мм.

Модуль KY-004 имеет нормально разомкнутые контакты, то есть контакты замыкаются при нажатии на кнопку, а на выходе датчика появляется напряжение низкого уровня. Между контактом выхода «S» и средним контактом, который подключается к пину «5V» Arduino, впаян резистор сопротивлением 10 кОм.

Схема подключения модуля KY-004 для Ardiono.

Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND, соответственно. Подключите сигнал (S) к контакту 4 на Arduino. Светодиод подключаем к 3 пину Arduino. Или можно использовать встроенный светодиод, который подключен к 13 пину Arduino.

Схема подключения модуля KY-004 для Ardiono NANO.

Схема подключения модуля KY-004 для Ardiono NANO.

Схема подключения модуля KY-004 для Ardiono UNO.Схема подключения модуля KY-004 для Ardiono UNO.

Благодаря тому, что на модуле KY-004 распаяна обвязка и имеются выводы для подключения перемычек, поэтому макетная плата требуется только для подключения светодиода к Ardiono.

включение светодиода с помощью модуля KY-004.

Скетч включения светодиода с помощью модуля KY-004.

В связи с тем, что модуль представляет собой тактовую кнопку с обвязкой, пример кода возьмём из моего старого урока: "Подключение кнопки и светодиода к плате Arduino". Код немного изменим. Это связанно с тем, что на выходе модуля, при нажатии, возникает сигнал низкого уровня LOW, а когда кнопка не нажата, то сигнал высоко уровня HIGH.

int led_pin=3;          // пин подключения
int button_pin = 4;     // пин кнопки
void setup() { 
    pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
}
void loop() {
   if (digitalRead(button_pin) == LOW) { // Если кнопка нажата 
      digitalWrite(led_pin, HIGH);// зажигаем светодиод
 }
  else { //Иначе
      digitalWrite(led_pin, LOW);// выключаем светодиод
  }
}

Пояснение к коду.

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

В данной строчке пин button сконфигурирован как вход, для дальнейшего приема на него сигнала.

pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.

Считываем цифровое значение с pin button. Если получаем 0В, это значит LOW, а 5В значит HIGH.

if (digitalRead(button_pin) == HIGH) { // Если кнопка нажата

Конструкция if..else предоставляет больший контроль над процессом выполнения кода, чем базовый оператор if, позволяя осуществлять несколько проверок, объединенных вместе.

if (digitalRead(button_pin) == HIGH) //Если на пин button приходит сигнал HIGH то выполняем действие А
 { 
    // действие A
 }
else  //Иначе. В нашем случае если на пин button приходит LOW, выполняем действие В
 { 
    // действие B
 }

Скетч нажатия тактовой копки KY-004 без ложных срабатываний.

Второй пример возьмём из урока для начинающих. В данном блоке уроков рассказываю, как можно начать изучать Arduino без покупки Ардуино. Если считаете, что это не возможно, то посмотрите мои уроки.

int led_pin = 3;
int button_pin = 4;
boolean lastBt = false;
boolean currentBt = false;
boolean ledOn = LOW;
boolean debvence (boolean last)
{
  boolean current = digitalRead(button_pin);
  if ( last != current)
  {
    delay(5);
    current = digitalRead(button_pin);
    return current;
  }
}
void setup()
{
  pinMode(led_pin, OUTPUT);
  pinMode(button_pin, INPUT);
}
void loop()
{
  // Получаем состояние кнопки
  currentBt = debvence(lastBt);
  // Если кнопка нажата
  if (lastBt == HIGH && currentBt == LOW)
    ledOn = !ledOn;
  digitalWrite(led_pin, ledOn);
  lastBt = currentBt; 
}

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

Пояснение кода.

Создадим необходимые переменные:

int led_pin = 3;
int button_pin = 4;
boolean lastBt = false;
boolean currentBt = false;
boolean ledOn = LOW;

Функция устранения дребезга кнопки.

boolean debvence (boolean last)
{
  boolean current = digitalRead(button_pin);
  if ( last != current)
  {
    delay(5);
    current = digitalRead(button_pin);
    return current;
  }
}

Осталось в скетче прописать небольшие изменения.

Для работы с функцией устранения дребезга достаточно прописать всего одну строчку кода.

// Получаем состояние кнопки
  currentBt = debvence(lastBt);

Также, нужно проверить, отпустили кнопку или нет.

// Если кнопка нажата
  if (lastBt == HIGH && currentBt == LOW)

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

lastBt = currentBt;

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

digitalWrite(led_pin, ledOn);

Применения модуля тактовой кнопки KY-004 в Arduino проектах.

Применения модуля тактовой кнопки KY-004 в Arduino проектах.

С помощью модуля кнопкиKY-004 можно включать и выключать лазерный светодиод , шаговый двигатель и любое другое устройство. Также можно собрать разнообразные часы, настройка которых будет производиться с помощью тактовой кнопки. Различные ночники и светильники, в которых также не обойтись без тактовой кнопки. И в других Arduino проектах.

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-004 Модуль тактовой кнопки. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 3. ESP32 и ESP8266 с выводом статуса на веб-страницу и на OLED дисплей. http://arduino-tex.ru/news/23/esp32-i-esp8266-s-vyvodom-statusa-na-veb-stranicu-i-na-oled.html Константин Portal-PK 2020-11-29T12:24:12+03:00 Хотите добавить информативности, и сделать более интересными свои проекты с ESP32? Или, может быть, вы хотите отобразить IP-адрес вашего ESP32, не прибегая к выводу информации в последовательный монитор порта? OLED-дисплеи (органические светодиоды) могут идеально подойти! Они сверхлегкие, достаточно тонкие, теоретически гибкие, и дают более яркое и четкое изображение.

Для изучения данного урока рекомендую посмотреть предыдущий урок про ESP32 и ESP8266:

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

Также, в данном уроке, расскажу поверхностно про OLED дисплей, и его возможности. Больше информации в моих уроках по подключению OLED дисплея к Arduino:

Подключение модуля дисплея OLED к ESP32.

Подключить довольно просто. Начните с подключения вывода VCC к выходу 3,3 В на ESP32, и подключите GND к земле. На следующей схеме показано, как подключить дисплея OLED к ESP32.

Подключение модуля дисплея OLED к ESP32.

Затем подключите контакт SCL к контакту D22 на ESP32, и подключите контакт SDA к контакту D21 на ESP32.

Теперь мы готовы загрузить код и что-нибудь вывести на дисплей.

Подключение модуля дисплея OLED к ESP32.

Установка библиотеки Adafruit SSD1306 для OLED-дисплея.

Контроллер SSD1306 OLED-дисплея имеет гибкий, но сложный драйвер. Для использования контроллера SSD1306 требуются обширные знания в области адресации памяти. К счастью, библиотека Adafruit SSD1306 была написана, чтобы скрыть сложности контроллера SSD1306, и, чтобы мы могли выполнять простые команды для управления дисплеем.

Чтобы установить библиотеку, перейдите Скетч > Подключить библиотеку > Управлять библиотеками ... Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Установка библиотеки Adafruit SSD1306 для OLED-дисплея.

Отфильтруйте результаты поиска, набрав «adafruit ssd1306». Должна быть пара записей. Ищите Adafruit SSD1306 от Adafruit . Щелкните эту запись и выберите «Установить».

Отфильтруйте результаты поиска, набрав «adafruit ssd1306»

Библиотека Adafruit SSD1306 - это аппаратно-зависимая библиотека, которая обрабатывает функции нижнего уровня. Она должна быть соединена с библиотекой Adafruit GFX, для отображения графических примитивов, таких как точки, линии, круги, прямоугольники и т. д. Установите и эту библиотеку.

Она должна быть соединена с библиотекой Adafruit GFX

Код ESP32 - вывод текста на OLED дисплей.

Следующий скетч для ESP32 выведет «Hello World!» на дисплей, а также выведет:

  • Текст инвертированного цвета
  • Числа
  • Числа с основанием (Hex, Dec)
  • Символы ASCII
  • Текст с прокруткой по горизонтали и вертикали
  • Текст с частичной прокруткой

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

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println("SSD1306 allocation failed");
    for(;;);
  }
  delay(2000);
  display.cp437(true);
  display.clearDisplay();
  display.setTextSize(1);             
  display.setTextColor(WHITE);        
  display.setCursor(0,20);             
  display.println("Hello world!");
  display.display();
  delay(2000); 
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Rectangle");
  display.drawRect(0, 15, 60, 40, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Filled Rectangle");
  display.fillRect(0, 15, 60, 40, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Round Rectangle");
  display.drawRoundRect(0, 15, 60, 40, 8, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Filled Round Rectangl");
  display.fillRoundRect(0, 15, 60, 40, 8, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Circle");
  display.drawCircle(20, 35, 20, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Filled Circle");
  display.fillCircle(20, 35, 20, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Triangle");
  display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Filled Triangle");
  display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
}
void loop() {
}

Скетч начинается с подключения четырех библиотек, а именно. SPI.h , Wire.h , Adafruit_GFX.h и Adafruit_SSD1306.h . Хотя библиотека SPI.h не требуется для дисплеев I2C OLED, нам нужно добавить ее для компиляции нашей программы.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Далее, нам нужно создать объект Adafruit_SSD1306.h. Функция Adafruit_SSD1306 принимает номер вывода ESP32, к которому подключен вывод сброса дисплея. Поскольку используемый нами OLED-дисплей не имеет вывода RESET, мы отправим «- 1» в функцию, чтобы ни один из выводов ESP32 не использовался для сброса дисплея.

Adafruit_SSD1306 display(-1);

В функции setup() нам нужно инициализировать объект OLED с помощью begin() функции. Функция принимает два параметра. Первый параметр SSD1306_SWITCHCAPVCC включает внутреннюю схему подачи напряжения на дисплей, а второй параметр предоставляет I2C-адрес OLED-дисплея. Адрес I2C такого модуля дисплея OLED, обычно, 0x3C, но может отличаться. Адрес дисплея не может быть изменен.

// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Clear the buffer.
display.clearDisplay();

Затем, мы очищаем буфер, перед выводом нашего первого сообщения на экран. Фото каждого примера выкладывать не буду, примеры вывода текста и геометрических фигур на OLED дисплей есть в уроке: Дисплей SSD1306 подключаем к Arduino. Выводим текст, рисуем фигуры.

Вывод на OLED простого текста (Hello World).

Для отображения текста на экране, нам необходимо установить размер шрифта. Это можно сделать, вызвав setTextSize(font-size) и передав размер шрифта (начиная с 1) в качестве параметра.

// Display Text
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);

Далее, нам нужно установить цвет шрифта, вызвав функцию setTextColor(color). Передаем параметр WHITE для темного фона, и параметр BLACK для яркого фона. Теперь, перед печатью сообщения, нам нужно установить позицию курсора, вызвав функцию setCursor(X,Y). Пиксели на экране адресуются по их горизонтальным (X) и вертикальным (Y) координатам. Система координат помещает начало координат (0,0), в верхний левый угол, причем, положительное значение X увеличивается вправо, а положительное значение Y - вниз.

Мы можем использовать простые функции print(“ ”) или println(“ ”), функции для вывода сообщения на экран, так же, как мы выводим данные в последовательном мониторе порта. Помните, println() перемещает курсор на новую строку.

Чтобы библиотека могла выполнять чрезвычайно быстрые математические операции с экранным буфером (более 100 кадров в секунду), требуется display() команда для указания библиотеке выполнить массовую передачу из буфера в ESP32 во внутреннюю память контроллера SSD1306, так как вызовы функций печати не передают немедленно содержимое экранного буфера на контроллер SSD1306. Как только данные будут переданы, пиксели, соответствующие экранному буферу, появятся на OLED-дисплее.

Вывод на дисплей инвертированного текста.

// Display Inverted Text
display.clearDisplay();
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);

Для отображения инвертированного текста мы снова вызовем setTextColor(FontColor,BackgroundColor) функцию. Если вы обратили внимание, и вы заметили, что раньше мы передавали только один параметр этой функции, то теперь мы передаем два параметра. Это возможно из-за того, что называется перегрузкой функций. Перегрузка функций - это возможность создавать несколько функций с одним и тем же именем, но с различным набором параметров. Вызов перегруженной функции запускает конкретную реализацию этой функции, в зависимости от переданных параметров.

В нашем случае, передача setTextColor(BLACK, WHITE) будет отображать черный текст на залитом фоне.

Масштабирование размера шрифта.

// Changing Font Size
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0,24);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);

Ранее в этом уроке, мы вызывали setTextSize(font-size), функцию для установки размера шрифта, и передали «1» в качестве параметра. Вы можете использовать эту функцию для масштабирования шрифта, передав любое неотрицательное целое число.

Текст отображается в соотношении 7:10. Это означает, что передача размера шрифта «1» будет отображать текст с размером 7 × 10 пикселей на символ, передача «2» приведет к отображению текста с размером 14 × 20 пикселей на символ, и так далее.

Библиотека Adafruit_GFX отвечает за рендеринг шрифта. По умолчанию выбран шрифт с одинарным интервалом. Однако, более поздние версии библиотеки Adafruit GFX предлагают возможность использования альтернативных шрифтов. В библиотеке есть несколько альтернативных шрифтов, плюс есть возможность добавлять новые.

Отображение чисел на дисплее.

// Display Numbers
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,28);
display.println(123456789);
display.display();
delay(2000);

Числа можно отобразить на OLED-дисплее, просто вызвав print(), или выполнив println() функцию. Эта функция принимает 32-разрядное целое число без знака, поэтому вы можете отображать только числа от 0 до 4 294 967 295.

Указание формата чисел для вывода на OLED.

// Specifying Base For Numbers
display.clearDisplay();
display.setCursor(0,28);
display.print("0x"); display.print(0xFF, HEX); 
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)"); 
display.display();
delay(2000);

У функций print() и println() есть необязательный второй параметр, который указывает основание (формат) для вывода, допустимые значения: BIN (двоичное или основание 2), OCT (восьмеричное или основание 8), DEC (десятичное или основание 10), HEX (шестнадцатеричное или основание 16). Для чисел с плавающей запятой этот параметр указывает количество используемых знаков после точки. Например:

  • print (78, BIN) выведет «1001110»
  • print (78, OCT) выведет «116»
  • print (78, DEC) выведет «78»
  • print (78, HEX) выведет «4E»
  • println (1.23456, 0) выведет «1»
  • println (1.23456, 2) выведет «1,23»
  • println (1.23456, 4) дает «1.2346»

Вывод на дисплей символов ASCII.

// Display ASCII Characters
display.clearDisplay();
display.setCursor(0,24);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);

Функции print() и println() отправляют данные на дисплей в виде удобочитаемого текста ASCII, в то время как write() функция отправляет двоичные данные на дисплей. Таким образом, вы можете использовать эту функцию для отображения символов ASCII. В нашем примере, при отправке числа 3, будет отображаться символ сердца.

Текст с прокруткой по горизонтали и вертикали.

// Scroll full screen
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Full");
display.println("screen");
display.println("scrolling!");
display.display();
display.startscrollright(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);    
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();

Вы можете перемещать текст на экране по горизонтали, вызывая startscrollright(start page, stop page) или startscrollleft(start page, stop page), и по диагонали, вызывая startscrolldiagright(start page, stop page) или startscrolldiagleft(start page, stop page). Все эти функции принимают два параметра, а именно: начальная страница и стоп-страница. Поскольку на дисплее восемь строчек, от 0 до 7, вы можете прокручивать весь экран, прокручивая все строчки, то есть, передавая параметры 0x00 и 0x07.

Чтобы остановить прокрутку дисплея, вы можете использовать stopscroll() функцию.

Текст с частичной прокруткой.

// Scroll part of the screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Scroll");
display.println("some part");
display.println("of the screen.");
display.display();
display.startscrollright(0x00, 0x00);

Иногда не нужно прокручивать весь экран. Вы можете сделать это, передав правильную информацию о начальной и конечной строчке для функций прокрутки. Поскольку на дисплее восемь строчек от 0 до 7, вы можете прокручивать некоторую часть экрана, передавая определенные номера строчек в качестве параметров.

В нашем примере мы передали оба параметра как 0x00. Это прокрутит только первую строчку дисплея.

Вывод теста на OLED ESP8266 NodeMCU.

Так как Adafruit SSD1306 и Adafruit GFX совместимы с ESP32 и ESP8266, код для вывода теста не будет отличаться для обеих плат. Достаточно подключить отладочную плату к компьютеру, настроить Arduino IDE и загрузить код.

Вывод теста на OLED ESP8266 NodeMCU.

Схема подключения OLED к ESP8266 NodeMCU.

Схема подключения OLED к ESP8266 NodeMCU.

Подключение довольно простое. Начните с подключения вывода VCC к выходу 3,3 В на NodeMCU и подключите GND к земле.

Затем, подключите контакт SCL к контакту D1 на NodeMCU, и подключите контакт SDA к контакту D2 на NodeMCU.

Теперь все готово и можно загрузить код, и вывести текст на дисплей.

Вывод русских символов на OLED, подключенного к ESP32 или ESP8266.

В начале урока рекомендовал посмотреть несколько уроков, прежде чем приступать к данному уроку. Сейчас мы будем выводить русские символы на OLED дисплей, воспользовавшись одним из этих уроков. Но весь этап настройки я повторю, чтобы закрепить знания, и вам лишний раз не искать, где скачать дополнительную информацию для вывода русских символов на OLED дисплей, подключённому к ESP32 или ESP8266.

Вывод русских символов на OLED, подключенного к ESP32 или ESP8266.

Настройка Arduino IDE для вывода русских символов на OLED подключение ESP32 и ESP8266.

  • Установить библиотеки Adafruit: библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX. Как установить данные библиотеки, рассказывал выше
  • Скачать файл glcdfont.c (скачиваем файлы внизу страницы, в разделе Файлы для скачивания) и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может быть другим.
  • В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251. Добавить функцию можно в самом низу кода.
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
  • Добавить в блок void setup() {} следующую строчку кода.
display.cp437(true);
  • При выводе русского текста использовать функцию utf8rus().

После того, как выполнили все 5 пунктов настройки Arduino IDE. Изменим вывод надписи:

display.println("Hello,world!");

На

display.println(utf8rus("Привет МИР!"));

Полный код примера вывода русских символов на OLED, подключение ESP32 и ESP8266.

Код ESP32 вывод геометрических фигур на OLED дисплей.

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

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println("SSD1306 allocation failed");
    for(;;);
  }
  // Clear the buffer.
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("прямоугольник"));
  display.drawRect(0, 15, 60, 40, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("прямоугольник заполненный"));
  display.fillRect(0, 15, 60, 40, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("прямоугольник с круглениями"));
  display.drawRoundRect(0, 15, 60, 40, 8, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println (utf8rus("прямоугольник с круглениями заполненный"));
  display.fillRoundRect(0, 15, 60, 40, 8, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("круг"));
  display.drawCircle(20, 35, 20, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("круг заполенный"));
  display.fillCircle(20, 35, 20, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("треугольник"));
  display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(utf8rus("треугольник заполненный"));
  display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();
}
void loop() {
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

Расписывать код не буду, думаю тут и так все понятно. Если будут вопросы, то смотрите урок: «Дисплей SSD1306 подключаем к Arduino. Выводим текст, рисуем фигуры». И пишите ваши вопросы в комментариях.

Управление светодиодами с выводом статуса на веб-страницу и на OLED дисплей.

Пришло время сделать что-то более интересное и применимое в жизни. В предыдущем уроке мы подключали светодиоды и создавали Веб-сервер, позволяющий управлять данными светодиодами через веб-интерфейс. Достаточно было загрузить адрес нашего устройства в строке браузера, и при нажатии кнопок, включать и выключать светодиод. При этом, в браузере мы видели статус, включен светодиод или выключен. Как же сделать так, чтобы и без приложения можно было определить, включен светодиод или нет? У вас возник вопрос: "светодиод светится и не заметить, что он работает не сложно?" Но вместо светодиода мы можем подключить нагрузку, используя реле или MOSFET транзистор. И все поместить в корпус, или разместить в распределительной коробке. И тогда, как определить, что у нас включено, а что выключено? Для этого мы и подключим OLED дисплей и выведем, для начала, статус включения светодиода. А что подключите вы, - это уже ваше решение.

Схема подключения светодиодов и OLED дисплея к ESP32.

Схема подключения светодиодов и OLED дисплея к ESP32.

Схема подключения светодиодов и OLED дисплея к ESP8266.

Схема подключения светодиодов и OLED дисплея к ESP8266.

Как видно, мы просто совместили схему из прошлого урока, и схему подключения OLED дисплея.

Скетч для ESP32 и ESP8266 вывод статуса на веб-страницу и на OLED дисплей.

Скетч писать для каждой платы отдельно не стал. Написал общий код, для прошивки обеих плат. Подключайте к ПК вашу отладочную плату, выбирайте в Arduino IDE, что за плата подключена к компьютеру, и загружаете прошивку.

#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#else
#include <WiFi.h>
#include <WebServer.h>
#endif
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Определяем переменные wifi
const char* ssid = "Wi-Fi";
const char* password = "password";
#ifdef ESP8266
// Web интерфейс для устройства
ESP8266WebServer server(80);
uint8_t LED1pin = D4;
uint8_t LED2pin = D5;
#else
// Web интерфейс для устройства
WebServer server(80);
uint8_t LED1pin = 4;
uint8_t LED2pin = 5;
#endif
bool LED1status = LOW;
bool LED2status = LOW;
bool LED1statusOld = LOW;
bool LED2statusOld = LOW;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);
  Serial.println("Connecting to ");
  Serial.println(ssid);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("SSD1306 allocation failed");
    for (;;);
  }
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
  display.cp437(true);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 3);
  display.println(utf8rus("IP:"));
  display.setCursor(32, 3);
  display.println(WiFi.localIP());
  display.setCursor(0, 20);
  display.println(utf8rus("Состояние LED1: ВЫКЛ."));
  display.setCursor(0, 40);
  display.println(utf8rus("Состояние LED2: ВЫКЛ."));
  display.display();
}
void loop() {
  server.handleClient();
  oled_text();
  if (LED1status)
  {
    digitalWrite(LED1pin, HIGH);
  }
  else
  {
    digitalWrite(LED1pin, LOW);
  }
  if (LED2status)
  {
    digitalWrite(LED2pin, HIGH);
  }
  else
  {
    digitalWrite(LED2pin, LOW);
  }
}
void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status, LED2status));
}
void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true, LED2status));
}
void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false, LED2status));
}
void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status, true));
}
void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status, false));
}
void handle_NotFound() {
  server.send(404, "text/plain", "Not found");
}
void oled_text() {
  if (LED1statusOld != LED1status || LED2statusOld != LED2status) {
    display.clearDisplay();
    display.cp437(true);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 20);
    if ( LED1status == HIGH)
      display.println(utf8rus("Состояние LED1: ВКЛ."));
    else
      display.println(utf8rus("Состояние LED1: ВЫКЛ."));
    display.setCursor(0, 40);
    if ( LED2status == HIGH)
      display.println(utf8rus("Состояние LED2: ВКЛ."));
    else
      display.println(utf8rus("Состояние LED2: ВЫКЛ."));
    display.display();
    LED1statusOld = LED1status;
    LED2statusOld = LED2status;
  }
}
String SendHTML(uint8_t led1stat, uint8_t led2stat) {
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr += "<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr += "<title>Управление светодиодом</title>\n";
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr += ".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr += ".button-on {background-color: #3498db;}\n";
  ptr += ".button-on:active {background-color: #2980b9;}\n";
  ptr += ".button-off {background-color: #34495e;}\n";
  ptr += ".button-off:active {background-color: #2c3e50;}\n";
  ptr += "p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
#ifdef ESP8266
  ptr += "<h1>ESP8266 Веб сервер</h1>\n";
#else
  ptr += "<h1>ESP32 Веб сервер</h1>\n";
#endif
  ptr += "<h3>Режим станции (STA)</h3>\n";
  if (led1stat)
  {
    ptr += "<p>Состояние LED1: ВКЛ.</p><a class=\"button button-off\" href=\"/led1off\">ВЫКЛ.</a>\n";
  }
  else
  {
    ptr += "<p>Состояние LED1: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led1on\">ВКЛ.</a>\n";
  }
  if (led2stat)
  {
    ptr += "<p>Состояние LED2: ВКЛ.</p><a class=\"button button-off\" href=\"/led2off\">ВЫКЛ.</a>\n";
  }
  else
  {
    ptr += "<p>Состояние LED2: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led2on\">ВКЛ.</a>\n";
  }
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB8;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

Описание кода для ESP32 и ESP8266, вывод статуса на веб-страницу и на OLED дисплей.

Описание кода для ESP32 и ESP8266, вывод статуса на веб-страницу и на OLED дисплей.

Расписывать весь код не буду. В предыдущем уроке мы рассмотрели, как создать Веб-сервер на ESP32, а в данном уроке подключение OLED дисплея. Осталось понять, как, на основании полученных знаний, сделать синхронно вывод, состояния светодиодов, на Веб-страницу и на OLED дисплей.

В скетч из урока: Веб-сервер ESP32 (ESP8266) в среде Arduino IDE. Подключим библиотеки для работы с OLED дисплеем, и настроим код для работы с дисплеем, что мы делали в данном уроке не однократно.

#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#else
#include <WiFi.h>
#include <WebServer.h>
#endif
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Определяем переменные wifi
const char* ssid = "Wi-Fi";
const char* password = "password";
#ifdef ESP8266
// Web интерфейс для устройства
ESP8266WebServer server(80);
uint8_t LED1pin = D4;
uint8_t LED2pin = D5;
#else
// Web интерфейс для устройства
WebServer server(80);
uint8_t LED1pin = 4;
uint8_t LED2pin = 5;
#endif

Добавим дополнительно 2 переменные для определения предыдущего состояния светодиода.

bool LED1status = LOW;
bool LED2status = LOW;
bool LED1statusOld = LOW;
bool LED2statusOld = LOW;

В функцию setup() добавим код вывода на дисплей IP-адреса устройства, а также, текущее состояние светодиодов. Так как мы только включили устройство, светодиоды выключены.

  display.cp437(true);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 3);
  display.println(utf8rus("IP:"));
  display.setCursor(32, 3);
  display.println(WiFi.localIP());
  display.setCursor(0, 20);
  display.println(utf8rus("Состояние LED1: ВЫКЛ."));
  display.setCursor(0, 40);
  display.println(utf8rus("Состояние LED2: ВЫКЛ."));
  display.display();

Напишем небольшую функцию oled_text(), которая будет выводить состояние светодиодов на OLED дисплей.

void oled_text() {
  if (LED1statusOld != LED1status || LED2statusOld != LED2status) {
    display.clearDisplay();
    display.cp437(true);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 20);
    if ( LED1status == HIGH)
      display.println(utf8rus("Состояние LED1: ВКЛ."));
    else
      display.println(utf8rus("Состояние LED1: ВЫКЛ."));
    display.setCursor(0, 40);
    if ( LED2status == HIGH)
      display.println(utf8rus("Состояние LED2: ВКЛ."));
    else
      display.println(utf8rus("Состояние LED2: ВЫКЛ."));
    display.display();
    LED1statusOld = LED1status;
    LED2statusOld = LED2status;
  }
}

Описание функции oled_text().

Сперва, нам нужно определить, изменилось ли состояние светодиодов. Для этого сравниваем текущее и предыдущее состояние светодиодов. Например, мы нажали на включение первого светодиода. Переменная LED1status стала равной HIGH, а значение переменой LED1statusOld мы задали по умолчанию равной LOW.

if (LED1statusOld != LED1status || LED2statusOld != LED2status) {

Если изменение было, то обновляем информацию на дисплее. Сначала чистим дисплей.

display.clearDisplay();

При выводе информации на дисплей есть 2 условия. В первом, если LED1status == HIGH, то мы выводим на дисплей надпись: "Состояние LED1: ВКЛ." Иначе выводим надпись "Состояние LED1: ВЫКЛ.". Второе условие аналогично, но для второго светодиода.

if ( LED1status == HIGH)
      display.println(utf8rus("Состояние LED1: ВКЛ."));
    else
      display.println(utf8rus("Состояние LED1: ВЫКЛ."));

И в конце функции переприсваиваем прошлому состоянию светодиодов LED1statusOld текущее состояние светодиодов LED1status.

LED1statusOld = LED1status;
LED2statusOld = LED2status;

С функцией oled_text() разобрались, и теперь ее осталось вызвать в основном цикле loop().

void loop() {
  server.handleClient();
  oled_text();
  if (LED1status)
  {
    digitalWrite(LED1pin, HIGH);
  }
  else
  {
    digitalWrite(LED1pin, LOW);
  }
  if (LED2status)
  {
    digitalWrite(LED2pin, HIGH);
  }
  else
  {
    digitalWrite(LED2pin, LOW);
  }
}

Для вывода синхронного статуса подключённых устройств к ESP32 и ESP8266, нужно дописать не так и много кода. Аналогично, можно выводить показание температуры и влажности с датчика DHT11, DHT22, который мы подключали к ESP32 и ESP8266 в прошлом уроке. А также, можно выводить данные с других датчиков и сенсоров. В следующем уроке про ESP32 расширим наш кругозор и изучим новые возможности данной отладочной платы.

Предыдущий урок: Урок 2. Подключаем DHT11, DHT22 к ESP32, ESP8266. Показание на веб-странице.

Понравился Урок 2. ESP32 и ESP8266 с выводом статуса на веб-страницу и на OLED дисплей? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
KY-003 цифровой датчик Холла. Подключение к Arduino. http://arduino-tex.ru/news/22/ky-003--cifrovoi-datchik-holla-podklyuchenie-k-arduino.html Константин Portal-PK 2020-11-27T14:18:08+03:00 KY-003 модуль датчика Холла (Hall sensor) выполнен на базе элемента «44E» и, по сути, является магнитным переключателем. Если рядом с ним нет магнитного поля, то на сигнальном выходе датчика имеется высокий уровень напряжения, и наоборот, если поле присутствует, то на выходе низкий уровень напряжения.

Технические характеристики модуля KY-003.

Технические характеристики модуля KY-003.

Магнитный датчик Холла KY-003 состоит из чувствительного элемента эффекта Холла 3144EUA-S, резистора 680 Ом и светодиода. Совместим с популярными электронными платформами, такими как Arduino и ESP32.

  • Рабочее напряжение: от 4,5 В. до 24 В.
  • Диапазон рабочих температур от -40 ° C. до 85 ° C.
  • Размеры 18,5 x 15 мм.

Внимание! Не перепутайте модуль KY-003 с аналоговым датчиком Холла KY-035. Модули выглядят одинаково, только на модуле KY-003 распаяны светодиод и резистор, а на модуле KY-035 их нет.

Не перепутайте модуль KY-003 с аналоговым датчиком Холла KY-035.

Схема подключения к Arduino UNO KY-003.

Схема подключения к Arduino UNO KY-003.

Схема подключения к Arduino NANO KY-003.

Схема подключения к Arduino NANO KY-003.

Подключите линию питания (посередине) к +5 Arduino, землю (-) и GND, соответственно. Подключите сигнальный контакт (S) к контакту 3 на Arduino.
Подключение датчика Холла KY-003:

  • S — цифровой выход
  • “средний контакт” —“+” 5 В (можно подключить к “+5 В” на плате Arduino)
  • “-” — общий

Пример кода (скетч) для “KY-003” и Arduino.

// KY-003 цифровой магнитный датчик Холла (Hall)
// https://arduino-tex.ru/
 
int led = 13 ; // назначение пина светодиода
int hallPin = 3 ; // назначение пина датчика
int value ; // переменная для хранения значения с датчика
 
void setup ()
{
  pinMode (led, OUTPUT);   
  pinMode (hallPin, INPUT); 
  //Serial.begin (9600);             // Задаем скорость передачи данных
}
 
void loop ()
{
  value = digitalRead (hallPin) ; // чтение значения с датчика
  if (value == LOW) // когда имеется магнитное поле светодиод горит 
  {
    digitalWrite (led, HIGH);
  }
  {
    digitalWrite (led, LOW);
  }
}

В коде KY-003 для Arduino. При обнаружении магнитного поля загорается встроенный в плату Arduino светодиод, который подключен к 13 пину. Также светодиод на самом модуле загорается при обнаружении магнитного поля. Если магнитного поля нет, то светодиод на модуле не горит.

Также светодиод на самом модуле загорается при обнаружении магнитного поля. Если магнитного поля нет, то светодиод на модуле не горит.

Применение KY-003цифрового датчика Холла.

Цифровой датчик холла KY-003 можно использовать в охранных системах, системах сигнализации и контроля процесса. Также можно применять модуль KY-003, когда нужен бесконтактный датчик. Например, в случае если у нас есть герметичный резервуар (не металлический и с относительно не толстыми стенками) и нам нужно определить приближение элемента к стенке, или перемещение элемента вдоль стенки, например, поплавка в жидкости. Так как проложить в резервуаре провода мы не можем, а закрепить магнит на подвижном элементе можно. При приближении магнита к стенке, датчик холла, установленный с противоположной стороны, позволяет определить приближение. Таким способом мы получаем бесконтактный датчик.

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-003цифровой датчик Холла. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого

]]>
KY-002 Модуль определения вибрации. Подключение к Arduino. http://arduino-tex.ru/news/21/ky-002-modul-opredeleniya-vibracii-podklyuchenie-k-arduino.html Константин Portal-PK 2020-11-25T09:12:14+03:00

Модуль вибрации KY-002 позволяет обнаружить удары и вибрацию.

Модуль вибрации KY-002 позволяет обнаружить удары и вибрацию.

KY-002 – модуль имеет на плате датчик вибрации (удара) – SW-18015, и выдает на выходе низкий уровень напряжения при срабатывании. Принцип действия SW-18015 заключается в замыкании пружинки на металлический корпус при вибрации, ударе или сильном ускорении.

KY-002 – модуль имеет на плате датчик вибрации (удара) – SW-18015

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

Характеристики модуля вибрации KY-002.

Модуль вибрации KY-002 состоит из проводящей вибрационной пружины и резистора 10 кОм, он будет реагировать на удары и вибрацию, замыкая цепь.

  • Рабочее напряжение: 5 В
  • Размеры 18,5 x 15 мм

Схема подключения модуля вибрации KY-002 к Arduino.

Схема подключения модуля вибрации KY-002 к Arduino UNO.

Схема подключения модуля вибрации KY-002 к Arduino UNO.

Схема подключения модуля вибрации KY-002 к Arduino NANO.

Схема подключения модуля вибрации KY-002 к Arduino NANO.

Подключите линию питания (посередине) +5 Arduino, землю (-) и GND. Подключите сигнал (S) к контакту 3 на Arduino.

Подключение:

  • «S» — цифровой выход
  • «средний контакт» — питание, можно подключить +5 ВArduino платы
  • «-» — GNDподключения модуля вибрации KY-002 к Arduino

Скетч вывода данных с вибродатчика KY-002 в монитор последовательного порта.

При написании кода для работы с данным модулем не нужны дополнительные библиотеки. Модуль KY-002 работает по принципу тактовой кнопки, замыкает и размыкает контакты. Причем, замыкание и размыкание происходит очень часто при одном срабатывании датчика. Но обо всем по порядку.

Arduino код для модуля вибрации KY-002.

//KY-002 вибродатчик
//Arduino Уроки https://arduino-tex.ru
int Led = 13; // встроенный в адуино светодиод
int shock = 3; // пин для подлкючения вибродатчика
int val; // переменная состояния датчика
int i; // счечик сробатываний. 
void setup () {
  pinMode (Led, OUTPUT); // LED pin as output  
  pinMode (shock, INPUT); // назначение входа для датчикаKY-002 
  Serial.begin(9600);
} 
void loop () {
  val = digitalRead (shock); // чтение состояния датчика KY-002
  if (val == HIGH ) { // когда сенсор определяет вибрацию, светодиод загорается 
    digitalWrite(Led, LOW);
  } else {
    digitalWrite (Led, HIGH);
    i++;
    Serial.print("shock: ");
    Serial.println(i);
  }
}

Как видно из кода, мы подключили датчик KY-002 и используем светодиод, встроенный в плату Arduino, для сигнализации, когда происходит срабатывание датчика. Но так как при одном ударе по столу происходит несколько замыканий и размыканий, это можно увидеть в мониторе последовательного порта, соответственно, светодиод будет мерцать. Устойчивого и яркого свечения светодиода сложно добиться без изменения кода.

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

Применение модуля вибрации KY-002.

Сенсор KY-002 можно использовать в системе охраны, системе автоматики дома, или для контроля оборудования. Также, можно сделать простую сигнализацию для автомобиля.

Сенсор KY-002 можно использовать в системе охраны, системе автоматики дома, или для контроля оборудования. Также, можно сделать простую сигнализацию для автомобиля.

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

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-002 Модуль определения вибрации. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого

]]>
KY-001 модуль температуры на базе DS18B20. Подключение к Arduino. http://arduino-tex.ru/news/20/ky-001-modul-temperatury-na-baze-ds18b20-podklyuchenie-arduino.html Константин Portal-PK 2020-11-19T13:42:52+03:00 Сегодня первый урок по подключению модуля из набора «37 in 1 Sensors Kit for Arduino». И подключим, в данном Arduino уроке, модуль KY-001, предназначение которого измерение температуры окружающей среды. Построен данный модуль на базе распространённого датчика DS18B20. На моем втором сайте про Arduino я уже рассказывал про данный датчик температуры, и подключал его к Arduino. Сейчас мы рассмотрим подробнее схему подключения модуля KY-001 к Arduino. Код можно взять из предыдущего урока про датчик температуры DS18B20.

модуль KY-001

Характеристики датчика DS18B20:

  • Погрешность измерения не больше 0,5 С (для температуры от -10С до +85С). Не требуется дополнительной калибровки.
  • Диапазон измерений от -55 С до +125 С.
  • Напряжение питания от 3,3В до 5В.
  • Датчик обладает своим уникальным серийным кодом.
  • Не требуется дополнительных внешних элементов.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу Wire.
  • Существует, так называемый, режим «паразитного питания», – в нем происходит питание напрямую от линии связи. Для подключения, в этом случае, нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температуре выше 100С. Режим паразитного питания удобно применять для приложений с удаленным температурным датчиком.

Характеристики модуля KY-001.

Модуль датчика температуры KY-001 состоит из цифрового датчика температуры DS18B20, светодиода и резистора. Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.

Характеристики модуля KY-001.

  • Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V.
  • Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F.
  • В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C.
  • Время измерения не более 750 миллисекунд.

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

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino NANO.

Схема подключения модуля KY-001 (DS18B20) к Arduino UNOСхема подключения модуля KY-001 (DS18B20) к Arduino.

Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND соответственно. Подключите сигнал (S) к контакту 2 на Arduino.

Подключение (слева направо)

  • GND
  • +5V
  • S - Signal, в примере подключаем ко 2 выводу arduino

Скетч вывода температуры с модуля KY-001 (DS18B20) в монитор порта.

Код ниже будет выводить показания температуры с модуля KY-001 (DS18B20) в монитор последовательного порта каждую секунду.

#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data[12];
    byte addr[8];
    float celsius;
    // поиск датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // измерение температуры
    delay(1000);
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // начало чтения измеренной температуры
    //показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data[i] = ds.read();
    }
    int16_t raw = (data[1] << 8) | data[0];
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
    // преобразование показаний в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);
}

Вот такой результат мы увидим в мониторе порта.

Вот такой результат мы увидим в мониторе порта.

Данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature.h. Данная библиотека ставится поверх OneWire.h, т.е. для ее работы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

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

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void){
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

В данном примере температура выводится 1 раз в секунду, и при этом выводится температура в Цельсиях и Фаренгейтах в монитор последовательного порта.

В данном примере температура выводится 1 раз в секунду, и при этом выводится температура в Цельсиях и Фаренгейтах в монитор последовательного порта.

Как видите, данный пример намного меньше и более понятен для новичка.

модуль KY-001 позволяет достаточно быстро подключить датчик температуры DS18B20 к Arduino

Как видим, данный модуль KY-001 позволяет достаточно быстро подключить датчик температуры DS18B20 к Arduino, без использования дополнительных компонентов (резистора). Плюс, распаянный светодиод на плате модуля KY-001 позволяет понять, что все подключено правильно и работает.

Купить модуль KY-001 можно тут:

KY-001 модуль температуры на базе DS18B20 KY-001 модуль температуры на базе DS18B20

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-001 модуль температуры на базе DS18B20. Подключение Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
37 in 1 Sensors Kit for Arduino. Набор датчиков и индикаторов для Arduino http://arduino-tex.ru/news/19/37-in-1-sensors-kit-for-arduino-nabor-datchikov-i-indikatorov-dlya.html Константин Portal-PK 2020-11-19T12:57:24+03:00 Как вы знаете, что я увлекаюсь Arduino. Собираю различные проекты, от самых простых, до ЧПУ станков. Также снимаю и пишу уроки. Для расширения своего кругозора купил набор модулей для Arduino «37 in 1 Sensors Kit for Arduino».

Для расширения своего кругозора купил набор модулей для Arduino «37 in 1 Sensors Kit for Arduino».

Для чего нужен набор «37 in 1 Sensors Kit for Arduino»,и на кого он рассчитан?

Набор состоит из распаянных на платах, в виде модуля, различных сенсоров, датчиков и прочих периферийных устройств, таких как тактовая кнопка, энкодер и двухосевой джойстик. Благодаря тому, что все датчики распаяны в виде модуля, подключение к Arduino происходит без дополнительной обвязки. Вам не нужно думать, какой резистор поставить. Достаточно правильно подключись модуль к Arduino, и получать данные, управлять или получать сигнал. Исходя из этого, данный набор отлично подойдёт для новичка, который планирует изучать Arduino, ESP32, ESP8266. Да, эти модули можно подключить не только к Arduino, но и к другим платформам: Raspberry Pi, Esp8266, ESP32, STM32.

И как подключить модули к Arduino?

И как подключить модули к Arduino?

Ниже приведен список модулей, которые входят в набор «37 in 1 Sensors Kit for Arduino». И ссылки на полное описание функций каждого модуля, его схемы, описание подключения к Arduino. Если у модуля еще нет ссылки, то это значит, что я еще не написал урок. Подождите немного, и урок будет доступен.

Состав комплекта «37 in 1 Sensors Kit for Arduino»:

Общее количество 37 шт.

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

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

Мое мнение, новичок ты или нет, но купить данный набор можно и нужно.

Купить набор 37 датчиков и сенсоров для Arduino можно тут:

37 in 1 Sensors Kit for Arduino 37 in 1 Sensors Kit for Arduino

Пишите в комментариях ваше мнение о наборе и об уроках по подключению модулей.

Понравилась статья 37 in 1 Sensors Kit for Arduino. Набор датчиков и индикаторов для Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!


]]>
Урок 2. Подключаем DHT11, DHT22 к ESP32, ESP8266. Показание на веб-странице. http://arduino-tex.ru/news/18/urok-2-podklyuchaem-dht11-dht22-k-esp32-esp8266-pokazanie-na.html Константин Portal-PK 2020-11-12T13:03:22+03:00 Вы когда-нибудь хотели, чтобы датчики, разбросанные по всей квартире или дому, регулярно отправляли данные температуры и влажности на веб-сервер, и их можно будет посмотреть в любое время? Тогда этот урок ESP32 может стать для вас отправной точкой! В этом уроке ESP32 используется в качестве устройства управления, которое легко подключается к существующей сети Wi-Fi и создает веб-сервер. Когда любое подключенное устройство обращается к этому веб-серверу, ESP32 считывает температуру и относительную влажность с датчиков DHT11, DHT22 и отображает их в веб-браузере этого устройства. Вас заинтересовало, как это реализовать? Тогда давайте начнем!

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

Схема подключения датчика DHT11, DHT22 к ESP32.

Подключить датчик DHT11, DHT22 к ESP32 довольно просто. Начните с размещения ESP32 на макетной плате.

Схема подключения датчика DHT11, DHT22 к ESP32

Теперь поместите датчик на макетную плату рядом с ESP32. Подключите вывод VCC на датчике к выводу 3,3 В на ESP32, и соедините контакты GND платы и датчика. Также подключите контакт данных датчика к контакту 4 на ESP32.

 веб-серверу, ESP32 считывает температуру и относительную влажность с датчиков DHT11, DHT22

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

Установка библиотеки датчиков DHT.

Взаимодействие с датчиками DHT11, DHT22- это достаточно сложно, поскольку у них есть собственный однопроводной протокол для передачи данных. И этот протокол требует точного времени. К счастью, нам не нужно сильно об этом беспокоиться, потому что мы собираемся использовать библиотеку DHT от Adafruit, которая позаботится почти обо всем. Библиотека работает как на архитектуре Arduino, так и на ESP.

Чтобы установить библиотеку, перейдите в Скетч> Подключить библиотеку> Управлять библиотеками ... Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Установка библиотеки датчиков DHT.

Отфильтруйте результаты поиска, набрав «DHT». Должна быть пара записей. Ищите библиотеку датчиков DHT от Adafruit. Щелкните эту запись и выберите «Установить».

библиотеку датчиков DHT от Adafruit

Библиотека датчиков DHT использует серверную часть поддержки Adafruit Sensor. Итак, найдите в диспетчере еще одну библиотеку «Adafruit Unified Sensor» и установите её тоже.

Adafruit Sensor

Создание веб-сервера ESP32 в режиме WiFi станции (STA).

Как следует из заголовка, мы собираемся настроить ESP32 в режим станции (STA) и создать веб-сервер для отображения веб-страницы для любого подключенного клиента в существующей сети.

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

/* Установите здесь свои SSID и пароль */
const char* ssid = "ESP32";  // Enter SSID here
const char* password = "0123456";  //Enter Password here

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

#include <WiFi.h>
#include <WebServer.h>
#include "DHT.h"
// Раскомментируйте одну из строк ниже в зависимости от того, какой датчик вы используете!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
/* Установите здесь свои SSID и пароль */
const char* ssid = "ESP32";  // Enter SSID here
const char* password = "password";  //Enter Password here
WebServer server(80);
// DHT Sensor
uint8_t DHTPin = 4; 
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                
float Temperature;
float Humidity;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();              
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
}
void handle_OnConnect() {
 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP32. Информация о температуре</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP32. Информация о температуре в помещении:</h1>\n";
  ptr +="<p>Температура: ";
  ptr +=(int)Temperaturestat;
  ptr +="°C</p>";
  ptr +="<p>Влажность: ";
  ptr +=(int)Humiditystat;
  ptr +="%</p>";
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Доступ к веб-серверу.

После загрузки скетча откройте Serial Monitor со скоростью 115200 бод, и нажмите кнопку RESET на ESP32. Если все в порядке, он выведет динамический IP-адрес, полученный от вашего маршрутизатора, и покажет сообщение о запуске HTTP-сервера.

Доступ к веб-серверу.

Затем загрузите браузер и укажите ему IP-адрес, отображаемый в последовательном мониторе порта. ESP32 должен отдать веб-страницу, показывающую температуру и относительную влажность.

 ESP32 должен отдать веб-страницу, показывающую температуру и относительную влажность.


Подробное объяснение кода.

Скетч начинается с подключения библиотеки WiFi.h. Эта библиотека предоставляет специальные методы WiFi для ESP32, которые мы вызываем для подключения к сети. После этого мы также подключаем библиотеку WebServer.h, в которой есть несколько доступных методов, которые помогут нам настроить сервер и обрабатывать входящие HTTP-запросы, не беспокоясь о реализации на низком уровне. Наконец, мы подключаем библиотеку DHT.h.

#include <WiFi.h>
#include <WebServer.h>
#include "DHT.h"

Далее нам нужно определить тип используемого датчика DHT. Раскомментируйте одну из строк ниже! В моем примере я использую датчик DHT11.

// Раскомментируйте одну из строк ниже в зависимости от того, какой датчик вы используете!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

Поскольку мы настраиваем ESP32 в режиме станции (STA), он подключится к существующей сети Wi-Fi. Следовательно, вам необходимо указать ему SSID и пароль вашей сети. Что и сделали перед загрузкой кода в ESP32.

/* Установите здесь свои SSID и пароль */
const char* ssid = "ESP32";  // Enter SSID here
const char* password = "password";  //Enter Password here

Затем, объявляем объект библиотеки WebServer, чтобы получить доступ к его функциям. Конструктор этого объекта принимает порт (который сервер будет слушать) в качестве параметра. Поскольку 80 - порт по умолчанию для HTTP, мы будем использовать это значение. Теперь вы можете получить доступ к серверу без необходимости указывать порт в URL-адресе.

WebServer server(80);

Затем нам нужно определить номер контакта ESP32, к которому подключен контакт Data нашего датчика, и создать объект DHT. Таким образом, мы можем получить доступ к специальным функциям, связанным с библиотекой DHT.

// DHT Sensor
uint8_t DHTPin = 4; 
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

Создаем две переменные с плавающей запятой. Для температуры и влажности.

float Temperature;
float Humidity;

Функция Setup ().

Мы настраиваем свой HTTP-сервер перед его запуском. Затем, мы открываем последовательное соединение для отладки и устанавливаем GPIO на INPUT. Нам также необходимо инициализировать объект DHT с помощью begin() функции.

Serial.begin(115200);
delay(100);
pinMode(DHTPin, INPUT);
dht.begin();

Теперь нам нужно подключиться к сети Wi-Fi с помощью WiFi.begin() функции. Функция принимает в качестве параметра SSID (сетевое имя) и пароль.

Serial.println("Connecting to ");
Serial.println(ssid);
//connect to your local wi-fi network
WiFi.begin(ssid, password);

Пока ESP32 пытается подключиться к сети, мы можем проверить статус подключения с помощью функции WiFi.status () .

Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

Как только ESP32 подключится к сети, скетч выведет IP-адрес в последовательный монитор порта, назначенный ESP32, за что отвечает функция WiFi.localIP.

Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

Чтобы обрабатывать входящие HTTP-запросы, нам нужно указать, какой код выполнять при вызове конкретного URL. Для этого мы используем метод on . Этот метод принимает два параметра. Первый - это URL-путь, а второй - имя функции, которую мы хотим выполнить при переходе по этому URL-адресу.

Приведенный ниже код указывает, что когда сервер получает HTTP-запрос по корневому пути ( / ), он запускает handle_OnConnect функцию. Обратите внимание, что указанный URL-адрес является относительным путем.

server.on("/", handle_OnConnect);

Мы не указали, что должен делать сервер, если клиент запрашивает любой URL-адрес, отличный от указанного в server.on(). Он должен ответить HTTP-статусом 404 (Not Found) и сообщением для пользователя. Мы также помещаем в функцию и используем server.onNotFound(), чтобы сообщить, что она должна выполнить ее, когда получит запрос на URI, который не был указан в server.on.

server.onNotFound(handle_NotFound);

Теперь, чтобы запустить наш сервер, мы вызываем метод begin объекта server.

server.begin();
Serial.println("HTTP server started");

Основной цикл Loop().

Чтобы обрабатывать входящие HTTP-запросы, нам нужно вызвать handleClient() метод объекта сервера.

server.handleClient();

Затем, нам нужно создать функцию, которую мы прикрепили к корневому (/) URL с помощью server.on. Помните? В начале этой функции мы получаем значения температуры и влажности с датчика. Чтобы ответить на HTTP-запрос, мы используем метод send . Хотя метод может быть вызван с другим набором аргументов, его простейшая форма состоит из кода ответа HTTP.

В нашем случае, мы отправляем код 200 (один из кодов состояния HTTP), который соответствует ответу OK - ответ получен. Затем, мы указываем тип содержимого как «текст / html» и, наконец, вызываем пользовательскую функцию SendHTML (), которая создает динамическую HTML-страницу, содержащую значения температуры и влажности.

void handle_OnConnect() 
{
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}

Точно так же нам нужно создать функцию для обработки страницы ошибки 404.

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

Отображение веб-страницы HTML.

SendHTML() Функция отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP32 получает запрос от веб-клиента. Он просто объединяет HTML-код в большую строку и возвращает server.send() функцию, которую мы обсуждали ранее. Функция принимает значения температуры и влажности в качестве параметров для динамической генерации содержимого HTML.

Первый текст, который вы всегда должны отправить <! DOCTYPE>, указывающий на то, что мы посылаем HTML код.

String SendHTML(float Temperaturestat,float Humiditystat){
String ptr = "<!DOCTYPE html> <html>\n";

Затем элемент <meta> viewport заставляет веб-страницу загружаться в любом браузере. В то время как тег title устанавливает заголовок страницы.

  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP32. Информация о температуре</title>\n";

Стилизация веб-страницы.

Затем у нас есть CSS для стилизации внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться, в виде встроенного блока, и выравниваться по центру.

ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";

Затем следующий код устанавливает цвет, шрифт и поля вокруг тегов H1 и p.

ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";

Установка заголовка веб-страницы.

Далее задается заголовок веб-страницы. Вы можете изменить этот текст на любой, который подходит для вашего приложения.

  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP32. Информация о температуре в помещении:</h1>\n";

Отображение температуры и влажности на веб-странице.

Чтобы динамически отображать значения температуры и влажности, мы помещаем эти значения в тег абзаца «p». Эти значения преобразуются в целые числа путем приведения типа переменной (int). Для отображения символа градуса мы используем HTML-объект & deg;

  ptr +="<p>Температура: ";
  ptr +=(int)Temperaturestat;
  ptr +="°C</p>";
  ptr +="<p>Влажность: ";
  ptr +=(int)Humiditystat;
  ptr +="%</p>";

Стилизация веб-страницы, чтобы выглядело более профессионально.

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

Стилизация веб-страницы, чтобы выглядело более профессионально.

Давайте применим некоторый стиль к предыдущей HTML-странице. Для начала скопируйте и вставьте код ниже, полностью заменим SendHTML() функцию. Попробуйте новый код, а затем мы его детально разберем.

#include <WiFi.h>
#include <WebServer.h>
#include "DHT.h"
// Раскомментируйте одну из строк ниже в зависимости от того, какой датчик вы используете!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
/* Установите здесь свои SSID и пароль */
const char* ssid = "Wi-Fi";  // Enter SSID here
const char* password = "password";  //Enter Password here
WebServer server(80);
// DHT Sensor
uint8_t DHTPin = 4; 
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                
float Temperature;
float Humidity;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();              
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
}
void handle_OnConnect() {
 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600\" rel=\"stylesheet\">\n";
  ptr +="<title>ESP32. Информация о температуре</title>\n";
  ptr +="<style>html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #333333;}\n";
  ptr +="body{margin-top: 50px;}\n";
  ptr +="h1 {margin: 50px auto 30px;}\n";
  ptr +=".side-by-side{display: inline-block;vertical-align: middle;position: relative;}\n";
  ptr +=".humidity-icon{background-color: #3498db;width: 30px;height: 30px;border-radius: 50%;line-height: 36px;}\n";
  ptr +=".humidity-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}\n";
  ptr +=".humidity{font-weight: 300;font-size: 60px;color: #3498db;}\n";
  ptr +=".temperature-icon{background-color: #f39c12;width: 30px;height: 30px;border-radius: 50%;line-height: 40px;}\n";
  ptr +=".temperature-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}\n";
  ptr +=".temperature{font-weight: 300;font-size: 60px;color: #f39c12;}\n";
  ptr +=".superscript{font-size: 17px;font-weight: 600;position: absolute;right: -20px;top: 15px;}\n";
  ptr +=".data{padding: 10px;}\n";
  ptr +="</style>\n";
  //ptr +="<meta http-equiv=\"refresh\" content=\"2\" >\n";
  ptr +="<script>\n";
  ptr +="setInterval(loadDoc,200);\n";
  ptr +="function loadDoc() {\n";
  ptr +="var xhttp = new XMLHttpRequest();\n";
  ptr +="xhttp.onreadystatechange = function() {\n";
  ptr +="if (this.readyState == 4 && this.status == 200) {\n";
  ptr +="document.getElementById(\"webpage\").innerHTML =this.responseText}\n";
  ptr +="};\n";
  ptr +="xhttp.open(\"GET\", \"/\", true);\n";
  ptr +="xhttp.send();\n";
  ptr +="}\n";
  ptr +="</script>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
   ptr +="<div id=\"webpage\">\n";
   ptr +="<h1>ESP32. Информация о температуре в помещении:</h1>\n";
   ptr +="<div class=\"data\">\n";
   ptr +="<div class=\"side-by-side temperature-icon\">\n";
   ptr +="<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n";
   ptr +="width=\"9.915px\" height=\"22px\" viewBox=\"0 0 9.915 22\" enable-background=\"new 0 0 9.915 22\" xml:space=\"preserve\">\n";
   ptr +="<path fill=\"#FFFFFF\" d=\"M3.498,0.53c0.377-0.331,0.877-0.501,1.374-0.527C5.697-0.04,6.522,0.421,6.924,1.142\n";
   ptr +="c0.237,0.399,0.315,0.871,0.311,1.33C7.229,5.856,7.245,9.24,7.227,12.625c1.019,0.539,1.855,1.424,2.301,2.491\n";
   ptr +="c0.491,1.163,0.518,2.514,0.062,3.693c-0.414,1.102-1.24,2.038-2.276,2.594c-1.056,0.583-2.331,0.743-3.501,0.463\n";
   ptr +="c-1.417-0.323-2.659-1.314-3.3-2.617C0.014,18.26-0.115,17.104,0.1,16.022c0.296-1.443,1.274-2.717,2.58-3.394\n";
   ptr +="c0.013-3.44,0-6.881,0.007-10.322C2.674,1.634,2.974,0.955,3.498,0.53z\"/>\n";
   ptr +="</svg>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"side-by-side temperature-text\">Температура</div>\n";
   ptr +="<div class=\"side-by-side temperature\">";
   ptr +=(int)Temperaturestat;
   ptr +="<span class=\"superscript\">°C</span></div>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"data\">\n";
   ptr +="<div class=\"side-by-side humidity-icon\">\n";
   ptr +="<svg version=\"1.1\" id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\"; width=\"12px\" height=\"17.955px\" viewBox=\"0 0 13 17.955\" enable-background=\"new 0 0 13 17.955\" xml:space=\"preserve\">\n";
   ptr +="<path fill=\"#FFFFFF\" d=\"M1.819,6.217C3.139,4.064,6.5,0,6.5,0s3.363,4.064,4.681,6.217c1.793,2.926,2.133,5.05,1.571,7.057\n";
   ptr +="c-0.438,1.574-2.264,4.681-6.252,4.681c-3.988,0-5.813-3.107-6.252-4.681C-0.313,11.267,0.026,9.143,1.819,6.217\"></path>\n";
   ptr +="</svg>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"side-by-side humidity-text\">Влажность</div>\n";
   ptr +="<div class=\"side-by-side humidity\">";
   ptr +=(int)Humiditystat;
   ptr +="<span class=\"superscript\">%</span></div>\n";
   ptr +="</div>\n";
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Мы уже знаем, что объявление <! DOCTYPE> сообщает браузеру, что мы отправляем HTML-код, а элемент области просмотра <meta> заставляет веб-страницу реагировать. Единственное дополнение - мы собираемся использовать шрифты Google . У Google есть сотни веб-шрифтов, которые бесплатны для коммерческого и личного использования.

Для нашей веб-страницы мы будем использовать Google веб-шрифт Open Sans. Шрифт Google встроен с помощью тега ссылки в <head> вашего HTML-документа. Для нашей страницы мы выбрали 300 (светлый), 400 (обычный) и 600 (жирный) шрифт. Вы можете выбрать столько, сколько хотите, но имейте в виду, что выбор неиспользуемого шрифта увеличивает время загрузки страницы. Вы также можете добавить курсив, просто добавив символ «i» в конце веса шрифта, например: «400i» будет отображать курсив.

Обратите внимание, что вы не увидите шрифт Google без активного подключения к Интернету на устройстве, на котором вы собирайтесь получить доступ к этой странице. Шрифты Google загружаются на лету.

  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600\" rel=\"stylesheet\">\n";

Затем, мы собираемся применить шрифт Open Sans для всего нашего HTML. Нам также необходимо указать sans-serif в качестве резервного шрифта, чтобы обеспечить максимальную совместимость между браузерами / операционными системами. Если браузер не поддерживает первый шрифт, он пробует следующий шрифт.

ptr +="<title>ESP32. Информация о температуре</title>\n";
  ptr +="<style>html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #333333;}\n";
  ptr +="body{margin-top: 50px;}\n";
  ptr +="h1 {margin: 50px auto 30px;}\n";

Затем нам нужно применить CSS стили для значков влажности и температуры, заголовков и фактических значений. Все эти три элемента сделаны встроенными и выравнены по вертикали. Фон иконок представляет собой круг с радиусом границы 50% и имеет высоту и ширину 30 пикселей.

ptr +=".side-by-side{display: inline-block;vertical-align: middle;position: relative;}\n";
  ptr +=".humidity-icon{background-color: #3498db;width: 30px;height: 30px;border-radius: 50%;line-height: 36px;}\n";
  ptr +=".humidity-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}\n";
  ptr +=".humidity{font-weight: 300;font-size: 60px;color: #3498db;}\n";
  ptr +=".temperature-icon{background-color: #f39c12;width: 30px;height: 30px;border-radius: 50%;line-height: 40px;}\n";
  ptr +=".temperature-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}\n";
  ptr +=".temperature{font-weight: 300;font-size: 60px;color: #f39c12;}\n";
  ptr +=".superscript{font-size: 17px;font-weight: 600;position: absolute;right: -20px;top: 15px;}\n";
  ptr +=".data{padding: 10px;}\n";
  ptr +="</style>\n";

Далее мы выводим показание температуры с помощью значка.

Значок температуры, на самом деле, представляет собой масштабируемую векторную графику (SVG), определенную в теге <svg>. Создание SVG не требует особых навыков программирования. Вы можете использовать Google SVG Editor для создания графики для своей страницы. После значка мы собираемся показать фактическое значение температуры с датчика.

    ptr +="<div id=\"webpage\">\n";   
   ptr +="<h1>ESP32. Информация о температуре в помещении:</h1>\n";
   ptr +="<div class=\"data\">\n";
   ptr +="<div class=\"side-by-side temperature-icon\">\n";
   ptr +="<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n";
   ptr +="width=\"9.915px\" height=\"22px\" viewBox=\"0 0 9.915 22\" enable-background=\"new 0 0 9.915 22\" xml:space=\"preserve\">\n";
   ptr +="<path fill=\"#FFFFFF\" d=\"M3.498,0.53c0.377-0.331,0.877-0.501,1.374-0.527C5.697-0.04,6.522,0.421,6.924,1.142\n";
   ptr +="c0.237,0.399,0.315,0.871,0.311,1.33C7.229,5.856,7.245,9.24,7.227,12.625c1.019,0.539,1.855,1.424,2.301,2.491\n";
   ptr +="c0.491,1.163,0.518,2.514,0.062,3.693c-0.414,1.102-1.24,2.038-2.276,2.594c-1.056,0.583-2.331,0.743-3.501,0.463\n";
   ptr +="c-1.417-0.323-2.659-1.314-3.3-2.617C0.014,18.26-0.115,17.104,0.1,16.022c0.296-1.443,1.274-2.717,2.58-3.394\n";
   ptr +="c0.013-3.44,0-6.881,0.007-10.322C2.674,1.634,2.974,0.955,3.498,0.53z\"/>\n";
   ptr +="</svg>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"side-by-side temperature-text\">Температура</div>\n";
   ptr +="<div class=\"side-by-side temperature\">";
   ptr +=(int)Temperaturestat;
   ptr +="<span class=\"superscript\">°C</span></div>\n";
   ptr +="</div>\n";

Далее мы выведем показания влажности с помощью этойиконки.

Опять же, это SVG. После вывода значения влажности закроем все открытые теги, такие как body и html.

   ptr +="<div class=\"data\">\n";
   ptr +="<div class=\"side-by-side humidity-icon\">\n";
   ptr +="<svg version=\"1.1\" id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\"; width=\"12px\" height=\"17.955px\" viewBox=\"0 0 13 17.955\" enable-background=\"new 0 0 13 17.955\" xml:space=\"preserve\">\n";
   ptr +="<path fill=\"#FFFFFF\" d=\"M1.819,6.217C3.139,4.064,6.5,0,6.5,0s3.363,4.064,4.681,6.217c1.793,2.926,2.133,5.05,1.571,7.057\n";
   ptr +="c-0.438,1.574-2.264,4.681-6.252,4.681c-3.988,0-5.813-3.107-6.252-4.681C-0.313,11.267,0.026,9.143,1.819,6.217\"></path>\n";
   ptr +="</svg>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"side-by-side humidity-text\">Влажность</div>\n";
   ptr +="<div class=\"side-by-side humidity\">";
   ptr +=(int)Humiditystat;
   ptr +="<span class=\"superscript\">%</span></div>\n";
   ptr +="</div>\n";

Улучшение кода - автоматическое обновление страницы.

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

Добавив один метатег в HTML-документ, можно указать браузеру автоматически перезагружать страницу с заданным интервалом.

<meta http-equiv="refresh" content="2" >

Поместите этот код в тег <head> вашего документа, этот метатег будет заставлять браузер обновлять страницу каждые две секунды.

Динамическая загрузка данных датчика с помощью AJAX.

Обновление веб-страницы не слишком практично, если у вас тяжелая веб-страница. Лучшим методом является использованиеJavascript и Xml ( AJAX ), чтобы мы могли запрашивать данные с сервера асинхронно (в фоновом режиме) без обновления страницы.

Объект XMLHttpRequest в JavaScript обычно используется для выполнения AJAX на веб-страницах. Он выполняет тихий запрос GET на сервере и обновляет элемент на странице. AJAX - это не новая технология или другой язык, это просто существующие технологии, используемые по-новому. Помимо этого, AJAX также позволяет:

  • Запросить данные с сервера после загрузки страницы
  • Получать данные с сервера после загрузки страницы
  • Отправка данных на сервер в фоновом режиме

Вот сценарий AJAX, который мы будем использовать. Поместите этот скрипт непосредственно перед закрытием тега </head>.

ptr +="<script>\n";
ptr +="setInterval(loadDoc,200);\n";
ptr +="function loadDoc() {\n";
ptr +="var xhttp = new XMLHttpRequest();\n";
ptr +="xhttp.onreadystatechange = function() {\n";
ptr +="if (this.readyState == 4 && this.status == 200) {\n";
ptr +="document.getElementById(\"webpage\").innerHTML =this.responseText}\n";
ptr +="};\n";
ptr +="xhttp.open(\"GET\", \"/\", true);\n";
ptr +="xhttp.send();\n";
ptr +="}\n";
ptr +="</script>\n";

Скрипт начинается с тега <script>, поскольку сценарий AJAX - это не что иное, как javascript, поэтому нам нужно записать его в теге <script>. Чтобы эта функция вызывалась многократно, мы будем использовать функцию javascript setInterval () . Она принимает два параметра - функцию, которая должна выполняться, и временной интервал (в миллисекундах), определяющий, как часто следует выполнять функцию.

ptr +="<script>\n";
ptr +="setInterval(loadDoc,200);\n";

В основе этого сценария лежит loadDoc() функция. Внутри этой функции создается XMLHttpRequest() объект. Этот объект используется для запроса данных с веб-сервера.

ptr +="function loadDoc() {\n";
ptr +="var xhttp = new XMLHttpRequest();\n";

xhttp.onreadystatechange() функция вызывается каждый раз, когда readyState изменяется. Свойство readyState содержит статус XMLHttpRequest. Имеет одно из следующих значений.

  • 0: запрос не инициализирован
  • 1: соединение с сервером установлено
  • 2: запрос получен
  • 3: обработка запроса
  • 4: запрос завершен и готов ответ

Свойство status содержит статус объекта XMLHttpRequest. Имеет одно из следующих значений.

  • 200: «ОК»
  • 403: «Запрещено»
  • 404: «Страница не найдена»

Когда значение readyState равно 4, а состояние равно 200, означает, что ответ получен. Теперь обновляем содержимое элемента с id веб-страницы (div, в котором хранятся значения температуры и влажности).

ptr +="xhttp.onreadystatechange = function() {\n";
ptr +="if (this.readyState == 4 && this.status == 200) {\n";
ptr +="document.getElementById(\"webpage\").innerHTML =this.responseText}\n";
ptr +="};\n";

Затем HTTP-запрос инициируется с помощью функций open () и send ().

ptr +="xhttp.open(\"GET\", \"/\", true);\n";
ptr +="xhttp.send();\n";
ptr +="}\n";

Подключаем DHT11, DHT22 к ESP8266 (NodeMCU). Выводим показание на веб-странице.

Как подключить DHT11, DHT22 датчик температуры и влажности к ESP32 и вывести полученные значения на веб-страницу рассмотрели. Сейчас посмотрим, как можно подключить датчик температуры и влажности DHT11, DHT22 к ESP8266 (NodeMCU), и что нужно изменить в коде для создания универсального скетча, который подойдет для ESP32 и ESP8266.

Подключаем DHT11, DHT22 к ESP8266 (NodeMCU). Выводим показание на веб-странице.

Если вы не работали с отладочной платой ESP8266 (NodeMCU) прочитайтеэто статью:

Что такое NodeMCU? Программируем в среде Arduino IDE.

Схема подключения DHT11, DHT22 к ESP8266 NodeMCU.

Подключим вывод VCC на датчике к выводу 3,3 В на NodeMCU, и вывод GND на плате соседим с вводом GND датчика. Также подключите контакт Data на датчике к контакту D4 на ESP8266 (NodeMCU).

Должно получиться что-то похожее на изображение, показанное ниже.

Схема подключения DHT11, DHT22 к ESP8266 NodeMCU.

Установка библиотеки датчиков DHT для работы с ESP8266 NodeMCU.

Если вы установили DHT библиотеку для ESP32, то устанавливать библиотеку для ESP8266 (NodeMCU) не нужно, так как библиотека используется одна для работы с обеими платами.Если у вас библиотека не установлена, установите библиотеку по инструкции, которая описана выше для ESP32.

Изменения в скетче для ESP8266 NodeMCU.

Первым делом, нам нужно изменить библиотеки для работы с ESP8266.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

Затем, объявляем объект библиотеки ESP8266WebServer, чтобы получить доступ к ее функциям. Конструктор этого объекта в качестве параметра принимает номер порта (который сервер будет прослушивать).

// Web интерфейс для устройства
ESP8266WebServer server(80);

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

uint8_t LED1pin = D4;
uint8_t LED2pin = D5;

Осталось подправить в HTML странице выводимую информацию. Здесь изменим заголовок страницы, чтоб было понято, что данный пример работает на ESP8266 (NodeMCU).

ptr +="<h1>ESP8266. Информация о температуре в помещении:</h1>\n";

Скетч подключения датчика температуры и влажности DHT11, DHT22 к ESP8266 (NodeMCU) и вывод данных на веб-страницу.

Универсальный код для ESP32 end ESP8266.

Универсальный скетч подключения датчика температуры и влажности DHT11, DHT22 к ESP8266 (ESP32) и вывод данных на веб-страницу.

Чтобы не плодить десятки версий кода для ESP32 и ESP8266, код можно объединить, что позволит, используя один скетч, прошивать ESP32 и ESP8266, достаточно только выбрать нужную плату в Arduino IDE.

#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#else
#include <WiFi.h>
#include <WebServer.h>
#endif
#include "DHT.h"
// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
/*Put your SSID & Password*/
const char* ssid = "Wi-Fi";  // Enter SSID here
const char* password = "password";  //Enter Password here
#ifdef ESP8266
// Web интерфейс для устройства
ESP8266WebServer server(80);
// DHT Sensor
uint8_t DHTPin = D4; 
#else
WebServer server(80);
// DHT Sensor
uint8_t DHTPin = 4; 
 #endif              
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                
float Temperature;
float Humidity;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();              
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
}
void handle_OnConnect() {
 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600\" rel=\"stylesheet\">\n";
  ptr +="<title>Информация о температуре</title>\n";
  ptr +="<style>html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #333333;}\n";
  ptr +="body{margin-top: 50px;}\n";
  ptr +="h1 {margin: 50px auto 30px;}\n";
  ptr +=".side-by-side{display: inline-block;vertical-align: middle;position: relative;}\n";
  ptr +=".humidity-icon{background-color: #3498db;width: 30px;height: 30px;border-radius: 50%;line-height: 36px;}\n";
  ptr +=".humidity-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}\n";
  ptr +=".humidity{font-weight: 300;font-size: 60px;color: #3498db;}\n";
  ptr +=".temperature-icon{background-color: #f39c12;width: 30px;height: 30px;border-radius: 50%;line-height: 40px;}\n";
  ptr +=".temperature-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}\n";
  ptr +=".temperature{font-weight: 300;font-size: 60px;color: #f39c12;}\n";
  ptr +=".superscript{font-size: 17px;font-weight: 600;position: absolute;right: -20px;top: 15px;}\n";
  ptr +=".data{padding: 10px;}\n";
  ptr +="</style>\n";
  //ptr +="<meta http-equiv=\"refresh\" content=\"2\" >\n";
  ptr +="<script>\n";
  ptr +="setInterval(loadDoc,200);\n";
  ptr +="function loadDoc() {\n";
  ptr +="var xhttp = new XMLHttpRequest();\n";
  ptr +="xhttp.onreadystatechange = function() {\n";
  ptr +="if (this.readyState == 4 && this.status == 200) {\n";
  ptr +="document.getElementById(\"webpage\").innerHTML =this.responseText}\n";
  ptr +="};\n";
  ptr +="xhttp.open(\"GET\", \"/\", true);\n";
  ptr +="xhttp.send();\n";
  ptr +="}\n";
  ptr +="</script>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
   ptr +="<div id=\"webpage\">\n";
   #ifdef ESP8266
   ptr +="<h1>ESP8266. Информация о температуре в помещении:</h1>\n";
   #else
   ptr +="<h1>ESP32. Информация о температуре в помещении:</h1>\n";
   #endif
   ptr +="<div class=\"data\">\n";
   ptr +="<div class=\"side-by-side temperature-icon\">\n";
   ptr +="<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n";
   ptr +="width=\"9.915px\" height=\"22px\" viewBox=\"0 0 9.915 22\" enable-background=\"new 0 0 9.915 22\" xml:space=\"preserve\">\n";
   ptr +="<path fill=\"#FFFFFF\" d=\"M3.498,0.53c0.377-0.331,0.877-0.501,1.374-0.527C5.697-0.04,6.522,0.421,6.924,1.142\n";
   ptr +="c0.237,0.399,0.315,0.871,0.311,1.33C7.229,5.856,7.245,9.24,7.227,12.625c1.019,0.539,1.855,1.424,2.301,2.491\n";
   ptr +="c0.491,1.163,0.518,2.514,0.062,3.693c-0.414,1.102-1.24,2.038-2.276,2.594c-1.056,0.583-2.331,0.743-3.501,0.463\n";
   ptr +="c-1.417-0.323-2.659-1.314-3.3-2.617C0.014,18.26-0.115,17.104,0.1,16.022c0.296-1.443,1.274-2.717,2.58-3.394\n";
   ptr +="c0.013-3.44,0-6.881,0.007-10.322C2.674,1.634,2.974,0.955,3.498,0.53z\"/>\n";
   ptr +="</svg>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"side-by-side temperature-text\">Температура</div>\n";
   ptr +="<div class=\"side-by-side temperature\">";
   ptr +=(int)Temperaturestat;
   ptr +="<span class=\"superscript\">°C</span></div>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"data\">\n";
   ptr +="<div class=\"side-by-side humidity-icon\">\n";
   ptr +="<svg version=\"1.1\" id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\"; width=\"12px\" height=\"17.955px\" viewBox=\"0 0 13 17.955\" enable-background=\"new 0 0 13 17.955\" xml:space=\"preserve\">\n";
   ptr +="<path fill=\"#FFFFFF\" d=\"M1.819,6.217C3.139,4.064,6.5,0,6.5,0s3.363,4.064,4.681,6.217c1.793,2.926,2.133,5.05,1.571,7.057\n";
   ptr +="c-0.438,1.574-2.264,4.681-6.252,4.681c-3.988,0-5.813-3.107-6.252-4.681C-0.313,11.267,0.026,9.143,1.819,6.217\"></path>\n";
   ptr +="</svg>\n";
   ptr +="</div>\n";
   ptr +="<div class=\"side-by-side humidity-text\">Влажность</div>\n";
   ptr +="<div class=\"side-by-side humidity\">";
   ptr +=(int)Humiditystat;
   ptr +="<span class=\"superscript\">%</span></div>\n";
   ptr +="</div>\n";
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

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

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

Предыдущий урок: Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE

Понравился Урок 2. Подключаем DHT11, DHT22 к ESP32, ESP8266. Показание на веб-странице? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Автономный сенсорный дозатор для антисептика, жидкого мыла на Arduino. DIY http://arduino-tex.ru/news/17/avtonomnyi-sensornyi-dozator-dlya-antiseptika-zhidkogo.html Константин Portal-PK 2020-11-05T15:33:33+03:00 В разгар коронавирусной инфекции встаёт вопрос, как можно минимизировать прикосновение с домашними предметами по возвращению из магазина или с работы. Чтобы тщательно помыть руки нужно пройти в ванную открыть воду и нажать на дозатор мыла. Как альтернативное решение можно повесить у входной двери санитайзер и при возвращении домой обрабатывать руки. Но прикасаться к санитайзеру будут все, кто возвращается с улицы. А купить автономный санитайзер для антисептика по карману не каждому. Сегодня покажу, как собрал DIY из подручных средств автономный сенсорный дозатор для антисептика, или жидкого мыла, на Arduino. Также, вы можете посмотреть первую версию моего дозатора: «Автоматический дозатор мыла и антисептика своими руками».

Из чего собрать DIY автономный сенсорный дозатор для жидкого мыла на Arduino?

При сборке использовались подручные средства и недорогая электроника с AliExpress. За основу взял «Самодельную каретку для ЧПУ станка». Каретка также собрана из подручных средств, как её собрать читайте на моем втором сайте «ЧПУ технологии», на котором я рассказываю про создание самодельных ЧПУ станков на Arduino.

Каркас дозатора собран из обрезков фанеры, реек и МДФ. Данные обрезки на производстве выбрасывают или сжигают. Поэтому найти их можно бесплатно или за символическую плату.

Из чего собрать DIY автономный сенсорный дозатор для жидкого мыла на Arduino?

Электронная начинка сенсорного дозатора для жидкого мыла на Arduino.

Для управления самодельной кареткой использовал следующую электронику:

Для нашего проекта понадобится все то же самое, но для того, чтобы дозатор мыла на Arduino работал автономно, в качестве источника питания, будем использовать бокс под 6 батареек формата АА. Как показало практическое применение, данных батареек хватит буквально на 2-3 дня работы. Даже не смотря на то, что после нажатия отключаю и драйвер, и шаговый двигатель для экономии энергии. Поэтому лучше использовать блок питания на 12 или 24 В. или литий-ионный аккумулятор (Li-ion).

И чуть не забыл про самое главное - инфракрасный датчик препятствия. Без него дозатор не будет работать автоматически при поднесении рук.

Схема подключения Электроники самодельного дозатора мыла на Arduino.

Схема без использования Модуля для подключения драйверов A4988 и DRV8825 будет выглядеть вот так.

Схема подключения Электроники самодельного дозатора мыла на Arduino.

Как видим, контакт EN подключен к 10 пину Arduino. Это необходимо сделать для того, чтобы была возможность отключать драйвер.

Так как векторного варианта модуля не нашел, а из меня дизайнер ну совсем никакой, схему с использованием модуля сделать не смог. Но могу рассказать, как подключить. Сперва, подключаем все вот по такой схеме.

Схема без использования Модуля для подключения драйверов A4988 и DRV8825

А затем, к 7 пину ардуины подключаем информационный пин датчика препятствия, и питание, как показано на схеме выше. Также не забываем подключить к 10 пину Arduino контакт EN драйвера. На модуле он выделен и подписан "E".

акже не забываем подключить к 10 пину Arduino контакт EN драйвера. На модуле он выделен и подписан.

Сборка DIY: Автономного сенсорного дозатора для антисептика, жидкого мыла на Arduino.

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

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

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

Затем устанавливаю всю электронику с задней стороны дозатора.

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

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

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

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

Теперь все готово и можно проверять работу нашей самоделки. И вот, что получается.

Теперь все готово и можно проверять работу нашей самоделки. И вот, что получается.

Все работает отлично.

Сборка DIY: Автономного сенсорного дозатора для антисептика, жидкого мыла на Arduino.

Код для Arduino самодельного дозатора с инфракрасным датчиком препятствия.

За основу возьмем код из урока «Как подключить A4988 (DRV8825) к Arduino. Скетч, библиотека»

Будем использовать пример с библиотекой AccelStepper. Как установить библиотеку и описание основных функций, вы найдете на странице урока. В итоге вот такой код для Arduino получается.

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>
// переменные
int sensPin = 7;     // пин сенсора
int sensState = 0; // переменная для хранения состояния сенсора
// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;
const int stepEN = 10;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
  pinMode(sensPin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
  // Устанавливаем коэффициент ускорения,
  // начальную скорость
  myStepper.setAcceleration(1000);
  myStepper.setSpeed(3600);
  pinMode(stepEN, OUTPUT); // пин подключение к EN
  digitalWrite(stepEN, HIGH); // Отключаем драйвер и ШД для экономии энергии
}
void loop() {
  sensState = digitalRead(sensPin);// считываем значения с входа сенсора
  if (sensState == LOW) {
    digitalWrite(stepEN, LOW);
    myStepper.moveTo(2000);
    myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию
    delay(300);  // Ждем
    myStepper.moveTo(0);
    myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию
  }
  if (myStepper.distanceToGo() == 0)
  {
    delay(50);  // Ждем
    digitalWrite(stepEN, HIGH);
  }
}

Разберем код подробнее.

Подключаем библиотеку AccelStepper.

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>

Дальше, определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Мы также устанавливаем motorInterfaceType на 1. (1- означает внешний шаговый драйвер с выводами Step и Direction). И добавим пин подключения stepEN, который нужен для включения и отключения драйвера шагового двигателя, что позволит снизить потребление энергии в режиме ожидания.

// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;
const int stepEN = 10;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1

Затем, мы создаем экземпляр библиотеки под названием myStepper.

// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

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

// Устанавливаем коэффициент ускорения,
  // начальную скорость
  myStepper.setAcceleration(1000);
  myStepper.setSpeed(3600);

Также нам нужно инициализировать пин подключения сенсора как вход INPUT. И пин подключения управления работы драйвера stepEN как выход OUTPUT. И сразу отключить драйвер для экономии заряда батареек.

 pinMode(sensPin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
 pinMode(stepEN, OUTPUT); // пин подключение к EN
 digitalWrite(stepEN, HIGH); // Отключаем драйвер и ШД для экономии энергии

В основном цикле loop() считываем значения с сенсора и получаем сигнал, в моем случае это LOW, ваш сенсор может, при срабатывании, на выходе выдавать HIGH. Это зависит от вашего датчика препятствия.

sensState = digitalRead(sensPin);// считываем значения с входа сенсора

Затем, мы проверяем, если датчик сработал, то включаем драйвер.

  if (sensState == LOW) {
    digitalWrite(stepEN, LOW);

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

 myStepper.moveTo(2000);
    myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию
    delay(300);  // Ждем
    myStepper.moveTo(0);
    myStepper.runToPosition();  // Ждем пока двигатель не встанет в заданную позицию

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

 if (myStepper.distanceToGo() == 0)
  {
    delay(50);  // Ждем
    digitalWrite(stepEN, HIGH);
  }

Замена флакона с жидким мылом или антисептиком.

Для замены флакона с антисептиком достаточно открутить 2 самореза, которые фиксирую прижимную фанерку.

Замена флакона с жидким мылом или антисептиком.

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

Минусы дозатора для жидкого мыла на Arduino.

Все работает отлично, но первые 2-3 дня. В дальнейшем батарейки начитают разряжаться, и шаговому двигателю не хватает мощности. Начинаются пропуски шагов двигателя, и нажатие становится все меньше и меньше. Поэтому лучше использовать внешний источник питания или Литий-ионный аккумулятор (Li-ion). Также, можно снизить скорость вращения шагового двигателя, что увеличит время работы от батареек, но дозировка будет происходить медленнее, и при использовании жидкого мыла дозировка может быть меньше.

Понравилась статья Автономный сенсорный дозатор для жидкого мыла на Arduino. DIY? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Автоматизация вакуумного пресса на Arduino и дисплее Nextion. http://arduino-tex.ru/news/16/avtomatizaciya-vakuumnogo-pressa-na-arduino-i-displee-nextion.html Константин Portal-PK 2020-11-01T07:45:45+03:00 Дисплей Nextion достаточно полезное периферийное устройство, позволяющее создать информативное и функциональное устройство. Я уже делал несколько некоммерческих проектов с использованием дисплея Nextion. Сегодня расскажу про платный проект, который делал недавно на заказ: «автоматизация вакуумного пресса с применением дисплея Nextion и Arduino NANO».

автоматизация вакуумного пресса с применением дисплея Nextion и Arduino NANO

Описание процесса работы вакуумного пресса. Объект автоматизации.

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

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

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

Еще предусмотрены 3 таймера времени, которые начинают работать при запуске работы пресса.

Работа пресса разделена на 4 этапа:

  1. Закрываем воздушные заслонки и включаем вакуумный насос.
  2. По завершению первого интервала времени, не выключая вакуумный насос, отпускаем пресс с помощью пневмоуправления.
  3. По истечению второго интервала времени отключается вакуумный насос. Пресс остаётся в рабочем положении.
  4. По истечению третьего интервала времени открываются воздушные заслонки, пресс поднимается. Устройство переходит в начальное состояние.

В связи с тем, что вся механическая часть работала, как я описал, то была поставлена задача сделать автоматизацию данного процесса, с использованием сенсорного дисплея. Выбор пал на Nextion. При выборе микроконтроллера решил остановиться на Arduino NANO, в связи с небольшими размерами и достаточной вычислительной мощностью.

Комплектующие для автоматизации вакуумного пресса на Arduino:

  • Arduino NANO.
  • Дисплей Nextion.
  • Модуль MAX6675 + термопара К типа.
  • Датчик вакуума XGZP6847100KPGN.
  • Реле с опторазвязкой.

Комплектующие для автоматизации вакуумного пресса на Arduino:

Дизайн интерфейса дисплея Nextion.

При демонстрации работы автоматизации вакуумного пресса использую дизайн, набросанный на скорую руку для проверки и отладки работы. Красивый дизайн предоставил заказчик. К сожалению, показать его не могу. Коммерческая тайна! =)

Дизайн интерфейса дисплея Nextion.

Управление прессом разделено на 2 экрана. На первом экране происходит управление установкой. На втором экране производим настройки.

На втором экране производим настройки.

При изменении настроек все значения сохраняются в энергонезависимую память Arduino NANO, что позволяет сохранить последние настройки, даже после включения установки.

Автоматизация вакуумного пресса на Arduino и дисплее Nextion:

Автоматизация вакуумного пресса на Arduino и дисплее Nextion:

Пришло время разобрать, как все работает. На дисплее есть 3 большие кнопки.

«Start» - Включает процесс прессования

«Setting» - Переход на экран настроек

«E-Stop» - Кнопка аварийного отключения. Отключает все, кроме нагрева.

Включаем пресс, после чего автоматически начинается нагрев. В связи с тем, что термопара имеет погрешность в 1 градус Цельсия, точность регулирования, не смотря на усреднения снимаемых значений, составляет + - 1 градус. Данной точности достаточно для вакуумного пресса.

На экране настроек можно изменить значения температуры и 3 значения времени. При сохранении все значения автоматически сохранятся в EEPROM (энергонезависимую память) Arduino NANO.

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

При нажатии на кнопку Start происходит следующее:

  • Срабатывает реле - это 3 светодиод на макетной плате, он выключается (так нужно было по техническому заданию). И включается первый светодиод - это реле вакуумного насоса. Начинается удаление воздуха из установки. Значение вакуума считывает Датчик вакуума XGZP6847100KPGN и выводится на дисплей.
  • После завершения первого интервала времени, не выключая вакуумный насос, срабатывает второй светодиод, - это пневмоуправление вакуумным насосом. Если на реле подается положительный сигнал, то пресс отпускается, если нет, то пресс поднимается (по условиям ТЗ.)
  • Когда второй счётчик отсчитал нужное время, происходит отключение вакуумного насоса. Пресс не выключается.
  • И при завершении третьего интервала времени, открываются воздушные заслонки, - это 3 светодиод. И поднимается пресс.

Установка перешла в начальное состояние.

Вот так работает автоматизация вакуумного пресса на Arduino и дисплее Nextion.

Вот так работает автоматизация вакуумного пресса на Arduino и дисплее Nextion. Если заказчик скинет фото установки, обязательно прикреплю к данному обзору.

Внимание! Исходник выложить не могу. Это связано с тем, что Arduino проект коммерческий.В большинстве случаев, заказчики против даже упоминания о своих проектах в интернете. Благодарю данного заказчика за то, что разрешил выложить обзор!


Понравилась статья Автоматизация вакуумного пресса на Arduino и дисплее Nextion? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE http://arduino-tex.ru/news/15/urok-1-veb-server-esp32-esp8266-v-srede-arduino-ide.html Константин Portal-PK 2020-10-24T09:12:56+03:00 Данным уроком начну серию уроков про ESP32 и ESP8266. ESP8266 и ESP32 стали достаточно популярными среди проектов, связанных с IoT или Wi-Fi. Это экономичные модули Wi-Fi, которые можно запрограммировать для создания автономного веб-сервера. Что очень радует!

Что такое веб-сервер и как он работает?

Веб-сервер - это место, где хранятся, обрабатываются и отсылаются веб-страницы веб-клиентам. Веб-клиент - это не что иное, как веб-браузер на наших ноутбуках и смартфонах. Связь между клиентом и сервером происходит с использованием специального протокола, называемого протоколом передачи гипертекста (HTTP).

Что такое веб-сервер и как он работает?

В этом протоколе клиент инициирует связь, отправляя запрос на конкретную веб-страницу с помощью HTTP, а сервер отдает содержимое этой веб-страницы, или сообщение об ошибке, если не может этого сделать (например: страница не найдена, ошибка 404). Страницы, которые отдает сервер, в основном представляют собой HTML-документы.

Режимы работы ESP32.

Одна из особенностей ESP32 заключается в том, что он может не только подключаться к существующей сети Wi-Fi и действовать как веб-сервер, но также может настраивать собственную сеть, позволяя другим устройствам напрямую подключаться к ней и получать доступ к веб-страницам. Это возможно, потому что ESP32 работает в трех разных режимах: режим станции (STA), режим точки доступа (AP) и оба режима одновременно.

Режим станции (STA).

ESP32 (ESP8266), который подключается к существующей сети Wi-Fi (созданной вашим беспроводным маршрутизатором), называется станцией (STA).

В режиме STA ESP32 получает IP от маршрутизатора, к которому он подключен.

В режиме STA ESP32 получает IP от маршрутизатора, к которому он подключен. С этим IP-адресом он может настроить веб-сервер и отдавать веб-страницы на все подключенные устройства в существующей сети Wi-Fi .

Режим точки доступа (AP).

ESP32 (ESP8266), который создает свою собственную сеть Wi-Fi и действует как концентратор (как Wi-Fi маршрутизатор) для одного или нескольких устройств, называется точкой доступа (AP). В отличие от Wi-Fi роутера, у него нет интерфейса для проводной сети. Итак, такой режим работы называется Soft Access Point (soft-AP). Также максимальное количество устройств, которые могут подключиться к нему, ограничено пятью.

ESP32, который создает свою собственную сеть Wi-Fi и действует как концентратор (как Wi-Fi маршрутизатор)

В режиме AP ESP32 создает новую сеть Wi-Fi и устанавливает для нее SSID (имя сети) и IP-адрес. С этим IP-адресом он может отдавать веб-страницы на все подключенные устройства в своей собственной сети.

Схема подключения двух светодиодов к ESP32.

Теперь, когда мы знаем основы работы веб-сервера, и в каких режимах ESP32 может создавать веб-сервер, пришло время подключить к ESP32 два светодиода, которыми мы планируем управлять через WiFi.

Установка, прошивка платы ESP32 в Arduino IDE (Windows, Mac OS X, Linux)

Начните с размещения ESP32 на макетной плате. Затем подключите два светодиода к цифровым GPIO 4 и 5 через ограничительный резистор 220 Ом.

Схема подключения двух светодиодов к ESP32.

Когда вы закончите, у вас получится что-то похожее на изображение, показанное ниже.

Принцип управления устройствами через веб-сервер ESP32.

Давайте разберемся, как же происходит управлениеустройствами через веб-сервер ESP32.

Когда вводите URL-адрес в веб-браузере и нажимаете ENTER, браузер отправляет HTTP-запрос (также известный как запрос GET) на веб-сервер. Задача веб-сервера - обработать этот запрос, сделав что-нибудь. Возможно, вы уже догадались, что мы собираемся контролировать устройство, обращаясь к определенному URL-адресу. Например, предположим, что мы ввели URL-адрес типа http://192.168.1.1/ledon в браузере. Затем браузер отправляет HTTP-запрос в ESP32 для обработки этого запроса. Когда ESP32 читает этот запрос, он знает, что пользователь хочет включить светодиод. Таким образом, он включает светодиод и отдает динамическую веб-страницу в браузер, показывая состояние светодиода: ВКЛ. Не так все это и сложно!

ESP32 в качестве HTTP-сервера с использованием режима точки доступа WiFi (AP).

А теперь перейдем к самому интересному!

Как следует из заголовка, этот пример демонстрирует, как превратить ESP32 в точку доступа (AP) и отдавать веб-страницы для любого подключенного клиента. Для начала подключите ESP32 к компьютеру и загрузите код, который затем разберем более подробно.

#include <WiFi.h>
#include <WebServer.h>
/* Установите здесь свои SSID и пароль */
const char* ssid = "ESP32";  
const char* password = "01234567";  
/* Настройки IP адреса */
IPAddress local_ip(192,168,2,1);
IPAddress gateway(192,168,2,1);
IPAddress subnet(255,255,255,0);
WebServer server(80);
uint8_t LED1pin = 4;
bool LED1status = LOW;
uint8_t LED2pin = 5;
bool LED2status = LOW;
void setup() {
  Serial.begin(115200);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);
  WiFi.softAP(ssid, password);
  WiFi.softAPConfig(local_ip, gateway, subnet);
  delay(100);
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}
void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}
void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}
void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}
void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}
void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>Управление светодиодом</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #3498db;}\n";
  ptr +=".button-on:active {background-color: #2980b9;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<h1>ESP32 Веб сервер</h1>\n";
    ptr +="<h3>Режим точка доступа WiFi (AP)</h3>\n";
   if(led1stat)
  {ptr +="<p>Состояние LED1: ВКЛ.</p><a class=\"button button-off\" href=\"/led1off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED1: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led1on\">ВКЛ.</a>\n";}
  if(led2stat)
  {ptr +="<p>Состояние LED2: ВКЛ.</p><a class=\"button button-off\" href=\"/led2off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED2: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led2on\">ВКЛ.</a>\n";}
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Доступ к веб-серверу в режиме AP.

После загрузки скетча откройте Serial Monitor со скоростью 115200 бод. И нажмите кнопку RESET на ESP32. Если все в порядке, то отобразится сообщение о запуске HTTP-сервера.

И нажмите кнопку RESET на ESP32. Если все в порядке, то отобразится сообщение о запуске HTTP-сервера.

Затем найдите любое устройство, которое можно подключить к сети Wi-Fi - телефон, ноутбук и т. д. И найдите сеть под названием «ESP32». Подключитесь к сети с паролем «01234567».

И найдите сеть под названием «ESP32». Подключитесь к сети с паролем «01234567».

После подключения к сети ESP32 AP, загрузите браузер и укажите адрес 192.168.1.1. ESP32 должен открыть веб-страницу, показывающую текущее состояние светодиодов, и две кнопки для управления ими.

 ESP32 должен открыть веб-страницу, показывающую текущее состояние светодиодов

Если одновременно взглянуть на монитор последовательного порта, то можно увидеть состояние контактов GPIO ESP32.

Теперь нажмите кнопку, чтобы включить LED1, следя за URL-адресом. После того, как вы нажали кнопку, ESP32 получит запрос URL-адреса / led1on . Затем он включит LED1 и обновит веб-страницу с новым статусом LED.

Теперь нажмите кнопку, чтобы включить LED1, следя за URL-адресом.

Он также покажет состояние вывода GPIO в последовательном мониторе порта.

Он также покажет состояние вывода GPIO в последовательном мониторе порта.

Вы можете протестировать кнопку LED2 и убедиться, что она работает аналогичным образом.

Вы можете протестировать кнопку LED2 и убедиться, что она работает аналогичным образом.


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

Подробное объяснение кода точки доступа WiFi (AP).

Скетч начинается с подключения библиотеки WiFi.h. Эта библиотека предоставляет специальные методы WiFi для ESP32, которые мы вызываем для подключения к сети. После этого мы также подключаем библиотеку WebServer.h, в которой есть несколько доступных методов, которые помогут нам настроить сервер и обрабатывать входящие HTTP-запросы, не беспокоясь о деталях реализации на низком уровне.

#include <WiFi.h>
#include <WebServer.h>

Когда мы устанавливаем ESP32 в режим точки доступа (AP), он создает сеть Wi-Fi. Следовательно, нам нужно установить его SSID, пароль, IP-адрес, маску IP-подсети и IP-шлюз.

/* Установите здесь свои SSID и пароль */
const char* ssid = "ESP32";  // Enter SSID here
const char* password = "0123456";  //Enter Password here
/* Настройки IP адреса */
IPAddress local_ip(192,168,2,1);
IPAddress gateway(192,168,2,1);
IPAddress subnet(255,255,255,0);

Затем мы объявляем объект библиотеки WebServer, чтобы получить доступ к его функциям. Конструктор этого объекта принимает порт (который сервер будет слушать) в качестве параметра. Поскольку 80 - порт по умолчанию для HTTP, мы будем использовать это значение. Теперь вы можете получить доступ к серверу без необходимости указывать порт в URL-адресе.

WebServer server(80);

После чего мы объявляем выводы GPIO ESP32, к которым подключены светодиоды, и их начальное состояние.

uint8_t LED1pin = 4;
bool LED1status = LOW;
uint8_t LED2pin = 5;
bool LED2status = LOW;

Функция Setup ().

Мы настраиваем наш HTTP-сервер перед его запуском. Прежде всего, мы открываем последовательное соединение для отладки и устанавливаем для GPIO значение OUTPUT.

Serial.begin(115200);
pinMode(LED1pin, OUTPUT);
pinMode(LED2pin, OUTPUT);

Затем мы настраиваем программную точку доступа для создания сети Wi-Fi, проверяя SSID, пароль, IP-адрес, маску IP-подсети и IP-шлюз.

WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);

Чтобы обрабатывать входящие HTTP-запросы, нам нужно указать, какой код выполнять при вызове конкретного URL. Для этого мы используем метод on . Этот метод принимает два параметра. Первый - это URL-путь, а второй - имя функции, которую мы хотим выполнить при переходе по этому URL-адресу.

Например, первая строка приведенного ниже фрагмента кода указывает, что, когда сервер получает HTTP-запрос по корневому ( / ) пути, он запускает handle_OnConnect() функцию. Обратите внимание, что указанный URL-адрес является относительным путем.

Точно так же нам нужно указать еще 4 URL-адреса для обработки двух состояний 2 светодиодов.

server.on("/", handle_OnConnect);
server.on("/led1on", handle_led1on);
server.on("/led1off", handle_led1off);
server.on("/led2on", handle_led2on);
server.on("/led2off", handle_led2off);

Мы не указали, что должен делать сервер, если клиент запрашивает любой URL-адрес, отличный от указанного в server.on(). Он должен ответить HTTP-статусом 404 (Not Found) и сообщением для пользователя. Мы также помещаем в функцию и используем server.onNotFound(), чтобы сообщить, что она должна выполнить ее, когда получит запрос на URI, который не был указан в server.on.

server.onNotFound(handle_NotFound);

Теперь, чтобы запустить наш сервер, мы вызываем метод begin объекта server.

server.begin();
Serial.println("HTTP server started");

Основной цикл Loop().

Чтобы обрабатывать входящие HTTP-запросы, нам нужно вызвать handleClient() метод объекта сервера. Также мы меняем состояние светодиода по запросу.

void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}

Затем нам нужно создать функцию, которую мы назначили корневому (/) URL с помощью server.on. В начале этой функции мы устанавливаем состояние обоих светодиодов на LOW (исходное состояние светодиодов) и выводим состояние светодиодов в последовательный монитор. Чтобы ответить на HTTP-запрос, мы используем метод send. Хотя метод может быть вызван с другим набором аргументов, его простейшая форма состоит из кода ответа HTTP.

В нашем случае мы отправляем код 200 (один из кодов состояния HTTP), который соответствует ответу OK - ответ получен. Затем мы указываем тип содержимого как «текст / html» и, наконец, вызываем пользовательскую функцию SendHTML (), которая создает динамическую HTML-страницу, содержащую состояние светодиодов.

void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}

Точно так же нам нужно создать четыре функции для обработки запросов включения / выключения светодиодов и страницы ошибки 404.

void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}
void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}
void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}
void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

Отображение веб-страницы HTML.

SendHTML() Функция отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP32 получает запрос от веб-клиента. Он просто объединяет HTML-код в большую строку и возвращает server.send() функцию, которую мы обсуждали ранее. Функция принимает состояние светодиодов в качестве параметров для динамической генерации содержимого HTML.

Первый текст, который вы всегда должны отправить <! DOCTYPE>, который указывает на то, что мы посылаем HTML код.

String SendHTML(uint8_t led1stat,uint8_t led2stat){
String ptr = "<!DOCTYPE html> <html>\n";

Затем элемент <meta> viewport заставляет веб-страницу загружаться в любом браузере. В то время как тег title устанавливает заголовок страницы.

ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>Управление светодиодом</title>\n";

Стилизация веб-страницы.

Затем у нас есть CSS для стилизации кнопок и внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться, в виде встроенного блока, и выравниваться по центру.

ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";

Затем следующий код устанавливает цвет, шрифт и поля тегов H1, H3 и p.

ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";

Дальше прописывая стили, которые применяются к кнопкам, указав свойства: цвет, размер, поля и т. д. Кнопки ВКЛ. и ВЫКЛ. имеют разный цвет фона, в то время как :active selector для кнопок обеспечивает эффект нажатия кнопки.

ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
ptr +=".button-on {background-color: #3498db;}\n";
ptr +=".button-on:active {background-color: #2980b9;}\n";
ptr +=".button-off {background-color: #34495e;}\n";
ptr +=".button-off:active {background-color: #2c3e50;}\n";

Установка заголовка веб-страницы.

Далее задается заголовок веб-страницы. Вы можете изменить этот текст на любой, который подходит для вашего приложения.

ptr +="<h1>ESP32 Веб сервер</h1>\n";
ptr +="<h3>Режим точка доступа WiFi (AP)</h3>\n";

Отображение кнопок, и соответствующего их состояния

Чтобы динамически генерировать кнопки и статус светодиода, мы используем оператор if. Таким образом, в зависимости от состояния контактов GPIO отображается кнопка ВКЛ / ВЫКЛ.

if(led1stat)
  {ptr +="<p>Состояние LED1: ВКЛ.</p><a class=\"button button-off\" href=\"/led1off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED1: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led1on\">ВКЛ.</a>\n";}
if(led2stat)
  {ptr +="<p>Состояние LED2: ВКЛ.</p><a class=\"button button-off\" href=\"/led2off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED2: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led2on\">ВКЛ.</a>\n";}

ESP32 как HTTP-сервер в режиме WiFi Station (STA)

Теперь перейдем к нашему следующему примеру, который демонстрирует, как использовать ESP32 в режиме станции (STA) и выводить веб-страницы для любого подключенного клиента в сети.

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

ESP32 как HTTP-сервер в режиме WiFi Station (STA)

Должен получиться вот такое код.

#include <WiFi.h>
#include <WebServer.h>
/* Установите здесь свои SSID и пароль */
const char* ssid = "Wi-Fi";  
const char* password = "password";  
WebServer server(80);
uint8_t LED1pin = 4;
bool LED1status = LOW;
uint8_t LED2pin = 5;
bool LED2status = LOW;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}
void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}
void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}
void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}
void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}
void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>Управление светодиодом</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #3498db;}\n";
  ptr +=".button-on:active {background-color: #2980b9;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<h1>ESP32 Веб сервер</h1>\n";
    ptr +="<h3>Режим станции (STA)</h3>\n";
   if(led1stat)
  {ptr +="<p>Состояние LED1: ВКЛ.</p><a class=\"button button-off\" href=\"/led1off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED1: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led1on\">ВКЛ.</a>\n";}
  if(led2stat)
  {ptr +="<p>Состояние LED2: ВКЛ.</p><a class=\"button button-off\" href=\"/led2off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED2: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led2on\">ВКЛ.</a>\n";}
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Доступ к веб-серверу в режиме STA.

После загрузки скетча откройте Serial Monitor со скоростью 115200 бод. И нажмите кнопку RESET на ESP32. Если все в порядке, он выведет динамический IP-адрес, полученный от вашего маршрутизатора, и покажет сообщение о запуске HTTP-сервера.

Доступ к веб-серверу в режиме STA.

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

ESP32 должен сгенерировать веб-страницу, показывающую текущее состояние светодиодов, и две кнопки для управления ими.

Если посмотреть в монитор последовательного порта, то можно увидеть состояние контактов GPIO ESP32.

 Если посмотреть в монитор последовательного порта, то можно увидеть состояние контактов GPIO ESP32.

Теперь нажмите кнопку, чтобы включить LED1, следя за URL-адресом. После того, как вы нажмете кнопку, ESP32 получит запрос URL-адреса / led1on . Затем он включает LED1 и обновляет веб-страницу с новым статусом LED.

ESP32 получит запрос URL-адреса / led1on . ESP32 получит запрос URL-адреса / led1on .

Данные также выводятся о состоянии вывода GPIO в последовательный монитор порта.

 Данные также выводятся о состоянии вывода GPIO в последовательный монитор порта.

Вы можете протестировать кнопку LED2 и убедиться, что она работает аналогичным образом.

Пояснение к коду.

Если вы сравните этот код с предыдущим кодом, единственное отличие состоит в том, что мы не устанавливаем программную точку доступа, а подключаемся к существующей сети с помощью WiFi.begin() функции.

//connect to your local wi-fi network
WiFi.begin(ssid, password);

Пока ESP32 пытается подключиться к сети, мы можем проверить статус подключения с помощью WiFi.status() функции.

//check wi-fi is connected to wi-fi network
while (WiFi.status() != WL_CONNECTED) 
{
delay(1000);
Serial.print(".");
}

Данная функция возвращает следующие статусы:

  • WL_CONNECTED: возвращается при подключении к сети Wi-Fi;
  • WL_NO_SHIELD: возвращается, когда Wi-Fi модуль не подключен;
  • WL_IDLE_STATUS: временное состояние, возвращаемое при вызове WiFi.begin(), и остающееся активным до тех пор, пока не истечет количество попыток подключения (что приводит к WL_CONNECT_FAILED), или пока не будет установлено соединение (что приводит к WL_CONNECTED);
  • WL_NO_SSID_AVAIL: возвращается, когда нет доступных SSID;
  • WL_SCAN_COMPLETED: возвращается, когда сканирование сетей завершено;
  • WL_CONNECT_FAILED: возвращается при неудаче подключения после всех попыток;
  • WL_CONNECTION_LOST: возвращается при потере соединения;
  • WL_DISCONNECTED: возвращается при отключении от сети.

Как только ESP32 подключен к сети, в мониторе порта вы увидите IP-адрес, который выводит функция WiFi.localIP.

Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

Единственная разница между режимами AP и STA заключается в том, что один создает сеть, а другой присоединяется к существующей сети. Итак, остальная часть кода для обработки HTTP-запросов и обслуживания веб-страницы в режиме STA такая же, как и в режиме AP, описанном выше, которая включает в себя:

  • Объявление контактов GPIO ESP32, к которым подключены светодиоды
  • Определение нескольких методов server.on () для обработки входящих HTTP-запросов
  • Определение метода server.onNotFound () для обработки ошибки HTTP 404
  • Создание пользовательских функций, которые выполняются при переходе по определенным URL
  • Создание HTML-страницы
  • Стилизация веб-страницы
  • Создание кнопок и отображение их статуса

Создание простого веб-сервера на ESP8266 (NodeMCU) в Arduino IDE.

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

Что такое NodeMCU? Программируем в среде Arduino IDE

Схема подключения двух светодиодов к ESP8266 NodeMCU.

Не смотря на то, что распиновка плат отличается, в примере для обеих плат будем использовать GPIO D4 и D5. Это поможет объединить код в дальнейшем.

Схема подключения двух светодиодов к ESP8266 NodeMCU.

В итоге у нас должно получиться подключение как на схеме.

Использование ESP8266 (NodeMCU) в качестве HTTP сервера в режиме Wi-Fi Station (STA)

Давайте рассмотрим пример использования ESP8266 (NodeMCU) в качестве HTTP сервера в режиме Wi-Fi Station (STA). Прежде чем приступить к загрузке скетча, чтобы он у вас заработал, необходимо внести некоторые изменения. Чтобы ESP8266 мог установить соединение с существующей сетью, вам необходимо изменить две следующие переменные с учетными данными вашей сети.

Использование ESP8266 в качестве HTTP сервера в режиме Wi-Fi Station (STA)

После чего можно загрузить код в ESP8266 (NodeMCU).

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
// Определяем переменные wifi
const char* ssid = "Wi-Fi";  
const char* password = "password"; 
// Web интерфейс для устройства
ESP8266WebServer server(80);
uint8_t LED1pin = D4;
uint8_t LED2pin = D5;
bool LED1status = LOW;
bool LED2status = LOW;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}
void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}
void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}
void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}
void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}
void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>Управление светодиодом</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #3498db;}\n";
  ptr +=".button-on:active {background-color: #2980b9;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n"; 
  ptr +="<h1>ESP8266 Веб сервер</h1>\n";
  ptr +="<h3>Режим станции (STA)</h3>\n";
   if(led1stat)
  {ptr +="<p>Состояние LED1: ВКЛ.</p><a class=\"button button-off\" href=\"/led1off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED1: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led1on\">ВКЛ.</a>\n";}
  if(led2stat)
  {ptr +="<p>Состояние LED2: ВКЛ.</p><a class=\"button button-off\" href=\"/led2off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED2: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led2on\">ВКЛ.</a>\n";}
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Доступ к веб-серверу в режиме STA при использовании ESP8266.

После загрузки кода в ESP8266 NodeMCU, как и в примере с ESP32, в мониторе порта увидим знакомую информацию.

После загрузки кода в ESP8266 NodeMCU, как и в примере с ESP32, в мониторе порта увидим знакомую информацию.

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

NodeMCU должен выдать веб-страницу, показывающую текущее состояние светодиодов, и две кнопки для управления ими.

Если в это время взглянуть на монитор последовательного порта, то можно увидеть состояние выводов GPIO NodeMCU.

Если в это время взглянуть на монитор последовательного порта, то можно увидеть состояние выводов GPIO NodeMCU.

В работе данного примера нет ни каких изменений в сравнении с работай ESP32.

Изменения в скетче для ESP8266 NodeMCU.

Первым делом нам нужно изменить библиотеки для работы с ESP8266.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

Затем объявляем объект библиотеки ESP8266WebServer, чтобы получить доступ к ее функциям. Конструктор этого объекта в качестве параметра принимает номер порта (который сервер будет прослушивать).

// Web интерфейс для устройства
ESP8266WebServer server(80);

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

uint8_t LED1pin = D4;
uint8_t LED2pin = D5;

Осталось подправитьв HTML странице выводимую информацию. Здесь изменим заголовок страницы. Чтобы было понято, что данный пример работает на ESP8266.

  ptr +="<h1>ESP8266 Веб сервер</h1>\n";
  ptr +="<h3>Режим станции (STA)</h3>\n";

Изменить код для работы ESP8266 в режиме точки доступа (AP) будет не сложно. Это будет для вас домашнее задание.

Доступ к веб-серверу в режиме STA код для ESP32 end ESP8266.

Чтобы не плодить десятки версий кода для ESP32 и ESP8266, код можно объединить, что позволит, используя один скетч и прошивать ESP32 и ESP8266, достаточно только выбрать нужную плату в Arduino IDE.

#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#else
#include <WiFi.h>
#include <WebServer.h>
#endif
// Определяем переменные wifi
const char* ssid = "Wi-Fi";  
const char* password = "password";  
#ifdef ESP8266
// Web интерфейс для устройства
ESP8266WebServer server(80);
uint8_t LED1pin = D4;
uint8_t LED2pin = D5;
#else
// Web интерфейс для устройства
WebServer server(80);
uint8_t LED1pin = 4;
uint8_t LED2pin = 5;
#endif
bool LED1status = LOW;
bool LED2status = LOW;
void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);
  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}
void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}
void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}
void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}
void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}
void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}
String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>Управление светодиодом</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #3498db;}\n";
  ptr +=".button-on:active {background-color: #2980b9;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n"; 
  #ifdef ESP8266
  ptr +="<h1>ESP8266 Веб сервер</h1>\n";
  #else
  ptr +="<h1>ESP32 Веб сервер</h1>\n";
  #endif
    ptr +="<h3>Режим станции (STA)</h3>\n";
   if(led1stat)
  {ptr +="<p>Состояние LED1: ВКЛ.</p><a class=\"button button-off\" href=\"/led1off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED1: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led1on\">ВКЛ.</a>\n";}
  if(led2stat)
  {ptr +="<p>Состояние LED2: ВКЛ.</p><a class=\"button button-off\" href=\"/led2off\">ВЫКЛ.</a>\n";}
  else
  {ptr +="<p>Состояние LED2: ВЫКЛ.</p><a class=\"button button-on\" href=\"/led2on\">ВКЛ.</a>\n";}
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

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

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

Понравился Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека. http://arduino-tex.ru/news/14/kak-podklyuchit-a4988-drv8825-k-arduino-sketch-biblioteka.html Константин Portal-PK 2020-10-19T12:32:30+03:00 Сегодня в уроке подключим драйвер шагового двигателя A4988 (DRV8825) к Arduino. Рассмотрим самый простой скетч (код,) который позволит вращать шаговым двигателем по часовой и против часовой стрелке.

Что такое шаговый двигатель? Описание драйвера шагового двигателя A4988 и описание драйвера шагового двигателя DRV8825, а также много другой полезной информации по ЧПУ станкам и 3D принтерам, вы сможете найти на моем втором сайте ЧПУ технологии (CNC-tex.ru).

Сегодня в уроке подключим драйвер шагового двигателя A4988 (DRV8825) к Arduino.

Схема подключения драйвера шагового двигателя A4988 (DRV8825).

Для тех, кому лень сходить на мой второй сайт по ЧПУ станкам, выкладываю схемы подключения драйверов A4988 (DRV8825) к Arduino.

Драйвер шагового двигателя A4988 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя A4988 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя DRV8825 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя DRV8825 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Внимание! Для корректной работы шагового двигателя для драйвера необходимо настроить ток. Как рассчитать ток для драйвера A4988 читайте тут, для драйвера DRV8825 читайте тут. Также при необходимости установите радиатор охлаждения драйвера.

Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.

Для облегчения подключения драйверов к Arduino существуют специальные модули, которые помогут без лишних усилий и пайки подключить драйвер A4988 или DRV8825. Подробнее о модулях для подключения драйвера A4988 и DRV8825 читайте тут. Подробно останавливаться на типах модулей и особенностях подключения не буду.

Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.

Внимание! При установке драйвера на модуль будьте осторожны.Драйвер может сгореть, если не правильно установить его на модуль.

Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.

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

Код для Arduino и A4988 (DRV8825),который позволяет вращать шаговым двигателем без библиотеки.

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

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;
void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}
void loop()
{
  digitalWrite(dirPin, HIGH); // Установка вращения по часовой стрелки
  for(int x = 0; x > stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }
  delay(1000);
  digitalWrite(dirPin, LOW); // Установка вращения против часовой стрелки
  for(int x = 0; x < stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000);
}

Пояснение к коду:

Скетч начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR драйвера A4988. Здесь также определяем stepsPerRevolution – количество шагов на оборот. Установите данное значение в соответствии со спецификациями шагового двигателя 200 (поскольку NEMA 17 делает 200 шагов за оборот).

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

В разделе настройки кода setup(), все контакты управления двигателем объявлены как цифровой выход (OUTPUT).

pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);

В основном цикле loop() будем медленно вращать двигатель по часовой стрелке, а затем быстро вращать его против часовой стрелки, с интервалом в секунду.

Управление направлением вращения.

Для управления направлением вращения двигателя мы устанавливаем контакт DIR на высокий уровень HIGH, или низкий LOW. При значении HIGH - вращает двигатель по часовой стрелке, а LOW - против часовой стрелки.

digitalWrite(dirPin, HIGH);

Управление скоростью шагового двигателя.

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

for(int x = 0; x < stepsPerRevolution; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
}

Код для Arduino управления драйвером A4988 (DRV8825)с использованием библиотеки AccelStepper.

Управление шаговым двигателем без библиотеки идеально подходит для простых проектов на Arduino с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, вам понадобится библиотека. Итак, для нашего следующего примера будем использовать библиотеку шаговых двигателей под названием AccelStepper library.

AccelStepper library поддерживает.

Ускорение и замедление. Несколько одновременных шаговых двигателей с независимыми одновременными шагами на каждом шаговом двигателе. Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.

Установка библиотеки AccelStepper.

Чтобы установить библиотеку, перейдите в «Скетч» -> «Подключить библиотеку» -> «Управление» библиотеками. Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Установка библиотеки AccelStepper.

Отфильтруйте свой поиск, набрав «Accelstepper». Щелкните первую запись и выберите «Установка».

Отфильтруйте свой поиск, набрав «Accelstepper».

Код Arduino с использованием библиотеки AccelStepper.

Вот простой пример, который ускоряет шаговый двигатель в одном направлении, а затем замедляется до полной остановки. Как только двигатель делает один оборот, меняет направление вращения. Данный цикл повторяется снова и снова.

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>
// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;
int i = 0;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
  // Устанавливаем максимальную скорость, коэффициент ускорения,
  // начальную скорость и целевую позицию
  myStepper.setMaxSpeed(1000);
  myStepper.setAcceleration(50);
  myStepper.setSpeed(200);
  myStepper.moveTo(100);
}
void loop() {
  // Изменение направления вращения, когда двигатель достигнет заданного положения
  if (myStepper.distanceToGo() == 0) 
  {
    myStepper.moveTo(-myStepper.currentPosition());
  }
  // Передвинуть на 1 шаг
  myStepper.run();
}

Пояснение к коду:

Подключаем библиотеку AccelStepper.

#include <AccelStepper.h>

Дальше определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Мы также устанавливаем motorInterfaceType на 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).

const int dirPin = 2;
const int stepPin = 3;
int i = 0;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1

Затем мы создаем экземпляр библиотеки под названием myStepper.

// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

В функции настройки мы сначала устанавливаем максимальную скорость двигателя равной тысяче. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя. Дальше устанавливаем обычную скорость 200 и количество шагов, которое мы собираемся переместить, например, 200 (поскольку NEMA 17 делает 200 шагов за оборот).

void setup() {
    myStepper.setMaxSpeed(1000);
    myStepper.setAcceleration(50);
    myStepper.setSpeed(200);
    myStepper.moveTo(100);
}

В основном цикле loop() используем оператор if, чтобы проверить, как далеко двигателю нужно проехать (путем чтения свойства distanceToGo), пока он не достигнет целевой позиции (установленной moveTo). Как только distanceToGo достигнет нуля, поменяем направление вращения двигателя в противоположном направлении, изменив значение moveTo на отрицательное по отношению к его текущему значению. Теперь вы заметите, что в конце цикла мы вызвали функцию run (). Это самая важная функция, потому что шаговый двигатель не будет работать, пока эта функция не будет выполнена.

void loop() {
    if (myStepper.distanceToGo() == 0) 
        myStepper.moveTo(-myStepper.currentPosition());
    myStepper.run();
}

Это небольшой пример использования библиотеки AccelStepper. В следующем уроке подробнее рассмотрим данную библиотеку и сделаем пару классных примеров использования шаговых двигателей в Arduino проектах.

Это небольшой пример использования библиотеки AccelStepper.


Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Электроника для инкубатора на Arduino (не завершён). http://arduino-tex.ru/news/13/elektronika-dlya-inkubatora-na-arduino--ne-zavershen.html Константин Portal-PK 2020-10-09T13:24:41+03:00 Сегодня расскажу про свой новый Arduino проект, который, к сожалению, не успел доделать. Это связано, во-первых, с тем, что инкубатор в зимнее время не нужен, во-вторых, нехваткой свободного времени. Речь пойдет об Инкубаторе на Arduino с цветным дисплеем. В связи с тем, что инкубатор планировал сделать бюджетный, использовал дешёвые компоненты. Но обо всём по порядку.

Электроника инкубатор на Arduino.

Электроника инкубатора на Arduino.

Так как инкубатор на Arduino планирую сделать бюджетным, управлять всем будет Arduino NANO. В качестве дисплея планировал использовать строчный дисплей LCD 1602, но, к сожалению, «подружить» данный дисплей с несколькими экранами меню на русском языке не получается. Один экран работает отлично, но при переключении между экранами меню с русскими символами происходит что-то не понятное. Поэтому мной было принято решение использовать другой дисплей, той же ценовой политики. TFT-экран 128×160 / 1,8” позволяет вывести текст на Русском языке без проблем. Кроме этого, на данный дисплей можно вывести гораздо больше информации, чем на LCD 1602. Но есть и минусы, но о них чуть позже.


Температуру в инкубаторе замерять будет датчик температуры DS18B20, во влагозащищенном корпусе. В дальнейшем, возможно, заменю DS18B20 на датчик влажности и температуры серии SHT3x (SHT31), но данный датчик не имеет влагозащиты, но при этом позволяет замерять влажность воздуха. Может, сделаю корпус для него, но это планы на будущее.

Для контроля времени и этапов инкубации яйца установил модуль реального времени DS3231.

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

Поворачивать яйцо, открывать проветривание будут сервоприводы.

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

Возможности инкубатора.

  • Контроль температуры.
  • Автоматический поворот яйца.
  • Отображение этапа инкубации.
  • Отображение текущей даты.
  • Отображение положения сервоприводов поворота яйца.
  • Отображение на экране текущего дня инкубации.
  • Отображение температуры.
  • Включение/выключение инкубации и режим тестирования работы инкубатора.

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

Инкубатор поддерживает следующие режимы работы:

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

Этап

Дни

Температура

Поворот

Проветривание

1

1-11

37,9 °С

Каждые 3 часа

нет

2

12-17

37,3 °С

Каждые 3 часа

2 раза в сутки на 5 минут

3

18-19

37,3 °С

Каждые 3 часа

2 раза в сутки на 20 минут

4

20-21

37,0 °С

нет

2 раза в сутки на 5 минут

Процесс инкубации, условно, подразделяется на 4 этапа, длительность каждого из них – от 1 дня до недели:

На первом этапе (с 1 по 12 день) происходит формирование будущего цыпленка.

На втором — последующие 4-5 дней, процесс формирования.

Третий этап начинается с 18 дня и длится до момента, пока не появится писк малыша.

На последней стадии (20-21 день) малыши активно проклевываются через поверхность скорлупы.

Минусы использования дисплея TFT 128×160 / 1,8” и Arduino NANO.

  • Библиотека для работы с дисплеем весит много и код отображения данных на экране занимает много памяти. Для устранения этого минуса буду оптимизировать код.
  • Вторая проблема вытекает из первой. Arduino NANO не так и много памяти, и её, возможно, не хватит для реализации всего функционала, который запланирован.
  • Третья проблема заключается в том, что при разработке появились идеи по увеличению возможностей инкубатора. Но если памяти не хватает на стандартный набор функций, то об увеличении функционала с использованием Arduino NANO не может быть и речи. Поэтому придётся заменить плату, например, на Arduino MEGA.

Проект не завершён. В планах завершить и протестировать работу весной 2021 года.

Минусы использования дисплея TFT 128×160 / 1,8” и Arduino NANO.

А для чего нужен этот пост?

  • Узнать сколько заинтересованных пользователей. Если будет много отзывов и пожеланий, возможно, проект закончу раньше, чем запланировал.
  • Обозначить свои планы.
  • Ответственность. Обозначил сроки, буду стараться сделать вовремя.

Пишите ваши пожелания и предложения в комментариях.

Понравилась статья Электроника для инкубатора на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 8. Arduino: Дребезг — программное устранение. Нажатие кнопки без ложных срабатываний. http://arduino-tex.ru/news/12/urok-8-arduino-drebezg-—-programmnoe-ustranenie-nazhatie.html Константин Portal-PK 2020-09-20T11:59:14+03:00 В предыдущем уроке: «Урок 7. Подключаем тактовую кнопку к Arduino и управляем светодиодом» мы научились подключать кнопку к Arduino и зажигать светодиод, когда нажата кнопка. Если отпустить кнопку, светодиод гаснет. Возникает логически обоснованный вопрос, как сделать так, чтобы светодиод загорался при однократном нажатии на тактовую кнопку, и гас при повторном нажатии?

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

Схему подключения тактовой кнопки и светодиода к Arduino UNO возьмем из предыдущего урока.

Схема подключения кнопки к Arduino.Установим на макетную плату тактовую кнопку, и подключим одну ножку к +5v, вторую ножку, с помощью подтягивающего резистора, подключим к GND. Для чего это нужно читайте в предыдущем уроке.

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

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

Дре́безг конта́ктов — явление, происходящее в электромеханических коммутационных устройствах и аппаратах (кнопках, реле, герконах, переключателях, контакторах, магнитных пускателях и др.), длящееся некоторое время после замыкания электрических контактов. После замыкания происходят многократные неконтролируемые замыкания и размыкания контактов за счет упругости материалов и деталей контактной системы — некоторое время контакты отскакивают друг от друга при соударениях, размыкая и замыкая электрическую цепь.

В зависимости от размеров, массы, материала и конструкции контактной системы время дребезга (время от первого соприкосновения контактов до затухания механических колебаний и установления стабильного контактирования) составляет 0,5—2 мс. у миниатюрных герконов и до сотен миллисекунд у мощных контакторов.

Как устранить ложные срабатывания при нажатии кнопки?

Дребезг кнопки можно устранить 2 способами:

  • Аппаратное устранение дребезга кнопки.
  • Программное устранение дребезга кнопки.

Аппаратное устранение дребезга кнопки.

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

Также существуют и другие аппаратные способы устранения дребезга контактов.Но для ознакомления с аппаратным устранением дребезга достаточно данного примера.

Программное устранение дребезга кнопки.

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

дребезг кнопки посмотрим рисунок,Так как кнопки используются в большом количестве Arduino проектов, для упрощения написания кода существует несколько библиотек, которые позволяют устранить дребезг кнопки. Одна из библиотек Bounce. Используя её не нужно задумываться, как устроен дребезг кнопки, и что нужно делать, чтобы с ним бороться. Но мы в уроке напишем небольшую функцию, которая поможет устранить ложные срабатывания программным способом.

Для этого нам нужно добавить вспомогательные переменные.

boolean lastBt = false;
boolean currentBt = false;
boolean ledOn = LOW;

Функция boolean debvance достаточно простая. Получаем прошлое состояние кнопки.

if (last != current) // Если текущее состояние отличается от предыдущего

Ждем 5 миллисекунд и присваиваем текущее состояние кнопки

current = digitalRead(button_pin); // Присваиваем текущее состояние кнопки

И возвращаем значение current.

Затем напишем небольшую функцию.

boolean debvence (boolean last)
{
  boolean current = digitalRead(button_pin);
  if ( last != current)
  {
    delay(5);
    current = digitalRead(button_pin);
    return current;
  }
}

Осталось в скетче прописать небольшие изменения.

Для работы с функцией устранения дребезга достаточно прописать всего одну строчку кода.

currentBt = debvence(lastBt); // Передаем функции дребезга значение по умолчанию LOW

Также нужно проверить отпустили кнопку или нет.

if (lastBt == LOW && currentBt == HIGH)

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

lastBt = currentBt; // Переприсваиваем прошлое состояние кнопки

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

int led_pin = 2;
int button_pin = 3;
boolean lastBt = false;
boolean currentBt = false;
boolean ledOn = LOW;
boolean debvence (boolean last)
{
  boolean current = digitalRead(button_pin);
  if ( last != current)
  {
    delay(5);
    current = digitalRead(button_pin);
    return current;
  }
}
void setup()
{
  pinMode(led_pin, OUTPUT);
  pinMode(button_pin, INPUT);
}
void loop()
{
  // Получаем состояние кнопки
  currentBt = debvence(lastBt);
  // Если кнопка не нажата
  if (lastBt == LOW && currentBt == HIGH)
    ledOn = !ledOn;
  digitalWrite(led_pin, ledOn);
  lastBt = currentBt; 
}

Светодиод включается и выключается при нажатии на кнопку, и нет ни каких ложных срабатываний. Поставленная цель достигнута.

Загружаем код в Arduino UNO.

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

Загружаем код в Arduino UNO.

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

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

Если у вас возникли сложности с загрузкой кода, посмотрите эту статью:

Программа Arduino IDE бесплатно для Windows, Mac OS, linux.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!


Понравился Урок 8. Arduino: Дребезг — программное устранение. Нажатие кнопки без ложных срабатываний? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 1. Двусторонняя связь между двумя Arduino с использованием I2C. http://arduino-tex.ru/news/11/dvustoronnyaya-svyaz-mezhdu-dvumya-arduino-s-ispolzovaniem.html Константин Portal-PK 2020-09-18T09:08:10+03:00 При разработке проектов на Arduino часто возникает потребность в увеличении возможности, а пинов не достаточно. Также бывает необходимость объединить несколько работающих узлов для обмена данными, т.е. реализовать двухстороннюю связь между двумя Arduino. Для реализации двусторонней связи между двумя Arduino отлично подойдёт шина I2C.

Интерфейс I2C (или по-другому IIC) — это достаточно широко распространённый сетевой последовательный интерфейс, придуманный фирмой Philips и завоевавший популярность относительно высокой скоростью передачи данных, дешевизной и простотой реализации.

Шина I2C синхронная, состоит из двух линий: данных (SDA) и тактов (SCL). При проектировании есть 2 типа устройств: ведущий (master) и ведомый (slave). Инициатором обмена всегда выступает ведущий, обмен между двумя ведомыми невозможен. Всего на одной двухпроводной шине может быть до 127 устройств.

двухстороннюю связь между двумя Arduino

Такты на линии SCL генерирует ведущий (master). Линией SDA могут управлять как мастер, так и ведомый (slave), в зависимости от направления передачи. Единицей обмена информации является пакет, обрамленный уникальными условиями на шине, именуемыми стартовым и стоповым условиями. Мастер в начале каждого пакета передает один байт, где указывает адрес ведомого и направление передачи последующих данных. Данные передаются 8-битными словами. После каждого слова передается один бит подтверждения приема приемной стороной.

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

I2C используется во многих приложениях, таких как чтение RTC (часы реального времени), доступ к внешней памяти EEPROM. Он также используется в сенсорных модулях, таких как гироскоп, магнитометр и т. д.

Контакты Arduino I2C.

Выводы I2C расположены следующим образом на плате Arduino Uno.

Выводы I2C расположены следующим образом на плате Arduino Uno.

Для других моделей плат соответствие выводов такое:

Плата

Пин SDA

Пин SCL

Arduino Uno, Nano, Pro и Pro Mini

A4

A5

Arduino Mega

20

21

Arduino Leonardo

2

3

Arduino Due

20, SDA1

21, SCL1

Библиотека "Wire".

Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека Wire. Она имеет следующие функции:

Функция

Назначение

begin(address)

Инициализация библиотеки и подключение к шине I2C,

если не указан адрес, то присоединённое устройство считается ведущим. Используется 7-битная адресация.

requestFrom()

Используется ведущим устройством для запроса определённого количества байтов от ведомого.

beginTransmission(address)

Начало передачи данных к ведомому устройству по определённому адресу.

endTransmission()

Прекращение передачи данных ведомому.

write()

Запись данных от ведомого в ответ на запрос.

available()

Возвращает количество байт информации, доступных для приёма от ведомого.

read()

Чтение байта, переданного от ведомого ведущему или от ведущего ведомому.

onReceive()

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

onRequest()

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

Более подробное описание функций с примерами смотрите на странице библиотеки Wire.

Примечание. Каждое ведомое устройство I2C имеет уникальный адрес. При обмене данными по протоколу I2C подчиненный адрес должен использоваться мастером.

I2C связь двух Arduino.

I2C связь двух Arduino.

Передача данных от ведущего к ведомому устройству. Здесь будем использовать две Arduino UNO: одна как ведущая, а другой как ведомая.
Для реализации нашего урока за основу возьмем пример библиотеки Wire, предоставленный Arduino, вместе с IDE.
Из библиотеки Wire мы используем master_writer для Arduino в качестве главного и slave_receiver для Arduino в качестве подчиненного устройства. В этом примере числовое значение будет передаваться от ведущего к ведомому, и ведомый отобразит его в последовательном мониторе порта.
Используемые примеры можно найти:
Файл -> Примеры -> Wire -> master_writer

#include <Wire.h>
void setup() {
  Wire.begin(); // join i2c bus (address optional for master)
}
byte x = 0;
void loop() {
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("x is ");        // sends five bytes
  Wire.write(x);              // sends one byte
  Wire.endTransmission();    // stop transmitting
  x++;
  delay(500);
}

Файл -> Примеры -> Wire -> slave_receive

#include <Wire.h>
void setup() {
  Wire.begin(8);                // join i2c bus with address #8
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600);           // start serial for output
}
void loop() {
  delay(100);
}
// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany) {
  while (1 < Wire.available()) { // loop through all but the last
    char c = Wire.read(); // receive byte as a character
    Serial.print(c);         // print the character
  }
  int x = Wire.read();    // receive byte as an integer
  Serial.println(x);         // print the integer
}

При использовании данного примера в мониторе порта ведомого (slave) устройства получим вот такие данные.

При использовании данного примера в мониторе порта ведомого (slave) устройства получим вот такие данные.

Двусторонняя связь между двумя Arduino с использованием I2C.

Для реализации двусторонней связи между двумя Arduino с помощью шины I2C напишем программу, в которой будем отправлять сообщение "Hello" ведомому устройству, а ведомое устройство ответит на полученное сообщение словом "Hi". В данном примере две Arduino Uno используются как ведущий (master) и ведомый (slave).

Скетч для Master.

    #include <wire.h>
    void setup() {
 Serial.begin(9600); /* begin serial comm. */
 Wire.begin(); /* join i2c bus as master */
 Serial.println("I am I2C Master");
}
void loop() {
 Wire.beginTransmission(8); /* begin with device address 8 */
 Wire.write("Hello Slave");  /* sends hello string */
 Wire.endTransmission();    /* stop transmitting */
 Wire.requestFrom(8, 9); /* request & read data of size 9 from slave */
 while(Wire.available()){
    char c = Wire.read();/* read data received from slave */
  Serial.print(c);
 }
 Serial.println();
 delay(1000);
}
    </wire.h>

Скетч для Slave.

#include <Wire.h>
void setup() {
 Wire.begin(8);                /* join i2c bus with address 8 */
 Wire.onReceive(receiveEvent); /* register receive event */
 Wire.onRequest(requestEvent); /* register request event */
 Serial.begin(9600);           /* start serial comm. */
 Serial.println("I am I2C Slave");
}
void loop() {
 delay(100);
}
// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();      /* receive byte as a character */
    Serial.print(c);           /* print the character */
  }
 Serial.println();             /* to newline */
}
// function that executes whenever data is requested from master
void requestEvent() {
 Wire.write("Hi Master");  /*send string on request */
}

В мониторе порта мастера будет выводить ответ ведомого устройства.

В мониторе порта мастера будет выводить ответ ведомого устройства.

А в ведомом устройстве будет отвечать приветом на запрос.

А в ведомом устройстве будет отвечать приветом на запрос.

Вывод.

Как видим из примера, двустороннюю связь двух Arduino по I2C реализовать достаточно просто. Но тут есть и свои подводные камни. Wire.read() работают с одним байтом информации, поэтому больше 255 не передать. Для передачи большого числа, и числа с плавающей запятой не получиться без применения дополнительных алгоритмов обработки. Данный пример разберем в следующем уроке по данной теме. А также подключим 5-7 различных устройств по I2C и научим их общаться друг с другом.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился Урок 1. Двусторонняя связь между двумя Arduino с использованием I2C? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Прошивка Arduino Pro Mini с помощью конвертера PL2303HX. http://arduino-tex.ru/news/10/proshivka-arduino-pro-mini-s-pomoshchyu-konvertora-pl2303hx.html Константин Portal-PK 2020-09-17T13:33:16+03:00 В предыдущей статье уже рассказывал про USB-to-UART TTL конвертер на PL2303HX и как установить драйвера на Linux, Windows 8/10, Mac OS. А сегодня с помощью данного преобразователя запрограммируем Arduino Pro Mini.

Arduino Pro Mini одна из самых маленьких плат семейства Arduino

Arduino Pro Mini одна из самых маленьких плат семейства Arduino и при этом может использоваться в готовых проектах. Построена на микроконтроллере ATmega168, а позже вышла плата на базе микроконтроллера ATmega328. Платформа содержит 14 цифровых входов и выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов. Arduino Pro Mini — это Arduino Nano без встроенного преобразователя FTDI FT232RL (или CH340G). Поэтому прошивка загружается с помощью программатора или конвертора.

Существует две версии платформы Pro Mini.

Существует две версии платформы Pro Mini. Одна версия работает при напряжении 3.3 В и частоте 8 МГц, другая при напряжения 5 В и частоте 16 МГц. В статье для примера буду прошивать Arduino Pro Mini 5 В и частоте 16 МГц с микроконтроллером ATmega328.

 Arduino Pro Mini — это Arduino Nano без встроенного преобразователя FTDI FT232RL

Схема подключения Arduino Pro Mini к PL2303HX.

Для прошивки Arduino Pro Mini нужно подключить к PL2303HXпо схеме, которая изображена на картинке. Сложного нет ничего, главное не перепутать подключение питания. Если ваша Arduino Pro Mini работает при напряжении 3.3 В подключаем к данному выводу, в противном случае плата выйдет из строя. В моем случае рабочее напряжение 5В, поэтому запитываю плату от 5 В.

Схема подключения Arduino Pro Mini к PL2303HX.

TXD <------> RXD

RXD <------> TXD

VCC <------> +5V

GND <------> GND

Для примера загрузим Blink, данный пример есть в среде Arduino IDE.

Для примера загрузим Blink, данный пример есть в среде Arduino IDE.

Затем выберем плату и порт, к которому подключен конвертор PL2303HX.

Затем выберем плату и порт, к которому подключен конвертор PL2303HX.

При загрузке скетча, когда появится надпись «Загрузка», нужно нажать на плате кнопку Reset. (Иногда одно нажатие не срабатывает и нужно произвести 2 кратковременных нажатия.)

При загрузке скетча, когда появится надпись «Загрузка», нужно нажать на плате кнопку Reset.

Нужно нажать на плате кнопку Reset.

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

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

Если вам нужно программировать Arduino Pro Mini довольно часто, то можно не экономить на программаторе, и купить его с выходом DTR. При загрузке скетча вам не нужно будет постоянно нажимать кнопку Reset. Загрузка будет происходить в автономном режиме.

программатор с выходом DTR

Но и дешёвый преобразователь можно доработать. На чипе PL2303 есть 2-я ножка с сигналом DTR. На чип IDE программа и так посылает сигнал сброса при прошивке, так почему нам его не использовать.

 На чипе PL2303 есть 2-я ножка с сигналом DTR.

Поэтому если вы хотите использовать, к примеру ATmega 8 или 328, то для авто-сброса при прошивке вам необходимо установить конденсатор 0,1мкФ.

Поэтому если вы хотите использовать, к примеру ATmega 8 или 328

 ATmega 8 или 328, то для авто-сброса при прошивке вам необходимо установить конденсатор 0,1мкФ.

Но я не проводил модернизацию своего конвертора PL2303HX. Я не так часто программирую Arduino Pro Mini и нажать на кнопку Reset не так и сложно.

Подведем итог. Запрограммировать Arduino Pro Mini с помощью конвертора PL2303HX не так и сложно. Есть свои нюансы, зная про которые программирование Arduino Pro Mini не многим сложнее, чем загрузка скетча в Arduino NANO.

Понравилась статья Прошивка Arduino Pro Mini с помощью конвертора PL2303HX? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
USB-to-UART PL2303HX. Установка драйверов на Linux, Windows, Mac OS http://arduino-tex.ru/news/9/usb-to-uart-ttl-na-pl2303hx-ustanovka-draiverov-na-linux-windows-8-10-mac.html Константин Portal-PK 2020-09-15T11:04:21+03:00 Большинство отладочных плат Arduino имеют встроенный USB-to-Serial преобразователь. Но как запрограммировать Arduino pro mini, Arduino pro и другие отладочные платы, которые не оснащены USB-to-Serial конверторами? Тут нам поможет USB-to-UART преобразователь на микросхеме PL2303HX.

 USB-to-UART преобразователь на микросхеме PL2303HX

PL2303HX – это небольшой USB-Serial конвертер со встроенным приемопередатчиком RS232 (интерфейс UART). Микросхема создает на компьютере виртуальный COM — порт, через который можно прошить микроконтроллеры, а так же восстанавливать роутеры, приставки.

PL2303HX – это небольшой USB-Serial конвертер со встроенным приемопередатчиком RS232

Технические параметры

  • Напряжение питания: 5В (от USB)
  • Интерфейс 1: USB
  • Интерфейс 2: TTL (от 0 до 5, Rx и Tx)
  • Выходное напряжение, В: 3.3 и 5 (отдельные выводы)
  • Размеры: 50мм x 15мм x 8мм
  • Поддержка операционных систем: Linux, Mac OS, Windows XP / 7 / 8 / 8.1 / 10.

Назначение светодиодов:

  • P (Power) - питание (горит постоянно).
  • R (RxD) - принимаемые данные.
  • T (TxD) - передаваемые данные.

Из электрической схемы видно, что питание на вывод +5В идёт напрямую с USB порта, без защитных элементов, а питание на вывод +3.3 В. идёт с внутреннего стабилизатора PL-2303

Из электрической схемы видно, что питание на вывод +5В идёт напрямую с USB порта, без защитных элементов, а питание на вывод +3.3 В. идёт с внутреннего стабилизатора PL-2303, который может выдержать ток до 150 мА.

Установка драйверов USB-to-UART TTL на PL2303HX.

При работе в операционной системе Linux Mint все работало без установки и дополнительной настройки. По моему опыту работать с Микроконтроллерами лучше в операционной системе Linux, но это мое мнение.

Установка драйверов PL2303HX на Windows 7, 8 и 10.

Фирма Prolific в октябре 2012 года, прекратила производство и поддержку микросхем UART PL2303X (Chip Rev A) и PL2303X HX (Chip Rev A), взамен начала производить микросхемы PL2303TA. Но и сейчас, можно купить преобразователь на микросхеме PL-2303HX (с поддельным чипом). При использовании ОС Windows 7 / 8 / 8.1 /10, для подключенного устройства автоматически скачивается последняя версия драйвера, в которой нет поддержки этих чипов, а в диспетчере устройств будет показан желтый знак с кодом ошибки 10.

При использовании ОС Windows 7 / 8 / 8.1 /10

Методом проб и ошибок выяснил, чтобы преобразователь полноценно работал в Windows 7 / 8 / 8.1 /10 необходимо установить старый драйвер v. 1.5.0 (10.21.2011). Скачать драйвер можно внизу статьи в разделе «Файлы для скачивания».

И так, приступим к установке драйвера. Для этого зайдем в «Диспетчер задач». Как видим, устройство отображается с ошибкой. И версия драйвера 17.10.2013.

приступим к установке драйвера

Для устранения данной ошибки достаточно установить драйвер v. 1.5.0, скачать который можно внизу статьи в разделе «Файлы для скачивания».

Для устранения данной ошибки достаточно установить драйвер v. 1.5.0

После установки нажимаем на устройство правой кнопкой мыши и выбираем пункт меню «Обновить драйвер».

При использовании ОС Windows 7 / 8 / 8.1 /10

Затем выбираем «Выбрать драйвер из доступных драйверов на компьютере».

Затем выбираем «Выбрать драйвер из доступных драйверов на компьютере».

Откроется список доступных драйверов.

Откроется список доступных драйверов.

Как видно из списка, установлены драйвера более ранней версии, но положительного результата это не принесло. Поэтому выбираем из списка драйвер v. 1.5.0 (10.21.2011).

После данных манипуляций вы увидите, что ошибки в диспетчере устройств больше нет.

Можно прошивать Arduino или другое устройство.

Можно прошивать Arduino или другое устройство.

Установка драйвера PL2303HX на Mac OS.

Mac OS не пользуюсь, поэтому рассказать, как установить не смогу. Но есть инструкция на английском языке. Драйвер и инструкцию можете скачать в разделе «Файлы для скачивания».

Понравилась статья USB-to-UART TTL на PL2303HX. Установка драйверов на Linux, Windows 8/10, Mac OS? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 7. Подключаем тактовую кнопку к Arduino и управляем светодиодом. http://arduino-tex.ru/news/8/urok-7-podklyuchaem-taktovuyu-knopku-k-arduino-i-upravlyaem.html Константин Portal-PK 2020-08-24T09:35:40+03:00 Сегодня в Arduino уроке подключим тактовую кнопку к Arduino UNO и научимся управлять светодиодом.

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

В данном уроке рассмотрим самый простой и распространённый пример подключения кнопки к Arduino. Также существуют и другие схемы подключения и алгоритмы работы с тактовой кнопкой, но об этом поговорим в следующих Arduino уроках.

Сегодня в Arduino уроке подключим тактовую кнопку к Arduino UNO и научимся управлять светодиодом.

Что такое тактовая кнопка?

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

Кнопки можно разделить на 2 типа:

  • с фиксацией. Приспособление остается в том положении, которое задали при нажатии. Другими словами, если на кнопку нажать, то она вернется в исходное положение только после повторного нажатия;
  • без фиксации. Противоположно первому варианту. Кнопка после нажатия возвращается в исходное положение;

В Arduino уроке будем использовать кнопку без фиксации.

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

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

Установим на макетную плату тактовую кнопку, и подключим одну ножку к +5v, вторую ножку, с помощью подтягивающего резистора, подключим к GND.

Установим на макетную плату тактовую кнопку, и подключим одну ножку к +5v

Это необходимо сделать, чтобы кнопка не была в «подвешенном» состоянии. Если не поставить подтягивающий резистор, то в состоянии, когда кнопка не нажата, на контакте Arduino будет неустановившееся состояние: и не логический ноль, и не логическая единица. Вот почему важно ставить подтягивающий резистор.

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

Скетч управления светодиодом с помощью тактовой кнопки.

В данном скетче мы будем использовать новую функцию analogRead(), которая поможет нам считывать состояние кнопки. Для определения pin Arduino, к которому подключена кнопка как вход, будем использовать INPUT. Код получится в несколько строчек.

Рассмотрим основные строки кода:

pinMode(button_pin, INPUT);

Инициализирует пин ардуино как вход. Что позволяет считывать состояние кнопки.

int button = digitalRead(button_pin);

Сохраняем состояние кнопки в переменную.

if (button == HIGH)
    digitalWrite(led_pin, HIGH);
  else
    digitalWrite(led_pin, LOW);

Проверяем, нажата кнопка или нет. Если нажата, то включаем светодиод.

Проверяем, нажата кнопка или нет. Если нажата, то включаем светодиод.

Светодиод светится только когда нажата кнопка. Как же сделать, чтобы светодиод при нажатии кнопки светился, а при повторном нажатии на кнопку выключался? Это достаточно интересная тема, которую мы рассмотрим в следующем уроке.

Загружаем код в Arduino UNO.

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

Загружаем код в Arduino UNO.

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

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

Если у вас возникли сложности с загрузкой кода, посмотрите эту статью:

Программа Arduino IDE бесплатно для Windows, Mac OS, linux.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!


Понравился Урок 7. Подключаем тактовую кнопку к Arduino и управляем светодиодом? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 6. Arduino светофор для машин и пешеходов. http://arduino-tex.ru/news/7/urok-6-arduino-svetofor-dlya-mashin-i-peshehodov.html Константин Portal-PK 2020-08-24T09:17:52+03:00 В планах писать еще один урок про светофоры на Arduino не было. Но в группе Facebook написали, что данный светофор реализован не совсем правильно, нужно как минимум сделать секцию для пешеходов. В дальнейшем есть планы снять урок про Arduino светофор для машин и пешеходов со звуковым уведомлением и кнопкой. Но на данном этапе это большой скачок вперед и с теми знаниями, которые вы получили из предыдущих уроков, сделать подобный светофор не получится. Поэтому сделал простой вариант Arduino светофора для машин и пешеходов.

Цель урока: Arduino светофор для машин и пешеходов.

Закрепить полученные знания в предыдущих уроках, и повторить работу с циклом for() и булевыми переменными.

Светофор для пешеходов.

Такие светофоры регулируют движение пешеходов через пешеходный переход. Как правило, он имеет два вида сигнала: разрешающий и запрещающий. Обычно для этой цели используют соответственно зелёный и красный свет. Сами сигналы имеют различную форму. Чаще всего используют сигналы в виде силуэта человека: красный — стоящего, зелёный — идущего. В 1970-е годы в городах СССР использовались пешеходные светофоры иного вида — прямоугольной формы; с красным сигналом в виде надписи «стойте» и зелёным в виде надписи «идите» (такие светофоры показывают крупным планом в фильме Следствие ведут ЗнаТоКи. Несчастный случай).

Современные светофоры для пешеходов дополнительно оборудуют также звуковыми сигналами, предназначенными для слепых пешеходов, а иногда и табло обратного отсчёта времени (впервые появились во Франции в 1998 г.).

Алгоритм работы светофора для машин и пешеходов.

Алгоритм работы одного светофора найти в интернет можно. Но вот как взаимодействуют 2 светофора: для машин и для пешеходов, данной информации нет. В группе на facebook мне скинули вот такую иллюстрацию.

Алгоритм работы светофора для машин и пешеходов.

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

Алгоритм работы трех секционного светофора для машин останется без изменений. К режиму работы добавим работу двухсекционного светофора для пешеходов.

Схема подключения Arduino светофора для машин и пешеходов.

Схему подключения возьмём из Урока 5. Светофор на Arduino UNO. Arduino моделирование в Tinkercad. И добавим 2 светодиода, которые будут имитировать работу светофора для пешеходов.

В итоге схема подключения Arduino светофора для машин и пешеходов примет вид.

Схема подключения Arduino светофора для машин и пешеходов.

Скетч Arduino светофора для машин и пешеходов.

За основу возьмём код из 5 урока. Если вы не смотрели данный урок, рекомендую ознакомиться с ним прежде, чем приступать к данному уроку.

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

int people_red = 5;
int people_green = 6;
void setup()
{
…
  pinMode(people_red, OUTPUT);
  pinMode(people_green, OUTPUT);
}

К алгоритму работы трехсекционного светофора добавим работу светофора для пешеходов. Для этого алгоритм менять не придётся. Достаточно прописать в нужных местах включение и выключение сигналов светофора для пешеходов.

int led_red =2;
int led_yellow = 3;
int led_green = 4;
boolean led_on = HIGH;
int people_red = 5;
int people_green = 6;
boolean led_on_p = HIGH;
void setup()
{
  pinMode(led_red, OUTPUT);
  pinMode(led_yellow, OUTPUT);
  pinMode(led_green, OUTPUT);
  pinMode(people_red, OUTPUT);
  pinMode(people_green, OUTPUT);
}
void loop()
{
  digitalWrite(led_red, HIGH);
  digitalWrite(people_green, HIGH);
  delay(2000); // 
  digitalWrite(led_yellow, HIGH);
  digitalWrite(people_red, HIGH);
  digitalWrite(people_green, LOW);
  delay(700); // 
  digitalWrite(led_red, LOW);
  digitalWrite(led_yellow, LOW);
  digitalWrite(led_green, HIGH);
  delay(2000); //
  for (int i=0; i<6; i++)
  {
   led_on = !led_on;
   digitalWrite(led_green, led_on);
   delay(500); //
  }
  digitalWrite(led_yellow, HIGH);
  digitalWrite(led_green, LOW);
  delay(700); //
  digitalWrite(led_yellow, LOW);
  digitalWrite(people_red, LOW);
}

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

boolean led_on_p = HIGH;

И сам цикл мигания светодиодом.

for (int x=0; x<6; x++)
  {
    led_on_p = !led_on_p;
    digitalWrite(people_green, led_on_p);
    delay(500);
  }

В итоге у нас получится вот такой код.

int led_red =2;
int led_yellow = 3;
int led_green = 4;
boolean led_on = HIGH;
int people_red = 5;
int people_green = 6;
boolean led_on_p = HIGH;
void setup()
{
  pinMode(led_red, OUTPUT);
  pinMode(led_yellow, OUTPUT);
  pinMode(led_green, OUTPUT);
  pinMode(people_red, OUTPUT);
  pinMode(people_green, OUTPUT);
}
void loop()
{
  digitalWrite(led_red, HIGH);
  digitalWrite(people_green, HIGH);
  delay(2000); // 
  for (int i = 0; i<6; i++)
  {
    led_on_p = !led_on_p;
    digitalWrite(people_green, led_on_p);
    delay(500);
  }
  digitalWrite(led_yellow, HIGH);
  digitalWrite(people_red, HIGH);
  digitalWrite(people_green, LOW);
  delay(700); // 
  digitalWrite(led_red, LOW);
  digitalWrite(led_yellow, LOW);
  digitalWrite(led_green, HIGH);
  delay(2000); //
  for (int i=0; i<6; i++)
  {
   led_on = !led_on;
   digitalWrite(led_green, led_on);
   delay(500); //
  }
  digitalWrite(led_yellow, HIGH);
  digitalWrite(led_green, LOW);
  delay(700); //
  digitalWrite(led_yellow, LOW);
  digitalWrite(people_red, LOW);
}

Как видим, код Arduino светофора для машин и пешеходов получился не многим сложнее управления одним светофором для машин.

Загружаем код Arduino светофора для машин и пешеходов в Arduino UNO.

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

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился Урок 5. Светофор на Arduino UNO. Arduino моделирование в Tinkercad? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 5. Светофор на Arduino UNO. Arduino моделирование в Tinkercad. http://arduino-tex.ru/news/6/urok-5-svetofor-na-arduino-uno-arduino-modelirovanie-v-tinkercad.html Константин Portal-PK 2020-08-24T08:56:19+03:00 Сегодня в Arduino уроке рассмотрим излюбленный пример школ робототехники, светофор на Arduino. Реализация светофора на Arduino популярна, благодаря наглядному примеру работы распространённого устройства, который мы встречаем ежедневно. Помимо этого, при реализации алгоритма работы светофора можно использовать как минимальные знания в программировании Ардуино, так и более сложные алгоритмы. Что позволяет реализовать светофор с любыми знаниями в программировании.

Цель урока: Светофор на Arduino UNO.

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


Что такое светофор?

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

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

Что такое светофор?

В некоторых городах России, Украины и других стран устанавливаются светофоры с увеличенным красным сигналом (300/200/200 mm). Такие светофоры распространены в Санкт-Петербурге, Киеве, Риме и других городах.

В некоторых городах России, Украины и других стран устанавливаются светофоры с увеличенным красным сигналом (300/200/200 mm).

Повсеместно распространены основные сигналы светофоров:

  • красный сигнал светофора запрещает проезд за стоп-линию (при её отсутствии за светофор),
  • жёлтый обязывает сбросить скорость и быть готовым к тому, что светофор через 0,5 — 1 сек переключится на красный,
  • зелёный — разрешает движение со скоростью, не превышающей максимальный уровень для данной автотрассы.

Алгоритм смены сигналов светофора на Arduino.

На просторах интернета нашел иллюстрацию отображающую алгоритм работы светофора.

Алгоритм смены сигналов светофора на Arduino.

Как видим, светофор должен работать вот по такому алгоритму:

  1. Светит только красный цвет светофора.
  2. Не выключая красный сигнал светофора, включаем желтый.
  3. Выключаем красный и желтый, включаем зеленый.
  4. Выключаем зеленый сигнал светофора, включаем желтый.

После чего цикл повторяем с красного сигнала светофора на Arduino.

На сайте Портал ПК делал данный урок года 2 назад. После чего мне написали достаточно много комментариев по поводу того, что нужно добавить мигание зеленым сигналом светофора. В данном уроке исправим недоработку и сделаем мигание зеленым сигналом светофора.

Как подключить светодиоды к Arduino UNO?

Схема подключения не очень сложная и для подключения нам понадобится макетная плата, 3 светодиода и 3 резистора наминало 220 Ом. А также Arduino UNO и соединительные провода.

Все соединяем по схеме.

Как подключить светодиоды к Arduino UNO?

Как собрать схему в Tinkercad смотрите в видео, которое располагается вверху статьи.

Скетч светофора на Arduino UNO.

Реализовать программу светофора на Arduino можно различными способами. Сперва рассмотрим работу светофора по алгоритму, который изображён на картинке выше.

Для этого создадим переменные и инициализируем пины как выход.

int led_red = 2;
int led_yellow = 3;
int led_green = 4;
boolean ledOn = HIGH;
void setup()
{
  pinMode(led_red, OUTPUT);
  pinMode(led_yellow, OUTPUT);
  pinMode(led_green, OUTPUT);
}

Если вы не понимаете, что написано в данных строчках, посмотрите предыдущие Arduino уроки.

В основном цикле loop() можно все реализовать, используя функции digitalWrite() и delay(). В итоге должен получиться вот такой код.

int led_red = 2;
int led_yellow = 3;
int led_green = 4;
void setup()
{
  pinMode(led_red, OUTPUT);
  pinMode(led_yellow, OUTPUT);
  pinMode(led_green, OUTPUT);
}
void loop()
{
  digitalWrite(led_red, HIGH);
  delay(2000); 
  digitalWrite(led_yellow, HIGH);
  delay(700);
  digitalWrite(led_red, LOW);
  digitalWrite(led_yellow, LOW);
  digitalWrite(led_green, HIGH);
  delay(2000); 
  digitalWrite(led_green, LOW);
  digitalWrite(led_yellow, HIGH);
  delay(700);
  digitalWrite(led_yellow, LOW);
}

Скетч достаточно простой и без мигания зеленым цветом светофора.

А чтобы заставить мигать зеленый светодиод воспользуемся функцией for(), которую рассматривали в предыдущем уроке: Урок 4. Arduino – цикл for.

Цикл позволяющий мигать зеленым светодиодом будет таким:

for (int i = 0; i<6; i++)
{
  digitalWrite(led_green, LOW);
  delay(500);
  digitalWrite(led_green, HIGH);
  delay(500);
}

При желании данный код можно немного модернизировать. Так как мы изучили булевые переменные в: Урок 3. Два светодиода. Создадим переменную

boolean ledOn = HIGH;
//И изменим цикл.
 for (int i = 0; i<6; i++)
  {
    ledOn = !ledOn;
    digitalWrite(led_green, ledOn);
    delay(500);
  }

Цикл выполняется 6 раз, так как при каждом выполнении цикла мы меняем булевую переменную с HIGH на LOW и наоборот.

Цикл выполняется 6 раз, так как при каждом выполнении цикла мы меняем булевую переменную с HIGH на LOW и наоборот. И выполняем либо включение светодиода, либо включение. По этой причине количество раз выполнения цикла увеличивается в 2 раза.

Конечный вариант кода светофора на Arduino будет вот таким:

int led_red = 2;
int led_yellow = 3;
int led_green = 4;
boolean ledOn = HIGH;
void setup()
{
  pinMode(led_red, OUTPUT);
  pinMode(led_yellow, OUTPUT);
  pinMode(led_green, OUTPUT);
}
void loop()
{
  digitalWrite(led_red, HIGH);
  delay(2000); // Wait for 10000 millisecond(s)
  digitalWrite(led_yellow, HIGH);
  delay(700);
  digitalWrite(led_red, LOW);
  digitalWrite(led_yellow, LOW);
  digitalWrite(led_green, HIGH);
  delay(2000); // Wait for 1000 millisecond(s)
  for (int i = 0; i<6; i++)
  {
    ledOn = !ledOn;
    digitalWrite(led_green, ledOn);
    delay(500);
  }
  digitalWrite(led_green, LOW);
  digitalWrite(led_yellow, HIGH);
  delay(700);
  digitalWrite(led_yellow, LOW);
}

Загружаем код в Arduino UNO.

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


Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился Урок 5. Светофор на Arduino UNO. Arduino моделирование в Tinkercad? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 4. Arduino - цикл for. Изучаем Ардуино без Arduino. http://arduino-tex.ru/news/5/urok-4-arduino---cikl-for-izuchaem-arduino-bez-arduino.html Константин Portal-PK 2020-08-24T08:14:57+03:00 Сегодня в уроке программирования Arduino познакомимся с циклом for. Для этого разберём пример подачи сигнала бедствия SOS (СОС) с помощью Arduino и светодиода.

SOS — радиосигнал о помощи от терпящих бедствие на море. Состоит из сочетания трех точек, трёх тире и ещё трех точек азбуки Морзе. Мнение, будто SOS — аббревиатура английского словосочетания «Save Our Souls» («Спасите наши души») или «Save Our Ship» («Спасите наш корабль») — красивая легенда. На самом деле расшифровки нет, просто соединение точек, тире, точек — наиболее простая и отчетливая комбинация.

Основные правила:

  • За единицу времени принимается длительность одной точки.
  • Длительность тире равна трём точкам.
  • Пауза между элементами одного знака — одна точка.
  • Пауза между знаками в слове — 3 точки.
  • Пауза между словами — 7 точек.

SOS — радиосигнал о помощи от терпящих бедствие на море.

Подать сигнал SOS можно с помощью дыма, огня, отражения. В данном уроке мы научимся подавать сигнал бедствия с помощью светодиода и Arduino.


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

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

Схема подключения проста. Достаточно подключить всего один светодиод к Arduino. Для данного урока можно воспользоваться встроенным светодиодом на плате Arduino UNO, который подключен к 13 пину, и на плате обозначается буквой L. Но для наглядного примера подключим внешний светодиод.

Цель урока: Arduino - цикл for.

Из названия урока понято, что будем изучать цикл forцикл for.

Конструкция for используется для повторения блока операторов, заключенных в фигурные скобки. Счетчик приращений обычно используется для прибавления и завершения цикла. Оператор for подходит для любых повторяющихся действий и часто используется в сочетании с массивами коллекций данных/выводов.

Arduino - цикл for.

Заголовок цикла for состоит из трех частей:

for (initialization; condition; increment) {операторы выполняющиеся в цикле}

Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.

Использование цикла for для подачи сигнала бедствия SOS.

Чтобы подать сигнал SOS можно написать по порядку все необходимые команды. Например, чтобы подать 3 точки можно написать вот такие строки кода.

digitalWrite(led_pin, HIGH);
delay(350); //
digitalWrite(led_pin, LOW);
delay(300); // 
digitalWrite(led_pin, HIGH);
delay(350); //
digitalWrite(led_pin, LOW);
delay(300); // 
digitalWrite(led_pin, HIGH);
delay(350); //
digitalWrite(led_pin, LOW);
delay(300); //

По аналогии можно подать 3 тире. Как видим данную задачу можно решить и без использования цикла. Но код в таком случае будет очень большой. Чтобы сделать код более читабельным, и чтобы он стал меньше, будем использовать цикл. Цикл for выполняет повторяющиеся команды нужное количество раз.

В итоге у нас получается вот такой код.

int led_pin =2;
void setup()
{
  pinMode(led_pin, OUTPUT);
}
void loop()
{
  for (int i = 0; i<3; i++)
 {
  digitalWrite(led_pin, HIGH);
  delay(350); //
  digitalWrite(led_pin, LOW);
  delay(300); // 
 }    
  delay(300); 
  for (int i=0; i<3; i++)
  {
   digitalWrite(led_pin, HIGH);
   delay(1000); //
   digitalWrite(led_pin, LOW);
   delay(300); // 
  }
  delay(300);  
  for (int i=0; i<3; i++)
  {
   digitalWrite(led_pin, HIGH);
   delay(350); //
   digitalWrite(led_pin, LOW);
   delay(300); // 
  }  
  delay(5000);
}

Рассмотрим первый цикл из кода:

Рассмотрим первый цикл из кода:

for (int x=0; x<3; x++)
  • int x=0 — Присвоим переменной x значение равное 0.
  • x<3; - Если x меньше чем 3, выполняем цикл.
  • x++ - При каждом выполнении цикла прибавляем к x единицу. По другому данную строку можно записать x=x+1.

Изначально Икс ( x) равен 0. Сравниваем 0<3, прибавляем к x единицу и выполняем действия в {}. После выполнения действия в скобках. Выполняем проверку x у нас сейчас равен 1. 1<3, прибавляем к x единицу и выполняем действия в {}. Аналогично пройдет третий проход по циклу. А при попытке выполнить цикл четвертый раз у нас получится, что 3=3. Условия цикла не выполняется. Выполнение цикла прекращаться.

Остальные циклы в скетче выполняются аналогично.

Загружаем код в Arduino UNO. Arduino - цикл for.

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

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!
Понравился Урок 4. Arduino - цикл for. Изучаем Ардуино без Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 3. Два светодиода. Arduino UNO, уроки для начинающих. http://arduino-tex.ru/news/4/urok-3-dva-svetodioda-arduino-uno-uroki-dlya-nachinayushchih.html Константин Portal-PK 2020-08-24T07:54:57+03:00 Arduino UNO является самой простой и распространенной платой для новичков. Это связано с достаточно большим форм-фактором отладочной платы, что позволяет без проблем разобрать маркировку pin, производить подключение к плате без использования дополнительных шилдов или макетной платы. Поэтому самой распространённым запросом по урокам для изучения Arduino в поисковых системах: «Arduino UNO уроки для начинающих».

Arduino UNO уроки для начинающих

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

Схема подключения двух светодиодов к Arduino UNO.

Схему подключения двух светодиодов к Arduino UNO можно сделать с нуля или использовать схему подключения, из второго урока. Для этого в TinkerCad достаточно сделать дубль второго урока. Чтоб сделать дубль наведем курсор мыши на урок, в правом верхнем углу появится шестеренка, при нажатии на которую появляется меню. В меню нажимаем на кнопку «Дублировать»

 TinkerCad достаточно сделать дубль второго урока.

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

Схема подключения двух светодиодов к Arduino UNO.


Отлично. Осталось написать скетч для управления двумя светодиодами.

Цель Ардуино урока: научиться подключать несколько светодиодов к плате Arduino UNO. Изучить работу с булевыми переменными.

Переменный тип boolean.

Логический (булевый) тип данных — boolean. Может принимать одно из двух значений true или false. boolean занимает в памяти один байт.

Булевая переменная может хранить значение логического нуля или логической единицы, что мы и будем использовать в Arduino UNO уроке для начинающих.

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

running = !running; // меняем значение булевой переменной

Строчка кода, которая приведена выше, меняет булевую переменную с true на false и наоборот с false на true.

Мигаем двумя светодиодами с помощью Arduino UNO.

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

int led = 4;
int led_2 = 5;
int tim = 500;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(led_2, OUTPUT);
}
void loop()
{
  digitalWrite(led, HIGH);
  digitalWrite(led_2, LOW);
  delay(tim);
  digitalWrite(led, LOW);
  digitalWrite(led_2, HIGH);
  delay(tim);
}

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

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

boolean stat = LOW;

И добавим строку изменения значения булевой переменной. Данная строка меняет значение с ноля на логическую единицу. При следующем выполнении данной строки логическая единица меняется на логический ноль и так бесконечное количество раз.

running = !running; // меняем значение булевой переменной

Добавление в код одной переменой может значительно изменить код.

Добавление в код одной переменой может значительно изменить код. Уменьшить длину кода и упростить алгоритм работы.
int led = 4;
int led_2 = 5;
int tim = 500;
boolean stat = LOW; 
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(led_2, OUTPUT);
}
void loop()
{
  digitalWrite(led, stat);
  stat = !stat;
  digitalWrite(led_2, stat);
  delay(tim); // Ждем 500
}

Загружаем код в Arduino UNO.

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

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился Урок 3. Два светодиода. Arduino UNO, уроки для начинающих? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 2. Переменные. Изучаем Ардуино без Arduino. http://arduino-tex.ru/news/3/urok-2-peremennye--izuchaem-arduino-bez-arduino.html Константин Portal-PK 2020-08-24T06:57:04+03:00 Продолжаем изучать Ардуино без Arduino. Сегодня в Arduino уроке приступим к изучению переменных. Но сперва, проведем небольшой эксперимент с кодом, который у нас получился в первом уроке. Переместим код, который находится в блоке loop, в блок setup, и смоделируем ситуацию.

digitalWrite(led, HIGH);                       
delay(tim); // Wait for 1000 millisecond(s)
digitalWrite(led, LOW);
delay(tim2); // Wait for 1000 millisecond(s)

Как видим, светодиод один раз мигнул и больше не мигает. Давайте добавим еще одну строчку кода.

digitalWrite(led, HIGH);

Как видим, светодиод один раз мигнул и больше не мигает. Давайте добавим еще одну строчку кода.

В данной ситуации светодиод мигнёт, затем включится и больше не выключается. Данный пример наглядно показывает, в чем отличие функции loop() и setup(). Если вам нужно выполнить 1 раз какое-то действие при включении Arduino, добавляем данный код в функцию setup().

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

Для того, чтобы начать изучать переменные в среде разработки Arduino IDE, соберем схему подключения светодиода к Arduino.

Можно использовать встроенный светодиод на плате Arduino UNO, который подключен к 13 пину и на плате обозначается буквой L. Но данный пример не наглядный и будет сложно проверить и понять преимущества использования переменных. Вот почему желательно использовать схему подключения внешнего светодиода.

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

Цель урока: использование переменных в проектах на Arduino.

Рассмотрим код из первого урока: Мигаем светодиодом с помощью Arduino.

void setup()
{
  pinMode(2, OUTPUT);
}
void loop()
{
  digitalWrite(2, HIGH);
  delay(500); // Wait for 1000 millisecond(s)
  digitalWrite(2, LOW);
  delay(500); // Wait for 1000 millisecond(s)
}

Для того, чтобы подключить светодиод к другому пину Ардуино, нужно поменять значения в 3 строчках кода. А если мы будем использовать большой код, то поменять нужно будет код в десятках строк. Это при изменении подключения к одному пину. А если нам нужно освободить группу пинов для подключения внешнего модуля или датчиков. В таком случае исправление кода займет достаточно много времени. Для того, чтобы избежать ненужных трат времени используют переменные. Конечно это не единственное применение переменных, еще они нужны для хранения значений, проводить арифметические операции и пр.

Применение переменных типа int в Arduino.

Использование переменных в проектах на Arduino помогает упростить код и сделать его более гибким. Сегодня в Arduino уроке мы рассмотрим переменные типа int (от англ. integer – целое число) один их наиболее часто используемых типов данных для хранения чисел. int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1).

Для того, чтобы использовать переменную нужно её объявить, для этого пишем тип переменной в нашем случае int, название переменой ( в названии можно использовать латинские буквы, цифры и символы -,_), и указываем какое значение будет хранить переменная. Если не указать, чему равна переменная она будет равна 0.

int led = 2;

Затем нам нужно заменить пин подключения 2 на переменную.

pinMode(led, OUTPUT); 
... 
digitalWrite(led, HIGH); 
digitalWrite(led, LOW);

Сейчас достаточно изменить значение переменой led и подключить светодиод к выбранному пину. Например, если int led = 5; то схема подключения будет выглядеть вот так:

Применение переменных типа int в Arduino.

Или поменять одну переменную, а именно led, чтобы подключить светодиод к другому pin Arduino. Но код можно еще изменить, добавив переменную:
int tim = 500; 
int tim2 =300;

Переменная tim хранит время свечения светодиода, tim2 – время, сколько светодиод не светит.

Использовать переменные будем следующим образом:

void loop()
{
  digitalWrite(led, HIGH);
  delay(tim); // Ждем
  digitalWrite(led, LOW);
  delay(tim2); // Ждем
}

Переменная tim хранит время свечения светодиода, tim2 – время, сколько светодиод не светит.

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

Загружаем код в Arduino UNO.

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

Загружаем код в Arduino UNO.

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

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


Если у вас возникли сложности с загрузкой кода, посмотрите эту статью:

Программа Arduino IDE бесплатно для Windows, Mac OS, linux.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился урок 2, Переменные в Arduino IDE? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
Урок 1. Изучаем Ардуино без Arduino. Мигаем светодиодом. http://arduino-tex.ru/news/2/urok-1-izuchaem-arduino-bez-arduino-migaem-svetodiodom.html Константин Portal-PK 2020-08-21T13:53:45+03:00 Сегодня начну цикл уроков по программированию Arduino без Arduino. Как такое возможно я рассказывал в статье: TinkerCad Circuits создание схем и Arduino проектов. В предыдущей статье вы найдете краткое описание сервиса и основных возможностей. При создании проекта автоматически добавляется тестовый код, который позволяет мигать встроенным на плату Arduino светодиодом. В данном Arduino уроке подробно на этом останавливаться не будем, а научим мигать внешним светодиодам.

Схема подключения светодиода к Arduino.

Для того чтобы сделать Arduino урок мигание светодиодом, добавим на рабочее поле необходимые элементы и Arduino. Соединим все по схеме.

Схема подключения светодиода к Arduino.

Если у вас возникли сложности при сборке схемы, посмотрите видео. А также подробно про сборку схем рассказывал вот тут.

Если вы не знаете, что такое светодиод читайте статью: Что такое светодиод? Как подключить к Arduino?

Справочник языка Arduino.

Схема к уроку 1. Arduino и Мигающий светодиод, собрана. Можно перейти к редактированию кода, но для этого нужно знать, что обозначает каждая строчка кода. В этом нам поможет справочник языка Ардуино. Я иногда буду ссылаться на сайт Portal-PK,- это мой второй сайт, и часть информации присутствует на нем.

Справочник языка Arduino.

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

Разбираем код Arduino урока.

Изменим код так, чтобы мигал наш светодиод. В коде используются две обязательные функции:

Разбираем код Arduino урока.

Функция setup() вызывается, когда стартует скетч, и используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д. Функция setup запускается только один раз, после каждой подачи питания или сброса платы Arduino.

После вызова функции setup(), которая инициализирует и устанавливает первоначальные значения, функция loop() делает точь-в-точь то, что означает её название, и крутится в цикле, позволяя вашей программе совершать вычисления и реагировать на них. Используйте её для активного управления платой Arduino.

Внутри функции setup() написана функция:

pinMode() Устанавливает режим работы заданного вход/выхода(pin) как входа или как выхода.

pinMode() Устанавливает режим работы заданного вход/выхода(pin) как входа или как выхода.

pinMode(pin, mode)

  • pin: номер вход/выхода(pin), который Вы хотите установить
  • mode: режим одного из двух значений - INPUT или OUTPUT, устанавливает на вход или выход соответственно.

В бесконечном цикле loop() Располагаются две функции:

В бесконечном цикле loop() Располагаются две функции:

Функция digitalWrite() подает HIGH или LOW значение на цифровой выход (pin).

Если выход был установлен в режим выход (OUTPUT) функцией pinMode(), то для значения HIGH напряжение на соответствующем выходе будет 5В, и 0В(земля) для LOW.

Функция delay() останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).

Функция delay() останавливает выполнение программы на заданное в параметре количество миллисекунд

Как видим из примера, у нас бесконечное количество раз выполняется код:

digitalWrite(2, HIGH); // включаем светодиод
delay(500); // ждем 1000 millisecond(s) или 1 секунду
digitalWrite(2, LOW); // выключаем светодиод
delay(500); // ждем 1000 millisecond(s)  или 1 секунду.

Сперва, мы включаем светодиод, затем ждем 1 секунду. После выключаем светодиод и опять ждем 1 секунду, и так бесконечное количество раз, пока подается напряжение на Arduino.

Загружаем код в Arduino UNO.

Если у вас есть в наличии Arduino UNO, можно подключить всё по схеме, которую рассматривали выше, и загрузить код в отладочную плату Arduino. Для этого достаточно скопировать код и вставить его в Arduino IDE.

Для Arduino урока мигаем светодиодам понадобиться:

  • Arduino UNO или Arduino Nano
  • Плата макетная беспаечная
  • Резистор 220 ОМ
  • Соединительные провода папа-папа
  • Светодиод 3 или 5 мм.

Что такое Arduino и как пользоваться данной программой вы можете прочитать тут.

После того, как вы подключили Ардуино к компьютеру, необходимо выбрать плату и порт, к которому подключена Arduino UNO.

Загружаем код в Arduino UNO.

Затем нажимаем на кнопку «Загрузить», после чего вы увидите надпись «Загрузка завершена».

Затем нажимаем на кнопку «Загрузить», после чего вы увидите надпись «Загрузка завершена».

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

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился урок 1, мигание светодиодом? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>
TinkerCad создание схем и Arduino проектов. http://arduino-tex.ru/news/1/izuchaem-arduino-bez-arduino-c-pomoshchyu-tinkercad-i-ego-servisov.html Константин Portal-PK 2020-08-19T06:53:18+03:00

Кто занимается 3D печатью и 3D моделированием наверняка слышал про сервис TinkerCad, который позволяет делать 3D модели и сборочные модели прямо в браузере без установки дополнительного программного обеспечения. Но мало кто знает, что данный сервис позволяет собирать электрические схемы и программировать Arduino UNO. В данной статье рассмотрим, как зарегистрироваться в Tinkercad Circuits Arduino и соберём первую схему.

Tinkercad Circuits Arduino

Что такое Tinkercad Circuits Arduino?

Тинкеркад (Tinkercad Circuits Arduino) – Это бесплатный эмулятор Arduino, который позволяет собирать электрические цепи и программировать Ардуино и проверить работоспособность, смоделировав процесс. Что достаточно удобно для начинающих изучать Ардуино и робототехнику. Чтобы начать работы достаточно зарегистрироваться в Tinkercad.

Что такое Tinkercad Circuits Arduino?

Возможности симулятора Tinkercad для разработчика Arduino

  • Онлайн платформа, для работы не нужно ничего кроме браузера и устойчивого интернета.
  • Удобный графический редактор для визуального построения электронных схем.
  • Предустановленный набор моделей большинства популярных электронных компонентов, отсортированный по типам компонентов.
  • Симулятор электронных схем, с помощью которого можно подключить созданное виртуальное устройство к виртуальному источнику питания и проследить, как оно будет работать.
  • Симуляторы датчиков и инструментов внешнего воздействия. Вы можете менять показания датчиков, следя за тем, как на них реагирует система.
  • Встроенный редактор Arduino с монитором порта и возможностью пошаговой отладки.
  • Готовые для развертывания проекты Arduino со схемами и кодом.
  • Визуальный редактор кода Arduino.
  • Возможность интеграции с остальной функциональностью Tinkercad и быстрого создания для вашего устройства корпуса и других конструктивных элементов – отрисованная модель может быть сразу же сброшена на 3D-принтер.
  • Встроенные учебники и огромное сообщество с коллекцией готовых проектов

Как зарегистрироваться в Tinkercad?

Для того, чтобы зарегистрироваться в Tinkercad Circuits Arduino необходимо найти в поисковой системе слова «Тинкеркад». Зайти на сайт с доменным именемtinkercad.com.

Как зарегистрироваться в Tinkercad?


Для регистрации необходимо нажать на кнопку «Присоединиться». Зарегистрироваться можно по E-mail или войти с помощью учтённой записи Apple, Google.

Для регистрации необходимо нажать на кнопку «Присоединиться»

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

Для того, чтобы войти с помощью учтённой записи Apple или Google,


Для входа с помощью учтённой записи Google достаточно нажать на кнопку «Вход с помощью учетной записи Google». После чего подтвердить то, что вы размещаете использовать учетную запись Google для входа на сайт. Поздравляю, вы можете пользоваться сервисом Tinkercad.

Как создавать схемы в Tinkercad Circuits Arduino?

Как создавать схемы в Tinkercad Circuits Arduino?

Так как ТинкерКад изначально позиционирует себя как сервис 3D моделирования, при входе в личный кабинет вы попадаете в раздел 3Д моделирования. Для того, чтобы перейти в раздел создания электрических цепей нажмите на кнопку «Circuits».

 Для того, чтобы перейти в раздел создания электрических цепей нажмите на кнопку «Circuits».

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

Программирование Arduino в Tinkercad.

Программирование Arduino в Tinkercad.


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

При нажатии кнопки «Начать моделирование», увидим мигание светодиода на плате Arduino. Мигать светодиод заставляет тестовая программа, которая создается автоматически при добавлении Ардуино на рабочее поле.

При нажатии кнопки «Начать моделирование», увидим мигание светодиода на плате Arduino.

Давайте подключим внешний светодиод. Для этого установим светодиод и резистор на макетную плату. Подключим все по схеме. Встроенный светодиод подключен к 13 ножке Arduino. Подключим внешний светодиод к той же ножке и увидим синхронное мигание встроенного и внешнего светодиода.

Защита от ошибок новичка в Tinkercad Circuits Arduino.

При написании неправильного кода к серьёзным последствиям это не приведет, если конечно вы не делаете большой проект и ошибки сделаны уже на стадии внедрения. А так как данная статья рассчитана на новичка. Скорее всего, у вас не возникнет такая ситуация. К чему это я, к тому что при сборке электрических схем, в отличии от кода, ошибки могут привести к нежелательным последствиям:

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

Защита от ошибок новичка в Tinkercad Circuits Arduino.

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

Из примеров видим, что Tinkercad Circuits Arduino показывает уведомления если вы делаете что то не так.

Из примеров видим, что Tinkercad Circuits Arduino показывает уведомления если вы делаете что то не так. Это уберегает ваше оборудование, а также позволяет собирать схемы, если у вас нет в наличии Arduino и необходимых элементов.

Примеры реализации проектов на Arduino.

Для новичков подготовлены несколько готовых схем использования Arduino. Достаточно выбрать схему и вытащить на рабочее поле и начать моделирование.

Примеры реализации проектов на Arduino.

Часть примеров реализовано с использованием блочного программирования, а вторая часть написана кодом, что позволяет расширить кругозор любого пользователя.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

В следующем уроке начнем программировать Arduino в Tinkercad Circuits. Не забудь поделиться статьей с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

]]>