/*
*Wokwi example: https://wokwi.com/projects/342784604105605716
* Ще покажем как можем да създадем собствено IoT устройство, използвайки тип изкуствен интелект с ограничена памет,
* съвместим директно с гласовия асистент Alexa на Amazon с вграден изкуствен интелект.
* За този пример ще ви е необходимо хардуерно устройство Alexa Echo или съвместимо с него.
* Това е основен пример за това как да създадете собствено интелигентно IoT устройство, съвместимо с гласовия асистент Amazon Alexa.
* с изкуствен интелект. Това може да стане с помощта на библиотеката Espalexa за Arduino IDE и нейните методи за деклариране на устройства.
*/
#include <WiFi.h>
#include <Espalexa.h> // Необходима библиотека. Трябва да я добавите в Arduino IDE или Wokwi. Не е заредена по подразбиране.
// прототипи
boolean connectWifi();
void firstLED_Channel (uint8_t LED1_State);
void secondLED_Channel(uint8_t LED2_State);
void thirdLED_Channel (uint8_t LED3_State);
// Трябва да промените името и паролата с тези на вашата мрежа.
// Важно е тази мрежа да е същата, която се използва от Alexa Echo или от съвместимото устройство, което използвате.
#define ssid "Wokwi-GUEST"
#define password ""
boolean wifiConnected = false; // Маркер за WiFi връзкaта
Espalexa espalexa;
EspalexaDevice* device3; //това е необходимо за втория начин за създаване на устройство на Алекса по-долу - "Device 3"
// Дефинирайте GPIO, използвани в тестовата хардуерна схема. Свързани са 4 светодиода.
const uint8_t light[5] = { 0, 25, 26, 27, 32 };
void setup() {
Serial.begin(115200);
wifiConnected = connectWifi();
for (int i = 1; i < 5; i++)
pinMode(light[i], OUTPUT);
if (wifiConnected) {
// Тук дефинирайте устройствата си.
espalexa.addDevice("Device 1", firstLED_Channel); //най-проста дефиниция, състояние по подразбиране изключено
espalexa.addDevice("Device 2", secondLED_Channel, 255); //третият параметър е началното състояние от 0 до 255. (тук състоянието е включен)
// Втори начин за дефиниране на ново устройство
device3 = new EspalexaDevice("Device 3", thirdLED_Channel); //можете също така сами да създадете обектите на устройството, както тук
espalexa.addDevice(device3); //и след това ги добавете
device3->setValue(128); //това ви позволява например да актуализирате стойността на състоянието им от 0 до 255 по всяко време!
espalexa.begin();
} else {
for (;;) {
Serial.println("Не може да се свърже с WiFi. Моля, проверете данните и нулирайте ESP.");
delay(2500);
}
}
}
void loop()
{
espalexa.loop(); // Стартирайте процедурата Alexa loop
delay(100);
}
void firstLED_Channel(uint8_t LED1_State) {
Serial.print("Device 1 changed to ");
if (LED1_State) {
Serial.print("ON, LED1_State ");
Serial.println(LED1_State);
digitalWrite(light[1], HIGH);
} else {
Serial.println("OFF");
digitalWrite(light[1], LOW);
}
}
void secondLED_Channel(uint8_t LED2_State) {
Serial.print("Device 2 changed to ");
if (LED2_State) {
Serial.print("ON, LED2_State ");
Serial.println(LED2_State);
digitalWrite(light[2], HIGH);
} else {
Serial.println("OFF");
digitalWrite(light[2], LOW);
}
}
void thirdLED_Channel(uint8_t LED3_State) {
Serial.print("Device 3 changed to ");
if (LED3_State) {
Serial.print("ON, LED3_State ");
Serial.println(LED3_State);
digitalWrite(light[3], HIGH);
} else {
Serial.println("OFF");
digitalWrite(light[3], LOW);
}
}
// свързване с WiFi връща true, ако е успешно, или false, ако не е
boolean connectWifi() {
boolean state = true;
int i = 0;
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("Свързван\е с WiFi");
// Изчакайте за връзка
Serial.print("Свързване...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (++i > 20) {
state = false;
break;
}
}
Serial. println("");
if (state) {
Serial.print("Свързано с ");
Serial.println(ssid);
Serial.print("IP адрес: ");
Serial.println(WiFi.localIP());
Serial.println("Този код няма да работи правилно в симулатора на Wokwi. Трябва да имате");
Serial.println("модул за тестване на хардуер и реално устройство Alexa Dot в собствената ви мрежа");
Serial.println("*********************************************");
Serial.println("Можете да потърсите устройствата Device 1, Device 2 и Device 3 в приложението Alexa.");
Serial.println("Ако не ги виждате, можете да попитате Alexa Echo - Alexa find new devices in my network.");
digitalWrite(light[4], HIGH); // ако връзката е ОК, светодиодът LED4 ще светне
} else {
Serial.println("Връзката е неуспешна.");
digitalWrite(light[4], LOW); // ако връзката е неуспешна, светодиодът LED4 няма да светне
}
return state;
}