В первых двух обзорах (1, 2) мы познакомили вас с составом и основными возможностями набора NR05 «Цифровая лаборатория» из серии «Азбука электронщика».
Мы неоднократно говорили, что возможности набора не исчерпываются теми опытами и проектами, которые входят обучающее пособие. Возможности набора гораздо шире!
Рассмотрим, как можно реализовать с помощью «Цифровой лаборатории» управление исполнительными устройствами с вашего смартфона или планшета.
Связь между смартфоном и модулем Ардуино, установленном на плате расширения, будем осуществлять по технологии Bluetooth. Конечно, это ограничит возможность беспроводного управления дистанцией около 10 м, но в домашних условиях часто большего и не требуется. На основе такой технологии можно успешно управлять несложными роботами или устройствами домашней автоматики, а телефон или смартфон послужат бесплатным универсальным пультом управления, который с легкостью можно перепрограммировать для наилучшего решения поставленной задачи.
В интернете можно найти несколько проектов, которые позволяют связать Ардуино с телефоном по Bluetooth, и такие проекты, безусловно, помогут освоить принцип такой связи, но основным их недостатком является невозможность приспособить функционал программы управления и ее внешний вид под конкретные нужды пользователя.
Мы пойдем по пути ненамного более сложному, но более универсальному – будем писать программы для телефона и для Ардуино самостоятельно. Это поможет вам понять принцип написания таких приложений и использовать его в своих разработках.
Для начала поясним, на каком принципе основана связь, которую мы будем использовать. Как известно, когда модуль Ардуино подключается к компьютеру, на компьютере конфигурируется виртуальный последовательный порт – COM-порт. Он используется для заливки скетчей в Ардуино, а также для обмена информацией между компьютером и микроконтроллером Ардуино. Также на плате Ардуино имеется два контакта, совмещенные с пинами D1 и D0 и обозначаемые RX и TX – соответственно передача (Receive) и прием (Transmit) стандартного интерфейса UART.
Подключив к этим контактам переходник Bluetooth-UART (в нашем распоряжении оказался модуль HC-05, он не входит в состав набора) мы получим аппаратный канал связи между устройством, подключенным по Bluetooth к переходнику, и Ардуино.
Таким образом, записывая в последовательный порт информацию из одного устройства и считывая ее другим (это можно делать в двух направлениях), мы можем организовать обмен информацией между устройствами. Скорость такого обмена между Ардуино и смартфоном в случае применения модуля HC-05 составит 57600 бод.
В качестве исполнительных элементов для наглядности задействуем RGB-светодиод и сервопривод – и тот и другой управляются сигналами ШИМ.
Приведем схему соединений компонентов проекта:
Для управления исполнительными элементами будем передавать из смартфона некую букву, которая определяет, какой элементу предназначена команда, и цифру, которая соответствует параметру команды. Параметром может быть цифра, определяющая надо ли включить или выключить какой-либо исполнительный элемент, или цифра, определяющая параметр ШИМ.
Приведем текст программы для Ардуино. Программа принимает данные из адаптера Bluetooth, расшифровывает их и выполняет необходимые действия: включает или выключает светодиод, регулирует его яркость или угол поворота вала сервопривода.
Текст снабжен достаточным числом комментариев для понимания логики работы программы:
Теперь займемся программой для смартфона, которая должна передавать команду с параметром. Воспользуемся для этого возможности проекта MIT App Inventor.
MIT App Inventor — это среда программирования, разработанная в Массачусетском Технологическом Институте (MIT). Он служит для разработки приложений для мобильных устройств (смартфонов и планшетных компьютеров), работающих на операционной системе Android.
Это не совсем язык программирования в общепринятом смысле, при его использовании не надо писать текстовый код в виде строчек. Программа формируется в виде изображенных на экране блоков, которые просто перетаскиваются и складываются, как пазлы. Если блоки подходят друг к другу по логике программы, они «слипаются», если не подходят, то их невозможно соединить. Изначально такой способ программирования разрабатывался для обучения школьников, поэтому он довольно прост для освоения. Конечно, как и в каждом языке в нем есть свои тонкости и приемы, но на сайте есть достаточно информации и примеров для освоения языка. Много программ выложено на сайте в свободном доступе.
Для того, чтобы воспользоваться средой программирования App Inventor, доступной по адресу ai2.appinventor.mit.edu, необходимо иметь аккаунт Google, с помощью которого происходит авторизация на сайте проекта. Создание программы производится в любом браузере. Компьютер, на котором работает этот браузер, должен быть постоянно подключен к интернету. Смартфон или планшет, на который будет устанавливаться созданная с помощью App Inventor программа, должен иметь версию OC Android не ниже 4.0.
В браузере вы создаете дизайн (внешний вид) и логику работы программы в виде блоков, там же готовый проект компилируется в исполняемый файл с расширением apk. Этот файл несколькими способами может быть загружен на мобильное устройство и запущен на нем. Пожалуй, самый удобный из этих способов заключается в установке на мобильное устройство приложения «MIT AI2 Companion» (оно есть в Play Market). App Inventor формирует QR-код, содержащий ссылку на созданное вами приложение, а AI2 Companion считывает и устанавливает (или обновляет) его. Вы даже можете нарисовать и загрузить свою иконку для запуска своего приложения. Таким образом, App Inventor позволяет создавать вполне работоспособные и наглядные приложения для Андроид. Пусть их код не оптимален, но удобство, простота и скорость создания таких приложений во многих случаях вполне окупают этот недостаток.
Приложение, которое работает в нашем проекте, выложено в галерею MIT AI2 Appiventor под именем BToothHC05.
Приложение позволяет найти устройство Bluetooth, подключиться к нему, оно формирует команды с параметрами и отсылает их подсоединенному устройству, считывает данные с устройства и отображает номер нажатой на плате расширения кнопки.
Дизайн экрана выглядит в соответствии со следующей картинкой:
Здесь есть элементы (зеленые квадраты, символизирующие вставленные изображения), не несущие функционала, а служащие разделителями для улучшения внешнего вида.
Если вы зашли на сайт AppInventor и находитесь в среде программирования в режиме Designer, то при щелчке правой кнопкой мыши на соответствующем элементе дизайна вы увидите справа его свойства. Перейдя в режим Blocks можно видеть все блоки разрабатываемого приложения.
Почти все блоки, по сути, представляют собой обработчики событий: нажатие кнопки на сенсорном экране, сдвиг ползунка слайдера, срабатывание таймера, изменение наклона телефона (да, в App Inventor можно задействовать практически все датчики мобильного устройства!).
Рассмотрим функциональное назначение каждого блока.
В этом блоке при нажатии на экранную кнопку Connect/Disconnect (событие Button4Connect.Click) происходит отсоединение (call BluetoothClient1.Disconnect) Bluetooth устройства, если оно уже подсоединено (BluetoothClient1.IsConnected), изменение текста на кнопке на”Disconnected” и ее цвета на серый, или вызов списка возможных устройств для подсоединения (ListPicker1.Open), если соединения нет. Как видно, блок вполне читаем с точки зрения даже начинающего программиста!
В этих трех блоках (сверху вниз):
— назначаем глобальную переменную (ее будут «видеть» все блоки) switch1 для переключения режимов работы: слайдер или наклон;
— при вызове списка устройств ListPicker1 для подсоединения требуем отображать их адреса и имена;
— при выборе из списка ListPicker1 устройства подсоединиться к нему, поменять цвет кнопки и отобразить надпись Connected to ИмяУстройства. ИмяУстройства формируется из длинной символьной последовательности; берется 8 символов начиная, с 18-го.
Изображенные выше три блока посылают через установленное соединение символы «P5», «P9» и «P6», которые должны включить или выключить соответственно красный, зеленый или синий цвет светодиода.
Когда слайдер Slider1, управляющий яркостью красного цвета светодиода сдвигается, этот блок посылает символ «S» и цифры, соответствующие положению слайдера.
Когда Slider2, который управляет сервоприводом сдвигается, если соответствующий режим включен (switch1 = 0), посылаем символ M и позицию слайдера.
Если включен режим работы от датчика наклона, блок посылает M и угол наклона + 90 градусов для управления сервоприводом.
Этот блок переключает режимы работы сервопривода от слайдера или датчика наклона и соответственно меняет надпись на кнопке (Text) и ее цвет (BackgroundColor).
Этот два блока срабатывают по событию таймера. Первый блок (Clock1) каждые 0,1 секунды (этот интервал установлен в свойствах таймера Clock1) проверяет наличие данных о том, была ли нажата кнопка на плате расширения. Если кнопка была нажата, то в течение 1 секунды (второй блок — Clock2) информация о номере нажатой кнопки отображается на экране смартфона.
Посмотрим теперь на видео, как реально происходит управление светодиодом и сервоприводом от смартфона в соответствии с нашими программами.
Таким же образом можно управлять достаточно большим числом подсоединенных к Ардуино исполнительных устройств. Это не требует какой-то огромной работы программиста при использовании AppInventor, да и программирование Ардуино достаточно просто и наглядно. Вы можете легко добавить или убрать ненужные программные блоки и получить необходимый вам функционал.
Как видно из этого материала, плата расширения из набора «Цифровая лаборатория» позволяет достаточно удобно и наглядно пользоваться дополнительными модулями Ардуино.
Приложение.
Начало работы в среде программирования MIT AppInventor.
Как мы уже писали, для работы в проекте AppInventor необходим аккаунт Google. Если у вас имеется смартфон на Андроиде, то такой аккаунт у вас, скорее всего, уже есть. Если же нет, то его можно получить, зайдя на сайт Google по следующей ссылке.
Далее заходим на сайт AppInventor и по ссылке Create Apps!, которая находится в правом верхнем углу главной страницы сайта, переходим на сайт среды программирования.
В качестве иллюстрации ниже приведена ссылка на небольшое видео, демонстрирующее создание простейшей программы, которая выводит текст при нажатии на кнопку, сформированную на сенсорном экране смартфона.
Мы неоднократно говорили, что возможности набора не исчерпываются теми опытами и проектами, которые входят обучающее пособие. Возможности набора гораздо шире!
Рассмотрим, как можно реализовать с помощью «Цифровой лаборатории» управление исполнительными устройствами с вашего смартфона или планшета.
Связь между смартфоном и модулем Ардуино, установленном на плате расширения, будем осуществлять по технологии Bluetooth. Конечно, это ограничит возможность беспроводного управления дистанцией около 10 м, но в домашних условиях часто большего и не требуется. На основе такой технологии можно успешно управлять несложными роботами или устройствами домашней автоматики, а телефон или смартфон послужат бесплатным универсальным пультом управления, который с легкостью можно перепрограммировать для наилучшего решения поставленной задачи.
В интернете можно найти несколько проектов, которые позволяют связать Ардуино с телефоном по Bluetooth, и такие проекты, безусловно, помогут освоить принцип такой связи, но основным их недостатком является невозможность приспособить функционал программы управления и ее внешний вид под конкретные нужды пользователя.
Мы пойдем по пути ненамного более сложному, но более универсальному – будем писать программы для телефона и для Ардуино самостоятельно. Это поможет вам понять принцип написания таких приложений и использовать его в своих разработках.
Для начала поясним, на каком принципе основана связь, которую мы будем использовать. Как известно, когда модуль Ардуино подключается к компьютеру, на компьютере конфигурируется виртуальный последовательный порт – COM-порт. Он используется для заливки скетчей в Ардуино, а также для обмена информацией между компьютером и микроконтроллером Ардуино. Также на плате Ардуино имеется два контакта, совмещенные с пинами D1 и D0 и обозначаемые RX и TX – соответственно передача (Receive) и прием (Transmit) стандартного интерфейса UART.
Подключив к этим контактам переходник Bluetooth-UART (в нашем распоряжении оказался модуль HC-05, он не входит в состав набора) мы получим аппаратный канал связи между устройством, подключенным по Bluetooth к переходнику, и Ардуино.
Таким образом, записывая в последовательный порт информацию из одного устройства и считывая ее другим (это можно делать в двух направлениях), мы можем организовать обмен информацией между устройствами. Скорость такого обмена между Ардуино и смартфоном в случае применения модуля HC-05 составит 57600 бод.
В качестве исполнительных элементов для наглядности задействуем RGB-светодиод и сервопривод – и тот и другой управляются сигналами ШИМ.
Приведем схему соединений компонентов проекта:
Для управления исполнительными элементами будем передавать из смартфона некую букву, которая определяет, какой элементу предназначена команда, и цифру, которая соответствует параметру команды. Параметром может быть цифра, определяющая надо ли включить или выключить какой-либо исполнительный элемент, или цифра, определяющая параметр ШИМ.
Приведем текст программы для Ардуино. Программа принимает данные из адаптера Bluetooth, расшифровывает их и выполняет необходимые действия: включает или выключает светодиод, регулирует его яркость или угол поворота вала сервопривода.
Текст снабжен достаточным числом комментариев для понимания логики работы программы:
Спойлер
// подключаем библиотеки сервопривода и LCD-индикатора
#include <Servo.h>
#include <LiquidCrystal.h>
// задаем 5 значений для определения номера нажатой кнопки
// в функции get_key
#define NUM_KEYS 5
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};
// создаем экземпляр объекта LCD-индикатора
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
// создаем экземпляр объекта сервопривода
Servo servo;
int btValue; // переменная для хранения полученных из BT-адаптера данных
char command; // команда, поступающая из COM-порта
void setup() {
// открываем COM-порт bluetooth, очищаем его, устанавливаем тайм-аут
Serial.begin(57600);
Serial.flush();
Serial.setTimeout(4);
// иницилиазируем LCD (16 символов, 2 строки)
lcd.begin(16, 2);
lcd.clear();
lcd.print(«Master Kit-READY»);
delay(2000);
lcd.clear();
// назначаем 3-й цифровой пин для сервопривода
servo.attach(3);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
void loop() {
int key = get_key(); // проверяем, нажата ли кнопка на плате и определяем ее номер
// если кнопка нажата, отправляем ее номер в COM-порт
// этот номер будем считывать смартфоном
if (key > 0){
Serial.print(key);
delay(500);
}
// если есть данные, пришедшие по bluetooth, запоминаем их
if (Serial.available() > 0) {
// читаем первый байт из порта (команду)
command = Serial.read();
// читаем цифры из порта (параметр команды)
btValue = Serial.parseInt();
// отображаем на LCD данные, принятые по bluetooth
lcd.setCursor(0,0);
lcd.print(command);
lcd.print(' ');
lcd.print(btValue);
lcd.print(" ");
delay(10);
switch (command) {
case 'P': // если принята команда P, то переключаем цвета светодиода
pinSwitch(btValue);
break;
case 'S': // S — cлайдер 1 (ШИМ красный цвет)
pwm5(btValue);
break;
case 'M': // М — слайдер 2 (ШИМ сервопривод)
servo3(btValue);
break;
}
}
}
// функция изменяет состояние цифрового пина на противоположное
void pinSwitch(int Pin){
digitalWrite(Pin, !digitalRead(Pin));
}
// функция изменяет ШИМ на выводе 5 (красный цвет светодиода)
void pwm5(int pwmValue){
analogWrite(5, pwmValue);
}
// функция изменяет ШИМ на выводе 3
void servo3(int angleValue){
int angle = map(angleValue, 0, 180, 5, 180);
servo.write(angle);
}
// функция возвращает номер нажатой кнопки на плате
int get_key()
{
int input = analogRead(A6);
int k;
for(k = 0; k < NUM_KEYS; k++)
if(input < adcKeyVal[k])
return k + 1;
return 0;
}
#include <Servo.h>
#include <LiquidCrystal.h>
// задаем 5 значений для определения номера нажатой кнопки
// в функции get_key
#define NUM_KEYS 5
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};
// создаем экземпляр объекта LCD-индикатора
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
// создаем экземпляр объекта сервопривода
Servo servo;
int btValue; // переменная для хранения полученных из BT-адаптера данных
char command; // команда, поступающая из COM-порта
void setup() {
// открываем COM-порт bluetooth, очищаем его, устанавливаем тайм-аут
Serial.begin(57600);
Serial.flush();
Serial.setTimeout(4);
// иницилиазируем LCD (16 символов, 2 строки)
lcd.begin(16, 2);
lcd.clear();
lcd.print(«Master Kit-READY»);
delay(2000);
lcd.clear();
// назначаем 3-й цифровой пин для сервопривода
servo.attach(3);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
void loop() {
int key = get_key(); // проверяем, нажата ли кнопка на плате и определяем ее номер
// если кнопка нажата, отправляем ее номер в COM-порт
// этот номер будем считывать смартфоном
if (key > 0){
Serial.print(key);
delay(500);
}
// если есть данные, пришедшие по bluetooth, запоминаем их
if (Serial.available() > 0) {
// читаем первый байт из порта (команду)
command = Serial.read();
// читаем цифры из порта (параметр команды)
btValue = Serial.parseInt();
// отображаем на LCD данные, принятые по bluetooth
lcd.setCursor(0,0);
lcd.print(command);
lcd.print(' ');
lcd.print(btValue);
lcd.print(" ");
delay(10);
switch (command) {
case 'P': // если принята команда P, то переключаем цвета светодиода
pinSwitch(btValue);
break;
case 'S': // S — cлайдер 1 (ШИМ красный цвет)
pwm5(btValue);
break;
case 'M': // М — слайдер 2 (ШИМ сервопривод)
servo3(btValue);
break;
}
}
}
// функция изменяет состояние цифрового пина на противоположное
void pinSwitch(int Pin){
digitalWrite(Pin, !digitalRead(Pin));
}
// функция изменяет ШИМ на выводе 5 (красный цвет светодиода)
void pwm5(int pwmValue){
analogWrite(5, pwmValue);
}
// функция изменяет ШИМ на выводе 3
void servo3(int angleValue){
int angle = map(angleValue, 0, 180, 5, 180);
servo.write(angle);
}
// функция возвращает номер нажатой кнопки на плате
int get_key()
{
int input = analogRead(A6);
int k;
for(k = 0; k < NUM_KEYS; k++)
if(input < adcKeyVal[k])
return k + 1;
return 0;
}
Теперь займемся программой для смартфона, которая должна передавать команду с параметром. Воспользуемся для этого возможности проекта MIT App Inventor.
MIT App Inventor — это среда программирования, разработанная в Массачусетском Технологическом Институте (MIT). Он служит для разработки приложений для мобильных устройств (смартфонов и планшетных компьютеров), работающих на операционной системе Android.
Это не совсем язык программирования в общепринятом смысле, при его использовании не надо писать текстовый код в виде строчек. Программа формируется в виде изображенных на экране блоков, которые просто перетаскиваются и складываются, как пазлы. Если блоки подходят друг к другу по логике программы, они «слипаются», если не подходят, то их невозможно соединить. Изначально такой способ программирования разрабатывался для обучения школьников, поэтому он довольно прост для освоения. Конечно, как и в каждом языке в нем есть свои тонкости и приемы, но на сайте есть достаточно информации и примеров для освоения языка. Много программ выложено на сайте в свободном доступе.
Для того, чтобы воспользоваться средой программирования App Inventor, доступной по адресу ai2.appinventor.mit.edu, необходимо иметь аккаунт Google, с помощью которого происходит авторизация на сайте проекта. Создание программы производится в любом браузере. Компьютер, на котором работает этот браузер, должен быть постоянно подключен к интернету. Смартфон или планшет, на который будет устанавливаться созданная с помощью App Inventor программа, должен иметь версию OC Android не ниже 4.0.
В браузере вы создаете дизайн (внешний вид) и логику работы программы в виде блоков, там же готовый проект компилируется в исполняемый файл с расширением apk. Этот файл несколькими способами может быть загружен на мобильное устройство и запущен на нем. Пожалуй, самый удобный из этих способов заключается в установке на мобильное устройство приложения «MIT AI2 Companion» (оно есть в Play Market). App Inventor формирует QR-код, содержащий ссылку на созданное вами приложение, а AI2 Companion считывает и устанавливает (или обновляет) его. Вы даже можете нарисовать и загрузить свою иконку для запуска своего приложения. Таким образом, App Inventor позволяет создавать вполне работоспособные и наглядные приложения для Андроид. Пусть их код не оптимален, но удобство, простота и скорость создания таких приложений во многих случаях вполне окупают этот недостаток.
Приложение, которое работает в нашем проекте, выложено в галерею MIT AI2 Appiventor под именем BToothHC05.
Приложение позволяет найти устройство Bluetooth, подключиться к нему, оно формирует команды с параметрами и отсылает их подсоединенному устройству, считывает данные с устройства и отображает номер нажатой на плате расширения кнопки.
Дизайн экрана выглядит в соответствии со следующей картинкой:
Здесь есть элементы (зеленые квадраты, символизирующие вставленные изображения), не несущие функционала, а служащие разделителями для улучшения внешнего вида.
Если вы зашли на сайт AppInventor и находитесь в среде программирования в режиме Designer, то при щелчке правой кнопкой мыши на соответствующем элементе дизайна вы увидите справа его свойства. Перейдя в режим Blocks можно видеть все блоки разрабатываемого приложения.
Почти все блоки, по сути, представляют собой обработчики событий: нажатие кнопки на сенсорном экране, сдвиг ползунка слайдера, срабатывание таймера, изменение наклона телефона (да, в App Inventor можно задействовать практически все датчики мобильного устройства!).
Рассмотрим функциональное назначение каждого блока.
В этом блоке при нажатии на экранную кнопку Connect/Disconnect (событие Button4Connect.Click) происходит отсоединение (call BluetoothClient1.Disconnect) Bluetooth устройства, если оно уже подсоединено (BluetoothClient1.IsConnected), изменение текста на кнопке на”Disconnected” и ее цвета на серый, или вызов списка возможных устройств для подсоединения (ListPicker1.Open), если соединения нет. Как видно, блок вполне читаем с точки зрения даже начинающего программиста!
В этих трех блоках (сверху вниз):
— назначаем глобальную переменную (ее будут «видеть» все блоки) switch1 для переключения режимов работы: слайдер или наклон;
— при вызове списка устройств ListPicker1 для подсоединения требуем отображать их адреса и имена;
— при выборе из списка ListPicker1 устройства подсоединиться к нему, поменять цвет кнопки и отобразить надпись Connected to ИмяУстройства. ИмяУстройства формируется из длинной символьной последовательности; берется 8 символов начиная, с 18-го.
Изображенные выше три блока посылают через установленное соединение символы «P5», «P9» и «P6», которые должны включить или выключить соответственно красный, зеленый или синий цвет светодиода.
Когда слайдер Slider1, управляющий яркостью красного цвета светодиода сдвигается, этот блок посылает символ «S» и цифры, соответствующие положению слайдера.
Когда Slider2, который управляет сервоприводом сдвигается, если соответствующий режим включен (switch1 = 0), посылаем символ M и позицию слайдера.
Если включен режим работы от датчика наклона, блок посылает M и угол наклона + 90 градусов для управления сервоприводом.
Этот блок переключает режимы работы сервопривода от слайдера или датчика наклона и соответственно меняет надпись на кнопке (Text) и ее цвет (BackgroundColor).
Этот два блока срабатывают по событию таймера. Первый блок (Clock1) каждые 0,1 секунды (этот интервал установлен в свойствах таймера Clock1) проверяет наличие данных о том, была ли нажата кнопка на плате расширения. Если кнопка была нажата, то в течение 1 секунды (второй блок — Clock2) информация о номере нажатой кнопки отображается на экране смартфона.
Посмотрим теперь на видео, как реально происходит управление светодиодом и сервоприводом от смартфона в соответствии с нашими программами.
Таким же образом можно управлять достаточно большим числом подсоединенных к Ардуино исполнительных устройств. Это не требует какой-то огромной работы программиста при использовании AppInventor, да и программирование Ардуино достаточно просто и наглядно. Вы можете легко добавить или убрать ненужные программные блоки и получить необходимый вам функционал.
Как видно из этого материала, плата расширения из набора «Цифровая лаборатория» позволяет достаточно удобно и наглядно пользоваться дополнительными модулями Ардуино.
Приложение.
Начало работы в среде программирования MIT AppInventor.
Как мы уже писали, для работы в проекте AppInventor необходим аккаунт Google. Если у вас имеется смартфон на Андроиде, то такой аккаунт у вас, скорее всего, уже есть. Если же нет, то его можно получить, зайдя на сайт Google по следующей ссылке.
Далее заходим на сайт AppInventor и по ссылке Create Apps!, которая находится в правом верхнем углу главной страницы сайта, переходим на сайт среды программирования.
В качестве иллюстрации ниже приведена ссылка на небольшое видео, демонстрирующее создание простейшей программы, которая выводит текст при нажатии на кнопку, сформированную на сенсорном экране смартфона.