<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Урок 15.1. UIFlow - это просто!]]></title><description><![CDATA[<h3>Цель урока</h3>
<p dir="auto">Привет! Сегодня мы наконец-то подробно познакомимся с элементами UIFlow и разберёмся в вещах, которые раньше казались загадочными (рисунок 1).</p>
<p dir="auto"><img src="https://pp.userapi.com/c846124/v846124066/1899a8/YF_eHLo28Xw.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 1</p>
<p dir="auto">Этот урок научит: разбираться в интерфейсте среды разработки UIFlow и понимать основные принципы работы с блоками.</p>
<h3>Краткая справка</h3>
<ul>
<li>Назначение: среда разработки для семейства устройств M5STACK на языках Blockly и MicroPython</li>
<li>Сфера применения: образование</li>
<li>Интерфейс подключения: Wi-Fi (Интернет)</li>
<li>Совместимость: семейство устройств M5STACK</li>
</ul>
<h3>Краткий обзор</h3>
<p dir="auto">Для того, чтобы начать необходимо перейти по ссылке <a href="http://flow.m5stack.com" target="_blank" rel="noopener noreferrer nofollow ugc">http://flow.m5stack.com</a> (подробная процедура подключения приведена в уроке 15). Давайте рассмотрим секцию A на рисунке 2 - это UI-элементы. Вы можете перетаскивать их с помощью мыши на дисплей виртуального устройства, а потом обращаться к ним с помощью ссылок во вкладке UI. Хорошо! Теперь давайте посмотрим на секцию B - это библиотека Units-модулей, их методы и свойства в спрятаны во вкладке под одноимённым названием.</p>
<p dir="auto"><img src="https://pp.userapi.com/c844521/v844521094/194fe2/ONiGY1vcH_c.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 2</p>
<p dir="auto">Секция C содержит в себе цикл Loop и обработчики событий встроенных кнопок.<br />
Секция D содержит переключатель между языками программирования Blockly или Python. Секция E содержит основное меню. Вы можете получить доступ к форуму с помощью первой кнопки; почитать документация с помощью второй кнопки; с помощью третьей кнопки Вы можете выбрать примеры программ; с помощью четвёртой и пятой кнопок Вы можете отменить или повторить совершённое действие; с помощью шестой кнопки Вы можете открыть менеджер ресурсов (например, чтобы загрузить картинки в память устройства); нажав на седьмую кнопку Вы загрузите во временную память устройства код и запустите его (код после перезагрузки устройства будет удален); с помощью последней кнопки Вы можете открыть продолжение меню. На этом с секцией E закончим. Давайте рассмотрим последнюю секцию F. С помощью первой кнопки (сверху) разместить код Blockly по центру рабочей области; с помощью второй и третьей кнопок Вы можете изменять масштаб; для того, чтобы удалить блок - просто перетащите его на четвертую кнопку (изображение корзины) и блок будет безвозвратно удален.</p>
<h2>Начнём!</h2>
<h3>Blockly (<a href="http://flow.m5stack.com" target="_blank" rel="noopener noreferrer nofollow ugc">UI Flow</a>)</h3>
<p dir="auto">Самое сложное, на мой взгляд, это понять как работать с переменными. Поэтому я постараюсь максимально подробно рассказать об этом в данном уроке. Все остальные элементы языка Blockly просты в применении из-за, что названия говорят о их прямом назначении и лишние слова тут будут не кстати.</p>
<p dir="auto">Итак, давайте начнём! Для того, чтобы создать переменную нажмите на вкладку <strong>Variables</strong> (1) (рисунок 3) в меню блоков, затем нажмите на кнопку <strong>Create variable...</strong> (2).</p>
<p dir="auto"><img src="https://pp.userapi.com/c847018/v847018850/18d1eb/h3yg5KQ5mAQ.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 3</p>
<p dir="auto">Теперь появится окно, которое попросит ввести имя новой переменной. Введите имя (1) (рисунок 3.1), затем нажмите ОК (2).</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320234/a566b/Nh6OqJYtblw.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 3.1</p>
<p dir="auto">Отлично! Теперь переменная создана (рисунок 3.2). Теперь с помощью методов <strong>set</strong> и <strong>change</strong> Вы можете изменять значения всех созданных переменых.</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320234/a5675/I7KBlGLy1Lw.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 3.2</p>
<p dir="auto">Если Вы хотите использовать переменную ты перетащите её с помощью мыши в рабочую область (рисунок 3.3). Вы можете заменить переменную в блоке на другую, созданную ранее, а так же переименовать и удалить.</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320234/a5696/3QAJ3zUvUMk.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 3.3</p>
<p dir="auto">Самое "сложное" на этом закончилось. Теперь Вы умеете работать с переменными в языке Blockly.</p>
<p dir="auto">Теперь давайте перейдём ко следущей вкладке <strong>Math</strong>. Этой вкладке находятся матиматические методы и константы (рисунок 4).</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320096/a4685/KQPwfhSm0IM.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 4</p>
<p dir="auto">Обратите внимание на первый (сверху) блок - он предназначен для хранения числовых значений (хоть целых, хоть дробных). Второй блок позваляет осуществлять базовые математические операции (сложение, вычитание, умножение и деление). Третий блок содержит в себе математические константы (число Пи, число e и другие). Четвёртый блок  позволяет получить остаток от деления. Пятый блок позволяет отпределить тип числа (чётное, нечётное, целое или дробное, положительное или отрицательное и т.п.). Все остальные блоки я описывать не буду, думаю Вам и так понятно что они делают, судя по их названиям.</p>
<p dir="auto">Теперь перейдем ко вкладке под названием <strong>Loops</strong> (рисунок 5). Здесь имеется всевозможный набор циклов. Первый (сверху) цикл выполняет код, расположенный внутри заданное количество раз (например 10). Второй цикл выполняет код до тех пор, пока не выполнится какое-либо условие. Третий будет перебирать список и помещать i-й элемент в переменную i. Четвёртый походит на классический цикл for из языка C. Пятый блок позволяет выйти из цикла принудительно.</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320096/a46d4/HquBGQBk8kA.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 5</p>
<p dir="auto">Переходим к следующей вкладке <strong>Logic</strong>. Не трудно догадаться, что в данной вкладке содержатся элементы связанные с логическими операциями (рисунок 6). Первый блок (сверху) - условие без исключения. Второй - условие с исключением. Третий константа с True или False. Четвёртый - условия (&lt;, &lt;=, &gt;, &gt;= и другие). Пятый - отрицание (NOT), подобно <strong>!</strong> в языке C. Шестой - несуществующее значение NULL. Седьмой - логические операторы. Восьмой блок сравнивает условие и возвращает соответсвующее значение из блока if true или if false.</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a2331/HuEnWPwk3_E.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 6</p>
<p dir="auto">Давайте посмотрим на вкладку <strong>Graphic</strong> (рисунок 7). В этой вкладке есть набор методов для того, чтобы выводит текст и простейшие математические фигуры на дисплей устройства.</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a2376/z-aC1WSia7Y.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 7</p>
<p dir="auto">Если Вы хотите быстро нарисовать смайлик на своем устройстве, то Вам отлично поможет вкладка <strong>Emoji</strong> (рисунок 8).</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a2388/i-WdriJtbds.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 8</p>
<p dir="auto">В будущем, я надеюсь, во вкладке <strong>Timer</strong> (рисунок 9) появятся дополнительные функции для работы со временем, а пока Вы можете использовать блок задержки (время, в течении которого устройство ничего не делает).</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a239b/KiXizsqCh9Y.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 9</p>
<p dir="auto">Будет сложно разбираться в коде, если он не будет состоять из функций. Функции можно создавать во вкладке <strong>Functions</strong> (рисунок 10).</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a23ae/LiVO1C9IaEE.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 10</p>
<p dir="auto">Первый (сверху) блок позволяет создать функцию с именем <strong>dosomething</strong>, которая ничего не возвращает. Второй блок позволяет создать функцию, которая может возвращать значение или переменную. Если Вы хотите добавить аргументы функции, то необходимо нажать на кнопку с изображением шестерёнки, перетащить из левого окна в правое блок <strong>input name</strong> и написать имя аргумента (например: x, y) (рисунок 10.1).</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a23bb/gCJMqzIPV_k.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 10.1</p>
<p dir="auto">Третий блок при выполнении условия возвращает привязанное к нему значение из самой функции.</p>
<p dir="auto">Так, с функциями разобрались. Давайте перейдём ко вкладке <strong>Text</strong> (рисунок 11). Если Вам нужна строковая переменная, то используйте первый блок (сверху). Если Вы хотите перевести все буквы в верхний или нижний регистр, то используйте второй блок. Если Вам необходимо получить букву под определённым порядковым номером, то используйте третий блок. С помощью четвёртого блока можно посчитать количество вхождений первого аргумента в строке. Пятый блок позволяет проверить является ли строка пустой. Узнать длину строки можно с помощью шестого блока. Если необходимо вывести строку на экран, то используйте седьмой блок. С помощью восьмого блока можно заменить подстроку в строке на новую строку. С помощью девятого блока Вы можете переписать строку наоборот. С помощью десятого блока Вы можете убрать пробелы.</p>
<p dir="auto"><img src="https://pp.userapi.com/c851320/v851320311/a23d0/RjD-QabRPRM.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 11</p>
<p dir="auto">Если Вам необходимо запросить ввод текста на экране устройста, то используйте одинадцатый и двенадцатый блоки. С помощью тринадцатого блока Вы можете привести к стровому типу переменные и константы другого типа.</p>
<p dir="auto">Давайте посмотрим на вкладку <strong>Lists</strong>  (рисунок 12). Как известно есть такой "тип данных" в языке Python.</p>
<p dir="auto"><img src="https://pp.userapi.com/c852236/v852236218/a6f18/atcyYOPPKKE.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 12</p>
<p dir="auto">С помощью первого блока (сверху) можно посчитать количество элементов в списке. С помощью второго блока можно узнать - является ли список пустым. С помощью третьего блока Вы можете найти номер элемента встречаемого в списке. С помощью четвёртого блока Вы можете создать пустой список. С помощью пятого блока Вы можете создать список с неограниченным количеством элементов добавленных вручную (рисунок 12.1).</p>
<p dir="auto"><img src="https://pp.userapi.com/c852236/v852236218/a6f41/M7kFWxJ5B1A.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 12.1</p>
<p dir="auto">С помощью шестого блока Вы можете получить/удалить элемент под конкретным номером. С помощью седьмого блока Вы можете получить подсписок в заданных границах из списка. С помощью восьмого блока Вы можете создать список из одинаковых элементов произвольной длины. С помощью девятого блока Вы можете изменить порядок списка на обратный. С помощью десятого блока Вы можете установить значение необходимого элемента списка. С помощью одиннадцатого блока Вы можете создать список из строки или строку из списка согласно заданного разделителя. На этом с данной вкладкой на сегодня всё.</p>
<p dir="auto">Давайте перейдём к очень интересной и последней на сегодня вкладке <strong>Remote</strong>.<br />
С помощью этой вкладки Вы получаете доступ к Вашему устройству из любой точки земного шара, где есть Интернет. Для этого достаточно перетащить в код Вашей программы первый (сверху) блок, после загрузки кода в устройство - на экране отобразится QR-код (рисунок 13.1), если его отсканировать с помощью мобильного телефона или планшета, то откроется Веб-страница с удалёнными элементами управления (блоки от второго до последнего) (рисунок 13.2).</p>
<p dir="auto"><img src="https://pp.userapi.com/c852236/v852236218/a6f22/Y8A1My4LJkg.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 13</p>
<p dir="auto"><img src="https://pp.userapi.com/c852236/v852236493/a86a2/Moeng3xfxJs.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 13.1</p>
<p dir="auto"><img src="https://pp.userapi.com/c847217/v847217871/18a273/4kTHlshdpWI.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 13.2</p>
<p dir="auto">При обращении с Веб-странцы к определённым элементам - будут запускаться соответствующие функции-обработчики.</p>
<h3>C &amp; C++ (<a href="https://www.arduino.cc/en/Main/Software" target="_blank" rel="noopener noreferrer nofollow ugc">Arduino IDE</a>)</h3>
<p dir="auto">Пример ещё не написан ^_^</p>
<h3>Downloads</h3>
<p dir="auto">Увы, тут сегодня ничего нет :)</p>
]]></description><link>https://community.m5stack.com/topic/567/урок-15-1-uiflow-это-просто</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 12:21:48 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/567.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Feb 2019 11:51:56 GMT</pubDate><ttl>60</ttl></channel></rss>