İçindekiler:

Bildirici: 17 Adım
Bildirici: 17 Adım

Video: Bildirici: 17 Adım

Video: Bildirici: 17 Adım
Video: Steroidler nedir? Anabolik (anabolic) Steroidler nedir? Steroidler hakkında bilmemiz gerekenler.. 2024, Temmuz
Anonim
bildirimci
bildirimci

Cihaz örneğin IFTTT sistemine bağlanabilir ve yeni bir posta göründüğünde tepki verebilir. app.remoteme.org'da Arduino'ya hangi baytların gönderileceğini aradıktan sonra bir bağlantı oluşturacağız ve Arduino biraz ışık efekti gösterecek ve SDcard'dan biraz mp3 çalacak.

Adım 1: Gerekenler

İhtiyaç duyulan şey
İhtiyaç duyulan şey
İhtiyaç duyulan şey
İhtiyaç duyulan şey
  • NodeMCU, WemOS veya benzeri bir şey
  • WS2812B diyotlu iki LED halkası (16. led halkalarını kullandım)
  • DFRobotDFPlayerMini – bu mp3 çalar. SDcard'dan mp3 çalar ve RX/TX ile Arduino ile iletişim kurar.
  • hoparlör
  • Hafıza kartı
  • Mantık dönüştürücü -Bunu kullandım, mp3 çalar 5V ve Arduino 3.3 kullanıyor, bu yüzden bu dönüştürücüye ihtiyacımız var
  • Kendi kendimize basit PCB yapmak için bilgi ve beceriler

Kule:

  • karton – iki farklı kalınlık
  • Kopya kâğıdı
  • aliminyum folyo

2. Adım: Kule İnşası

Kule Binası
Kule Binası
Kule Binası
Kule Binası
Kule Binası
Kule Binası
Kule Binası
Kule Binası

Kulenin planının yandan görünüşü (ilkokulda biten teknik çizim maceram), tüm boyutlar milimetre cinsinden.

Çalışma prensibi

  1. ışık saçan LED'lerin halkası
  2. Kopya kâğıdı
  3. Kartondan yapılmış ve alüminyum folyo ile kaplanmış, led halkalardan gelen ışıkları yansıtması için kesik koni, şekil 3' = kesik ağ
  4. karton boru - kuleleri dikey olarak tutar, borunun içinde ledler için kablolar bulunur
  5. Boy sana bağlı 85mm
  6. Tüm elektronik parçaların içindeki Stand

Tüm yatay elemanlar daha kalın kartondan yapılmalıdır.

Adım 3: Kablo Şeması

Bağlantı şeması
Bağlantı şeması
Bağlantı şeması
Bağlantı şeması
Bağlantı şeması
Bağlantı şeması
Bağlantı şeması
Bağlantı şeması

Mp3 çalar 5V voltaj ile beslenir ve Arduino ile TX/RX üzerinden haberleşir, Arduino'nun kendisi 3.3V voltajda çalıştığı için bir mantık dönüştürücüye ihtiyaç vardır. Halkaların kontrolü de mantık dönüştürücü aracılığıyla Arduino'ya (D5, D6) bağlıdır.

Depoda, PCB planlı kartal dosyalarını bulacaksınız.

Arduino ve mp3 çaları sadece dişi altın pinleri kullanmak için kalıcı olarak lehimlememenizi öneririm.

Adım 4: Çalışma Prensibi

Arduino'muz WebSockets kullanarak app.remoteme.org sistemine bağlanır (hazır kütüphaneler vardır) bu bağlantı üzerinden 5 baytlık mesajlar gönderilir:

  • üst LED halkası için ışık efektinin ilk baytı
  • alt LED halkası için ikinci bayt ışık efekti
  • çalınacak mp3 dosyasının numarası
  • ışık efektinin ve mp3'ün ne kadar süreyle oynatılacağı saniye sayısı
  • mp3'ün bir kez mi yoksa bir döngü içinde mi çalınması gerektiği

kaynak kodu

Tüm kaynak kodu burada bulabilirsiniz

SingleRing.cpp ve SingleRing.h dosyalarında LED halkalarının etkilerini kontrol eden bir sınıf vardır. setMode(int m) işlevine bakarak başlamanızı öneririm:

void SingleRing::setMode(int m) { switch (m) { case 0:setConfiguration(0, 0, 50, 0, 5, 1); break;//off =0 durum 1:setConfiguration(6, 0, 50, 0, 0, 20); break;//solid standart yeşil durum 2:setConfiguration(6, 0, 0, 50, 0, 20); break;//sürekli standart mavi durum 3:setConfiguration(6, 50, 0, 0, 0, 20); break;//katı standart kırmızı büyük harf 4:setConfiguration(6, 50, 10, 0, 0, 20); break;//katı standart turuncu kasa 5:setConfiguration(1, 0, 100, 0, 5, 2); break;//polis saat yönünde yeşil durumda 6:setConfiguration(1, 0, 100, 0, 5, -2); break;// polis yeşil vakayı geri döndür 7:setConfiguration(1, 0, 0, 100, 5, 2); break;//polis saat yönünde mavi durum 8:setConfiguration(1, 0, 0, 100, 5, -2); break;// polis mavi vakayı geri döndür 9:setConfiguration(1, 100, 0, 0, 5, 2); break;//polis standardı kırmızı durum 10:setConfiguration(1, 100, 0, 0, 5, -2); break;// polis kırmızı vakayı geri aldı 11:setConfiguration(1, 100, 20, 0, 5, 2); break;//polis standart turuncu vaka 12:setConfiguration(1, 100, 20, 0, 5, -2); break;// polis turuncu vakayı geri aldı 13:setConfiguration(2, 0, 0, 50, 8, 10); break;//çapraz standart mavi durum 14:setConfiguration(2, 0, 0, 50, 8, -10); break;// çapraz dönüş mavi durum 15:setConfiguration(5, 0, 50, 0, 0, 20); break;//yanıp sönen standart yeşil durum 16:setConfiguration(5, 0, 50, 0, 0, -20); break;// yanıp sönen odwyrtka yeşil durum 17:setConfiguration(5, 0, 0, 50, 0, 20); break;//standart mavi durum 18:setConfiguration(5, 0, 0, 50, 0, -20); break;// mavi yanıp sönme durumu geri al 19:setConfiguration(5, 50, 0, 0, 0, 20); break;//yanıp sönen standart kırmızı durum 20:setConfiguration(5, 50, 0, 0, 0, -20); break;// yanıp sönme kırmızı durum 21:setConfiguration(5, 50, 10, 0, 0, 20); break;//standart turuncu durum 22:setConfiguration(5, 50, 10, 0, 0, -20); break;// yanıp sönme turuncuya dön varsayılan: setConfiguration(0, 0, 50, 0, 5, 1); ara;//kapalı =0 } }

verilen parametreye bağlı olarak, halka efekti gösterecektir. Yeni bir mod ekleyerek veya tamamen yeni bir efekt ekleyerek setConfiguration işlevini yeni parametrelerle (renk değişikliği, görüntü hızı) çağırarak kendi efektinizi ekleyebilirsiniz - veya beğenirsem yorumlarda bana bildirin yeni efekt ekleyeceğim

arduino.ino:

#include "Arduino.h"#include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h"

#Dahil etmek

#include #include #include "SingleRing.h"

#Dahil etmek

#include #include

#Dahil etmek

#define WIFI_NAME ""

#define WIFI_PASSWORD "" #DEVICE_ID 205 #define DEVICE_NAME "siren" #define TOKEN ""

#define DIODES_COUNT 16

SingleRing üst = SingleRing(DIODES_COUNT, D5);

SingleRing alt=SingleRing(DIODES_COUNT, D6);

SoftwareSerial mySoftwareSerial(D4, D3); // RX, TX

DFRobotDFPlayerMini myDFPlayer; RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);

ESP8266WiFiÇoklu WiFiÇoklu;

geçersiz kurulum() { mySoftwareSerial.begin(9600); Seri.başla(115200);

if (!myDFPlayer.begin(mySoftwareSerial)) { //mp3 ile iletişim kurmak için softwareSerial kullanın.

Serial.println(F("Başlanamıyor:")); Serial.println(F("1. Lütfen bağlantıyı tekrar kontrol edin!")); Serial.println(F("2. Lütfen SD kartı takın!")); while (doğru); } Serial.println(F("DFPlayer Mini çevrimiçi."));

myDFPlayer.setTimeOut(500); //Seri iletişim zaman aşımını 500ms ayarla

myDFPlayer.volume(30);

myDFPlayer. EQ(DFPLAYER_EQ_NORMAL);

myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); WiFiMulti.addAP(WIFI_NAME, WIFI_PASSWORD); while (WiFiMulti.run() != WL_CONNECTED) { gecikme(100); }

remoteMe.setUserMessageListener(onUserMessage);

remoteMe.setupTwoWayCommunication();

remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);

top.setup();

alt.setup(); top.clear(); alt.clear(); }

boole açıkKapalı = doğru;

imzasız uzun turnOffMillis = 0;

void onUserMessage(uint16_t senderDeviceId, uint16_t dataSize, uint8_t *veri) {

uint16_t konum = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t topMode = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t zaman = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t modu = RemoteMeMessagesUtils::getUint8(veri, konum);

alt.setMode(bottomMode);

top.setMode(topMode); if (mod == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(trackNumber); } kapatıldı = yanlış; turnOffMillis = millis() + 1000 * zaman; }

boşluk döngüsü()

{ remoteMe.loop(); top.loop(); alt.döngü(); if (turnOffMillis

}

açıklama:

#define WIFI_NAME ""#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "bildirici" #define TOKEN ""

Yukarıdaki verileri sağlamamız gerekiyor, buradaki bağlantıda ayrıntılı talimatlar ayrıca remoteme.org'a nasıl kayıt olunacağını ve belirtecin nasıl oluşturulacağını da gösterdim, void onUserMessage(uint16_t senderDeviceId, uint16_t dataSize, uint8_t *veri) { uint16_t konum = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t topMode = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t zaman = RemoteMeMessagesUtils::getUint8(veri, konum); uint8_t modu = RemoteMeMessagesUtils::getUint8(veri, konum);

alt.setMode(bottomMode);

top.setMode(topMode); if (mod == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(trackNumber); } kapatıldı = yanlış; turnOffMillis = millis() + 1000 * zaman; }

Arduino'ya mesaj geldiğinde ve bildirimi görüntülediğinde bu fonksiyon çağrılır. Kod o kadar açık ki kendini anlatıyor. Sınıfların ayrıntılarını buradaki ve buradaki belgelere atıfta bulunuyorum

void loop(){ remoteMe.loop(); top.loop(); alt.döngü(); if (turnOffMillis<millis()){

if (!kapalı) {

top.clear();

alt.clear(); myDFPlayer.stop(); kapatıldı = doğru; } }

Döngüde nesnelerin döngü işlevlerini çağırıyoruz ve ayrıca bildirimlerin görüntülenme süresi geçtiyse diyotları ve sesi kapatıyoruz.

Adım 5: Mp3 Çalar

Mp3 oynatıcı
Mp3 oynatıcı

Arduino ile TX / RX üzerinden iletişim kurar - Oyuncunun detayları burada ve kütüphane burada

SD karta mp3 dosyaları yüklüyoruz. Karttaki dosyalar alfabetik olarak sıralanır ve ardından şu numara aranır:

myDFPlayer.play(5);

SD karttaki beşinci dosyayı kök dizinden oynatıyoruz. Bu yüzden SD kart önekleri 01, 02 vs.'de dosya vermek iyidir. Benim durumumda yukarıdaki baskı ekranındaki gibi görünüyor.

Sesli komutlar oluşturmak için bu sayfayı kullanabilirsiniz.

Adım 6: Programı Arduino'ya Yükleme

Programı Arduino'ya Yüklemek
Programı Arduino'ya Yüklemek
Programı Arduino'ya Yüklemek
Programı Arduino'ya Yüklemek

Arduino'ya taslak yüklemeden önce, gerekli kütüphaneleri indirmeniz gerekiyor, burada ayrıntılı talimatları bulacaksınız.

ayrıca DFRobotDFPlayerMini kütüphanesini ve Adafruit_NeoPixel'i kurmamız gerekiyor.

7. Adım: Kontrol

Kontrol
Kontrol
Kontrol
Kontrol

Arduino'muza beş bayt gönderiyoruz

  • üst LED halkası için ışık efektinin ilk baytı
  • alt LED halkası için ikinci bayt ışık efekti
  • çalınacak mp3 dosyasının numarası
  • ışık efektinin ve mp3'ün ne kadar süre oynatılacağı saniye sayısı
  • mp3'ün bir kez mi yoksa bir döngüde mi çalınması gerektiği (bir döngüde çalınması gerekiyorsa 1)

bayt göndererek

07 0F 01 05 01

Üst halka polis ışıklarını gösterecektir (mod 6) altta bir yeşil yanıp sönme (mod 15) (singleRing.cpp adresindeki setMode işlevini ve yanındaki yorumları kontrol edin). SD karttan ilk dosya 5 saniye boyunca oynatılacaktır. Ve dosya döngüde oynatılacaktır (arduino.ino'da onUserMessage işlevini kontrol edin)

Bu baytları gönderelim. Yukarıdaki ekrana bakın ve 1, 2, 3 ile yazılan sırayla simgeleri tıklayın. Pencere belirir.

Ardından ikinci ekrana bakın - ve pencereyi ikinci ekrandaki gibi doldurun

Görüntülenen pencere cihaza mesaj göndermek için kullanılır. Alan 1'de gönderen cihazı seçin – sadece bir cihazımız olduğu için onu seçiyoruz (bu zorunlu bir alandır ve mesaj gönderdiğimiz cihazla aynı olması önemli değil) Alan 2'de bayt veriyoruz gönder (kırmızı ile 2'ye girdiğimiz değer bir dize olarak gösterilecektir) ardından Gönder düğmesine tıklayın.

Mesajı gönderdikten sonra, bildirimcimiz uygun ışık efektlerini görüntüleyerek ve seçilen mp3'ü çalarak tepki vermelidir. 0 ile 22 arasında bir sayının ilk iki baytını vererek farklı efektler denemenizi tavsiye ederim (setMode işlevindeki açıklamaya bakın).

8. Adım: URL'leri Kullanarak Mesaj Gönderme

URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme
URL'leri Kullanarak Mesaj Gönderme

IFTTT gibi harici bir uygulamadan gelen bildirimleri görüntülemek istiyorsak, önceki adımda pencerede yaptığımızın tam olarak aynısını yapacak bir URL'ye ihtiyacımız var. remoteme.org, REST APi'yi sağlar. Soldaki (sonuncusu) swagger sekmesine tıklayarak ona gidin. Bir sayfa görüntülenecek, bu sayfada URL'lerimizi de deneyebiliriz.

İlk ekranda, ikinci ekrandaki gibi genişletmeniz, ardından verileri doldurmanız gereken fonksiyona sahipsiniz.

verileri yukarıdaki ekran görüntüsündeki gibi doldurun. Yürüt'ü tıkladıktan sonra bir mesaj göndereceğiz

070F010501

Alıcı 205 id'li cihazdır, aynı cihaz aynı zamanda göndericidir. “No_RENEVAL” ayarlarına sahip MessageId önemsizdir. Ardından Execute'a tıklayın. Notificator, uygulamadan mesaj gönderirken olduğu gibi tepki verecektir. Aşağıdaki REST'i çağırdıktan sonra, çağrılan URL'dir - üçüncü ekrana bakın. Ve tarayıcı URL'sine kopyalayıp yapıştırın yeşil kenarlıkla işaretlenmiştir. Dördüncü ekranda, URL yapıştırıldıktan sonra krom tarayıcım

Benim durumumda, URL:

app.remoteme.org/api/*/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/

9. Adım: Mesaj Gönderilecek Herhangi Bir URL

Mesaj Gönderilecek Herhangi Bir URL
Mesaj Gönderilecek Herhangi Bir URL

Önceki adımda, cihazınıza veri gönderen bir URL'niz var. Ne yazık ki, app.remoteme.org'dan çıkış yaptıktan sonra çalışmayı durduruyor. Bunun nedeni, kimlik doğrulama jetonunu sağlamamış olmamız ve artık oturum açmış olmamamızdır. Jetonumuzu alalım (veya yeni bir tane oluşturalım) ve bunu yıldız yerine URL'ye yapıştıralım.

Ekrana bakın ve URL'deki * kodunu jetonunuzla değiştirin

benim durumumda belirteç:

~267_ZxoWtJ)0ph&2c

bu yüzden nihai URL'm şöyle görünüyor:

app.remoteme.org/api/~267_ZxoWtJ)0ph&2c/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/

Artık giriş yapmasak bile arayabiliriz. Ve arandığında cihazımıza mesaj gelecek 205

Adım 10: IFTTT 1/7 ile Entegrasyon

IFTTT 1/7 ile Entegrasyon
IFTTT 1/7 ile Entegrasyon

Yukarıdaki adımda oluşturulan URL, harici uygulamalar tarafından yürütülmeye uygundur. Nasıl kullanılacağını IFTTT'de göstereceğim. Bunu, e-posta adresine (Gmail hesabı) bir e-posta geldiğinde bildirimin açılması için yapılandıracağım.

IFTTT'de oturum açın. Ardından Uygulamalarım sekmesine gidin ve ardından “Yeni Uygulama” - ilk ekran

Adım 11: IFTTT 2/7 ile Entegrasyon

IFTTT 2/7 ile Entegrasyon
IFTTT 2/7 ile Entegrasyon

Sonraki “+bu”yu tıklayın

Adım 12: IFTTT 3/7 ile Entegrasyon

IFTTT 3/7 ile Entegrasyon
IFTTT 3/7 ile Entegrasyon

Ardından “Arama hizmetleri” alanına “Gmail” yazın.

Ardından "gelen kutusunda yeni e-posta" (Bazı yapılandırma gerekebilir).

Adım 13: IFTTT 4/7 ile Entegrasyon

IFTTT 4/7 ile Entegrasyon
IFTTT 4/7 ile Entegrasyon

şimdi “+ buna” tıklıyoruz

Adım 14: IFTTT 5/7 ile Entegrasyon

IFTTT 5/7 ile Entegrasyon
IFTTT 5/7 ile Entegrasyon

“Web kancaları”nı bulun ve tıklayın

Adım 15: IFTTT 6/7 ile Entegrasyon

IFTTT 6/7 ile Entegrasyon
IFTTT 6/7 ile Entegrasyon

ardından “Bir web isteği yapın”

Adım 16: IFTTT 7/7 ile Entegrasyon

IFTTT 7/7 ile Entegrasyon
IFTTT 7/7 ile Entegrasyon

url'mizin URL'sini belirteçle tamamlıyoruz. Uygulama / json'a içerik yazın ve “eylem oluştur” ve Bitir'e tıklayın. Şimdi uygulamamız var:

Adım 17: Özet

Bu derste Arduino mesajlarımıza harici sistemlerden nasıl gönderileceğini gösterdim. IFTTT'den sonra başka bir sistemi de benzer şekilde entegre ediyoruz. Bu örnekte Arduino'muza dış sistemlerden nasıl mesaj gönderileceğini göstermek istediğim bir “bildirici” olmak zorunda değil.

Facebook'ta kaynak kodlarıFanPage

Şerefe, Maciek

Önerilen: