Inhoudsopgave:

Melder: 17 stappen
Melder: 17 stappen

Video: Melder: 17 stappen

Video: Melder: 17 stappen
Video: Гидроизоляция санузла, уклон поддона. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я. #23 2024, Juli-
Anonim
Melder
Melder

Het apparaat kan bijvoorbeeld worden aangesloten op het IFTTT-systeem en reageren als er een nieuwe mail verschijnt. Op app.remoteme.org zullen we na het aanroepen een link genereren welke bytes naar Arduino zullen worden verzonden, en Arduino zal een lichteffect weergeven en wat mp3 afspelen vanaf een SD-kaart

Stap 1: Wat is nodig?

Wat nodig is
Wat nodig is
Wat nodig is
Wat nodig is
  • NodeMCU, WemOS of iets dergelijks
  • Twee LED-ringen met WS2812B-diodes (ik heb 16e led-ringen gebruikt)
  • DFRobotDFPlayerMini – dit is een mp3-speler. Het speelt mp3 af van een SD-kaart en communiceert met Arduino via RX/TX
  • Spreker
  • SD-kaart
  • Logische converter - Ik heb deze gebruikt, de mp3-speler gebruikt 5V en Arduino 3.3, daarom hebben we deze converter nodig
  • Kennis en vaardigheden om zelf eenvoudige PCB's te maken

De toren:

  • karton – twee verschillende diktes
  • Overtrek papier
  • aluminiumfolie

Stap 2: Torengebouw

Torengebouw
Torengebouw
Torengebouw
Torengebouw
Torengebouw
Torengebouw
Torengebouw
Torengebouw

Boven de plattegrond van de toren in zijaanzicht (mijn avontuur met de technische tekening eindigde op de basisschool), alle afmetingen in millimeters.

Werkingsprincipe

  1. ring van LED's die licht werpen
  2. Overtrek papier
  3. De afgeknotte kegel, gemaakt van karton en bedekt met aluminiumfolie, zodat het licht van led-ringen reflecteert, in figuur 3 ' = het uitgesneden gaas
  4. kartonnen buis - houdt de torens verticaal, in de buis zitten kabels voor leds
  5. De hoogte hangt van jou af ik heb 85mm
  6. De standaard in alle elektronische onderdelen

Alle horizontale elementen moeten van dikker karton zijn.

Stap 3: Bedradingsschema

Schakelschema
Schakelschema
Schakelschema
Schakelschema
Schakelschema
Schakelschema
Schakelschema
Schakelschema

De mp3-speler wordt geleverd met 5V spanning en communiceert met Arduino via TX/RX, een logic converter is nodig omdat de Arduino zelf op 3,3V spanning werkt. De besturing van ringen is ook verbonden met Arduino (D5, D6) via de logische converter.

Bij repository vindt u adelaarsbestanden met PCB-plannen

Ik stel voor om Arduino en de mp3-speler niet permanent te solderen, alleen om vrouwelijke goudpinnen te gebruiken

Stap 4: Werkingsprincipe

Onze Arduino maakt verbinding met het app.remoteme.org-systeem met behulp van WebSockets (er zijn kant-en-klare bibliotheken) via deze verbinding worden 5-byte-berichten verzonden:

  • de eerste byte van het lichteffect voor de bovenste LED-ring
  • tweede byte lichteffect voor de onderste LED-ring
  • het nummer van het af te spelen mp3-bestand
  • het aantal seconden hoe lang het lichteffect en de mp3 worden afgespeeld
  • of mp3 eenmalig of in een lus moet worden afgespeeld

broncode

Hele broncode U kunt hier vinden

in de bestanden SingleRing.cpp en SingleRing.h is er een klasse om de effecten van LED-ringen te regelen. Ik stel voor dat je begint door te kijken naar de setMode(int m) functie:

void SingleRing::setMode (int m) { switch (m) { case 0: setConfiguration (0, 0, 50, 0, 5, 1); breken;//uit =0 geval 1: setConfiguration (6, 0, 50, 0, 0, 20); breken;//solide standaard groene behuizing 2: setConfiguration (6, 0, 0, 50, 0, 20); breken;//vaste standaard blauwe behuizing 3: setConfiguration (6, 50, 0, 0, 0, 20); breken;//vaste standaard rode kast 4:setConfiguration (6, 50, 10, 0, 0, 20); breken;//vaste standaard oranje behuizing 5: setConfiguration (1, 0, 100, 0, 5, 2); pauze;//politie rechtsom groene case 6:setConfiguration(1, 0, 100, 0, 5, -2); breken;// politie keert groene zaak terug 7:setConfiguration (1, 0, 0, 100, 5, 2); breken;//politie met de klok mee blauwe case 8:setConfiguration(1, 0, 0, 100, 5, -2); breken;// politie keert blauwe zaak terug 9:setConfiguration (1, 100, 0, 0, 5, 2); breken;//politie standaard rode case 10:setConfiguration (1, 100, 0, 0, 5, -2); breken;// politie keert rode zaak terug 11:setConfiguration (1, 100, 20, 0, 5, 2); breken;//politie standaard oranje behuizing 12:setConfiguration (1, 100, 20, 0, 5, -2); breken;// politie keert oranje zaak terug 13:setConfiguration(2, 0, 0, 50, 8, 10); breken;// kruis standaard blauwe behuizing 14: setConfiguration (2, 0, 0, 50, 8, -10); breken;// kruis terug blauwe case 15:setConfiguration (5, 0, 50, 0, 0, 20); breken;//knipper standaard groene behuizing 16:setConfiguration (5, 0, 50, 0, 0, -20); pauze;// blink odwyrtka groen geval 17:setConfiguration (5, 0, 0, 50, 0, 20); breken;//knipper standaard blauwe behuizing 18:setConfiguration (5, 0, 0, 50, 0, -20); breken;// blink terug blauwe case 19:setConfiguration (5, 50, 0, 0, 0, 20); breken;//knipper standaard rood geval 20:setConfiguration (5, 50, 0, 0, 0, -20); breken;// knipperen terug rood geval 21:setConfiguration (5, 50, 10, 0, 0, 20); breken;//knipper standaard oranje kast 22:setConfiguration (5, 50, 10, 0, 0, -20); pauze;// blink terug oranje standaard: setConfiguration (0, 0, 50, 0, 5, 1); pauze;//uit =0 } }

afhankelijk van de gegeven parameter geeft de ring het effect weer. Je kunt je eigen effect toevoegen door functie setConfiguration aan te roepen met nieuwe parameters (verandering van kleur, weergavesnelheid) door een nieuwe modus toe te voegen, of een volledig nieuw effect toe te voegen - of laat het me weten in de reacties als ik het leuk vind, ik zal een nieuw effect toevoegen

arduino.ino:

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

#erbij betrekken

#include #include #include "SingleRing.h"

#erbij betrekken

#include #include

#erbij betrekken

#define WIFI_NAME ""

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

#define DIODES_COUNT 16

SingleRing boven = SingleRing(DIODES_COUNT, D5);

SingleRing onderkant = SingleRing(DIODES_COUNT, D6);

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

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

ESP8266WiFiMulti WiFiMulti;

void setup() { mySoftwareSerial.begin(9600); Serieel.begin(115200);

if (!myDFPlayer.begin(mySoftwareSerial)) {//Gebruik softwareSerial om te communiceren met mp3.

Serial.println(F("Kan niet beginnen:")); Serial.println(F("1. Controleer de verbinding opnieuw!")); Serial.println(F("2. Plaats de SD-kaart!")); terwijl (waar); } Serial.println(F("DFPlayer Mini online."));

mijnDFPlayer.setTimeOut(500); //Stel de time-out voor seriële communicatie in op 500 ms

mijnDFPlayer.volume(30);

mijnDFPlayer. EQ(DFPLAYER_EQ_NORMAL);

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

remoteMe.setUserMessageListener(onUserMessage);

remoteMe.setupTwoWayCommunication();

remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);

top.setup();

bodem.setup(); boven.wissen(); bodem.wissen(); }

boolean uitgeschakeld = waar;

unsigned long turnOffMillis = 0;

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

uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t topMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t time = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t mode = RemoteMeMessagesUtils::getUint8(data, pos);

bottom.setMode(bottomMode);

top.setMode(topMode); if (mode == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(trackNumber); } uitgeschakeld = onwaar; turnOffMillis = millis() + 1000 * tijd; }

lege lus()

{ remoteMe.loop(); top.loop(); onderste.lus(); if (zetMillis uit

}

uitleg:

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

We moeten bovenstaande gegevens verstrekken, gedetailleerde instructies hier op de link, ik heb ook laten zien hoe u zich kunt registreren op remoteme.org en het token kunt genereren, void onUserMessage (uint16_t senderDeviceId, uint16_t dataSize, uint8_t * data) { uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t topMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t time = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t mode = RemoteMeMessagesUtils::getUint8(data, pos);

bottom.setMode(bottomMode);

top.setMode(topMode); if (mode == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(trackNumber); } uitgeschakeld = onwaar; turnOffMillis = millis() + 1000 * tijd; }

Deze functie wordt aangeroepen wanneer het bericht naar Arduino komt en de melding weergeeft. De code is zo duidelijk dat hij zichzelf beschrijft. Ik verwijs naar de details van de lessen naar de documentatie hier en hier

void loop(){ remoteMe.loop(); top.loop(); onderste.lus(); if (turnOffMillis<millis()){

if (!uitgeschakeld) {

boven.wissen();

bodem.wissen(); mijnDFPlayer.stop(); uitgeschakeld = waar; } }

In de lus noemen we de lusfuncties van de objecten, en ook als de weergavetijd van meldingen is verstreken, schakelen we de diodes en het geluid uit.

Stap 5: Mp3-speler

MP3 speler
MP3 speler

Het communiceert met Arduino via TX / RX - Details van de speler zelf hier, en de bibliotheek hier

We uploaden mp3-bestanden naar de SD-kaart. Bestanden op de kaart worden alfabetisch gesorteerd en vervolgens door te bellen:

mijnDFPlayer.play(5);

We spelen het vijfde bestand van de SD-kaart uit de hoofdmap. Daarom is het goed om bestanden op de SD-kaart prefixen 01, 02 etc. te geven. In mijn geval lijkt het op bovenstaande printscreen

Spraakopdrachten genereren U kunt deze pagina gebruiken.

Stap 6: Het programma uploaden naar Arduino

Het programma uploaden naar Arduino
Het programma uploaden naar Arduino
Het programma uploaden naar Arduino
Het programma uploaden naar Arduino

Voordat u schets naar Arduino uploadt, moet u de benodigde bibliotheken hier downloaden, u vindt gedetailleerde instructies

bovendien moeten we de DFRobotDFPlayerMini-bibliotheek en Adafruit_NeoPixel. installeren

Stap 7: Controle

Controle
Controle
Controle
Controle

We sturen vijf bytes naar onze Arduino

  • de eerste byte van het lichteffect voor de bovenste LED-ring
  • tweede byte lichteffect voor de onderste LED-ring
  • het nummer van het af te spelen mp3-bestand
  • het aantal seconden hoe lang het lichteffect en de mp3 worden afgespeeld
  • of mp3 eenmalig of in een lus moet worden afgespeeld (1 als het in een lus moet worden afgespeeld)

Door bytes te verzenden

07 0F 01 05 01

Bovenste ring toont de politielichten (modus 6) onderste knippert groen (modus 15) (bekijk de setMode-functie op singleRing.cpp en opmerkingen ernaast). Het eerste bestand van de SD-kaart wordt 5 seconden afgespeeld. En het bestand wordt in de loop afgespeeld (controleer de functie onUserMessage op arduino.ino)

Laten we deze bytes verzenden. Kijk naar het bovenstaande scherm en klik op de pictogrammen in de volgorde 1, 2, 3. Het venster verschijnt

Kijk dan naar het tweede scherm - en vul het venster zoals bij het tweede scherm

Het venster dat verschijnt, wordt gebruikt om berichten naar het apparaat te sturen. Selecteer in veld 1 het afzenderapparaat - omdat we maar één apparaat hebben, selecteren we het (dit is een verplicht veld en het maakt niet uit dat het hetzelfde apparaat is waarnaar we een bericht sturen) In veld 2 geven we bytes aan verzenden (in het rood wordt de waarde die we in 2 hebben ingevoerd, weergegeven als een tekenreeks) en klik vervolgens op de knop Verzenden.

Na het verzenden van het bericht moet onze kennisgever reageren door de juiste lichteffecten weer te geven en de geselecteerde mp3 af te spelen. Ik moedig je aan om verschillende effecten te proberen door de eerste twee bytes van een getal tussen 0 en 22 te geven (zie de beschrijving in de setMode-functie).

Stap 8: Berichten verzenden met URL's

Berichten verzenden met URL's
Berichten verzenden met URL's
Berichten verzenden met URL's
Berichten verzenden met URL's
Berichten verzenden met URL's
Berichten verzenden met URL's
Berichten verzenden met URL's
Berichten verzenden met URL's

Als we meldingen van een externe applicatie willen weergeven, bijvoorbeeld met IFTTT, hebben we een URL nodig die precies hetzelfde doet als in het venster in de vorige stap. remoteme.org biedt REST API. Ga ernaartoe door te klikken op het branie-tabblad aan de linkerkant (de laatste). Er wordt een pagina weergegeven, op deze pagina kunnen we ook onze URL's proberen.

Op het eerste scherm heb je de functie Je moet uitvouwen en dan gegevens invullen zoals op het tweede scherm.

vul de gegevens in zoals in de bovenstaande schermafbeelding. Nadat we op uitvoeren hebben geklikt, sturen we een bericht

070F010501

De ontvanger is het apparaat met 205 id, hetzelfde apparaat is ook een afzender. MessageId met de instellingen "No_RENEVAL" is niet relevant. En klik vervolgens op Uitvoeren. Notificator reageert op dezelfde manier als bij het verzenden van berichten vanuit de applicatie. Na het aanroepen van REST hieronder is de URL die werd aangeroepen - kijk naar het derde scherm. En kopiëren en plakken naar de browser-URL is gemarkeerd met een groene rand. Op het vierde scherm is mijn Chrome-browser nadat de URL is geplakt

In mijn geval is de URL:

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

Stap 9: Anymous URL om bericht te verzenden

Anymous URL om bericht te verzenden
Anymous URL om bericht te verzenden

Bij de vorige stap U hebt een URL die gegevens naar uw apparaat verzendt. Helaas stopt het met werken na het uitloggen van app.remoteme.org. Dit komt omdat we de authenticatietoken niet hebben verstrekt en we niet langer zijn ingelogd. Laten we onze token ophalen (of een nieuwe maken) en deze in de URL plakken in plaats van in de ster.

Kijk naar het scherm en vervang * in URL door je token

in mijn geval is token:

~267_ZxoWtJ)0ph&2c

dus mijn uiteindelijke URL ziet er als volgt uit:

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

Nu kunnen we het bellen, zelfs als we niet zijn ingelogd. En wanneer het wordt gebeld, wordt er een bericht naar ons apparaat gestuurd 205

Stap 10: Integratie met IFTTT 1/7

Integratie met IFTTT 1/7
Integratie met IFTTT 1/7

De URL die in de bovenstaande stap is gemaakt, is geschikt voor uitvoering door externe toepassingen. Hoe het te gebruiken, zal ik op de IFTTT laten zien. Ik zal het zo configureren dat de melding wordt ingeschakeld wanneer een e-mail op het e-mailadres (Gmail-account) komt.

Log in op IFTTT. Ga vervolgens naar het tabblad Mijn applets en vervolgens naar "Nieuwe applet" - eerste scherm

Stap 11: Integratie met IFTTT 2/7

Integratie met IFTTT 2/7
Integratie met IFTTT 2/7

Klik vervolgens op "+dit"

Stap 12: Integratie met IFTTT 3/7

Integratie met IFTTT 3/7
Integratie met IFTTT 3/7

Typ vervolgens in het veld "Zoekservices" "Gmail"

Dan "nieuwe e-mail in inbox" (enige configuratie kan nodig zijn).

Stap 13: Integratie met IFTTT 4/7

Integratie met IFTTT 4/7
Integratie met IFTTT 4/7

nu klikken we op "+ dat"

Stap 14: Integratie met IFTTT 5/7

Integratie met IFTTT 5/7
Integratie met IFTTT 5/7

zoek "Webhooks" en klik erop

Stap 15: Integratie met IFTTT 6/7

Integratie met IFTTT 6/7
Integratie met IFTTT 6/7

dan “Maak een webverzoek”

Stap 16: Integratie met IFTTT 7/7

Integratie met IFTTT 7/7
Integratie met IFTTT 7/7

we vullen de URL van onze url aan met het token. Type inhoud naar applicatie / json en klik op "actie maken" en voltooien. Nu hebben we onze applet:

Stap 17: Samenvatting

In deze tutorial liet ik zien hoe je vanuit externe systemen berichten naar onze Arduino kunt sturen. We integreren ook een ander systeem dan IFTTT op een vergelijkbare manier. Het hoeft niet per se een "melder" te zijn. Ik wilde in dit voorbeeld laten zien hoe je berichten van externe systemen naar onze Arduino kunt sturen.

broncodesFanPage op Facebook

Groetjes, Maciek

Aanbevolen: