Блог Дмитрия Сошникова

про технологии и человеческое счастье

You are currently browsing the Майкрософт category.

Как Microsoft дружит с Arduino и другими на почве IoT

Пару месяцев назад в рамках конференции Build было объявлено о партнерстве Microsoft с платформой Arduino, а Windows 10 была названа первой Arduino-сертифицированной операционной системой. Исходные анонсы вы можете прочитать на сайте Arduino и в официальном блоге Windows. Давайте разберемся, что же стоит за этими объявлениями.

image

Самое главное, что следует из этого объявления – Microsoft понимает важность платформы Arduino и будет предпринимать усилия, чтобы соответствующие устройства хорошо взаимодействовали с устройствами на Windows 10. Представьте себе мир, в котором внешние электронные устройства на базе Arduino являются продолжением аппаратного обеспечения компьютера, работающего под управлением Windows 10, и доступны из стандартных универсальных приложений с помощью соответствующих расширений. Это позволит оптимальным образом сочетать вычислительную мощность традиционных компьютеров и облака с потенциалом микроконтроллеров по управлению устройствами, создавая целостные решения в области интернета вещей.

В рамках текущих анонсов было объявлено о доступности двух технологий:

  • Windows Remote Arduino – это технология, которая позволяет управлять платой Arduino, подключенной по USB или Bluetooth, из универсального приложения, как если бы её порты ввода-вывода были доступны локально. Разработчику универсального приложения становятся доступны основные команды по работе с аналоговыми и цифровыми портами, что позволяет напрямую работать с рядом датчиков. Для взаимодействия Arduino с компьютером используется протокол Firmata, а на плате запускается специальный Firmata Sketch, выполняющий приходящие от удаленного компьютера команды. Проект доступен для Windows 8.1 и Windows 10 в виде исходных текстов на GitHub.
  • Windows Virtual Shield for Arduino позволяет использовать смартфон под управлением Windows Phone 10 в качестве виртуальной платы расширения для Arduino. При этом смартфон может использоваться как текстовый экран, как гироскоп/акселерометр/GPS, в качестве распознавателя речи и т.д. Вы получаете простой доступ ко всем этим возможностям прямо из своего Arduino Sketch. В качестве примера можно посмотреть на проект Picture the Weather.

image

Эти проекты в настоящий момент активно дорабатываются, и стоит воспринимать их как первый шаг в правильном направлении. В следующей своей статье я подробнее и на примере познакомлю вас с тем, как всё это работает.

В новом мире многие инновации делаются энтузиастами, которые любят собирать что-то своими руками – в английском языке для этого есть прекрасное слово maker. Понимая важность такого сообщества для будущих инноваций в IoT, Microsoft также объявила о партнерстве с популярным порталом Hackster.IO, на котором теперь будут представлены многие официальные примеры разработок для Windows IoT.

image

Если же говорить про промышленный интернет вещей, то здесь важной задачей является построение инфраструктуры для взаимодействия сети устройств между собой и с клиентами. Одной из таких платформ межмашинного взаимодействия является DeviceHive от компании DataArt. В результате партнерства компании с Microsoft теперь можно легко разворачивать DeviceHive в облаке прямо из магазина Azure Marketplace, что существенно упрощает создания облачных решений для интернета вещей.

image

Интернет вещей на текущий момент является достаточно молодым направлением. Чем больше компаний будут работать вместе над развитием этой отрасли, чем больше соглашений и промышленных стандартов типа AllJoyn – тем больше устройств будут общаться между собой и работать вместе, обеспечивая нам прекрасное технологическое будущее.

Posted Июль 10th, 2015.

1 comment

Подключение Arduino к Raspberry Pi

Как я уже писал ранее, во многих сценариях интернета вещей бывает полезно иметь один достаточно мощный встраиваемый компьютер (в роли которого может выступать Raspberry Pi), который может связываться с множеством расположенных в разных местах сенсоров, управляемых простыми микроконтроллерами семейства Arduino. При этом можности Raspberry Pi хватает, чтобы передавать данные по защищенным каналам HTTPS в облако, а также чтобы осуществлять взаимодействие с пользователем посредством развитого интерфейса (например, при работе под управлением Windows 10).

Для соединения Arduino с Raspberry Pi существует несколько сценариев подключения:

    • Использование явного последовательного канала передачи данных. При этом возникают сложности, связанные с разностью уровней питания: Raspberry Pi работает на напряжении 3.3В, в то время как Arduino использует 5 вольт. При этом для обеспечения безопасного соединения рекомендуется использовать специальные преобразователи уровня.
    • Использование последовательной шины I2C, что позволяет подключать к одной Raspberry Pi до 128 устройств Arduino в режиме slave, при этом такое подключение также не требует преобразователей уровня.
    • Подключение по USB является пожалуй самым простым способом, поскольку для этого достаточно всего лишь воткнуть Arduino через стандартный кабель в USB-разъем Raspberry Pi. Именно этот способ мы и рассмотрим.

В качестве примера рассмотрим простейший датчик температуры и давления BMP-180, подключенный к Arduino Uno по стандартной схеме. После этого контроллер Arduino включается в USB-разъем Raspberry Pi, а сам Raspberry Pi затем подключается обычным образом к питанию, монитору и т.д.

WP_20150427_18_39_55_Pro

При таком подключении общение Arduino и Raspberry происходит по последовательному порту. Предварительно (до подключения) на Arduino необходимо залить требуемый скетч – в нашем случае это простая программа, считывающая значение давления и температуры с датчика и печатающая их в виде текста в последовательный канал (температура предваряется символом Т, а давление – P):


#include <Wire.h>
#include <BMP180.h>

BMP180 barometer;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  barometer = BMP180();
  if(barometer.EnsureConnected())
  {
    barometer.SoftReset();
    barometer.Initialize();
  }
  else
  {
    Serial.println("E");
  }
}

void loop()
{
  if(barometer.IsConnected)
  {
    long pres = barometer.GetPressure();
    float temp = barometer.GetTemperature();
    Serial.print("P"); Serial.println(pres);
    Serial.print("T"); Serial.println(temp);
    delay(1000);
  }
}

Проверим работоспособность скетча в Arduino IDE, открыв монитор последовательного порта – мы должны увидеть появляющиеся значения температуры и давления. Обратите внимание на скорость – в программе задана скорость в 9600 бод, такие же установки должны быть и у монитора последовательного порта.

Теперь загрузим Raspberry Pi – в моем примере я использую Pidora в качестве базовой операционной системы и классическую модель Rapsberry Pi, хотя с таким же успехом можно использовать Raspberry Pi 2 и Windows 10.

Первым делом нужно определить, какой последовательный порт будет отвечать за общение с Arduino-контроллером. Проще всего это сделать следующим образом: при выключенной плате Arduino смотрим все доступные последовательные терминалы (ls /dev/tty*), после чего включаем плату в USB-порт, и через некоторое время снова смотрим список терминалов. То устройство, которое появилось в списке, и будет требуемым портом. В моём случае это был /dev/ttyUSB0, но в зависимости от номера порта, используемого дистрибутива системы и других факторов это имя может сильно отличаться.

2015-04-27-190009_1920x1200_scrot

Теперь мы можем использовать любые средства общения с последовательным портом для того, чтобы принять значения от датчика, передаваемые Arduino. Чаще всего удобным оказывается использовать Python и библиотеку serial. Например, следующий простой скрипт, набранный прямо в REPL, будет отображать на экране все данные, приходящие в последовательный порт:

import serial
ser = serial.Serial("/dev/ttyUSB0",9600)
while 1:
   ser.readline()

Ниже показано, как этот скрипт выполняется в окне терминала на Raspberry Pi:

2015-04-27-185823_1920x1200_scrot

После этого получения данных в требуемом виде с последующей отправкой их в облако или сохранением в локальной базе данных является делом техники. Об этом я поговорю в следующих выпусках своей колонки про интернет вещей.

Posted Июль 2nd, 2015.

1 comment

Как научить ребенка программировать

Если у вас, как и у меня, есть дети – то вас наверняка волнует вопрос, как воспитать в них творческое начало, сделать их заинтересованными активными членами общества. Огромная роль в этом принадлежит родителям, которым для достижения результата приходится вкладывать очень много любви, своей креативности, терпения и усилий. Но как всегда на помощь могут прийти информационные технологии – ведь они способны усиливать любое правильное (и неправильное) начинание, делая процесс намного более эффективным.

Использованию информационных технологиях применительно к развитию детей посвящен мой новый курс на Microsoft Virtual Academy, под кодовым названием “Как научить ребенка программировать”. На самом деле речь пойдет не только о программировании – в этом курсе я постарался описать известные мне технологии Майкрософт, которые могут вдохновить ребенка на творчество.

Этот курс предназначен для родителей, которые ищут различные способы занять своих детей творчеством. Мы видим, что дети с удовольствием берут в руки компьютер, и важно дать им правильные творческие инструменты, чтобы они воспринимали компьютер не как поставщика развлекательного контента (наравне с телевизором), а как инструмент для творчества. На самом деле детям нравится творить (этим в основном объясняется популярность Minecraft), и важно направить их в правильное русло.

Среди технологий, о которых рассказывается в курсе – технологии для исследования мира (Bing Maps, Worldwide Telescope), для коллективного творчества (Photosynth, Image Composite Editor и др.). Я также уделяю особое внимание вопросу мотивации детей, и рассказываю о своем опыте работы с детскими коллективами как преподавателя детского лагеря ЮНИО-Р, одного из идеологов часа кода в России и детского трека Microsoft AppDay, лектора и ведущего мастер-классов в Компьютерии.

Особое внимание конечно уделяется именно обучению программированию. На мой взгляд, важнее всего увлечь ребенка на первых этапах процесса, поэтому предлагается использовать инструменты быстрого создания игровых миров Kodu Game Lab и Project Spark. Ну а потом уже подключаются различные “традиционные” инструменты – от увлекательного введения в C#, до возможного пути Small Basic –> Visual Basic и функционального программирования на F#.

Конечно, приведенный подход не является единственно правильным, и может кому-то показаться дискуссионным. Если у вас возникают какие-то свои мысли, или вы хотите поделиться своим опытом и пообсуждать вопросы обучения детей – я с удовольствием это сделаю в комментариях к этому посту, вконтакте или в твиттере.

Надеюсь, этот курс будет полезен и интересен – по крайней мере об интересе к этой теме говорят полные залы на моих докладах на конференциях DevCon и ряде других. Приятного просмотра!

Posted Июнь 8th, 2015.

Add a comment