Меню

esp8266 как подключить к телефону

ESP8266 Blynk

ESP8266 — Управляем со смартфона через Blynk

Еэспэшники — вливайтесь в ряды блинкеров!
Сегодня мы за 5 минут настроим управление ESP8266 с вашего смартфона (iOS или Android) с помощью нового облачного сервиса Blink. Видео и подробности под катом.


Установите приложение Blynk на смартфон

AppStore androidstore

Зарегистрируйтесь в приложении и создайте новый проект.

blynk new project

Создание нового проекта в Blynk

Введите название проекта, например ESP8266. В поле Hardware Model выберите ESP8266. (надеюсь, что вы заметите впечатляющий список поддерживаемого оборудования) Автоматически сгенерированный Auth Token отправьте на свой почтовый ящик.

blynk project

После нажатия на кнопку Create вам станет доступно пустое поле для проектирования UI вашей панели управления ESP8266.

blynk empty project

Пустой проект Blynk

Жмете на плюсик вверху справа — появится панель инструментов Widget Box для добавления виджетов на вашу панель управления. Стоит заметить, что список виджетов еще будет пополняться.

blynk widgets

Для пробы выберем тип виджета Button — этот виджет сразу добавится на вашу панель. Отредактируйте его одним прикосновением. Название можно не заполнять, чуть правее можно выбрать цвет индикатора, в поле OUTPUT PIN выберите справа Digital, а слева любой свободный пин GPIO. Ниже переключите тип кнопки на Switch.

На моей отладочной плате к светодиодам разведено 10 GPIO — я все их подключу к панели Blynk.

Все, интерфейс готов, пока отложите смартфон в сторонку.

Если вы еще не знакомы с Arduino IDE для ESP8266 — почитайте здесь и здесь. Установите Arduino IDE, как описано здесь.

Далее установите библиотеку Blynk в Arduino IDE. В этом вам поможет официальная инструкция. Также можете взять библиотеку самую последнюю версию прямо из репозитария и установить вручную. Далее выбираем пример ESP8266_Standalone и прописываем в нем Auth Token, который мы получили по почте, SSID и пароль вашей WiFi сети. Компилируем и заливаем скетч в ESP8266.

ESP8266 Blynk

Вот, собственно, и все.

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

Замечания

1. Стоит отметить, что еще есть возможность использовать ESP8266 в качестве WiFi шилда для ардуино.

2. Облачный сервер Blynk — open source и может быть развернут в вашей локальной сети

P.S. Blynk на Kickstarter неплохо отработал — собрал почти 50k

Не могу не сообщить, что создал этот суперклассный дизайн интерфейса Vitalii Kramar

Источник

Управляем ESP8266 с компьютера и телефона

0d24fc46a7ba93e750eff4e5882f7e65

В прошлых статьях, про создание гирлянды с помощью ESP8266, для того, что бы управлять нашим устройством мы подключались к его собственной Wi-Fi сети. Это удобно, в том случае, когда у нас одно устройство, причём не требующее подключение к Интернету. Но чаще всего, при создании устройств для т.н. Умного дома, их подключают к домашнему Wi-Fi и управляют ими централизованно.

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

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

Управление через веб-сайт с помощью JS

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

Для того, что бы отправить запрос на сервер с помощью JS, можно воспользоваться XMLHttpRequest. С его помощью можно отправить GET или POST запрос на сервер с известным IP адресом.

В случае, когда у нас есть несколько IP-адресов, функции которые необходимо использовать, могут выглядеть так:

Управление с помощью скриптов

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

466ce996e0f75947bad131e58687735e

Источник

Программирование ESP8266 в среде Arduino IDE

Хотите быстро создать интерфейс управления ESP8266 на телефоне Android.

25 мыслей о “ESP8266 и RemoteXY для управления с мобильного приложения”

Бывают ли у вас проблемы с зависанием модуля в уже отлаженной системе, которые решаются только ручным нажатием на кнопку reset? Если вы нашли какой то программный способ решения проблемы, поделитесь пожалуйста)

Пока не встречал. У меня SMART ROOM месяцами работает без сбоев, хотя для этой задачи это не критично.

У меня тоже есть такая проблема, только модуль не может подключится к точке доступа а сам остается в рабочем состоянии.

в качестве среды создания приложений рассматривали ли вы прогу app inventor? оно бесплатное, множество примеров есть в интернете, а также и примеры с esp8266 https://habrahabr.ru/company/masterkit/blog/258469/

Конечно можно написать приложение в app inventor! Как то, мне не требуется писать приложения на android. Поэтому я его не использую. То что мне действительно нужно в нем написать не возможно.

А что не возможно написать?

Нужно приложение которое будет перехватывать текст после обращения ОК Googl и отправлять GET запрос внутри которого будет весь перехваченный текст.

Привет, возможно вы имели ввиду управление голосом в приложении андроид? посмотрите это видео до конца
https://www.youtube.com/watch?v=IOiMe2aCCLk

Есть такое приложение, только работает с Алисой и Blynk, причём наше Домовёнок Кузя (Alexstar), все еспешки включает Алиса.

В ремонте можно отправить GET запрос? Если да, то можно будет управлять устройствами с помощью голоса через Алису, Домовёнок Кузя как раз это и делает.

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

Не совсем понимаю с какой страницы?

С web страницы SMARTROOM.
К примеру так это выглядит для отправки значений
Web страница:

Люстра
Arduino:
// Включаем реле с web страницы /pult.htm
void handle_Reley() <
int state = HTTP.arg(“state”).toInt();
Reley(state);
Serial.println(state);
handleFileRead(“/pult.htm”);
>
// Включаем реле
void Reley(int state) <
switch (state) <
case 6:
digitalWrite(rele1, LOW);
break;
А как будет выглядеть это для прима значений на web страницу?

Не прикрепилось почему то содержимое web страницы, там был код с раздела pult.htm

Постучитесь ко мне в скайп.

Hi, Иван вам Сергей ответил? ? возможно вы имели ввиду при управлении с веб-страницы отправлять коды управления портами и также чтобы в веб странице был заложен код считывать и отображать состояние GPIO и выводить данные на веб? В ардуинке для w5100&28j60 я разобрался, а вот с esp8266 интересуюсь.

Как управлять портами с веб страницы было показано в скетче AJAX — ТЕХНОЛОГИЯ ОБРАЩЕНИЯ К СЕРВЕРУ БЕЗ ПЕРЕЗАГРУЗКИ СТРАНИЦЫ.

Просмотрел, спасибо! Но Иван (я так понял) имел ввиду: при первом обращении к странице на ней НЕТ информации о состоянии портов. Только по нажатию кнопки мы потом считываем состояние(и так каждой), а если GPIO уже вкл или выкл? и если это не в прямой видимости, а за несколько км? нужно для контроля использовать сразу считывание состояния порта и затем в каждом цикле проверять и светить на веб:
s += (val2)?”1″:”0″; – например порт GPIO2

Нашел решение которое меня устраивает, с помощью библиотеки arest можно просматривать состояние выходов
/
https://github.com/marcoschwartz/aREST
/
/digital/8 reads value from pin number 8 in JSON format (note that for compatibility reasons, /digital/8/r produces the same result)

Может быть у кого то имеется пример того, как передавать данные с одного модуля esp8266 на другой или кто то знает где есть такой пример?

смотрите передача данных на esp по UDP протоколу. но у меня он что то заглючил, нестабильно работал, не пойму почему. Был бы лагодарен админу за пускай простой но более менее протестированный пример стабильного обмена данными по UDP между двумя ESP, один из них AP другой Client

привет я новичек и немогу понять как компилятор может ругаться на созданный автоматом код

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB
#include
#include

// настройки соединения
#define REMOTEXY_WIFI_SSID “HomeNetwork2.4”
#define REMOTEXY_WIFI_PASSWORD “cmst9300at680”
#define REMOTEXY_SERVER_PORT 6377

// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
< 255,2,0,0,0,23,0,8,13,0,
1,0,34,26,12,12,2,31,88,0,
1,0,49,26,12,12,2,31,88,0 >;

// структура определяет все переменные вашего интерфейса управления
struct <

// input variable
uint8_t button_1; // =1 если кнопка нажата, иначе =0
uint8_t button_2; // =1 если кнопка нажата, иначе =0

// other variable
uint8_t connect_flag; // =1 if wire connected, else =0

> RemoteXY;
#pragma pack(pop)
#define PIN_BUTTON_1 D4
#define PIN_BUTTON_2 D5

void setup()
<
RemoteXY_Init ();

pinMode (PIN_BUTTON_1, OUTPUT);
pinMode (PIN_BUTTON_2, OUTPUT);

// TODO you setup code

void loop()
<
RemoteXY_Handler ();

digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);

// TODO you loop code
// используйте структуру RemoteXY для передачи данных

Arduino: 1.8.10 (Windows 8.1), Плата:”Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:

470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200″

project:25:11: error: expected ‘;’ at end of member declaration

uint8_t pin button_1; // =1 если кнопка нажата, иначе =0

project:25:15: error: ‘button_1’ does not name a type

uint8_t pin button_1; // =1 если кнопка нажата, иначе =0

project:26:11: error: expected ‘;’ at end of member declaration

uint8_t pin button_2; // =1 если кнопка нажата, иначе =0

project:26:11: error: redeclaration of ‘uint8_t ::pin’

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino:25:11: note: previous declaration ‘uint8_t ::pin’

uint8_t pin button_1; // =1 если кнопка нажата, иначе =0

project:26:15: error: ‘button_2’ does not name a type

uint8_t pin button_2; // =1 если кнопка нажата, иначе =0

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino: In function ‘void setup()’:

project:33:22: error: ‘D4’ was not declared in this scope

#define PIN_BUTTON_1 D4

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino:41:12: note: in expansion of macro ‘PIN_BUTTON_1’

pinMode (PIN_BUTTON_1, OUTPUT);

project:34:22: error: ‘D5’ was not declared in this scope

#define PIN_BUTTON_2 D5

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino:42:12: note: in expansion of macro ‘PIN_BUTTON_2’

pinMode (PIN_BUTTON_2, OUTPUT);

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino: In function ‘void loop()’:

project:33:22: error: ‘D4’ was not declared in this scope

#define PIN_BUTTON_1 D4

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino:52:16: note: in expansion of macro ‘PIN_BUTTON_1’

project:52:40: error: ‘struct’ has no member named ‘button_1’

project:34:22: error: ‘D5’ was not declared in this scope

#define PIN_BUTTON_2 D5

C:\Users\Anton\Downloads\project-2019-12-15-17-20-06\project\project.ino:53:16: note: in expansion of macro ‘PIN_BUTTON_2’

project:53:40: error: ‘struct’ has no member named ‘button_2’

Несколько библиотек найдено для “RemoteXY.h”
Используется: C:\Users\Anton\Documents\Arduino\libraries\RemoteXY
Несколько библиотек найдено для “ESP8266WiFi.h”
Используется: C:\Users\Anton\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.2\libraries\ESP8266WiFi
exit status 1
expected ‘;’ at end of member declaration

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

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

Источник

Esp8266 управление через интернет по протоколу MQTT

9650771d6b1c4668af4e40ab3b2a1be6
Всем привет! В этой статье будет подробно рассказано и показано как буквально за 20 минут свободного времени настроить дистанционное управление модулем esp8266 с помощью приложения на Android по протоколу MQTT.

Идея дистанционного управления и мониторинга всегда будоражила умы увлеченных в электронике и программировании людей. Ведь возможность в любой момент времени получить или отправить нужные данные, не зависимо от своего местоположения, дает широкие возможности. В своих прошлых статьях ( Статья 1 и Статья 2) я пытался рассмотреть несколько доступных и относительно простых вариантах реализации дистанционного управления микроконтроллерами через интернет. Однако время и весь мир не стоит на месте – прогресс продолжает свое неумолимое движение вперед. За это небольшое время приобрел широкую популярность модуль esp8266 который благодаря низкой цене и встроенному wi-fi стал одним из основных составляющих «Умного дома».

На данный момент MQTT является передовым и наиболее популярным протоколом передачи данных между отдельными устройствами в рамках систем «Умного дома». Он обладает рядом преимуществ по отношению к другим протоколам:
— низкое потребление трафика;
— соединение между клиентом и сервером всегда открыто;
— не нагружает интернет канал;
— отсутствие задержек в передаче данных;
— удобная система подписок на топики;
Всё это дает возможность мониторинга и управления в режиме реального времени. Однако MQTT требует наличие своего собственного сервера, который выполняет роль посредника между клиентами сети. Тут есть два выхода либо создавать свой сервер либо использовать сторонние сервисы.

Описываемая система управления состоит из двух основных частей: сервера MQTT (он как правило один) и клиентов, которых может быть довольно много. В нашем случае в качестве клиентов будут выступать приложение на Android и сам модуль esp8266.

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

В нашем случае мы будем использовать крайне удобный сервис www.cloudmqtt.com у которого есть бесплатный тарифный план (Cute Cat), который полностью покроет потребности для реализации небольшой собственной системы «умного дома».
10a4cc9a9f2d4bf2b6d7f5992d1659b1
Пройдём регистрацию на сайте и получаем необходимые данные для доступа к серверу. При настройке клиентов необходимо использовать обычный Порт ( без SSL и TLS).
d8d504e220584810946c7a098a252f63

Приложение на Android.

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

Приложение называется IoT MQTT Dashboard и представляет собой готовый mqtt клиент с небольшим количеством очень удобных виджетов. Более подробно о работе с приложением можно посмотреть на видео.

Модуль прошивается в среде программирования Arduino, однако хочу заметить что у модуля проблемы с прошивкой в последних версиях Arduino, поэтому рекомендую использовать версию 1.6.4.
Для примера к esp8266 подключены светодиод (5 пин) и датчик температуры ds18b20 (2 пин).
Так как для управления светодиода необходимо получать данные, то esp после подключения должно оформить подписку на соответствующий топик «test/led» иначе все отправленные данные пройдут мимо нашего микроконтроллера.
Для отправки данных температуры подписка не нужно, но при передаче значений температуры необходимо указывать топик в который эти данные пойдут.

Ниже приведен скетч с подробными комментариями.

// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid = «AIRPORT»; // Имя вайфай точки доступа
const char *pass = «PASSWORD»; // Пароль от точки доступа

const char *mqtt_server = «server»; // Имя сервера MQTT
const int mqtt_port = 11140; // Порт для подключения к серверу MQTT
const char *mqtt_user = «Login»; // Логи от сервер
const char *mqtt_pass = «Pass»; // Пароль от сервера

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
<
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(» => «);
Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных

String payload = pub.payload_string();

if(String(pub.topic()) == «test/led») // проверяем из нужного ли нам топика пришли данные
<
int stled = payload.toInt(); // преобразуем полученные данные в тип integer
digitalWrite(5,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
>
>

WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
pinMode(5, OUTPUT);
>

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) <
if (!client.connected()) <
Serial.println(«Connecting to MQTT server»);
if (client.connect(MQTT::Connect(«arduinoClient2»)
.set_auth(mqtt_user, mqtt_pass))) <
Serial.println(«Connected to MQTT server»);
client.set_callback(callback);
client.subscribe(«test/led»); // подписывааемся по топик с данными для светодиода
> else <
Serial.println(«Could not connect to MQTT server»);
>
>

if (client.connected()) <
client.loop();
TempSend();
>

>
> // конец основного цикла

// Функция отправки показаний с термодатчика
void TempSend() <
if (tm==0)
<
sensors.requestTemperatures(); // от датчика получаем значение температуры
float temp = sensors.getTempCByIndex(0);
client.publish(«test/temp»,String(temp)); // отправляем в топик для термодатчика значение температуры
Serial.println(temp);
tm = 300; // пауза меду отправками значений температуры коло 3 секунд
>
tm—;
delay(10);
>

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

Видео с демонстрацией работы системы управления

Подробная видеоинструкция по настройке системы

Один из вариантов применения управления esp8266 через MQTT протокол

Управление светодиодной лентой через интернет

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

В архиве находятся скетч и все необходимые библиотеки для прошивки микроконтроллера скетчем из примера.
Обращаю ваше внимание, что библиотека ESP8266WiFi.h не входит в данный архив, она устанавливается через Boards manager в среде Arduino.

Источник

Программирование и передача данных в «Ардуино» по «воздуху» с помощью ESP8266. Часть Третья. Здравствуй, «ANDROID»

Предлагаю вам, уважаемые читатели GeekTimes, очередную статью из цикла по использованию микросхемы ESP8266 в качестве беспроводного моста для AVR микроконтроллеров, на примере аппаратной платформы Arduino Uno (Nano). В этот раз для полета на Луну управления платформой мы задействуем вместо компьютера устройство на базе «ANDROID». Ну, например, смартфон.

image loader

Подробности под катом:

Для нашей работы мы воспользуемся инструментарием, который был описан в предыдущей статье — беспроводным программатором BABUINO и модулем передачи кода и данных МPDE (module for programm and data exchange) прошиваемым в ESP8266.

Как выяснилось из откликов пользователей, сам программатор, в общем, пришелся ко двору и некоторые личности даже им успешно пользуются. Ну, в принципе, вещь действительно удобная; запустил приложение под виндой, выбрал hex файл из нужной папки и всё — через несколько секунд программка в нужном устройстве безо всяких проводов. Другое дело, что я зря с излишней горячностью нападал на пользователей софта ARDUINO, пишущих на Wiring C и пользующихся ARDUINO IDE с её скетчами и библиотеками. Безусловно, каждый делает как ему удобно — на ардуинском ли Wiring C или на С из AVR studio. Но в итоге, некоторые пользователи почему-то сразу решили, что программатор никак не совместим с ARDUINO софтом.

На самом деле, проблем с совместимостью, конечно же, никаких нет. Абсолютно также компилируете ваш скетч, где вам удобно до состояния hex файла и совершенно также просто отправляете его через беспроводной программатор на ваш Arduino UNO или NANO.

Обмен данными под софтом ARDUINO тоже никаких проблем не доставляет. Пишете волшебные строчки:

а дальше что-то типа:

receiveByte= Serial.read(); // чтение байта из буфера

Serial.write(receiveByte); // запись байта

И можете обмениваться байтовыми потоками по WI-FI совершенно спокойно. Ибо AVR микроконтроллер шлёт в ESP8266 и получает байты оттуда по последовательному порту UART, настроить работу с которым в Arduino может, как мы видим, любой гуманитарий.

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

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

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

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

Итак, Java и программный пакет Android Studio — интегрированная среда разработки (IDE) для работы с платформой Android основанная на программном обеспечении IntelliJ IDEA от компании JetBrains, официальное средство разработки Android приложений.

image loader

Если вы уже работаете с ПО от IntelliJ IDEA, то будете приятно удивлены знакомым интерфейсом.

С основами построения приложений я знакомился по книжке Б.Филлипса и К.Стюарта — «ANDROID» программирование для профессионалов». Как я понял, профессионалами авторы считают читателей, хотя бы немного знакомых с Java SE. Чего-то архи-сложного в этой книге я не нашел, а для наших целей вполне хватит и первого десятка глав книги, благо, что в ней все примеры кода приводятся при работе именно с вышеупомянутой Android Studio.

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

В предыдущей статье было описано управление тележкой через оконное приложение на Windows. То есть весь код для создания HTTP и UDP соединений, а также логика управления у нас уже по идее присутствует. Поэтому взяв на вооружение слоган компании Oracle «Написано в одном месте, работает везде» мы просто перекинем эти классы в новую программу уже для Android приложения. А вот GUI — графический интерфейс пользователя, по понятным причинам придется оставить там, где он был. Но с другой стороны, на Android всё делается очень похоже и довольно быстро, поэтому в накладе мы не останемся.

ТЫКАЕМ ПАЛЬЦЕМ В ЭКРАН

yheckwfcoqj3p01duei5y84mcle

Итак создаем новый проект «FourWheelRobotControl» в Android Studio.
Это простое приложение и оно будет состоять из активности (activity)

Его писать ручками не надо, он генерится автоматически после ваших творений в редакторе.

Теперь просто перенесём два класса из программы приведенной в предыдущей статье:

Суть программы осталось той же. MainActivity сначала запускает HTTP и UDP клиенты, а затем ловит нажатия и отжатия экранных кнопок, отправляя код нажатия direction на формирование UDP пакета. А оттуда уже всё — «вперёд»,«назад»,«влево», «вправо» и при отжатии «стоп» уезжают по WI-FI на телегу.

Кроме всего этого, мы должны немного подредактировать файл так называемого манифеста, который опять же, в основном генерится сам.

Манифест (manifest) представляет собой файл XML с метаданными, описывающими ваше приложение для ОС Android. Файл манифеста всегда называется AndroidManifest.xml и располагается в каталоге app/manifest вашего проекта.

Правда там нам работы совсем немного.

запрещаем повороты экрана:

разрешаем работу в интернет:

И вот он весь полностью.

При запуске мы должны увидеть что-то вроде:

image loader

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

С другой стороны, управление при помощи экранных кнопок это то же самое,

«как пить просто водку, даже из горлышка — в этом нет ничего, кроме томления духа и суеты».

И Веня Ерофеев в этом был прав, безусловно.

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

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

АКСЕЛЕРОМЕТР В МАССЫ

n5tr nioum4avgw97qqcsqm63zi

Поэтому наш код в MainActivity (и только в нём) изменится минимально.

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

Получим сам датчик от системы и зарегистрируем его как слушатель.

Имплементируем сам интерфейс слушателя:

И пропишем четыре обязательных метода из которых воспользуемся только последним. Методом, отрабатывающим при изменении показаний акселерометра. Вообще-то, я хотел акселерометр сам опрашивать, как обычную периферию с периодом около 100 мс, так как было подозрение (из-за названия onChanged), что метод отрабатывает слишком часто. Но там всё private и фиг за интерфейсы проберёшься.

Программа выводит показания датчиков по двум осям на экран смартфона. Вместо третьей оси, которая не используется, выводится переменная направления «direction». И эти же данные бегут в виде байтового потока на тележку. Правда, из-за того, что поток чисто байтовый, определить, где команда «вперед» или «стоп» было бы затруднительно. Поэтому я поступил просто: каждому направлению и углу наклона соответствует свой диапазон чисел. Грубо говоря 1-20 это «вперёд» с соответствующей скоростью, 21-40 это «назад» и так далее. Конечно, можно было бы передавать по UDP чисто данные, а сами управляющие команды задавать через TCP протокол и это было бы безусловно правильнее. Но для это надо редактировать программу на самой ESP8266, чего мне пока не хочется.

Итак, телега катается по квартире, чутко реагируя на наклоны моего GalaxyS7, но и это как говаривал небезызвестный Веня ещё не то.

«Теперь же я предлагаю вам последнее и наилучшее. «Венец трудов, превыше всех наград», как сказал поэт. Короче, я предлагаю вам коктейль «Сучий потрох», напиток, затмевающий все. Это уже не напиток — это музыка сфер. „

В наш век Сири и Алексы, чего-то там вертеть руками? Пусть слушается голосового управления!

А ТЕПЕРЬ СЛУШАЙ МЕНЯ!

lq2ywi0undiqsci5pf5rc2bkwqk

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

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

Опять меняется лишь MainActivity.java, хотя я еще немного изменил и сам макет (четыре кнопки теперь там вовсе ни к чему, хватит и одной).

В MainActivity.java добавилось следующее:

И то, что он возвращает:

А возвращает он массив похожих слов, причем в довольно “мусорной форме», со всякими скобочками и запятыми. И вам лишь остается выбрать слово похожее на то, которое вы сказали. Ну и соответственно, если попалось слово «вперёд», то едем вперёд, если «направо» то направо и так далее. Конечно, надо учитывать, где через «Ё», где запятая лишняя прицепится (скобочки-то я отрезал, а вот на запятые сил уже не хватило).

Ну и до кучи макет c одной кнопкой

Самое удивительное, что действительно ездиет и слушается голоса (как правило). Но, конечно, интерфейс тормозной; пока скажете, пока распознается и вернётся; короче скорость движения выбирайте заранее небольшую или помещение наоборот поширше.

На этом на сегодня всё, буду рад, если понравилось.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *