Tumgik
#wemos d1
Video
youtube
Ejemplo de webserver para wemos d1 esp8266 en arduino
0 notes
cyrusmehdipour · 5 months
Video
youtube
Controlling Plastic Injection Machine Nozzle Movement with a Digital Las...
2 notes · View notes
draegerit · 3 months
Text
MicroPython mit ESP32: Einführung in den ESP32 D1 R32
Tumblr media
In diesem und kommende Beiträge möchte ich dir eine Einführung in die Programmierung des ESP32 mit MicroPython bieten. Bevor wir jedoch diesen kleinen Kurs starten können, müssen wir diesen Mikrocontroller etwas näher kennenlernen und flashen. https://youtu.be/l0HLbqQlHEY
Was ist besonders am ESP32 D1 R32?
Dieser Mikrocontroller mit einem ESP-WROOM-32 Chip hat den Formfaktor eines Arduino UNO R3/R4 und damit ist das Layout bekannt und besonders für Anfänger geeignet da man sich wenig umstellen muss.
Tumblr media
ESP32 D1 R32
Tumblr media
ESP32 D1 R32
Tumblr media
ESP-WROOM-32 Chip auf dem ESP32 D1 R32 Vor allem hat man den Vorteil das man ein Multifunktionales Shield aufstecken und so mit der Programmierung starten kann ohne sich um eine Schaltung kümmern zu müssen.
Tumblr media
ESP32 D1 R32 mit Rich Shield von Open Smart Technische Daten des ESP32 D1 R32 Der ESP32 D1 R32 ist ein leistungsstarkes Entwicklungsboard mit folgenden technischen Spezifikationen: Technische DatenSpezifikationenBetriebsspannung5V-12V DCStromstärke250mA (maximal)Mindest-Betriebsstrom20mA (ohne WiFi)WiFi802.11 b/g/n/e/i (bis zu 150 Mbps)AnschlussMikro-USB mit CH340-TreiberSpeicher4 MB Flash-SpeicherTaktfrequenz240 MHzAbmessungen68 mm x 53 mmDigitale Ein-/Ausgänge20 (3,3 V)Analoge Eingänge6 Wichtig: Der ESP32 hat an seinen digitalen Ein-/Ausgängen eine Spannung von 3,3V, dieses ist deutlich weniger als beim Arduino UNO R3 und daher muss man dieses bei seinen geplanten Schaltungen beachten!
Aufbau & Pinout des Mikrocontrollers
Der Mikrocontroller verfügt über eine Micro-USB Buchse, über welche dieser mit dem Computer für die Programmierung verbunden werden kann, alternativ kann daran auch eine Power Bank angeschlossen werden, um diesen mobil mit Strom zu versorgen.
Tumblr media
Pinout des ESP32 D1 R32
Verbinden des Mikrocontrollers mit dem PC
Über die Micro-USB Buchse wird der Mikrocontroller mit dem PC verbunden. Auf dem Gerät ist ein seriell-USB Konverter vom Typ CH340 verbaut, damit wir den Mikrocontroller korrekt einbinden können, müssen wir einen Treiber installieren. Es gibt diverse CH340 Treiber, mit dem bereitgestellten Treiber von Wemos konnte ich diesen korrekt installieren.
Tumblr media
eingerichteter ESP32 DE1 R32 in Windows
Flashen des ESP32 D1 R32 für die Programmierung in MicroPython
Damit wir den Mikrocontroller in MicroPython programmieren können, müssen wir diesen mit einer neuen Firmware flashen. Wir können dazu entweder das Kommandozeilentool esptool verwenden, oder man nutzt die einfache Entwicklungsumgebung Thonny. Im Nachfolgenden erläutere ich dir, wie du den ESP32 D1 R32 in MicroPython mit der Thonny IDE flasht. Im ersten Schritt wählen wir in der Thonny IDE unten rechts "Konfiguriere den Interpreter ..." aus.
Tumblr media Tumblr media
Um anschließend den Interpreter auf "MicroPython (ESP32)" sowie den korrekten Port einzustellen. Wenn du mehrere serielle Geräte am PC angeschlossen hast, so solltest du vorher im Geräte-Manager prüfen, an welchem COM-Port der ESP32 angeschlossen ist. Abschließend klickst du unten rechts auf den Link "MicroPython installieren oder aktualisieren..." Hier musst du die nachfolgenden Einstellungen treffen (siehe Grafik). Diese Anleitung funktioniert auch für andere Geräte wie dem Raspberry Pi Pico / Pico W, du musst lediglich die Daten für MicroPython family & variant anpassen. Mit der Schaltfläche "Installieren" wird dann der Vorgang gestartet.
Tumblr media
Wenn der Prozess erfolgreich abgeschlossen ist und die Fenster geschlossen wurden, dann solltest du in der Kommandozeile nachfolgende Ausgabe sehen. Natürlich kann es sein, dass die Versionsnummer zum Zeitpunkt, wenn du diesen Beitrag liest, erhöht wurde, aber die Informationen bleiben gleich.
Tumblr media
Thonny IDE im Überblick
Schauen wir uns die Anwendung Thonny nachfolgend etwas genauer an.
Tumblr media
In der Titelleiste finden wir den Dateinamen der derzeit geöffneten Datei / des gewählten Tabs sowie die Cursor-Position. In der Toolbar finden wir die Schaltflächen zum Starten und Stoppen von Skripten. Wenn wir uns den linken Bereich ansehen, dann finden wir einen kleinen Datei Explorer mit welchem wir Datei öffnen und auch über das Kontextmenü diese auf den Mikrocontroller kopieren können. Im Feld welches mit "Ausgabe" gelabelt wurde, werden dir die Ausgaben aus dem Code angezeigt. Zusätzlich kannst du da auch Eingaben tätigen.
Tumblr media
Ausblick
Dieses war nun der erste Teil zu meiner Reihe "MicroPython mit ESP32" im nächsten Beitrag möchte ich dir die Programmiersprache näher zeigen und kleine Programme damit vorstellen. Bleib also gespannt... Read the full article
0 notes
hackernewsrobot · 11 months
Text
ESP32 Wemos D1 Mini – Sprinkler Controller Open Source
https://github.com/fellowgeek/esp32-relay-board
0 notes
sunustuffs · 1 year
Text
Arduino Uno 9in1 multifunctional shield
Tumblr media Tumblr media Tumblr media Tumblr media
Links:
https://www.icstation.com/dht11-shield-multi-function-expansion-board-lm35-sensor-passive-buzzer-infrared-receiver-p-15225.html
https://www.botnroll.com/en/infrared/3574-multifunction-shield-dht11-lm35-ldr-buzzer-for-arduino-uno-wemos-d1-r32.html
https://www.bdtronics.com/9-in-1-multifunction-expansion-board-dht11-humidity-sensor-lm35-temperature-sensor-buzzer-for-arduino.html
http://www.getmicros.net/a-look-at-the-easy-module-shield-for-arduino.php
0 notes
murrayinahurray · 2 years
Text
Entourage
Today we spoke about entourage and the different software we can use to display our physical code outcome in a real life life situation, I also purchased a Wemos D1 Mini which I soldered the WiFi chip onto to prepare myself for my appointment with Amelia who is going to help with the logistics.
0 notes
crankycoderblog · 4 years
Text
How to build a raspberry pi picture frame media pc
Happy PI Day!!!
A few years back… ok… like 9 years ago. I built an interesting piece of functional art in my living room. It was my media center pc, mounted in a double picture frame on my wall. This thing served me well for a long time. But now it’s time to upgrade it.
After all this time the ATOM board in there has gotten a little sluggish, the distro isn’t supported, the black lights have gone bad, I think there’s a demon in there. It’s legit struggling.
So how are we going to upgrade it now??!?
Oh good you, you have it under control…
Oh man… I thought you were gone…
You are not a meme…. Let me finish…
Where was I? Oh Yeah. What we are doing to upgrade… So here is the checklist.
Replace old ATOM board with new raspberry pi
Replace black light bulbs with RBG led strip.
Add simple to use RF remote
Flash PI with OSMC for a distro that will keep updated on a regular basis.
Add wemos D1 Mini to control LED in frame lighting
Flash wemos with WLED project for simple easy lighting control
Add wemos to home automation system to turn on/off lights on schedule
Not a ton of work, but there is some work to be done.. So lets get to it!
Woo do work fool!!!
Not helpful…
Materials List
2 Ribba Picture frameshttps://amzn.to/30IWvE4 or https://amzn.to/2OPuacoMisc wire / perf boardhttps://amzn.to/3lfiWtSRBG led striphttps://amzn.to/3rQ7gA8Hingeshttps://amzn.to/2PXjx7P1 3 port keystone wall platehttps://amzn.to/3vkwXuW1 hdmi keystone jack pass throughhttps://amzn.to/2Owwmph1 rj45 keystone jack pass throughhttps://amzn.to/3eyVgiH1 keystone jack blankhttps://amzn.to/3tuqf3Z1 5v 10amp power supply (barrel plug)https://amzn.to/30EYidj1 barrel plughttps://amzn.to/3qMx6nw1 usb adapterhttps://amzn.to/2PYoJbD1 small pc fanhttps://amzn.to/3rOgOvw1 raspberry pi 3/4pi3 – https://amzn.to/30FX7KH pi4 – https://amzn.to/2OoklCy1 usb cablehttps://amzn.to/3cx8ycP1 wemos d1 minihttps://amzn.to/3qLjkl1LED ribbon cablehttps://amzn.to/30JQ5EKmotherboard stand offshttps://amzn.to/3lh4phlLED connectorshttps://amzn.to/3rHbfixOSMC Remotehttps://osmc.tv/store/product/osmc-remote-control/
So, those picture frames don’t look like what you have….
Yes, I know, remember, I am upgrading from an older build. The goal of the picture frame is to be tall/wide enough to house your board and deep enough (why I suggest 2) that you can mount said board inside it with stand offs. The second important piece with the picture frames is to make sure that you have some matting to hide things behind.
How to create a wall mounted pi media player
Ok. So lets get started.
Lets take the 2 picture frames, and stack them, and add some hinges so we have a nice box to work with.
Take the 3 keystone plate and put the hdmi and network pass through it. Take the blank and drill out a hole to fit the barrel plug.
Arrange them however you best see fit. Now with a rotary tool cut around the keystone jacks so that what’s remaining can fit on the side of the frame. I cut around the existing screw holes so they could be reused to fasten to the frame.
As you can see from the first build you mount the board in the middle and start taking care of the wiring.
You take care of wiring.
*sigh*
Then add some lighting.
Here are few shots of the build back in the day.
So now, we move to the upgrades. We are removing the board and and replacing with a Raspberry Pi.
Upgrades to move to Raspberry Pi
Now since I have some LED strip, a wemos d1 and a raspberry pi to power, I am going to create a power distribution board.
Wire up our new LED strip instead of the old blacklights.
Ok. So now we have this beautiful beast all built out. Lets make it do a trick.
hehe… what kind of trick?
Are you 12? Seriously, what’s wrong with you?
Me? Im not the one talk to… you know what, nevermind. Continue.
Thank you.
So we have WLED installed on the Wemos D1 Mini. If you don’t know what WLED is, it is a beautifully written program for the d1 mini to do LED light control. HUGE shoutout to Aircookie for such a great piece of software! https://github.com/Aircoookie/WLED
Supports most LED light strip, but also give you some really awesome control over the LEDS. I have worked with it on some other projects including my neo-pixel LED christmas tree decoration I did this past christmas.
youtube
Aside from the really cool effects, the mobile apps (ios / android) but WLED also has support with tons of Home Automation Systems. I am currently using OpenHab so I will add a scheduled integration so it’s added as a “living room” light, in the group gLivingroomLights. This will automatically add it to the automation to turn on the LED’s with the rest of my living room lights which turn on 15 minutes after sunset each day. If we leave and turn off the lights, when we arrive back home, the lights automatically turn on when we pull in. The picture frame is now part of that. When it’s bedtime and the living room lights all turn off, so does the picture frame lights.
Since this is also a full color/dimmable type of light, it will automatically following follow the rest of the dimming controls for the livingroom lights, including integration into Kodi for the Cinema Vision home automation integration.
For Openhab you can integrate using the build in binding. Or via MQTT, http rest call.
For HomeAssistant you can integrate like this.
The Results
youtube
There we go. An upgraded picture frame art PC on the wall. We have added some nicely controlled LED lighting and have integrated in with the home automation system.
So what else does it do?
What do you mean what else does it do? It’s a Kodi Media player integrated in to plex with plexkodiconnect to sync everything up. It can play back all the media on the network, receive casted data and airplay.. what do you mean what else can it do?!
Yeah, what else can it do?
Home automation on screen notices and surveillance camera pop ups on motion?
Ok… that’s pretty good.
TLDR
youtube
How to build a raspberry pi picture frame media pc was originally published on Cranky Coder
3 notes · View notes
chaerulanam1412 · 4 years
Text
Tutorial ESP8266 NodeMCU Mengakses LCD TFT 1.8 ST7735
Tutorial ESP8266 NodeMCU Mengakses LCD TFT 1.8 ST7735
Tutorial ESP8266 NodeMCU Mengakses LCD TFT 1.8 akan dibahas pada artikel ini dengan dilengkapi dengan skematik dan program nodemcu ESP8266. sebelumnya saya sudah membuat tutorial hal serupa tentang Tutorial ESP32 Mengakses LCD TFT 1.8 ST7735 Selain menggunakan ESP8266 tutorial ini juga bisa untuk diterapkan pada Wemos D1 mini ESP8266, LCD TFT 1.8 sudah dilengkapi dengan slot SD card yang bisa…
Tumblr media
View On WordPress
0 notes
marsic-84 · 4 years
Video
youtube
27. Климатические датчики для Умного Дома - Подготовка и прошивка контроллера на базе ESPEasy | Room31
Возможно самый простой способ создания самодельной климатической станции для мониторинга качества воздуха в жилом помещении.
🔶 В этом видео: ◽ 00:26 Используемые устройства ◽ 01:08 Загрузка прошивки ESPEasy ◽ 01:25 Прошивка WemosD1 (способ 1) ◽ 03:13 Прошивка WemosD1 (способ 2) ◽ 04:56 Предварительная настройка прошивки ESPEasy ◽ 08:46 Настройка OpenHAB ◽ 10:12 Результат проделанной работы
🔶 Где взять устройства из этого видео?:
◽ ESP8266 WeMos D1: http://ali.pub/4n80wp
◽ ESP8266 NodeMCU: http://ali.pub/4n82rs
◽ Голая ESP8266: http://ali.pub/4lyfc6
◽ Датчик влажности, температуры и давление BME280: http://ali.pub/4n811k
◽ Датчик CO2 MH-Z19B: http://ali.pub/4ma0mr
◽ Датчик TVOC/eCO2 SGP30: http://ali.pub/4n81gj
◽ Датчик PM2.5 Plantower PMS7003: http://ali.pub/4n81ll
◽ Датчик PM2.5 Plantower PMS7003 + Разъем: http://ali.pub/4n81ym
🔶 Полезные ссылки по теме этого видео: ◽ Архив с конфигурационными файлами OpenHAB: https://mega.nz/#!Nrp3WBqA!O6-n9_Npw0KcDWX1-lXPzRL6NwoY-qCN-23AVvjnvCU или https://1drv.ms/u/s!AqKffkeFHbrQcDrkUBB1hn_VAzw?e=bTPIaI ◽ ESPEasy Прошивка: https://github.com/letscontrolit/ESPEasy ◽ Программа для прошивки NodeMCU PyFlasher: https://github.com/marcelstoer/nodemcu-pyflasher/releases
🔶 Мои другие видео: ◽ 27. Подготовка и прошивка контроллера на базе ESPEasy: https://youtu.be/zmzVq0fCusk ◽ 26. 100 эффектов WLED прошивки вживую: https://youtu.be/AtGeC1MMdO8 ◽ 25. Обзор WLED Прошивки: Интерфейс и Настройки: https://youtu.be/h7lKsczEI7E ◽ 24. Контроллер LED ленты WS2812b на основе ESP8266. Прошивка WLED + OpenHAB: https://youtu.be/K4ioTt3XvGc ◽ 23. Sonoff MINI и BasicR3, интеграция в OpenHAB: https://youtu.be/KlabD5NH55k ◽ 22. Прошивка Sonoff MINI и BasicR3: https://youtu.be/vl151FAGYpM ◽ 21. Сравнительный обзор увлажнителей Xiaomi: https://youtu.be/eoHUbKiZIAw ◽ 20. Подсветка синтаксиса OpenHAB в Notepad++: https://youtu.be/-l6VLzBe52M ◽ 19. Правила OpenHAB: Датчик влажности + Реле: https://youtu.be/BAeUq-o9mZ8 ◽ 18. Цвета значений и подписей в интерфейсе BasicUI (OpenHAB): https://youtu.be/Ju-Fp04qJNo ◽ 17. Прошивка Sonoff S20 и Tonbux WL-DC01: https://youtu.be/0BrsA5KhzoI ◽ 16. Сценарий управления умным настенным светильником. Правила OpenHAB: https://youtu.be/yJmHXndJxjE ◽ 15. Прошивка Sonoff Basic: Tasmota + MQTT + OpenHAB: https://youtu.be/drXLesAxlP4 ◽ 14. Прошивка Sonoff Touch: Tasmota & ESPurna + OpenHAB: https://youtu.be/AHicER0zTgE ◽ 13. Расширение OpenHAB для браузера Chrome: https://youtu.be/4SgWZxUGSO4 ◽ 12. Умный настенный светильник (бра) своими руками + Openhab: https://youtu.be/_RlpP1xVL8M ◽ 11. Умный дом своими руками. Arduino + MQTT + OpenHAB: https://youtu.be/tb-BMCLp_0Y ◽ 10. Увлажнители Xiaomi + Openhab: https://youtu.be/h7ex3zWCLDg ◽ 9. Умный дом и WiFi LED контроллеры для чайников. MagicHome + OpenHAB https://youtu.be/0Lg7y6yLOks ◽ 8. Подключение кондиционера к умному дому. Gree Smart + OpenHAB: https://youtu.be/cY6RfOjI-Ts ◽ 7. Настройка подключения OpenHAB к MQTT брокеру: https://youtu.be/5IrIg9eQcX0 ◽ 6. Установка MQTT broker на WINDOWS 10: https://youtu.be/FEoy5YkrBIE ◽ 5. Установка MQTT broker на Raspberry Pi: https://youtu.be/cgqFEyMQhsI ◽ 4. Установка openHAB на Windows 10: https://youtu.be/2R90hlC5Jzs ◽ 3. Установка openHAB на Raspberry Pi 3: https://youtu.be/D6Px3jDNxPM ◽ 2. Самодельное настенное крепление для планшета из трубы: https://youtu.be/u8zFNUIHgRg ◽ 1. Умный Дом - Начало: https://youtu.be/1WDVufuN90Q
🔶 Music by: ◽ Tritan - Hollow Life (feat. Ratfoot) [NCS Release] ◽ Extenz - Gravity ◽ Markvard - Perfect Day (Free Music for Vlogs) ◽ A Himitsu - Easier to Fade (feat. Madi Larson) ◽ Flanzen - Limewire
#ESPEasy #Климат #Room31 #OpenHAB #MQTT
0 notes
analysir · 7 years
Text
Preview: A.IR Shield ESP8266/ESP32 Tx, a high-end IR Shield
Preview: A.IR Shield ESP8266/ESP32 Tx, a high-end IR Shield
A.IR Shield ESP8266/ESP32 Tx for AnalysIR with IRBlasters
The latest member of our MakeIR series of devices & kits is the A.IR Shield ESP8266/ESP32 Tx. This shield works out of the box with AnalysIR and is essentially plug & play, with additional custom Firmware options. This shield is a ‘sibling’ to our related TRx shield, and features IR multi-send only vs the send & receive of the TRx shield.…
View On WordPress
1 note · View note
cyrusmehdipour · 5 months
Video
youtube
DIY Digital Laser Ruler Tutorial with VL53L0X GY-53, SSD1306, and Wemos ...
0 notes
draegerit · 4 months
Text
Temperaturabhängige Steuerung: Shelly 1PM Mini und Wemos D1 Mini kombinieren
Tumblr media
In diesem Beitrag möchte ich dir ausführlich erläutern, wie du eine Temperaturabhängige Steuerung mit einem Shelly Mini und einem Wemos D1 Mini aufbaust. Die neuen Shelly Minis haben leider keine Schnittstelle für ein Addon wo man sonst Sensoren anschließen und über die Shelly Smart Control App auslesen und in eine intelligente Szene einbauen kann. https://youtu.be/eXSIISVeN1Y
Warum benötigt man einen extra Mikrocontroller?
Die Shelly Minis sind derzeit in der dritten Generation (Gen3) erhältlich und mitunter genauso leistungsstark wie die großen Shelly Plus Geräte. Das Einzige, was denen fehlt, ist eine Schnittstelle für ein Addon an welches wir Sensoren anschließen können. Wollen wir jedoch Sensorabhängig eine Szene oder das Relais aktivieren, so benötigen wir eine externe Quelle.
Warum wird der Wemos D1 Mini eingesetzt?
Der Wemos D1 Mini ist ein kleiner ESP8266, welcher recht günstig erhältlich ist und vor allem, was ich besonders cool finde, kann auf diesen Mikrocontroller Sensoren und Aktoren gesteckt werden.
Tumblr media
Wemos D1 Mini mit OLED Display & DHT22 Sensor
Tumblr media
Wemos D1 Mini mit OLED Display & SHT30 Sensor
Tumblr media
Shields für den Wemos D1 Mini Für den Wemos D1 Mini gibt es das Shield mit einem DS18B20, SHT30, DHT11 und DHT22 Sensor. Für diesen Beitrag verwende ich den Sensor SHT30. Das DS18B20 Sensor Shield ist am digitalen Pin D2 angeschlossen, an diesem liegt jedoch auch die I2C Schnittstelle an und diese benötigen wir für das OLED Display somit fällt dieses hier raus. Erhältliche Varianten des Wemos D1 Mini Den kleinen Mikrocontroller Wemos D1 Mini erhältst du derzeit in der Version 4.0 mit einem ESP8266. Wenn du jedoch mehr Leistung (CPU, Speicher) benötigst, dann kannst du auch auf eine Variante mit einem ESP32-S2 zurückgreifen. Beide Varianten kannst du für dieses Projekt verwenden!
Tumblr media
Wemos D1 Mini - Varianten Die beiden gezeigten Mikrocontroller habe ich dir bereits in separaten Beiträgen vorgestellt und einige Schaltungen präsentiert. - Vorstellung – Wemos D1 Mini V4 - Lolin S2 mini V1 im Test Technische Daten des Wemos D1 Mini Hier nun die technischen Daten des Wemos D1 Mini V4: Wemos D1 Mini V4Taktgeschwindigkeit80 / 160 MHzBetriebsspannung3.3 VAnzahl digitale Pins11Anzahl analoge Pins1Speicher4 MB SchnittstellenI²C, SPI, UARTUSB-AnschlussUSB-Typ-CVergleich der technischen Daten vom Wemos D1 Mini V4 & V3
Wie werden die Geräte miteinander interagieren?
Der Shelly verfügt über ein Relais, mit welchem man einen Verbraucher schalten kann. Der Shelly 1PM Mini Gen3 hat den Vorteil, dass dieser noch zusätzlich die Leistungsaufnahme messen kann. Mit dem Wemos D1 Mini wollen wir temperaturabhängig das Relais aktivieren / deaktivieren und auf dem OLED Display den Zustand anzeigen. Zusätzlich können wir auch die momentane Leistungsaufnahme anzeigen.
Tumblr media
Der Vorteil dieser Schaltung liegt in ihrer einfachen Erweiterbarkeit. Zum Beispiel kannst du einen zusätzlichen Taster einbauen, um das Relais manuell ein- und auszuschalten, oder andere Sensoren integrieren. Mit einem IR Shield und der passenden Fernbedienung könntest du zudem weitere Geräte steuern und dir so ein kleines, intelligentes Dashboard schaffen.
Benötigte Ressourcen für dieses kleine Projekt
Schauen wir uns zunächst an, welche Ressourcen benötigt werden, um das kleine Projekt umzusetzen: - einen Shelly Mini - Shelly 1 Mini Gen* - Shelly 1PM Mini Gen3* - einen Wemos D1 Mini V4* - ein USB-C Datenkabel* - ein SHT30 Shield* - ein OLED Shield* - eine Dual Base Plate*
Tumblr media
Shelly 1PM Mini Gen3 & Wemos D1 Mini Alternativ kannst du auch das Shield mit einem DHT11/DHT22 Sensor* verwenden. Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung! Für den Shelly 1PM Mini Gen3 benötigst du noch ein Anschlusskabel, hier kommt es auf den Einsatzzweck an, in meinem Fall verwende ich ein 3x1,5mm² flexibles Kabel mit einem Schukostecker.
Programmieren des Wemos D1 Mini
Den Shelly habe ich bereits mit der Cloud verbunden und damit Zugriff auf die Verbrauchsdaten und dem Relais. In diesem Abschnitt möchte ich dir gerne zeigen, wie der Wemos D1 Mini programmiert werden muss um das Relais zu steuern & die Verbrauchsdaten anzuzeigen. Programm - Temperaturabhängige Steuerung eines Shelly Minis mit dem Wemos D1 Mini & SHT30 SensorHerunterladen Schritt 1 - steuern des Relais via Postman Mit dem Tool Postman kann man Requests an Services senden und eine Antwort auswerten. Dabei kann der Request mit allen benötigten Informationen (Header, Body, Parameter etc.) bestückt werden. Das gute ist, dass man dazu erst einmal nichts programmieren muss, sondern man kann zunächst die URL und die benötigten Eigenschaften des Requests ermitteln. //aktivieren des Relais http://192.168.178.141/rpc/Switch.Set?id=0&on=true //deaktivieren des Relais http://192.168.178.141/rpc/Switch.Set?id=0&on=false In der offiziellen, englischen Dokumentation zur Schnittstelle von Shelly findest du alle Informationen, welche Daten du abgreifen kannst. Schritt 2 - Auslesen der momentanen Leistungsaufnahme am Shelly 1PM Mini Gen3 via Postman Wenn du wie ich den Shelly 1PM Mini Gen3 verwendest, dann kannst du vom angeschlossenen Verbraucher noch zusätzlich Daten ermitteln. Du kannst neben dem aktuellen Energieverbrauch in Watt, die Stromaufnahme in Ampere ermitteln. Vom Stromnetz selber können wir die Spannung und die Netzfrequenz ermitteln. http://192.168.178.141/rpc/Switch.GetStatus?id=0
Tumblr media
JSON Output von der Shelly API Schritt 3 - Auslesen der Daten am Wemos D1 Mini In der Arduino IDE kannst du dir Daten auf dem seriellen Monitor ausgeben lassen, das hat den Vorteil das wir nicht immer zwingend ein Display benötigen. Auf der seriellen Schnittstelle wollen wir zunächst die ermittelten Daten ausgeben. Schritt 3.1 - Aufbau einer WiFi-Verbindung Bevor wir etwas auslesen können, müssen wir eine WiFi-Verbindung zum lokalen Netzwerk herstellen. #include WiFiServer server(80); //Die Zugangsdaten zum WiFi-Netzwerk const char *ssid = "xxx"; const char *password = "xxx"; void initWifiModul() { Serial.println("Aufbau der Verbindung zu: " + String(ssid)); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("Mit " + String(ssid) + " erfolgreich verbunden!"); server.begin(); Serial.println("Server gestartet"); Serial.print("Adresse : http://"); Serial.println(WiFi.localIP()); } void setup() { Serial.begin(9600); initWifiModul(); } void loop() { // put your main code here, to run repeatedly: } Auf der seriellen Schnittstelle wird bei erfolg die IP-Adresse des Wemos ausgegeben. (Für diesen Beitrag nicht relevant.) Aufbau der Verbindung zu: FRITZBox7590GI24 ....... Mit FRITZBox7590GI24 erfolgreich verbunden! Server gestartet Adresse : http://192.168.178.68 Schritt 3.2 - Absenden eines HTTP-Request an den Shelly Zum Absenden der Daten benötigen wir einen HTTPClient, natürlich senden wir diesen Request nur ab wenn die WiFi-Verbindung besteht! #include String shellyServerAdress = "http://192.168.178.141/rpc/"; String shellyGetStatus = "Switch.GetStatus?id=0"; void sendHttpRequest(String url) { if (WiFi.status() == WL_CONNECTED) { WiFiClient client; HTTPClient http; http.begin(client, url.c_str()); int httpResponseCode = http.GET(); Serial.print("HTTP Status Code: "); Serial.println(httpResponseCode); String payload = http.getString(); Serial.println(payload); http.end(); } } Auf der seriellen Schnittstelle sehen wir nun neben dem Antwortcode vom Shelly (HTTP Status Code) noch zusätzlich den JSON Respond mit den gewünschten Daten.
Tumblr media
Ausgabe der Daten eines Shelly 1PM Mini Gen3 auf dem seriellen Monitor Schritt 3.3 - Parsen des JSON Respond Um an die Daten im JSON Respond vom Shelly zu gelangen, müssen wir diesen jetzt parsen. Dafür benötigen wir die Bibliothek ArduinoJson. #include StaticJsonDocument json; char jsonResponse = ""; String relais = ""; String energieverbrauch = ""; String stromaufnahme = ""; String spannung = ""; String frequenz = ""; bool sendHttpRequest(String url) { if (WiFi.status() == WL_CONNECTED) { WiFiClient client; HTTPClient http; http.begin(client, url.c_str()); int httpResponseCode = http.GET(); Serial.print("HTTP Status Code: "); Serial.println(httpResponseCode); String payload = http.getString(); Serial.println(payload); payload.toCharArray(jsonResponse, sizeof(jsonResponse)); http.end(); return httpResponseCode == 200; } return false; } void printData(String text, String value, int index) { Serial.print(text); Serial.println(value); } void readData() { if (sendHttpRequest(shellyServerAdress + shellyGetStatus)) { DeserializationError error = deserializeJson(json, jsonResponse); if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); return; } Serial.println(); energieverbrauch = json + " W"; stromaufnahme = json + " A"; spannung = json + " V"; frequenz = json + " Hz"; relais = json == true ? "AN" : "AUS"; printData("Relais: ", relais, 0); printData("Energieverbrauch: ", energieverbrauch, 1); printData("Stromaufnahme: ", stromaufnahme, 2); printData("Spannung: ", spannung, 3); printData("Frequenz: ", frequenz, 4); } } Die Antwort vom Shelly (im JSON-Format) haben wir nun im Zugriff und können dort recht einfach auf die Daten zugreifen. Aufbau der Verbindung zu: FRITZBox7590GI24 ....... Mit FRITZBox7590GI24 erfolgreich verbunden! Server gestartet Adresse : http://192.168.178.68 HTTP Status Code: 200 {"id":0, "source":"switch", "output":true, "apower":14.5, "voltage":227.5, "freq":50.0, "current":0.112, "aenergy":{"total":2.884,"by_minute":,"minute_ts":1716113335}, "ret_aenergy":{"total":0.000,"by_minute":,"minute_ts":1716113335},"temperature":{"tC":55.5, "tF":131.9}} {"id":0, "source":"switch", "output":true, "apower":14.5, "voltage":227.5, "freq":50.0, "current":0.112, "aenergy":{"total":2.884,"by_minute":,"minute_ts":1716113335}, "ret_aenergy":{"total":0.000,"by_minute":,"minute_ts":1716113335},"temperature":{"tC":55.5, "tF":131.9}} Energieverbrauch: 14.500 W Stromaufnahme: 0.112 A Spannung: 227.500 V Frequenz: 50.000 Hz Schritt 4 - Anzeigen der Daten auf einem OLED Display Da wir die Daten vom Shelly nun ausgelesen haben, möchte ich dir zeigen wie diese auf einem OLED Display angezeigt werden. Für das ansteuern des OLED Displays am Wemos D1 Mini gibt es eine extra Bibliothek von Adafruit welche du bequem über den Bibliotheksverwalter installieren kannst.
Tumblr media
Bibliothek für das kleine OLED Display von Wemos Die Adresse des OLED Displays ist 0x3c, mit dem kleinen Programm aus dem Beitrag Arduino I2C-Scanner für ESP8266 & ESP32 anpassen: Eine Schritt-für-Schritt-Anleitung kannst du am ESP8266 nach geräten suchen. An LOLIN(WEMOS) D1 mini Pro was recognized! The microcontroller has 1 I2C Interfaces! SDA: 4, SCL: 5 Scanning... I2C device found at address 0x3c! End. Ich würde dir empfehlen eine zuvor installierte Version der Adafruit_SSD1306 zu deinstallieren damit eventuelle Probleme minimiert werden. #include #include #include #include #define OLED_RESET 0 // GPIO0 Adafruit_SSD1306 display(OLED_RESET); void setup() { Serial.begin(9600); initWifiModul(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(WHITE); } void printData(String text, String value, int index) { Serial.print(text); Serial.println(value); display.setCursor(0, index * 10); display.println(value); } void loop() { display.clearDisplay(); readData(); display.display(); delay(2000); } Die Daten werden nun nicht nur auf der seriellen Schnittstelle ausgegeben sondern auch auf dem OLED Display. Da das Display sehr klein ist, kann hier keine zusätzliche Bezeichnung hinzugefügt werden und es werden lediglich die Werte angezeigt.
Tumblr media
Daten eines Shellys (deaktiviert)
Tumblr media
Daten eines Shellys (aktiviert) Schritt 5 - Auslesen des Temperatursensors SHT30 Wie eigentlich ganz am Anfang erläutert soll das Relais temperaturabhängig gesteuert werden, dazu stecken wir nun das SHT30 Shield auf den freien Platz der Dual Base Plate.
Tumblr media
Wemos D1 Mini mit OLED Display & SHT30 Sensor Man könnte auch die die Shields untereinander auf einem Breadboard stecken. Jedoch strahlt jedes elektrische Gerät eine wärme ab wie auch der WiFi Chip des Wemos D1 Mini und wenn der Sensor zu nah an diesem ist, werden die Werte stark beeinflußt. Technische Daten des SHT30 Sensors Den SHT30 Sensor habe ich dir bereits im Beitrag Wemos D1 mini Shield: SHT30 Temperatur und Luftfeuchtigkeit Sensor vorgestellt und gezeigt wie dieser programmiert wird. Hier nun die technischen Daten Sensors: - Betriebsspannung: 3V bis 5,5V DC - Betriebstemperatur -40 °C bis 125 °C - Schnittstelle: I2C (0x44 Standard / 0x45 über Lötpunkte) - Temperatur: -40 bis +125 °C (± 0,3 °C) - relative Luftfeuchtigkeit : 0 % bis 100 % (± 2 %) Bibliothek zum auslesen des Sensors Für den Sensor gibt es von Wemos eine Bibliothek welche du dir Read the full article
0 notes
ourwitching · 6 years
Link
[Dimitris Platis] works in an environment with a peer review process for accepting code ch...
0 notes
Text
Tự làm thiết bị điều khiển tắt mở máy tính từ xa qua internet với chi phí chỉ 60k.
Tự làm thiết bị điều khiển tắt mở máy tính từ xa qua internet với chi phí chỉ 60k.
Bây giờ bạn có thể rút USB của Wemos D1 mini ra và tiến hành lắp ráp vào bên trong máy tính, vào cài đặt Power Options chỉnh lại hành động “When I press the power button” thành Shutdown. Lưu ý không chỉnh sang Sleep được vì khi Sleep đèn Power Led nhấp nháy làm ESP không đọc trạng thái được, gây ra lỗi. Xong bước này là có thể xem như đã hoàn thành được phần khó khăn nhất của dự án rồi. Nghỉ…
Tumblr media
View On WordPress
0 notes
iot-talk · 2 years
Text
Tony Brobston's 3D-Printed ESP8266 Smart Vents Put Every Vent in Your Home Under MQTT Control - Hackster.io
0 notes
arduinoprojeleri · 2 years
Text
ESP8266 için Çoklu Sensör Kalkanı Oluşturun
Bu projede, ESP8266 Wemos D1 Mini kartı için bir Çoklu Sensör Kalkanı tasarlamayı ve oluşturmayı keşfedeceksiniz. Kalkan, sıcaklık sensörüne (DS18B20), bir PIR hareket sensörüne, bir LDR'ye ve bir röle modülünü bağlamak için bir terminale sahiptir. Tüm donanımı hazırlayarak başlayacağız ve ardından programlayacağız.
Tumblr media
Video Eğitimini İzleyin
Bu proje video formatında ve yazılı formatta mevcuttur. Aşağıdaki videoyu izleyebilir veya yazılı talimatlar için aşağı kaydırabilirsiniz. Bu proje iki videoya bölünmüştür.
ESP8266 WeMos D1 Mini Çoklu Sensör Kalkanını Tasarlayın ve İnşa Edin – Bölüm 1
Bu ilk videoda kullanacağımız donanıma karar vereceğiz. Ayrıca bu projenin ana özelliklerine ve kendi WeMos D1 Mini Multisensör kalkanınızı nasıl tasarlayıp monte edebileceğinize bir göz atacağız.
youtube
ESP8266 WeMos D1 Mini Çoklu Sensör Kalkanını Programlayın ve Test Edin – Bölüm 2
Bu ikinci videoda, Wemos D1 Mini Çoklu Sensör Kalkanını, çeşitli yapılandırılabilir ayarlara dayalı olarak çoklu sensör kalkanını izlemenize ve kontrol etmenize izin veren bir web sunucusunu çalıştıran bir kodla programlayacağız.
youtube
Kaynaklar
Bu projeyi oluşturmak için gereken tüm kaynakları aşağıdaki bağlantılarda bulabilirsiniz (veya GitHub projesini ziyaret edebilirsiniz ):
Web Sunucusu kodu (Arduino IDE için)
Şematik diyagram
Gerber dosyaları
PCB'yi düzenlemek için KiCad projesi
3D Yazıcı Muhafazası (STL dosyaları ve SketchUp Projesi)
Tüm dosyaları indirmek için buraya tıklayın
Projeye Genel Bakış
Shield, bir sıcaklık sensörü, bir hareket sensörü, bir LDR ve herhangi bir çıkışı bağlayabileceğiniz 3 pinli bir soketten oluşur, bir röle modülü kullanacağız.
Tumblr media
Ayrıca, çeşitli yapılandırılabilir ayarlarla 4 farklı mod kullanarak kalkanı kontrol etmek için bir web sunucusu çalıştıran bir program yazacağız.
Tumblr media
Bu projenin sonunda, benzer görünümlü bir gadget'ınız olacak.
Tumblr media
Röleyi manuel modda açıp kapatabileceksiniz.
Tumblr media
Veya otomatik modları seçebilirsiniz:
Otomatik hareket modu, yani hareket algıladığında röle belirli bir süre boyunca açık kalır.
Veya parlaklık modunu kullanabilirsiniz, böylece ışık belirli bir eşik değerinin altına düştüğünde röle açılır.
Son olarak, mevcut parlaklık değerine ve hareket algılanıp algılanmadığına göre röleyi kontrol etme seçeneği vardır.
Bu projede size tüm bu özellikleri çalışırken göstereceğiz.
JLCPCB
Bu proje JLCPCB tarafından  desteklenmiştir . JLCPCB, Çin'de iyi bilinen bir PCB prototip şirketidir. Hızlı PCB prototipi ve küçük parti üretimi konusunda uzmanlaşmıştır. Sadece 2 $ karşılığında en az 10 PCB sipariş edebilirsiniz.
Tumblr media
Breadboard devrelerinizi gerçek panolara dönüştürmek ve projelerinizi daha profesyonel hale getirmek istiyorsanız, yüksek kaliteli PCB'leri düşük fiyatlara sipariş etmek için Gerber dosyalarını yüklemeniz yeterli. Bunu daha sonra bu blog gönderisinde nasıl yapacağınızı göstereceğiz.
ESP8266 Çoklu Sensör Kalkanı Özellikleri
Multisensör Kalkanı, evinizi izlemek için faydalı olabilecek birkaç sensöre sahiptir. Kalkan şunları kontrol etmenizi sağlar:
Bir durumu belirtmek için 1x SMD LED
1x Işığa bağlı direnç (LDR)
1x DS18B20 sıcaklık sensörü
1x PIR hareket sensörü
Tumblr media
Ayrıca GND, 5V ve GPIO15'e erişmenizi sağlayan bir terminal bloğuna da sahiptir. Bu terminal, bir röleyi veya kontrol etmek isteyebileceğiniz başka herhangi bir çıkışı bağlamak için kullanılabilir.
Tumblr media
ESP8266 Çok Sensörlü Kalkan Pimi Ataması
Aşağıdaki tablo, çok sensörlü blendajın her bir bileşeni için pin atamasını açıklar:
BileşenWemos D1 Mini Pin MontajıPIR Hareket SensörüGPIO5 (D1)DS18B20 Sıcaklık SensörüGPIO4 (D2)Hafif Bağımlı DirençA0NEDEN OLMUŞGPIO12 (D6)Ek çıktıGPIO15 (D8)
Farklı pinler atamak ve kullanmak istiyorsanız, ESP8266 Pinout Referans Kılavuzumuzu okuyun .
Devreyi Breadboard Üzerinde Test Etme
PCB kalkanını tasarlamadan ve inşa etmeden önce devreyi bir devre tahtası üzerinde test etmek önemlidir. PCB yapmak istemiyorsanız yine de devreyi bir breadboard üzerine monte ederek bu projeyi takip edebilirsiniz.
Tumblr media
Gerekli Parçalar
Devreyi bir breadboard üzerine monte etmek için aşağıdaki parçalara ihtiyacınız vardır:
ESP8266 Wemos D1 Mini – En İyi ESP8266 Wi-Fi Geliştirme Kartını okuyun
1x 5mm LED
1x 330 Ohm direnç
1x DS18B20 sıcaklık sensörü
1x mini PIR hareket sensörü
1x ışığa bağlı direnç
2x 10k Ohm direnç
1x röle modülü
ekmek tahtası
Atlama telleri
Projeleriniz için tüm parçaları en iyi fiyata bulmak için önceki bağlantıları kullanabilir veya doğrudan MakerAdvisor.com/tools adresine gidebilirsiniz!
Tumblr media
Şematik
Tüm parçaları bir araya getirdikten sonra aşağıdaki şematik diyagramı izleyerek devreyi monte edin:
Tumblr media
İşte devre şeması:
Tumblr media
PCB tasarlama
Bir breadboard üzerinde devrenin düzgün çalıştığından emin olduktan sonra KiCad üzerinde bir PCB tasarladım . KiCad, PCB tasarlamak için kullanılan açık kaynaklı bir yazılımdır.
Tumblr media
Bir ESP8266 PCB kalkanı tasarlamak oldukça basittir. WeMos için önceden hazırlanmış KiCad parçaları var ve KiCad parçalarına aşağıda bir bağlantı bulabilirsiniz:
WeMos D1 Mini KiCad Parçası
LED, LDR, dirençler, terminal blokları vb. gibi diğer tüm bileşenler KiCad'de zaten mevcuttur.
Designing the circuit works like in any other circuit software tool, you place some components and you wire them together. When you’re happy with your circuit and pins usage, it’s time to assign each component to a footprint.
The WeMos D1 Mini was already created, and all the other components were also available by default on the KiCad parts library.
Having the parts assigned, you can start placing each component. When you’re happy with the layout, make all the connections and route your PCB. Once you’re done, save your project and export the Gerber files.
Note: if you’re familiar with KiCad, you can grab the project files and edit them to customize the shield for your own needs.
Download GERBER .zip file
KiCad project to edit the PCB
Ordering the PCBs
PCB'yi nasıl tasarlayacağınızı bilmiyorsanız, ancak yine de sipariş vermek istiyorsanız, çok kolay. Yapmanız gereken:
1. Gerber dosyalarını indirin – .zip dosyasını indirmek için buraya tıklayın
2.  JLCPCB.com'a gidin, “ ŞİMDİ SATIN AL ” düğmesine tıklayın ve az önce indirdiğiniz .zip dosyasını yükleyin.
Tumblr media
3. Altta bir başarı mesajı göreceksiniz. Ardından, her şeyin beklendiği gibi gidip gitmediğini kontrol etmek için sağ alt köşedeki “Gerber Viewer” bağlantısını kullanabilirsiniz. PCB'nin üstünü ve altını görüntüleyebilirsiniz. Lehim maskesini, serigrafiyi, bakırı vb. görüntüleyebilir veya gizleyebilirsiniz.
Tumblr media
Varsayılan ayarlarla, sadece 2$'a 10 adet PCB sipariş edebilirsiniz. Ancak, farklı bir PCB Rengi gibi diğer ayarları seçmek isterseniz, size birkaç dolara mal olacaktır.
4. Siparişinizden memnun kaldığınızda, siparişi tamamlamak için “ SEPETE KAYDET ” butonuna tıklayın.
Tumblr media
PCB'lerimin üretilmesi 2 gün sürdü ve DHL teslimat seçeneğiyle 3 iş günü içinde geldi.
Tumblr media
kutudan çıkarma
Yaklaşık bir hafta sonra PCB'leri ofisime aldım. Her zamanki gibi her şey iyi paketlenmiş olarak geldi ve PCB'ler gerçekten çok kaliteli.
Tumblr media
Serigrafi üzerindeki harfler gerçekten iyi basılmış ve okunması kolay. Bu fiyata daha iyi bir PCB hizmeti alabileceğinizi sanmıyorum.
Tumblr media
Bileşenleri Lehimleme
Bir sonraki adım, bileşenleri PCB'ye lehimlemektir. Bir SMD LED ve SMD dirençleri kullandım. SMD bileşenlerini lehimlemenin biraz zor olduğunu biliyorum, ancak PCB'de çok yer tasarrufu sağlıyorlar.
İşte kullandığım lehimleme araçları:
TS100 mini taşınabilir havya
Lehim 60/40 0,5 mm çap
Lehim matı
Tumblr media
TS100 Havya hakkındaki incelememizi okuyun:  TS100 Havya İncelemesi – En İyi Taşınabilir Havya .
PCB'ye lehimlemeniz gereken tüm bileşenlerin listesi burada (kalkanı Wemos D1 mini'ye takmak için başlık pimlerini unutmayın):
Tumblr media
1x SMD LED'i
1x 330 Ohm SMD dirençler
2x 10k Ohm SMD direnci
1x DS18B20 sıcaklık sensörü
1x mini PIR hareket sensörü
1x ışığa bağlı direnç
1x Vidalı klemensler
Dişi pin başlık soketi
SMD bileşenlerini lehimleyerek başlayın. Ardından, başlık pimlerini lehimleyin. Son olarak, diğer bileşenleri lehimleyin.
Tumblr media
WeMos Çoklu Sensör Kalkanı, tüm parçaları birleştirdikten sonra böyle görünüyor. ESP8266 WeMos D1 mini'ye mükemmel şekilde bağlanmalıdır.
Tumblr media
3D Baskılı Muhafaza
Son olarak, devrenizi yerleştirmek için bir muhafaza satın alabilirsiniz. Bir 3D yazıcınız varsa, kendi kasanızı oluşturabilirsiniz.
Creality CR-10 3D yazıcıyı kullanarak çok sensörlü kalkanı yerleştirmek için basit bir muhafazayı 3D yazdırdım .
Tumblr media
Muhafaza iki parçadan oluşur: alt ve kapak. Kapakta PIR hareket sensörü için bir boşluk ve LDR ve sıcaklık sensörü için dikdörtgen bir delik bulunur. Yanda, röle kabloları için bir boşluk ve ESP8266'ya güç sağlamak ve programlamak için USB kablosunun geçmesi için bir boşluk var.
Tumblr media
İşte bu, kalkan bitti!
Tumblr media
Şimdi biraz kod yazmanın zamanı geldi.
Çoklu Sensör Kalkanını Programlama
Bu projenin kodu, çeşitli yapılandırılabilir ayarlara dayalı olarak çoklu sensör kalkanını izlemenize ve kontrol etmenize izin veren bir web sunucusunu çalıştırır.
Devam etmeden önce Arduino IDE'nizde ESP8266 kurulu olmalıdır. Henüz yapmadıysanız, ESP8266'yı Arduino IDE'ye kurmak için sonraki öğreticiyi izleyin.
Arduino IDE'de ESP8266 Kartı Nasıl Kurulur
Web Sunucusuna Genel Bakış
Bu projeye devam edelim, kuracağımız web sunucusu, röleyi kontrol etmek için 4 farklı mod arasından seçim yapmanızı sağlar:
Manuel (mod 0) : röleyi açıp kapatmak için bir düğmeniz olduğu.
Otomatik PIR (mod 1) : hareket algılandığında röleyi açar. Bu modda, hareket algılandıktan sonra çıkışın kaç saniye açık olacağını ayarlayabileceğiniz bir alan vardır.
LDR (mod 2) : parlaklık belirli bir eşiğin altına düştüğünde röle açılır. %0 ile %100 arasında bir LDR eşik değeri ayarlayabilirsiniz.
Otomatik PIR ve LDR (mod 3) : bu mod, PIR hareket sensörünü ve LDR'yi birleştirir. Bu mod seçildiğinde PIR sensörü hareket algıladığında ve parlaklık değeri eşiğin altında olduğunda röle açılır. Bu modda zamanlayıcıyı ve LDR eşik değerini ayarlayabilirsiniz.
Tumblr media
Web sunucusunda, sıcaklık okumasını istemek için basabileceğiniz bir düğme de vardır. Sıcaklık okumalarını talep ettikten sonra, web sunucusu performansını optimize etmek için okumaları gizlemek için “Sensör Okumalarını Kaldır” düğmesine basabilirsiniz.
Her modda, seçilen modun yanı sıra mevcut çıkış durumunu gösteren bir etiket vardır.
ESP8266'nın sıfırlanması veya aniden güç kaybetmesi durumunda son çıkış durumunu ve ayarları hatırlamasını istiyoruz. Bu yüzden bu parametreleri ESP8266 EEPROM'a kaydetmemiz gerekiyor.
Kitaplıkları yükleme
Kodu yüklemeden önce, Arduino IDE'nize iki kitaplık yüklemeniz gerekir:  Paul Stoffregen'in OneWire kitaplığı ve DS18B20 sensörünü kullanabilmeniz için  Dallas  Sıcaklık kitaplığı . Bu kitaplıkları yüklemek için sonraki adımları izleyin.
OneWire kitaplığı
OneWire kitaplığını indirmek için buraya tıklayın . İndirilenler içinde bir .zip klasörünüz olmalıdır
.zip  klasörünü açın ve  OneWire  -master  klasörünü almalısınız
Klasörünüzü yeniden adlandırın OneWire-master OneWire'a  _
OneWire  klasörünü Arduino IDE kurulum  kitaplıkları  klasörünüze taşıyın 
Son olarak, Arduino IDE'nizi yeniden açın
Dallas Sıcaklık kitaplığı
DallasTemperature kütüphanesini indirmek için buraya tıklayın . İndirilenler içinde bir .zip klasörünüz olmalıdır
.zip  klasörünü açın ve Arduino-Temperature-Control-Library-master  klasörünü  almalısınız  .
Klasörünüzü yeniden adlandırın Arduino-Sıcaklık-Kontrol-Kütüphane-ustasıDallasSıcaklık  _ 
DallasTemperature klasörünü Arduino IDE kurulum  kitaplıkları  klasörünüze taşıyın 
Son olarak, Arduino IDE'nizi yeniden açın
kod
Aşağıdaki kodu Arduino IDE'ye kopyalayın.
/********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ // Load libraries #include <ESP8266WiFi.h> #include <EEPROM.h> #include <OneWire.h> #include <DallasTemperature.h> // Replace with your network credentials const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; // Auxiliary variables for temperature static char celsiusTemp[7]; static char fahrenheitTemp[7]; String temperatureString = ""; // Variable to hold the temperature reading // EEPROM size // Address 0: Last output state (0 = off or 1 = on) // Address 1: Selected mode (0 = Manual, 1 = Auto PIR, // 2 = Auto LDR, or 3 = Auto PIR and LDR) // Address 2: Timer (time 0 to 255 seconds) // Address 3: LDR threshold value (luminosity in percentage 0 to 100%) #define EEPROM_SIZE 4 // Set GPIOs for: output variable, status LED, PIR Motion Sensor, and LDR const int output = 15; const int statusLed = 12; const int motionSensor = 5; const int ldr = A0; // Store the current output state String outputState = "off"; // GPIO where the DS18B20 is connected to const int oneWireBus = 4; // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(oneWireBus); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); // Timers - Auxiliary variables unsigned long now = millis(); unsigned long lastMeasure = 0; boolean startTimer = false; unsigned long currentTime = millis(); unsigned long previousTime = 0; const long timeoutTime = 2000; // Auxiliary variables to store selected mode and settings int selectedMode = 0; int timer = 0; int ldrThreshold = 0; int armMotion = 0; int armLdr = 0; String modes[4] = { "Manual", "Auto PIR", "Auto LDR", "Auto PIR and LDR" }; // Decode HTTP GET value String valueString = "0"; int pos1 = 0; int pos2 = 0; // Variable to store the HTTP request String header; // Set web server port number to 80 WiFiServer server(80); void setup() { // Start the DS18B20 sensor sensors.begin(); // Serial port for debugging purposes Serial.begin(115200); // PIR Motion Sensor mode, then set interrupt function and RISING mode pinMode(motionSensor, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING); Serial.println("start..."); EEPROM.begin(EEPROM_SIZE); // Uncomment the next lines to test the values stored in the flash memory /*Serial.println(" bytes read from Flash . Values are:"); for(int i = 0; i < EEPROM_SIZE; i++) { Serial.print(byte(EEPROM.read(i))); Serial.print(" "); }*/ // Initialize the output variable and the LED as OUTPUTs pinMode(output, OUTPUT); pinMode(statusLed, OUTPUT); digitalWrite(output, HIGH); digitalWrite(statusLed, LOW); // Read from flash memory on start and store the values in auxiliary variables // Set output to last state (saved in the flash memory) if(!EEPROM.read(0)) { outputState = "off"; digitalWrite(output, HIGH); } else { outputState = "on"; digitalWrite(output, LOW); } selectedMode = EEPROM.read(1); timer = EEPROM.read(2); ldrThreshold = EEPROM.read(3); configureMode(); // Connect to Wi-Fi network with SSID and password Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Print local IP address and start web server Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); } void loop() { WiFiClient client = server.available(); // Listen for incoming clients if (client) { // If a new client connects, currentTime = millis(); previousTime = currentTime; Serial.println("New Client."); // print a message out in the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected currentTime = millis(); if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor header += c; if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // Display the HTML web page client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS to style the on/off buttons // Feel free to change the background-color and font-size attributes to fit your preferences client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;"); client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: #555555;}</style></head>"); // Request example: GET /?mode=0& HTTP/1.1 - sets mode to Manual (0) if(header.indexOf("GET /?mode=") >= 0) { pos1 = header.indexOf('='); pos2 = header.indexOf('&'); valueString = header.substring(pos1+1, pos2); selectedMode = valueString.toInt(); EEPROM.write(1, selectedMode); EEPROM.commit(); configureMode(); } // Change the output state - turn GPIOs on and off else if(header.indexOf("GET /?state=on") >= 0) { outputOn(); } else if(header.indexOf("GET /?state=off") >= 0) { outputOff(); } // Set timer value else if(header.indexOf("GET /?timer=") >= 0) { pos1 = header.indexOf('='); pos2 = header.indexOf('&'); valueString = header.substring(pos1+1, pos2); timer = valueString.toInt(); EEPROM.write(2, timer); EEPROM.commit(); Serial.println(valueString); } // Set LDR Threshold value else if(header.indexOf("GET /?ldrthreshold=") >= 0) { pos1 = header.indexOf('='); pos2 = header.indexOf('&'); valueString = header.substring(pos1+1, pos2); ldrThreshold = valueString.toInt(); EEPROM.write(3, ldrThreshold); EEPROM.commit(); Serial.println(valueString); } // Web Page Heading client.println("<body><h1>ESP8266 Web Server</h1>"); // Drop down menu to select mode client.println("<p><strong>Mode selected:</strong> " + modes[selectedMode] + "</p>"); client.println("<select id=\"mySelect\" onchange=\"setMode(this.value)\">"); client.println("<option>Change mode"); client.println("<option value=\"0\">Manual"); client.println("<option value=\"1\">Auto PIR"); client.println("<option value=\"2\">Auto LDR"); client.println("<option value=\"3\">Auto PIR and LDR</select>"); // Display current state, and ON/OFF buttons for output client.println("<p>GPIO - State " + outputState + "</p>"); // If the output is off, it displays the ON button if(selectedMode == 0) { if(outputState == "off") { client.println("<p><button class=\"button\" onclick=\"outputOn()\">ON</button></p>"); } else { client.println("<p><button class=\"button button2\" onclick=\"outputOff()\">OFF</button></p>"); } } else if(selectedMode == 1) { client.println("<p>Timer (0 and 255 in seconds): <input type=\"number\" name=\"txt\" value=\"" + String(EEPROM.read(2)) + "\" onchange=\"setTimer(this.value)\" min=\"0\" max=\"255\"></p>"); } else if(selectedMode == 2) { client.println("<p>LDR Threshold (0 and 100%): <input type=\"number\" name=\"txt\" value=\"" + String(EEPROM.read(3)) + "\" onchange=\"setThreshold(this.value)\" min=\"0\" max=\"100\"></p>"); } else if(selectedMode == 3) { client.println("<p>Timer (0 and 255 in seconds): <input type=\"number\" name=\"txt\" value=\"" + String(EEPROM.read(2)) + "\" onchange=\"setTimer(this.value)\" min=\"0\" max=\"255\"></p>"); client.println("<p>LDR Threshold (0 and 100%): <input type=\"number\" name=\"txt\" value=\"" + String(EEPROM.read(3)) + "\" onchange=\"setThreshold(this.value)\" min=\"0\" max=\"100\"></p>"); } // Get and display DHT sensor readings if(header.indexOf("GET /?sensor") >= 0) { sensors.requestTemperatures(); temperatureString = " " + String(sensors.getTempCByIndex(0)) + "C " + String(sensors.getTempFByIndex(0)) + "F"; client.println("<p>"); client.println(temperatureString); client.println("</p>"); client.println("<p><a href=\"/\"><button>Remove Sensor Readings</button></a></p>"); } else { client.println("<p><a href=\"?sensor\"><button>View Sensor Readings</button></a></p>"); } client.println("<script> function setMode(value) { var xhr = new XMLHttpRequest();"); client.println("xhr.open('GET', \"/?mode=\" + value + \"&\", true);"); client.println("xhr.send(); location.reload(true); } "); client.println("function setTimer(value) { var xhr = new XMLHttpRequest();"); client.println("xhr.open('GET', \"/?timer=\" + value + \"&\", true);"); client.println("xhr.send(); location.reload(true); } "); client.println("function setThreshold(value) { var xhr = new XMLHttpRequest();"); client.println("xhr.open('GET', \"/?ldrthreshold=\" + value + \"&\", true);"); client.println("xhr.send(); location.reload(true); } "); client.println("function outputOn() { var xhr = new XMLHttpRequest();"); client.println("xhr.open('GET', \"/?state=on\", true);"); client.println("xhr.send(); location.reload(true); } "); client.println("function outputOff() { var xhr = new XMLHttpRequest();"); client.println("xhr.open('GET', \"/?state=off\", true);"); client.println("xhr.send(); location.reload(true); } "); client.println("function updateSensorReadings() { var xhr = new XMLHttpRequest();"); client.println("xhr.open('GET', \"/?sensor\", true);"); client.println("xhr.send(); location.reload(true); }</script></body></html>"); // The HTTP response ends with another blank line client.println(); // Break out of the while loop break; } else { // if you got a newline, then clear currentLine currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } } } // Clear the header variable header = ""; // Close the connection client.stop(); Serial.println("Client disconnected."); } // Starts a timer to turn on/off the output according to the time value or LDR reading now = millis(); // Mode selected (1): Auto PIR if(startTimer && armMotion && !armLdr) { if(outputState == "off") { outputOn(); } else if((now - lastMeasure > (timer * 1000))) { outputOff(); startTimer = false; } } // Mode selected (2): Auto LDR // Read current LDR value and turn the output accordingly if(armLdr && !armMotion) { int ldrValue = map(analogRead(ldr), 0, 1023, 0, 100); Serial.println(ldrValue); if(ldrValue < ldrThreshold && outputState == "on") { outputOff(); } else if(ldrValue > ldrThreshold && outputState == "off") { outputOn(); } delay(100); } // Mode selected (3): Auto PIR and LDR if(startTimer && armMotion && armLdr) { int ldrValue = map(analogRead(ldr), 0, 1023, 0, 100); Serial.println(ldrValue); if(ldrValue < ldrThreshold) { outputOff(); startTimer = false; Serial.println("a"); } else if(ldrValue > ldrThreshold && outputState == "off") { outputOn(); Serial.println("b"); } else if(now - lastMeasure > (timer * 1000)) { outputOff(); startTimer = false; Serial.println("c"); } } } // Checks if motion was detected and the sensors are armed. Then, starts a timer. ICACHE_RAM_ATTR void detectsMovement() { if(armMotion || (armMotion && armLdr)) { Serial.println("MOTION DETECTED!!!"); startTimer = true; lastMeasure = millis(); } } void configureMode() { // Mode: Manual if(selectedMode == 0) { armMotion = 0; armLdr = 0; // Status LED: off digitalWrite(statusLed, LOW); } // Mode: Auto PIR else if(selectedMode == 1) { outputOff(); armMotion = 1; armLdr = 0; // Status LED: on digitalWrite(statusLed, HIGH); } // Mode: Auto LDR else if(selectedMode == 2) { armMotion = 0; armLdr = 1; // Status LED: on digitalWrite(statusLed, HIGH); } // Mode: Auto PIR and LDR else if(selectedMode == 3) { outputOff(); armMotion = 1; armLdr = 1; // Status LED: on digitalWrite(statusLed, HIGH); } } // Change output pin to on or off void outputOn() { Serial.println("GPIO on"); outputState = "on"; digitalWrite(output, LOW); EEPROM.write(0, 1); EEPROM.commit(); } void outputOff() { Serial.println("GPIO off"); outputState = "off"; digitalWrite(output, HIGH); EEPROM.write(0, 0); EEPROM.commit(); }
Ham kodu görüntüle
Bu kodu açıklamak oldukça uzundur, bu nedenle aşağıdaki iki değişkeni ağ kimlik bilgilerinizle değiştirebilirsiniz ve kod hemen çalışacaktır.
const char* ssid = ""; const char* password = "";
Bu kodun nasıl çalıştığını öğrenmek istiyorsanız okumaya devam edin.
Kod Nasıl Çalışır?
Gerekli kitaplıkları dahil ederek başlayın.
#include <ESP8266WiFi.h> #include <EEPROM.h> #include <OneWire.h> #include <DallasTemperature.h>
ESP Wi-Fi özelliklerini kullanmak için ESP8266WiFi kitaplığı gereklidir . EEPROM kitaplığı , ESP8266 EEPROM'da kalıcı verileri okumanıza ve yazmanıza olanak tanır ve OneWire ve DallasTemperature kitaplıkları, DS18B20 sıcaklık sensöründen sıcaklığı okumanıza olanak tanır.
Ağ Kimlik Bilgilerinizi Ayarlama
Bu iki değişkene ağ kimlik bilgilerinizi eklemeniz gerekir.
const char* ssid = ""; const char* password = "";
Bunlar, sıcaklığı Celsius/Fahrenheit cinsinden depolamak için yardımcı değişkenlerdir:
// Auxiliary variables for temperature and humidity static char celsiusTemp[7]; static char fahrenheitTemp[7]; static char humidityTemp[7]; String temperatureString = ""; // Variable to hold the temperature reading
EEPROM
Daha sonra erişmek istediğimiz EEPROM boyutunu tanımlıyoruz.
#define EEPROM_SIZE 4
Flash belleğe dört değer kaydetmemiz gerekecek: adres 0'daki son çıkış durumu, adres 1'deki seçilen mod, adres 2'deki zamanlayıcı değeri ve adres 3'teki LDR eşik değeri. Yani, 4 bayta ihtiyacımız var. flash bellekte.
Adres 0 : Son çıkış durumu (0 = kapalı veya 1 = açık)
Adres 1 : Seçilen mod (0 = Manuel, 1 = Otomatik PIR, 2 = Otomatik LDR veya 3 = Otomatik PIR ve LDR)
Adres 2 : Zamanlayıcı (zaman 0 - 255 saniye)
Adres 3 : LDR eşik değeri (yüzde 0 ila %100 olarak parlaklık)
GPIO'ları tanımlama
Bu bölümde çıkış, durum LED'i, PIR hareket sensörü ve LDR için GPIO'ları tanımlıyoruz.
const int output = 15; const int statusLed = 12; const int motionSensor = 5; const int ldr = A0;
Ayrıca web sunucusunda görüntülenecek outputState'i tutmak için bir String değişkeni oluşturuyoruz.
String outputState = "off";
Sıcaklık sensörü
Ardından, sıcaklık sensörü için gereken örnekleri oluşturun. Sıcaklık sensörü GPIO 4'e bağlıdır.
// GPIO where the DS18B20 is connected to const int oneWireBus = 4; // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(oneWireBus); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire);
zamanlayıcılar
Ardından, zamanlayıcılar için yardımcı değişkenler oluşturuyoruz:
long now = millis(); long lastMeasure = 0; boolean startTimer = false;
Seçilen Mod ve Ayarlar
Burada, seçilen modu ve ayarları saklamak için değişkenleri başlatıyoruz:
int selectedMode = 0; int timer = 0; int ldrThreshold = 0; int armMotion = 0; int armLdr = 0; String modes[4] = { "Manual", "Auto PIR", "Auto LDR", "Auto PIR and LDR" };
Web Sunucusu için Değişkenleri Ayarlama
Aşağıdaki kod parçası web sunucusuyla ilgilidir. Temel bir web sunucusu koduna aşina olmak için ESP8266 Web Sunucusu eğitimini takip edebilirsiniz .
// Decode HTTP GET value String valueString = "0"; int pos1 = 0; int pos2 = 0; // Variable to store the HTTP request String header; // Set web server port number to 80 WiFiServer server(80);
kurmak()
setup() içinde , DS18B20 sıcaklık sensörünü başlatarak başlayın.
sensors.begin();
Hata ayıklama amacıyla Seri Bağlantı Noktasını 115200 baud hızında başlatın.
Serial.begin(115200);
Yarıda kesmek
PIR hareket sensörünü INPUT_PULLUP olarak ayarlayın ve RISING modunda bir interrupt olarak tanımlayın.
pinMode(motionSensor, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);
flaş bellek
Kodun bu kısmı, flash belleği daha önce tanımlanan EEPROM boyutuyla başlatır.
EEPROM.begin(EEPROM_SIZE);
Durum LED'ini ve çıkış pinini çıkış olarak ayarlayın.
pinMode(output, OUTPUT); pinMode(statusLed, OUTPUT);
Tersine çevrilmiş mantıkla bir röleyi kontrol ediyoruz, bu yüzden onu YÜKSEK olarak ayarlayarak başlıyoruz, yani aslında başlıyor.
digitalWrite(output, HIGH); digitalWrite(statusLed, HIGH);
Ardından, çıktıyı en son kaydedilen duruma ayarlayın. Çıkış durumu 0 konumunda kaydedilir, bu nedenle EEPROM.read(0) kullanın.
Çıkış durumunu buna göre güncellemek için kaydedilen durumun açık mı yoksa kapalı mı olduğunu kontrol ederiz.
if(!EEPROM.read(0)) { outputState = "off"; digitalWrite(output, HIGH); } else { outputState = "on"; digitalWrite(output, LOW); }
Ayrıca, EEPROM'da kayıtlı değerlerle, seçilen mod, zamanlayıcı ve LDR eşik değeri gibi ayarları tutan tüm değişkenleri güncelliyoruz.
selectedMode = EEPROM.read(1); timer = EEPROM.read(2); ldrThreshold = EEPROM.read(3);
Ardından, her moda doğru değerleri atamak için configureMode() işlevini çağırırız.
configureMode();
configureMode() işlevi
Şimdi bu fonksiyonun nasıl çalıştığına bir göz atalım. Seçilen mod Manuel ise, hareket etkinleştirilmez ( armMotion ), ne LDR ( armLdr ). Ayrıca manuel modda olduğumuzu göstermek için durum LED'ini DÜŞÜK olarak ayarlıyoruz (otomatik modlarda durum LED'i yanıyor).
if(selectedMode == 0) { armMotion = 0; armLdr = 0; // Status LED: off digitalWrite(statusLed, LOW); }
Diğer modları yapılandırmak için benzer bir işlem yapılır. Bir sensörü etkinleştirmek veya devre dışı bırakmak için kol değişkenlerini değiştirirsiniz. Şimdi setup() 'a geri dönelim .
Wi-Fi bağlantısı
Burada Wi-Fi ağına bağlanıyoruz ve Seri Monitörde ESP8266 IP adresini yazdırıyoruz.
Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Print local IP address and start web server Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin();
döngü()
loop() ' da web sunucusunu görüntüler ve seçilen mod ve ayarlara göre işleri yaparız.
ESP8266 Web Sunucusu Eğitiminde web sunucularını çok ayrıntılı olarak ele aldık . Bu nedenle, bu proje için daha alakalı olan kısımlara bir göz atacağız.
Canlı bir gösteri ile neler olduğunu açıklarsak, kodun bu kısmı daha kolay anlaşılır.
Web sunucusuna eriştiğinizde benzer bir web sayfası göreceksiniz.
Tumblr media
En üstte bu dört farklı moddan birini seçebilirsiniz.
Tumblr media
Manuel (mod 0)
Otomatik PIR (mod 1)
Otomatik LDR (mod 2)
Otomatik PIR ve LDR (mod 3)
manuel mod
Örneğin, Manuel modu seçerseniz, kodun aşağıdaki kısmı yürütülür.
if(header.indexOf("GET /?mode=") >= 0) { pos1 = header.indexOf('='); pos2 = header.indexOf('&'); valueString = header.substring(pos1+1, pos2); selectedMode = valueString.toInt(); EEPROM.write(1, selectedMode); EEPROM.commit(); configureMode(); }
Seçilen modu selectedMode değişkenine kaydeder ve flash bellekte şu şekilde saklar:
EEPROM.write(1, selectedMode);
Web sayfası görünümü seçilen moda göre değişir. Bu durumda, 0'a karşılık gelen manuel modu seçtiğimiz için, aşağıdaki if ifadesi doğrudur ve web sayfasında çıktıyı kontrol etmek için iki düğme görüntülenecektir.
if(selectedMode == 0) { if(outputState == "off") { client.println("<p><button class=\"button\" onclick=\"outputOn()\">ON</button></p>"); } else { client.println("<p><button class=\"button button2\" onclick=\"outputOff()\">OFF</button></p>"); } }
Açma ve kapama düğmelerine tıkladığınızda aşağıdaki kod çalışır ve bu iki else if ifadesinden biri çıktıyı açar veya kapatır.
// Change the output state - turn GPIOs on and off else if(header.indexOf("GET /?state=on") >= 0) { outputOn(); } else if(header.indexOf("GET /?state=off") >= 0) { outputOff(); }
Otomatik PIR modu
Şimdi, açılır menüden Otomatik PIR modunu seçin.
Tumblr media
Web sayfasında görünen yeni bir giriş alanı var. Bu alan, hareket algılandıktan sonra çıkışın kaç saniye açık kalacağını belirtmek için 0 ile 255 arasında bir int numarası yazmanıza olanak tanır.
Numarayı değiştirdiğinizde, kodun aşağıdaki bölümünü çağırır ve zamanlayıcı değişkenini değiştirir.
else if(header.indexOf("GET /?timer=") >= 0) { pos1 = header.indexOf('='); pos2 = header.indexOf('&'); valueString = header.substring(pos1+1, pos2); timer = valueString.toInt(); EEPROM.write(2, timer); EEPROM.commit(); Serial.println(valueString); }
Bu modda (mod 1), yalnızca zamanlayıcı için giriş alanını görüntüler.
else if(selectedMode == 1) { client.println("<p>Timer (0 and 255 in seconds): <input type=\"number\" name=\"txt\" value=\"" + String(EEPROM.read(2)) + "\" onchange=\"setTimer(this.value)\" min=\"0\" max=\"255\"></p>"); }
Otomatik LDR modu
Otomatik LDR modunu seçin ve yeni bir giriş alanı belirir.
Tumblr media
Bu, LDR eşik değerini ayarlar ve parlaklık yüzdesini belirtmek için 0 ile 100 arasında bir sayı girebilirsiniz. Bu alanı değiştirdiğinizde, LDR eşik değerini güncellemek için kodun aşağıdaki bölümünü çağırır:
else if(header.indexOf("GET /?ldrthreshold=") >= 0) { pos1 = header.indexOf('='); pos2 = header.indexOf('&'); valueString = header.substring(pos1+1, pos2); ldrThreshold = valueString.toInt(); EEPROM.write(3, ldrThreshold); EEPROM.commit(); Serial.println(valueString); }
Bu mod 2'dir ve ldr shold giriş alanını gösterecektir.
else if(selectedMode == 2) { client.println("<p>LDR Threshold (0 and 100%): <input type=\"number\" name=\"txt\" value=\"" + String(EEPROM.read(3)) + "\" onchange=\"setThreshold(this.value)\" min=\"0\" max=\"100\"></p>"); }
Otomatik PIR ve LDR modu
Otomatik PIR ve LDR modunun seçilmesi hem PIR hem de LDR'yi etkinleştirir. Ayrıca iki giriş alanına sahip yeni bir web sayfası yükler.
Tumblr media
Her iki giriş alanı da daha önce tanımladığımız şekilde çalışır.
Sensör okumaları
Son olarak, sıcaklık okumalarını istemek ve görüntülemek için bir düğme vardır.
Tumblr media
if(header.indexOf("GET /?sensor") >= 0) { sensors.requestTemperatures(); temperatureString = " " + String(sensors.getTempCByIndex(0)) + "C " + String(sensors.getTempFByIndex(0)) + "F"; client.println("<p>"); client.println(temperatureString); client.println("</p>");
Bu okumaları kaldırmak için basabileceğiniz bir düğme de vardır.
client.println("<p><a href=\"/\"><button>Remove Sensor Readings</button></a></p>");
Çoklu sensörünüzün ayarlarını bu şekilde yapılandırırsınız. Ardından, seçilen mod ve ayarlara göre , çıkışın açık mı yoksa kapalı mı olacağını kontrol etmek için loop() 'un başka bir parçası çalışır.
Çıkış Durumunu Kontrol Etme
Örneğin, hareket algılandığında, bir zamanlayıcıyı başlatanDetectsMovement () işlevini çağırır.
void detectsMovement() { if(armMotion || (armMotion && armLdr)) { Serial.println("MOTION DETECTED!!!"); startTimer = true; lastMeasure = millis(); } }
Ardından geçen süreye bağlı olarak çıkışı açar veya kapatır.
// Mode selected (1): Auto PIR if(startTimer && armMotion && !armLdr) { if(outputState == "off") { outputOn(); } else if((now - lastMeasure > (timer * 1000))) { outputOff(); startTimer = false; } }
Çıkışı, eşik değerinin parlaklığına göre açıp kapatmak için kodun aşağıdaki bölümü de vardır.
// Mode selected (2): Auto LDR // Read current LDR value and turn the output accordingly if(armLdr && !armMotion) { int ldrValue = map(analogRead(ldr), 0, 1024, 0, 100); //Serial.println(ldrValue); if(ldrValue > ldrThreshold && outputState == "on") { outputOff(); } else if(ldrValue < ldrThreshold && outputState == "off") { outputOn(); } delay(100); }
Son olarak, otomatik PIR ve LDR modu seçildiğinde ve hareket algılandığında aşağıdaki kod parçası çalışır.
// Mode selected (3): Auto PIR and LDR if(startTimer && armMotion && armLdr) { int ldrValue = map(analogRead(ldr), 0, 4095, 0, 100); //Serial.println(ldrValue); if(ldrValue > ldrThreshold) { outputOff(); startTimer = false; } else if(ldrValue < ldrThreshold && outputState == "off") { outputOn(); } else if(now - lastMeasure > (timer * 1000)) { outputOff(); startTimer = false; } }
Kod aşağı yukarı bu şekilde çalışır, biz de kodun anlaşılmasını kolaylaştırmak için bir sürü yorum yazmak için çaba harcadık.
WeMos Multisensör kalkanını bu kodla programladık, ancak herhangi bir ev otomasyon platformuyla entegre olmak için kendi kodunuzu yazabilirsiniz. Çok sensörlü kalkanın pin atamasını dikkate almanız yeterlidir.
Kodu Yükle
Kodu ESP8266'nıza yüklemek için yükle düğmesine tıklayın. Doğru kartın ve COM bağlantı noktasının seçili olduğundan emin olun.
Tumblr media
Çoklu Sensör Kalkanını Test Etme
112500 baud hızında Seri Monitörü açın. ESP IP adresini yazdırmak için ESP8266 etkinleştirme düğmesine basın.
Tumblr media
Tarayıcınızı açın ve ESP8266 IP adresini yazın. Aşağıdaki sayfa yüklenmelidir.
Tumblr media
Çıkış terminal soketine bir röle modülü bağladık, bu nedenle 12V'luk bir lambayı kontrol ediyoruz, ancak istediğiniz herhangi bir çıkışı kontrol edebilirsiniz.
Tumblr media
Şimdi her modu seçin, her şeyin düzgün çalışıp çalışmadığını kontrol etmek için farklı ayarlar yapmayı deneyin.
Örneğin, Manuel modu seçin ve lambayı açıp kapatın.
Tumblr media
Otomatik PIR modunu seçin. Bu modda lamba, hareket algılandığında ayarladığınız saniye sayısı kadar yanar.
Tumblr media
LDR modunda lambanın yanmasını sağlayacak eşik değerini ayarlayabilirsiniz. LDR'yi kapattığımda parlaklık eşiğin altına düşüyor ve lamba yanıyor.
Tumblr media
Otomatik PIR ve LDR modunda, zamanlayıcıyı ve LDR eşiğini ayarlayabilirim.
Tumblr media
Hareket algılanırsa ancak ışık yoğunluğu eşiğin üzerindeyse hiçbir şey olmaz. Ama LDR'yi kapatırsam yani ışık yok ve hareket algılanıyorsa, ayarlarda tanımladığım saniye kadar lamba yanar.
En son sıcaklık okumalarını istemek için “Sensör Okumalarını Görüntüle” düğmesine de tıklayabilirsiniz.
Tumblr media
Toplama
Aşağıda yorum yapan birine 5 çıplak PCB veriyoruz! Basitçe bu blog gönderisine PCB ile ne yapmak istediğinize dair bir yorum gönderin ve bu çıplak PCB'lerden birini kazanma şansına sahip olursunuz. Kazananlar önümüzdeki hafta açıklanacak! Öyleyse, bizi izlemeye devam edin! [Güncelleme] çekiliş sona erdi ve kazananlar: Ram Chivukula, Phillip R. Hickman, Douglas W Murray, Terry Wegener ve Dale Wolver.
Tumblr media
Bu proje için bu kadar. Umarız bu projeyi faydalı bulmuşsunuzdur ve bunu kendiniz oluşturabilirsiniz. Multisensör Kalkanını ihtiyaçlarınıza uygun başka bir kod ile programlayabilirsiniz. Örneğin, mevcut sıcaklık değerine göre çıkışı kontrol edebilirsiniz. Ayrıca gerber dosyalarını düzenleyebilir ve ESP8266 Multisensor Shield'a başka özellikler ekleyebilirsiniz.
0 notes