ΠΡΠΊΠΎΠ³Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° Π΄ΠΎΠΌΠ°ΡΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ, ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΎΡΠ΅ ΠΊΠ°ΡΠΎ "ΡΠΌΠ½ΠΈΡ Π΄ΠΎΠΌ", Π±ΡΡ Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΊΡΠΏΠΈ ΠΈ ΡΠ°ΠΌΠΎ Π±ΠΎΠ³Π°ΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π° Π΄Π° ΡΠΈ Π³ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ. ΠΠ½Π΅Ρ Π½Π° ΠΏΠ°Π·Π°ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΡΡ Π΄ΠΎΡΡΠ° Π±ΡΠ΄ΠΆΠ΅ΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΈ Ρ Π΄Π°ΡΡΠΈΡΠΈ, Π±ΡΡΠΎΠ½ΠΈ/ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ²Π΅ΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ, Π²Π΅Π½ΡΠΈΠ»Π°ΡΠΈΡΡΠ°, Π²ΠΎΠ΄ΠΎΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ. Π Π΄ΠΎΡΠΈ Π½Π°ΠΉ-Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΈΡΡ Π² DIY ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΠΈ Π² Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΠΎ ΠΈ Π·Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΡΠΈ Π΄Π° ΡΠ³Π»ΠΎΠ±ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π·Π° ΡΠΌΠ½ΠΈΡ Π΄ΠΎΠΌ.

ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π½ΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠ° ΠΈΠ»ΠΈ Π΄Π°ΡΡΠΈΡΠΈ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈ. Π’Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π»Π΅ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΊΠ°ΡΠΎ "ΠΏΡΠΈ ΡΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°ΡΡΠΈΠΊ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΡΠ²Π΅ΡΠ»ΠΈΠ½Π°ΡΠ°" ΠΈΠ»ΠΈ "ΠΊΠ»ΡΡΡΡ Π΄ΠΎ ΠΈΠ·Ρ
ΠΎΠ΄Π° Π³Π°ΡΡΠ²Π° ΡΠ²Π΅ΡΠ»ΠΈΠ½Π°ΡΠ° Π² ΡΠ΅Π»ΠΈΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ". ΠΠΎ Ρ ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡΡΠ° Π½Π΅ΡΠ°ΡΠ° Π½Π΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ
Π°. Π Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ Π³ΡΠ°ΡΠΈΠΊΠ° Π½Π° ΡΠ΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΠ°ΡΠ° ΠΈ Π²Π»Π°ΠΆΠ½ΠΎΡΡΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΠΌΠΎΡΠ½ΠΎΡΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ°ΠΊΡ.
ΠΠ°ΡΠΊΠΎΡΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π²ΠΎΠ΄ΠΎΠΌΠ΅ΡΠΈ Ρ ΠΈΠΌΠΏΡΠ»ΡΠ΅Π½ ΠΈΠ·Ρ ΠΎΠ΄. ΠΡΠ΅ΠΊΠΈ Π»ΠΈΡΡΡ, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π» ΠΏΡΠ΅Π· Π²ΠΎΠ΄ΠΎΠΌΠ΅ΡΠ°, Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Ρ Π΅ΡΠΊΠΎΠ½ ΠΈ Π·Π°ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ°. ΠΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ° Ρ ΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΈΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ° ΠΏΠΎΠ»Π·Π° ΠΎΡ ΡΠΎΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²ΠΎΠ΄Π° ΠΏΠΎ ΡΠ°ΡΠΎΠ²Π΅ ΠΈ Π΄Π½ΠΈ ΠΎΡ ΡΠ΅Π΄ΠΌΠΈΡΠ°ΡΠ°. Π Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ²ΠΎΠ»Π° Π·Π° Π²ΠΎΠ΄Π° Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ°, Π΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ Π΅ΠΊΡΠ°Π½, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄Π° ΡΠ΅ ΠΌΡΡΠ° Ρ ΡΠΎΠ½Π°ΡΠΈΠΊ ΠΈΠ· ΡΡΡΠ΄Π½ΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΠΈ Π½ΠΈΡΠΈ.
ΠΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΌΠΎΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° ESP8266, ΠΊΠΎΠ΅ΡΠΎ Π±ΡΠΎΠΈ ΠΈΠΌΠΏΡΠ»ΡΠΈΡΠ΅ ΠΎΡ Π²ΠΎΠ΄ΠΎΠΌΠ΅ΡΠΈΡΠ΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° Π½Π° ΡΠΌΠ½ΠΈΡ Π΄ΠΎΠΌ ΠΏΠΎ MQTT. Π©Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΠΌΠ΅ Ρ micropython, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° uasyncio. ΠΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠΌΡΠ΅ΡΠ° ΡΡΠ΅ΡΠ½Π°Ρ
Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ, Π·Π° ΠΊΠΎΠΈΡΠΎ ΡΡΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ. ΠΠ° Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅!
Π‘Ρ Π΅ΠΌΠ°

Π‘ΡΡΡΠ΅ΡΠΎ Π½Π° ΡΡΠ»Π°ΡΠ° ΡΡ
Π΅ΠΌΠ° Π΅ ΠΌΠΎΠ΄ΡΠ»ΡΡ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° ESP8266. ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π±Π΅ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ ESP-12, Π½ΠΎ ΠΌΠΎΡΡ ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π΄Π΅ΡΠ΅ΠΊΡΠ΅Π½. ΠΡΠΈΡ
ΠΎΠ΄Π° Π΄Π° ΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΠ»Ρ Ρ ΠΌΠΎΠ΄ΡΠ»Π° ESP-07, ΠΊΠΎΠΉΡΠΎ Π±Π΅ΡΠ΅ Π½Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ° ΡΠ°ΡΡΠΈΠ΅ ΡΠ΅ ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΠΏΠΎ ΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π΅ Π² Π°Π½ΡΠ΅Π½Π°ΡΠ° β ΠΏΡΠΈ ESP-12 ΡΡ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½Π°, Π° ΠΏΡΠΈ ESP-07 β Π²ΡΠ½ΡΠ½Π°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π΄ΠΎΡΠΈ Π±Π΅Π· Π°Π½ΡΠ΅Π½Π°, WiFi ΡΠΈΠ³Π½Π°Π»ΡΡ Π² Π±Π°Π½ΡΡΠ° ΠΌΠΈ ΡΠ΅ ΡΠ»Π°Π²Ρ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ.
Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ:
- Π±ΡΡΠΎΠ½ Π·Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠ΄ΡΡΠ³ ΠΈ ΠΊΠΎΠ½Π΄Π΅Π½Π·Π°ΡΠΎΡ (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈ Π΄Π²Π΅ΡΠ΅ Π²Π΅ΡΠ΅ Π³ΠΈ ΠΈΠΌΠ° Π² ΠΌΠΎΠ΄ΡΠ»Π°)
- Π‘ΠΈΠ³Π½Π°Π»ΡΡ enable (CH_PD) Π΅ ΡΠ²ΡΡΠ·Π°Π½ ΠΊΡΠΌ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ΡΠΎ
- GPIO15 Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π½ΡΠ»Π°. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π½ΠΎ Π·Π° ΠΌΠ΅Π½ Π΅ Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΡΠΌΠ°ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΡΠ²ΡΡΠΆΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΈΠ½.
ΠΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π° Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ»Π°ΡΠΈΡΠ°Π½Π΅, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ GPIO2 Ρ Π½ΡΠ»Π°, Π° Π·Π° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΡ Π±ΡΡΠΎΠ½ Boot. Π Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠ·ΠΈ ΠΏΠΈΠ½ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ΡΠΎ.
Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π»ΠΈΠ½ΠΈΡΡΠ° GPIO2 ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° β ΠΏΡΠΈ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ ΠΈΠ»ΠΈ Π²Π΅Π΄Π½Π°Π³Π° ΡΠ»Π΅Π΄ Π½ΡΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ. Π’Π°ΠΊΠ° ΠΌΠΎΠ΄ΡΠ»ΡΡ ΠΈΠ»ΠΈ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°, ΠΊΠ°ΠΊΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ»Π°ΡΠΈΡΠ°Π½Π΅. Π‘Π»Π΅Π΄ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΡΠΎΠ·ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ GPIO. Π ΡΠΎΠΌ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΠΌ Π±ΡΡΠΎΠ½, ΠΌΠΎΠ³Π° Π΄Π° Π΄ΠΎΠ±Π°Π²Ρ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΊΡΠΌ Π½Π΅Π³ΠΎ.
ΠΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ Π΄Π΅Π±ΡΠ³Π²Π°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ UART, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½ Π½Π° ΠΏΠ»ΠΎΡΠΊΠ°ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΡΠΎΡΡΠΎ ΡΠ²ΡΡΠ·Π²Π°ΠΌ USB-UART Π°Π΄Π°ΠΏΡΠ΅Ρ. Π’ΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° Π½Π΅ Π·Π°Π±ΡΠ°Π²Ρ, ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΠ°Π±ΠΎΡΠΈ Ρ 3.3V. ΠΠΊΠΎ Π·Π°Π±ΡΠ°Π²Ρ Π΄Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ° Π°Π΄Π°ΠΏΡΠ΅ΡΠ° Π½Π° ΡΠΎΠ²Π° Π½Π°ΠΏΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π°ΠΌ 5V, ΠΌΠΎΠ΄ΡΠ»ΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·Π³ΠΎΡΠ΅.
Π‘ Π΅Π»Π΅ΠΊΡΡΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π² Π±Π°Π½ΡΡΠ° Π½ΡΠΌΠ°ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ β ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Π΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π½Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠ΅ΡΡΡ ΠΎΡ Π±ΡΠΎΡΡΠΈΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ Π³ΠΎ Π·Π°Ρ ΡΠ°Π½Π²Π°ΠΌ ΠΎΡ 220V. ΠΠ°ΡΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΌΠ°Π»ΡΠΊ ΠΎΡ Tenstar Robot. ΠΠΈΡΠ½ΠΎ Π·Π° ΠΌΠ΅Π½ Π΅ ΡΡΡΠ΄Π½ΠΎ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Π°ΡΠ° ΠΈ ΡΠΈΠ»ΠΎΠ²Π°ΡΠ° Π΅Π»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ°, Π° ΡΡΠΊ ΠΈΠΌΠ°ΠΌ Π³ΠΎΡΠΎΠ² Π·Π°Ρ ΡΠ°Π½Π²Π°Ρ Π±Π»ΠΎΠΊ Π² ΠΌΠ°Π»ΡΠΊ ΠΊΠΎΡΠΏΡΡ.
ΠΠ° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄, ΡΠ²ΡΡΠ·Π°Π½ ΠΊΡΠΌ GPIO2. ΠΡΠ΅ ΠΏΠ°ΠΊ Π½Π΅ ΡΠ΅ΡΠΈΡ Π΄Π° Π³ΠΎ ΡΠ²ΡΡΠ·Π²Π°ΠΌ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² ΠΌΠΎΠ΄ΡΠ»Π° ESP-07 Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄, ΡΠ²ΡΡΠ·Π°Π½ ΠΊΡΠΌ ΡΡΡΠΈΡ GPIO2. ΠΠΎ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Π½Π΅ΠΊΠ° Π³ΠΎ ΠΈΠΌΠ° β ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΠΈΠ·Π²Π΅Π΄Π° ΡΠΎΠ·ΠΈ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ Π½Π° ΠΊΠΎΡΠΏΡΡΠ°.
ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ. ΠΡΠΈ Π²ΠΎΠ΄ΠΎΠΌΠ΅ΡΠΈΡΠ΅ Π½ΡΠΌΠ° Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΎΡ ΠΊΠΎΡΡΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΡΠΊΠ°ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ°ΠΌ Π½Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ° ΠΈΠΌΠΏΡΠ»ΡΠΈΡΠ΅ β Π·Π°ΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Π½Π° Ρ Π΅ΡΠΊΠΎΠ½Π° Π½Π° Π²ΡΠ΅ΠΊΠΈ Π»ΠΈΡΡΡ. ΠΠ·Π²ΠΎΠ΄ΠΈΡΠ΅ Π½Π° Ρ Π΅ΡΠΊΠΎΠ½ΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ GPIO12/GPIO13. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈΡΡ ΡΠ΅Π·ΠΈΡΡΠΎΡ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΎ Π²ΡΡΡΠ΅ Π² ΠΌΠΎΠ΄ΡΠ»Π°.
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π·Π°Π±ΡΠ°Π²ΠΈΡ Π΄Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Ρ ΡΠ΅Π·ΠΈΡΡΠΎΡΠΈΡΠ΅ R8 ΠΈ R9 ΠΈ Π² ΠΌΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° ΡΠ΅ Π»ΠΈΠΏΡΠ²Π°Ρ. ΠΠΎ ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌ ΡΡ Π΅ΠΌΠ°ΡΠ° Π½Π° ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π΄ΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π΅ ΡΠΌΠ΅ΡΡΠ½ΠΎ Π΄Π° ΠΏΠΎΠΏΡΠ°Π²Ρ ΡΠ°Π·ΠΈ Π³ΡΠ΅ΡΠΊΠ°. Π Π΅Π·ΠΈΡΡΠΎΡΠΈΡΠ΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ, Π·Π° Π΄Π° Π½Π΅ ΠΏΠΎΠ²ΡΠ΅Π΄ΡΡ ΠΏΠΎΡΡΠ° Π² ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΡΠ»Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π·Π°Π±ΠΈΠ΅ ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π½Π° ΠΏΠΈΠ½Π°, Π° Ρ Π΅ΡΠΊΠΎΠ½ΡΡ Π·Π°ΡΠ²ΠΎΡΠΈ ΡΠ°Π·ΠΈ Π»ΠΈΠ½ΠΈΡ Ρ Π½ΡΠ»Π° (Ρ ΡΠ΅Π·ΠΈΡΡΠΎΡΠ° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 3.3V/1000Ξ© = 3.3mA).
ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° ΠΏΠΎΠΌΠΈΡΠ»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ, Π°ΠΊΠΎ Π΅Π»Π΅ΠΊΡΡΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈΠ·ΡΠ΅Π·Π½Π΅. ΠΡΡΠ²ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ - Π΄Π° Π·Π°ΠΏΠΈΡΠ°ΠΌΠ΅ ΡΡΡΠ²ΡΡΠ° Π·Π° Π½Π°ΡΠ°Π»Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅Π»ΠΈΡΠ΅ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅. ΠΠΎ ΡΠΎΠ²Π° Π±ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π»ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π·Π° ΠΎΠ±ΠΌΠ΅Π½. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π² ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΡΠ²ΡΡΠ°. ΠΠΊΠΎ ΡΠ»Π΅Π΄ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π»Π΅ΠΊΡΡΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΡΡΡΠ²ΡΡΡΡ Π½Π΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° (ΠΈΠ»ΠΈ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ), ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅Π»ΡΡ Π½Π° Π²ΠΎΠ΄Π° Π½Π΅ Π±ΠΈ ΠΌΠΎΠ³ΡΠ» Π΄Π° ΠΏΠΎΠΈΡΠΊΠ° Π½Π°ΡΠ°Π»Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌ Π·Π°ΠΏΠ°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅Π»ΠΈΡΠ΅ Π² ΠΌΠΈΠΊΡΠΎΡΠΈΠΏ Ρ ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ²ΡΡΠ·Π°Π½ ΠΏΠΎ I2C. ΠΡΠΌΠ°ΠΌ ΠΎΡΠΎΠ±Π΅Π½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° - Π½ΡΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΌΠΎ 2 ΡΠΈΡΠ»Π° (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π»ΠΈΡΡΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅Π»ΠΈΡΠ΅ Π·Π° ΡΠΎΠΏΠ»Π° ΠΈ ΡΡΡΠ΄Π΅Π½Π° Π²ΠΎΠ΄Π°). ΠΠΎΡΠΈ ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΈΡΡ ΠΌΠΎΠ΄ΡΠ» ΡΡΠ°Π²Π°. ΠΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΡΠΈΠΊΠ»ΠΈΡΠ΅ Π½Π° Π·Π°ΠΏΠΈΡ. ΠΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠΎΠ²Π° ΡΠ° 100 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΠΈΠΊΡΠ»Π°, Π° ΠΏΡΠΈ Π½ΡΠΊΠΎΠΈ - Π΄ΠΎ ΠΌΠΈΠ»ΠΈΠΎΠ½.
ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄ ΠΌΠΈΠ»ΠΈΠΎΠ½ΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠΎ ΠΏΡΠ΅Π· 4-ΡΠ΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΠΆΠΈΠ²Π΅Ρ Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° ΡΠΈ, ΡΡΠΌ ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π°Π» ΠΌΠ°Π»ΠΊΠΎ Π½Π°Π΄ 500 ΠΊΡΠ±ΠΈΠΊΠ° Π²ΠΎΠ΄Π°, ΡΠΎΠ²Π° ΡΠ° 500000 Π»ΠΈΡΡΠ°! Π 500000 Π·Π°ΠΏΠΈΡΠ° Π²ΡΠ² ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ°. Π ΡΠΎΠ²Π° Π΅ ΡΠ°ΠΌΠΎ ΡΡΡΠ΄Π΅Π½Π° Π²ΠΎΠ΄Π°. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠ³Π° Π΄Π° ΠΏΡΠ΅ΠΏΠΎΡΠ²Π°ΠΌ ΠΌΠΈΠΊΡΠΎΡΠΈΠΏΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ, Π½ΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ ΠΈΠΌΠ° ΠΌΠΈΠΊΡΠΎΡΠΈΠΏΠΎΠ²Π΅ FRAM. ΠΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ, ΡΠΎΠ²Π° Π΅ ΡΡΡΠΈΡΡ I2C EEPROM, ΡΠ°ΠΌΠΎ Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΊΠ»ΠΈ Π½Π° ΠΏΡΠ΅Π·Π°ΠΏΠΈΡ (ΡΡΠΎΡΠΈΡΠΈ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ). Π‘Π°ΠΌΠΎ ΡΠ΅ Π΄ΠΎΡΠ΅Π³Π° Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠΌ ΡΡΠΏΡΠ» Π΄Π° ΡΡΠΈΠ³Π½Π° Π΄ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Ρ ΡΠ°ΠΊΠΈΠ²Π° ΠΌΠΈΠΊΡΠΎΡΠΈΠΏΠΎΠ²Π΅, Π·Π°ΡΠΎΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° 24LC512.
ΠΠ΅ΡΠ°ΡΠ½Π° ΠΏΠ»Π°ΡΠΊΠ°
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Π² Π΄ΠΎΠΌΠ°ΡΠ½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠ°ΡΠΎΠ²Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ Π΅Π΄Π½ΠΎΡΡΡΠ°Π½Π½Π°. ΠΠΎ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΠΊΠ°ΡΠ°Ρ ΡΠ°Ρ Π² ΠΎΠΏΠΈΡΠΈ Ρ Π»Π°Π·Π΅ΡΠ½Π° ΡΡΠΈΡ ΠΈ ΡΠΏΠΎΠΉΠΊΠ° (Π±Π΅Π· Π½Π΅Ρ Π½Π΅ Π΅ ΠΊΠ°ΡΠΎ Ρ ΠΎΡΠ°ΡΠ°), Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ΡΠΈΡ Π΄Π° ΠΏΠΎΡΡΡΠ°ΠΌ ΠΏΠ»Π°ΡΠΊΠΈΡΠ΅ ΠΎΡ ΠΊΠΈΡΠ°ΠΉΡΠΈ.

ΠΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΡΡΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠ»Π°ΡΠΊΠΈΡΠ΅ ΠΎΡΡΠ·Π½Π°Ρ
, ΡΠ΅ ΠΎΡΠ²Π΅Π½ ΠΌΠΈΠΊΡΠΎΡΠΈΠΏΠ° Ρ ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ Π½Π° ΡΠΈΠ½Π° I2C ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ ΠΈ Π½Π΅ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ. ΠΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π° Π½Π° Π½Π΅Π³ΠΎ - ΠΎΡΠ΅ Π΅ Π²ΡΠΏΡΠΎΡ, Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ°. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΌΡΡΠ°ΠΌ Π΄Π° ΠΏΠΎΡΡΡΠ°ΠΌ ΠΏΠ»Π°ΡΠΊΠΈΡΠ΅ ΠΎΡ ΡΠ°Π±ΡΠΈΠΊΠ°, Π½ΡΠΌΠ°ΡΠ΅ ΡΠΌΠΈΡΡΠ» Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ° Π΄ΠΎ Π΅Π΄Π½ΠΎΡΡΡΠ°Π½Π½Π° ΠΏΠ»Π°ΡΠΊΠ°, Π·Π°ΡΠΎΠ²Π° Π»ΠΈΠ½ΠΈΠΈΡΠ΅ Π½Π° I2C - ΡΠ° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΠΎΡ Π·Π°Π΄Π½Π°ΡΠ° ΡΡΡΠ°Π½Π° Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ°.
Π‘Π²ΡΡΠ·Π°Π½ Ρ Π΅Π΄Π½ΠΎΡΡΡΠ°Π½Π½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΈ Π΅Π΄ΠΈΠ½ Π³ΠΎΠ»ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π° Π΅Π΄Π½ΠΎΡΡΡΠ°Π½Π½ΠΎ, ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ΠΎ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ ΠΏΡΡΠ΅ΠΊΠΈΡΠ΅ ΠΈ SMD ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ ΠΎΡ Π΅Π΄Π½Π°ΡΠ° ΡΡΡΠ°Π½Π°, Π° ΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅, ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅ ΠΈ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ΡΠΎ ΠΎΡ Π΄ΡΡΠ³Π°ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΡΠ»Π΅Π΄ ΠΌΠ΅ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ»Π°ΡΠΊΠΈΡΠ΅, Π·Π°Π±ΡΠ°Π²ΠΈΡ Π·Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ ΠΏΠ»Π°Π½ ΠΈ Π·Π°ΠΏΠΎΠΈΡ Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΎΡ Π»ΠΈΡΠ΅Π²Π°ΡΠ° ΡΡΡΠ°Π½Π°. Π Π΅Π΄Π²Π° ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠΈΠ³Π½Π°Ρ Π΄ΠΎ Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Ρ ΡΠ°Π½Π²Π°ΡΠΈΡ Π±Π»ΠΎΠΊ, ΡΠ°Π·Π±ΡΠ°Ρ , ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈΡΡ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡ ΡΠ° ΠΎΠ±ΡΡΠ½Π°ΡΠΈ. ΠΠ°Π»ΠΎΠΆΠΈ ΡΠ΅ Π΄Π° ΠΈΠΌΠΏΡΠΎΠ²ΠΈΠ·ΠΈΡΠ°ΠΌ Ρ jumper-ΠΈ. ΠΠ° ΡΠ½ΠΈΠΌΠΊΠ°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π²Π΅ΡΠ΅ ΡΡΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ» ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ, Π½ΠΎ Π·Π΅ΠΌΡΡΠ° ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ ΠΎΡ Π΅Π΄Π½Π° ΡΠ°ΡΡ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Π² Π΄ΡΡΠ³Π° ΠΏΡΠ΅Π· ΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅ Π½Π° Π±ΡΡΠΎΠ½Π° Boot (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΡΡΠ΅ΡΠΊΠ° Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ»ΠΎΠΉ).
Π‘ΡΠ°Π½Π°Ρ Π° ΡΠ°ΠΊΠ°

ΠΠ°Π»ΡΡ
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° - ΠΊΠΎΡΠΏΡΡ. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° 3D ΠΏΡΠΈΠ½ΡΠ΅Ρ, ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ΅ ΡΠ΅ Π·Π°ΠΌΠΈΡΠ»ΠΈΡ ΠΎΡΠΎΠ±Π΅Π½ΠΎ - ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΠΈΡΡΠ²Π°Ρ ΠΊΡΡΠΈΡ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΈΠ·ΡΠ΅Π·ΠΈ Π½Π° Π½ΡΠΆΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠ°. ΠΠ°ΠΏΠ°ΠΊΡΡ ΡΠ΅ Π·Π°ΠΊΡΠ΅ΠΏΠ²Π° ΠΊΡΠΌ ΠΊΠΎΡΠΏΡΡΠ° Ρ ΠΌΠ°Π»ΠΊΠΈ ΡΠ°ΠΌΠΎΡΠ΅Π·ΠΈ.

ΠΠ΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ
, ΡΠ΅ Π±ΡΡΠΎΠ½ΡΡ Boot ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π±ΡΡΠΎΠ½ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ - Π΅ΡΠΎ Π³ΠΎ ΠΈ Π½Π΅Π³ΠΎ Π½Π° ΠΏΡΠ΅Π΄Π½ΠΈΡ ΠΏΠ°Π½Π΅Π». ΠΠ° ΡΠ΅Π»ΡΠ° Π½Π°ΡΠΈΡΡΠ²Π°Ρ
ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ 'ΠΊΠΎΠ»ΠΎΠ΄Π΅Ρ', ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π±ΡΡΠΎΠ½Π°.

ΠΡΡΡΠ΅ Π² ΠΊΠΎΡΠΏΡΡΠ° ΡΡΡΠΎ ΡΠ° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠ΅Π½ΡΠΊΠΈ, Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ ΡΠΈΠΊΡΠΈΡΠ° Ρ Π΅Π΄ΠΈΠ½ Π²ΠΈΠ½Ρ Π3 (Π½Π΅ ΠΎΡΡΠ°Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΡΡΡΠΎ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ°).
ΠΠΈΡΠΏΠ»Π΅ΡΡ ΠΏΠΎΠ΄Π±ΡΠ°Ρ , ΠΊΠΎΠ³Π°ΡΠΎ Π²Π΅ΡΠ΅ Π±ΡΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΠ°Π» ΠΏΡΡΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΠΊΠΎΡΠΏΡΡΠ°. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ Π΄Π²ΡΡΡΡΠΎΡΠ΅Π½ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ Π½Π΅ ΡΠ΅ ΡΡΠ±ΠΈΡΠ°ΡΠ΅ Π² ΡΠΎΠ·ΠΈ ΠΊΠΎΡΠΏΡΡ, Π½ΠΎ Π² Π·Π°ΠΏΠ°ΡΠΈΡΠ΅ ΠΎΡΠΊΡΠΈΡ OLED Π΄ΠΈΡΠΏΠ»Π΅ΠΉ SSD1306 128Γ32. ΠΠ°Π»ΠΊΠΎ Π΅, Π½ΠΎ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ Π³Π»Π΅Π΄Π°ΠΌ Π²ΡΠ΅ΠΊΠΈ Π΄Π΅Π½ - ΡΡΠ°Π²Π°.
ΠΡΠ΅ΡΠ΅Π½ΡΠ²Π°ΠΉΠΊΠΈ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΊΠ°ΡΠ°Ρ ΠΊΠ°Π±Π΅Π»ΠΈΡΠ΅, ΡΠ΅ΡΠΈΡ Π΄Π° Π·Π°Π»Π΅ΠΏΡ Π΄ΠΈΡΠΏΠ»Π΅Ρ Π² ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΊΠΎΡΠΏΡΡΠ°. ΠΡΠ³ΠΎΠ½ΠΎΠΌΠΈΡΡΠ°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΅ ΠΏΠΎΠ΄ Π²ΡΡΠΊΠ°ΠΊΠ²Π° ΠΊΡΠΈΡΠΈΠΊΠ° - Π±ΡΡΠΎΠ½ΡΡ Π΅ ΠΎΡΠ³ΠΎΡΠ΅, Π΄ΠΈΡΠΏΠ»Π΅ΡΡ - ΠΎΡΠ΄ΠΎΠ»Ρ. ΠΠΎ Π²Π΅ΡΠ΅ ΠΊΠ°Π·Π°Ρ , ΡΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Ρ Π΄ΠΎΠΉΠ΄Π΅ ΡΠ²ΡΡΠ΄Π΅ ΠΊΡΡΠ½ΠΎ ΠΈ Π½ΡΠΌΠ°ΡΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ²Π°ΠΌ ΠΏΠ»Π°ΡΠΊΠ°ΡΠ°, Π·Π° Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΡ Π±ΡΡΠΎΠ½Π°.
Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π² ΡΠ±ΠΎΡ. ΠΠΈΡΠΏΠ»Π΅ΠΉΠ½ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ» Π΅ Π·Π°Π»Π΅ΠΏΠ΅Π½ Ρ ΡΠ΅ΡΠΌΠΎΠΊΠ»Π΅ΠΉ.


ΠΡΠ°ΠΉΠ½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ Π½Π° ΠΠΠΠ.
ΠΡΠΎΡΠΈΠ²ΠΊΠ°
ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΡΠΎΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ°ΡΡ. ΠΠ° ΡΠ°ΠΊΠΈΠ²Π° ΠΌΠ°Π»ΠΊΠΈ ΠΈΠ·Π΄Π΅Π»ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Ρ Π°ΡΠ΅ΡΠ²Π°ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Π΅Π·ΠΈΠΊΠ° Python ()- ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ. ΠΠ° ΡΠ°ΡΡΠΈΠ΅, Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΡΠΏΡΡΠΊΠ°ΠΌ Π΄ΠΎ Π½ΠΈΠ²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈ, Π·Π° Π΄Π° ΠΈΠ·ΡΡΠΈΡΠΊΠ°ΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄ΠΈ - Π²ΡΠΈΡΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΡ Python.
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ Π½Π΅ ΡΡΠ²ΡΠ΅ΠΌ β ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π½Π°ΡΠΈΡΠΊΠ° Π±ΡΡΠΎΠ½Π° ΠΈ Π³Π»Π΅Π΄Π° Π΄ΠΈΡΠΏΠ»Π΅Ρ
- ΠΠΈΡΡΠΈΡΠ΅ ΡΠΈΠΊΠ°Ρ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π²ΡΠ² ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ°
- ΠΠΎΠ΄ΡΠ»ΡΡ ΡΠ»Π΅Π΄ΠΈ ΡΠΈΠ³Π½Π°Π»Π° Π½Π° WiFi ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΊΠΎΠ½Π΅ΠΊΡΠΈΡΠ°, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
- Π Π±Π΅Π· ΠΌΠΈΠ³Π°ΡΠ° Π»Π°ΠΌΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅
ΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠΏΡΡΠ½Π΅, ΡΠ΅ Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π°ΠΊΠΎ Π΄ΡΡΠ³Π° ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π°Π±Π°Π²Ρ. ΠΠ΅ΡΠ΅ ΡΡΠΌ ΡΠ΅ Π½Π°ΡΡΠΊΠ½Π°Π» Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π² Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΈ Π²Π΅ΡΠ΅ Π²ΠΈΠΆΠ΄Π°ΠΌ Π³Π»ΡΠΊΠΎΠ²Π΅ Π² ΡΡΠΈΠ» "ΠΏΡΠΎΠΏΡΡΠ½Π°Ρ Π»ΠΈΡΡΡ, Π·Π°ΡΠΎΡΠΎ Π² ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΡΠ΅ Π΄ΠΈΡΠΏΠ»Π΅ΡΡ" ΠΈΠ»ΠΈ "ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ WiFi". Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΡΠΊΠΎΠΈ Π½Π΅ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΡΠ΅Π· ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π΄ΡΠ»ΠΆΠΈΠ½Π°, Π²Π»ΠΎΠΆΠ΅Π½ΠΎΡΡ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Π°ΡΠΎΠΌΠ°ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π ΠΊΠΎΠ΄ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° Ρ Π²ΡΠΈΡΠΊΠΎ Π½Π°Π²Π΅Π΄Π½ΡΠΆ, Π±ΡΡΠ·ΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² ΠΊΠ°ΡΠ°.
Π ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ° Π²ΡΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡ ΠΈ FreeRTOS, Π½ΠΎ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π½Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ. ΠΠΈΡΠΎΠ½ΠΎΠ²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅ Π΅ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½Π° β Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ° Π΅ Π²ΡΠΈΡΠΊΠΎ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° ΡΠΈ, ΡΠ°ΠΌΠΎ ΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΊΡΠ΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΡΠΊΠΈΡΠ΅.
Π Π°Π·Π»ΠΈΠΊΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ°ΡΠ° ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½Π°ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΏΡΠΎΡΡΠΈΡΠ΅ Π² Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ. Π ΡΠ΅Π³Π° Π½Π΅ΠΊΠ°, Π½Π°ΠΉ-Π½Π°ΠΊΡΠ°Ρ, Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΊΠΎΠ΄Π°.
#####################################
# Counter class - implements a single water counter on specified pin
#####################################
class Counter():
debounce_ms = const(25)
def __init__(self, pin_num, value_storage):
self._value_storage = value_storage
self._value = self._value_storage.read()
self._value_changed = False
self._pin = Pin(pin_num, Pin.IN, Pin.PULL_UP)
loop = asyncio.get_event_loop()
loop.create_task(self._switchcheck()) # Thread runs foreverΠΡΠ΅ΠΊΠΈ Π±ΡΠΎΡΡ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΎΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΊΠ»Π°ΡΠ° Counter. ΠΡΡΠ²ΠΎ, ΠΎΡ EEPROM (value_storage) ΡΠ΅ ΡΠ΅ΡΠ΅ Π½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° Π±ΡΠΎΡΡΠ° β ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΡΠ»Π΅Π΄ Π·Π°Π³ΡΠ±Π° Π½Π° Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅.
ΠΠΈΠ½ΡΡ ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ° ΡΡΡ Π²Π³ΡΠ°Π΄Π΅Π½Π° ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π½Π΅ ΠΊΡΠΌ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ΡΠΎ: Π°ΠΊΠΎ Ρ Π΅ΡΠΊΠΎΠ½ΡΡ Π΅ Π·Π°ΠΌΠΊΠ½Π°Ρ β Π½Π° Π»ΠΈΠ½ΠΈΡΡΠ° Π΅ Π½ΡΠ»Π°, Π°ΠΊΠΎ Π΅ ΡΠ°Π·ΠΎΠΌΠΊΠ½Π°Ρ, Π»ΠΈΠ½ΠΈΡΡΠ° ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π° ΠΊΡΠΌ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅ΡΠΎ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΡΡ ΡΠ΅ΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ°.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΠΊ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΡΠ΄Π΅Π»Π½Π° Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΠΏΠΈΡ Π½Π° ΠΏΠΈΠ½Π°. ΠΡΠ΅ΠΊΠΈ Π±ΡΠΎΡΡ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΡΠ²ΠΎΡ Π·Π°Π΄Π°ΡΠ°. ΠΡΠΎ Π½Π΅ΠΉΠ½ΠΈΡ ΠΊΠΎΠ΄
""" ΠΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΏΠΈΠ½Π° ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ Π»ΠΈΡΡΡ """
async def _switchcheck(self):
last_checked_pin_state = self._pin.value() # ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°ΡΠ°Π»Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠΈΠ½Π°
while True:
state = self._pin.value()
if state != last_checked_pin_state:
# Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ: Π΄Π΅ΠΉΡΡΠ²Π°ΠΉΡΠ΅ Π²Π΅Π΄Π½Π°Π³Π°.
last_checked_pin_state = state
if state == 0:
self._another_litre_passed()
# ΠΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΊΠ»ΡΡΡΡ Π½Π΅ ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ
await asyncio.sleep_ms(Counter.debounce_ms)ΠΠ°Π±Π°Π²ΡΠ½Π΅ΡΠΎ ΠΎΡ 25ΠΌΡ Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΡΠ΅Π±Π΅Π·Π³Π° Π½Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅Π³ΡΠ»ΠΈΡΠ° ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΡΠ±ΡΠΆΠ΄Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° (Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° ΡΠΏΠΈ β ΡΠ°Π±ΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ). ΠΠ° Π²ΡΠ΅ΠΊΠΈ 25ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ΅ ΡΡΠ±ΡΠΆΠ΄Π°, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΏΠΈΠ½Π° ΠΈ Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Π½Π° Ρ Π΅ΡΠΊΠΎΠ½Π°ΡΠ° ΡΠ° Π·Π°ΠΌΠΊΠ½Π°ΡΠΈ, Π·Π½Π°ΡΠΈ ΠΏΡΠ΅Π· Π±ΡΠΎΡΡΠ° Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π» ΠΏΠΎΡΠ΅Π΄Π½ΠΈΡ Π»ΠΈΡΡΡ ΠΈ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΎ.
def _another_litre_passed(self):
self._value += 1
self._value_changed = True
self._value_storage.write(self._value)ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ΅Π΄Π½ΠΈΡ Π»ΠΈΡΡΡ Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π° β ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° Π±ΡΠΎΡΡΡΡ. Π Π½ΠΎΠ²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π΅ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ Π½Π° ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ.
ΠΠ° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΡΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ "Π΄ΠΎΡΡΡΠΏΠ°ΡΠΈ"
def value(self):
self._value_changed = False
return self._value
def set_value(self, value):
self._value = value
self._value_changed = FalseΠ ΡΠ΅Π³Π° ΡΠ΅ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° ΠΠΈΡΠΎΠ½ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° uasync ΠΈ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΠ±Π΅ΠΊΡΡΡ Π½Π° Π±ΡΠΎΡΡΠ° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ (ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π²Π΅Π΄Π΅ΠΌ Π½Π° Π±ΡΠ»Π³Π°ΡΡΠΊΠΈ? Π’Π°ΠΊΡΠ², ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠ°ΠΊΠ²Π°?)
def __await__(self):
while not self._value_changed:
yield from asyncio.sleep(0)
return self.value()
__iter__ = __await__ Π’ΠΎΠ²Π° Π΅ ΡΠ΄ΠΎΠ±Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΡΠ°ΠΊΠ²Π° Π΄ΠΎΠΊΠ°ΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π±ΡΠΎΡΡΠ° Π½Π΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° β ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΡΠ±ΡΠΆΠ΄Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠ»Π°Π³Π° _value_changed. Π₯ΠΈΡΡΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΅, ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΡΠΏΠΈ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π΄Π° ΡΠΏΠΈ Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ.
Π ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ°?ΠΠ°, Π² ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΌΠ΅ ΡΡΠΎΠ»ΠΈΡΠ΅, ΡΠ΅ ΡΠ°ΠΌ ΠΊΠ°Π·Π°Ρ Π·Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ°, Π° Π²ΡΡΡΠ½ΠΎΡΡ Π½Π°ΠΏΡΠ°Π²ΠΈΡ Π³Π»ΡΠΏΠ°Π²ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΈΠ½Π°. ΠΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ° Π±ΡΡ Π° ΠΏΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠΏΠΈΡΠ°Ρ . Π ESP8266 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ ΠΏΠΎ ΡΡΠΎΠ½ΡΠ° ΠΈ Π΄ΠΎΡΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° ΡΠΎΠ²Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° ΠΠΈΡΠΎΠ½. Π ΡΠΎΠ²Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ ΡΠΎΠ²Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π°ΠΊΠΎ Π±ΡΠΎΡΡΡΡ Π±Π΅ΡΠ΅ Π²Π΅Π΄ΠΎΠΌΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ β ΡΠ°ΠΊΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ°ΠΊΠ°, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ Π³ΠΎ ΠΏΠΎΠΏΠΈΡΠ°Ρ Π·Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°.
ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π·Π° ΡΠ°ΡΡΠΈΠ΅?) ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΠΌΠΈ Π΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ, ΡΠΎ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° MQTT ΠΈ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π° Π΄Π°Π½Π½ΠΈ Π² EEPROM. Π ΡΡΠΊ Π²Π΅ΡΠ΅ Π²Π»ΠΈΠ·Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° β Π² ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π΄Π΅Π»Ρ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π³ΠΎΠ»ΡΠΌ ΡΡΠ΅ΠΊ, Π° Π·Π½Π°ΡΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π±ΡΠ°Π²ΠΈΠΌ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ°. ΠΠΌΠ° ΠΏΠ»ΡΡΠΎΠ²Π΅, ΠΊΠ°ΡΠΎ micropython.schedule(), ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΡ ΡΡΠ½ΠΊΡΠΈΡ βΠ²Π΅Π΄Π½Π°Π³Π° ΡΠΎΠΌ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎβ, Π½ΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π²ΡΠΏΡΠΎΡΡΡ βΠ° ΠΊΠ°ΠΊΡΠ² Π΅ ΡΠΌΠΈΡΡΠ»ΡΡ?β. ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ΅Π³Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π° ΡΡΠΊ ΠΈΠ΄Π²Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ ΠΈ ΡΠ°Π·Π²Π°Π»Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅. ΠΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ ΡΡΡΠ²ΡΡΠ° Π΅ ΠΏΡΠΈΡΡΠΈΠ³Π½Π°Π»ΠΎ Π½ΠΎΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΡΠΎΡΡΠ°, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΡΠ°ΡΠΎΡΠΎ. Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π½ΡΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½.
ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΈΠ·Π»ΠΈΠ·Π° ΠΈ RuntimeError: schedule stack full ΠΈ ΠΊΠΎΠΉ Π·Π½Π°Π΅ Π·Π°ΡΠΎ?
Π‘ ΡΠ²Π΅Π½ ΠΎΠΏΡΠΎΡ ΠΈ uasync Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ°Π²Π° Π½ΡΠΊΠ°ΠΊ ΠΏΠΎ-ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ.
Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ EEPROM Ρ ΠΈΠ·Π½Π΅ΡΠΎΡ Π² ΠΌΠ°Π»ΡΠΊ ΠΊΠ»Π°Ρ.
class EEPROM():
i2c_addr = const(80)
def __init__(self, i2c):
self.i2c = i2c
self.i2c_buf = bytearray(4) # ΠΠ·Π±ΡΠ³Π²Π°ΠΉΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ/ΡΠ½ΠΈΡΠΎΠΆΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΠ΅ΡΠ° ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅
def read(self, eeprom_addr):
self.i2c.readfrom_mem_into(self.i2c_addr, eeprom_addr, self.i2c_buf, addrsize=16)
return ustruct.unpack_from("<I", self.i2c_buf)[0]
def write(self, eeprom_addr, value):
ustruct.pack_into("<I", self.i2c_buf, 0, value)
self.i2c.writeto_mem(self.i2c_addr, eeprom_addr, self.i2c_buf, addrsize=16)Π ΠΏΠΈΡΠΎΠ½Π° Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ Π±Π°ΠΉΡΠΎΠ²Π΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°ΠΉΡΠΎΠ²Π΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΈΡΠ»ΠΎΡΡ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ ΠΈ Π±Π°ΠΉΡΠΎΠ²Π΅ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ustruct.
ΠΠ° Π΄Π° Π½Π΅ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ ΠΎΠ±Π΅ΠΊΡ I2C ΠΈ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΎΠ±Π²ΠΈΡ Π² ΠΌΠ°Π»ΡΠΊ ΠΈ ΡΠ΄ΠΎΠ±Π΅Π½ ΠΊΠ»Π°Ρ.
class EEPROMValue():
def __init__(self, i2c, eeprom_addr):
self._eeprom = EEPROM(i2c)
self._eeprom_addr = eeprom_addr
def read(self):
return self._eeprom.read(self._eeprom_addr)
def write(self, value):
self._eeprom.write(self._eeprom_addr, value)Π‘Π°ΠΌΠΈΡΡ ΠΎΠ±Π΅ΠΊΡ I2C ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Ρ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
i2c = I2C(freq=400000, scl=Pin(5), sda=Pin(4))ΠΡΠΈΡΡΠΈΠ³Π°ΠΌΠ΅ Π΄ΠΎ Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡΠ° ΡΡΡ ΡΡΡΠ²ΡΡΠ° ΠΏΠΎ MQTT. ΠΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» β Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ . Π ΡΠ΅ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅.
ΠΡΠΈΡΠΊΠΎ Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΅ ΡΡΠ±ΡΠ°Π½ΠΎ Π² ΠΊΠ»Π°ΡΠ° CounterMQTTClient, ΠΊΠΎΠΉΡΠΎ Π΅ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΈΡ MQTTClient. ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡΡΠ°.
#####################################
# Class handles both counters and sends their status to MQTT
#####################################
class CounterMQTTClient(MQTTClient):
blue_led = Pin(2, Pin.OUT, value = 1)
button = Pin(0, Pin.IN)
hot_counter = Counter(12, EEPROMValue(i2c, EEPROM_ADDR_HOT_VALUE))
cold_counter = Counter(13, EEPROMValue(i2c, EEPROM_ADDR_COLD_VALUE))Π’ΡΠΊ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ ΠΏΠΈΠ½ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π»Π°ΠΌΠΏΠ°ΡΠ° ΠΈ Π±ΡΡΠΎΠ½Π°, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Π½Π° Π±ΡΠΎΡΡΠΈΡΠ΅ Π·Π° ΡΡΡΠ΄Π΅Π½Π° ΠΈ Π³ΠΎΡΠ΅ΡΠ° Π²ΠΎΠ΄Π°.
ΠΠ΅ Π²ΡΠΈΡΠΊΠΎ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ°
def __init__(self):
self.internet_outage = True
self.internet_outages = 0
self.internet_outage_start = ticks_ms()
with open("config.txt") as config_file:
config['ssid'] = config_file.readline().rstrip()
config['wifi_pw'] = config_file.readline().rstrip()
config['server'] = config_file.readline().rstrip()
config['client_id'] = config_file.readline().rstrip()
self._mqtt_cold_water_theme = config_file.readline().rstrip()
self._mqtt_hot_water_theme = config_file.readline().rstrip()
self._mqtt_debug_water_theme = config_file.readline().rstrip()
config['subs_cb'] = self.mqtt_msg_handler
config['wifi_coro'] = self.wifi_connection_handler
config['connect_coro'] = self.mqtt_connection_handler
config['clean'] = False
config['clean_init'] = False
super().__init__(config)
loop = asyncio.get_event_loop()
loop.create_task(self._heartbeat())
loop.create_task(self._counter_coro(self.cold_counter, self._mqtt_cold_water_theme))
loop.create_task(self._counter_coro(self.hot_counter, self._mqtt_hot_water_theme))
loop.create_task(self._display_coro())ΠΠ° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° mqtt_as ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π³ΠΎΠ»ΡΠΌ ΡΠ΅ΡΠ½ΠΈΠΊ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ β config. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° Π½Π°Ρ, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΡΠ²Π½ΠΎ. ΠΠ° Π΄Π° Π½Π΅ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΠΊΠΎΠ΄Π°, Π³ΠΈ ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΌ Π² ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠ°ΠΉΠ» config.txt. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ΄Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ Π±Π»ΠΎΠΊ ΠΎΡ ΠΊΠΎΠ΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ Π·Π° ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΡΡΠΈΠ½Π°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° Π±ΡΠΎΡΡΠΈΡΠ΅.
async def _counter_coro(self, counter, topic):
# ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉ Π½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ
value = counter.value()
await self.publish(topic, str(value))
# ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉ Π²ΡΡΠΊΠ° Π½ΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ
while True:
value = await counter
await self.publish_msg(topic, str(value))ΠΠΎΡΡΡΠΈΠ½Π° Π² ΡΠΈΠΊΡΠ» ΠΎΡΠ°ΠΊΠ²Π° Π½ΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ Π±ΡΠΎΡΡΠ° ΠΈ ΡΠΎΠΌ ΡΡ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ β ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° MQTT. ΠΡΡΠ²ΠΈΡΡ Π±Π»ΠΎΠΊ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° Π½Π°ΡΠ°Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π΄ΠΎΡΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π²ΠΎΠ΄Π°ΡΠ° Π½Π΅ ΡΠ΅ΡΠ΅ ΠΏΡΠ΅Π· Π±ΡΠΎΡΡΠ°.
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΊΠ»Π°Ρ MQTTClient ΡΠ°ΠΌ ΡΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°, ΡΠ°ΠΌ ΠΈΠ½ΠΈΡΠΈΠΈΡΠ° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΏΠΎ WiFi ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΡΠ΅ Π·Π°Π³ΡΠ±ΠΈ. ΠΡΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° WiFi Π²ΡΡΠ·ΠΊΠ°ΡΠ°, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ° wifi_connection_handler.
async def wifi_connection_handler(self, state):
self.internet_outage = not state
if state:
self.dprint('WiFi Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½.')
duration = ticks_diff(ticks_ms(), self.internet_outage_start) // 1000
await self.publish_debug_msg('ΠΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π‘Π»Π΅Π΄', duration)
else:
self.internet_outages += 1
self.internet_outage_start = ticks_ms()
self.dprint('WiFi Π΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½.')
await asyncio.sleep(0)Π€ΡΠ½ΠΊΡΠΈΡΡΠ° Π΅ Π²Π·Π΅ΡΠ° ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΡ Π±ΡΠΎΠΈ Π±ΡΠΎΡ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ° (internet_outages) ΠΈ ΡΡΡ Π½Π°ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ. ΠΠΎΠ³Π°ΡΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π±ΡΠ΄Π΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°, Π½Π° ΡΡΡΠ²ΡΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ°.
Π‘ΡΡΡΠ²Π° ΠΌΠΈ ΡΠ΅, ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ sleep Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π° β Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΡ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Ρ await, Π° ΡΠ°ΠΊΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΡΠ°ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ° Π΄ΡΡΠ³ await.
ΠΡΠ²Π΅Π½ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Ρ WiFi, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ Π²ΡΡΠ·ΠΊΠ° Ρ MQTT Π±ΡΠΎΠΊΠ΅Ρ (ΡΡΡΠ²ΡΡ). ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ΅ Π³ΡΠΈΠΆΠΈ ΠΈ Π·Π° ΡΠΎΠ²Π°, Π° Π½Π° Π½Π°Ρ ΠΎΡΡΠ°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π½Π΅ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°.
async def mqtt_connection_handler(self, client):
await client.subscribe(self._mqtt_cold_water_theme)
await client.subscribe(self._mqtt_hot_water_theme)Π’ΡΠΊ ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ β ΡΡΡΠ²ΡΡΡΡ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π±ΡΠΎΡΡΠΈΡΠ΅, ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΉΠΊΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
def mqtt_msg_handler(self, topic, msg):
topicstr = str(topic, 'utf8')
self.dprint("ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ MQTT ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ topic={}, msg={}".format(topicstr, msg))
if topicstr == self._mqtt_cold_water_theme:
self.cold_counter.set_value(int(msg))
if topicstr == self._mqtt_hot_water_theme:
self.hot_counter.set_value(int(msg))Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° (Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ) ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ Π±ΡΠΎΡΡΠΈΡΠ΅.
ΠΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
# Publish a message if WiFi and broker is up, else discard
async def publish_msg(self, topic, msg):
self.dprint("Publishing message on topic {}: {}".format(topic, msg))
if not self.internet_outage:
await self.publish(topic, msg)
else:
self.dprint("Message was not published - no internet connection")Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π°ΠΊΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°. ΠΠΊΠΎ Π²ΡΡΠ·ΠΊΠ° Π½ΡΠΌΠ° β ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°.
Π ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ΄ΠΎΠ±Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΎΡΠ»Π°Π΄ΡΡΠ½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ.
async def publish_debug_msg(self, subtopic, msg):
await self.publish_msg("{}\/{}".format(self._mqtt_debug_water_theme, subtopic), str(msg))
Π’ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡ, Π° Π½ΠΈΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ ΠΌΠΈΠ³Π°Π»ΠΈ Ρ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π°. ΠΡΠΎ Π³ΠΎ.
# Blink flash LED if WiFi down
async def _heartbeat(self):
while True:
if self.internet_outage:
self.blue_led(not self.blue_led()) # Fast blinking if no connection
await asyncio.sleep_ms(200)
else:
self.blue_led(0) # Rare blinking when connected
await asyncio.sleep_ms(50)
self.blue_led(1)
await asyncio.sleep_ms(5000)ΠΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΡ 2 ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΌΠΈΠ³Π°Π½Π΅. ΠΠΊΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΡΠ΅ Π·Π°Π³ΡΠ±ΠΈ (ΠΈΠ»ΠΈ ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°), ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠ΅ ΠΌΠΈΠ³Π° Π±ΡΡΠ·ΠΎ. ΠΠΊΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° β ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΠΌΠΈΠ³Π° Π²Π΅Π΄Π½ΡΠΆ Π½Π° 5 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΡΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° ΠΌΠΈΠ³Π°Π½Π΅.
ΠΠΎ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΡΡ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³ΡΠ°ΡΠΊΠ°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΠΈ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ.
async def _display_coro(self):
display = SSD1306_I2C(128,32, i2c)
while True:
display.poweron()
display.fill(0)
display.text("COLD: {:.3f}".format(self.cold_counter.value() / 1000), 16, 4)
display.text("HOT: {:.3f}".format(self.hot_counter.value() / 1000), 16, 20)
display.show()
await asyncio.sleep(3)
display.poweroff()
while self.button():
await asyncio.sleep_ms(20)ΠΡΠΎ ΡΠΎΠ²Π° Π΅, Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎΠ²ΠΎΡΡ β ΠΊΠΎΠ»ΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ Ρ ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅. Π’Π°Π·ΠΈ ΠΌΠ°Π»ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΠΈΡΠ²Π° ΠΠ‘ΠΠ§ΠΠ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠΎΡΡΡΠΈΠ½Π°ΡΠ° ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΠΎΠ½Π° ΠΈ Π²ΠΊΠ»ΡΡΠ²Π° Π΄ΠΈΡΠΏΠ»Π΅Ρ Π·Π° 3 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° Π±ΡΠΎΡΡΠΈΡΠ΅.
ΠΡΡΠ°Ρ Π° ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ°Π»ΠΊΠΈ Π½Π΅ΡΠ°. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ (ΠΏΡΠ΅)Π·Π°ΠΏΠΎΡΠ²Π° Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°. ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΡΠΈΠΊΡΠ» ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΈΠ½ΡΡΠ°. Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π³ΠΎ ΡΠ°ΠΊΡΠ², ΠΊΠ°ΠΊΡΠ²ΡΠΎ Π΅ β Π½Π΅ ΠΌΠΈΡΠ»Ρ, ΡΠ΅ ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΎΡΠΎΠ±Π΅Π½ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ.
async def main(self):
while True:
try:
await self._connect_to_WiFi()
await self._run_main_loop()
except Exception as e:
self.dprint('ΠΠ»ΠΎΠ±Π°Π»Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½Π° Π³ΡΠ΅ΡΠΊΠ°: ', e)
await asyncio.sleep(20)
async def _connect_to_WiFi(self):
self.dprint('Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Ρ WiFi ΠΈ MQTT')
sta_if = network.WLAN(network.STA_IF)
sta_if.connect(config['ssid'], config['wifi_pw'])
conn = False
while not conn:
await self.connect()
conn = True
self.dprint('Π‘Π²ΡΡΠ·Π°Π½ΠΎ!')
self.internet_outage = False
async def _run_main_loop(self):
# Π¦ΠΈΠΊΡΠ» Π²Π΅ΡΠ½ΠΎ
mins = 0
while True:
gc.collect() # ΠΠ° Π΄Π°Π½Π½ΠΈ Π·Π° RAM.
mem_free = gc.mem_free()
mem_alloc = gc.mem_alloc()
try:
await self.publish_debug_msg("Uptime", mins)
await self.publish_debug_msg("Repubs", self.REPUB_COUNT)
await self.publish_debug_msg("Outages", self.internet_outages)
await self.publish_debug_msg("MemFree", mem_free)
await self.publish_debug_msg("MemAlloc", mem_alloc)
except Exception as e:
self.dprint("ΠΠΎΡΠ²ΠΈ ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ", e)
mins += 1
await asyncio.sleep(60)ΠΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π·Π° ΠΏΡΠ»Π½ΠΎΡΠ° Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ.
#####################################
# Constants and configuration
#####################################
config['keepalive'] = 60
config['clean'] = False
config['will'] = ('/ESP/Wemos/Water/LastWill', 'Goodbye cruel world!', False, 0)
MQTTClient.DEBUG = True
EEPROM_ADDR_HOT_VALUE = const(0)
EEPROM_ADDR_COLD_VALUE = const(4)Π’ΠΎΠ²Π° Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΡΠ°ΠΊΠ°:
client = CounterMQTTClient()
loop = asyncio.get_event_loop()
loop.run_until_complete(client.main())ΠΠ΅ΡΠΎ Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠΈ ΡΡΠ°Π½Π°.
Π’Π°ΠΊΠ°, ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½. Π€Π°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π³ΠΈ ΠΊΠ°ΡΠ²Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° ampy β ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΊΠ°ΡΠ²Π°Ρ Π½Π° Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° (ΡΠ°Π·ΠΈ, ΠΊΠΎΡΡΠΎ Π΅ Π² ΡΠ°ΠΌΠΈΡ ESP-07) ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ²Π°Ρ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. Π’Π°ΠΌ ΡΡΡΠΎ ΠΊΠ°ΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΠΎΡ ΠΌΠ΅Π½ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ mqtt_as, uasyncio, ssd1306 ΠΈ collections (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ Π²ΡΡΡΠ΅ Π² mqtt_as).
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈβ¦ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ MemoryError. Π Ρ Π²ΡΠ΅ΠΊΠΈ ΠΎΠΏΠΈΡ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ° ΠΊΡΠ΄Π΅ ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΡΠΈΡΠ° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Ρ Π²ΡΠ΅ΠΊΠΈ ΡΠ»Π΅Π΄Π²Π°Ρ Π΄Π΅Π±ΡΠ³ ΠΏΡΠΈΠ½Ρ, ΡΠ°Π·ΠΈ Π³ΡΠ΅ΡΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ. ΠΡΠ°ΡΠΊΠΎ ΡΡΡΡΠ΅Π½Π΅ Π² Google ΠΌΠΈ ΠΏΠΎΠΊΠ°Π·Π°, ΡΠ΅ Π² ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ 30kB ΠΏΠ°ΠΌΠ΅Ρ, Π² ΠΊΠΎΡΡΠΎ 65kB ΠΊΠΎΠ΄ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅) Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΠ±Π΅ΡΠ°Ρ.
ΠΠΎ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°. ΠΠΊΠ°Π·Π²Π° ΡΠ΅, ΡΠ΅ micropython Π½Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΊΠΎΠ΄Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ .py ΡΠ°ΠΉΠ»Π° β ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠΎΠΉ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ°, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΡΠ΅ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. Π Π·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΡΡΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ.
Π’ΡΠΈΠΊΡΡ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π°Π²ΠΈΠΌ ΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ°. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π³ΠΎΠ»ΡΠΌ ΠΊΠΎΠΌΠΏΡΡΡΡ, Π° Π² ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° Π΄Π° ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ Π²Π΅ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄. ΠΠ° ΡΠ΅Π»ΡΠ° Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ²Π°Π»ΠΈΠΌ ΡΡΡΠΌΡΠ΅ΡΠ° Π½Π° micropython ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅. .
ΠΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ Makefile, Π° ΡΡΡΠ½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π½ΡΠΆΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ) ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
mpy-cross water_counter.pyΠΡΡΠ°Π½Π° ΡΠ°ΠΌΠΎ Π΄Π° Π·Π°ΡΠ΅Π΄Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ .mpy, ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π΅ Π·Π°Π±ΡΠ°Π²Ρ Π΄Π° ΠΈΠ·ΡΡΠΈΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ .py ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ.
Π¦ΡΠ»Π°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° (IDE?) ESPlorer. Π’Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π² ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ. Π ΠΌΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ»Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π²ΡΠ² ΡΠ°ΠΉΠ»Π° water_counter.py (.mpy). ΠΠΎ Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠΈΡΠΊΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ, Π½Π° ΡΡΠ°ΡΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ main.py. Π ΡΠΎΠ²Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ .py, Π° Π½Π΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ .mpy. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΡΠΎ ΠΌΡ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅:
import water_counterΠ‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ β Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ. ΠΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Π΅ Π·Π°ΠΏΠ»Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ β ΠΎΠΊΠΎΠ»ΠΎ 1 ΠΊΠ±. ΠΠΌΠ°ΠΌ ΠΎΡΠ΅ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ, ΠΈ ΡΠΎΠ·ΠΈ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ ΡΠ²Π½ΠΎ ΡΠ΅ ΠΌΠΈ Π±ΡΠ΄Π΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠ΅Π½. ΠΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ ΠΈ Π·Π° ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠΌΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π Π°Π±ΠΎΡΠ°ΡΠ° Π΅ Π² ΡΠΎΠ²Π°. ΠΠΎΡΠΈ ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π½Π° Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΡΠ΅ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΎΡΡΠ°ΠΌ. ΠΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ micropython ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π±Π°ΠΉΡΠΊΠΎΠ΄ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ, Π½ΠΎ Π·Π° ΡΠΎΠ²Π° Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° Π³ΠΎ Π²Π³ΡΠ°Π΄ΠΈΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΡΠ² ΡΡΡΠΌΡΠ΅ΡΠ°. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π° ΠΌΠΎΡ Π½Π΅ΡΠ±ΡΠΊ ΠΎΡΠ½Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ (ΡΠ°ΠΌΠΎ ΡΠ°ΠΌ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ ΠΈΠΌΠ°ΠΌ Π»ΠΈΠ½ΡΠΊΡ).
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π΅ ΡΠ»Π΅Π΄Π½ΠΈΡΡ:
- Π‘Π²Π°Π»Π΅ΡΠ΅ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ . Π’Π°Π·ΠΈ Π½Π΅ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π·Π° ESP8266. ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° (ΠΈΠ·Π±ΡΠ°Ρ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ STANDALONE=yes).
- ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅
- ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π² ports/esp8266/modules Π² Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° micropython.
- ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΡΡΠΌΡΠ΅ΡΠ° ΡΠΏΠΎΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π°
- ΠΠ°ΡΠ²Π°ΠΌΠ΅ ΡΡΡΠΌΡΠ΅ΡΠ° Π² ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° (Π°Π· Π³ΠΎ ΠΏΡΠ°Π²Ρ Π½Π° Windows Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ ESP8266Flasher ΠΈΠ»ΠΈ Python esptool)
ΠΡΠΈΡΠΊΠΎ, ΡΠ΅Π³Π° βimport ssd1306β ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΠΊΠΎΠ΄Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΡΡΡΠΌΡΠ΅ΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠΎΠ²Π°. Π‘ ΡΠΎΠ·ΠΈ ΡΡΠΈΠΊ Π·Π°ΡΠ΅Π΄ΠΈΡ Π²ΡΠ² ΡΡΡΠΌΡΠ΅ΡΠ° ΡΠ°ΠΌΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΡΡΡΠΌΡΠ΅ΡΠ°. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ°ΠΌ ΠΎΠΊΠΎΠ»ΠΎ 8.5kB ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π° RAM. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ΅ Π΄ΠΎΡΡΠ° ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π² Π±ΡΠ΄Π΅ΡΠ΅. Π Π°ΠΊΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΡΡΠ°Π½Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π²ΡΠ² ΡΡΡΠΌΡΠ΅ΡΠ°.
Π ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ΅Π³Π°?
ΠΠΊ, Ρ Π°ΡΠ΄ΡΠ΅ΡΡΡ Π΅ ΡΠ³Π»ΠΎΠ±Π΅Π½, ΡΡΡΠΌΡΠ΅ΡΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½, ΠΊΡΡΠΈΡΡΠ° Π΅ ΠΎΡΠΏΠ΅ΡΠ°ΡΠ°Π½Π°, ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ΅Π½ΠΎ Π½Π° ΡΡΠ΅Π½Π°ΡΠ° ΠΈ ΡΠ°Π΄ΠΎΡΡΠ½ΠΎ ΠΌΠΈΠ³Π° Ρ Π»Π°ΠΌΠΏΠΈΡΠΊΠ°. ΠΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠΎΠ²Π° Π΅ ΡΠ΅ΡΠ΅Π½ ΠΊΡΡΠΈΡ (Π² Π±ΡΠΊΠ²Π°Π»Π΅Π½ ΠΈ ΠΏΡΠ΅Π½ΠΎΡΠ΅Π½ ΡΠΌΠΈΡΡΠ») ΠΈ ΠΏΠΎΠ»Π·Π°ΡΠ° ΠΎΡ Π½Π΅Π³ΠΎ Π΅ ΠΌΠ°Π»ΠΊΠ°. ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π½Π΅ΡΠΎ Ρ MQTT ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π½Π° ΡΡΡΠ²ΡΡΠ°.
ΠΠΎΡΡ βΡΠΌΠ΅Π½ Π΄ΠΎΠΌβ ΡΠ°Π±ΠΎΡΠΈ Π½Π° . MQTT ΠΌΠΎΠ΄ΡΠ» ΠΈΠ»ΠΈ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΈΠ»ΠΈ Π»Π΅ΡΠ½ΠΎ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΎΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π·Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ β Π²Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠΌΠ½Ρ ΠΎΡΠΊΡΠ΄Π΅ Π³ΠΎ Π²Π·Π΅Ρ . MQTT Π½Π΅ Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΅ Ρ.Π½. Π±ΡΠΎΠΊΠ΅Ρ β ΡΡΡΠ²ΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ°, ΡΠΎΡΡΠΈΡΠ° ΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ MQTT ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ mosquitto, ΠΊΠΎΠΉΡΠΎ (ΠΊΠ°ΠΊΡΠΎ ΠΈ majordomo) ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΡΡΠΈΡ Π½Π΅ΡΠ±ΡΠΊ.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π²Π΅Π΄Π½Π°Π³Π° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² ΡΠΏΠΈΡΡΠΊΠ°.

Π’Π΅Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ΅Π³Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ°Ρ Ρ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· β Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π΅ ΠΈΠ·Π²ΡΠ½ ΠΎΠ±Ρ
Π²Π°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ. ΠΠ° Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ΠΈΡΠ΅ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° majordomo ΠΌΠΎΠ³Π° Π΄Π° ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ°ΠΌ β Π΄ΡΡΠ³Π°ΡΡΡ ΡΡΡΠΎ ΡΡΡΠΎΠΈ ΡΠΌΠ΅Π½ Π΄ΠΎΠΌ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ²Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
Π©Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡ Π³ΡΠ°ΡΠΈΠΊ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° Π΅Π΄ΠΈΠ½ Π΄Π΅Π½

ΠΠ΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ, ΡΠ΅ ΠΏΡΠ΅Π· Π½ΠΎΡΡΠ° ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ ΠΏΠΎΠ»Π·Π²Π°Π» Π²ΠΎΠ΄Π°. ΠΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΡΠΈ Π½ΡΠΊΠΎΠΉ Π΅ Ρ
ΠΎΠ΄ΠΈΠ» Π΄ΠΎ ΡΠΎΠ°Π»Π΅ΡΠ½Π°ΡΠ° ΠΈ, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠΈΠ»ΡΡΡΡΡ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½Π° ΠΎΡΠΌΠΎΠ·Π° Π΅ ΠΈΠ·ΡΠΌΡΠΊΠ°Π» Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π»ΠΈΡΡΠ° ΠΏΡΠ΅Π· Π½ΠΎΡΡΠ°. Π‘ΡΡΡΠΈΠ½ΡΠ° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΠΎΠ»Π·Π²Π°ΠΌ Π²ΠΎΠ΄Π° ΠΎΡ Π±ΠΎΠΉΠ»Π΅ΡΠ°, Π½ΠΎ ΡΡΠΊ ΡΠ΅ΡΠΈΡ
Π΄Π° Π²Π·Π΅ΠΌΠ° Π²Π°Π½Π° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ
Π½Π° Π³ΡΠ°Π΄ΡΠΊΠ° ΡΠΎΠΏΠ»Π° Π²ΠΎΠ΄Π° β ΡΠΎΠ²Π° ΡΡΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎ Π½Π° Π΄ΠΎΠ»Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊ.
ΠΡ ΡΠ°Π·ΠΈ Π³ΡΠ°ΡΠΈΠΊΠ° ΡΠ°Π·Π±ΡΠ°Ρ , ΡΠ΅ Π·Π° Ρ ΠΎΠ΄Π΅Π½Π΅ Π΄ΠΎ ΡΠΎΠ°Π»Π΅ΡΠ½Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ 6-7Π» Π²ΠΎΠ΄Π°, Π·Π° Π΄ΡΡ β 20-30Π», Π·Π° ΠΌΠΈΠ΅Π½Π΅ Π½Π° ΡΡΠ΄ΠΎΠ²Π΅ ΠΎΠΊΠΎΠ»ΠΎ 20Π», Π° Π·Π° Π²Π°Π½Π° ΡΠ° Π½ΡΠΆΠ½ΠΈ 160Π». ΠΡΠ΅Π· Π΄Π΅Π½Ρ ΠΌΠΎΠ΅ΡΠΎ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° ΠΎΠΊΠΎΠ»ΠΎ 500-600Π».
ΠΠ° ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π»ΡΠ±ΠΎΠΏΠΈΡΠ½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ Ρ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π·Π° Π²ΡΡΠΊΠ° ΠΎΡΠ΄Π΅Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ

ΠΡΡΡΠΊ ΡΠ°Π·Π±ΡΠ°Ρ
, ΡΠ΅ ΠΏΡΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΡΠ°Π½ Π²ΠΎΠ΄Π°ΡΠ° ΡΠ΅ΡΠ΅ ΡΡΡ ΡΠΊΠΎΡΠΎΡΡ ΠΎΡ ΠΎΠΊΠΎΠ»ΠΎ 1Π» Π·Π° 5Ρ.
ΠΠΎ Π² ΡΠΎΠ·ΠΈ Π²ΠΈΠ΄ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½Π° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄. Π majordomo ΠΈΠΌΠ° ΠΎΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π° ΡΠ΅ Π³Π»Π΅Π΄Π°Ρ Π³ΡΠ°ΡΠΈΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° ΠΏΠΎ Π΄Π½ΠΈ, ΡΠ΅Π΄ΠΌΠΈΡΠΈ ΠΈ ΠΌΠ΅ΡΠ΅ΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²Π° Π΅ Π³ΡΠ°ΡΠΈΠΊ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π² ΠΊΠΎΠ»ΠΎΠ½ΠΈ.

Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ°ΠΌ Π΄Π°Π½Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π΄ΠΌΠΈΡΠ°. Π‘Π»Π΅Π΄ ΠΌΠ΅ΡΠ΅Ρ ΡΠΎΠ·ΠΈ Π³ΡΠ°ΡΠΈΠΊ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎ-ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅Π½ β Π²ΡΠ΅ΠΊΠΈ Π΄Π΅Π½ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Ρ ΠΎΡΠ΄Π΅Π»Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°. ΠΠ°Π»ΠΊΠΎ ΠΊΠ°ΡΡΠΈΠ½Π°ΡΠ° ΡΠ°Π·Π²Π°Π»ΡΡ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°ΠΌ ΡΡΡΠ½ΠΎ (Π½Π°ΠΉ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΠΊΠΎΠ»ΠΎΠ½Π°). Π Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΡΡΠ½ΠΎ, Π΄Π°Π»ΠΈ Π°Π· Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π·Π°Π΄Π°Π΄ΠΎΡ
Π½Π°ΠΉ-ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΡΠΈ Π½Π° ΠΊΡΠ± ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, ΠΈΠ»ΠΈ ΡΠΎΠ²Π° Π΅ Π±ΡΠ³ Π² ΡΡΡΠΌΡΠ΅ΡΠ° ΠΈ Π½Π΅ Π²ΡΠΈΡΠΊΠΈ Π»ΠΈΡΡΠΈ ΡΠ° ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈ. ΠΡΠΆΠ΄Π°Π²Π°ΠΌ ΡΠ΅ ΠΎΡ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅.
ΠΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΠ°Π±ΠΎΡΡ Π²ΡΡΡ Ρ ΡΠ°ΠΌΠΈΡΠ΅ Π³ΡΠ°ΡΠΈΡΠΈ, Π΄Π° Π³ΠΈ ΠΈΠ·Π±Π΅Π»Π²Π°ΠΌ, Π±ΠΎΡΠ΄ΠΈΡΠ²Π°ΠΌ. ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄Ρ Π³ΡΠ°ΡΠΈΠΊ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΡΠ΄Π½ΠΎΡΡΠΈ β ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΡΠ°ΠΌ Π½Π΅ΡΠΎ ΠΈΠ·ΡΠΈΡΠ°. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π΅ Π½Π° Π΅ΡΠ°ΠΏ ΠΈΠ΄Π΅Ρ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ½Π΅Ρ ΠΌΠΎΡΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΡΡΠ°Π½Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠΌΠ΅Π½. Π‘ ΡΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ΅ ΠΌΠΈ Π±ΡΠ΄Π΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡΠ»Π΅Π΄Ρ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° Π²ΠΎΠ΄Π° Π² Π΄ΠΎΠΌΠ°. ΠΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΡΠΌ ΡΠ΅ ΡΡΡΠ΄Π²Π°Π» βΠΎΡΠ½ΠΎΠ²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ΄Π° ΠΏΠΎΡ Π°ΡΡΠΈΡ ΠΌΠ΅ Π·Π° ΠΌΠ΅ΡΠ΅ΡΠ°β, ΡΠ΅Π³Π° ΡΠ΅ ΠΌΠΎΠ³Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ.
ΠΡΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΡΡ ΡΡΡΠ°Π½Π½ΠΎ Π΄Π° Π³Π»Π΅Π΄Π°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° Π΅ΠΊΡΠ°Π½Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΉ Π΅ Π½Π° ΠΌΠ΅ΡΡΡ ΡΠ°Π·ΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡ ΡΠ°ΠΌΠΈΡ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅Π». ΠΠΎ Π² Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π»Π΅ΡΠ½ΠΎΡΠΎ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΡ Π² Π΄ΡΡΠ³ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»Π½ΠΈ ΡΡΡΠ±ΠΈ Π·Π° Π²ΠΎΠ΄Π°, Π° ΡΠ°ΠΌΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΡΠ΅Π΄ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° ΡΡΡΠ»Π±ΠΈΡΠ½Π°ΡΠ° ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°. Π’Π°ΠΊΠ° ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π·Π° Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°ΡΠ½ΠΎ.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΡΡΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° ΡΠ°Π·ΡΠΈΡΡ. ΠΠ΅ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌ ΠΌΠΎΡΠΎΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π²Π΅Π½ΡΠΈΠ»ΠΈ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΎΠΉΠ»Π΅Ρ-ΠΎΠ±ΡΠΈΠ½ΡΠΊΠ° Π²ΠΎΠ΄Π° ΠΌΠΈ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° Π·Π°Π²ΡΡΡΠ°ΠΌ 3 ΠΊΡΠ°Π½Π° Π² ΡΡΡΠ΄Π½ΠΎΠ΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ³ΡΠ». Π©Π΅ΡΠ΅ Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° Π³ΠΎ ΠΏΡΠ°Π²Ρ Ρ Π΅Π΄ΠΈΠ½ Π±ΡΡΠΎΠ½ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΈΡ. Π, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° Π²Π½Π΅Π΄ΡΡ Π·Π°ΡΠΈΡΠ° ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΊΠΈ.
Π ΡΡΠ°ΡΠΈΡΡΠ° ΠΎΠΏΠΈΡΠ°Ρ ΠΌΠΎΠ΅ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ESP8266. Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½, ΠΏΠΎΠ»ΡΡΠΈ ΡΠ΅ Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΡΡΡΠΌΡΠ΅Ρ Π½Π° micropython Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈ - ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΡΠΈΡΡΠ½ΠΎ. ΠΠΏΠΈΡΠ°Ρ ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½ΡΠ°Π½ΡΠΈ ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, Ρ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ½Π°Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°. ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΡΠΌ ΠΎΠΏΠΈΡΠ°Π» Π²ΡΠΈΡΠΊΠΎ ΡΠ²ΡΡΠ΄Π΅ Π΄Π΅ΡΠ°ΠΉΠ»Π½ΠΎ; Π·Π° ΠΌΠ΅Π½, ΠΊΠ°ΡΠΎ ΡΠΈΡΠ°ΡΠ΅Π», Π΅ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΌ Π½Π΅Π½ΡΠΆΠ½ΠΎΡΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΠΌ Π΄Π° Π΄ΠΎΠΏΡΠ»Π½Ρ Π½Π΅ΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ.
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠ½Π°Π³ΠΈ, ΡΡΠΌ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½Π° ΠΊΡΠΈΡΠΈΠΊΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
