แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒแƒ“แƒ”แƒกแƒฆแƒแƒช แƒกแƒแƒฎแƒšแƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒแƒœ แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ— แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ“แƒœแƒ”แƒœ โ€žแƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒกโ€œ, แƒกแƒแƒจแƒ˜แƒœแƒšแƒแƒ“ แƒซแƒ•แƒ˜แƒ แƒ˜ แƒฆแƒ˜แƒ แƒ“แƒ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ“แƒ˜แƒ“แƒ แƒ”แƒ‘แƒก แƒจแƒ”แƒ”แƒซแƒšแƒแƒ— แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒซแƒ”แƒœแƒ. แƒ“แƒฆแƒ”แƒก แƒ‘แƒแƒ–แƒแƒ แƒ–แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ˜แƒแƒคแƒ˜ แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒกแƒ”แƒœแƒกแƒแƒ แƒ”แƒ‘แƒ˜แƒ—, แƒฆแƒ˜แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒ—/แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒแƒ›แƒซแƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒœแƒแƒ—แƒ”แƒ‘แƒ˜แƒก, แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก, แƒ•แƒ”แƒœแƒขแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒก, แƒฌแƒงแƒแƒšแƒ›แƒแƒ›แƒแƒ แƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ›แƒแƒ แƒ—แƒแƒ•แƒแƒ“. แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒฎแƒ˜แƒœแƒฏ แƒฌแƒ•แƒ แƒ˜แƒšแƒ›แƒแƒœ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒกแƒแƒช แƒ™แƒ˜ แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฉแƒแƒ”แƒ แƒ—แƒแƒก แƒกแƒ˜แƒšแƒแƒ›แƒแƒ–แƒ”แƒจแƒ˜ แƒ“แƒ แƒแƒแƒฌแƒงแƒแƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒกแƒแƒฎแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒแƒคแƒแƒ“.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ˜, แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ”แƒœแƒกแƒแƒ แƒ”แƒ‘แƒ˜ แƒแƒœ แƒแƒฅแƒขแƒ˜แƒ•แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒ”แƒœ แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒกแƒชแƒ”แƒœแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ โ€žแƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ˜แƒก แƒกแƒ”แƒœแƒกแƒแƒ แƒ˜ แƒแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ“แƒ, แƒฉแƒแƒ แƒ—แƒ”แƒ— แƒ’แƒแƒœแƒแƒ—แƒ”แƒ‘แƒโ€œ แƒแƒœ โ€žแƒ’แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒ—แƒแƒœ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ” แƒฉแƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ—แƒ˜แƒจแƒแƒ•แƒก แƒ’แƒแƒœแƒแƒ—แƒ”แƒ‘แƒแƒก แƒ›แƒ—แƒ”แƒš แƒ‘แƒ˜แƒœแƒแƒจแƒ˜โ€œ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒฆแƒแƒชแƒœแƒแƒ˜แƒ แƒแƒ“ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒขแƒ”แƒšแƒ”แƒ›แƒ”แƒขแƒ แƒ˜แƒ˜แƒ— แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ. แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒขแƒ”แƒ›แƒžแƒ”แƒ แƒแƒขแƒฃแƒ แƒ˜แƒกแƒ แƒ“แƒ แƒขแƒ”แƒœแƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜, แƒแƒœ แƒ›แƒงแƒ˜แƒกแƒ˜แƒ”แƒ แƒ˜ แƒกแƒ˜แƒ›แƒซแƒšแƒแƒ•แƒ แƒ” แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜.

แƒชแƒแƒขแƒ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒžแƒฃแƒšแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜. แƒงแƒแƒ•แƒ”แƒš แƒšแƒ˜แƒขแƒ แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ“แƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ–แƒ”, แƒšแƒ”แƒ แƒฌแƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒฎแƒฃแƒ แƒแƒ•แƒก แƒ™แƒแƒœแƒขแƒแƒฅแƒขแƒก. แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ—, แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒฏแƒแƒญแƒ•แƒ แƒ›แƒแƒ•แƒ—แƒฃแƒšแƒฎแƒšแƒแƒ แƒ—แƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒกแƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒกแƒ’แƒแƒœ แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ—. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ’แƒแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒกแƒแƒแƒ—แƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒ•แƒ˜แƒ แƒ˜แƒก แƒ“แƒฆแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒ˜แƒกแƒ”, แƒ—แƒฃ แƒ‘แƒ˜แƒœแƒแƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒงแƒšแƒ˜แƒก แƒแƒ›แƒฌแƒ”แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒฃแƒคแƒ แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ˜แƒœแƒ“แƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ แƒ”แƒ แƒ— แƒ”แƒ™แƒ แƒแƒœแƒ–แƒ”, แƒ•แƒ˜แƒ“แƒ แƒ” แƒคแƒแƒœแƒ แƒ˜แƒ— แƒซแƒœแƒ”แƒšแƒแƒ“ แƒ›แƒ˜แƒกแƒแƒ“แƒ’แƒแƒ› แƒœแƒ˜แƒจแƒ”แƒ‘แƒจแƒ˜ แƒแƒกแƒ•แƒšแƒ.

แƒญแƒ แƒ˜แƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒแƒ แƒ˜แƒก ESP8266-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒฉแƒ”แƒ›แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒ—แƒ•แƒšแƒ˜แƒก แƒ˜แƒ›แƒžแƒฃแƒšแƒกแƒ”แƒ‘แƒก แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒก MQTT-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒกแƒแƒฎแƒšแƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”. แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ›แƒ˜แƒ™แƒ แƒแƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜ uasyncio แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. firmware-แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒก แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ–แƒ”แƒช แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ• แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜. แƒฌแƒแƒ“แƒ˜!

แƒกแƒฅแƒ”แƒ›แƒ

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ’แƒฃแƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ ESP8266 แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ–แƒ”. ESP-12 แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ˜แƒงแƒ แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ˜แƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒ˜ แƒ“แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ. แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ“แƒ”แƒ— ESP-07 แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒงแƒ. แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ”แƒ แƒ—แƒœแƒแƒ˜แƒ แƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒฅแƒ˜แƒœแƒซแƒ˜แƒกแƒ—แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒฃแƒ แƒแƒ‘แƒ˜แƒ—, แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒœแƒขแƒ”แƒœแƒแƒจแƒ˜แƒ - ESP-12-แƒก แƒแƒฅแƒ•แƒก แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒฎแƒแƒšแƒ ESP-07-แƒก แƒแƒฅแƒ•แƒก แƒ’แƒแƒ แƒ”. แƒ—แƒฃแƒ›แƒชแƒ, WiFi แƒแƒœแƒขแƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”แƒช, แƒฉแƒ”แƒ›แƒก แƒแƒ‘แƒแƒ–แƒแƒœแƒแƒจแƒ˜ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ.

แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒแƒ‘แƒ:

  • แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒแƒ›แƒแƒกแƒแƒงแƒ•แƒแƒœแƒ˜ แƒ“แƒ แƒ™แƒแƒœแƒ“แƒ”แƒœแƒกแƒแƒขแƒแƒ แƒ˜แƒ— (แƒ—แƒฃแƒ›แƒชแƒ แƒแƒ แƒ˜แƒ•แƒ” แƒฃแƒ™แƒ•แƒ” แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—แƒแƒ)
  • แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜ (CH_PD) แƒ˜แƒ™แƒ•แƒ”แƒ‘แƒ”แƒ‘แƒ แƒ“แƒ”แƒœแƒ˜
  • GPIO15 แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒ˜แƒฌแƒแƒ–แƒ”. แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜แƒ แƒกแƒแƒญแƒ˜แƒ แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒ›แƒแƒ˜แƒœแƒช แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒฅแƒ•แƒก แƒแƒ› แƒคแƒ”แƒฎแƒ–แƒ” แƒ“แƒแƒกแƒแƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒแƒฆแƒแƒ  แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ

แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ แƒ’แƒแƒ“แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“, แƒกแƒแƒญแƒ˜แƒ แƒแƒ GPIO2-แƒ˜แƒก แƒ›แƒแƒ™แƒšแƒ” แƒฉแƒแƒ แƒ—แƒ•แƒ แƒ›แƒ˜แƒฌแƒแƒ–แƒ” แƒ“แƒ แƒฃแƒคแƒ แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ แƒแƒ› แƒ˜แƒงแƒแƒก, แƒ›แƒ” แƒ›แƒ˜แƒ•แƒแƒฌแƒแƒ“แƒ” แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒ˜. แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ  แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜, แƒ”แƒก แƒฅแƒ˜แƒœแƒซแƒ˜แƒกแƒ—แƒแƒ•แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜แƒ แƒซแƒแƒšแƒแƒจแƒ˜.

GPIO2 แƒฎแƒแƒ–แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜ - แƒ“แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒœ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ”. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒœ แƒฉแƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒ›แƒ”แƒ‘แƒ , แƒแƒœ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก firmware แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜. แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ”แƒก แƒžแƒ˜แƒœแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ GPIO. แƒ™แƒแƒ แƒ’แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒฅ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฃแƒ แƒ—แƒแƒ— แƒ›แƒแƒก แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ.

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ UART-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒกแƒแƒ•แƒแƒ แƒชแƒฎแƒ”แƒšแƒ–แƒ”. แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒ” แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘ แƒ˜แƒฅ USB-UART แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒก. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒ˜แƒ™แƒ•แƒ”แƒ‘แƒ”แƒ‘แƒ 3.3 แƒ•. แƒ—แƒฃ แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒแƒ— แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒ˜แƒก แƒแƒ› แƒซแƒแƒ‘แƒ•แƒแƒ–แƒ” แƒ’แƒแƒ“แƒแƒ แƒ—แƒ•แƒ แƒ“แƒ 5 แƒ• แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒ“แƒแƒ˜แƒฌแƒ•แƒ”แƒ‘แƒ.

แƒกแƒแƒแƒ‘แƒแƒ–แƒแƒœแƒแƒจแƒ˜ แƒ“แƒ”แƒœแƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒ›แƒแƒฅแƒ•แƒก - แƒ’แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒ˜ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ”แƒ แƒ— แƒ›แƒ”แƒขแƒ แƒ–แƒ”แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ•แƒ˜แƒ™แƒ•แƒ”แƒ‘ 220 แƒ•แƒแƒšแƒขแƒ˜แƒ—. แƒ“แƒ”แƒœแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒ“ แƒ›แƒ”แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒแƒขแƒแƒ แƒ แƒ‘แƒšแƒแƒ™แƒ˜ HLK-PM03 แƒขแƒ”แƒœแƒกแƒขแƒแƒ  แƒ แƒแƒ‘แƒแƒขแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒžแƒ˜แƒ แƒแƒ“แƒแƒ“ แƒ›แƒ” แƒ›แƒ˜แƒญแƒ˜แƒ แƒก แƒแƒœแƒแƒšแƒแƒ’แƒฃแƒ แƒ˜ แƒ“แƒ แƒ“แƒ”แƒœแƒ˜แƒก แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒœแƒ˜แƒ™แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒ–แƒ แƒ“แƒ”แƒœแƒ˜แƒก แƒฌแƒงแƒแƒ แƒ แƒžแƒแƒขแƒแƒ แƒ แƒกแƒแƒฅแƒ›แƒ”แƒจแƒ˜.

แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒ แƒ”แƒŸแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ” แƒ›แƒ˜แƒ•แƒแƒฌแƒแƒ“แƒ” LED, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ GPIO2-แƒ—แƒแƒœ. แƒ—แƒฃแƒ›แƒชแƒ, แƒ›แƒ” แƒแƒ  แƒ’แƒแƒ•แƒฎแƒกแƒœแƒ˜แƒ“แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ... ESP-07 แƒ›แƒแƒ“แƒฃแƒšแƒก แƒฃแƒ™แƒ•แƒ” แƒแƒฅแƒ•แƒก LED แƒ“แƒ แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ GPIO2-แƒ—แƒแƒœ. แƒแƒฆแƒแƒœแƒ“ แƒ“แƒแƒคแƒแƒ–แƒ” แƒ˜แƒงแƒแƒก, แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒ›แƒกแƒฃแƒ แƒก แƒแƒ› LED-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ•แƒแƒœแƒ แƒ™แƒ”แƒ˜แƒกแƒ–แƒ”.

แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ–แƒ”. แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒก แƒแƒ  แƒแƒฅแƒ•แƒ— แƒšแƒแƒ’แƒ˜แƒ™แƒ, แƒ›แƒแƒ— แƒ•แƒ”แƒ  แƒ›แƒแƒกแƒ—แƒฎแƒแƒ•แƒ— แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒก. แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜, แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ, แƒแƒ แƒ˜แƒก แƒ˜แƒ›แƒžแƒฃแƒšแƒกแƒ”แƒ‘แƒ˜ - แƒšแƒ”แƒ แƒฌแƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜แƒก แƒ™แƒแƒœแƒขแƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฎแƒฃแƒ แƒ•แƒ แƒงแƒแƒ•แƒ”แƒš แƒšแƒ˜แƒขแƒ แƒ–แƒ”. แƒฉแƒ”แƒ›แƒ˜ แƒ แƒ˜แƒ“แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ GPIO12/GPIO13-แƒ—แƒแƒœ. แƒ›แƒ” แƒฉแƒแƒ•แƒ แƒ—แƒแƒ• แƒแƒ›แƒแƒกแƒแƒฌแƒ”แƒ• แƒ แƒ”แƒ–แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒแƒ“ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—.

แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒ›แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ R8 แƒ“แƒ R9 แƒ แƒ”แƒ–แƒ˜แƒกแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ“แƒแƒคแƒ˜แƒก แƒฉแƒ”แƒ›แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก แƒแƒ  แƒแƒฅแƒ•แƒก แƒ˜แƒกแƒ˜แƒœแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ•แƒ“แƒ”แƒ‘ แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒแƒก, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒ› แƒœแƒแƒฎแƒแƒก, แƒฆแƒ˜แƒ แƒก แƒแƒ› แƒฃแƒ’แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ. แƒ แƒ”แƒ–แƒ˜แƒกแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒแƒ  แƒ“แƒแƒ˜แƒฌแƒ•แƒแƒก แƒžแƒแƒ แƒขแƒ˜, แƒ—แƒฃ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ แƒ’แƒแƒคแƒฃแƒญแƒ“แƒ แƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒžแƒ˜แƒœแƒก แƒ”แƒ แƒ—แƒ–แƒ”, แƒฎแƒแƒšแƒ แƒšแƒ”แƒ แƒฌแƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒแƒ› แƒฎแƒแƒ–แƒก แƒ›แƒ˜แƒฌแƒแƒกแƒ—แƒแƒœ แƒแƒจแƒแƒ แƒ”แƒ‘แƒก (แƒ แƒ”แƒ–แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ— แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒฃแƒ› 3.3V/1000Ohm = 3.3mA แƒจแƒ”แƒ›แƒแƒ•แƒ).

แƒ“แƒ แƒแƒ แƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒแƒ— แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ—, แƒ—แƒฃ แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒ”แƒœแƒ”แƒ แƒ’แƒ˜แƒ แƒ’แƒแƒฅแƒ แƒ”แƒ‘แƒ. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ’แƒแƒœ แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒก แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ แƒ’แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒแƒก. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒ–แƒ”. แƒ—แƒฃ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒแƒ  แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ“แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก (แƒแƒœ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’), แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ  แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒ“แƒ แƒแƒ  แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒกแƒฌแƒแƒ แƒแƒ“.

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒก แƒ“แƒแƒ–แƒแƒ’แƒ•แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒฉแƒ˜แƒžแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ I2C-แƒ˜แƒ—. แƒ›แƒ” แƒแƒ  แƒ›แƒแƒฅแƒ•แƒก แƒ แƒแƒ˜แƒ›แƒ” แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒคแƒšแƒ”แƒจ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ›แƒแƒ–แƒ” - แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— 2 แƒœแƒแƒ›แƒ”แƒ แƒ˜ (แƒšแƒ˜แƒขแƒ แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒชแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒชแƒ˜แƒ•แƒ˜ แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—). แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒแƒขแƒแƒ แƒ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒช แƒ™แƒ˜ แƒ’แƒแƒ›แƒแƒ“แƒ’แƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒแƒ— แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒชแƒ˜แƒ™แƒšแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก. แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒก แƒแƒ แƒ˜แƒก 100 แƒแƒ—แƒแƒกแƒ˜ แƒชแƒ˜แƒ™แƒšแƒ˜, แƒ–แƒแƒ’แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒแƒ›แƒ“แƒ”.

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒ˜แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒก แƒ‘แƒ˜แƒœแƒแƒจแƒ˜ แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒ˜แƒก 4 แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ›แƒ” แƒ›แƒแƒ•แƒ˜แƒฎแƒ›แƒแƒ แƒ” 500 แƒ™แƒฃแƒ‘แƒฃแƒ  แƒ›แƒ”แƒขแƒ แƒ–แƒ” แƒชแƒแƒขแƒ แƒ›แƒ”แƒขแƒ˜ แƒฌแƒงแƒแƒšแƒ˜, แƒ”แƒก แƒแƒ แƒ˜แƒก 500 แƒแƒ—แƒแƒกแƒ˜ แƒšแƒ˜แƒขแƒ แƒ˜! แƒ“แƒ 500 แƒแƒ—แƒแƒกแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒคแƒšแƒ”แƒจแƒจแƒ˜. แƒ“แƒ แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒชแƒ˜แƒ•แƒ˜ แƒฌแƒงแƒแƒšแƒ˜แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒ“แƒแƒงแƒ˜แƒ“แƒ•แƒ แƒงแƒแƒ•แƒ”แƒš แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒ”แƒšแƒ˜แƒฌแƒแƒ“แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก FRAM แƒฉแƒ˜แƒžแƒ”แƒ‘แƒ˜. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” I2C EEPROM, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒชแƒ˜แƒ™แƒšแƒ”แƒ‘แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ— (แƒแƒกแƒแƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜). แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“, แƒแƒกแƒ”แƒ—แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒฅแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ˜แƒœแƒช แƒ•แƒ”แƒ  แƒ›แƒแƒ•แƒ“แƒ˜แƒ•แƒแƒ  แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒแƒจแƒ˜, แƒแƒกแƒ” แƒ แƒแƒ›, แƒฏแƒ”แƒ แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ— แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ 24LC512 แƒ“แƒแƒ“แƒ’แƒ”แƒ‘แƒ.

แƒ‘แƒ”แƒญแƒ“แƒฃแƒ แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ“แƒแƒคแƒ

แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒแƒคแƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒกแƒแƒฎแƒšแƒจแƒ˜ แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ•แƒ“แƒ˜. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ“แƒแƒคแƒ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒ แƒแƒ’แƒแƒ แƒช แƒชแƒแƒšแƒ›แƒฎแƒ แƒ˜แƒ•แƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ”แƒ แƒ—แƒ˜ แƒกแƒแƒแƒ—แƒ˜ แƒ’แƒแƒ•แƒแƒขแƒแƒ แƒ” แƒšแƒแƒ–แƒ”แƒ แƒฃแƒšแƒ˜ แƒ แƒ™แƒ˜แƒœแƒ˜แƒ— แƒ“แƒ แƒ’แƒแƒ›แƒแƒฏแƒแƒœแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒœแƒ˜แƒฆแƒ‘แƒ˜แƒ— (แƒ”แƒก แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒแƒ  แƒแƒ แƒ˜แƒก comme il faut แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”), แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ“แƒแƒคแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ›แƒ”แƒ™แƒ•แƒ”แƒ—แƒ แƒฉแƒ˜แƒœแƒ”แƒšแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒ“แƒแƒคแƒ˜แƒก แƒจแƒ”แƒ™แƒ•แƒ”แƒ—แƒแƒ›แƒ“แƒ” แƒ›แƒ˜แƒ•แƒฎแƒ•แƒ“แƒ˜, แƒ แƒแƒ› แƒ’แƒแƒ แƒ“แƒ แƒคแƒšแƒ”แƒจ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒฉแƒ˜แƒžแƒ˜แƒกแƒ, แƒจแƒ”แƒ›แƒ”แƒซแƒšแƒ แƒกแƒฎแƒ•แƒ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒœแƒ˜แƒ•แƒ—แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ I2C แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ—แƒแƒœ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ“แƒ˜แƒกแƒžแƒšแƒ”แƒ˜. แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒแƒ“ แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ”แƒก แƒ›แƒแƒกแƒ–แƒ”, แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒ“แƒแƒคแƒแƒ–แƒ” แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ˜แƒšแƒ˜. แƒ™แƒแƒ แƒ’แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฅแƒแƒ แƒฎแƒœแƒ˜แƒ“แƒแƒœ แƒ“แƒแƒคแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ™แƒ•แƒ”แƒ—แƒแƒก แƒ•แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ“แƒ˜, แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒฐแƒฅแƒแƒœแƒ“แƒ แƒชแƒแƒšแƒ›แƒฎแƒ แƒ˜แƒ•แƒ˜ แƒ“แƒแƒคแƒ˜แƒ— แƒจแƒ”แƒ›แƒแƒ–แƒฆแƒฃแƒ“แƒ•แƒแƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› I2C แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜แƒ แƒ“แƒแƒคแƒ˜แƒก แƒฃแƒ™แƒแƒœแƒ แƒ›แƒฎแƒแƒ แƒ”แƒก.

แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒงแƒ แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒชแƒแƒšแƒ›แƒฎแƒ แƒ˜แƒ•แƒ˜ แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒ“แƒแƒคแƒ แƒ“แƒแƒฎแƒแƒขแƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒชแƒแƒšแƒ›แƒฎแƒ แƒ˜แƒ•แƒแƒ“, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒขแƒ แƒแƒกแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ SMD แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ แƒ˜แƒงแƒ แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ˜แƒšแƒ˜ แƒ”แƒ แƒ— แƒ›แƒฎแƒแƒ แƒ”แƒก, แƒฎแƒแƒšแƒ แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก, แƒ™แƒแƒœแƒ”แƒฅแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ™แƒ•แƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ›แƒ”แƒแƒ แƒ” แƒ›แƒฎแƒแƒ แƒ”แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒแƒคแƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ” แƒ”แƒ แƒ—แƒ˜ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ“แƒแƒ›แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ’แƒ”แƒ’แƒ›แƒ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜ แƒฌแƒ˜แƒœแƒ แƒ›แƒฎแƒแƒ แƒ”แƒก แƒ’แƒแƒ•แƒแƒ›แƒแƒ’แƒ แƒ”. แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒแƒฅแƒ›แƒ” แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒ›แƒแƒ›แƒแƒ แƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒฃแƒฆแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒฃแƒแƒฎแƒšแƒแƒ•แƒ“แƒ, แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒžแƒšแƒ˜แƒฃแƒกแƒ˜ แƒ“แƒ แƒ›แƒ˜แƒœแƒฃแƒกแƒ˜ แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ แƒ˜แƒงแƒ แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜. แƒคแƒ”แƒ แƒ›แƒ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒฏแƒ”แƒ›แƒžแƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒ–แƒ”แƒ›แƒแƒ— แƒกแƒฃแƒ แƒแƒ—แƒ–แƒ” แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒ•แƒชแƒ•แƒแƒšแƒ” แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒแƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒแƒคแƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒ“แƒแƒœ แƒ›แƒ”แƒแƒ แƒ”แƒ–แƒ” แƒ›แƒ˜แƒฌแƒ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก Boot แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒฅแƒ˜แƒœแƒซแƒ˜แƒกแƒ—แƒแƒ•แƒ˜แƒ— (แƒ—แƒฃแƒ›แƒชแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒ”แƒแƒ แƒ” แƒคแƒ”แƒœแƒแƒ–แƒ” แƒขแƒ แƒแƒกแƒ˜แƒก แƒ“แƒแƒฎแƒแƒขแƒ•แƒ).

แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒกแƒแƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒ”แƒšแƒ˜

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒฎแƒ”แƒฃแƒšแƒ˜. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— 3D แƒžแƒ แƒ˜แƒœแƒขแƒ”แƒ แƒ˜, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ. แƒซแƒแƒšแƒ˜แƒแƒœ แƒแƒ  แƒจแƒ”แƒ•แƒฌแƒฃแƒฎแƒ“แƒ˜ - แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒกแƒฌแƒแƒ แƒ˜ แƒ–แƒแƒ›แƒ˜แƒก แƒงแƒฃแƒ—แƒ˜ แƒ“แƒแƒ•แƒฎแƒแƒขแƒ” แƒ“แƒ แƒกแƒฌแƒแƒ  แƒแƒ“แƒ’แƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒญแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜. แƒกแƒแƒคแƒแƒ แƒ˜ แƒ›แƒ˜แƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒฎแƒ”แƒฃแƒšแƒ–แƒ” แƒ›แƒชแƒ˜แƒ แƒ” แƒ–แƒแƒ›แƒ˜แƒก แƒฎแƒ แƒแƒฎแƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒ”, แƒ แƒแƒ› Boot แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒ“แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ - แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒแƒฉแƒ”แƒœแƒ— แƒ›แƒแƒก แƒฌแƒ˜แƒœแƒ แƒžแƒแƒœแƒ”แƒšแƒ–แƒ”. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ›แƒ” แƒ“แƒแƒ•แƒฎแƒแƒขแƒ” แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ "แƒญแƒ", แƒกแƒแƒ“แƒแƒช แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒชแƒฎแƒแƒ•แƒ แƒแƒ‘แƒก.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒ™แƒแƒ แƒžแƒฃแƒกแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒแƒ แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒกแƒแƒ™แƒ˜แƒœแƒซแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ–แƒ”แƒช แƒ“แƒแƒคแƒ แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ“แƒแƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ˜ M3 แƒฎแƒ แƒแƒฎแƒœแƒ˜แƒ— (แƒ“แƒแƒคแƒแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ แƒแƒ  แƒ˜แƒงแƒ)

แƒ“แƒ˜แƒกแƒžแƒšแƒ”แƒ˜ แƒจแƒ”แƒ•แƒแƒ แƒฉแƒ˜แƒ” แƒฃแƒ™แƒ•แƒ” แƒฅแƒ”แƒ˜แƒกแƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ“แƒแƒ‘แƒ”แƒญแƒ“แƒ•แƒ˜แƒกแƒแƒก. แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒแƒ แƒฎแƒแƒ–แƒ˜แƒแƒœแƒ˜ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜ แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒ  แƒฏแƒ“แƒ”แƒ‘แƒแƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ‘แƒแƒšแƒแƒจแƒ˜ แƒ˜แƒงแƒ OLED แƒ“แƒ˜แƒกแƒžแƒšแƒ”แƒ˜ SSD1306 128ร—32. แƒชแƒแƒขแƒ แƒžแƒแƒขแƒแƒ แƒแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ›แƒ˜แƒฌแƒ”แƒ•แƒก แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ” แƒ›แƒ–แƒ”แƒ แƒ - แƒ”แƒก แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ˜แƒ.

แƒแƒ› แƒ’แƒ–แƒ˜แƒ— แƒ“แƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ˜แƒ•แƒšแƒ˜แƒ“แƒ แƒ›แƒแƒ•แƒ—แƒฃแƒšแƒก แƒ›แƒ˜แƒกแƒ’แƒแƒœ, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ“แƒ˜แƒกแƒžแƒšแƒ”แƒ˜ แƒ“แƒแƒ›แƒ”แƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒ˜แƒœแƒ แƒ™แƒแƒ แƒžแƒฃแƒกแƒ˜แƒก แƒจแƒฃแƒแƒจแƒ˜. แƒ”แƒ แƒ’แƒแƒœแƒแƒ›แƒ˜แƒ™แƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ“แƒแƒ‘แƒแƒšแƒ˜แƒ - แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒแƒ แƒ˜แƒก แƒ–แƒ”แƒ•แƒ˜แƒ—, แƒ”แƒ™แƒ แƒแƒœแƒ˜ แƒฅแƒ•แƒ”แƒ“แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜, แƒ แƒแƒ› แƒ“แƒ˜แƒกแƒžแƒšแƒ”แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ’แƒ•แƒ˜แƒแƒœ แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ“แƒ แƒ›แƒ” แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒ”แƒ–แƒแƒ แƒ”แƒ‘แƒแƒ“แƒ แƒ“แƒแƒคแƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒขแƒแƒœแƒแƒ“.

แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜แƒ. แƒ“แƒ˜แƒกแƒžแƒšแƒ”แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒชแƒฎแƒ”แƒš แƒฌแƒ”แƒ‘แƒแƒ—แƒ˜ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒœแƒแƒขแƒ–แƒ”

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— KDPV-แƒ–แƒ”

แƒคแƒ˜แƒ แƒ›แƒ

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ–แƒ”. แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒžแƒแƒขแƒแƒ แƒ แƒฎแƒ”แƒšแƒœแƒแƒ™แƒ”แƒ—แƒแƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ” แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ›แƒแƒ›แƒฌแƒแƒœแƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ (แƒ›แƒ˜แƒ™แƒ แƒแƒžแƒ˜แƒ—แƒแƒœแƒ˜) - แƒ™แƒแƒ“แƒ˜ แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ™แƒแƒ›แƒžแƒแƒฅแƒขแƒฃแƒ แƒ˜ แƒ“แƒ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜. แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒฉแƒแƒกแƒ•แƒšแƒ แƒ›แƒ˜แƒ™แƒ แƒแƒฌแƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒ“แƒแƒœ.

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ - แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒก แƒแƒฅแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ:

  • แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒญแƒ”แƒ แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒก แƒ“แƒ แƒฃแƒงแƒฃแƒ แƒ”แƒ‘แƒก แƒ”แƒ™แƒ แƒแƒœแƒก
  • แƒšแƒ˜แƒขแƒ แƒ˜ แƒ›แƒแƒœแƒ˜แƒจแƒœแƒ”แƒ— แƒ“แƒ แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ— แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒคแƒšแƒ”แƒจ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜
  • แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก WiFi แƒกแƒ˜แƒ’แƒœแƒแƒšแƒก แƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒก
  • แƒ˜แƒกแƒ”, แƒ›แƒแƒชแƒ˜แƒ›แƒชแƒ˜แƒ›แƒ” แƒœแƒแƒ—แƒฃแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ

แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ”แƒ แƒ—แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒ—แƒฃ แƒ›แƒ”แƒแƒ แƒ” แƒ แƒแƒ˜แƒ›แƒ” แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ— แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ˜แƒšแƒ˜แƒ. แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ•แƒ˜แƒ•แƒกแƒ” แƒ™แƒแƒฅแƒขแƒฃแƒกแƒ”แƒ‘แƒ˜แƒ— แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒแƒฎแƒšแƒ แƒ›แƒแƒ˜แƒœแƒช แƒ•แƒฎแƒ”แƒ“แƒแƒ• แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ”แƒ‘แƒก แƒกแƒขแƒ˜แƒšแƒจแƒ˜: โ€žแƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒšแƒ˜แƒขแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒ•แƒขแƒแƒ•แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒ™แƒ แƒแƒœแƒ˜ แƒ˜แƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒแƒฎแƒšแƒ“แƒ”แƒ‘แƒแƒ“แƒโ€œ แƒแƒœ โ€žแƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒแƒคแƒ”แƒ แƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก, แƒกแƒแƒœแƒแƒ› แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒฃแƒ”แƒ แƒ—แƒ“แƒ”แƒ‘แƒ. แฒ•แƒแƒ˜ - แƒคแƒแƒ˜." แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ’แƒ”แƒฅแƒ›แƒœแƒแƒ— แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜ แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ˜แƒก, แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ“แƒ’แƒ›แƒ˜แƒก แƒแƒœ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒแƒแƒขแƒแƒ›แƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ˜แƒกแƒ”, แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก, แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ˜แƒฅแƒชแƒ”แƒ•แƒ แƒ›แƒฃแƒจแƒแƒ“.

ะ’ แƒฃแƒคแƒ แƒ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ” แƒ™แƒšแƒแƒกแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒžแƒ แƒ”แƒ•แƒ”แƒœแƒชแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒฃแƒšแƒขแƒ˜แƒขแƒแƒกแƒ™แƒ˜แƒœแƒ’แƒ˜ แƒ“แƒ FreeRTOS, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ”แƒ‘แƒ˜ แƒ“แƒ uasync แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜ . แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒแƒชแƒแƒ แƒ˜แƒ - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒ“แƒ แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒฌแƒ”แƒ แƒ” แƒจแƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒ, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒ—แƒฎแƒแƒ แƒ˜ แƒ แƒแƒ›แƒ”แƒš แƒแƒ“แƒ’แƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ“แƒแƒฎแƒ•แƒ˜แƒ“แƒ” แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก.

แƒ›แƒ” แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ—, แƒจแƒ”แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒแƒ— แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒžแƒ แƒ”แƒ•แƒ”แƒœแƒชแƒ˜แƒฃแƒš แƒ“แƒ แƒ™แƒแƒœแƒ™แƒฃแƒ แƒ”แƒœแƒขแƒฃแƒœแƒแƒ แƒ˜แƒแƒœ แƒ›แƒ แƒแƒ•แƒแƒšแƒแƒ›แƒแƒชแƒแƒœแƒแƒก แƒจแƒแƒ แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒฃแƒ แƒ•แƒ˜แƒšแƒ˜แƒกแƒแƒ›แƒ”แƒ‘แƒ . แƒแƒฎแƒšแƒ แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒ™แƒแƒ“แƒ–แƒ”.

#####################################
# 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-แƒก (แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก_แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ) - แƒแƒกแƒ” แƒฎแƒ“แƒ”แƒ‘แƒ แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ แƒ“แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’.

แƒฅแƒ˜แƒœแƒซแƒ˜แƒกแƒ—แƒแƒ•แƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ›แƒแƒกแƒแƒงแƒ•แƒแƒœแƒ˜แƒ— แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒ›แƒแƒ›แƒแƒ แƒแƒ’แƒ”แƒ‘แƒแƒ›แƒ“แƒ”: แƒ—แƒฃ แƒšแƒ”แƒ แƒฌแƒ›แƒ˜แƒก แƒฉแƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜แƒ, แƒฎแƒแƒ–แƒ˜ แƒœแƒฃแƒšแƒ˜แƒก แƒขแƒแƒšแƒ˜แƒ, แƒ—แƒฃ แƒฎแƒแƒ–แƒ˜ แƒฆแƒ˜แƒแƒ, แƒ˜แƒก แƒ˜แƒ—แƒ˜แƒจแƒ”แƒ‘แƒ แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒ›แƒแƒ›แƒแƒ แƒแƒ’แƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒ“แƒ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ”แƒ แƒ—แƒก.

แƒแƒฅ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒชแƒแƒšแƒ™แƒ” แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒžแƒ˜แƒœแƒก. แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒก. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜

    """ Poll pin and advance value when another litre passed """
    async def _switchcheck(self):
        last_checked_pin_state = self._pin.value()  # Get initial state

        # Poll for a pin change
        while True:
            state = self._pin.value()
            if state != last_checked_pin_state:
                # State has changed: act on it now.
                last_checked_pin_state = state
                if state == 0:
                    self._another_litre_passed()

            # Ignore further state changes until switch has settled
            await asyncio.sleep_ms(Counter.debounce_ms)

25แƒ›แƒ›-แƒ˜แƒก แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒœแƒขแƒแƒฅแƒขแƒ˜แƒก แƒแƒ‘แƒ แƒฃแƒœแƒ•แƒ˜แƒก แƒ’แƒแƒกแƒแƒคแƒ˜แƒšแƒขแƒ แƒแƒ“ แƒ“แƒ แƒแƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ˜แƒก แƒแƒ แƒ”แƒ’แƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ˜แƒฆแƒ•แƒ˜แƒซแƒ”แƒ‘แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ (แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ”แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ แƒกแƒซแƒ˜แƒœแƒแƒ•แƒก, แƒกแƒฎแƒ•แƒ แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ). แƒงแƒแƒ•แƒ”แƒš 25ms-แƒจแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ˜แƒฆแƒ•แƒ˜แƒซแƒ”แƒ‘แƒก, แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒฅแƒ˜แƒœแƒซแƒ˜แƒกแƒ—แƒแƒ•แƒก แƒ“แƒ แƒ—แƒฃ แƒšแƒ”แƒ แƒฌแƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ™แƒแƒœแƒขแƒแƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒšแƒ˜แƒขแƒ แƒ˜ แƒ’แƒแƒ•แƒ˜แƒ“แƒ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒจแƒ˜ แƒ“แƒ แƒ”แƒก แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ”แƒก.

    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

แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ— Python-แƒ˜แƒก แƒ“แƒ uasync แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ (แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ”แƒก แƒ แƒฃแƒกแƒฃแƒšแƒแƒ“ แƒ•แƒ—แƒแƒ แƒ’แƒ›แƒœแƒแƒ—? แƒ˜แƒก, แƒ แƒ˜แƒกแƒ˜ แƒ˜แƒ›แƒ”แƒ“แƒ˜แƒช แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ—?)

    def __await__(self):
        while not self._value_changed:
            yield from asyncio.sleep(0)

        return self.value()

    __iter__ = __await__  

แƒ”แƒก แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒแƒก - แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ แƒ˜แƒฆแƒ•แƒ˜แƒซแƒ”แƒ‘แƒก แƒ“แƒ แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก _value_changed แƒ“แƒ แƒแƒจแƒแƒก. แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ–แƒแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒซแƒ˜แƒœแƒแƒก แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ“แƒ แƒ“แƒแƒ˜แƒซแƒ˜แƒœแƒแƒก แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

แƒ แƒแƒช แƒจแƒ”แƒ”แƒฎแƒ”แƒ‘แƒ แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒ‘แƒก?แƒ“แƒ˜แƒแƒฎ, แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒขแƒ แƒแƒšแƒ˜ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒแƒ— แƒ“แƒ แƒ—แƒฅแƒ•แƒแƒ—, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ—แƒ•แƒ˜แƒ—แƒแƒœ แƒ—แƒฅแƒ•แƒ˜แƒ— แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ— แƒกแƒฃแƒšแƒ”แƒšแƒฃแƒ แƒ˜ แƒžแƒ˜แƒœแƒžแƒแƒšแƒ˜. แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒ แƒแƒช แƒ•แƒชแƒแƒ“แƒ”. ESP8266-แƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒแƒแƒฌแƒงแƒแƒ— แƒ™แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ แƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒแƒ› แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜แƒช แƒ™แƒ˜ แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜. แƒแƒ› แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ”แƒก. แƒแƒšแƒ‘แƒแƒ—, แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ, แƒ—แƒฃ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒฃแƒ แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ - แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ, แƒกแƒแƒœแƒแƒ› แƒแƒ  แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒ”แƒ‘แƒ แƒ”แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ.

แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“ (แƒ—แƒฃ แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“?) แƒฉแƒ”แƒ›แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜แƒ, แƒ›แƒแƒœ แƒ—แƒแƒ•แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ MQTT แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒ— แƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ EEPROM-แƒจแƒ˜. แƒ“แƒ แƒแƒฅ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜ - แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒแƒกแƒขแƒ, แƒ แƒแƒช แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ˜แƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒฅแƒกแƒ”แƒšแƒจแƒ˜. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก buns แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ micropython.schedule(), แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ "แƒ แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒšแƒ”", แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ, "แƒ แƒ แƒแƒ–แƒ แƒ˜ แƒแƒฅแƒ•แƒก?" แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœ แƒแƒฎแƒšแƒแƒ•แƒ” แƒ•แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒ— แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒฎแƒ˜แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒคแƒฃแƒญแƒ”แƒ‘แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก. แƒแƒœ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ›แƒแƒ•แƒ˜แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ, แƒ แƒแƒชแƒ แƒฏแƒ”แƒ  แƒแƒ  แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒซแƒ•แƒ”แƒšแƒ˜. แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ‘แƒšแƒแƒ™แƒแƒ— แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒแƒœ แƒกแƒฎแƒ•แƒแƒ’แƒ•แƒแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒฎแƒ•แƒ˜แƒ“แƒ”แƒ— แƒ›แƒ˜แƒกแƒ’แƒแƒœ.

แƒ“แƒ แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ RuntimeError: แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ”แƒ— แƒกแƒขแƒ”แƒ™แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒแƒ•แƒแƒ แƒ˜แƒ แƒ“แƒ แƒ•แƒ˜แƒœ แƒ˜แƒชแƒ˜แƒก แƒ แƒแƒขแƒแƒ›?

แƒแƒจแƒ™แƒแƒ แƒ แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒ— แƒ“แƒ uasync-แƒ˜แƒ—, แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ แƒแƒฆแƒแƒชแƒœแƒแƒ˜แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒšแƒแƒ›แƒแƒ–แƒ˜ แƒ“แƒ แƒกแƒแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก

EEPROM-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ›แƒชแƒ˜แƒ แƒ” แƒ™แƒšแƒแƒกแƒจแƒ˜ แƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒ”

class EEPROM():
    i2c_addr = const(80)

    def __init__(self, i2c):
        self.i2c = i2c
        self.i2c_buf = bytearray(4) # Avoid creation/destruction of the buffer on each call


    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.txt แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ™แƒแƒ“แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“, แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒ—.

แƒ™แƒแƒ“แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒ‘แƒšแƒแƒ™แƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒšแƒแƒ“. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ แƒฃแƒ แƒ˜แƒชแƒฎแƒแƒ•แƒก

    async def _counter_coro(self, counter, topic):
        # Publish initial value
        value = counter.value()
        await self.publish(topic, str(value))

        # Publish each new 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 is up.')
            duration = ticks_diff(ticks_ms(), self.internet_outage_start) // 1000
            await self.publish_debug_msg('ReconnectedAfter', duration)
        else:
            self.internet_outages += 1
            self.internet_outage_start = ticks_ms()
            self.dprint('WiFi is down.')
            
        await asyncio.sleep(0)

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ’แƒฃแƒšแƒฌแƒ แƒคแƒ”แƒšแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ˜แƒก แƒ˜แƒ—แƒ•แƒšแƒ˜แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก (แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข_แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ) แƒ“แƒ แƒ›แƒแƒ— แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒแƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒแƒฆแƒ“แƒ’แƒ”แƒ‘แƒ, แƒฃแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒแƒ‘แƒ˜แƒก แƒ“แƒ แƒ แƒ”แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒ‘แƒแƒšแƒ แƒซแƒ˜แƒšแƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒ แƒกแƒแƒญแƒ˜แƒ แƒ, แƒ แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก - แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒจแƒ˜ แƒ›แƒแƒก แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒœ via 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("Received MQTT message 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))

แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜ แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒฏแƒ”แƒ  แƒแƒ  แƒ’แƒ•แƒ˜แƒฎแƒแƒ›แƒฎแƒแƒ›แƒ”แƒ‘แƒก LED-แƒก. แฒแƒฅ

    # 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 แƒฌแƒแƒ›แƒจแƒ˜ แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒชแƒ˜แƒ›แƒชแƒ˜แƒ›แƒ”แƒ‘แƒก. แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒแƒชแƒ˜แƒ›แƒชแƒ˜แƒ›แƒ” แƒกแƒฎแƒ•แƒ แƒ แƒ”แƒŸแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒฅ.

แƒ›แƒแƒ’แƒ แƒแƒ› LED แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒœแƒ”แƒ‘แƒ˜แƒ•แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒฉแƒ•แƒ”แƒœแƒช แƒ•แƒฃแƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ“แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒแƒก.

    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('Global communication failure: ', e)
                await asyncio.sleep(20)

    async def _connect_to_WiFi(self):
        self.dprint('Connecting to WiFi and 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('Connected!')
        self.internet_outage = False

    async def _run_main_loop(self):
        # Loop forever
        mins = 0
        while True:
            gc.collect()  # For RAM stats.
            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("Exception occurred: ", 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 แƒ“แƒ แƒ™แƒแƒšแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒ˜ (แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ mqtt_as-แƒจแƒ˜).

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ— แƒ›แƒแƒก แƒ“แƒ... แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— MemoryError-แƒก. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ แƒแƒช แƒฃแƒคแƒ แƒ แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ“แƒ˜ แƒ’แƒแƒ›แƒ”แƒ’แƒ, แƒกแƒแƒ“ แƒ’แƒแƒŸแƒแƒœแƒ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒช แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒข แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒขแƒก แƒ•แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ“แƒ˜, แƒ›แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒแƒ“แƒ แƒ” แƒฉแƒœแƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ. Google-แƒ˜แƒก แƒ›แƒแƒ™แƒšแƒ” แƒซแƒ˜แƒ”แƒ‘แƒแƒ› แƒ›แƒ˜แƒ›แƒ˜แƒงแƒ•แƒแƒœแƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒแƒ›แƒ“แƒ”, แƒ แƒแƒ› แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒก แƒแƒฅแƒ•แƒก, แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒจแƒ˜, แƒ›แƒฎแƒแƒšแƒแƒ“ 30 แƒ™แƒ‘ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช 65 แƒ™แƒ‘ แƒ™แƒแƒ“แƒ˜ (แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—) แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ•แƒ”แƒ  แƒฏแƒ“แƒ”แƒ‘แƒ.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜. แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› micropython แƒแƒ  แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒ™แƒแƒ“แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  .py แƒคแƒแƒ˜แƒšแƒ˜แƒ“แƒแƒœ - แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒฏแƒ”แƒ  แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ–แƒ”, แƒ’แƒแƒ“แƒแƒ˜แƒฅแƒชแƒ”แƒ•แƒ แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒแƒ“, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜. แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ”แƒ แƒ›แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ.

แƒฎแƒ แƒ˜แƒ™แƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ แƒฉแƒ”แƒœแƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ–แƒ” แƒ˜แƒœแƒขแƒ”แƒœแƒกแƒ˜แƒฃแƒ แƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ’แƒแƒœ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ˜แƒ“ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ–แƒ” แƒ“แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒ›แƒ–แƒ แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒจแƒ˜. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— micropython firmware แƒ“แƒ build mpy-cross แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ.

แƒ›แƒ” แƒแƒ  แƒ“แƒแƒ›แƒ˜แƒฌแƒ”แƒ แƒ˜แƒ Makefile, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒ•แƒ˜แƒแƒ แƒ” แƒ“แƒ แƒจแƒ”แƒ•แƒแƒ“แƒ’แƒ˜แƒœแƒ” แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒคแƒแƒ˜แƒšแƒ˜ (แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—) แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ แƒแƒ›

mpy-cross water_counter.py

แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ .mpy แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒ—, แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒฏแƒ”แƒ  แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ .py แƒฌแƒแƒจแƒแƒšแƒแƒ— แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ.

แƒ›แƒ” แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜ (IDE?) ESPlorer. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ–แƒ” แƒ“แƒ แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜. แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒงแƒ•แƒ”แƒšแƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก water_counter.py (.mpy) แƒคแƒแƒ˜แƒšแƒจแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก, แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœแƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒแƒ“ main.py. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ˜แƒก แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ .py แƒ“แƒ แƒแƒ แƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ .mpy. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ˜ แƒขแƒ แƒ˜แƒ•แƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜

import water_counter

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒ›แƒแƒก - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒšแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒกแƒแƒ’แƒแƒœแƒ’แƒแƒจแƒ แƒ›แƒชแƒ˜แƒ แƒ”แƒ - แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 1 แƒ™แƒ‘. แƒ›แƒ” แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ›แƒแƒฅแƒ•แƒก แƒ’แƒ”แƒ’แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ“แƒ แƒ”แƒก แƒ™แƒ˜แƒšแƒแƒ‘แƒแƒ˜แƒขแƒ˜ แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒแƒ› แƒกแƒแƒฅแƒ›แƒ”แƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜.

แƒแƒ˜ แƒกแƒแƒฅแƒ›แƒ”. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒจแƒ˜ แƒ“แƒ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒจแƒ˜แƒ“แƒ แƒคแƒแƒ˜แƒšแƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜, แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ›แƒแƒ˜แƒœแƒช แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ RAM-แƒจแƒ˜ แƒ“แƒ แƒ˜แƒฅแƒ˜แƒ“แƒแƒœ แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒ˜แƒ™แƒ แƒแƒžแƒ˜แƒ—แƒแƒœแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒก แƒ‘แƒแƒ˜แƒขแƒ˜แƒ™แƒแƒ“แƒ˜ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒคแƒšแƒ”แƒจ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒแƒฌแƒงแƒแƒ— แƒ˜แƒ’แƒ˜ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜. แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ แƒ—แƒฃแƒšแƒ˜, แƒ—แƒฃแƒ›แƒชแƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ แƒฉแƒ”แƒ›แƒก แƒœแƒ”แƒขแƒ‘แƒฃแƒฅแƒก (แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒฅ แƒ›แƒฅแƒแƒœแƒ“แƒ แƒšแƒ˜แƒœแƒฃแƒฅแƒกแƒ˜).

แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒแƒกแƒ”แƒ—แƒ˜แƒ:

  • แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒ“แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— ESP แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ˜แƒ— SDK. แƒ”แƒก แƒœแƒ˜แƒ•แƒ—แƒ˜ แƒแƒฌแƒงแƒแƒ‘แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒก แƒ“แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ESP8266-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— (แƒ›แƒ” แƒแƒ•แƒ˜แƒ แƒฉแƒ˜แƒ” STANDALONE=แƒ™แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜)
  • Download แƒ›แƒ˜แƒ™แƒ แƒแƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒฏแƒ˜แƒจแƒ”แƒ‘แƒ˜
  • แƒ›แƒแƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜ แƒžแƒแƒ แƒขแƒ”แƒ‘แƒจแƒ˜/esp8266/แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒจแƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒฎแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—
  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฌแƒงแƒแƒ‘แƒ— firmware-แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— ports/esp8266/README.md
  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒแƒก แƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ–แƒ” (แƒแƒ›แƒแƒก แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘ Windows-แƒ–แƒ” ESP8266Flasher แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒœ Python esptool-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—)

แƒ”แƒกแƒ” แƒ˜แƒ’แƒ˜, แƒแƒฎแƒšแƒ 'แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜ ssd1306' แƒแƒ›แƒแƒ˜แƒฆแƒ”แƒ‘แƒก แƒ™แƒแƒ“แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  firmware-แƒ“แƒแƒœ แƒ“แƒ RAM แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ  แƒ›แƒแƒ˜แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ. แƒแƒ› แƒฎแƒ แƒ˜แƒ™แƒ˜แƒ— แƒ›แƒ” แƒแƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒ” แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ firmware-แƒจแƒ˜, แƒฎแƒแƒšแƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒคแƒแƒ˜แƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒแƒ› แƒ“แƒ แƒแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒฅแƒ•แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 8.5 แƒ™แƒ‘ แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒ’แƒ•แƒชแƒ”แƒ›แƒก แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ— แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ. แƒ™แƒแƒ แƒ’แƒแƒ“, แƒ—แƒฃ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ firmware-แƒจแƒ˜.

แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— แƒแƒฎแƒšแƒ แƒแƒ›แƒแƒ–แƒ”?

แƒแƒ™, แƒแƒžแƒแƒ แƒแƒขแƒฃแƒ แƒ แƒจแƒ”แƒ“แƒฃแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒคแƒ˜แƒ แƒ›แƒ•แƒ”แƒ แƒ˜ แƒแƒฌแƒ”แƒ แƒ˜แƒ, แƒงแƒฃแƒ—แƒ˜ แƒ“แƒแƒ‘แƒ”แƒญแƒ“แƒ˜แƒšแƒ˜แƒ, แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒ™แƒ”แƒ“แƒ”แƒšแƒ–แƒ”แƒ แƒ›แƒ˜แƒ™แƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒฎแƒแƒšแƒ˜แƒกแƒ˜แƒ— แƒแƒชแƒ˜แƒ›แƒชแƒ˜แƒ›แƒ”แƒ‘แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒฏแƒ”แƒ -แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ— แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒจแƒแƒ•แƒ˜ แƒงแƒฃแƒ—แƒ˜แƒ (แƒกแƒ˜แƒขแƒงแƒ•แƒแƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒ— แƒ“แƒ แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ˜แƒ—แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—) แƒ“แƒ แƒ˜แƒก แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ›แƒชแƒ˜แƒ แƒ”แƒ. แƒ“แƒ แƒแƒ แƒ แƒแƒฆแƒแƒช แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— MQTT แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.

แƒฉแƒ”แƒ›แƒ˜ "แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒกแƒแƒฎแƒšแƒ˜" แƒขแƒ แƒ˜แƒแƒšแƒ”แƒ‘แƒก แƒ›แƒแƒŸแƒแƒ แƒ“แƒแƒ›แƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ. MQTT แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒœ แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒงแƒฃแƒ—แƒ˜แƒ“แƒแƒœ, แƒแƒœ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒแƒœแƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒแƒ–แƒ แƒ˜แƒ“แƒแƒœ - แƒแƒ  แƒ›แƒแƒฎแƒกแƒแƒ•แƒก แƒกแƒแƒ˜แƒ“แƒแƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”. MQTT แƒแƒ  แƒแƒ แƒ˜แƒก แƒ—แƒ•แƒ˜แƒ—แƒ™แƒ›แƒแƒ แƒ˜ แƒ แƒแƒ› - แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ”.แƒฌ. แƒ‘แƒ แƒแƒ™แƒ”แƒ แƒ˜ - แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฆแƒ”แƒ‘แƒก, แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ”แƒ‘แƒก แƒ“แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก MQTT แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ–แƒ”. แƒ›แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ mosquitto-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช (แƒ›แƒแƒŸแƒแƒ แƒ“แƒแƒ›แƒแƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒแƒ“) แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ˜แƒ›แƒแƒ•แƒ” แƒœแƒ”แƒขแƒ‘แƒฃแƒฅแƒ–แƒ”.

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒกแƒ˜แƒแƒจแƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒ”แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒฎแƒšแƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ—แƒแƒœ, แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ“แƒแƒ”แƒฅแƒ•แƒ”แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒแƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒก - แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒกแƒชแƒ˜แƒšแƒ“แƒ”แƒ‘แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒก. แƒ›แƒ” แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒฃแƒ แƒฉแƒ˜แƒ majordomo แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ›แƒกแƒฃแƒ แƒ•แƒ”แƒšแƒก แƒแƒ แƒฎแƒ˜ Electronics In Lens โ€” แƒ›แƒ”แƒ’แƒแƒ‘แƒแƒ แƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก แƒ“แƒ แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ–แƒ”.

แƒ›แƒ” แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒก แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ—. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ˜แƒฃแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก
แƒฉแƒแƒœแƒก, แƒ แƒแƒ› แƒฆแƒแƒ›แƒ˜แƒ— แƒฌแƒงแƒแƒšแƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒแƒ แƒแƒ•แƒ˜แƒœ แƒฎแƒ›แƒแƒ แƒแƒ‘แƒ“แƒ. แƒ แƒแƒ›แƒ“แƒ”แƒœแƒฏแƒ”แƒ แƒ›แƒ” แƒ•แƒ˜แƒฆแƒแƒช แƒฌแƒแƒ•แƒ˜แƒ“แƒ แƒขแƒฃแƒแƒšแƒ”แƒขแƒจแƒ˜ แƒ“แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ แƒแƒกแƒ›แƒแƒกแƒ˜แƒก แƒคแƒ˜แƒšแƒขแƒ แƒ˜ แƒฆแƒแƒ›แƒ”แƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒšแƒ˜แƒขแƒ แƒก แƒ˜แƒฌแƒแƒ•แƒก. แƒ“แƒ˜แƒšแƒ˜แƒ—, แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ. แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒฅแƒ•แƒแƒ‘แƒ˜แƒ“แƒแƒœ แƒฌแƒงแƒแƒšแƒก แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒแƒ‘แƒแƒ–แƒแƒœแƒ แƒ“แƒ แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ”แƒ“แƒ˜ แƒฅแƒแƒšแƒแƒฅแƒ˜แƒก แƒชแƒฎแƒ”แƒš แƒฌแƒงแƒแƒšแƒ–แƒ” - แƒ”แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒฉแƒแƒœแƒก แƒฅแƒ•แƒ”แƒ“แƒ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ–แƒ”.

แƒแƒ› แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ•แƒ˜แƒ’แƒ”, แƒ แƒแƒ› แƒขแƒฃแƒแƒšแƒ”แƒขแƒจแƒ˜ แƒฌแƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ 6-7 แƒšแƒ˜แƒขแƒ แƒ˜ แƒฌแƒงแƒแƒšแƒ˜, แƒจแƒฎแƒแƒžแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ 20-30 แƒšแƒ˜แƒขแƒ แƒ˜, แƒญแƒฃแƒ แƒญแƒšแƒ˜แƒก แƒ แƒ”แƒชแƒฎแƒ•แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 20 แƒšแƒ˜แƒขแƒ แƒ˜, แƒแƒ‘แƒแƒ–แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ แƒ™แƒ˜ 160 แƒšแƒ˜แƒขแƒ แƒ˜. แƒฉแƒ”แƒ›แƒ˜ แƒแƒฏแƒแƒฎแƒ˜ แƒ“แƒฆแƒ”แƒจแƒ˜ แƒกแƒแƒ“แƒฆแƒแƒช 500-600 แƒšแƒ˜แƒขแƒ แƒก แƒ›แƒแƒ˜แƒฎแƒ›แƒแƒ แƒก.

แƒ›แƒแƒ—แƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒกแƒแƒช แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒแƒฅแƒ”แƒ“แƒแƒœ แƒ’แƒแƒ•แƒ˜แƒ’แƒ”, แƒ แƒแƒ› แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒœแƒ™แƒแƒœแƒ˜ แƒฆแƒ˜แƒแƒ, แƒฌแƒงแƒแƒšแƒ˜ แƒ›แƒ˜แƒ”แƒ“แƒ˜แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 1 แƒšแƒ˜แƒขแƒ แƒ˜ แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒ— 5 แƒฌแƒแƒ›แƒจแƒ˜.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒคแƒแƒ แƒ›แƒ˜แƒ— แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ แƒแƒšแƒ‘แƒแƒ— แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒแƒงแƒฃแƒ แƒ”แƒ‘แƒšแƒแƒ“. Majordomo-แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒฅแƒ•แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒœแƒแƒฎแƒแƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒฆแƒ˜แƒก, แƒ™แƒ•แƒ˜แƒ แƒ˜แƒกแƒ แƒ“แƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜ แƒ–แƒแƒšแƒ”แƒ‘แƒ˜แƒ—

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฎแƒšแƒก

แƒฏแƒ”แƒ แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ™แƒ•แƒ˜แƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒแƒฅแƒ•แƒก. แƒ”แƒ แƒ— แƒ—แƒ•แƒ”แƒจแƒ˜ แƒ”แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜ แƒฃแƒคแƒ แƒ แƒกแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ - แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ“แƒฆแƒ”แƒก แƒ”แƒฅแƒœแƒ”แƒ‘แƒ แƒชแƒแƒšแƒ™แƒ” แƒกแƒ•แƒ”แƒขแƒ˜. แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒแƒ“แƒœแƒแƒ• แƒ’แƒแƒคแƒฃแƒญแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒ› แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ แƒ”แƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒฎแƒ”แƒšแƒ˜แƒ— แƒ•แƒฌแƒ”แƒ  (แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ“แƒ˜แƒ“แƒ˜ แƒกแƒ•แƒ”แƒขแƒ˜). แƒ“แƒ แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒ—แƒ”แƒšแƒ˜, แƒแƒ แƒแƒกแƒฌแƒแƒ แƒแƒ“ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒ•แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒ™แƒฃแƒ‘แƒ˜แƒ™แƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜, แƒ—แƒฃ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ firmware-แƒจแƒ˜ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒšแƒ˜แƒขแƒ แƒ˜ แƒแƒ  แƒ˜แƒงแƒ แƒ“แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ˜. แƒ›แƒ”แƒขแƒ˜ แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒ—แƒแƒ•แƒแƒ“ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ”แƒ‘แƒก แƒ›แƒแƒ˜แƒœแƒช แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒฆแƒแƒช แƒ›แƒแƒ’แƒ˜แƒ, แƒ’แƒแƒ—แƒ”แƒ—แƒ แƒ”แƒ‘แƒ, แƒจแƒ”แƒฆแƒ”แƒ‘แƒ•แƒ. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ, แƒ›แƒ” แƒแƒกแƒ”แƒ•แƒ” แƒแƒ•แƒแƒจแƒ”แƒœแƒ”แƒ‘ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— - แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒ˜แƒฅ แƒ แƒแƒฆแƒแƒช แƒ’แƒแƒŸแƒแƒœแƒแƒ•แƒก. แƒแƒšแƒ‘แƒแƒ— แƒ แƒแƒ’แƒแƒ แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒแƒฉแƒ”แƒœ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒ”แƒ‘แƒก, แƒ แƒแƒชแƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒ˜ แƒแƒ  แƒ˜แƒงแƒ. แƒฏแƒ”แƒ แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ— แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ”แƒ.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ“แƒฆแƒ”แƒก แƒฉแƒ”แƒ›แƒ˜ แƒ‘แƒ˜แƒœแƒ แƒชแƒแƒขแƒ แƒฃแƒคแƒ แƒ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ’แƒแƒฎแƒ“แƒ. แƒแƒกแƒ”แƒ—แƒ˜ แƒžแƒแƒขแƒแƒ แƒ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒฎแƒšแƒจแƒ˜ แƒฌแƒงแƒšแƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜. แƒ—แƒฃ แƒแƒ“แƒ แƒ” แƒ•แƒ‘แƒ แƒแƒ–แƒ“แƒ”แƒ‘แƒแƒ“แƒ˜ โ€žแƒ˜แƒกแƒ”แƒ•, แƒ”แƒ แƒ— แƒ—แƒ•แƒ”แƒจแƒ˜ แƒ‘แƒ”แƒ•แƒ  แƒฌแƒงแƒแƒšแƒก แƒ•แƒฎแƒ›แƒแƒ แƒแƒ‘แƒ“แƒ˜แƒ—โ€œ, แƒแƒฎแƒšแƒ แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒแƒ› แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒžแƒแƒ•แƒœแƒ.

แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฃแƒชแƒœแƒแƒฃแƒ แƒแƒ“ แƒ›แƒแƒ”แƒฉแƒ•แƒ”แƒœแƒแƒก แƒ”แƒ™แƒ แƒแƒœแƒ–แƒ” แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒงแƒฃแƒ แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ˜แƒก แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒกแƒ’แƒแƒœ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ— แƒแƒ แƒ˜แƒก แƒ“แƒแƒจแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒช แƒ—แƒฃ แƒ˜แƒกแƒ” แƒจแƒแƒ แƒ”แƒฃแƒš แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜, แƒ›แƒ” แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ• แƒกแƒฎแƒ•แƒ แƒ‘แƒ˜แƒœแƒแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒแƒก, แƒกแƒแƒ“แƒแƒช แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒงแƒšแƒ˜แƒก แƒแƒ›แƒฌแƒ” แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜, แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒ‘แƒ แƒกแƒแƒ“แƒ”แƒกแƒแƒœแƒขแƒแƒ–แƒ”. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ.

แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ• แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒแƒก. แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ•แƒฃแƒงแƒฃแƒ แƒ”แƒ‘ แƒ›แƒแƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒกแƒแƒ แƒฅแƒ•แƒ”แƒšแƒ”แƒ‘แƒก. แƒแƒฎแƒšแƒ, แƒฅแƒ•แƒแƒ‘แƒ˜แƒก แƒฅแƒแƒšแƒแƒฅแƒ˜แƒก แƒฌแƒงแƒแƒšแƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒแƒงแƒ•แƒแƒœแƒแƒ“, แƒซแƒœแƒ”แƒšแƒแƒ“ แƒ›แƒ˜แƒกแƒแƒ“แƒ’แƒแƒ› แƒœแƒ˜แƒจแƒจแƒ˜ 3 แƒแƒœแƒ™แƒแƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ‘แƒ แƒฃแƒœแƒ. แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒ—. แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฆแƒ˜แƒ แƒก แƒ“แƒแƒชแƒ•แƒ แƒ’แƒแƒŸแƒแƒœแƒ•แƒ˜แƒกแƒ’แƒแƒœ.

แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒ” แƒแƒฆแƒ•แƒฌแƒ”แƒ แƒ” แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒฉแƒ”แƒ›แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ ESP8266-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜. แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, แƒ›แƒ” แƒ›แƒแƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒ” แƒ›แƒ˜แƒ™แƒ แƒแƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก firmware-แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— - แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒกแƒแƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ. แƒจแƒ”แƒ•แƒ”แƒชแƒแƒ“แƒ” แƒแƒฆแƒ›แƒ”แƒฌแƒ”แƒ แƒ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒœแƒ˜แƒฃแƒแƒœแƒกแƒ˜ แƒ“แƒ แƒœแƒแƒ™แƒšแƒแƒ•แƒแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒช แƒจแƒ”แƒ›แƒฎแƒ•แƒ“แƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ˜แƒก แƒ“แƒ แƒแƒก. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒฆแƒ•แƒฌแƒ”แƒ แƒ”; แƒžแƒ˜แƒ แƒแƒ“แƒแƒ“, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒก, แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ˜ แƒœแƒ˜แƒ•แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ”แƒ‘แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒแƒ–แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒช แƒ“แƒแƒ แƒฉแƒ แƒฃแƒ—แƒฅแƒ›แƒ”แƒšแƒ˜.

แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ” แƒฆแƒ˜แƒ แƒ•แƒแƒ  แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒฃแƒšแƒ˜ แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ™แƒแƒ“แƒ˜แƒก แƒ™แƒแƒ“แƒ˜
แƒฉแƒแƒ แƒ—แƒ•แƒ แƒ“แƒ แƒ“แƒแƒคแƒ
แƒฅแƒ”แƒ˜แƒกแƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ