semaver
New member
ESP8266 veya ESP32 ile İyi Yankı
Akıllı vokal asistanları à la Apple HomePod, Google Home veya Amazon Echo şu anda sıcak rulo olarak satılıyor ve birçok akıllı ev çözümünün merkezini oluşturuyor. Ancak üretici, orada nispeten kolayca entegre edilebilen cihazlar nasıl oluşturabilir?
Çünkü Amazon Echo
Bu makalede dikkat Amazon Echo'ya odaklanmıştır. Bu seçim, Google veya Apple çözümlerinin olumsuz bir değerlendirmesini ilişkilendirmemelidir. Amazon'un kararı sadece ürünlerinin artık daha yaygın olmasıdır. Sonuç olarak, bazı açık kaynaklar bu sektöre zaten dahil olmuştur. Üreticinin sunduğu olasılıklara dikkat etmek için yeterli neden.
Wemo'nun dansını yap
Şimdi, ilgili beceriler ve eko ile uyumlu donanım sağlamak için Amazon geliştiricisi olarak kaydolmanın en belirgin yolu olacaktır. Bununla birlikte, birçok basit uygulama için bu gerekli değildir. Bu, bir IoT cihazının kontrolünün aydınlatma ve söndürmeye indirgenebileceği bu örnekler anlamına gelir. Bu bağlamda, katil uygulaması, bir mikrodenetleyici tarafından röle yoluyla değiştirilebilen lambalar veya soketlerdir.
Kaynak geliştiricileri bu nedenle Belkin'in WEMO çözümünü inceledi. ECO'daki herhangi bir entegre cihaz gibi, bir WEMO soketi WLAN üzerinden Echo, Echo Dot, Echo Spot veya Echo görünümü ile eşleştirilecek özellikler içerir. Öyleyse, bu protokolü yeniden yaratmak ve bir kütüphanede sağlamaktan daha açık olabilir. Bu, üreticilerin çözümlerini Belkin Wemo olarak harcamalarını sağlar.
Amazon yankı işlevi
Bir Belkin Wemo soketi gibi eko ve cihazlar arasındaki etkileşim nasıl çalışır?
Kullanıcı yeni cihazlar bulmak için bir yankı sistemi çağırırsa, UDP-Broadcast aracılığıyla bu WLAN'daki tüm cihazlara bir mesaj gönderin. Çiftleşme, yeni cihazlar URL adresinizle yanıt verir, ardından Echo sizden hizmetinizin açıklamasını ister. İlgili cihaz daha sonra cihazın açıklamasını geri gönderir (setup.xml). Bu ödev (cihaz, ad, özellikler, …) bir cihaz listesinde echo'yu hatırlar. Kullanıcı, bu cihaz tarafından desteklenen bir promosyona dil veya uygulamaya göre iyi bilinen bir cihaz gerektiriyorsa, Echo, belirtilen adresi onaylayan karşılık gelen bir durum değişikliği (SetBibbary durumu) için TCP/Web Hizmeti çağrısı aracılığıyla cihazı ister.
Örneğin Belkin Wemo türünün basit bir kavrama, açık ve kapalı sadece iki alternatif koşul bilir. Sonuç olarak, çok basit komutları dinliyorlar.
ESP32 ve ESP8266
Amazon Echo evreninde basit bir entegrasyon seçeneğini göstermek için bir ESP8266 veya ESP32 kartı gereklidir. Dizimde zaten MCU (ESP8266 Bölüm 1 ve Bölüm 2, ESP32) hakkında bir makale vardı.
Örneğin, ESP32 veya ESP8266 (ESP-12E veya ESP 12-F) ile NODEMCU varyantları kart olarak önerilir. Ancak prensip olarak, her kart uygun olmalıdır.
Arduino çekirdeği
Arduino IDE bizim amacımız için gereklidir. ESP kartlarını yönetebilmeniz için ESP8266 veya ESP32 kartları için çok sayıda Arduino çekirdeği vardır. Fikirdeki kurulumları uygulama sayfalarında açıklanmaktadır.
ESP8266 veya ESP32'li kartlar genellikle diğer UART donanımını kullanır, böylece ek sürücülerin kurulumu gereklidir, genellikle CP210X için SilAB'lerin Oron-A-USB sürücüleri veya yonga yongaları seti için sürücü yongaları.
Arduino Core ve USB sürücüsünün kurulumları çalışmışsa, menüdeki Arduino fikrinde yapabilirsiniz Enstrüman NODEMCU durumunda genellikle ESP8266-DADS durumunda olsa da, kullanılan com kapısını ve kullanılan kartı belirtin Nodemcu 1.0 (veya başka bir şey Jenerik ESP8266 modülleri) FA ve ESP32 kartlarıyla ESP32 Dev Modülleri. BENn benim durumumda bu tür bir tablodu Wemos Lolin Önce.
WEMO yerine Fauxmo
ESP32 ve ESP8266 için Arduino çekirdeğini kullanıyoruz. Bu, kartların her zamanki tarzda Arduino IDE ile programlanmasını sağlar.
Bununla birlikte, bir yandan sahte, diğer yandan asenkron iletişim için bir kütüphane iki kitapçıya ihtiyaç vardır.
“Truva atımız” için temel kütüphane Fauxmoesp adı altında çalışır. Fauxmoesp'in kökeni, içerik oluşturuculardan gelen karşılık gelen bir Python kütüphanesidir. Uygulamaya C/C ++ (umarım bir takma ad), Xose Pérez (ESP8266) ve Frank Hellmann'a (ESP32) borçluyuz. Buna ek olarak, FauxMoasp'ın hem ESP32 için AsynctCP hem de ESP8266 kartları için ESPasynctcp kartları olan bir asenkron C ++ kütüphanesine ihtiyacı var.
GitHub'dan ve her biri menüden her iki kitapçıyı almalısınız Eskiz> Kütüphane Ekle> Ekle .zip Kütüphanesi Fikri Bildirin.

LEDS Merkel ve Schulz, padoktan sonra Amazon Alexa uygulamasında görünür
İlgileniyorsanız: Fauxmo çalışırken çalıştığı için, Fauxmo'nun orijinal babası ilginç bir makalede açıklıyor.
Önceden küçük uyarı: ESP8266 çekirdeği ve ES32 çekirdeği ile birlikte, çözüm henüz tüm nesiller veya donanım eko türleri için işe yaramıyor gibi görünmektedir, bu nedenle ikinci nesil cihazlarda sorunlar ortaya çıkabilir. Örneğin, Alexa'nın “Alexa!” Ses komutu! “Sahtekarlığımı kendi başına bulamadım, ancak daha sonra hala Alexa uygulamasında listelenmişlerdi ve dil tarafından kontrol edilebilirler. Genel olarak, ESP8266 ile kullanmak şu anda bir ESP32 kartından daha az kaltak yapıyor gibi görünüyor.
Kütüphane kullanımı
Kütüphanenin programlarında kullanımı son derece basittir.
- Türün bir değişkeni fauxmoESP tanımlamak.
- Bu değişken aracılığıyla yapılandırmada istenen tüm aygıtları kaydeder fauxmo Aç.
- Geri arama rutinlerinde eylemler gerçekleştirin. İkincisi aşağıdaki bir demo uygulamasını gösterecektir.
#include <fauxmoESP.h> // Headerdatei inkludieren
fauxmoESP fauxmo; // Zugriff auf fauxmo
void setup() {
Serial.begin(115200);
... Mit WLAN verbinden...
fauxmo.addDevice("Gerät Eins"); // Zwei Geraete anmelden
fauxmo.addDevice("Gerät Zwei");
fauxmo.enable(true); // Jetzt fauxmo aktiv schalten
fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state) {
Serial.printf("[MAIN] Device #%d (%s) state: %sn", device_id, device_name, state ? "ON" : "OFF");
});
fauxmo.onGetState([](unsigned char device_id, const char * device_name) {
return true; // Status zurückmelden
});
}
void loop() {
fauxmo.handle(); // Eigentliche Event-Loop
}
Kapıların tahsisi
Arduino IDE'de, çeşitli kapılar D1 = 1 veya D2 = 2 gibi basit görevlere sahiptir, bu da IDE'nin başlangıçta Arduino kartlarına yerleştirilmesinden kaynaklanmaktadır. Soru, ESP2866 veya Arduino Core'lu ESP32 kartları için biraz daha zor çünkü gezilerinin farklı bir düzenine sahipler. Builin_led biriyle Nodemcu 1.0 16 (= D0). Burada aşağıdaki Porta bağlantı noktaları var:
ESP8266 Arduino IDE
D0 16
D1 5
D2 4
D3 0
D4 2
D5 14
D6 12
D7 13
D8 15
D9 3
D10 1
Devre
Örnek olarak iki basit LED kullanılmalıdır. Eskiz, Amazon Echo'daki Wemo cihazları olarak rapor ediyor, böylece Alexa'yı kullanarak açık ve kapalı olabilirler. Örnek, ESP8266'ya dayanan bir NODEMCU modülü (Wemos lolin) kullanır. Bunun yerine, bir ESP32 kartı da kullanılabilir, ancak ESP8266 basit örnek için zaten hayal kırıklığına uğrar.

Devre, LED'leri kontrol etmek için yalnızca D0 kapılarını, kartın D1'ini kullanır
Devrede, iki LED (kırmızı ve mavi) D0 (= Wemos lolin v3 / nodemcu kartlarının pim 16) ve D1 (= Wemos lolin v3 / nodemcu kartının pin 5) kapılarına bağlanır. Tablo GND, breadboard (mavi bağlantı) aracılığıyla iki LED ile birlikte kök salmıştır.
Uygulamaya daha yakın bir senaryoda, çıkışlar LED'leri kontrol etmez, ancak daha büyük lambaların 12V devrede açılabileceği veya devre dışı bırakılabileceği rölelerdir.
Sahte eskiz
İlişkili taslak tamamen üstte bildiğimiz modeli takip eder. Program, eko sistemini “Merkel” ve “Schulz” adı verilen iki WEMO cihazını biriktiriyor. Bir düzine cihaz tanıtabilirdik.
Bilgilendiriyorum: ESP8266 veya ESP32 ile çoğu kart için bir restorasyon düğmesinin yanında bir flaş veya önyükleme düğmesi vardır. Kartı yeni bir taslakla yeniden üretmek için, geri yükleme sırasında flaş tuşuna basılmalıdır. Bunun nedeni, Arduino çekirdeği ile birlikte bir taslakın aslında ürün yazılımı oluşturmasıdır. Bir restorasyonun ESP8266/ESP32 programlama için IDE veya araçlar olsa da, tavsiye edilir, ancak flaş düğmesine basıldığında bile restorasyon düğmesini manuel olarak kullanmanız önerilir. Yani eskizle çalışır. Flash düğmesine basmadan, kart sadece yürütme moduna girer ve yüklenmeyi reddeder.
//***********************************************************
//
// Demoanwendung um mittels eines ESP32- oder ESP8266-Boards
// eine Belkin Wemo Steckdose zu simulieren
// Michael Stal, 2018
// Creative Commons
//
//************************************************************
#include <Arduino.h>
#ifdef ESP32 // Im Falle eines ESP32-Boards
#include <WiFi.h>
#else // bei einem ESP8266-Board
#include <ESP8266WiFi.h>
#endif
// Die wichtigste Bibliothek ist fauxmoESP
#include "fauxmoESP.h"
// Zwei Lampen
#define MERKEL_LED 5
#define SCHULZ_LED 16
// Volle Kanne am seriellen Port
#define SERIAL_SPEED 115200
#define WL_SSID "StalWLAN"
#define WL_PASS "4242424242"
#define LAMPE1 "Merkel"
#define LAMPE2 "Schulz"
fauxmoESP fauxmo; // Objekt zum Zugriff auf fauxmo
//***********************************************************
//
// wifiSetup dient zur Verbindung ins WLAN >>WL_SSID<<
//
//************************************************************
void wifiSetup() {
// Das ESP-Board wird zur Station gemacht:
WiFi.mode(WIFI_STA);
// Verbindungsaufbau
Serial.printf("[WIFI] Verbinden zu %s ", WL_SSID);
WiFi.begin(WL_SSID, WL_PASS);
// Warten bis Verbindungsaufbau erfolgt ist
while (WiFi.status() != WL_CONNECTED) {
Serial.print(">");
delay(100);
}
Serial.println();
// Verbunden!
Serial.printf("[WIFI] Client Modus, SSID: %s, IP Adresse: %sn", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
//***********************************************************
//
// setup initiiert den WLAN setup,
// schaltet beide Lampen aus,
// aktiviert fauxmo,
// meldet beide Lampen an,
// und definiert dafür Callbackhandler
//
//************************************************************
void setup() {
// Seriellen Port initialisieren
Serial.begin(SERIAL_SPEED);
Serial.println();
Serial.flush();
// Hier erfolgt der Verbindungsaufbau zum WLAN
wifiSetup();
// Die beiden LEDs
pinMode(MERKEL_LED, OUTPUT);
digitalWrite(MERKEL_LED, LOW);
pinMode(SCHULZ_LED, OUTPUT);
digitalWrite(SCHULZ_LED, LOW);
// Die Bibliothek lässt sich aktivieren und deaktivieren.
// Im deaktivierten Modus lassen sich Geraete weder finden noch schalten
fauxmo.enable(true);
// Alexa virtuelle Geraete unterjubeln
fauxmo.addDevice(LAMPE1);
fauxmo.addDevice(LAMPE2);
// Callback, sobald Lampe von Alexa geschaltet wird:
fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state) {
Serial.printf("[MAIN] Device #%d (%s) Zustand: %sn", device_id, device_name, state ? "AN" : "AUS");
if ( (strcmp(device_name, LAMPE1) == 0) ) {
Serial.println("Merkel wird geschaltet");
if (state) { // Abhaengig vom Zustand Lampe ein-/ausschalten
digitalWrite(MERKEL_LED, HIGH);
} else {
digitalWrite(MERKEL_LED, LOW);
}
}
if ( (strcmp(device_name, LAMPE2) == 0) ) {
Serial.println("Schulz wird geschaltet");
if (state) { // Abhaengig vom Zustand Lampe ein-/ausschalten
digitalWrite(SCHULZ_LED, HIGH);
} else {
digitalWrite(SCHULZ_LED, LOW);
}
}
});
}
//***********************************************************
//
// loop ist die Ereignisschleife unseres Fake Wemo
//
//************************************************************
void loop() {
// Asynchron auf Echo-Kontaktaufnahmen warten, und darauf reagieren
fauxmo.handle();
}
“Alexa vokal komutu, yeni cihazlar arıyor” veya Alexa uygulaması (Android, iOS) aracılığıyla bağlantı kurduktan sonra, yeni lambalar cihazlar listesinde WEMO olarak bulunabilir ve “Alexa, Merkel'e Anlat!” Hayat çok kolay olabilir.

LEDS Merkel ve Schulz, padoktan sonra Amazon Alexa uygulamasında görünür
Çözüm
Bu bölümde, bir ESP32 veya ESP8266 kartına bağlı cihazların Amazon Echo üzerinden nasıl kontrol edilebileceğini öğrendik. Bununla birlikte, bu yalnızca lamba veya soket gibi bu cihazların sadece iki durumu bilmesi durumunda, yani içeride ve dışarıda kalırsa çalışır. İşin püf noktası, Fauxmoasp kütüphanesinin Belkin Wemo soketini somutlaştıran yankı cihazı oynamasıdır. Bir Raspberry Pi, bir Sinology iş istasyonu veya bir Linux/Mac bilgisayar kullanıyorsanız, FAUXMO'nun Python sürümünü aynı amaçla kullanabilirsiniz. N8Henrie'nin genişletilmiş sürümüne veya Makermusings'in orijinal versiyonuna bakın.
Daha karmaşık etkileşimler ve cihazlar için üreticiler Amazon (Amazon Lambda) platformuna bir el vermeli ve daha karmaşık beceriler uygulamalıdır.
()