GSM + GPS рдореЙрдбреНрдпреВрд▓ A9G рдкрд░ рдорд╛рдЗрдХреНрд░реЛрдкрд╛рдпрдерди

рдЗрд╕ рдмрд╛рд░ рдореИрдВрдиреЗ рдПрд╣рддрд┐рдпрд╛рдд рдХреЗ рддреМрд░ рдкрд░ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдореЗрдВ рдЬреАрдкреАрдПрд╕ рдЯреНрд░реИрдХрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред рдХрд╛рд░, тАЛтАЛрдХрд╛рд░реНрдЧреЛ, рд╕рд╛рдЗрдХрд┐рд▓, рд╕рд╛рдорд╛рди, рдмрдЪреНрдЪреЛрдВ рдФрд░ рдЬрд╛рдирд╡рд░реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╛рд░ рдкрд░ рдХрдИ рд╕реНрд╡рд╛рдпрддреНрдд рдЙрдкрдХрд░рдг рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрд╕рдПрдордПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рдлреЛрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рдЯреНрд░реИрдХрд░ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдПрд╕рдПрдордПрд╕ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рддрд╣реА рдЧреВрдЧрд▓ рдиреЗ рдореБрдЭреЗ рдЪреАрди рд╕реЗ рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рд▓рд╛рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдореИрдВрдиреЗ рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ (рдП 9 рдЬреА рдкреБрдбрд┐рдВрдЧ рдмреЛрд░реНрдб) (~ $ 15)ред


рдореЙрдбреНрдпреВрд▓


рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЕрдЬрдЧрд░ рдХрд╛ рдХрд╛рдо рдХреИрд╕реЗ рдХрд┐рдпрд╛ред


рдпрджрд┐ рдП 9 рдЬреА рдИрдПрд╕рдкреА рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ (рдирд┐рд░реНрдорд╛рддрд╛, рд╡реИрд╕реЗ, рдПрдХ рд╣реА рд╣реИ), рддреЛ рдкреБрдбрд┐рдВрдЧ рдмреЛрд░реНрдб рд╕реНрд╡рдпрдВ рдПрдирдУрдбреАрдПрдорд╕реАрдпреВ рдмреЛрд░реНрдб рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдкреБрдбрд┐рдВрдЧ рдмреЛрд░реНрдб рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпреВрдПрд╕рдмреА-рдпреВрдПрдЖрд░ рдХрдирд╡рд░реНрдЯрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрдИ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВред рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ:


  • 32 рдмрд┐рдЯ рдХреЛрд░ (RISC), 312MHz рддрдХ
  • 29x GPIO (рд╕рднреА рд╣рд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕рднреА рдЗрдВрдЯрд░рдлреЗрд╕ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)
  • рдШрдбрд╝реА рдФрд░ рдШрдбрд╝реА
  • 1x USB 1.1 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдореБрдЭреЗ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдСрдлрд╕рд╛рдЗрдЯ рд╕реЗ рдХреЙрдкреА) рдФрд░ рдкрд╛рд╡рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдпреВрдПрд╕рдмреА
  • 2x UART (+1 рд╕реЗрд╡рд╛)
  • 2x рдПрд╕рдкреАрдЖрдИ (рдЖрдЬрдорд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛)
  • 3x I2C (рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЧрдИ)
  • 1x рдПрд╕рдбреАрдПрдордПрдорд╕реА (рднреМрддрд┐рдХ рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде)
  • 2x рдПрдирд╛рд▓реЙрдЧ рдЗрдирдкреБрдЯ (10 рдмрд┐рдЯреНрд╕, рд╕рдВрднрд╡рддрдГ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд▓рд┐рдерд┐рдпрдо рдмреИрдЯрд░реА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
  • 4Mb рдлрд╝реНрд▓реИрд╢
  • 4 рдПрдордмреА рдкреАрдПрд╕рдЖрд░рдПрдПрдо
  • рдПрдбреАрд╕реА (рдорд╛рдЗрдХреНрд░реЛрдлреЛрди, рдмреЛрд░реНрдб рдкрд░ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реИ) рдФрд░ рдбреАрдПрд╕реА (рд╕реНрдкреАрдХрд░, рдЕрдиреБрдкрд╕реНрдерд┐рдд)
  • рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рдирд┐рдпрдВрддреНрд░рдХ (рдХреЛрдИ рдмреИрдЯрд░реА рд╣реА рдирд╣реАрдВ рд╣реИ)
  • рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрд╕рдПрдордПрд╕, рдЖрд╡рд╛рдЬ рдФрд░ рдЬреАрдкреАрдЖрд░рдПрд╕ рдХреЗ рд╕рд╛рде рдЬреАрдПрд╕рдПрдо (800, 900, 1800, 1900 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ)
  • UART2 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреАрдкреАрдПрд╕ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рдЗрд╕рдХреЗ рдмрд┐рдирд╛ "A9" рдореЙрдбреНрдпреВрд▓ рд╣реИ)
  • рд╕рд┐рдо рд╕реНрд▓реЙрдЯ (рдиреИрдиреЛ)
  • рджреЛ рдмрдЯрди (рдПрдХ рд░реАрд╕реЗрдЯ, рдЕрдиреНрдп - рд╕рдорд╛рд╡реЗрд╢рди рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди)
  • рджреЛ рдПрд▓.рдИ.рдбреА.

рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╡реЛрд▓реНрдЯреЗрдЬ 3.3V рд╣реИ, рдЗрдирдкреБрдЯ рд╡реЛрд▓реНрдЯреЗрдЬ 5-3.8V (рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрд╢-рдмрдЯрди рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдиреА рдЗрд╕реЗ рд╕реНрд▓реЙрдЯ рдорд╢реАрдиреЛрдВ рдпрд╛ рд╕реНрд▓реЙрдЯ рдорд╢реАрдиреЛрдВ рдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд┐рдХреНрд░реА рдХреЗ рд▓рд┐рдП рдЦрд░реАрдж рд░рд╣реЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдмрд▓реНрдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп SIM800 рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рдПрд╕рдбреАрдХреЗ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдореЙрдбреНрдпреВрд▓ рдПрдЯреА рдореЙрдбреЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ)ред


рдПрд╕рдбреАрдХреЗ


рдореЙрдбреНрдпреВрд▓ рд╕рдВрддреЛрд╖рдЬрдирдХ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЙрдмрдВрдЯреВ рдХреЗ рддрд╣рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдХрдВрдЯреЗрдирд░ рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред GUI рдореЗрдВ рдкреЛрдХрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП ESPtool рдХреЛ рдЕрднреА рддрдХ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд░реНрдорд╡реЗрдпрд░ рдЦреБрдж рдореЗрдХрдлрд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреАрдмрдЧрд░ рдореМрдЬреВрдж рд╣реИ: рдардВрдб рд╕реЗ рдкрд╣рд▓реЗ, рдореЙрдбреНрдпреВрд▓ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рд╕реЗрд╡рд╛ рдкреЛрд░реНрдЯ рдореЗрдВ рдлреЗрдВрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрддреЗ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ (рдЬреАрдбреАрдмреА рд░рд┐рдкреЛрд░реНрдЯ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдкрддреЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВ)ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░рдг рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (рдФрд░ рдЬреАрдердм рдкрд░ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░реЗрдВ)ред рдЕрдиреНрдпрдерд╛, рдпрд╣рд╛рдВ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рд╣реИред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рднреА CSDTK/lib/libQt* рдореЗрдВ .bashrc рдФрд░ delete (rename) рдкрдереЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЕрдиреНрдпрдерд╛, Flasher (рдЙрд░реНрдл рдбрд┐рдмрдЧрд░) рдмрд╕ рдПрдХ рд╡рд┐рд╡рд╛рдж рдХреЗ рдХрд╛рд░рдг рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╢рд╛рдпрдж, рд╕реНрдерд╛рдкрд┐рдд libQtред


рдлреНрд▓реИрд╢рд░


рдлреНрд▓реИрд╢рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ ред


рд╕рдВрдмрдВрдз


NodeMCU рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреБрдбрд┐рдВрдЧ рдмреЛрд░реНрдб рдкрд░ рдХреЛрдИ USB-TTY рдЪрд┐рдк рдирд╣реАрдВ рд╣реИ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдпреВрдПрд╕рдмреА рдХреЗрд╡рд▓ рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ 3.3V рдкрд░ USB-TTY рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рджреЛ рдмреЗрд╣рддрд░ рд╣реИрдВ: рдПрдХ рдбреАрдмрдЧ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ UART1 рдХреЗ рд▓рд┐рдП: рдкрд╣рд▓рд╛ рдлрд░реНрдорд╡реЗрдпрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рд╕рднреА рд╕реНрдиреЛрдЯ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдирд╣реАрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреЛ-рдореАрдЯрд░ рдХреЗрдмрд▓ рдФрд░ рдПрдХ рдмрд╛рд╣рд░реА рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ (рдЖрд╡рд╢реНрдпрдХ) рдХреЗ рд╕рд╛рде 4-рдкреЛрд░реНрдЯ рдпреВрдПрд╕рдмреА рд╕реНрдкреНрд▓рд┐рдЯрд░ рдЦрд░реАрджрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕ рдХрд┐рдЯ рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд $ 25-30 (рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рдмрд┐рдирд╛: рдлреЛрди рд╕реЗ рдЙрдкрдпреЛрдЧ) рд╣реЛрдЧреАред


рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдореЙрдбреНрдпреВрд▓ AT рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ: рдЖрдк 3.3V arduino рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ UART1 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбреЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдлрд░реНрдорд╡реЗрдпрд░ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рджреЛ рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ make : рдПрдХ рдХреЛ рд▓рдЧрднрдЧ рдПрдХ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реАрд╡рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рддреЗрдЬреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рд╕реАрд╡рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдкрд╣рд▓реА рдмрд╛рд░ рдмрдбрд╝реА рд╣реИ, рдмрд╛рдж рдХреА рд╕рдордп рд╕реАрдорд╛ рдЫреЛрдЯреА рд╣реИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдореЗрд░реЗ рдкрд╛рд╕ рдореЙрдбреНрдпреВрд▓, рдорд┐рдирд┐рдЯрд░реНрдо рдХреЛ stdio рдФрд░ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдЪреАрдиреА рдПрд╕рдбреАрдХреЗ ( coolwatcher ) рдЦреБрд▓рд╛ рд╣реИред


рдПрдкреАрдЖрдИ


рдПрдкреАрдЖрдИ рдХреА рд╕рд╛рдордЧреНрд░реА рдКрдкрд░ рдХреА рд╕реВрдЪреА рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╢реБрд░реБрдЖрддреА рджрд┐рдиреЛрдВ рдореЗрдВ рдИрдПрд╕рдкреА 8266 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ: рд╣реИрд▓реЛрд╡рд░реНрд▓реНрдб рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрднрдЧ 3 рдШрдВрдЯреЗ рд▓рдЧреЗред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реЗрдЯ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдо рдХрд╛рд░реНрдб рдкрд░ рдлреЛрди рдмреБрдХ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ, рд╕реЗрд▓реБрд▓рд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЬрд╛рдирдХрд╛рд░реА, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рднреА рдХрдо рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреЛ рджрд░реНрдЬрди рд╣реИрдВ) рдФрд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдлрд┐рд░ рднреА, рдореЙрдбреНрдпреВрд▓ рдПрд╕рдПрд╕рдПрд▓ рдХрдиреЗрдХреНрд╢рди рддрдХ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреАрдиреА рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреАрдиреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдкреНрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░рд┐рдереЙрди рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ ред рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ)ред


micropython


рд▓реЛрдЧреЛ


рдорд╛рдЗрдХреНрд░реЛрдкрд╛рдпрдереЙрди рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ cPython рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рджреЛ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕рднреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реЛрдВ рдХреЛ рдХреЙрдорди рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдЖрдо рд╣реИ рдЬреЛ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдлрд╝рдВрдХреНрд╢рдВрд╕, рдХреНрд▓рд╛рд╕реЗрд╕, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рдкрд░рдорд╛рдгреБ рдкреНрд░рдХрд╛рд░, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рджреВрд╕рд░рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ: рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП UART рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ "рд╕рд┐рдЦрд╛рдП", рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: GPIO, рдкрд╛рд╡рд░, рд╡рд╛рдпрд░рд▓реЗрд╕, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдоред
рдпрд╣ рд╕рдм рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рд╢реБрджреНрдз рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ: рдорд╛рдЗрдХреНрд░реЛрдкрд╛рдЗрдерди рдореЗрдВ рд░реЛрдо рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡реНрдпрдВрдЬрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЬрдЧрд░ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ (рдореБрдЦреНрдп рдмрд╛рдд рд╕реНрдореГрддрд┐ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рд╣реИ)ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреНрдпреВрд░реЗрдЯрд░ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ dzhanga (рд░реЛрдЯреА рдХреА рд░реЛрдЯреА рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░) рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрдкрдиреЗ рдмреЛрд░реНрдб рдХреЛ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ESP8266 рдФрд░ ESP32 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред


рдЬрдм рдлрд░реНрдорд╡реЗрдпрд░ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдк рдмрд╕ UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рдпрдерди рдЖрд░рдИрдкреАрдПрд▓ рдореЗрдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред


 $ miniterm.py /dev/ttyUSB1 115200 --raw MicroPython cd2f742 on 2017-11-29; unicorn with Cortex-M3 Type "help()" for more information. >>> print("hello") hello 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реНрдореГрддрд┐ рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдХрд░ рд▓рдЧрднрдЧ рд╕рд╛рдорд╛рдиреНрдп python3 рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдП 9 рдЬреА рдореЙрдбреНрдпреВрд▓ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕реВрдЪреА micropython/ports рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рдПрдХ рджрд░реНрдЬрди рд╣реИрдВ)ред рдлрд┐рд░ рднреА, рд▓реЛрд╣реЗ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ рдорд╛рдЗрдХреНрд░реЛрдкреАрдереЙрди рдХреЛ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдФрд░ рдП 9 рдЬреА рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛: micropython/ports/gprs_a9 , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдЙрд╕ рд╕рдордп рдЬрдм рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗ рд░рд╣рд╛ рдерд╛, рдкреЛрд░реНрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдиреЗ рдореБрдЭреЗ рдЖрд░рдИрдкреАрдПрд▓ рдХреЗ рд╕рд╛рде рд╢реБрднрдХрд╛рдордирд╛ рджреАред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддреГрддреАрдп-рдкрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ GPIO рдХреЗ рд╕рд╛рде рдХрд╛рдо рдерд╛: рд╡рд╛рдпрд░рд▓реЗрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЬреАрдкреАрдПрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЬреАрдкреАрдПрд╕ рдЯреНрд░реИрдХрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ: рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдХреЛрдб рдореЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреНрд░рд╣рд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред


рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, micropython/ports рдЬрд╛рдПрдВ рдФрд░ micropython/ports micropython/ports/minimal рдХреЛ рдирдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдкреЛрд░реНрдЯ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред рдлрд┐рд░, рдЕрдкрдиреЗ рдордВрдЪ рдХреЗ рд▓рд┐рдП main.c рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╕рднреА mp_init() main рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ mp_init() рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдлрд┐рд░, рдИрд╡реЗрдВрдЯ-рдЪрд╛рд▓рд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ pyexec_event_repl_init() рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╡рд░реНрдгреЛрдВ рдХреЛ pyexec_event_repl_process_char(char) рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдлрд╝реАрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЖрд░рдИрдкреАрдПрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓, micropython/ports/minimal/uart_core.c UART рдореЗрдВ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП STM32 рдХреЗ рд▓рд┐рдП рдореВрд▓ рдХреЛрдб рд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВред


main.c


 int main(int argc, char **argv) { int stack_dummy; stack_top = (char*)&stack_dummy; #if MICROPY_ENABLE_GC gc_init(heap, heap + sizeof(heap)); #endif mp_init(); #if MICROPY_ENABLE_COMPILER #if MICROPY_REPL_EVENT_DRIVEN pyexec_event_repl_init(); for (;;) { int c = mp_hal_stdin_rx_chr(); if (pyexec_event_repl_process_char(c)) { break; } } #else pyexec_friendly_repl(); #endif //do_str("print('hello world!', list(x+1 for x in range(10)), end='eol\\n')", MP_PARSE_SINGLE_INPUT); //do_str("for i in range(10):\r\n print(i)", MP_PARSE_FILE_INPUT); #else pyexec_frozen_module("frozentest.py"); #endif mp_deinit(); return 0; } 

uart_core.c


 // Receive single character int mp_hal_stdin_rx_chr(void) { unsigned char c = 0; #if MICROPY_MIN_USE_STDOUT int r = read(0, &c, 1); (void)r; #elif MICROPY_MIN_USE_STM32_MCU // wait for RXNE while ((USART1->SR & (1 << 5)) == 0) { } c = USART1->DR; #endif return c; } // Send string of given length void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) { #if MICROPY_MIN_USE_STDOUT int r = write(1, str, len); (void)r; #elif MICROPY_MIN_USE_STM32_MCU while (len--) { // wait for TXE while ((USART1->SR & (1 << 7)) == 0) { } USART1->DR = *str++; } #endif } 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ / рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдХрдлрд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реИред рд╕рдм рдХреБрдЫ, рдпрд╣ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рд╣рдо рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдореЗрдВ рднрд░рддреЗ рд╣реИрдВ рдФрд░ UART рдореЗрдВ REPL рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
micropython рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж micropython рдЖрдкрдХреЛ рдЗрд╕рдХреА рднрд▓рд╛рдИ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛, Ctrl-D рдХреА рд╕рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдирд░рдо рд░реАрд╕реЗрдЯ) рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬреЛ рдореИрдВ рдЙрд╕ рдкрд░ рдирд╣реАрдВ mpconfigport.h : mpconfigport.h рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВред


рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдБ


рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦ рд░рд╣реА рд╣реИред рддреЛ, рдореЙрдбреНрдпреВрд▓ (рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рдВрдЫрдиреАрдп) рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ mod[].c рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ SRC_C ( SRC_C рдЪрд░ рдпрджрд┐ рдЖрдк рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ) рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЦрд╛рд▓реА рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 // nlr - non-local return:  C  ,      goto-  . //  nlr_raise             . #include "py/nlr.h" //   .  ,  mp_map_elem_t,  ,   . #include "py/obj.h" //   . mp_raise_ValueError(char* msg)  mp_raise_OSError(int errorcode)   . //  ,   mp_call_function_*     Callable (  callback-). #include "py/runtime.h" #include "py/binary.h" //  header   :       #include "portmodules.h" //    --  .     MP_QSTR_[ ]. MP_OBJ_NEW_QSTR   . //             RAM. //      -      __name__ STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, }; //      STATIC MP_DEFINE_CONST_DICT (mp_module_mymodule_globals, mymodule_globals_table); //   :             const mp_obj_module_t mp_module_mymodule = { .base = { &mp_type_module }, .globals = (mp_obj_dict_t*)&mp_module_mymodule_globals, }; 

рдмреЗрд╢рдХ, рдкреЛрд░реНрдЯ рд╕реНрд╡рдпрдВ mp_module_mymodule рдкрд╣рдЪрд╛рдирддрд╛ рдирд╣реАрдВ рд╣реИ: рдЗрд╕реЗ mpconfigport.h рдкреЛрд░реНрдЯ mpconfigport.h рдореЗрдВ MICROPY_PORT_BUILTIN_MODULES рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реИрд╕реЗ рдмреЛрд░рд┐рдВрдЧ рд╡реЙрд▓рдкреЗрдкрд░ рдЪрд┐рдк рдирд╛рдо рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣ рдХрд╛ рдирд╛рдо рднреА рд╡рд╣рд╛рдБ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрди рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ REPL рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ __name__ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА (рдЯреИрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ REPL рдореЗрдВ рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдорд╛рдорд▓рд╛)ред


 >>> import mymodule >>> mymodule.__name__ 'mymodule' 

рд╕реНрдерд┐рд░рд╛рдВрдХ


рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рдЕрдЧрд▓рд╛ рдЪрд░рдг рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ ( INPUT , OUTPUT , HIGH , LOW , рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░рдВрддрд░ magic_number = 10 :


 STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, { MP_OBJ_NEW_QSTR(MP_QSTR_magic_number), MP_OBJ_NEW_SMALL_INT(10) }, }; 

рдкрд░реАрдХреНрд╖рдг:


 >>> import mymodule >>> mymodule.magic_number 10 

рдХрд╛рд░реНрдпреЛрдВ


рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ: рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ, рд▓рдкреЗрдЯреЗрдВ, рдЬреЛрдбрд╝реЗрдВ (рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ)ред


 //  STATIC mp_obj_t conditional_add_one(mp_obj_t value) { //   int.         -  :   . int value_int = mp_obj_get_int(value); value_int ++; if (value_int == 10) { //  None return mp_const_none; } //   int return mp_obj_new_int(value); } //    .     // runtime.h   . STATIC MP_DEFINE_CONST_FUN_OBJ_1(conditional_add_one_obj, conditional_add_one); //  STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, { MP_OBJ_NEW_QSTR(MP_QSTR_magic_number), MP_OBJ_NEW_SMALL_INT(10) }, { MP_OBJ_NEW_QSTR(MP_QSTR_conditional_add_one), (mp_obj_t)&conditional_add_one_obj }, }; 

рдЯреЗрд╕реНрдЯ:


 >>> import mymodule >>> mymodule.conditional_add_one(3) 4 >>> mymodule.conditional_add_one(9) >>> 

рдХрдХреНрд╖рд╛рдПрдВ (рдкреНрд░рдХрд╛рд░)


рдХрдХреНрд╖рд╛рдУрдВ (рдкреНрд░рдХрд╛рд░) рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рднреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИред рдпрд╣рд╛рдБ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд▓рдЧрднрдЧ):


 //     STATIC const mp_map_elem_t mymodule_hello_locals_dict_table[] = {}; //   STATIC MP_DEFINE_CONST_DICT(mymodule_hello_locals_dict, mymodule_hello_locals_dict_table); // ,  ,   const mp_obj_type_t mymodule_helloObj_type = { //    { &mp_type_type }, // : helloObj .name = MP_QSTR_helloObj, //  .locals_dict = (mp_obj_dict_t*)&mymodule_hello_locals_dict, }; //    STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, { MP_OBJ_NEW_QSTR(MP_QSTR_magic_number), MP_OBJ_NEW_SMALL_INT(10) }, { MP_OBJ_NEW_QSTR(MP_QSTR_conditional_add_one), (mp_obj_t)&conditional_add_one_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_conditional_add_one), (mp_obj_t)&mymodule_helloObj_type }, }; 

рдЯреЗрд╕реНрдЯ:


 >>> mymodule.helloObj <type 'helloObj'> 

рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреБрд▓рдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдпрд╛ рдХреЛрдИ рд╕рдВрдмрджреНрдз рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде "рдмрдЧрд▓ рдореЗрдВ" рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдпрдерди рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд▓рдЧ рдФрд░ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдПрдХ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯред


 //  -. ,    typedef struct _mymodule_hello_obj_t { //   mp_obj_base_t base; // -  uint8_t hello_number; } mymodule_hello_obj_t; 

рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рдХрд░реЗрдВ? рд╕рдмрд╕реЗ рдХрдард┐рди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИред


 // -,   (,  ,   mymodule_helloObj_type //   ,     - ),   (args  kwargs)  //        : args, kwargs STATIC mp_obj_t mymodule_hello_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args ) { //    mp_arg_check_num(n_args, n_kw, 1, 1, true); //   mymodule_hello_obj_t *self = m_new_obj(mymodule_hello_obj_t); //     self->base.type = &mymodule_hello_type; //   self->hello_number = mp_obj_get_int(args[0]) //   return MP_OBJ_FROM_PTR(self); //    __init__, ,  } //      make_new const mp_obj_type_t mymodule_helloObj_type = { { &mp_type_type }, .name = MP_QSTR_helloObj, .locals_dict = (mp_obj_dict_t*)&mymodule_hello_locals_dict, //  .make_new = mymodule_hello_make_new, }; 

рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ, рд╡рд╣рд╛рдБ рднреА рд╣реИ .print , рдФрд░ рдореИрдВ .print рдХреЗ рдмрд╛рдХреА рдЬрд╛рджреВ рдХрд╛ Python3 ред


рд▓реЗрдХрд┐рди make_new рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ: рдЖрд░рдВрднреАрдХрд░рдг рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ micropython/ports/esp32/modsocket.c рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 //   :       STATIC mp_obj_t get_socket(size_t n_args, const mp_obj_t *args) { socket_obj_t *sock = m_new_obj_with_finaliser(socket_obj_t); sock->base.type = &socket_type; sock->domain = AF_INET; sock->type = SOCK_STREAM; sock->proto = 0; sock->peer_closed = false; if (n_args > 0) { sock->domain = mp_obj_get_int(args[0]); if (n_args > 1) { sock->type = mp_obj_get_int(args[1]); if (n_args > 2) { sock->proto = mp_obj_get_int(args[2]); } } } sock->fd = lwip_socket(sock->domain, sock->type, sock->proto); if (sock->fd < 0) { exception_from_errno(errno); } _socket_settimeout(sock, UINT64_MAX); return MP_OBJ_FROM_PTR(sock); } //     0-3  STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(get_socket_obj, 0, 3, get_socket); 

рдмрдВрдзреЗ рд╣реБрдП рддрд░реАрдХреЗ


рдЕрдЧрд▓рд╛ рдХрджрдо рдмрд╛рдзреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдиреНрдп рд╕рднреА рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рд╣рдо рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ:


 //    :     1 (self) STATIC mp_obj_t mymodule_hello_increment(mp_obj_t self_in) { mymodule_hello_obj_t *self = MP_OBJ_TO_PTR(self_in); self->hello_number += 1; return mp_const_none; } //     MP_DEFINE_CONST_FUN_OBJ_1(mymodule_hello_increment_obj, mymodule_hello_increment); //      'inc' STATIC const mp_map_elem_t mymodule_hello_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_inc), (mp_obj_t)&mymodule_hello_increment_obj }, } 

рдпрд╣ рдмрд╛рдд рд╣реИ!


 >>> x = mymodule.helloObj(12) >>> x.inc() 

рдЕрдиреНрдп рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: рдЧреЗрдЯреИрдЯ , рд╕реЗрдЯрдЯреНрд░рд╛


рдЧреИрд░-рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, @property рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ __getattr__ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдХреГрдкрдпрд╛: рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ mymodule_hello_locals_dict_table рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


 //     ... STATIC void mymodule_hello_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) { mymodule_hello_obj_t *self = MP_OBJ_TO_PTR(self_in); if (dest[0] != MP_OBJ_NULL) { // __setattr__ if (attr == MP_QSTR_val) { self->val = dest[1]; dest[0] = MP_OBJ_NULL; } } else { // __getattr__ if (attr == MP_QSTR_val) { dest[0] = self->val; } } } // ...     attr const mp_obj_type_t mymodule_helloObj_type = { { &mp_type_type }, .name = MP_QSTR_helloObj, //     //.locals_dict = (mp_obj_dict_t*)&mymodule_hello_locals_dict, .make_new = mymodule_hello_make_new, //   - attr .attr = mymodule_hello_attr, }; 

рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рджрд░реНрджрдирд╛рдХ рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд attr рдирд┐рдХрд▓рд╛ред рдпреЗ рд╕рднреА mp_raise_AttributeError ( рдиреЛрдЯ : рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ) рдХрд╣рд╛рдВ рд╣реИрдВ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ AttributeError рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд░рд╣рд╕реНрдп рдпрд╣ рд╣реИ рдХрд┐ dest рджреЛ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЖрдЙрдЯрдкреБрдЯ", рд░рд╛рдЗрдЯ-рдУрдирд▓реА: рдпрд╣ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ MP_OBJ_SENTINEL рдЕрдЧрд░ рдореВрд▓реНрдп рдХреЛ MP_OBJ_SENTINEL рд╣реИ рдФрд░ MP_OBJ_NULL рдЕрдЧрд░ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ mp_obj_t рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдХреБрдЫ mp_obj_t ред рджреВрд╕рд░рд╛ рддрддреНрд╡ рдЗрдирдкреБрдЯ рд╣реИ, рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП: рд╡рд╕реНрддреБ рдХрд╛ рдореВрд▓реНрдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрддрд╛ рд╣реИ рдЕрдЧрд░ рдореВрд▓реНрдп рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ MP_OBJ_NULL рдЕрдЧрд░ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 >>> x = mymodule.helloObj(12) >>> x.val = 3 >>> x.val 3 

рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╣ рд╣реИ рдХрд┐ REPL рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдЯреИрдм рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдСрдлрд░ рдХрд░рддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ C рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ (рдСрдкрд░реЗрдЯрд░ == рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ)ред


рдмрдВрджрд░рдЧрд╛рд╣


рдП 9 рдЬреА рдореЙрдбреНрдпреВрд▓ рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ, рдПрд╕рдПрдордПрд╕, рдЬреАрдкреАрдЖрд░рдПрд╕ (рдпреВрдкреНрд╕), рдЬреАрдкреАрдПрд╕, рдкрд╛рд╡рд░ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреЗ рд╕рдорд░реНрдерди рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ ред рдЕрдм рдЖрдк рдореЙрдбреНрдпреВрд▓ рдкрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:


 import cellular as c import usocket as sock import time import gps import machine #   print("Waiting network registration ...") while not c.is_network_registered(): time.sleep(1) time.sleep(2) #  GPRS print("Activating ...") c.gprs_activate("internet", "", "") print("Local IP:", sock.get_local_ip()) #  GPS gps.on() #    thingspeak host = "api.thingspeak.com" api_key = "some-api-key" fields = ('latitude', 'longitude', 'battery', 'sat_visible', 'sat_tracked') #  ,      ! fields = dict(zip(fields, map(lambda x: "field{}".format(x+1), range(len(fields))) )) x, y = gps.get_location() level = machine.get_input_voltage()[1] sats_vis, sats_tracked = gps.get_satellites() s = sock.socket() print("Connecting ...") s.connect((host, 80)) print("Sending ...") #      ,     HTTP.           HTTP, SSL   print("Sent:", s.send("GET /update?api_key={}&{latitude}={:f}&{longitude}={:f}&{battery}={:f}&{sat_visible}={:d}&{sat_tracked}={:d} HTTP/1.1\r\nHost: {}\r\nConnection: close\r\n\r\n".format( api_key, x, y, level, sats_vis, sats_tracked, host, **fields ))) print("Receiving ...") print("Received:", s.recv(128)) s.close() 

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╡ рдорджрдж рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ / рдпрд╛ рдпрд╣ рд▓реЗрдЦ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИ, рддреЛ рдЧреАрдердм рдкрд░ рд▓рд╛рдЗрдХ рдЫреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред

Source: https://habr.com/ru/post/hi446090/


All Articles