İçindekiler:

Kişisel Asistan: 9 Adım (Resimlerle)
Kişisel Asistan: 9 Adım (Resimlerle)

Video: Kişisel Asistan: 9 Adım (Resimlerle)

Video: Kişisel Asistan: 9 Adım (Resimlerle)
Video: Siz de benim gibi misiniz?#shorts 2024, Temmuz
Anonim
Image
Image
Kişisel asistan
Kişisel asistan

Bu eğitici yazıda, ESP8266'nın gücünü, yazılım tasarımı ve programlamadaki yaratıcılığı, havalı ve eğitici bir şey yapmak için nasıl kullanabileceğinizi göstereceğim.

Adını Kişisel Asistan koydum, çünkü cep boyutunda, sizinle konuşuyor ve size hava durumu, saat ve tarih, gmail mesajları, canlı doğum ve ölüm oranları vb.

Tasarımı basit tutmaya çalıştım. Cihazın iki kullanıcı arayüzü vardır. Kullanıcının bir web tarayıcısı kullanarak erişebileceği ve cihaz ayarlarını ve yapılandırmasını değiştirebileceği fiziksel bir basma düğmesi ve web tabanlı bir uygulama.

Nasıl çalışır? Bu projenin ana bileşenleri bir Mikrodenetleyici ve bir Müzik Çalar modülüdür. Mikrodenetleyicimiz (NodeMCU), internet bağlantısı olan bir erişim noktasına bağlanmak için WiFi teknolojisini kullanır; böylece gerekli verileri alabilir, işleyebilir ve Müzik Çalar'a (DFPlayer Mini) hangi MP3 dosyasının ne zaman çalınacağını söyler.

Şimdilik, bilmeniz gereken tek şey bu. Sonraki adımlarda size daha detaylı bilgi vereceğim, merak etmeyin.

Adım 1: Gerekli Parçalar

Gerekli Parçalar
Gerekli Parçalar
  • NodeMCU ESP-12E (CP2102 USB'den Seri Arayüze)
  • DFPlayer Mini
  • SPST Anlık Basma Düğmesi
  • 8 Ohm 2 Watt Hoparlör
  • Mikro SD Kart (Birkaç Kilobayta ihtiyacınız olacak, bu nedenle kapasite önemli değil)
  • Somun ve Cıvata
    • M3 Somunlar (x6)
    • M3 Cıvata - 23 mm (x4)
    • M3 Cıvata - 15 mm (x2)
  • 1N4148 Sinyal Diyodu (x1)
  • dirençler

    • 1K Direnç (x1)
    • 10K Direnç (x2)

Diğer bölümler:

  • PCB (çevrimiçi bir prototip sipariş edebilir veya yerel bir mağazayı ziyaret edebilirsiniz)
  • Lazer kesim akrilik levha
    • 2 mm kalınlığında şeffaf levha
    • 2,8 mm kalınlığında iki farklı renk sac (turuncu ve yeşil, kırmızı ve yeşil, size kalmış ve renklerin önemi yok)
  • Herhangi bir 5 volt (en az) 1 amperlik mikro USB şarj cihazı (cihazı çalıştırmak için)

Adım 2: Nasıl Çalışır?

Nasıl çalışır
Nasıl çalışır
Nasıl çalışır
Nasıl çalışır

Tamam, yazılımın nasıl çalıştığı hakkında size daha detaylı bilgi vermek istiyorum.

Yazılım bazı Hizmetlerden oluşur. Her Hizmetin kendi Modülleri vardır. (Bir hizmeti bir sınıf, modüllerini de yöntemleri olarak düşünebilirsiniz). Her modül, yürütülebilir bir nesne olarak kabul edilebilir. Bu nedenle, yazılımımız bazı yürütülebilir nesnelerden oluşur.

Burada bazı servislerimiz ve alt servislerimiz veya bunların modülleri var:

  • Gmail

    Okunmamış Mesajlar

  • Hava Durumu

    • Şuanki sıcaklık
    • Bugünkü Durum
    • Bugün Düşük / Yüksek
    • Yarın Durum
    • Yarın Düşük / Yüksek
    • Yağış Tahmini
    • Gün doğumu gün batımı
  • Zaman

    • Şimdiki zaman
    • Geçerli tarih
  • Doğum ve Ölüm

    • Dünya Doğumu
    • Dünya Ölümü

İçinde modülleri tutan dairesel bir kuyruk var. Biz buna Operasyon Kuyruğu diyoruz. Her modülün yürütülebilir bir nesne olduğunu söyledim. Yani cihaz üzerindeki butona bastığınızda işlem kuyruğuna bakar ve sonraki modülü (veya nesneyi) çalıştırır.

İşlem kuyruğu üyelerini daha sonra anlatacağım web tabanlı kullanıcı arayüzünde düzenleyebilirsiniz. Şimdilik, size bir örnek vereceğim. Mevcut işlem sırasını şu şekilde düşünün:

KUYRUK (Okunmamış Mesajlar | Yağış Tahmini | Şimdiki Saat)

Basma düğmesine basarsanız, Okunmamış Mesajlar yürütülmelidir.

KUYRUK (Okunmamış Mesajlar | Yağış Tahmini | Şimdiki Saat)

Bu nedenle, cihaz sizinle konuşmak için topladığı verileri (burada, google mail API beslemesinden alınan okunmamış mesajlarınızın sayısı) kullanacaktır. Ama nasıl? Burada NodeMCU, MP3 Modülüne anlamlı bir cümle kurmak için hangi MP3 parçasını ne zaman çalması gerektiğini söyleyecektir. Bunu başarmak için farklı kuyruklar, zamanlayıcılar ve algoritmalar tasarladım. (Eğer bir c++ kullanıcısıysanız ve mikrodenetleyicileri seviyorsanız, kodu kendiniz inceleyebilirsiniz.)

Böylece duyacaksınız, cihaz konuşmaya başlıyor: Gmail gelen kutunuzda 4 okunmamış mesajınız var.

Düğmeye tekrar basarsanız, sonraki modül ele alınması gereken Yağış Tahmini olacaktır.

KUYRUK (Okunmamış Mesajlar | Yağış Tahmini | Şimdiki Saat)

Şöyle bir şey duyacaksınız: Şemsiyenizi unutmayın, yarın yağmurlu. Ve dahası… Bir harika şey daha: bazı modüller için (yağış tahmini gibi), aynı durumlar için rastgele cümleler bekleyebilirsiniz. Örneğin, yarın yağış varsa ve kar değil de yağmur varsa, "yarın yağmur olasılığı var", "kendi güneş ışığını getir, yarın yağmurlu", "tut tut, yarın yağmur gibi görünüyor" bekleyebilirsiniz., veya …

Her hizmet için farklı verileri nasıl elde ederiz?

  • Gmail

    Okunmamış MesajlarGoogle, Gmail dahil olmak üzere farklı hizmetlerine erişebileceğiniz güçlü bir API'ye sahiptir. Ancak güvenlik amacıyla OAuth gibi farklı kimlik doğrulama ve yetkilendirme yöntemlerine ihtiyacınız var. ESP8266, farklı karmaşık karma algoritmaları çalıştırmak için o kadar güçlü değil. Bu nedenle, gmail gelen kutusuna erişmek için daha eski ve basit bir oturum açma teknolojisi kullandım. RSS Okuyucular tarafından da kullanılabilen Google Atom Feed'dir. Gmail beslemesine erişmek için bir HTTP isteği gönderiyoruz ve yanıtı XML biçiminde. Bu yüzden okunmamış mesajları sayar ve programımızda kullanırız

  • Hava DurumuFarklı hava durumu bilgileri almak için Yahoo Hava Durumu API'sini kullanıyoruz. Son zamanlarda, tıpkı Google gibi, Yahoo da Hava Durumu API'sini değiştirdi, bu nedenle verilerine erişmek için OAuth standartlarını kullanmanız gerekecek. Ne yazık ki, ESP8266 karmaşıklığının üstesinden gelemez, bu yüzden sorunu çözmek için bir numara kullanacağız. Yahoo Hava Durumu API'sine doğrudan erişmek yerine, isteğimizi bir sunucudaki özel bir dosyaya göndereceğiz. Dosyamız Yahoo Hava Durumu'ndan veri alır ve bize gönderir.

    • Tomorrow ConditionTomorrow Condition size yarının bugünden daha sıcak mı yoksa daha soğuk mu olduğunu ya da sıcaklıkta hissedilir bir değişiklik olup olmayacağını söyleyecektir. Bunu başarmak için "bugün düşük / yüksek" ile "yarın düşük / yüksek" karşılaştırırız. Bu algoritmayı nasıl yazdığımı ve nasıl çalıştığını program kütüphane dosyasından inceleyebilirsiniz.
    • Yağış TahminiYahoo Hava Durumu belgelerini kontrol ederseniz, Durum Kodları tablosunu görebilirsiniz. Söylediği gibi, mevcut koşulları tanımlamak için yanıtta Koşul kodları kullanılır. Yağış olup olmayacağını ve yağmur mu yoksa kar mı olduğunu öğrenmek için yarın durum kodlarını ve anlamlarını kullanacağız.
  • TimeNTP, Ağ Zaman Protokolü anlamına gelir. Bilgisayar sistemleri arasında saat senkronizasyonu için bir ağ protokolüdür. İnternet erişimimiz olduğundan, bir NTP Sunucusundan zaman almak için bir NTP İstemcisi kullanacağız ve bunu ESP8266 dahili zamanlayıcı ile senkronize edeceğiz (Arduino kullanıcısıysanız millis() ile kullandığınız gibi).
  • Doğum ve ÖlümGünün başından itibaren doğum ve ölüm sayısını hesaplayacağız (NTP Client sayesinde, günün başlangıcından itibaren saniye sayısını almak kolaydır). Ekolojiden dünya doğum ve ölüm oranlarını kullandım.

Adım 3: Yazılımı Kurun

Yazılımı Kur
Yazılımı Kur

Programımızı NodeMCU'ya yüklemek için Arduino IDE kullanacağız. En son Arduino IDE'yi resmi sitelerinden indirip yükleyebilirsiniz:

Başlamadan önce Nodemcu için Arduino IDE'yi kurmanız gerekir. Buradaki adımları anlatmayacağım çünkü konu dışı olabilir. Ancak bu mükemmel talimatın adımlarını ve açıklamalarını takip edebilirsiniz.

Programımız bazı kütüphane bağımlılıklarına sahiptir. Yazılım bağımlılığı nedir?

Bağımlılık, bir yazılım parçasının başka bir yazılıma bağlı olduğunu belirtmek için kullanılan geniş bir yazılım mühendisliği terimidir.

Kişisel Asistan programını derleyebilmek için bilgisayarınızda olması gereken Arduino kütüphanelerinin bir listesi:

  • ArduinoJson
  • DFRobotDFPlayerMini
  • NTPC istemcisi

Bunları Github sayfalarından birer birer indirebilir, ardından zip dosyalarını Arduino kütüphane dizinine çıkarabilirsiniz. Sisteminizdeki yolu: C:\Users [kullanıcı adınız] Documents\Arduino

Kodu temiz tutmak ve karmaşıklığı önlemek için bir kitaplık yazdım. PersonalAssistant-Library.zip dosyasını indirin ve Arduino kütüphane dizinine çıkarın. Tıpkı daha önce bu üç kütüphane için yaptığınız gibi.

YahooWeather.php dosyası

ESP8266, karma algoritmaları gerçekleştirecek kadar güçlü olmadığı için, OAuth standartlarına dayalı olarak Yahoo Weather API'ye HTTP istekleri göndermek için doğrudan kullanamayız. Bu yüzden cihazımız ile Yahoo Weather API arasında bir dosya kullanacağız. YahooWeather.zip dosyasını indirebilir, ayıklayabilir ve YahooWeather.php dosyasını bir web sunucusuna koyabilirsiniz. Örneğin, etki alanınız example.com ise ve dosyayı api dizinine koyarsanız, api uç noktanız example.com/api/YahooWeather.php olur. Bu uç noktaya hava durumu verileri istekleri göndereceksiniz.

Program Taslağı ve FFS (Flash Dosya Sistemi)

NodeMCU kartınız, veri depolamak için 4 MB flash dosya sistemine sahiptir. Peki, elimizde olduğunda, neden kullanmayalım?

Cihazımızda iki kullanıcı arayüzü olduğunu söylediğimi hatırlıyor musunuz? Bu tek basma düğmesinin yanı sıra, ikinci kullanıcı arayüzümüz basit bir web tabanlı uygulamadır. Bu uygulama ile her bir modülü etkinleştirerek/devre dışı bırakarak, servis ayarlarını veya WiFi SSID ve şifre ayarlama gibi cihaz konfigürasyonunu değiştirerek işlem kuyruğunu değiştirebilirsiniz. Tüm bu dosyaları NodeMCU Flash Dosya Sisteminde saklayacağız ve web tarayıcılarından kullanıcı isteklerini işlemek için hafif bir web sunucusu çalıştıracağız.

Yapılandırma Dosyasını Düzenleme

PersonalAssistant-Sketch.zip dosyasını indirin ve bilgisayarınızda bir yere çıkarın. Bulunan config.json dosyasını açın:

PersonalAssistant/data/config.json

Notepad, notepad++, Atom vb. herhangi bir metin veya kod düzenleyiciyi kullanabilirsiniz. Dosya bir json veri yapısıdır, bu nedenle insan tarafından okunabilir anahtar / değer çiftidir ve kolayca düzenleyebilirsiniz. Bu alanları değiştirebilirsiniz:

  • Gmail

    • kullanıcı adı: @gmail.com ile birlikte Gmail kullanıcı adınız
    • şifre: Gmail şifreniz
  • Hava Durumu

    • woeid: hava durumu bilgilerini almak istediğiniz yer. WOEID (Where On Earth Tanımlayıcı), Yahoo tarafından konum için kullanılan bir referans tanımlayıcıdır. Bu bağlantıdan WOEID konumlarında arama yapabilirsiniz.
    • api: API bitiş noktasıdır. yahooweather.php dosyanızın bağlantısı.
    • appId, ConsumerKey ve ConsumerSecret: Yahoo Weather API'ye erişmek için Yahoo geliştiriciler sayfasında bir proje oluşturmanız gerekir. Bu size API'yi kullanmak için gerekli olan bir Tüketici Anahtarı ve Sırrı verecektir. Başlamak için Yahoo Weather Developer sayfasını ziyaret edin ve bir APP Oluşturun.
  • Saat dilimi

    saat dilimi: bulunduğunuz yere göre saat dilimini girin. Pozitif veya negatif bir kayan sayı olabilir ve birimi saattir

  • Wifi

    • ssid: Ağınızın SSID'si.
    • şifre: ağ şifreniz. NodeMCU, wifi ağınıza bağlanmak için ssid ve şifre kullanacaktır.

Program Kroki ve FFS verilerini yükleme

NodeMCU'yu bir mikro USB - USB kablosu kullanarak bilgisayarınıza bağlayın.

Şimdi bulunan PersonalAssistant.ino dosyasını açın:

PersonalAssistant/PersonalAssistant.ino

Arduino IDE'de Araçlar > Pano'dan NodeMCU 1.0 (ESP-12E Modülü) öğesini seçin. Araçlar > Bağlantı Noktası'ndan doğru bağlantı noktasını seçin. NodeMCU'nuzu temsil eder.

Şimdi Araçlar > ESP8266 Sketch Data Upload'ı seçin, bu veri klasörünün içeriğini ESP8266'ya yükleyecektir. Tamamlanana kadar birkaç dakika bekleyin. Ardından, Sketch> Upload'ı seçin veya programı yüklemeye başlamak için klavyenizdeki Ctrl + U tuşlarına basın. "Yükleme tamamlandı" mesajını görene kadar bekleyin.

Adım 4: Mikro SD Kartı Kurun

MP3 dosya parçalarını saklamak için bir mikro SD kart kullanıyoruz. Hangi dosyanın hangi saatte çalınacağına karar veren NodeMCU'dur ve DFPlayer Mini MP3 dosyalarının kodunu çözerek anlamlı bir cümle kurmasına yardımcı olur.

İhtiyacım olan ses parçalarını oluşturmak için Amazon Polly'yi kullandım.

Amazon Polly, metni gerçeğe yakın konuşmaya dönüştüren, konuşan uygulamalar oluşturmanıza ve tamamen yeni konuşma özellikli ürün kategorileri oluşturmanıza olanak tanıyan bir hizmettir.

Unutmayın, cihazımız dinamik konuşmak için Amazon Polly API kullanmaz. Bazı statik çevrimdışı ses parçalarımız var ve bunları bir araya getirerek farklı cümleler kuruyoruz.

Bu siteyi MP3 dosyaları oluşturmak için kullandım. Seçtiğim ses çıkışı US English / Salli idi.

Yapmanız gereken tek şey, microSD.zip dosyasını indirmek ve ardından onu micro SD kartınıza çıkarmaktır. Gerekli 78 MP3 dosyasının tümünü içerir.

Muhtemelen Micro SD Kartınız ve adaptörü ile birlikte gelir. Mikro SD Kartınızı adaptörüne takabilir ve dizüstü bilgisayarınıza takabilirsiniz. Bilgisayarınız kart okumayı desteklemiyorsa, harici bir Kart Okuyucu kullanmalısınız.

Adım 5: Şemaları Tasarlamak ve PCB'yi Ayarlamak

Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak
Şemaları Tasarlamak ve PCB'yi Ayarlamak

Autodesk EAGLE kullanarak Schematic ve Board'u tasarladım. PersonalAssistant-PCB.zip'e hem SCH hem de BRD dosyalarını ekledim. Kartınızı sipariş etmek ve almak için kolayca düzenleyebilir ve / veya yerel veya çevrimiçi bir PCB üreticisine gönderebilirsiniz.

Bahsedilmesi gereken bir şey daha var, ESP8266 3.3v'de çalışıyor, DFPlayer Mini ise 5v'de çalışıyor. Bu iki modülün birbiriyle seri arayüz üzerinden konuşması gerektiğinden, ESP8266'nıza zarar vereceğinden 5v çıkışı 3.3v girişe doğrudan bağlayamıyoruz. Bu yüzden 5v'den 3.3v'ye bir seviye dönüşümüne ihtiyacımız olacak. Bunu gerçekleştirmek için bir sinyal diyotu ve 10K direnç kullanıyoruz.

Adım 6: Lehimleyin

Lehimlemek
Lehimlemek
Lehimlemek
Lehimlemek

Birkaç bileşeniniz olduğu için kartın montajı oldukça basittir. Her öğeyi doğru yerine kolayca yerleştirmek için 5. adımdaki şematik ve pano tasarımlarını izleyin.

Dirençleri ve diyotu küçük oldukları için lehimleyerek başladım. Gereksiz kuyruklarını tel makası ile kolayca kesebilirsiniz. Yukarıdan aşağıya 1K, 10K ve 10K direnç koymalısınız.

PCB üzerindeki tüm NodeMCU ve DFPlayer Mini pinlerini lehimlemeniz gerekmez. Pimleri bir yolla lehimlemek yeterlidir.

Unutmayın, hoparlörler ve diyotlar polariteye sahiptir. Bileşenlerinizde bir hoparlör ve bir diyot var. Diyot için siyah çizgili taraf, negatif taraf veya katottur.

7. Adım: Muhafaza

Kuşatma
Kuşatma
Kuşatma
Kuşatma
Kuşatma
Kuşatma

Yaratıcı bir şekilde süslü bir muhafaza tasarlamaya karar verdim. Tasarım sırasında garip şekli hakkında endişelendim ama sonunda o kadar da kötü değildi. En azından bir kuyruklu piyanoya benziyor ve elinizde tutmak harika bir his!

6 yüzlü klasik altı yüzlü kübik şekil yerine çok katmanlı bir muhafaza tasarladım. Aşağıdan yukarıya doğru her katman kendi alt katmanına uzanır. (Onları aşağıdan yukarıya L0 ila L6 olarak adlandırdım)

Renkler ve Kalınlık

En güçlü kontrastı oluşturmak için iki tamamlayıcı renk kullanabilirsiniz, örneğin:

  • Kırmızı ve yeşil
  • Mavi ve Turuncu
  • Sarı ve Mor
  • Mavi ve sarı

Cihazın içini görebilmeniz için üst katman için şeffaf akrilik kullandım.

Üst katın (kat-6) kalınlığı 2 mm, diğer katların (kat-0'dan kat-5'e) kalınlığı ise 4 mm olmalıdır. Benim yaptığım gibi 2.8 mm akrilik shield kullanmak isterseniz sorun yok. Ancak ofset için katman-1 ve katman-3'ten iki dizi kesmeniz gerekir.

Muhafazayı monte etmek için alt katmandan (L0) başlayın. Üzerine tahtayı koyun, daha kısa cıvataları kullanın ve somunlarla sıkın. Şimdi, katman-0'ın altından dört uzun cıvatayı takabilirsiniz. Kule gibi bir şey. Ardından, diğer katmanları üzerlerine kolayca monte etmeye devam edebilirsiniz.

Not: Alt katman ile tahta arasında isteğe bağlı bir pul kullanabilirsiniz.

Ayrıca cihaz bağlantı noktaları (güç ve mikro SD kart) için bilgi metinleri ekledim. Üst katmanda lazer gravür kullanabilirsiniz.

Hem CDR hem de DXF dosya formatlarını dahil ettim. Bunları indirebilir, düzenleyebilir ve lazer kesim için kullanabilirsiniz.

Adım 8: Web Tabanlı Kullanıcı Arayüzüne Erişim

Web Tabanlı Kullanıcı Arayüzüne Erişim
Web Tabanlı Kullanıcı Arayüzüne Erişim

Cihazı Çalıştırın

Herhangi bir 5v mikro USB şarj cihazı kullanarak cihazı açabilirsiniz. Mikro USB'yi, NodeMCU'nuzdaki mikro USB girişi olan cihazın Güç bağlantı noktasına takın.

Kullanıcı Arayüzüne Erişin

ESP8266 Flash Dosya Sistemine bazı dosyalar yüklediğimizi hatırlıyor musunuz? Kullanmanın zamanı geldi. Tek ihtiyacınız olan, ağ üzerinde ESP8266'ya atanan IP Adresidir. IP adresini bulmanın birçok farklı yolu vardır. Bunlardan bazılarını burada listeleyeceğim:

  • Yönlendirici yapılandırma sayfanızda, DHCP Kira Listesinde bir yerde, ağınızdaki IP Adreslerine sahip cihazların listesini görebilirsiniz.
  • Microsoft Windows ve macOS'ta terminalde arp -a gibi komutları çalıştırabilirsiniz.
  • Android ve iOS'ta Fing gibi uygulamaları kullanabilirsiniz. (Android / iOS)
  • Linux'ta Nmap gibi araçları kullanabilirsiniz.

IP Adresini bulduktan sonra, web tarayıcınızı kullanarak açın. Modülleri etkinleştirerek/devre dışı bırakarak işlem sırasını değiştirebilirsiniz.

9. Adım: Son Düşünceler

Bu proje çok zaman ve enerji tüketiyordu. Kişisel Asistan'a daha birçok seçenek ekleyebilirsiniz. Gelecekteki gelişim için bazı bölümleri açık bıraktım. Bazı parçalar şöyle:

  1. Daha fazla hizmet ve modül ekleme. Örneğin sayıları saymak, zar atmak veya yazı tura atmak.
  2. Ağa bağlandıktan sonra cihaz IP Adresini konuşabilir. IP Adresi bulma işlemini basitleştirmek için bu seçeneği ekleyebilirsiniz.
  3. Web tabanlı kontrol panelinde WiFi ayarlarını değiştirme özelliği eklendi.
  4. Web tabanlı kontrol panelinde servis ayarlarını değiştirme yeteneği eklendi. (Html formları hazır. İstekleri işlemeniz gerekiyor)
  5. Cihazın farklı durumlarında daha fazla sesli yanıt ekleme.
  6. Web tabanlı kontrol paneli için bir giriş sayfası ekleme. Bunu, HTTP başlık satırlarına Çerezler ekleyerek/karşılaştırarak yapabilirsiniz.

Ve bu talimatla ilgili fikirlerinizi bilmek isterim.:)

Önerilen: