В этом выпуске представлена вторая часть платы управления распознаванием голоса Siri:Как получить данные датчика с помощью распознавания голоса Siri.
Перейти к части 1 распознавания голоса Siri на приборной панели:Светодиодные индикаторы управления распознаванием голоса Siri
Международная практика, давайте сначала посмотрим на демонстрационный эффект. Щелкните ссылку ниже, чтобы перейти к станции B и посмотреть демонстрационное видео:
Обзор проекта
В прошлой статье я подробно показал вам, как использовать Siri для управления панелью управления и светодиодными индикаторами.Эта статья является расширенной версией предыдущей статьи.Я продолжу учить вас, как использовать Siri для считывания данных с различных датчиков .
Для тех, кто не читал предыдущую статью, рекомендуется сначала прочитать первую статью.
Ссылка для перехода:Часть 1 распознавания голоса Siri на панели управления: управление светодиодной подсветкой
На этот раз основной платой управления по-прежнему является плата управления.Конечно, как я уже говорил в предыдущей главе, вы также можете выбрать другие платы разработки серии ESP32 или ESP8266.Методы и эффекты аналогичны. Считанные данные датчика включают датчик звука, датчик освещенности и внешний датчик температуры и влажности DHT11 на плате управления.Я надеюсь, что после изучения этой главы вы научитесь изменять соответствующий код и заменять его другими датчиками.
В этом проекте мы также установили плату управления ESP32 в качестве веб-сервера.Когда пользователь получает доступ к адресу доменного имени (или IP-адресу) сервера на веб-странице, он переходит к следующему интерфейсу. Конечным результатом является то, что распознавание голоса Siri можно использовать не только для получения данных датчиков, но и данные датчиков можно просматривать непосредственно на веб-странице.
Мы можем нажатьLEDВы также можете получить доступ к соответствующему адресу доменного имени этого переключателя, чтобы управлять включением/выключением светодиода RGB на плате управления.
Что касается датчиков, мы можем напрямую считывать данные всех датчиков на веб-странице одновременно или посещать адрес доменного имени, соответствующий каждому датчику в отдельности, для считывания соответствующих данных. На этом базовые функции управления приборной панелью и чтения данных через веб-страницу завершаются.
После этого основания мы можем настроить некоторые голосовые помощники, такие как Siri, голосовой мастер Tmall и т. Д., И получить доступ к соответствующему адресу доменного имени с помощью голосовых команд, чтобы реализовать функции распознавания голоса для переключения света и считывания данных датчика. .
подключение цепи
В этом проекте нам нужно подключить внешний датчик температуры и влажности DHT11 и подключить его к контакту P0 платы управления через плату расширения, как показано на рисунке ниже. Звуковые и световые данные можно считывать напрямую с двух датчиков на панели управления.
установка файла библиотеки
Для этого проекта требуются 4 библиотеки Arduino: в дополнение к тем, которые использовались в предыдущей главе.Adafruit_NeoPixel,ESPAsyncWebServer,AsyncTCPКроме того, мы также добавилиDHTФункциональная библиотека, ее функция в основном заключается в считывании значения датчика температуры и влажности DHT11. .
Учебник по установке библиотеки Arduino не является предметом этой статьи, поэтому я не буду повторяться здесь, даны только URL-адреса 4 библиотек, вы можете узнать, как установить библиотеку на Arduino самостоятельно.
- Adafruit_NeoPixel:GitHub.com/Adafruit/AD…
- ESPAsyncWebServer:GitHub.com/me-no-Dev/E…
- Асинхронный TCP:GitHub.com/me-no-Dev/A…
- ДГТ:GitHub.com/Adafruit/DH…
код ардуино
Код этой главы модифицирован на основе предыдущей главы, поэтому основная часть повторяться не будет, будут объяснены только отличия и дополнения.
Заголовочный файл и определение инициализации
В начале программы мы сначала вводим библиотечные функции, которые нам нужно использовать:
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "Adafruit_NeoPixel.h"
#include "Adafruit_Sensor.h"
#include "DHT.h"
Затем установите сетевую учетную запись и пароль:
const char *ssid = "wifi_name";
const char *password = "wifi_password";
Затем определите некоторые контакты датчика и исполнительного механизма и выполните для них некоторые начальные настройки:
#define SOUNDPIN 36 // P10
#define LIGHTPIN 39 // P4
#define LEDPIN 17 // P7
#define DHTPIN 33 // P0
Затем определите объект DHT, объект NeoPixel (светодиод RGB) и объект WebServer:
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
Adafruit_NeoPixel pixels(3, LEDPIN, NEO_GRB + NEO_KHZ800);
AsyncWebServer server(80);
дизайн веб-страницы
Затем идет дизайн интерфейса веб-сервера панели управления.Дизайн интерфейса использует язык HTML.Вот самый базовый дизайн интерфейса. Код, связанный с HTML, хранится вindex_htmlв переменной.
const char index_html[] PROGMEM = R"rawliteral(
// HTML code here
)rawliteral";
Базовый код оформления HTML-страницы выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
html {
font-family: "Microsoft Yahei";
text-align: center;
}
</style>
</head>
<body>
<h2>掌控板家庭数据中心</h2>
<a href="/led=on">Light On</a>
<p></p>
<a href="/led=off">Light Off</a>
<p>
<span>声音:</span>
<span>%SOUND%</span>
</p>
<p>
<span>光线:</span>
<span>%LIGHT%</span>
</p>
<p>
<span>温度:</span>
<span>%TEMPERATURE%</span>
<span>℃</span>
</p>
<p>
<span>湿度:</span>
<span>%HUMIDITY%</span>
<span>%</span>
</p>
</body>
</html>
Действие этого кода, отображаемого на веб-странице, выглядит следующим образом. Мы видим, что многие данные находятся между двумя знаками процента (%), например%SOUND%, это заполнитель.После того, как мы прочитаем данные соответствующего датчика в программе, мы можем автоматически заменить его.Для его замены в программе будет специальная функция программа.Об этой части речь пойдет ниже.
Функция чтения данных датчика
Во-первых, нужно прочитать функцию датчика температуры и влажности DHT11, эта часть относительно проста, просто обратитесь непосредственно к процедуре библиотеки функций DHT:
String readDHTTemperature() {
float temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return "--";
}
else {
Serial.println(temperature);
return String(temperature);
}
}
String readDHTHumidity() {
float humidity = dht.readHumidity();
if (isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return "--";
}
else {
Serial.println(humidity);
return String(humidity);
}
}
Послеprocessor()Функция, функция этой функции в основномЗамените все заполнители в разделе веб-страницы соответствующими значениями датчика.. Он может возвращать соответствующие данные в соответствии с именем заполнителя.
// Replaces placeholder with sensor values
String processor(const String& var) {
if (var == "SOUND") {
return String(analogRead(SOUNDPIN));
}
if (var == "LIGHT") {
return String(analogRead(LIGHTPIN));
}
if (var == "TEMPERATURE") {
return readDHTTemperature();
}
if (var == "HUMIDITY") {
return readDHTHumidity();
}
return String();
}
setup()
в функции инициализацииsetup(), мы сначала инициализировали последовательный порт, RGB-подсветку и датчик DHT11:
Serial.begin(9600);
pixels.begin();
dht.begin();
Затем подключите плату управления к сети и напечатайте IP-адрес в последовательном порту:
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("WiFi connected");
// Print ESP32 Local IP Address and Some Tips
Serial.print("Open your brower, and visit: http://");
Serial.println(WiFi.localIP());
Serial.println();
И последнее, но не менее важное: самые важные настройки веб-сервера. Подробное руководство по настройке веб-сервера вы можете найти на официальном сайте:GitHub.com/me-no-Dev/E…
Здесь публикуется только код, необходимый для этой статьи. При доступе к корневому каталогу"/", будут отображаться все данные и соответствующие кнопки управления. Здесь отображается вызов данных, упомянутый выше.processorфункция.
// Root / Webpage
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html, processor);
});
При посещении "/led=on», установите светодиод на включенный; при доступе к «/led=off», выключите светодиодный индикатор.
// Webpage to turn on light
server.on("/led=on", HTTP_GET, [](AsyncWebServerRequest *request) {
pixels.setPixelColor(0, 0xFF0000);
pixels.setPixelColor(1, 0xFF0000);
pixels.setPixelColor(2, 0xFF0000);
pixels.show();
Serial.println("LED is on");
request->send_P(200, "text/plain", "led on");
});
// Webpage to turn off light
server.on("/led=off", HTTP_GET, [](AsyncWebServerRequest *request) {
pixels.setPixelColor(0, 0x000000);
pixels.setPixelColor(1, 0x000000);
pixels.setPixelColor(2, 0x000000);
pixels.show();
pixels.clear();
Serial.println("LED is off");
request->send_P(200, "text/plain", "led off");
});
Затем при доступе к соответствующему пути каждого датчика, например "/temperature","/humidity","/sound","/light«По этим путям программа будет вызывать соответствующую функцию для чтения данных датчика, распечатывать данные через последовательный порт, а затем преобразовывать их в текстовый тип String и отображать на веб-странице:
// Webpage to get the temperature value
server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.print("Temperature: ");
Serial.println(readDHTTemperature());
request->send_P(200, "text/plain", readDHTTemperature().c_str());
});
// Webpage to get the humidity value
server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.print("Humidity: ");
Serial.println(readDHTHumidity());
request->send_P(200, "text/plain", readDHTHumidity().c_str());
});
// Webpage to get the sound value
server.on("/sound", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.print("Sound: ");
Serial.println(analogRead(SOUNDPIN));
request->send_P(200, "text/plain", String(analogRead(SOUNDPIN)).c_str());
});
// Webpage to get the light value
server.on("/light", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.print("Light: ");
Serial.println(analogRead(LIGHTPIN));
request->send_P(200, "text/plain", String(analogRead(LIGHTPIN)).c_str());
});
В конце функции setup() запустите веб-сервер:
server.begin();
Пока вся программа написана,В функции loop() ничего делать не нужно, конечно, вы также можете запустить другой код, который хотите.
Загрузка программы
Выберите плату управления или микросхему, связанную с ESP32, в Arduino, затем загрузите программу, откройте последовательный монитор, мы увидим, что последовательный монитор предлагает нам посетить соответствующий веб-сайт. (Если вы не видите соответствующей информации, вы можете нажать кнопку RST на задней панели панели управления, чтобы перезапустить программу)
Откройте браузер компьютера или браузер мобильного телефона, перейдите на соответствующий IP-адрес, вот: 192.168.10.202, мы видим, что соответствующая информация отображается на веб-странице.
Попытка доступа к соответствующему адресу, при доступе192.168.10.202/led=onВ то же время соответствующая подсказка выводится в браузере и последовательном мониторе, и мы также можем видеть, что индикаторы RGB на плате управления также горят. при посещении192.168.10.202/led=offВ то же время браузер и последовательный монитор также выводят соответствующую подсказку, а индикаторы RGB на плате управления также выключены.
при посещении192.168.10.202/soundПомимо соответствующих URL-адресов других датчиков, браузер и последовательный монитор также выводят соответствующую подсказку, как показано на следующем рисунке.
Веб-дизайн
Эта часть не является предметом этой статьи и не повлияет на окончательный эффект голосового управления, поэтому, если вы не интересуетесь веб-дизайном, вы можете пропустить ее и сразу перейти к следующему разделу.
Выше мы в основном выполнили соответствующие функции управления светодиодными индикаторами и считывания данных датчиков через веб-страницу, но эта веб-страница все еще слишком проста. Поэтому мы немного оптимизировали страницу.
Пожалуйста, загрузите вложение для конкретного кода оптимизации HTML.Эта часть относится к веб-сайту иностранных великих богов:randomnerdtutorials.com/
Окончательный эффект приведенного выше кода выглядит следующим образом.
Настройки голосового помощника
Следующий шаг — настроить распознавание речи, принцип аналогичен предыдущему руководству Siri. Поскольку у меня нет других голосовых помощников или умных колонок, я все еще использую Siri в качестве примера.
Откройте встроенную систему iOSярлыкПриложение (английское названиеShortcuts), если нет, то вы также можете зайти в App Store и скачать бесплатно:
Настройки команды быстрого доступа показаны на рисунке ниже. Принцип настройки ярлыка очень прост, то есть для доступа к заданному URL-адресу.
Поскольку ярлык в iPhone поддерживает вызовы с распознаванием голоса Siri, мы можем запустить этот ярлык непосредственно через Siri, чтобы добиться эффекта получения данных датчика посредством распознавания голоса.
Если вы не знаете, как настроить быстрые инструкции, вы также можете скачать инструкции автора напрямую. Скопируйте приведенную ниже ссылку в браузер вашего iPhone, и вам будет предложено добавить эту команду на свой телефон.
Woohoo.iCloud.com/shortcuts/4…
Демонстрация эффекта
Разбудите Siri, чтобы увидеть эффект. Однако здесь следует отметить, что ваш iPhone и панель управления должны находиться в одной локальной сети.
Суммировать
В этой главе мы узнали:
- Далее изучите основы использования WebServer;
- Затем, благодаря разработке веб-кода в формате HTML, интерактивный интерфейс стал более дружелюбным и удобным;
- Наконец, через ярлык приложения iOS реализована функция получения данных датчика посредством распознавания речи.
По сравнению с содержанием Siri, управляющим светодиодами в предыдущей статье, если не учитывать связанное с этим содержание дизайна веб-страницы, кодовая часть Arduino в основном аналогична, и я надеюсь, что читатели смогут научиться расширяться.
Если статья была вам полезна, поддержите ее лайком.
загрузка кода
Щелкните ссылку ниже, чтобы просмотреть полный адрес загрузки кода: