ESP32 multifunkční deska slouží pro další využití v projektu OSPy. Více o mém projektu zde a zde. Stránky projektu: https://opensprinkler.cz/ a zdrojové kódy na Githubu: https://github.com/martinpihrt/OSPy/tree/master/hardware_pcb/sensors_pcb_fw/ESP32.
Srdcem desky je čip Espressif ESP32, ke kterému jsou připojeny veškeré sondy (teplota, pohyb, kontakt, průtok, vlhkost). Ty se připojují pomocí šroubovacích svorek, nebo konektorů RJ11. Deska s řídícím systémem OSPy komunikuje přes Wi-Fi síť.
FREE (v příloze veškerá dokumentace: program pro ESP32, deska spojů...) - > pojato jako "open hardware"
Parametry desky - co lze připojit (pomocí svorek, nebo RJ11)
- 4 ks teplotní čidlo DS18B20 (3 žilový kabel do 40 metrů pro každé čidlo)
- 1ks pohybový vstup (spínač, nebo například PIR - možnost definovat typ připojení pull-up, nebo pull-down)
- 1ks kontaktní vstup (spínač, nebo například PIR - možnost definovat typ připojení pull-up, nebo pull-down)
- 1ks průtokoměr/vodoměr (kontakt, nebo otevřený kolektor ze snímacího prvku)
- 1ks čidlo vlhkosti (připojení pomocí I2C sběrnice)
- 1ks kontakt relé (spínací kontakt) pro ovládání zátěže
- napájení 5V až 30V DC/ min 1A
- nastavení pro připojení k Wi-Fi síti -> pomocí AP manažeru
Schéma zapojení
Deska spojů
Rozměry desky
Seznam součástek
Foto z osazování desky
5.3.2021 jsem objednal desky spojů u www.allpcb.com na článku se pracuje :-) Desky budou stát (10 ks) 52.68 dolarů a mají přijít do 15-30 dnů.
19.4.2021 desky z Číny jsou tady :-)
Animace
Napájení snímače (vstupy a výstupy)
Připojení čidel k desce (konektor RJ, nebo svorkovnice)
- Teplota DS1-DS4 (DS18B20)
- Kontakt
- Průtok
- Pohyb
- Vlhkost, I2C, hladina - vzdálenost (sonic)
Teplota DS1-DS4
Kontakt
Průtok
Pohyb
Různé způsoby připojení pohybového čidla nalezneme zde: https://pihrt.com/elektronika/439-ospy-jak-pridat-a-pripojit-snimace?start=4
Vlhkost, I2C, vzdálenost (sonic)
Ultrazvukové čidlo JSNSR04T (V3) -> https://www.aliexpress.com/item/32863960886.html
Z webu Aliexpressu (prodejce)
The new version of SR04T-V3.0 recently released solves the problem of blind data jumps and improves the stability of the product. JSN-SR0T4-V3.0 ultrasonic ranging module can provide 21cm-600cm non-contact distance sensing Function, ranging accuracy can be as high as 3mm; the module consists of an ultrasonic sensor and control circuit integrated with transceiver. The usage of mode one is compatible with our HC-SR04 module
Features:
1. Small size and easy to use:
2. Low voltage and low power consumption:
3. High measurement accuracy;
4. Strong anti-interference;
5. Integrated closed waterproof probe with wire, suitable for wet and harsh measurement occasions
Product parameters:
Working voltage: DC: 3.0V-5.5V
Working current: less than 8mA
Probe frequency: 40kHz
The longest range: 600cm
Recent range: 20cm
Long range accuracy: ±1cm
Resolution: 1mm
Mileage angle: 75 degrees
Input trigger signal: 1. TTL pulse above 10uS; 2. Serial port sending command 0X55
Output echo signal Output pulse width level signal, or TTL
Wiring:
3-5. 5V (power +)
Trig (Control) RX
Echo (output) TX
GND (power-)
Working temperature: -20-+70 degree
- Mode 2: M2 short connection is serial port controlled output
- Mode 1: M1 short connection is automatic serial output
- Mode 0: Mode floating = trigger pulse width output (factory default mode)
- Mode 3: Mode welding 200K = automatic distance pulse width output
- Mode 4: Mode welding 360K = low power pulse width mode output
- Mode 5: Mode welding 470K = switch mode output
Mode 1: Mode=open means no welding. The mode is explained as follows
Basic working principle:
(1) Adopt IO port TRIG to trigger ranging. Present a high level signal of at least 10us.
(2) The module automatically sends eight 40khz square waves and automatically detects whether a signal returns;
(3) When a signal returns, a high level is output through the IO port ECH0. The duration of the high level is the time from the transmission of the ultrasonic wave to the return. Test distance height = (high level time * speed of sound (348M/S))/2.
(4) After the module is triggered for ranging, if the echo cannot be received (the reason exceeds the measured range or the probe does not face the measured object), the ECHO port will automatically become low after 40MS, marking this time The measurement ends, regardless of success.
Mode 2: Mode=47K (or directly short M1 bit) UART automatic output
The UART automatic output mode outputs the measured distance value (hexadecimal number) according to the UART communication format. This mode does not require an external trigger signal. The module can automatically measure every 100ms. The TX pin outputs the measured distance value after each measurement is completed.
Mode 3: Mode=120K (or short M2 bit directly) UART controlled output
The UART controlled output method outputs the measured distance value (hexadecimal number) according to the UART communication format. In this method, the trigger command oX55 signal needs to be added to the RX pin. The module measures once every time the command is received. The foot outputs the measured distance value. The command trigger cycle should be greater than 60ms.
Mode 4: Mode=200K high level (PWM) pulse width automatic output
Under the pulse width PWM automatic output, the module automatically measures at a period of 200ms, and outputs a pulse width high level corresponding to the distance after the measurement. Calculating distance mode reference mode 1.
Mode 5: Mode=360K low power consumption (PWM) high level pulse width controlled output
In low-power mode, the module's shut-down dog is disabled. This module is suitable for battery-powered users. The static power consumption is less than 70UA. The working distance measurement method is the same as mode 1.
Mode 6: Mode=470K switch output
The module will set a threshold value at the factory, the default is 1.5 meters. The module performs ranging every 200ms. When the detected distance value of the target is less than the set threshold, the Echo pin outputs a high level. The currently detected distance value is greater than the set threshold, and the Echo pin outputs a low power. In order to improve the stability, the factory defaults that the distance detected by the target for two consecutive times is less than the set threshold. Signal, no driving ability. Transistor drive relays should be added during application. If there are special requirements, you need to modify the threshold or other settings, you need to specify when purchasing.
Programování se provádí následovně (sekvence) -> na programátoru není jumper spojen ani s 5V, ani s 3V3! Používá se napájení snímače.
K vložení programu do procesoru ESP32 jsem použil zakoupený programátor https://www.tme.eu/cz/details/wsh-11325/konvertory/waveshare/11325/
U tme.eu stojí cca 90,-. Programátor stačí připojit k USB počítače a druhou stranu zasunout do desky snímače (využívají se pouze piny: Rx,Tx,Gnd). Ale až po kontrole, že na desce snímače pracuje zdroj 3,3V! Ověříme multimetrem.
- máme připojený programátor do USB a desky snímače
- v Arduinu připravený program pro nahrání do snímače (použito při prototypu: Arduino IDE 1.8.13 + Board 1.0.6 + HW DOIT ESP32 DEVKIT V1 https://github.com/espressif/arduino-esp32
- na desce snímače podržíme současně tlačítko "KEY" a "EN", zapneme napájecí zdroj 5-24V pro snímač a uvolníme tlačítko "EN". Tím přepneme ESP do režimu uploadu
- v Arduinu klepneme na tlačíko "nahrát"
- po úspěšném nahrání stiskneme tlačítko "EN" pro provedení restartu cpu ESP32
- pokud necháme připojený programátor a v Arduino IDE si zapneme sériový monitor (115200bd), tak uvidíme debug výpis co se děje
- nastavíme snímač pomocí mobilního telefonu. Stiskneme na dobu delší než 2 vteřiny tlačítko "AP". LED začne blikat rychle
- přiřadíme snímač do OSPy
- příští aktualizace FW snímače můžeme provádět přímo z prostředí OSPy
Pro zalévání 18 truhlíků jahod chci použít čerpadlo na 12V/4A - 4l/min, které bude připojené k multisnímači. Vodu budu odebírat z barelu IBC 1m3
Čerpadlo má tyto výhody: je samonasávací až do hloubky 1,2 metru a může běžet i bez vody. Pokud se výstup uzavře, tak má ochranu (tlakový snímač vypne motor)
Filtr proti nečistotám sání z barelu (listí atd...) - aby čerpadlo nesálo "bordel"
Provizorní propojení pro test (čerpadlo, deska multisnímače, sonda DHT22 a DS18B20, zdroj 12V/5A)
Připojení k OSPy systému
- zapnul jsem napájení multisnímače a vyzkoušel, že čerpadlo spíná (na dobu menší než 2 sec jsem stisknul tlačítko "AP" -> čerpadlo se zapnulo - LED trvale svítí a opačně to samé pro vypnutí)
- na multisnímači jsem stisknul tlačítko "AP" na dobu delší než 2 vteřiny (rozblikala se rychle LED dioda)
- na mobilním telefonu jsem se připojil k Wi-Fi síti "ospy-sensor-esp32" a následně zadal do prohlížeče IP adresu "192.168.1.1" - (na nastavení máme 10 minut)
- v nastavení snímače jsem zadal IP adresu OSPy systému, název snímače, jedinečný kód snímače, typ sondy vlhkosti DHT22
- po nastavení všech parametrů jsem provedl restart snímače (nejprve v telefonu a následně i tlačítkem na desce)
Video - nastavení snímače přes telefon
V OSPy systému jsem dal "vyhledávání snímačů" a v seznamu nalezl můj multisnímač. Protože mám router a za ním připojenou Wi-Fi, tak vidím rozdílné IP adresy (multisnímač není na stejné síti, jako OSPy systém). 10.10.10.144 je adresa multisnímače (tu kterou dostal od Wi-Fi routeru). 192.168.88.237 je adresa přívodu do Wi-Fi routeru (statická adresa routeru).
Tlačítkem "vytvořit z tohoto" jsem bez práce (bez nutnosti nastavování v OSPy) vytvořil nový "senzor 1" pro měření teploty čidlem DS1 a následně stejným způsobem nový "sensor 2" pro měření vlhkosti pomocí DHT22.
Na obrázku je vidět naměřená teplota 15,5 °C a vlhkost 37,2 %. Dále je vidět síla signálu RSSI Wi-FI 38% a napětí zdroje 12,6V -> vše pracuje jak má :-)
Dalším krokem je nastavení ovládání relé ze systému OSPy. Protože jdu z OSPy do Wi-Fi routeru (z jedné sítě do jiné sítě, tak jsem v routerech nastavil směrování takto: co přijde na IP 192.168.88.237 port 90 - to je adresa Wi-Fi routeru ze sítě OSPy, tak se bude směrovat na IP 10.10.10.144 port 80 - adresu snímače. Snímač běží na portu 80, ale Wi-Fi má na portu 80 svůj web server, proto směruji z 90 na 80 a né z 80 na 80).
V OSPy jsem si vytvořil virtuální stanici číslo 17 (mám použito 16 fyzických výstupů - relé, tak budu pokračovat dále virtuálně), stanici jsem si pojmenoval "barel jahody" a přiřadil si k ní obrázek. Následně jsem spustil v OSPy rozšíření pro ovládání CLI a v něm nastavil příkaz pro zapnutí a pro vypnutí relé (pro stanici 17, tedy pro multisnímač a jeho relé).
Příkazy pro ovládání relé v multisnímači z OSPy je v tomto formátu
- zapnutí relé wget http://IPsnímače:port/bezpečnostíkód?re=1
- vypnutí relé wget http://IPsnímače:port/bezpečnostíkód?re=0
Po nastavení ovládání stanice 17 a označení "Použít CLI" jsem provedl restart OSPy (aby se rozšíření CLI aktivovalo).
Tadá :-) při ručním ovládání stanic v OSPy relé (a tím i čerpadlo 12V) spíná jak má. Následně stačí vytvořit nějaký program, který bude spínat stanici 17.
Při běžném provozu se data ze snímače do OSPy odesílají po 30 vteřinách (teploty, vlhkost). V případě detekce pohybu nebo kontaktu se data odesílají okamžitě (změna na vstupu). V případě detekce průtoku (počet pulsů na vstupu LEAK není 0) se data odesílají po 5 vteřinách. V případě, že se snímači nepodaří data odeslat, tak se pokus opakuje za 5 vteřin namísto za 30 vteřin. V běžném provozu LED bliká pomalu (vše pracuje jak má).
Snímač jsem namontoval do laminátového RZ sloupku. Vodu čerpám z 1000 litrového barelu čerpadlem 12V.
První zjištění z provozu
Signál Wi-Fi mám jen cca 24%. Mám daleko Wi-Fi router. Zkusím nahradit externí antenkou, kterou přidělám na rozvaděč.
Protože mám rozvaděč umístěn za rohem domu a pod terénem, tak je síla signálu snímače jen 26% (to je pro dlouhodobou spolehlivost málo - hrozí restarty snímače).
Z tohoto důvodu osadím externí anténu, kterou osadím na rozvaděč. Použiji tuto anténu a kabel ESP32-anténa.
Kabel (pigtail) U.FL->RSMA
https://www.i4wifi.cz/cs/210404-kabel-waverf-u-fl-na-rsma-25cm-kabel-pigtail-u-fl-rsma-reverzni-pro-minipci-25cm stojí cca 73,-
- Konektor 1: uFL
- Konektor 2: RSMA (F)
- Délka: 25 cm
Anténa všesměrová (2,4GHz, 10dBi, RSMA)
https://www.i4wifi.cz/cs/211045-antena-waverf-01-vs-mdb10 stojí cca 218,-
Výrobce: WAVERF
Upřesnění typu: Wi-Fi anténa
Technické detaily
Impedance (ohm): 50
Maximální výkon (W): 5
Polarizace: vertikální
Provozní teplota max (°C): 40
Provozní teplota min (°C): +0
PSV: <2
Zisk (dBi): 10
Vyzař. úhel - V. (°): 10
Vyzař. úhel - H. (°): 360
Síťová rozhraní
Frekvence Wi-Fi: 2400 MHz
Fyzické vlastnosti
Hmotnost (kg): 0.1
Je mi jasné, že anténa je určena do vnitřního prostředí (teplota, vlhkost). Prostě to risknu! Rozvaděč je relativně schovaný před větrem a deštěm zcela jistě.
Umístění na rozvaděči
Sláva :-) povedlo se. Po montáži antény se síla Wi-Fi signálu zvedla z 26% na 51%. Snímač se po zapnutí napájení připojí okamžitě (před tím to trvalo delší dobu). Tímto potvrzuji to co jsem si myslel a již na pár konstrukcích ověřil a to, že když je Wi-Fi pod 30% je spojení nestabilní a pomalé.
Pro hlídání stavu dveří (proti dětem - co kdyby se někdo chtěl kouknout co je uvnitř? tak ať to vím!) jsem použil spínací kontakt mikrospínače "Omron D3V-163-3C5".
https://www.tme.eu/cz/details/d3v-163-3c5/mikrospinace-snap-action/omron-ocb/
Pro měření hladiny nádrže 1000 litrů (barel) je použito čidlo JSN-SR04 verze 3, která umožňuje napájení od 3V.
Specifikace:
- Verze: 3.0
- Pracovní rozsah: 25-450cm
- Vysoká přesnost: až 5mm
- Pracovní úhel: <50 stupnů
- Klidový proud: <5mA
- Proud při měření cca: 30mA
- Frekvence: 40khz
- Napájecí napětí: 3-5,5VDC
- Rozměry modulu: 41x29mm
- Délka kabelu: 2,5m
Do víka jsem vyvrtal díru 22 mm a do ní vsadil čidlo. Čidlo je vodotěsné (dle pohledu jistě z přední strany, ale ze zadní mi něpřijde vodotěsné - kolem kablíku je díra. Možná je vnitřek v něčem zalitý...), ale zadní stranu jsem raději schoval do víčka. Od Víka vede kabel do vodotěsné krabičky, kde je umístěna deska elektroniky. Z krabice vede 4 žilový nestíněný kabel cca 7 metrů do rozvaděče s multisnímačem.
Ve snímači se využívá výchozí režim "MODE 0" -> není tedy potřeba na desce nic měnit.
Na straně barelu je vše připraveno :-) nyní jen připojit do rozvaděče na konektor I2C, HUMI, SONIC...
Verze FW 1.10 s uvedeným snímačem nepracuje. Vydám verzi FW 1.11, která je opravena (čidlo JSN potřebuje při měření více času. Výchozí čas čekání 10 us bylo málo -> zvýšeno na 50 us. A zároveň i opraveno pár chyb...) O víkendu namontuji a otestuji.
Aktualizace 13.6.2021
Po namontování snímače do víka barelu jsem po aktualizaci FW na 1.11 zjistil, že snímač ukazuje stále 22cm. Když jsem zapojil jiný kus (na drátech ve vzduchu) do desky multisnímače, tak byla hodnota z ultrazvuku v pořádku. Tak jsem snímač vyměnil za jiný a čekal, že bude vše v pořádku. A ejhle nebylo! Zjistil jsem, že snímač umístěný ve víku detekuje okamžitě překážku (jako kdyby byla před snímačem překážka).
Řešením bylo snímač posunout o cca 8cm směrem dovnitř -> a je po problému :-) Snímač v barelu ukazuje jak má. Jediný problém, který má použití tohoto snímače JSN je vzdálenost před snímačem. Ta je minimálně 22cm. Tedy nebudu moci přesně změřit 100% hladinu vody v nádrži, protože při max hladině je snímač cca 12cm nad hladinou. Bude tedy v rozmezí 12cm až 22cm ukazovat stále hodnotu 22cm (tj. 100% hladiny). Jelikož mám detekci hlavně z důvodu nedostatku vody (blokování čerpadla při 5cm hladině), tak mi tento problém nevadí.