рддреЛ рдирдП рд╕рд╛рд▓ рдХреА рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рдЖрдИрдВ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЦрд╛рд▓реА рд╕рдордп рдерд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдорд┐рд╣реЛрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореИрдиреБрдЕрд▓ рдирд┐рдпрдВрддреНрд░рдг рджреЗрдЦрд╛, рдореБрдЭреЗ рддреБрд░рдВрдд рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рд╣рдо рдбреБрдЕрд▓рд╢реЙрдХ v4 рдЧреЗрдордкреИрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ!
рдЪрд░рдг 1, рдЯреЛрдХрди рдЦреАрдВрдЪрдХрд░, рдЪрдордХрддреА (рд╡реИрдХрд▓реНрдкрд┐рдХ)
рд╣рдордиреЗ рдкреИрдЪ рдХрд┐рдП рдЧрдП MiHome рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд╛рд▓рд╛, рдЬреЛ рд╣рдореЗрдВ рдЯреЛрдХрди рджрд┐рдЦрд╛рдПрдЧрд╛, рдлрд┐рд░ рд░реВрдЯ рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ python-miio (pip install python-miio), рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ
mirobo --ip %ip% --token %token% update-firmware %filename%
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХрд╛
mirobo --ip %ip% --token %token% update-firmware %filename%
рдФрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рдм рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ред рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдиреЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рдЧреБрдЧреНрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдорд┐рд░рдмреЛ рдФрд░ рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛ рдХреЗ рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА! рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдХрдИ рдПрдбреЗрдкреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓рдмреЙрдХреНрд╕ рд╣реЛрд╕реНрдЯ-рдУрдирд▓реА рдПрдбреЙрдкреНрдЯрд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдЕрдЧрд▓рд╛, рдореИрдВрдиреЗ рдЕрднреА рдлрд╝рд╛рдЗрд▓ рд╕рд░реНрд╡рд░ рдЙрдард╛рдпрд╛ рдФрд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ
mirobo --ip=%ip% --token=%token% raw-command miIO.ota '{"mode":"normal", "install":"1", "app_url":"http://%my_ip:port%/%filename%.pkg", "file_md5":"%md5%","proc":"dnld install"}'
:
mirobo --ip=%ip% --token=%token% raw-command miIO.ota '{"mode":"normal", "install":"1", "app_url":"http://%my_ip:port%/%filename%.pkg", "file_md5":"%md5%","proc":"dnld install"}'
ред рдлрд░реНрдорд╡реЗрдпрд░ 10 рдорд┐рдирдЯ рдореЗрдВ рдЙрда рдЧрдпрд╛, ssh рдПрдХреНрд╕реЗрд╕ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛
рдЪрд░рдг 2, рд░реЛрдмреЛрдЯ рдХреА рд╕рд╡рд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
import miio ip = '' token = '' bot = miio.vacuum.Vacuum(ip, token) bot.manual_start() bot.manual_control(0, 0.3, 2000)
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдХреЛ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ (рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рд╕рдорд╛рди), рдЯреНрд╡рд┐рдЪ рдФрд░ рд╕реНрдЯреЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЪрд░рдг 3, рдбреНрдпреВрд▓рд╢реЙрдХ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рдереЛрдбрд╝реЗ рд╢реЛрдз рдХреЗ рдмрд╛рдж, pygame рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдмрдЯрди / рд╕реНрдЯрд┐рдХрд░ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ BUTTON_SQUARE = 0 BUTTON_X = 1 BUTTON_CIRCLE = 2 BUTTON_TRIANGLE = 3 def init_joystick(): pygame.init() pygame.joystick.init() controller = pygame.joystick.Joystick(0) controller.init() return controller def main(): controller = init_joystick() bot = miio.vacuum.Vacuum(ip, token) modes = ['manual', 'home', 'spot', 'cleaning', 'unk'] mode = 'unk' axis = [0.00 for _ in range(6)] flag = True button = [False for _ in range(14)] print('Press start to start!') while flag: for event in pygame.event.get(): if event.type == pygame.JOYAXISMOTION: axis[event.axis] = round(event.value,2) elif event.type == pygame.JOYBUTTONDOWN: button[event.button] = True
рдЕрднреА рдХреЗ рд▓рд┐рдП, Move_robot рдореЗрдВ, рдЖрдк рдмрд╕ (рдЕрдХреНрд╖) рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреА рд╕рд╡рд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдмрдЯрди / рд╕реНрдЯрд┐рдХ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВрдиреЗ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рд╡рд╛рдИ рдЕрдХреНрд╖ (рдмрд╛рдПрдВ -1, рдиреАрдЪреЗ 1) рдкрд░ рдмрд╛рдИрдВ рдЫрдбрд╝реА рдХреЛ рдЪреБрдирд╛ рдФрд░ рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рджрд╛рдИрдВ рдЫрдбрд╝реА, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛ред
def translate(value, leftMin, leftMax, rightMin, rightMax): leftSpan = leftMax - leftMin rightSpan = rightMax - rightMin valueScaled = float(value - leftMin) / float(leftSpan) return rightMin + (valueScaled * rightSpan) def move_robot(bot, buttons, axis): rot = 0 val = 0 to_min, to_max = -0.3, 0.3
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ, рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ X рджрдмрд╛рдПрдВ рдФрд░ рд░реЛрдмреЛрдЯ рдХреЛ рд╕рд╡рд╛рд░реА рдФрд░ рдореБрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА: рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрджрд┐ рдЖрдк рдмрд╛рдИрдВ рдЫрдбрд╝реА рдХреЛ рдЕрдВрдд рддрдХ рдЖрдЧреЗ рджрдмрд╛рддреЗ рд╣реИрдВ рдФрд░ рдореБрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдореБрдбрд╝ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдзреАрдорд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдк рдореИрдкрд┐рдВрдЧ рдорд╛рди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯ -09: 0.29, рдпрд╣ рд╕рд░реНрдХрд▓ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред , рдЬрдм рддрдХ рдмрд╛рдПрдВ рд╕реНрдЯреАрдХрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рдмрджрд▓рддреА, рддрдм рддрдХ рдореБрдЭреЗ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ
рдЪрд░рдг 4, рдХреБрдЫ рд╕рдВрдЧреАрдд рдЬреЛрдбрд╝реЗрдВ
рд╣рдо рдЕрдкрдиреЗ рд░реЛрдмреЛрдЯ рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред
рдХреЛрдИ рдкрд╛рдпрдерди рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдореЛрддреА рдорд┐рд▓рд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рд╕реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдерд╛ред
рдЕрдЧрд▓рд╛, sox рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
sudo apt-get install sox, libsox-fmt-mp3
рдФрд░ рдореЛрддреА рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд░реНрд╡рд░ рд▓рд┐рдЦреЗрдВ:
sudo perl sound_server.pl
рд╣рдорд╛рд░реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ
import socket ip = '' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, 7777)) s.sendall(b'http://%local_ip%:%local_port%/test.mp3;') s.close()
рдФрд░ рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ test.mp3 рдХреЛ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП (рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рд╣рдорд╛рд░рд╛ play_sound () рдлрд╝рдВрдХреНрд╢рди рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ sendall (url + ';') рд╣реЛрдЧрд╛, url рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ рд╣реИред
рдкрд░рд┐рдгрд╛рдо