У меня сегодня просто креатив так и идет.
Написал еще один интересный скрипт на Python для SL4A. Что такое Scripting Later For Android (SL4A) и Python и причем тут плата Марсоход можно почитать вот здесь. Ну или вот краткое содержание предыдущих серий:
- Плату Марсоход подключаю к телефону через аудио разъем.
- На телефоне проигрываю короткие (100 миллисекунд) аудио файлы разной тональности (1000Гц, 1200Гц и так далее).
- ПЛИС платы Марсоход содержит схему, которая измеряет частоту тона и в соответствии с этим зажигает светодиоды платы.
- На телефоне можно запускать маленькие программы - скрипты, например на языке Python, которые теперь могут управлять светодиодами платы.
Теперь мой новый скрипт на Python реализует... WebServer на телефоне.
К веб серверу на телефоне можно подключиться обыкновенным браузером и увидите вот такую картину:
Нажимаете на кнопочку "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
Вот видео демонстрация этого проекта:
Теперь можно строить более сложные системы удаленного управления с простым браузерным интерфейсом.
Подробнее...