เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เป€เบกเบทเปˆเบญเบเปˆเบญเบ™, เบฅเบฐเบšเบปเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เป€เบฎเบทเบญเบ™, เบซเบผเบท "เป€เบฎเบทเบญเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ" เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเป€เบญเบตเป‰เบ™เป€เบฅเบทเป‰เบญเบเป†, เบกเบตเบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบเปเบฅเบฐเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ„เบปเบ™เบฎเบฑเปˆเบ‡เบกเบตเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบˆเปˆเบฒเบเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เปƒเบ™เบกเบทเป‰เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ•เบฐเบซเบผเบฒเบ”เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบŠเบธเบ”เบฅเบฒเบ„เบฒเบ–เบทเบเบ—เบตเปˆเบกเบตเป€เบŠเบฑเบ™เป€เบŠเบต, เบ›เบธเปˆเบก / เบชเบฐเบซเบผเบฑเบšเปเบฅเบฐเบ•เบปเบงเบเบฐเบ•เบธเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเปเบชเบ‡เบชเบฐเบซเบงเปˆเบฒเบ‡, เป€เบ•เบปเป‰เบฒเบชเบฝเบš, เบฅเบฐเบšเบฒเบเบญเบฒเบเบฒเบ”, เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบ™เป‰เปเบฒเปเบฅเบฐเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบญเบทเปˆเบ™เป†. เปเบฅเบฐเปเบกเป‰เปเบ•เปˆเบ„เบปเบ™ DIY เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป‚เบเบ”เปเบ„เป‰เบ™เบ—เบตเปˆเบชเบธเบ”เบเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™เบ„เบงเบฒเบกเบ‡เบฒเบกเปเบฅเบฐเบ›เบฐเบเบญเบšเบญเบธเบ›เบฐเบเบญเบ™เบชเปเบฒเบฅเบฑเบšเป€เบฎเบทเบญเบ™ smart เปƒเบ™เบฅเบฒเบ„เบฒเบ—เบตเปˆเบšเปเปˆเปเบžเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเปเบกเปˆเบ™เป€เบŠเบฑเบ™เป€เบŠเบตเบซเบผเบทเบ•เบปเบงเบเบฐเบ•เบธเป‰เบ™. เบžเบงเบเป€เบ‚เบปเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป€เบŠเบฑเปˆเบ™: "เป€เบกเบทเปˆเบญเป€เบŠเบฑเบ™เป€เบŠเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ–เบทเบเบเบฐเบ•เบธเป‰เบ™, เป€เบ›เบตเบ”เป„เบŸ" เบซเบผเบท "เบ›เบธเปˆเบกเบ—เบตเปˆเบขเบนเปˆเปƒเบเป‰เบเบฑเบšเบ—เบฒเบ‡เบญเบญเบเบˆเบฐเบ›เบดเบ”เป„เบŸเปƒเบ™เบญเบฒเบžเบฒเบ”เป€เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”." เปเบ•เปˆเบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบœเบปเบ™เบเบฑเบš telemetry. เบ”เบตเบ—เบตเปˆเบชเบธเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ‚เบญเบ‡เบญเบธเบ™เบซเบฐเบžเบนเบกเปเบฅเบฐเบ„เบงเบฒเบกเบŠเบธเปˆเบกเบŠเบทเปˆเบ™, เบซเบผเบทเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ—เบฑเบ™เบ—เบตเบขเบนเปˆเบ—เบตเปˆเป€เบ•เบปเป‰เบฒเบชเบฝเบšเบชเบฐเป€เบžเบฒเบฐ.

เบ‚เป‰เบญเบเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบ—เบตเปˆเบกเบตเบœเบปเบ™เบญเบญเบเบ‚เบญเบ‡เบเปเบฒเบกเบฐเบˆเบญเบ™. เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เบฅเบดเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบ, เบชเบฐเบซเบงเบดเบ” reed เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เปเบฅเบฐเบ›เบดเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆ. เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเป€เบซเบฅเบทเบญเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบกเปˆเบ™เบเบฒเบ™เบเบถเบ”เบ•เบดเบ”เบเบฑเบšเบชเบฒเบเป„เบŸเปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบเบกเบฑเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ™เป‰เปเบฒเป‚เบ”เบเบŠเบปเปˆเบงเป‚เบกเบ‡เปเบฅเบฐเบกเบทเป‰เบ‚เบญเบ‡เบญเบฒเบ—เบดเบ”. เบ”เบต, เบ–เป‰เบฒเบกเบตเบœเบนเป‰เป€เบžเบตเปˆเบกเบ™เป‰เปเบฒเบซเบผเบฒเบเบขเบนเปˆเปƒเบ™เบญเบฒเบžเบฒเบ”เป€เบกเบฑเบ™, เบกเบฑเบ™เบชเบฐเบ”เบงเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบซเบ™เป‰เบฒเบˆเปเบ”เบฝเบงเบเปˆเบงเบฒเบเบฒเบ™เบ›เบตเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ niches เบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ”เป‰เบงเบเป„เบŸเบชเบฒเบ.

เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเบฒเบ™เบ•เบฑเบ”เปเบกเปˆเบ™เบญเบธเบ›เบฐเบเบญเบ™เบฅเบธเป‰เบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ ESP8266, เป€เบŠเบดเปˆเบ‡เบ™เบฑเบš pulses เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเปเบฅเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบœเปˆเบฒเบ™ MQTT เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบฎเบทเบญเบ™ smart. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ micropython เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” uasyncio. เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบŸเบตเบกเปเบง, เบ‚เป‰เบญเบเบžเบปเบšเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เป„เบ›!

เป‚เบ„เบ‡เบเบฒเบ™

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบซเบปเบงเปƒเบˆเบ‚เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป‚เบกเบ”เบนเบ™เบขเบนเปˆเปƒเบ™ microcontroller ESP8266. ESP-12 เป„เบ”เป‰เบ–เบทเบเบงเบฒเบ‡เปเบœเบ™เป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™, เปเบ•เปˆเบฅเบฐเป€เบšเบตเบ”เบเบฑเบ‡เบ”เบดเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบกเบตเบ„เบงเบฒเบกเบžเปเปƒเบˆเบเบฑเบšเป‚เบกเบ”เบนเบ™ ESP-07, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰. เป‚เบŠเบเบ”เบต, เบžเบงเบเบกเบฑเบ™เบ„เบทเบเบฑเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบ”เป‰เบฒเบ™เบ‚เบญเบ‡ pins เปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เป€เบชเบปเบฒเบญเบฒเบเบฒเบ” - ESP-12 เบกเบตเบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ESP-07 เบกเบตเบžเบฒเบเบ™เบญเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเป€เบชเบปเบฒเบญเบฒเบเบฒเบ” WiFi, เบชเบฑเบ™เบเบฒเบ™เปƒเบ™เบซเป‰เบญเบ‡เบ™เป‰เปเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบšเบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด.

เบชเบฒเบเป„เบŸเป‚เบกเบ”เบนเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™:

  • เบ›เบธเปˆเบกเบฃเบตเป€เบŠเบฑเบ”เบ”เป‰เบงเบเบเบฒเบ™เบ”เบถเบ‡เบ‚เบถเป‰เบ™เปเบฅเบฐเบ•เบปเบงเป€เบเบฑเบšเบ›เบฐเบˆเบธ (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เบฑเบ‡เบชเบญเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™เปเบฅเป‰เบง)
  • เบชเบฑเบ™เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™ (CH_PD) เบ–เบทเบเบ”เบถเบ‡เบ‚เบถเป‰เบ™เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เป„เบŸ
  • GPIO15 เบ–เบทเบเบ”เบถเบ‡เบเบฑเบšเบžเบทเป‰เบ™เบ”เบดเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบเบฑเบšเบ‚เบฒเบ™เบตเป‰; เบ‚เป‰เบญเบเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบญเบตเบเบ•เปเปˆเป„เบ›

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เป‚เบกเบ”เบนเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบซเบกเบ”เป€เบŸเบตเบกเปเบง, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบงเบปเบ‡เบˆเบญเบ™เบชเบฑเป‰เบ™ GPIO2 เบเบฑเบšเบ”เบดเบ™, เปเบฅเบฐเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบชเบฐเบ”เบงเบเบเบงเปˆเบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบซเป‰เบ›เบธเปˆเบก Boot. เปƒเบ™เบชเบฐเบžเบฒเบšเบ›เบปเบเบเบฐเบ•เบด, pin เบ™เบตเป‰เบ–เบทเบเบ”เบถเบ‡เบเบฑเบšเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™.

เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบชเบฒเบ GPIO2 เป„เบ”เป‰เบ–เบทเบเบเบงเบ”เบเบฒเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ - เป€เบกเบทเปˆเบญเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบซเบผเบทเบ—เบฑเบ™เบ—เบตเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เปƒเบซเบกเปˆ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป‚เบกเบ”เบนเบ™เบˆเบฐเป€เบ›เบตเบ”เป€เบ„เบทเปˆเบญเบ‡เบ›เบปเบเบเบฐเบ•เบดเบซเบผเบทเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบซเบกเบ”เป€เบŸเบตเบกเปเบง. เป€เบกเบทเปˆเบญเป‚เบซเบฅเบ”เปเบฅเป‰เบง, PIN เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™ GPIO เบ›เบปเบเบเบฐเบ•เบด. เบ”เบต, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบ›เบธเปˆเบกเบขเบนเปˆเปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบšเบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฑเบšเบกเบฑเบ™.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปเบฅเบฐเบเบฒเบ™เบ”เบตเบšเบฑเบ, เบ‚เป‰เบญเบเบˆเบฐเปƒเบŠเป‰ UART, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เป„เบ›เบซเบฒ comb. เป€เบกเบทเปˆเบญเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบญเบฐเปเบ”เบšเป€เบ•เบต USB-UART เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเป‚เบกเบ”เบนเบ™เปเบกเปˆเบ™เบ‚เบฑเบšเป€เบ„เบทเปˆเบญเบ™เป‚เบ”เบ 3.3V. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบทเบกเบชเบฐเบซเบผเบฑเบšเบญเบฐเปเบ”เบšเป€เบ•เบตเบเบฑเบšเปเบฎเบ‡เบ”เบฑเบ™เบ™เบตเป‰เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡ 5V, เป‚เบกเบ”เบนเบ™เบˆเบฐเป€เบœเบปเบฒเป„เบซเบกเป‰เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”.

เบ‚เป‰เบญเบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบเบฑเบšเป„เบŸเบŸเป‰เบฒเปƒเบ™เบซเป‰เบญเบ‡เบ™เป‰เปเบฒ - เบ›เปˆเบฝเบ‡เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ›เบฐเบกเบฒเบ™เบซเบ™เบถเปˆเบ‡เปเบกเบฑเบ”เบˆเบฒเบเปเบกเบฑเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเปƒเบŠเป‰เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™ 220V. เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ เบšเบฅเบฑเบญเบ HLK-PM03 เป‚เบ”เบ Tenstar Robot. เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เป€เบญเป€เบฅเบฑเบเป‚เบ•เบฃเบ™เบดเบเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเปเบฅเบฐเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ.

เป€เบžเบทเปˆเบญเบชเบฑเบ™เบเบฒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบซเป‰ LED เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš GPIO2. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบเบปเบเป€เบฅเบตเบเบกเบฑเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒ ... เป‚เบกเบ”เบนเบ™ ESP-07 เบกเบตเป„เบŸ LED เปเบฅเป‰เบง, เปเบฅเบฐเบกเบฑเบ™เบเบฑเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš GPIO2. เปเบ•เปˆเปƒเบซเป‰เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบเบฐเบ”เบฒเบ™, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเบญเบ LED เบ™เบตเป‰เปƒเบซเป‰เบเบฑเบšเบเปเบฅเบฐเบ™เบต.

เบ‚เปเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบชเปˆเบงเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบธเบ”. เป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เบ™เป‰เปเบฒเบšเปเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™; เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เปเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบญเปˆเบฒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบกเบตเบขเบนเปˆเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™ impulses - เบ›เบดเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเบ‚เบญเบ‡ reed switch เบ—เบธเบเบฅเบดเบ”. เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเบฐเบงเบดเบ” Reed เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš GPIO12/GPIO13. เบ‚เป‰เบญเบเบˆเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เบ•เบปเบงเบ•เป‰เบฒเบ™เบ—เบฒเบ™เปเบšเบšเบ”เบถเบ‡เบ‚เบถเป‰เบ™เบ”เป‰เบงเบเป‚เบ›เบฃเปเบเบฃเบกเบžเบฒเบเปƒเบ™เป‚เบกเบ”เบนเบ™.

เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบฅเบทเบกเบชเบฐเบซเบ™เบญเบ‡เบ•เบปเบงเบ•เป‰เบฒเบ™เบ—เบฒเบ™ R8 เปเบฅเบฐ R9 เปเบฅเบฐเบเบฐเบ”เบฒเบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเปเปˆเบกเบตเบžเบงเบเบกเบฑเบ™. เปเบ•เปˆเบเป‰เบญเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เบ‚เบฝเบ™เปเบœเบ™เบงเบฒเบ”เปƒเบซเป‰เบ—เบธเบเบ„เบปเบ™เป€เบšเบดเปˆเบ‡เปเบฅเป‰เบง, เบกเบฑเบ™เบชเบปเบกเบ„เบงเบ™เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบเบฒเบ™เบเบงเบ”เบเบฒเบ™เบตเป‰. Resistors เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เป„เบŸเป„เบซเบกเป‰เบžเบญเบ”เบ–เป‰เบฒเป€เบŸเบตเบกเปเบงเบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบดเปเบฅเบฐเบ•เบฑเป‰เบ‡ pin เป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐ reed เบ›เปˆเบฝเบ™เบชเบฒเบเบ™เบตเป‰เบเบฑเบšเบ”เบดเบ™ (เบเบฑเบš resistor เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡ 3.3V / 1000Ohm = 3.3mA เบˆเบฐเป„เบซเบผ).

เบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบ–เป‰เบฒเป„เบŸเบŸเป‰เบฒเบซเบกเบปเบ”. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบกเบนเบ™เบ„เปˆเบฒ counter เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เปเบ•เปˆเบ™เบตเป‰เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบดเบ”เป„เบŸ (เบซเบผเบทเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡), เป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฎเป‰เบญเบ‡เบ‚เปเบ„เปˆเบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒ counter เปƒเบ™เบŠเบดเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ I2C. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบžเบดโ€‹เป€เบชเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบซเบ™เปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒ flash - เบ—เปˆเบฒเบ™โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบขเบฑเบ” 2 เบ•เบปเบงโ€‹เป€เบฅเบ (เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบฅเบดเบ”โ€‹เบ•เบฒเบกโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบงเบฑเบ”โ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒโ€‹เบฎเป‰เบญเบ™โ€‹เปเบฅเบฐโ€‹เป€เบขเบฑเบ™โ€‹)โ€‹. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป‚เบกเบ”เบนเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบˆเบฐเป€เบฎเบฑเบ”. เปเบ•เปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบฎเบญเบšเบงเบฝเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ. เบชเปเบฒเบฅเบฑเบšเป‚เบกเบ”เบนเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ™เบตเป‰เปเบกเปˆเบ™ 100 เบžเบฑเบ™เบฎเบญเบš, เบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เป€เบ–เบดเบ‡เบฅเป‰เบฒเบ™.

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบฅเป‰เบฒเบ™เปเบกเปˆเบ™เบซเบผเบฒเบ. เปเบ•เปˆโ€‹เปƒเบ™โ€‹เป„เบฅเบเบฐ 4 เบ›เบตโ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบญเบฒโ€‹เบžเบฒเบ”โ€‹เป€เบกเบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒ, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เปƒเบŠเป‰โ€‹เบ™เป‰เบณโ€‹เบซเบผเบฒเบโ€‹เบเบงเปˆเบฒ 500 เปเบกเบฑเบ”โ€‹เบเป‰เบญเบ™, เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™ 500 เบžเบฑเบ™โ€‹เบฅเบดเบ”! เปเบฅเบฐ 500 เบžเบฑเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ™ flash. เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ™เป‰เปเบฒเป€เบขเบฑเบ™. เปเบ™เปˆเบ™เบญเบ™, เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ‚เบฒเบเบŠเบดเบšเป„เบ”เป‰เบ—เบธเบเป†เบชเบญเบ‡เบชเบฒเบกเบ›เบต, เปเบ•เปˆเบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒเบกเบตเบŠเบดเบš FRAM. เบˆเบฒเบเบกเบธเบกเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก, เบ™เบตเป‰เปเบกเปˆเบ™ I2C EEPROM เบ”เบฝเบงเบเบฑเบ™, เบžเบฝเบ‡เปเบ•เปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบฎเบญเบšเบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเบซเบผเบฒเบ (เบซเบผเบฒเบเบฎเป‰เบญเบเบฅเป‰เบฒเบ™). เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเบ‚เป‰เบญเบเบเบฑเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เป„เบ›เบฎเป‰เบฒเบ™เป„เบ”เป‰เบ”เป‰เบงเบ microcircuits เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ 24LC512 เบ›เบปเบเบเบฐเบ•เบดเบˆเบฐเบขเบทเบ™เบขเบนเปˆ.

เปเบœเปˆเบ™เบงเบปเบ‡เบˆเบญเบ™เบžเบดเบก

เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฐเบ”เบฒเบ™เบขเบนเปˆเป€เบฎเบทเบญเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฐเบ”เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเป€เบ›เบฑเบ™เบ”เป‰เบฒเบ™เบ”เบฝเบง. เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เบเบฑเบšเป€เบซเบฅเปเบเป€เบฅเป€เบŠเบตเปเบฅเบฐเบซเบ™เป‰เบฒเบเบฒเบ solder (เบกเบฑเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบšเปเปˆเบกเบตเบกเบฑเบ™), เบ‚เป‰เบญเบเบเบฑเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบชเบฑเปˆเบ‡เบเบฐเบ”เบฒเบ™เบˆเบฒเบเบˆเบตเบ™.

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เป€เบเบทเบญเบšเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบฑเปˆเบ‡เบเบฐเบ”เบฒเบ™, เบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒเบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบŠเบดเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ flash, เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฑเบšเบฅเบปเบ”เป€เบก I2C, เป€เบŠเบฑเปˆเบ™: เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™. เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเบˆเบฐเบญเบญเบเป„เบ›เบซเบฒเบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบ„เปเบฒเบ–เบฒเบก, เปเบ•เปˆเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบ™เปเบฒเป„เบ›เบขเบนเปˆเปƒเบ™เบเบฐเบ”เบฒเบ™. เปเบฅเป‰เบง, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเบชเบฑเปˆเบ‡เบเบฐเบ”เบฒเบ™เบˆเบฒเบเป‚เบฎเบ‡เบ‡เบฒเบ™, เบกเบฑเบ™เบšเปเปˆเบกเบตเบˆเบธเบ”เปƒเบ”เบ—เบตเปˆเบˆเบฐเบˆเปเบฒเบเบฑเบ”เบ•เบปเบงเป€เบญเบ‡เบเบฑเบšเบเบฐเบ”เบฒเบ™เบ”เป‰เบฒเบ™เบ”เบฝเบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเบฒเบ I2C เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™.

เบเบฑเบ‡เบกเบตเบšเบฑเบ™เบซเบฒเปƒเบซเบเปˆเบญเบฑเบ™เปœเบถเปˆเบ‡เบเบฑเบšเบชเบฒเบเป„เบŸเบ—เบฒเบ‡เบ”เบฝเบง. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เบเบฐเบ”เบฒเบ™เป„เบ”เป‰เบ–เบทเบเปเบ•เป‰เบกเป€เบ›เบฑเบ™เบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบš SMD เป„เบ”เป‰เบ–เบทเบเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบงเบฒเบ‡เป„เบงเป‰เบ‚เป‰เบฒเบ‡เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบขเบนเปˆเปƒเบ™เบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡. เป€เบกเบทเปˆเบญเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฐเบ”เบฒเบ™เบซเบ™เบถเปˆเบ‡เป€เบ”เบทเบญเบ™เบ•เปเปˆเบกเบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบฅเบทเบกเบเปˆเบฝเบงเบเบฑเบšเปเบœเบ™เบเบฒเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปเบฅเบฐ soldered เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบขเบนเปˆเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ. เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบกเบฒเบเบฑเบš soldering เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™, เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบšเบงเบเปเบฅเบฐเบฅเบปเบšเป„เบ”เป‰เบ–เบทเบเบชเบฒเบเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™. เบ‚เป‰เบฒ เบžเบฐ เป€เบˆเบปเป‰เบฒ เป„เบ”เป‰ เบเบฐ เบชเบด เบเปเบฒ เบเบฑเบš jumpers. เปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เปˆเบฝเบ™เบชเบฒเบเป„เบŸเปเบฅเป‰เบง, เปเบ•เปˆเบ”เบดเบ™เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™เป„เบ›เบซเบฒเบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™ pins เบ‚เบญเบ‡เบ›เบธเปˆเบก Boot (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปเบ•เป‰เบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบ™เบŠเบฑเป‰เบ™เบ—เบตเบชเบญเบ‡).

เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบ—เบตเปˆเบขเบนเปˆเบญเบฒเป„เบช

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบฎเปˆเบฒเบ‡เบเบฒเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบžเบดเบก 3D, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒ. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบšเบทเปˆเบญโ€‹เบซเบผเบฒเบโ€‹เป€เบเบตเบ™โ€‹เป„เบ› - เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เปเบ•เป‰เบกโ€‹เบเปˆเบญเบ‡โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ—เบตเปˆโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹เปเบฅเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบ•เบฑเบ”โ€‹เบญเบญเบโ€‹เปƒเบ™โ€‹เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹. เบเบฒเบ™เบ›เบปเบเบซเบธเป‰เบกเบ‚เบญเบ‡เปเบกเปˆเบ™เบ•เบดเบ”เบเบฑเบšเบฎเปˆเบฒเบ‡เบเบฒเบเบ”เป‰เบงเบ screws เปเบ•เบฐเบ•เบปเบ™เป€เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ.

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบ‚เป‰เบญเบเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบงเบงเปˆเบฒเบ›เบธเปˆเบก Boot เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบ›เบธเปˆเบกเบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบปเปˆเบงเป„เบ› - เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เปเบ–เบšเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปเบ•เป‰เบก "เบ”เบต" เบžเบดเป€เบชเบ”เบ—เบตเปˆเบ›เบธเปˆเบกเบขเบนเปˆ.

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบžเบฒเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบเบฑเบ‡เบกเบต studs เบ—เบตเปˆเบเบฐเบ”เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ”เป‰เบงเบ screw M3 เบ”เบฝเบง (เบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบเบฐเบ”เบฒเบ™)

เบ‚เป‰เบญเบเป€เบฅเบทเบญเบเบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เปเบฅเป‰เบงเป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบžเบดเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเปเบฅเบฐเบ™เบต. เป€เบ„เบทเปˆเบญเบ‡เบญเปˆเบฒเบ™เบชเบญเบ‡เปเบ–เบงเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เปเบ•เปˆเบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบกเบกเบตเบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™ OLED SSD1306 128 ร— 32. เบกเบฑเบ™เบ™เป‰เบญเบ, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เบกเบฑเบ™เบ—เบธเบเป†เบกเบทเป‰ - เบกเบฑเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ.

เบเบฒเบ™เบ„เบดเบ”เบญเบญเบเบ—เบฒเบ‡เบ™เบตเป‰เปเบฅเบฐเบงเปˆเบฒเบชเบฒเบเป„เบŸเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบˆเบฒเบเบกเบฑเบ™เปเบ™เบงเปƒเบ”, เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ•เบดเบ”เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบขเบนเปˆเป€เบ„เบดเปˆเบ‡เบเบฒเบ‡เบ‚เบญเบ‡เบเปเบฅเบฐเบ™เบต. Ergonomics, เปเบ™เปˆเบ™เบญเบ™, เปเบกเปˆเบ™เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบก - เบ›เบธเปˆเบกเบขเบนเปˆเป€เบ—เบดเบ‡, เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เปเบกเปˆเบ™เบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบก. เปเบ•เปˆเบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเปเบฅเป‰เบงเบงเปˆเบฒเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบกเบฒเบŠเป‰เบฒเป€เบเบตเบ™เป„เบ›เปเบฅเบฐเบ‚เป‰เบญเบเบเปเปˆเบ‚เบตเป‰เบเบฝเบ”เป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐ rewire เบเบฐเบ”เบฒเบ™เป€เบžเบทเปˆเบญเบเป‰เบฒเบเบ›เบธเปˆเบก.

เบญเบธเบ›เบฐเบเบญเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบญเบš. เป‚เบกเบ”เบนเบ™เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เปเบกเปˆเบ™เบ•เบดเบ”เบเบฑเบš snot เบ”เป‰เบงเบเบเบฒเบงเบฎเป‰เบญเบ™

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™ KDPV

Firmware

เปƒเบซเป‰เบเป‰เบฒเบเป„เบ›เบซเบฒเบžเบฒเบเบชเปˆเบงเบ™เบŠเบญเบšเปเบง. เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบซเบฑเบ”เบ–เบฐเบเปเบฒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰, เบ‚เป‰เบญเบเบกเบฑเบเปƒเบŠเป‰ Python (micropython) - เบฅเบฐเบซเบฑเบ” turns เบญเบญเบเบˆเบฐเบซเบ™เบฒเปเบซเบ™เป‰เบ™เบซเบผเบฒเบเปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰. เป‚เบŠเบเบ”เบต, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบปเบ‡เป„เบ›เบซเบฒเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป€เบžเบทเปˆเบญเบšเบตเบš microseconds - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบˆเบฒเบ Python.

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ - เบญเบธเบ›เบฐเบเบญเบ™เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบญเบเบฐเบฅเบฒเบ”เบซเบผเบฒเบ:

  • เบœเบนเป‰เปƒเบŠเป‰เบเบปเบ”เบ›เบธเปˆเบกเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™
  • เบฅเบดเบ”เบซเบกเบฒเบเบ•เบดเบเปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ„เปˆเบฒเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ flash
  • เป‚เบกเบ”เบนเบ™เบˆเบฐเบ•เบดเบ”เบ•เบฒเบกเบชเบฑเบ™เบเบฒเบ™ WiFi เปเบฅเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ„เบทเบ™เปƒเปเปˆเบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™
  • เปเบฅเป‰เบง, เบ–เป‰เบฒเบšเปเปˆเบกเบตเบซเบฅเบญเบ”เป„เบŸเบเบฐเบžเบดเบš, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰

เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเบปเบกโ€‹เบกเบธเบ”โ€‹เบงเปˆเบฒโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบญเบตเบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปเบกเปˆเบ™ stuck เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹. เบ‚เป‰เบญเบเป€เบ„เบตเบเบกเบต cacti เบ‚เบญเบ‡เบ‚เป‰เบญเบเบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป†เปเบฅเป‰เบงเปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบเบฑเบ‡เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบšเบปเบเบœเปˆเบญเบ‡เปƒเบ™เปเบšเบšเบ‚เบญเบ‡ "เบžเบฒเบ”เป„เบ›เบญเบตเบเบฅเบดเบ”เบซเบ™เบถเปˆเบ‡เป€เบžเบฒเบฐเบงเปˆเบฒเบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบเปเบฒเบฅเบฑเบ‡เบ›เบฑเบšเบ›เบธเบ‡เปƒเบ™เบ‚เบฐเบ™เบฐเบ™เบฑเป‰เบ™" เบซเบผเบท "เบœเบนเป‰เปƒเบŠเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป‚เบกเบ”เบนเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš. WiFi.โ€ เปเบ™เปˆเบ™เบญเบ™, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡, เปเบ•เปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเป„เบฅเบเบฐเป€เบงเบฅเบฒ, เบฎเบฑเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—, เบซเบผเบทเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเบเบฑเบšเบ•เบปเบงเปเบ›. เบ”เบต, เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ mush.

ะ’ เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ เบ‚เป‰เบญเบเปƒเบŠเป‰ multitasking preemptive classic เปเบฅเบฐ FreeRTOS, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบ•เบปเบงเปเบšเบšเป„เบ”เป‰เบเบฒเบเบกเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบซเบผเบฒเบ. coroutines เปเบฅเบฐ uasync libraries . เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” Python เบ‚เบญเบ‡ coroutines เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ›เบฐเบฅเบฒเบ” - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก. เบžเบฝเบ‡เปเบ•เปˆเบ‚เบฝเบ™เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เบžเบฝเบ‡เปเบ•เปˆเบšเบญเบเบ‚เป‰เบญเบเบงเปˆเบฒเบšเปˆเบญเบ™เปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบฒเบเบ™เป‰เปเบฒ.

เบ‚เป‰เบญเบเบ‚เปเปเบ™เบฐ เบ™เบณ เปƒเบซเป‰เบชเบถเบเบชเบฒเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบงเบฝเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบฅเปˆเบงเบ‡เปœเป‰เบฒ เปเบฅเบฐ เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบซเบผเบฒเบเปœเป‰เบฒเป€เบ›เบฑเบ™เบงเบดเบŠเบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบ. เบ”เบฝเบงเบ™เบตเป‰, เบชเบธเบ”เบ—เป‰เบฒเบเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบฅเบฐเบซเบฑเบ”.

#####################################
# 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 เปเบกเปˆเบ™เบˆเบฑเบ”เบเบฒเบ™เป‚เบ”เบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ Counter class. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบนเบ™เบ„เปˆเบฒ counter เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบกเปˆเบ™เบซเบฑเบเบญเบญเบเบˆเบฒเบ EEPROM (value_storage) - เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ‚เบญเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

pin เป„เบ”เป‰เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบ”เบถเบ‡เบ‚เบถเป‰เบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™: เบ–เป‰เบฒเบ›เบดเบ” reed, เบชเบฒเบเปเบกเปˆเบ™เบชเบนเบ™, เบ–เป‰เบฒเบชเบฒเบเปเบกเปˆเบ™เป€เบ›เบตเบ”, เบกเบฑเบ™เบ–เบทเบเบ”เบถเบ‡เบ‚เบถเป‰เบ™เป„เบ›เบซเบฒเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เปเบฅเบฐเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบญเปˆเบฒเบ™เบซเบ™เบถเปˆเบ‡.

เบงเบฝเบเบ‡เบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบเบฑเบ‡เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบชเปเบฒเบซเบผเบงเบ” pin. เปเบ•เปˆเบฅเบฐ counter เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ™เบฒเบ‡

    """ 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)

เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบ‚เบญเบ‡ 25ms เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆ bounce, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบกเบฑเบ™เบ„เบงเบšเบ„เบธเบกเบงเปˆเบฒเบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบ•เบทเปˆเบ™เบ™เบญเบ™เป€เบฅเบทเป‰เบญเบเป† (เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰เบเปเบฒเบฅเบฑเบ‡เบ™เบญเบ™, เบงเบฝเบเบญเบทเปˆเบ™เป†เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ). เบ—เบธเบเป† 25ms เบŸเบฑเบ‡เบŠเบฑเบ™เบ•เบทเปˆเบ™เบ‚เบถเป‰เบ™, เบเบงเบ”เป€เบšเบดเปˆเบ‡ pin เปเบฅเบฐเบ–เป‰เบฒ reed switch contacts เบ›เบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบตเบเบฅเบดเบ”เป„เบ”เป‰เบœเปˆเบฒเบ™เปเบกเบฑเบ”เปเบฅเบฐเบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡.

    def _another_litre_passed(self):
        self._value += 1
        self._value_changed = True

        self._value_storage.write(self._value)

เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบฅเบดเบ”เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป† - เบ•เบปเบงเบ•เป‰เบฒเบ™เบ—เบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™. เบ”เบต, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบ„เปˆเบฒเปƒเบซเบกเปˆเปƒเบชเปˆ flash drive.

เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, "เบญเบธเบ›เบฐเบเบญเบ™เป€เบชเบตเบก" เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰

    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. เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบขเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบเบฒเบ™เป‚เบ—เบชเบฒเบกเบฒเบ”เบ™เบญเบ™เบซเบฅเบฑเบšเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป‚เบ—เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เปเบฅเบฐเบ™เบญเบ™เบˆเบปเบ™เบเปˆเบงเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเปƒเบซเบกเปˆ.

เปเบกเปˆเบ™เบซเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡?เปเบกเปˆเบ™เปเบฅเป‰เบง, เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” troll เบ‚เป‰เบญเบ, เป‚เบ”เบเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ•เบปเบงเป€เบˆเบปเป‰เบฒเป€เบญเบ‡เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เปเบฅเป‰เบงเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เปเบšเบšเบชเปเบฒเบซเบผเบงเบ” pin stupid. เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบก. เปƒเบ™ ESP8266, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบงเบฒเบ‡ edge interrupt, เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบ‚เบฝเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ™เบตเป‰เปƒเบ™ Python. เปƒเบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ™เบตเป‰, เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ›เบธเบ‡เป„เบ”เป‰. เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบžเบฝเบ‡เบžเปเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ counter เป€เบ›เบฑเบ™เบญเบธเบ›เบฐเบเบญเบ™เบชเปเบฒเบฅเบญเบ‡ - เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบฅเปเบ–เป‰เบฒเบˆเบปเบ™เบเปˆเบงเบฒเบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบกเบตเบ„เปˆเบฒเบ™เบตเป‰.

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ (เบซเบผเบทเป‚เบŠเบเบ”เบต?) เบญเบธเบ›เบฐเบเบญเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ, เบกเบฑเบ™เบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบœเปˆเบฒเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™ MQTT เปเบฅเบฐเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ EEPROM. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เป€เบ‚เบปเป‰เบฒเบกเบฒ - เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปเบฅเบฐเปƒเบŠเป‰ stack เปƒเบซเบเปˆ, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบทเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบกเบต buns เป€เบŠเบฑเปˆเบ™ micropython.schedule() เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ "เป„เบงเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰," เปเบ•เปˆเบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™, "เปเบกเปˆเบ™เบซเบเบฑเบ‡เบ„เบทเบˆเบธเบ”?" เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เป€เบ‚เบปเป‰เบฒเบกเบฒเปเบฅเบฐ spoils เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›. เบซเบผเบทเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ„เปˆเบฒ counter เปƒเปเปˆเบกเบฒเบฎเบญเบ”เบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบตเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ‚เบฝเบ™เบฅเบปเบ‡เบญเบฑเบ™เป€เบเบปเปˆเบฒ. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบดเบ”เบเบฒเบ™ synchronization เบซเบผเบทเบญเบญเบเบˆเบฒเบเบกเบฑเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เปเบฅเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡ RuntimeError: เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ stack crash เป€เบ•เบฑเบกเปเบฅเบฐเปƒเบœเบฎเบนเป‰เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡?

เบ”เป‰เบงเบเบเบฒเบ™เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐ uasync, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ™เบตเป‰ somehow turns out เบ‡เบฒเบกเปเบฅเบฐเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ™เปเบฒเป€เบญเบปเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš 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)

เปƒเบ™ Python, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบเบปเบ‡เบเบฑเบš bytes, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™ bytes เบ—เบตเปˆเบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบฎเบปเป‰เบงเบเบฒเบ™เปเบ›เบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเปเบฅเบฐ bytes เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” 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. เบ”เบต, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡ - เบ‚เป‰เบญเบเบžเบปเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ” เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” asynchronous เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบก. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰.

เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบฅเบงเบšเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™ CounterMQTTClient, เป€เบŠเบดเปˆเบ‡เบญเบตเบ‡เปƒเบชเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” MQTTClient. เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบ periphery เป„เบ”เป‰

#####################################
# 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))

เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เปเบฅเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒ pins bulb เปเบชเบ‡เบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ›เบธเปˆเบก, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบงเบฑเบ”เบ–เบธเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เบ™เป‰เปเบฒเป€เบขเบฑเบ™เปเบฅเบฐเบฎเป‰เบญเบ™.

เบ”เป‰เบงเบเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ

    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. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบšเปเปˆเบชเบปเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš rivet เบซเบผเบฒเบเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบšเบฅเบฑเบญเบเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ coroutines เบซเบผเบฒเบเป€เบžเบทเปˆเบญเบฎเบฑเบšเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™ coroutine เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™ counters

    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))

coroutine เบฅเปเบ–เป‰เบฒเบขเบนเปˆเปƒเบ™ loop เบชเปเบฒเบฅเบฑเบšเบกเบนเบ™เบ„เปˆเบฒ counter เปƒเบซเบกเปˆเปเบฅเบฐ, เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบกเบฑเบ™เบ›เบฒเบเบปเบ”, เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบœเปˆเบฒเบ™ MQTT protocol. เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบชเบปเปˆเบ‡เบกเบนเบ™เบ„เปˆเบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบ™เป‰เปเบฒเป„เบซเบผเบœเปˆเบฒเบ™เป€เบ„เบปเบฒเป€เบ•เบต.

เบซเป‰เบญเบ‡เบฎเบฝเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™ 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)

เบŸเบฑเบ‡เบŠเบฑเบ™เบ–เบทเบเบ„เบฑเบ”เบฅเบญเบเบขเปˆเบฒเบ‡เบŠเบทเปˆเบชเบฑเบ”เบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบกเบฑเบ™เบ™เบฑเบšเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบขเบธเบ” (internet_outages) เปเบฅเบฐเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เป€เบกเบทเปˆเบญเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ–เบทเบเบŸเบทเป‰เบ™เบŸเบน, เป€เบงเบฅเบฒเบซเบงเปˆเบฒเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบเบฒเบ™เบ™เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบšเปเปˆเบเบปเบ‡เบเบฑเบ™ - เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบœเปˆเบฒเบ™เบ—เบฒเบ‡เบฅเปเบ–เป‰เบฒ, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบเบกเบตเบ•เบปเบงเบฅเปเบ–เป‰เบฒเบญเบทเปˆเบ™เบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เป„เบ”เป‰.

เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ 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")

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เป‰เบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบชเบฐเบ”เบงเบเบ—เบตเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก debugging.

    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 เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆ pampering. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เปเบ™เปƒเบชเปˆเบเบฒเบ™เบชเบฐเปเบ”เบ‡.

    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)

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš - เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบเบฑเบš coroutines. เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เป‰เบญเบเป†เบ™เบตเป‰เบญเบฐเบ—เบดเบšเบฒเบเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ—เบฑเบ‡เปเบปเบ”. coroutine เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบฅเปโ€‹เบ–เป‰เบฒโ€‹เปƒเบซเป‰โ€‹เบ›เบธเปˆเบกโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบเบปเบ”โ€‹เบ”เบฑเบ™โ€‹เปเบฅเบฐโ€‹เป€เบ›เบตเบ”โ€‹เบซเบ™เป‰เบฒโ€‹เบˆเปโ€‹เบชเปเบฒโ€‹เบฅเบฑเบš 3 เบงเบดโ€‹เบ™เบฒโ€‹เบ—เบตโ€‹. เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เปเบกเบฑเบ”เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.

เบเบฑเบ‡โ€‹เบกเบตโ€‹เบšเบฒเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เป€เบฅเบฑเบโ€‹เบ™เป‰เบญเบโ€‹เบเบฑเบ‡โ€‹เป€เบซเบผเบทเบญโ€‹. เบ™เบตเป‰เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ (re) เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบงเบดเบชเบฒเบซเบฐเบเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰. loop เบ•เบปเป‰เบ™เบ•เปเบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ debugging เบ•เปˆเบฒเบ‡เป†เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบ™เบฒเบ—เบต. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบญเป‰เบฒเบ‡เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ - เบ‚เป‰เบญเบเบšเปเปˆเบ„เบดเบ”เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเปเบ”เบ‡เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›

   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 utility - เบกเบฑเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบฑเบšเป‚เบซเบฅเบ”เบžเบงเบเบกเบฑเบ™เปƒเบชเปˆเบžเบฒเบเปƒเบ™ (เบซเบ™เบถเปˆเบ‡เปƒเบ™ ESP-07 เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡) flash drive เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบกเบฑเบ™เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ›เบปเบเบเบฐเบ•เบด. เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบเบฑเบ‡เป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ” mqtt_as, uasyncio, ssd1306 เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰ (เปƒเบŠเป‰เบžเบฒเบเปƒเบ™ mqtt_as).

เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเปเบฅเบฐ ... เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš MemoryError. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบซเบผเบฒเบเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฐเบเบฒเบเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเปˆเบญเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเป„เบ”เป‰เบฎเบปเปˆเบงเป„เบซเบฅ, เบเบฒเบ™เบžเบดเบก debug เบซเบผเบฒเบเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบงเบฒเบ‡เป„เบงเป‰, เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ™เบตเป‰เบ›เบฒเบเบปเบ”เบ‚เบถเป‰เบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰. เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ Google เบชเบฑเป‰เบ™เป†เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒ microcontroller เบกเบต, เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบžเบฝเบ‡เปเบ•เปˆ 30 kB เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เป€เบŠเบดเปˆเบ‡ 65 kB เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” (เบฅเบงเบกเบ—เบฑเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”) เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบซเบกเบฒเบฐ.

เปเบ•เปˆเบกเบตเบ—เบฒเบ‡เบญเบญเบ. เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒ micropython เบšเปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเป„เบŸเบฅเปŒ .py - เป„เบŸเบฅเปŒเบ™เบตเป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบเปˆเบญเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบเบปเบ‡เปƒเบ™ microcontroller, เบเบฒเบเป€เบ›เบฑเบ™ bytecode, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ”เบต, เป€เบžเบทเปˆเบญเปƒเบซเป‰ compiler เป€เบฎเบฑเบ”เบงเบฝเบ, เบ—เปˆเบฒเบ™เบเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ RAM เบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.

เป€เบ„เบฑเบ”เบฅเบฑเบšเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ” microcontroller เบˆเบฒเบเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบฒเบ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบงเบšเบฅเบงเบกเป„เบŸเบฅเปŒเปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบฅเบฐเบญเบฑเบšเป‚เบซเบฅเบ” bytecode เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบฅเป‰เบงเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ microcontroller. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ”เบฒเบงเป‚เบซเบฅเบ” firmware micropython เปเบฅเบฐเบชเป‰เบฒเบ‡ mpy-cross utility.

เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบ‚เบฝเบ™ Makefile, เปเบ•เปˆเบ•เบปเบ™เป€เบญเบ‡เป„เบ”เป‰เบœเปˆเบฒเบ™เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเป„เบŸเบฅเปŒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” (เบฅเบงเบกเบ—เบฑเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”) เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰.

mpy-cross water_counter.py

เบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบ™เบฒเบกเบชเบฐเบเบธเบ™ .mpy, เบขเปˆเบฒเบฅเบทเบกเบฅเบถเบš .py เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบญเบญเบเบˆเบฒเบเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบเปˆเบญเบ™.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ (IDE?) ESPlorer. เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบฑเบšเป‚เบซเบฅเบ” scripts เบเบฑเบš microcontroller เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ—เบฑเบ™เบ—เบต. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เป€เบซเบ”เบœเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ water_counter.py (.mpy). เปเบ•เปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เบฑเบ‡เปเบปเบ”เบ™เบตเป‰เป€เบฅเบตเปˆเบกเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ•เป‰เบญเบ‡เบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ main.py เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ .py เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเปˆเบญเบ™ .mpy. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ™เบทเป‰เบญเปƒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบ‚เบญเบ‡เบกเบฑเบ™

import water_counter

เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™ - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ. เปเบ•เปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเปเบกเปˆเบ™เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบซเบ™เป‰เบฒเบ•เบปเบเปƒเบˆ - เบ›เบฐเบกเบฒเบ™ 1kb. เบ‚เป‰เบญเบเบเบฑเบ‡เบกเบตเปเบœเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™, เปเบฅเบฐเบเบดเป‚เบฅเป„เบšเบ™เบตเป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบšเปเปˆเบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ. เปเบ•เปˆเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบกเบตเบ—เบฒเบ‡เบญเบญเบเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบ„เบทเบเบฑเบ™.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป„เบŸเบฅเปŒเบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ bytecode เปเบฅเบฐเบญเบฒเป„เบชเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบžเบฒเบเปƒเบ™, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบžเบงเบเบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ RAM เปเบฅเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™. เปเบ•เปˆเบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒ micropython เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ” bytecode เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ flash, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบกเบฑเบ™เป‚เบ”เบเบเบปเบ‡เปƒเบ™ firmware. เบกเบฑเบ™เบšเปเปˆเบเบฒเบ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™ netbook เบ‚เบญเบ‡เบ‚เป‰เบญเบ (เบžเบฝเบ‡เปเบ•เปˆเบ‚เป‰เบญเบเบกเบต Linux).

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบกเบตเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

  • เบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡ ESP เป€เบ›เบตเบ” SDK. เบชเบดเปˆเบ‡เบ™เบตเป‰เบ›เบฐเบเบญเบš compiler เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš ESP8266. เบ›เบฐโ€‹เบเบญเบšโ€‹เบ•เบฒเบกโ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒโ€‹เปƒเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™ (เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป€เบฅเบทเบญเบโ€‹เป€เบญเบปเบฒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ STANDALONE = เปเบกเปˆเบ™โ€‹เปเบฅเป‰เบงโ€‹)
  • เบ”เบฒเบงเป‚เบซเบฅเบ” micropython เบ›เบฐเป€เบžเบ”
  • เบงเบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบžเบญเบ” / esp8266 / เป‚เบกเบ”เบนเบ™เบžเบฒเบเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰ micropython
  • เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบเบญเบšเป€เบŸเบตเบกเปเบงเบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ™เป„เบŸเบฅเปŒ ports/esp8266/README.md
  • เบžเบงเบเป€เบฎเบปเบฒเบญเบฑเบšเป‚เบซเบฅเบ”เป€เบŸเบตเบกเปเบงเปƒเบชเปˆ microcontroller (เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เปƒเบ™ Windows เป‚เบ”เบเปƒเบŠเป‰เป‚เบ›เบฃเปเบเบฃเบก ESP8266Flasher เบซเบผเบท Python esptool)

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบญเบ™เบ™เบตเป‰ 'เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ ssd1306' เบˆเบฐเบเบปเบเบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเป€เบŸเบตเบกเปเบงเปเบฅเบฐ RAM เบˆเบฐเบšเปเปˆเบ–เบทเบเบšเปเบฅเบดเป‚เบžเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰. เบ”เป‰เบงเบ trick เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ”เบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ firmware, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบฒเบเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฑเบ”เปเบ›เบ‡เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ recompiling firmware. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเบ›เบฐเบกเบฒเบ™ 8.5kb เบ‚เบญเบ‡ RAM เบŸเบฃเบต. เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”. เบ”เบต, เบ–เป‰เบฒเบšเปเปˆเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบžเบฝเบ‡เบžเป, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบนเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ firmware.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™?

เบ•เบปเบเบฅเบปเบ‡, เบฎเบฒเบ”เปเบงเบ–เบทเบ soldered, เป€เบŸเบตเบกเปเบงเบ–เบทเบเบ‚เบฝเบ™, เบเปˆเบญเบ‡เบ–เบทเบเบžเบดเบกเบญเบญเบ, เบญเบธเบ›เบฐเบเบญเบ™เบ–เบทเบเบ•เบดเบ”เบขเบนเปˆเป€เบ—เบดเบ‡เบเบฒเปเบฅเบฐเบเบฐเบžเบดเบšเบ”เบญเบเป„เบŸเบขเปˆเบฒเบ‡เบกเบตเบ„เบงเบฒเบกเบชเบธเบ. เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบเปˆเบญเบ‡เบชเบตเบ”เปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ” (เบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเปเบฅเบฐเบ•เบปเบงเป€เบฅเบ) เปเบฅเบฐเบกเบฑเบ™เบเบฑเบ‡เปƒเบŠเป‰เบซเบ™เป‰เบญเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก MQTT เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

"เป€เบฎเบทเบญเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ" เบ‚เบญเบ‡เบ‚เป‰เบญเบเบเบณเบฅเบฑเบ‡เปเบนเบ™เบงเบฝเบ™เบขเบนเปˆ เบฅเบฐเบšเบปเบš Majordomo. เป‚เบกเบ”เบนเบ™ MQTT เบญเบญเบเบกเบฒเบˆเบฒเบเบเปˆเบญเบ‡, เบซเบผเบทเบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบ”เป‰เบ‡เปˆเบฒเบเบˆเบฒเบเบ•เบฐเบซเบผเบฒเบ” add-on - เบ‚เป‰เบญเบเบšเปเปˆเบˆเบทเปˆเบงเปˆเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เบกเบฒเบˆเบฒเบเปƒเบช. MQTT เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เบปเบ™เป€เบญเบ‡เบžเบฝเบ‡เบžเป - เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบ™เบฒเบเปœเป‰เบฒ - เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš, เบˆเบฑเบ”เบฎเบฝเบ‡ เปเบฅเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเบ‚เปเป‰เบ„เบงเบฒเบก MQTT เปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ. เบ‚เป‰เบญเบเปƒเบŠเป‰เบขเบฒเบเบธเบ‡, เป€เบŠเบดเปˆเบ‡ (เป€เบŠเบฑเปˆเบ™ majordomo) เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ netbook เบ”เบฝเบงเบเบฑเบ™.

เบซเบผเบฑเบ‡เบˆเบฒเบเบญเบธเบ›เบฐเบเบญเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡, เบกเบนเบ™เบ„เปˆเบฒเบˆเบฐเบ›เบฒเบเบปเบ”เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฑเบ™เบ—เบต.

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบงเบฑเบ”เบ–เบธเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ scripts เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ•เปˆเบฒเบ‡เป† - เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เปเบ™เบฐเบ™เปเบฒเบฅเบฐเบšเบปเบš majordomo เปƒเบซเป‰เบ—เบธเบเบ„เบปเบ™เบ—เบตเปˆเบชเบปเบ™เปƒเบˆ channel Electronics In Lens โ€” เป€เบžเบทเปˆเบญเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เป€เบฎเบทเบญเบ™โ€‹เบญเบฑเบ”โ€‹เบชเบฐโ€‹เบฅเบดโ€‹เบเบฐ เปเบฅเบฐโ€‹เป€เบงเบปเป‰เบฒโ€‹เบขเปˆเบฒเบ‡โ€‹เบˆเบฐโ€‹เปเบˆเป‰เบ‡โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบฅเบฐโ€‹เบšเบปเบš.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบชเบญเบ‡เบชเบฒเบกเป€เบชเบฑเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเบ›เบฐเบˆเปเบฒเบงเบฑเบ™

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart
เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเป€เบเบทเบญเบšเบšเปเปˆเบกเบตเปƒเบœเปƒเบŠเป‰เบ™เป‰เปเบฒเปƒเบ™เบ•เบญเบ™เบเบฒเบ‡เบ„เบทเบ™. เบชเบญเบ‡เบชเบฒเบกเป€เบ—เบทเปˆเบญเบกเบตเบ„เบปเบ™เป„เบ›เบซเป‰เบญเบ‡เบ™เป‰เปเบฒ, เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ osmosis เบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡เบ”เบนเบ”เบชเบญเบ‡เบชเบฒเบกเบฅเบดเบ”เบ•เปเปˆเบ„เบทเบ™. เปƒเบ™เบ•เบญเบ™เป€เบŠเบปเป‰เบฒ, เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ‚เป‰เบญเบเปƒเบŠเป‰เบ™เป‰เปเบฒเบˆเบฒเบเบซเบกเปเป‰เบซเบธเบ‡เบ•เบปเป‰เบก, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบขเบฒเบเบญเบฒเบšเบ™เป‰เปเบฒเปเบฅเบฐเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ™เป‰เปเบฒเบฎเป‰เบญเบ™เปƒเบ™เป€เบกเบทเบญเบ‡เบŠเบปเปˆเบงเบ„เบฒเบง - เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ”เป‰เบฒเบ™เบฅเบธเปˆเบก.

เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเปˆเบฒเบเบฒเบ™เป„เบ›เบซเป‰เบญเบ‡เบ™เป‰เปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เป‰เปเบฒ 6-7 เบฅเบดเบ”, เบเบฒเบ™เบญเบฒเบšเบ™เป‰เปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ 20-30 เบฅเบดเบ”, เบเบฒเบ™เบฅเป‰เบฒเบ‡เบ–เป‰เบงเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบกเบฒเบ™ 20 เบฅเบดเบ”, เบเบฒเบ™เบญเบฒเบšเบ™เป‰เปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ 160 เบฅเบดเบ”. เบ„เบญเบšเบ„เบปเบงเบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเปเบฅเบดเป‚เบžเบเบ›เบฐเบกเบฒเบ™ 500-600 เบฅเบดเบ”เบ•เปเปˆเบกเบทเป‰.

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบขเบฒเบเบฎเบนเป‰เบขเบฒเบเป€เบซเบฑเบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบ—เบถเบเบชเปเบฒเบฅเบฑเบšเบกเบนเบ™เบ„เปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เบปเบ™

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบˆเบฒเบเบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเปˆเบฒเป€เบกเบทเปˆเบญเบ—เปเปˆเป€เบ›เบตเบ”, เบ™เป‰เปเบฒเบˆเบฐเป„เบซเบผเบ”เป‰เบงเบเบ„เบงเบฒเบกเป„เบงเบ›เบฐเบกเบฒเบ™ 1 เบฅเบดเบ”เบ•เปเปˆ 5 เบงเบดเบ™เบฒเบ—เบต.

เปเบ•เปˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ™เบตเป‰, เบชเบฐเบ–เบดเบ•เบดเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบชเบฐเบ”เบงเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡. Majordomo เบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเปƒเบ™เบกเบทเป‰, เบญเบฒเบ—เบดเบ”เปเบฅเบฐเป€เบ”เบทเบญเบ™. เบ—เบตเปˆเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเปƒเบ™เปเบ–เบš

เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบฑเบ”เปเบ—เบเบ™เป‰เปเบฒเบเบฑเบšเป€เบฎเบทเบญเบ™ smart

เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบญเบฒเบ—เบดเบ”เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เป€เบ”เบทเบญเบ™เบซเบ™เบถเปˆเบ‡, เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเบŠเบตเป‰เบšเบญเบเบซเบผเบฒเบ - เปƒเบ™เปเบ•เปˆเบฅเบฐเบกเบทเป‰เบˆเบฐเบกเบตเบ–เบฑเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบฎเบนเบšเบžเบฒเบšเปเบกเปˆเบ™ spoiled เป€เบฅเบฑเบเบ™เป‰เบญเบเป‚เบ”เบเบเบฒเบ™เบ›เบฑเบšเบ•เบปเบงเบเบฑเบšเบ„เปˆเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบชเปˆเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เบ–เบฑเบ™เบ—เบตเปˆเปƒเบซเบเปˆเบ—เบตเปˆเบชเบธเบ”). เปเบฅเบฐเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เปเบฒเบญเบดเบ”เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เป€เบเบทเบญเบš cube เบซเบ™เป‰เบญเบ, เบซเบผเบทเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบ™ firmware เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบฅเบดเบ”เบ–เบทเบเบ™เบฑเบš. เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบฅเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ•เบปเบงเป€เบญเบ‡เบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™ magic, whitewashing, painting. เบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเบเบฑเบ‡เบˆเบฐเบชเป‰เบฒเบ‡เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡ debugging - เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบฎเบปเปˆเบงเป„เบซเบผ. เบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบšเบฒเบ‡เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”. เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”.

เบชเบฐเบซเบฅเบธเบš

เบกเบทเป‰เบ™เบตเป‰เบญเบฒเบžเบฒเบ”เป€เบกเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบชเบฐเบซเบฅเบฒเบ”เบเบงเปˆเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบ”เป‰เบงเบเบญเบธเบ›เบฐเบเบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบกเบฑเบ™เบˆเบฐเบชเบฐเบ”เบงเบเบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ™เป‰เปเบฒเปƒเบ™เป€เบฎเบทเบญเบ™. เบ–เป‰เบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเปƒเบˆเบฎเป‰เบฒเบ "เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบšเปเบฅเบดเป‚เบžเบเบ™เป‰เปเบฒเบซเบผเบฒเบเปƒเบ™เป€เบ”เบทเบญเบ™," เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ™เบตเป‰.

เบšเบฒเบ‡โ€‹เบ„เบปเบ™โ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เปเบ›เบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เปƒเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบˆเปโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เปเบกเบฑเบ”โ€‹เบซเปˆเบฒเบ‡โ€‹เบˆเบฒเบโ€‹เปเบกเบฑเบ”โ€‹เบ•เบปเบงโ€‹เบกเบฑเบ™โ€‹เป€เบญเบ‡. เปเบ•เปˆเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบšเปเปˆเป„เบเบซเบผเบฒเบ, เบ‚เป‰เบญเบเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบเป„เบ›เบญเบฒเบžเบฒเบ”เป€เบกเบฑเบ™เบญเบทเปˆเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบ™เป‰เปเบฒเบ–เป‰เบงเบกเบซเบผเบฒเบ, เปเบฅเบฐเปเบกเบฑเบ”เบ‚เบญเบ‡เบ•เบปเบงเป€เบญเบ‡เบชเปˆเบงเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเป€เบ—เบดเบ‡เบซเบ™เป‰เบฒเบ”เบดเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบ.

เบ‚เป‰เบญเบเบเบฑเบ‡เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™. เบ‚เป‰เบญเบเบเบณเบฅเบฑเบ‡เป€เบšเบดเปˆเบ‡เบ›เปˆเบฝเบ‡เบกเปเป€เบ•เบตเปเบฅเป‰เบง. เบ”เบฝเบงเบ™เบตเป‰, เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบซเบกเปเป‰เบซเบธเบ‡เบ•เบปเป‰เบกเป€เบ›เบฑเบ™เบ™เป‰เปเบฒเปƒเบ™เป€เบกเบทเบญเบ‡, เบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบซเบฑเบ™ 3 เบ—เปเปˆเบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡. เบกเบฑเบ™เบˆเบฐเบชเบฐเบ”เบงเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบ›เบธเปˆเบกเบ”เบฝเบงเบ—เบตเปˆเบกเบตเบ•เบปเบงเบŠเบตเป‰เบšเบญเบเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™. เบ”เบต, เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบผ.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ ESP8266. เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบญเบเป„เบ”เป‰เบกเบฒเบเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ‚เบญเบ‡ firmware micropython เป‚เบ”เบเปƒเบŠเป‰ coroutines - เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบ‡เบฒเบก. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบซเบผเบฒเบ nuances เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบšเบปเบโ€‹เบœเปˆเบญเบ‡โ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบžเบปเบšโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เป‚เบ„โ€‹เบชเบฐโ€‹เบ™เบฒ. เบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›; เป‚เบ”เบเบชเปˆเบงเบ™เบ•เบปเบงเปเบฅเป‰เบง, เปƒเบ™เบ–เบฒเบ™เบฐเบœเบนเป‰เบญเปˆเบฒเบ™, เบกเบฑเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบ‚เป‰เบฒเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ›เบฐเป„เบงเป‰เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒ.

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบชเบฐเป€เบซเบกเบต, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ›เบตเบ”เปƒเบซเป‰เบ„เปเบฒเบงเบดเบˆเบฒเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบชเบฑเบ™.

เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™
เบงเบปเบ‡เบˆเบญเบ™เปเบฅเบฐเบเบฐเบ”เบฒเบ™
เบ•เบปเบงเปเบšเบšเบเปเบฅเบฐเบ™เบต

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™