ESP8266 Wemos D1 Mini mit Tasmota und NFC PN532 und Buzzer HW-508
Aus znilwiki
Changelog:
- 03.04.2024 erste Version
Hardware
Ich wollte mir einen NFC-Kartenleser bauen und habe die folgende Hardware verwendet:
- Wemos D1 Mini (Klon): https://www.amazon.de/dp/B0754W6Z2F
- PN532 NFC Modul: https://www.amazon.de/gp/product/B07VT431QZ
- KY-006 / HW-508 Buzzer: https://www.amazon.de/gp/product/B07DPR4BTN
Der Buzzer ist sehr leise, mehr als ein sanftes Piepen holt ihr da nicht raus. Ich hatte den halt da.
Verkabelung
Der PN532 hat 2 Pin-Leisten, eine mit 4 Anschlüssen und eine mit 8. Wir nehmen die mit 4 Pins und verkabeln wie folgt:
PN532 Wemos D1 Mini ------------------------------ GND G VCC 3V3 SDA D2 SCL D1
Tasmota
Wenn man nur NFC Karten / Tags einlesen will und einem die ID die man dabei zurück bekommt reicht, kann man die normale
tasmota-sensors.bin
nehmen: https://ota.tasmota.com/tasmota/release/
Falls man aber auch den Befehl Sensor40
verwenden will, so muss man seine eigene Version kompilieren.
Dann befolgt die Anleitung aus diesem Abschnitt: https://znil.net/index.php?title=ESP8266_Wemos_D1_Mini_mit_Tasmota_und_OLED_Display_I2C_SSH1106_und_4_Taster#Firmware_selbst_kompilieren
Hier der direkte Link zum Online-Kompiler: https://gitpod.io/new/#https://github.com/benzino77/tasmocompiler
Wenn das Webinterface mit dem Kompiler läuft benutzt folgende Einstellungen:
- WLAN Einstellungen / statische frei gelassen
- Haken nach Wahl, Voreinstellungen passen
- Bei zusätzliche Parameter dann folgendes einfügen (Quelle: https://github.com/arendst/Tasmota/discussions/17928):
#define USE_PN532_HSU // Add support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem) #define USE_PN532_DATA_FUNCTION // Add sensor40 command support for erase, setting data block content (+1k7 code, 388 bytes mem) #define USE_PN532_DATA_RAW // Allow DATA block to be used by non-alpha-numberic data (+ 80 bytes code, 48 bytes ram)
- Version und Sprache wählen und Kompilieren lassen
Die Firmware.bin
herunterladen, die könnt Ihr flashen.
Für einen bereits geflashten: Firmware.bin.gz
herunterladen, den Tasmota per Web-Interface auf die minimal.bin.gz
updaten und dann die kompilierte hochgeladen.
Ich flashe die Firmware immer einfach mit dem Tasmotizer:
Danach einmal vom Strom trennen.
Und wie jedes andere Tasmota-gerät einrichten (mit AP verbinden, auf die 192.168.4.1 gehen, WLAN Daten eintragen)
Tasmota konfiguration
Geht auf
Einstellungen => Geräteeinstellungen
und stellt es auf
Generic 18
was ihr ganz unten findet. Speichern und neu starten.
Danach geht ihr wieder in diesen Menüpunkt der nun erheblich mehr bietet:
Stellt D2 und D1 / GPIO4 und GPIO5 entsprechend ein.
Nach einem Neustart sollte oben eine Zeile für den PN532 erscheinen:
Wenn ihr eine Karte / Tag an den Leser haltet erscheint oben dessen Nummer:
In der Konsole könnt ihr ggf. weitere Daten sehen (wenn Ihr die selbst kompilierte Variante nutzt:
21:43:13.413 RSL: SENSOR = {"Time":"2024-04-03T21:43:13","PN532":{"UID":"736FE411","Data":"Hallo Welt!"}}
Diese Daten hatte ich per Sensor40
Befehl geschrieben.
Anleitung siehe: https://tasmota.github.io/docs/PN532/#usage
Es piepen lassen wenn eine Karte eingelesen wird
Als Feedback habe ich den Summer KY-006 / HW-508
aus der Bastelkiste geholt.
Das ist ein passiver Summer der PWM angesteuert werden muss damit der ordentlich piept.
Der hat 3 Pins, die beiden äußeren verbindet ihr mit
3V3 D6
Oben im Screenshot der GPIO Konfiguration seht ihr das D6 dann auf Summmer
gestellt wird (im Englischen vermutlich Buzzer)
In der Konsole stellen wir den Summer auf PWM um (wenn ihr einen aktiven Summer nutzt müsst Ihr das nicht):
BuzzerPwm 1
Alternativ ginge auch
SetOption111 1
ist beides das gleiche, siehe: https://tasmota.github.io/docs/Commands/#control In der Konsole könnt ihr den nun gleich testen mit
buzzer 3
sollte er 3 mal kurz piepen.
In der Konsole erstellen wir nun eine Regel und aktivieren diese:
rule1 on PN532#UID do buzzer 3 endon rule1 1
Wenn ihr nun eine Karte an den Leser haltet und er eine ID auslesen konnte piept er drei mal.
Alternativ:
rule1 on PN532#UID do buzzer 1,4 endon
gibt einen längeren Ton.
Quellen:
Mikroschalter / Reedschalter abfragen
Ich habe an D4 einen Kontakt geschaltet der schließt oder öffnet (hier wird ein Türschloss überwacht).
Die beiden Anschlüsse des Schalters habe ich mit GND und D4 verbunden.
Bevor wir das Anstöpseln habe ich folgende befehle abgesetzt:
Setoption1 1
verhindert das ein langer Tastendruck einen Reset auslöst (eigentlich nur bei Buttons wichtig, aber ich habe beim testen mir das ganze mehrmals zurückgesetzt)
Setoption114 1
Trennt Switches / Schalter von den Relais - es muss als kein passendes Relais geben
SwitchMode 1
Sorgt dafür das es statt einer Toggle
Meldung eine klare ON
oder OFF
Meldung gibt:
00:05:27.226 MQT: stat/NFC-01/RESULT = {"Switch1":{"Action":"OFF"}} 00:05:30.170 MQT: stat/NFC-01/RESULT = {"Switch1":{"Action":"ON"}}
Wenn Ihr Switch_n
statt dessen nehmt dreht ihr das verhalten um. Ginge auch über die SwitchMode-Optionen.
Relais anschließen
Ich hab hier noch so ein Doppel-Realis rumoiegen gehabt. Das hat links einen Block mit
JD-VCC => verbunden per Jumper mit VCC VCC => verbunden per Jumper mit dem JD-VCC links daneben GND (leer)
Den Jumper lassen wir genau so!
Den Block rechts beschalten wir wie folgt:
Relais Wemos D1 Mini GND GND IN1 D7 IN2 D8 VCC 5V
Also mit 5V statt mit 3,3V verbinden!
Konfiguration:
Nach dem Neustart haben wir 2 Buttons auf der Weboberfläche mit denen wir die Relais schalten können:
Die Beschriftung der Buttons können wir anpassen:
Webbutton1 Oben Webbutton2 Unten