рд╡реЗрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ Arduino рдХрд╛ рд╕рд░рд▓ рдирд┐рдпрдВрддреНрд░рдг

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



рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
- HTTP рд╕рд░реНрд╡рд░
- рдЕрдЬрдЧрд░ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░
- рдЕрд░реНрдбреБрдЗрдиреЛ
рдпрд╣рд╛рдВ рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рдХрд╣рд╛рдВ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рджреЛрд╕реНрдд рдХреИрд╕реЗ рдмрдирд╛рдПрдВ
рдЕрдм рдХреНрд░рдо рдореЗрдВред рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЕрдкрд╛рдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рд╣реИрдВ рдФрд░ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдбреЗрдирд╡рд░ рдкреИрдХреЗрдЬ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдЕрдкрд╛рдЪреЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдкрд╛рдпрдерди (рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 3.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛) рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рднреА рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЕрдкрд╛рдЪреЗ рдФрд░ рдЕрдЬрдЧрд░ рдХреЗ рджреЛрд╕реНрдд рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ рдХреЛ рд╕реАрдЬреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЬрд┐рд╕ рдЬрдЧрд╣ рдкрд░ рдЕрдкрдирд╛ рдЕрдкрд╛рдЪреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕ рдЬрдЧрд╣ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ httpd.conf рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ (рдпрджрд┐ рдЖрдкрдиреЗ рдбреЗрд╡реЗрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдкрде рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛: [рд╡рд░реНрдЪреБрдЕрд▓ рдбреНрд░рд╛рдЗрд╡ рд▓реЗрдЯрд░]: \ usr \ local \ bin \ apache)

рд╣рдо рдПрдХ рд▓рд╛рдЗрди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

AddHandler cgi-script .cgi

рдЕрдВрдд рдореЗрдВ .py рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЛрдИ # рдЪрд┐рд╣реНрди рди рд╣реЛред рд╕рд╣реЗрдЬреЗрдВ, рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред
рдЕрдм, рдЕрдЬрдЧрд░ рдФрд░ рдЕрдкрд╛рдЪреЗ рдХреА рдХрд░реАрдмреА рджреЛрд╕реНрддреА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдШрд░ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
#!/Python33/python.exe print ("STATUS: 200 OK\n\n") print ("<b>hello world</b>") 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЬрд╣рд╛рдВ рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдкрддрд╛ C: /Python33/python.exe рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрдВрдЧреЗред рдЗрд╕реЗ рдЖрдк рдЬреЛ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдирд╛рдо рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / my_first_test_phyton_file.pyред рдпрджрд┐ рдЖрдк рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдареАрдХ рд╣реИред


рдореБрдЦреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИ:
 //    Arduino var serialPort = 'COM5'; //   var Arduino = function(command, callback){ $.get('c.py',{ c:command, p:serialPort }, callback); } 


рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдкрдиреЗ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛, рд╡рд╣ рдмрдВрджрд░рдЧрд╛рд╣ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдиреЗ рдЖрд░реНрдбрд┐рдиреЛ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИред рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдХрд┐рд╕ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИред
рдЕрдм, рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: Arduino (123), рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреЙрд░реНрдо c.py рдХрд╛ ajax рдЕрдиреБрд░реЛрдз рдмрдирд╛рдПрдЧреА? C = 123 & p = COM5 рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ python script c.py? рдЧреМрд░ рдХреАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ:
 #!/Python33/python.exe import serial import cgi print ("STATUS: 200 OK\n") req = cgi.FieldStorage(); ser = serial.Serial(req['p'].value, 9600, timeout=1) ser.write(bytes(req['c'].value,'latin')) ser.close() print ("ok") 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╕ "c" рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ "p" рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ "ok" рд▓рд┐рдЦрддрд╛ рд╣реИред рд╕рд╕реНрддрд╛ рдФрд░ рд╣рдВрд╕рдореБрдЦред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рди рдХреЗрд╡рд▓ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░рд╛рдкреНрдд рднреА рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЕрдзрд┐рдХ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ
рд╣рдо рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗред
 //   var Arduino = function(sp, errorCallback) { this.serialPort = sp; this.errorCallback = errorCallback || function(){ console.log('Error'); } this.send = function(data, callback){ var callback = callback; var self = this; data['p'] = this.serialPort; data['s'] = Math.round(Math.random()*1000); //  ,     $.ajax({ url:'c.py', data:data, success:function(data){ if($.trim(data) == 'error'){ self.errorCallback(); } else { if(typeof callback == "function") callback(data); } } }); } // this.set = function(command, callback){ this.send({ c:command, r:0 }, callback); } //    this.get = function(command, callback){ this.send({ c:command, r:1 //    " " }, callback); } } 

рдЕрдм, рдЪреВрдВрдХрд┐ рд╣рдордиреЗ Arduino рдХреЛ рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЙрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧреА:
 var myArduino = new Arduino('COM5'); myArduino.set(113); //    13 myArduino.get(36,function(data){console.log(data)}); //   6.      

рдареАрдХ рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 #!/Python33/python.exe import serial import cgi print ("STATUS: 200 OK\n") req = cgi.FieldStorage(); try: ser = serial.Serial(req['p'].value, 9600, timeout=1) except: print("error") exit() ser.write(bytes(req['c'].value,'latin')) if int(req['r'].value) == 1: res = ''; while not res: res = ser.readline() print(res.decode('UTF-8')) else: print ("ok") ser.close() 

рдпрд╣рд╛рдВ, рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрдм рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреИрд░рд╛рдореАрдЯрд░ r = 1 рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ Arduino рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред
рдФрд░ рд╣рдордиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ "рддреНрд░реБрдЯрд┐" рдХреАрд╡рд░реНрдб рд▓реМрдЯрд╛рдПрдЧрд╛

рдЖрдЗрдП рдЕрдм рдЕрд░реБрдбрд┐рдиреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреЗрдЪ рджреЗрдЦреЗрдВ, рдЬреЛ рдпрд╣ рд╕рдм рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:
 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); } String getParam(){ String re; while (Serial.available()) { re.concat(Serial.read()-48); } return re; } int getPin(String p){ return p.substring(0,2).toInt(); } int getVal(String p){ return p.substring(2,6).toInt(); } //   void loop() { while (Serial.available()) { char command = (char)Serial.read(); String param = getParam(); int pin = getPin(param); int p; switch (command) { case '0': //Digital write pinMode(pin,OUTPUT); digitalWrite(pin, LOW); break; case '1': //Digital write pinMode(pin,OUTPUT); digitalWrite(pin, HIGH); break; case '2': //Servo myservo.attach(pin); p = getVal(param); myservo.write(p); break; case '3': //Digital read pinMode(pin,INPUT); Serial.print(digitalRead(pin)); break; case '4': { //Analog read int aPin = A0; switch (pin) { case 1: aPin = A1; break; case 2: aPin = A2; break; case 3: aPin = A3; break; case 4: aPin = A4; break; case 5: aPin = A5; break; } Serial.print(analogRead(aPin)); } break; case '5': //Analog write pinMode(pin,OUTPUT); p = getVal(param); analogWrite(pin, p); break; } } } 

рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдкрд░ рд╣рдо рдкреНрд░рдкрддреНрд░ рдХреА рдЖрдЬреНрдЮрд╛рдПрдБ рдкреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ: 1234567 рдЬрд╣рд╛рдБ:
[рез] - рдЯреАрдо рд╕рдВрдЦреНрдпрд╛
[реирей] - рдкрд┐рди рдирдВрдмрд░
[рекрелрем data] - рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдкрд┐рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
113 - рдкрд┐рди 13 рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рд╛рдИ рд╕реНрдЯреЗрдЯ рдХреЛ рдЗрд╕рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд рдпрд╣ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ)ред
013 - рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкрд┐рди 13 рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ LOW рд╕реНрдерд┐рддрд┐ (рдпрд╛рдиреА рдпрд╣ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ) рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред
209100 - рд╕рд░реНрд╡реЛ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рди 9 рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ PWM рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рди 100 рджреЗрддрд╛ рд╣реИред
310 - рдкрд┐рди 10 рдХреЛ рдЗрдирдкреБрдЯ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ High / LOW рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд╢рдГ 1 рдпрд╛ 0 рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рд╕реНрд╡рд┐рдЪ рдХреЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдХрдорд╛рдВрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреБрдЫ рд╕реБрдВрджрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

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

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

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рд▓реЗрдЦ
рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдореЗрдВ iPad рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рд╢реБрд▓реНрдХ oneUrl рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

рдореИрдВрдиреЗ рдХрд░реНрдо рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╖рдпрдЧрдд рд╣рдм рдирд╣реАрдВ рдбрд╛рд▓реЗред
рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИред рдореБрдЭреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

UPD: рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рдореИрдВрдиреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ MacOS рдкрд░ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд┐рдпрд╛ред рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рдЕрдЬрдЧрд░ рдЖрдорддреМрд░ рдкрд░ рдореИрдХ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЕрдкрд╛рдЪреЗ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рдмрдирд╛рдирд╛ рд╣реИред C.py рдореЗрдВ рдкрд╣рд▓реА рд▓рд╛рдЗрди рд╣реЛрдЧреА
#!/usr/bin/python
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдЬрдЧрд░ рдкрд╛рдЗрд╕реЗрд░рд┐рдпрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
easy_install -U pyserial
рдЗрд╕рдХреЗ рдмрд╛рдж, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЕрдЬрдЧрд░ рдХрд╛ рдкреВрд░реНрд╡рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рд▓рд╛рдЗрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ
 ser.write(bytes(req['c'].value,'latin')) 

рдореИрдВрдиреЗ рдЙрд╕рдХреА рдЬрдЧрд╣ рд▓реЗ рд▓реА
 ser.write(bytes(req['c'].value.decode('latin'))) 

рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдХрд┐ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд┐рд╕ рдкреЛрд░реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдпрдВ Arduino рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдореЗрдиреВ рдЙрдкрдХрд░рдг-> рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛: / рджреЗрд╡ / cu.usbmodemfd141
рдореИрдВ рдЖрдк рд╕рднреА рдХреЗ рд╕рдлрд▓ рдЕрдиреБрднрд╡реЛрдВ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред

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


All Articles