рд╣рд╛рдп, рд╣реИрдмреНрд░ред
рдЖрдЬ рд╣рдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреА рдиреЗрдЯрд╡рд░реНрдХ рдХреНрд╖рдорддрд╛рдУрдВ, рдпрд╛ рдЕрдЬрдЧрд░ рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рд▓рддрдо рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЕрдм рд╣рдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдФрд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рд▓реЗрдЦ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдиреЛрдЯреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╢реБрд░реВ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЦреБрдж рдкрд░ рд╕рдВрджреЗрд╣ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдХрдо рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдЕрдзрд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╣реИ рдФрд░ рдЙрдореНрдореАрдж
рд╣реИ , рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдерд╛, 85% рдкрд╛рдардХреЛрдВ рдиреЗ рд╡рд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдИ рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛ред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ "рдбрдореА" рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд░реНрдердХ рд▓реЗрдЦ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рд╣реБрдП, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рджреВрд╕рд░реА рдмрд╛рдд, рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рдкреНрд░рд╢рд╛рд╕рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рд░рд╛рд╕реНрдкрд┐рдпрди, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░, рд╡реАрдкреАрдПрди, рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреЛрдИ рдЕрдкрд╛рд░ рдХреЛ рдЧрд▓реЗ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдЬрд┐рдиреНрд╣реЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдЕрднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдмреИрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ;)
рдФрд░ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдордиреЗ рдПрдХ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЗрдм рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдереИрддрд┐рдХ рдкреГрд╖реНрда рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдЕрдм рд╣рдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдмрдирд╛рдпреЗрдВрдЧреЗ, рд╡реЗрдм рдкреЗрдЬ рдкрд░ LED рдХрдВрдЯреНрд░реЛрд▓ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдПрд▓рдИрдбреА рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ GPIO рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд▓рдИрдбреА рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдореИрдВ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрд▓рдИрдбреА рдХреЛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рдХреЛрдИ рднреА рдЗрд╕реЗ 5 рдорд┐рдирдЯ рдореЗрдВ Google рдореЗрдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдмрд╛рд░ рдореЗрдВ GPIO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд┐рд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред
try: import RPi.GPIO as GPIO except ModuleNotFoundError: pass led_pin = 21 def raspberrypi_init(): try: GPIO.setmode(GPIO.BCM) GPIO.setup(led_pin, GPIO.OUT) except: pass def rasperrypi_pinout(pin: int, value: bool): print("LED ON" if value else "LED OFF") try: GPIO.output(pin, value) except: pass def rasperrypi_cleanup(): try: GPIO.cleanup() except: pass
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ GPIO рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдХреЛрд╢рд┐рд╢-рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдореЗрдВ "рд▓рд┐рдкрдЯреЗ" рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рдВрдбреЛрдЬ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдкреАрд╕реА рдкрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЕрдм рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░рд╛ рдХрд╛рдо рд╡реЗрдм рдкреЗрдЬ рдкрд░ рдмрдЯрди рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдПрд▓рдИрдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ 3 рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рдзрд┐ 1: рдЧрд▓рдд
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЫреЛрдЯрд╛ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред
HTML рдкреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрди рдмрдирд╛рдПрдВред
html = '''<html> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;} .button_led {display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;} </style> <body> <h2>Hello from the Raspberry Pi!</h2> <p><a href="/led/on"><button class="button button_led">Led ON</button></a></p> <p><a href="/led/off"><button class="button button_led">Led OFF</button></a></p> </body> </html>'''
рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп 3 рдмрд┐рдВрджреБ рд╣реИрдВ:
- рдмрдЯрдиреЛрдВ рдХреА рд╢реИрд▓реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдФрд░ HTML- рдХреЛрдб рдХреА рд╕рд┐рд░реНрдл 4 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╣рдорд╛рд░рд╛ рдкреЗрдЬ "90 рдХреЗ рджрд╢рдХ рд╕реЗ рдЕрднрд┐рд╡рд╛рджрди" рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

- рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реНрдерд╛рдиреАрдп рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ / led / on / and / led / off
- рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдХреЛрдб рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдПрдХ рдмреБрд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рд╣реИ, рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, HTML рдХреЛ рдкрд╛рдпрдерди рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдиреНрдпреВрдирддрдо рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдЕрддрд┐рд░реЗрдХ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдХреЛрдб рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдЙрдкрджреНрд░рд╡ рдХреЗ рдмрд┐рдирд╛, рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдЦ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЗрд╕рдореЗрдВ '/ led / on' рдФрд░ '/ led / off' рд▓рд╛рдЗрдиреЛрдВ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╛рдХреА рд╣реИред рд╕рдВрдкреВрд░реНрдг рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛:
from http.server import BaseHTTPRequestHandler, HTTPServer class ServerHandler(BaseHTTPRequestHandler): def do_GET(self): print("GET request, Path:", self.path) if self.path == "/" or self.path.endswith("/led/on") or self.path.endswith("/led/off"): if self.path.endswith("/led/on"): rasperrypi_pinout(led_pin, True) if self.path.endswith("/led/off"): rasperrypi_pinout(led_pin, False) self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(html.encode('utf-8')) else: self.send_error(404, "Page Not Found {}".format(self.path)) def server_thread(port): server_address = ('', port) httpd = HTTPServer(server_address, ServerHandler) try: httpd.serve_forever() except KeyboardInterrupt: pass httpd.server_close() if __name__ == '__main__': port = 8000 print("Starting server at port %d" % port) raspberrypi_init() server_thread(port) rasperrypi_cleanup()
рд╣рдо рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдЕрдкрдиреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд▓рдИрдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЖрдк рд╕рд░реНрд╡рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рди рдХреЗрд╡рд▓ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдпрд╛ рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рдВрддреНрд╡рдирд╛ рдореЗрдВ рдПрд▓рдИрдбреА рдмрдЯрди рд╣реЛрдЧрд╛, рдЬрдм рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдВрджреЗрд╢ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ:

рдЕрдм рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ рдЦрд░рд╛рдм рдХреНрдпреЛрдВ рд╣реИ, рдФрд░ рдпрд╣ "рдЧрд▓рдд" рдХреНрдпреЛрдВ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреА рдмрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИ рдЬрдм рд╣рдо рд╕рд┐рд░реНрдл рдПрд▓рдИрдбреА рдХреЛ рд░реЛрд╢рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЖрдзреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рджреВрд╕рд░реА рдФрд░ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдПрд▓рдИрдбреА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреГрд╖реНрда рдХрд╛ рдкрддрд╛
http://192.168.1.106:8000/led/on рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдВрддрд┐рдо рдЦреБрд▓реЗ рдкреГрд╖реНрда рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрд▓рдИрдбреА рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рднрд▓реЗ рд╣реА рд╣рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдЧрд▓реЗ, рдЕрдзрд┐рдХ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред
рд╡рд┐рдзрд┐ 2: рд╕рд╣реА рд╣реИ
рд╕рдм рдХреБрдЫ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдПрд▓рдИрдбреА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдкреГрд╖реНрда рдХрд╛ HTML рдХреЛрдб рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
html = '''<html> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;} .button_led {display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;} </style> <script type="text/javascript" charset="utf-8"> function httpGetAsync(method, callback) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) callback(xmlHttp.responseText); } xmlHttp.open("GET", window.location.href + method, true); xmlHttp.send(null); } function ledOn() { console.log("Led ON..."); httpGetAsync("led/on", function(){ console.log("Done"); }); } function ledOff() { console.log("Led OFF..."); httpGetAsync("led/off", function(){ console.log("Done"); }); } </script> <body> <h2>Hello from the Raspberry Pi!</h2> <p><button class="button button_led" onclick="ledOn();">Led ON</button></p> <p><button class="button button_led" onclick="ledOff();">Led OFF</button></p> </body> </html>'''
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ href рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдФрд░ рд╣рдо ledOn рдФрд░ ledOff рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдкреЗрдЬ рддрдм рддрдХ рдмреНрд▓реЙрдХ рди рд╣реЛ рдЬрд╛рдП рдЬрдм рддрдХ рдХрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдЖрддреА)ред
рдЕрдм рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
def do_GET(self): print("GET request, path:", self.path) if self.path == "/": self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(html.encode('utf-8')) elif self.path == "/led/on": self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() rasperrypi_pinout(led_pin, True) self.wfile.write(b"OK") elif self.path == "/led/off": self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() rasperrypi_pinout(led_pin, False) self.wfile.write(b"OK") else: self.send_error(404, "Page Not Found {}".format(self.path))
рдЕрдм, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреГрд╖реНрда рдЕрдм рдПрд▓рдИрдбреА рдХреЛ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд░рддреА рд╣реИ рдЬреЛ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд┐рдзрд┐ 3: рдЕрдзрд┐рдХ рд╕рд╣реА
рд▓рдЧрддрд╛ рд╣реИ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб (рдФрд░) рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрд▓рдИрдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЬрдЧрд╣ рдмрдЪрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐рдкреВрд░реНрд╡рдХ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ - рд╕рд░реНрд╡рд░ рд╕реЗ
рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП GET рдЕрдиреБрд░реЛрдз рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП
рд╣реИрдВ , рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╣реА рддрд░реАрдХрд╛ POST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ,
рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг)ред
рд╣рдо HTML рдореЗрдВ рдХреЙрд▓ рдХреЛ рдкреЛрд╕реНрдЯ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рд╣рдо рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдФрд░ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рдПрдХ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
html = '''<html> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;} .button_led {display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;} </style> <script type="text/javascript" charset="utf-8"> function httpPostAsync(method, params, callback) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) callback(xmlHttp.responseText); else callback(`Error ${xmlHttp.status}`) } xmlHttp.open("POST", window.location.href + method, true); xmlHttp.setRequestHeader("Content-Type", "application/json"); xmlHttp.send(params); } function ledOn() { document.getElementById("textstatus").textContent = "Making LED on..."; httpPostAsync("led", JSON.stringify({ "on": true }), function(resp) { document.getElementById("textstatus").textContent = `Led ON: ${resp}`; }); } function ledOff() { document.getElementById("textstatus").textContent = "Making LED off..."; httpPostAsync("led", JSON.stringify({ "on": false }), function(resp) { document.getElementById("textstatus").textContent = `Led OFF: ${resp}`; }); } </script> <body> <h2>Hello from the Raspberry Pi!</h2> <p><button class="button button_led" onclick="ledOn();">Led ON</button></p> <p><button class="button button_led" onclick="ledOff();">Led OFF</button></p> <span id="textstatus">Status: Ready</span> </body> </html>'''
рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП GET рдФрд░ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ:
import json class ServerHandler(BaseHTTPRequestHandler): def do_GET(self): print("GET request, path:", self.path) if self.path == "/": self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(html.encode('utf-8')) else: self.send_error(404, "Page Not Found {}".format(self.path)) def do_POST(self): content_length = int(self.headers['Content-Length']) body = self.rfile.read(content_length) try: print("POST request, path:", self.path, "body:", body.decode('utf-8')) if self.path == "/led": data_dict = json.loads(body.decode('utf-8')) if 'on' in data_dict: rasperrypi_pinout(led_pin, data_dict['on']) self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() self.wfile.write(b"OK") else: self.send_response(400, 'Bad Request: Method does not exist') self.send_header('Content-Type', 'application/json') self.end_headers() except Exception as err: print("do_POST exception: %s" % str(err))
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рд╣рдо рдПрдХ рдПрд▓рдИрдбреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ "рдСрди" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЯреНрд░реВ рдпрд╛ рдЧрд▓рдд рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдЬрдм HTML рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлреЙрд░реНрдо рдХрд╛ {"рдСрди": true} рдХрд╛ рдПрдХ json рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд░рдорд╢рдГ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ)ред рдпрд╣ рдХреЛрд╢рд┐рд╢-рдкрдХрдбрд╝рдиреЗ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЛ рдЧрд┐рд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдХреЛрдИ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдорд╛рдиреНрдп рдЬреЛрдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬрддрд╛ рд╣реИред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрд╡рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрджреЗрд╢ "рдУрдХреЗ", рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреБрд╖реНрдЯрд┐ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрднреА рддрдХ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд┐рдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдХреЛ рди рдХреЗрд╡рд▓ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдШреБрдорд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдореЗрдВ рдПрдХ рдорд┐рдиреА-рд╕рд░реНрд╡рд░ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд▓рдИрдбреА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдорд╣рддреНрд╡рдкреВрд░реНрдг: рд╕реБрд░рдХреНрд╖рд╛ рд╕рд╛рд╡рдзрд╛рдирд┐рдпрд╛рдВрдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдпрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрд┐рдореНрдореЗрджрд╛рд░ рд▓реЛрдб рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдРрд╕реЗ рдкреЗрдЬ рдХреЛ "рдкреЛрд╕реНрдЯ" рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдорд▓реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИрдВ, рдлрд┐рд░ рднреА рдпрд╣ рдХрд┐рд╕реА рдХреЛ рджреЗрдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рджреВрд░ рд╕реЗ рдЧреЗрд░рд╛рдЬ рджрд░рд╡рд╛рдЬрд╛ рдЦреЛрд▓рдиреЗ рдпрд╛ рдХрд┐рд▓реЛрд╡рд╛рдЯ рд╣реАрдЯрд░ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдРрд╕реЗ рдкреГрд╖реНрда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реАрдкреАрдПрди рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЙрдкрдпреЛрдЧреА рдереАред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЦрд╛рдмрд░ рдкрд░ рд╣рд░ рдХреЛрдИ "рдбрдореА рдХреЗ рд▓рд┐рдП" рд▓реЗрдЦ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓рд╛ рднрд╛рдЧ рдЕрдВрддрд┐рдо рдЧреНрд░реЗрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ рдпрд╣ рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрд░реАрдХреЗ рднреАред
рд╕рднреА рд╕рдлрд▓ рдкреНрд░рдпреЛрдЧред