Удаленное управление платой Марсоход через телефон с Android

У меня сегодня просто креатив так и идет.

Написал еще один интересный скрипт на Python для SL4A. Что такое Scripting Later For Android (SL4A) и Python и причем тут плата Марсоход можно почитать вот здесь. Ну или вот краткое содержание предыдущих серий:

  • Плату Марсоход подключаю к телефону через аудио разъем.
  • На телефоне проигрываю короткие (100 миллисекунд) аудио файлы разной тональности (1000Гц, 1200Гц и так далее).
  • ПЛИС платы Марсоход содержит схему, которая измеряет частоту тона и в соответствии с этим зажигает светодиоды платы.
  • На телефоне можно запускать маленькие программы - скрипты, например на языке Python, которые теперь могут управлять светодиодами платы.

Теперь мой новый скрипт на Python реализует... WebServer на телефоне.

К веб серверу на телефоне можно подключиться обыкновенным браузером и увидите вот такую картину:

WebServer на телефоне с Android и управление внешним миром
Нажимаете на кнопочку "One" в браузере и на плате Марсоход подключенной к телефону загорается первый светодиод.

 

Скрипт Python для реализации этой функции вот такой:

 


 

"""HTTP server"""

import android
import BaseHTTPServer
import socket
import urlparse

HOST_NAME   = ''
PORT_NUMBER = 9090

droid = android.Android()

PAGE_TEMPLATE = '''
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>DroidBot Remote Control</title>
<style type="text/css">
#action {
background:yellow;
border:0px solid #555;
color:#555;
width:0px;
height:0px;
padding:0px;
}
</style>
<script>
function AddText(text)
{
document.myform.action.value=text;
}
</script>
</head>
<body>
<h1>Switch Marsohod LEDs:</h1>
<form name="myform" method="get">
<textarea id="action" name="action"></textarea>
<input id="button1" type="submit" value="One" OnClick='javascript:AddText ("1")' />
<input id="button2" type="submit" value="Two"  OnClick='javascript:AddText ("2")'  />
<input id="button3" type="submit" value="Three"  OnClick='javascript:AddText ("3")'  />
<input id="button4" type="submit" value="Four"  OnClick='javascript:AddText ("4")'  />
</form>
</body>
</html>
'''


def play( id ):
  if   (id=='1'):
   droid.mediaPlay('/mnt/sdcard/media/audio/s1000.wav')
  elif (id=='2'):
   droid.mediaPlay('/mnt/sdcard/media/audio/s1200.wav')
  elif (id=='3'):
   droid.mediaPlay('/mnt/sdcard/media/audio/s1400.wav')
  elif (id=='4'):
   droid.mediaPlay('/mnt/sdcard/media/audio/s1600.wav')

class DroidHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  def do_HEAD(s):

   s.send_response(200)
   s.send_header("Content-type", "text/html; charset=utf-8")
   s.end_headers()

  def do_GET(s):
   s.send_response(200)

   url = urlparse.urlsplit(s.path)

   print url.path
   if url.path == '/':            
    query = url.query
    args = urlparse.parse_qsl(query)

    action = ''

    for arg in args:
     if arg[0] == 'action':
       action = arg[1].strip().replace('\r', '')
       print(action)
       play(action)
       break

    s.send_header("Content-type", "text/html; charset=utf-8")
    s.end_headers()

    html = PAGE_TEMPLATE
    s.wfile.write(html)

print 'web server running on port %s' % PORT_NUMBER
my_srv = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER), DroidHandler)
my_srv.serve_forever()


 

Этот скрипт переносите на телефон, запускаете SL4A из него уже запускаете скрипт.

Перед тем как запускать скрипт нужно узнать текущий IP адрес телефона. Для этого зайдите в настройки телефона: Все настройки => Беспроводные сети => Настройки WiFi и дальше выбираете вашу сеть и появляется информационное окно, в котором написан IP адрес.

После запуска скрипта можно его пробовать.

В адресной строке браузера указываете IP адрес телефона и через двоеточие номер порта нашего WebServer 9090, например: http://192.168.1.200:9090

Вот видео демонстрация этого проекта:

Теперь можно строить более сложные системы удаленного управления с простым браузерным интерфейсом.

 

 

 

Добавить комментарий