Android + МК: BlueScripts

Хочу рассказать про одно приложение, позволяющее смартфону управлять устройствами на МК через Bluetooth. Оно реализует только самый базовый функционал, но зато мало весит и с ним легко работать.




BlueScripts при старте парсит файл /mnt/sdcard/BlueScripts.xml (/mnt/sdcard это корневая папка карты памяти) и создает меню, каждый пункт в котором связан с записью в файле. Запись состоит из названия, которое показывается в меню, текствой строки-команды и MAC-адреса устройства, на которое эта строка будет отправлена. Пар MAC: команда в одном пункте меню может быть несколько, таким образом можно одним кликом отправить несколько куманд на одно устройство, или разным устройствам.

При нажатии на какой-нибудь пункт меню, программа подключается к нужному устройству и передает ему команду по протоколу SPP («UART over Bluetooth» :). Каждая команда завершается переносом строки 0x0D 0x0A. Устройство может сказать что-нибудь в ответ, и тогда это появится в логе программы:



Для того, чтобы ответ дошел, необходимо приклеить марку отправить в конце 0x04. Символы переноса строки не нужны.

По непонятным причинам ответ иногда доходит немного помятым или без первых байт. Такое впечатление, что тут замешана Почта России :) Например, вместо слова killed может дойти:
klld
illed
llld
или что-нибудь подобное.

Глюк именно в программе, а не в BT-модуле или чем-либо другом. Написал автору: он подтвердил, что бага известная.

Пример файла /mnt/sdcard/BlueScripts.xml

<!-- Так обозначается комментарий -->
<doc> <!-- C этого должен начинаться файл -->
	<script> <!-- Каждый элемент script это пункт меню -->
		<name>Light off</name> <!-- Название, которое будет отображаться в меню -->
		<action> <!-- action описывает команду, которая будет оправлена при нажатии на пункт меню -->
			<address>00:11:12:30:71:33</address> <!-- MAC адрес получателя -->
			<message>0</message> <!-- Команда, которая будет отправлена устройству -->
		</action>
	</script>	
	<script> <!-- Второй пункт меню -->
		<name>Light on</name>
		<action>
			<address>00:11:12:30:71:33</address>
			<message>1</message>
		</action>
	</script>
	<script> <!-- Третий пункт -->
		<name>2 messages</name>
		<action>
			<address>00:11:12:30:71:33</address>
			<message>message 1</message>
		</action>
		<action> <!-- Второй элемент "action" выполняется сразу за первым-->
			<address>00:11:12:30:71:33</address>
			<message>message 2</message>
		</action>
	</script>
</doc>


Сначала я хотел написать для демонстрации программку под МК, которая бы включала и выключала нагрузку по команде с телефона. Но потом на глаза попался Terminal by Bray++ и я наваял скрипт:

program ScriptTest;

var s: string;
begin
	ComSetRTS(true);

	while true do
	begin
		Delay(100);
		s := comreadln();

		if s='0' then 
		begin
			writeln('light: off');
			ComSendstr('light: off'+#004);
			ComSetRTS(true);
		end;

		if s='1' then 
		begin
			writeln('light: on');
			ComSendstr('light: on'+#004);
			ComSetRTS(false);
		end;

	end;
end.


Скрипт слушает блютуз модуль, подключенный к пинборде, и когда тот говорит «0» или «1», переключает пин RTS (это DBUS2). Пин подключен к моей TTL-розетке (схема), в которую воткнут светильник:


Для того, чтобы запустить скрипт, открываем в терминале окно Scripting, копипастим код, открываем нужный порт и нажимаем кнопу «Run».

Вот очередное кино:

Заметьте, что выполнение первой команды задерживается, потому, что программа соединяется с устройством.

Ссылки:
BlueScripts на GooglePlay
Описание на сайте автора
Исходники. Проект для Eclipse

ЗЫЖ
Я один нигде не видел толкового описания скриптового языка для терминала?
  • +2
  • 30 апреля 2012, 14:27
  • dcoder

Комментарии (8)

RSS свернуть / развернуть
dcoder, ты прям жжошь! 4 поста подряд за сутки. Пиши ещё, очень интересно.
0
Чуть более половины из них были написаны еще давно, просто или дописать было лень, или картинки нащелкать :)
0
Круто!!! что за язык написания скриптов? Ява?
Скрипт слушает блютуз модуль, подключенный к пинборде

можно поподробнее…
0
  • avatar
  • Dmi
  • 30 апреля 2012, 15:50
Нет, не ява. Скрипты для терминала пишутся на чем-то вроде паскаля. Только набор функций там сильно ограничен и толкового описания нету (либо я не нашел).

Может в ближайшее время напишу подробнее про эти скрипты
0
Хм… понятно. а что за синий зуб модуль?
0
HC-04
0
Вот сообщество и добралось до Андройда.
0
на android уже много всего выдумывают, оч интересная тема, вот наример
Android Bluetooth Oscilloscope
Honeycomb Tablet Oscilloscope
и программ великое множество, которые помогают в повседневности
надо осваивать ))
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.