Espruino:Примеры/Отправка текста на плату Micro:Bit: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...»)
 
Нет описания правки
 
(не показано 5 промежуточных версий 2 участников)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=Отправка текста на плату Micro:Bit<ref>[https://www.espruino.com/MicroBit+Text www.espruino.com - Sending Text to Micro:Bit]</ref>=


[[File:MicroBit_Text_menu.jpg|center]]


В этом руководстве мы загрузим на [https://www.espruino.com/Pixl.js Pixl.js] код, который будет сканировать окружающее пространство на предмет плат [https://www.espruino.com/MicroBit Micro:bit], запрограммированных с помощью [https://makecode.microbit.org/ MakeCode], а затем при помощи сервиса [[UART]] будет отправлять текст на эти платы.


<syntaxhighlight lang="javascript" enclose="div">
== Код для Micro:bit ==


* Перейдите на [https://makecode.microbit.org/ MakeCode] и включите вверху режим ''«Блоки»''.
* Внизу в подразделе ''«Расширенные»'' найдите блок ''«Расширения»'' и кликните на него (перед этим, возможно, подраздел ''«Расширенные»'' нужно будет раскрыть.
[[File:Система голосования с помощью MicroBit_20210627_2 - MakeCode workplace.jpg|center]]
* Впишите в поле поиска ''«bluetooth»'', нажмите на кнопку с лупой, а затем выберите пакет ''«bluetooth»''.
[[File:Система голосования с помощью MicroBit_20210627_3 - Bluetooth.jpg|center]]
* Откроется новое окно, которое предупредит о том, что пакеты ''«bluetooth»'' и ''«radio»'' несовместимы друг с другом. Кликните на кнопку ''«Удалить расширение(я) и добавить bluetooth»''.
[[File:Система голосования с помощью MicroBit_20210627_4 - Removed.jpg|center]]
* Кликните на иконку с шестерёнкой справа вверху. Откроется меню настроек, выберите в нём пункт ''«Настройки проекта»''.
* Выставьте ползунок ''«Нет необходимости в соединении»'' в состояние ''«Вкл»'' и кликните на ''«Сохранить»''.
[[File:Отправка текста на плату MicroBit_20210627_7 - No pairing.jpg|center]]
* Перетяните в рабочую область блок ''«При начале»'' из секции ''«Основное»''.
* Кликните на секцию ''«Bluetooth»'', затем на ''«еще...»'', возьмите блок ''«Bluetooth-сервис UART»'' и вставьте его внутрь блока ''«При начале»''.
* Откройте секцию ''«Основное»'', возьмите блок ''«Показать значок»'' и вставьте его в блок ''«При начале»'' под блоком ''«Bluetooth-сервис UART»''. Этот значок будет показывать нам, что всё работает исправно.
* Перетяните в рабочую область блок ''«Постоянно»'' из секции ''«Основное»''.
* Вставьте в блок ''«Постоянно»'' блок ''«Показать строку»'' из секции ''«Основное»''.
* Кликните на секцию ''«Bluetooth»'', затем на ''«ещё...»'', возьмите блок ''«Bluetooth UART читать до»'' и вставьте его в блок ''«Показать строку»''.
У вас должно получиться примерно следующее:
[[File:Отправка текста на плату MicroBit_20210627_8 - Done blocks text.jpg|center]]
Теперь кликните на кнопку ''«Скачать»'' слева внизу, чтобы сохранить этот файл на все нужные [[Micro:bit]].
== Код для Pixl.js ==
Код для [[Pixl.js]] будет сканировать окружающее пространство на предмет плат [[Micro:bit]] (но их название должно начинаться с ''«BBC»''), а затем показывать их в меню. Затем, когда вы выберете в меню нужную [[Micro:bit]], вам нужно будет также выбрать текст для отправки – это создаст соединение и отправит текст.
О том, как подключиться к [[Pixl.js]] при помощи [[IDE Espruino]], читайте в [http://wikihandbk.com/wiki/Espruino:Примеры/Быстрый_старт_(Bluetooth_LE) этой статье].
Скопируйте и вставьте код ниже в правую часть [[IDE]], кликните на кнопку загрузки кода и готово!
<syntaxhighlight lang="javascript">
// Сканируем и показываем результат сканирования в меню:
function doScan() {
  Pixl.menu(); // удаляем меню
  Terminal.println("Сканирование...");
  NRF.findDevices(function(devs) {
    var menu = { "" : {title:"Устройства не найдены"} };
    // Добавляем любое устройство,
    // чьё название начинается c «BBC»:
    devs.forEach(function(dev) {
      if (dev.name && dev.name.substr(0,3)=="BBC") {
        found = true;
        menu[""].title = "-- Connect -- ";
        menu[dev.name] = function() {
          askForText(dev);
        };
      }
    });
    // Добавляем в меню опцию для повторного сканирования:
    menu["-> Scan Again"] = function() {
      doScan(); // сканируем
    };
    // Показываем меню:
    Pixl.menu(menu);
  });
}
// Показываем список текстовых сообщений
// для отправки на платы Micro:bit:
function askForText(dev) { 
  Pixl.menu({
    "":{title:"Which text?"},
    "Hello":function() { doConnect(dev,"Hello\n"); },
    "Goodbye":function() { doConnect(dev,"Goodbye\n"); },
    "A Test":function() { doConnect(dev,"A Test\n"); },
    "-> Scan Again":function() { doScan(); },
  });
}
/* Подключаемся и отправляем текст (максимум 20 символов).
  UART в Micro:bit – это не стандартный сервис Nordic UART,
  так что мы не сможем воспользоваться встроенными библиотеками,
  и нам придётся всё делать вручную. */
function doConnect(dev, text) {
  Pixl.menu(); // удаляем меню
  Terminal.println("Подключение...");
  var device;
  dev.gatt.connect().then(function(d) {
    Terminal.println("Подключились! Поиск сервиса");
    device = d;
    return d.getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
  }).then(function(s) {
    Terminal.println("Поиск характеристики");
    return s.getCharacteristic("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
  }).then(function(c) {
    Terminal.println("Отправка");
    return c.writeValue(text);
  }).then(function() {
    device.disconnect();
    Terminal.println('Готово!');
    setTimeout(function() {
      doScan();
    }, 2000);
  }).catch(function(err) {
    print(err);   
    Terminal.println("Ошибка!");
    setTimeout(function() {
      doScan();
    }, 2000);
    if (device) device.disconnect();
  });
}
// При инициализации запускаем сканирование:
function onInit() {
  doScan();
}
onInit();
</syntaxhighlight>
</syntaxhighlight>
Напечатайте save(), чтобы сохранить этот код в долговременную память [[Pixl.js]]. В результате он будет автоматически запускаться после перезагрузки и включения после отключения от питания.
[[Файл:MicroBit Text menu.jpg|center]]
== Расширение функционала ==
Теперь, когда мы можем отправлять текст на [[Micro:bit]], давайте загрузим на [[Micro:bit]] код, который будет проверять, не является ли присланный текст командой, и если да, то также выполнять действие, заданное в этой команде. К примеру, с помощью команды ''«forward»'' мы можем передвинуть робота [[Micro:bit]] вперёд.
[[File:Отправка текста на плату MicroBit_20210627_9 - Expansion text.jpg|center]]


=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 19: Строка 148:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 15:07, 20 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка текста на плату Micro:Bit[1]

В этом руководстве мы загрузим на Pixl.js код, который будет сканировать окружающее пространство на предмет плат Micro:bit, запрограммированных с помощью MakeCode, а затем при помощи сервиса UART будет отправлять текст на эти платы.

Код для Micro:bit

  • Перейдите на MakeCode и включите вверху режим «Блоки».
  • Внизу в подразделе «Расширенные» найдите блок «Расширения» и кликните на него (перед этим, возможно, подраздел «Расширенные» нужно будет раскрыть.
  • Впишите в поле поиска «bluetooth», нажмите на кнопку с лупой, а затем выберите пакет «bluetooth».
  • Откроется новое окно, которое предупредит о том, что пакеты «bluetooth» и «radio» несовместимы друг с другом. Кликните на кнопку «Удалить расширение(я) и добавить bluetooth».
  • Кликните на иконку с шестерёнкой справа вверху. Откроется меню настроек, выберите в нём пункт «Настройки проекта».
  • Выставьте ползунок «Нет необходимости в соединении» в состояние «Вкл» и кликните на «Сохранить».
  • Перетяните в рабочую область блок «При начале» из секции «Основное».
  • Кликните на секцию «Bluetooth», затем на «еще...», возьмите блок «Bluetooth-сервис UART» и вставьте его внутрь блока «При начале».
  • Откройте секцию «Основное», возьмите блок «Показать значок» и вставьте его в блок «При начале» под блоком «Bluetooth-сервис UART». Этот значок будет показывать нам, что всё работает исправно.
  • Перетяните в рабочую область блок «Постоянно» из секции «Основное».
  • Вставьте в блок «Постоянно» блок «Показать строку» из секции «Основное».
  • Кликните на секцию «Bluetooth», затем на «ещё...», возьмите блок «Bluetooth UART читать до» и вставьте его в блок «Показать строку».

У вас должно получиться примерно следующее:

Теперь кликните на кнопку «Скачать» слева внизу, чтобы сохранить этот файл на все нужные Micro:bit.

Код для Pixl.js

Код для Pixl.js будет сканировать окружающее пространство на предмет плат Micro:bit (но их название должно начинаться с «BBC»), а затем показывать их в меню. Затем, когда вы выберете в меню нужную Micro:bit, вам нужно будет также выбрать текст для отправки – это создаст соединение и отправит текст.

О том, как подключиться к Pixl.js при помощи IDE Espruino, читайте в этой статье. Скопируйте и вставьте код ниже в правую часть IDE, кликните на кнопку загрузки кода и готово!

// Сканируем и показываем результат сканирования в меню:
function doScan() {
  Pixl.menu(); // удаляем меню
  Terminal.println("Сканирование...");
  NRF.findDevices(function(devs) {
    var menu = { "" : {title:"Устройства не найдены"} };
    // Добавляем любое устройство,
    // чьё название начинается c «BBC»:
    devs.forEach(function(dev) {
      if (dev.name && dev.name.substr(0,3)=="BBC") {
        found = true;
        menu[""].title = "-- Connect -- ";
        menu[dev.name] = function() {
          askForText(dev);
        };
      }
    });
    // Добавляем в меню опцию для повторного сканирования:
    menu["-> Scan Again"] = function() {
      doScan(); // сканируем
    };
    // Показываем меню:
    Pixl.menu(menu);
  });
}

// Показываем список текстовых сообщений
// для отправки на платы Micro:bit:
function askForText(dev) {  
  Pixl.menu({
    "":{title:"Which text?"},
    "Hello":function() { doConnect(dev,"Hello\n"); },
    "Goodbye":function() { doConnect(dev,"Goodbye\n"); },
    "A Test":function() { doConnect(dev,"A Test\n"); },
    "-> Scan Again":function() { doScan(); },
  });
}

/* Подключаемся и отправляем текст (максимум 20 символов).
   UART в Micro:bit – это не стандартный сервис Nordic UART,
   так что мы не сможем воспользоваться встроенными библиотеками,
   и нам придётся всё делать вручную. */
function doConnect(dev, text) {
  Pixl.menu(); // удаляем меню
  Terminal.println("Подключение...");
  var device;
  dev.gatt.connect().then(function(d) {
    Terminal.println("Подключились! Поиск сервиса");
    device = d;
    return d.getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
  }).then(function(s) {
    Terminal.println("Поиск характеристики");
    return s.getCharacteristic("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
  }).then(function(c) {
    Terminal.println("Отправка");
    return c.writeValue(text);
  }).then(function() {
    device.disconnect();
    Terminal.println('Готово!');
    setTimeout(function() {
      doScan();
    }, 2000);
  }).catch(function(err) {
    print(err);    
    Terminal.println("Ошибка!");
    setTimeout(function() {
      doScan();
    }, 2000);
    if (device) device.disconnect();
  });
}

// При инициализации запускаем сканирование:
function onInit() {
  doScan();
}

onInit();

Напечатайте save(), чтобы сохранить этот код в долговременную память Pixl.js. В результате он будет автоматически запускаться после перезагрузки и включения после отключения от питания.

Расширение функционала

Теперь, когда мы можем отправлять текст на Micro:bit, давайте загрузим на Micro:bit код, который будет проверять, не является ли присланный текст командой, и если да, то также выполнять действие, заданное в этой команде. К примеру, с помощью команды «forward» мы можем передвинуть робота Micro:bit вперёд.

См.также

Внешние ссылки