IoT (Интернет вещей) — дополнение к набору «Йодо»

Электронная версия брошюры из набора «IoT (Интернет вещей)». Здесь собраны все исходные коды экспериментов, подсказки и хаки по прохождению набора.

Электронная версия буклета

Видеообзор набора «Интернет вещей»

Обновление прошивки

Если прошивка твоей платы ниже 1v91, обнови её. Обновить версию прошивки до самой свежей можно непосредственно в IDE. Для этого перейди в Настройки Flasher , нажми кнопку Flash Firmware и следуй инструкциям на экране. Более подробную информацию ты найдешь в разделе про обновление прошивки Iskra JS.

Необходимые модули из набора «Йодо»

Для проектов IoT тебе потребуются платы и модули из базового набора «Йодо»:

Если ты уже используешь эти модули и платы в своих крутых проектах, а разбирать их не хочется — закажи недостающие!

Файлы на флеш-карте

На флешке в составе набора уже есть файлы. Они понадобятся тебе для проектов, не изменяй и не удаляй их. Но если всё-таки что-то пошло не так — ты всегда сможешь скачать архив с файлами. Распакуй архив и скопируй файлы на SD-карту. Iskra JS работает только с картами, отформатированными в FAT32.

Настройка точки доступа на смартфоне

Иногда в прямой досягаемости нет Wi-Fi сети, а сделать эксперименты из набора очень хочется. Что же делать в таком случае? Поднять такую сеть самому при помощи смартфона!

Некоторые операторы блокируют возможность раздавать Wi-Fi с телефона. Если у тебя в меню нет нужных пунктов — свяжись со службой поддержки оператора и попроси активировать эту функцию. Обычно операторы восстанавливают эту возможность в течение часа после обращения.

iOS

Настройки общего доступа к сотовой сети твоего телефона находятся в меню «Настройки» «Сотовая связь» «Режим модема» . В этом меню можно включить режим точки доступа и задать ей пароль. Именем (SSID) точки доступа будет имя телефона. Рекомендуем не закрывать это меню до тех пор, пока клиент не подключится к точке доступа.

После первого включения режима модема такой пункт скорее всего появится в главном меню настроек телефона.

Android

Особенность телефонов на ОС Android — практически у каждого производителя свой интерфейс. Это значит, что невозможно точно сказать, где в твоем телефоне находится кнопка «Раздать интернет» (или даже как она называется). Обычно её можно найти в настройках под названиями вроде «Режим модема и переносная точка доступа».

Эксперименты

1. Удалённый термометр

Плату Iskra JS в интернет выходить научи. Информацию о температуре в комнате своей в виде графиков на сайте dweet.io наблюдай.

Видеоурок с прохождением эксперимента

Для этого эксперимента подключи к твоей Iskra JS модуль Wi-Fi и датчик температуры.

Схема сборки устройства

Код эксперимента

var SSID = 'имя_твоего_wi-fi';
var PASSWORD = 'пароль_твоего_wi-fi';
var NAME = 'твой_уникальный_ключ';
 
var temp = require('@amperka/thermometer').connect(A2);
var dweet = require('@amperka/dweetio').connect(NAME);
 
function run() {
  setInterval(function() {
    dweet.send({
      temperature: temp.read('C')
    });
  }, 1000);
}
 
var wifi = require('@amperka/wifi').setup(function(err) {
  wifi.connect(SSID, PASSWORD, function(err) {
    print('Click this link', dweet.follow());
    run();
  });
});

На нашей вики ты сможешь узнать подробнее о функциях библиотек @amperka/dweetio, @amperka/thermometer и @amperka/wifi.

2. Восьмибитный аудиоплеер

Музыки проигрыватель сделаем себе. На флеш-карте треки хранить будем, зуммером их воспроизводить и кнопкой одной лишь переключать. Потребуется модуль SD-картридер нам.

Видеоурок с прохождением эксперимента

Интересный факт — музыка на твоей флеш-карте хранится в формате RTTTL (англ. «Ring Tone Text Transfer Language» — текстовый язык для использования в рингтонах). Это формат, изобретённый компанией Nokia для использования в сотовых телефонах. Звук в этом формате хранится в виде текста. Процессор (Iskra JS в нашем случае) использует этот текст как своеобразную партитуру для проигрывания мелодии.

Схема сборки устройства

Код эксперимента

var sdCard = require('@amperka/card-reader').connect(P8);
var player = require('@amperka/ringtone').create(A2);
var shuffle = require('@amperka/button').connect(P12);
 
shuffle.on('click', function() {
  player.stop();
  var melody = sdCard.readRandomFile('/music');
  player.play(melody);
});
 
shuffle.on('hold', function() { 
  player.stop();
});

На нашей вики ты сможешь узнать подробнее о функциях библиотек @amperka/card-reader,@amperka/ringtone и @amperka/button.

3. Браузерный Dendy

Роботом управлять будем в игре браузерной. С флеш-карты её загрузим, и мастерством гоночным овладеем!

Для этого эксперимента мы будем использовать модули Wi-Fi и SD-картридера. Iskra JS будет выполнять роль сервера, при подключении к которому в браузере появляется страница race.html. Внутри этой страницы и расположена игра.

var SSID = 'имя_твоего_wi-fi';
var PASSWORD = 'пароль_твоего_wi-fi';
 
var sdCard = require('@amperka/card-reader').connect(P8); 
var server = require('@amperka/server').create();
 
server.on('/', function(req, res) {
  var content = sdCard.readFile('race.html'); 
  res.send(content);
});
 
var wifi  = require('@amperka/wifi').setup(function(err){
  wifi.connect(SSID, PASSWORD, function(err) {
  wifi.getIP(function(err, ip) { 
    server.listen();
    print('Game is ready! http://'+ip+'/');
   }); 
  });
});

4. Умный дом

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

ВНИМАНИЕ! РАБОТА С ВЫСОКИМ НАПРЯЖЕНИЕМ ОПАСНА ДЛЯ ЗДОРОВЬЯ И ЖИЗНИ.

Если тебе ни разу не приходилось работать с напряжением 220 вольт, оставь зелёные клеммы неподключёнными. Вместо этого используй светодиод на реле. Если горит — реле включено. Если нет — выключено.

var sdCard = require('@amperka/card-reader').connect(P8);
var relay = require('@amperka/relay').connect(P12);
var server = require('@amperka/server').create();
 
var SSID = 'имя_твоего wi-fi'; 
var PASSWORD = 'пароль_wi-fi';
 
server.on('/', function(req, res) {
  var content = sdCard.readFile('light.html');
  res.send(content); 
});
 
server.on('/turnOn', function() {
  relay.turnOn();
});
 
server.on('/turnOff', function() {
  relay.turnOff();
}); 
 
var wifi = require('@amperka/wifi').setup(function(err) {
  wifi.connect(SSID, PASSWORD, function(err) {
    wifi.getIP(function(err, ip) {
      server.listen();
      print('Relay control is ready! http://'+ip+'/');
    });
  });
});

На нашей вики ты сможешь узнать подробнее о функциях библиотеки @amperka/relay.

5. Интерактивный дом

На содержимое веб-страницы силами природы и волей своей в реальном времени влиять будем. Прибор для этого с датчиками освещения и температуры соберем. А для волей контроля потенциометр добавим.

var sdCard = require('@amperka/card-reader').connect(P8);
var light = require('@amperka/light-sensor').connect(A1);
var pot = require('@amperka/pot').connect(A2);
var temp = require('@amperka/thermometer').connect(A4);
 
var SSID = 'имя_твоего_wi-fi';
var PASSWORD = 'пароль_wi-fi';
 
var server = require('ws').createServer(function(req, res) {
  var content = sdCard.readFile('home.html');
  res.end(content);
});
 
function prepareData() {
  var data = {
    speed: Math.floor(pot.read() * 41) - 20,
    light: Math.floor(light.read('lx') / 640),
    temperature: Math.floor(temp.read('C'))
  };
  return JSON.stringify(data);
}
 
server.on('websocket', function(ws) {
  setInterval(function() {
    ws.send(prepareData());
    }, 200);
});
 
var wifi = require('@amperka/wifi').setup(function(err) { 
  wifi.connect(SSID, PASSWORD, function(err) {
    wifi.getIP(function(err, ip) {
      print('I\'m ready! http://'+ip+'/');
      server.listen(80);
    });
  });
});

На нашей вики ты сможешь узнать подробнее о функциях библиотек @amperka/relay, @amperka/light-sensor и @amperka/pot.

6. Напоминальник

Важные события жизни своей в почте оставляй. Кота покормил? В почту себе напоминание пришли, чтобы в тонусе падавана держать. Использовать для этого сервисы IFTTT и Webhooks будем, а о событии сообщать простым кнопки нажатием.

var SSID = 'имя_твоего wi-fi';
var PASSWORD = 'пароль_wi-fi';
 
var trigger = require('@amperka/button').connect(P12);
var maker = require('@amperka/ifttt-webhooks').create({
  token: 'токен_сервиса_webhooks',
  action: 'feed'
});
 
var wifi = require('@amperka/wifi').setup(function(err) {
  wifi.connect(SSID, PASSWORD, function(err) {
    print('Ok, hold button.');
  });
});
 
var data = {
  value1: 'I did it!'
};
 
trigger.on('hold', function() {
  maker.send(data, function(response) {
    print(response);
  });
});

Подробнее о функциях библиотеки @amperka/ifttt-webhooks ты можешь узнать из нашей статьи на вики.

7. Telegram bot

Mессенджером Telegram овладеем. Iskra JS ему обучим и сложные интерактивные системы строить с ним будем. А для начала научимся света включением из чата управлять.

var SSID = 'имя_твоего wi-fi';
var PASSWORD = 'пароль_wi-fi';
 
var bot = require('@amperka/telegram').create({
  token: 'здесь_будет_твой_токен',
  polling: { timeout: 10 }
});
var light = require('@amperka/led').connect(P3);
 
bot.on('/start', function(msg) {
  var keyboard = bot.keyboard([
    ['/TurnOff', '/TurnOn'],
  ], { resize: true });
  bot.sendMessage(msg.from.id, 'Light control', {
    markup: keyboard
  });
});
 
bot.on('/TurnOff', function(msg) {
  light.turnOff();
  bot.sendMessage(msg.from.id, 'Light is off');
});
 
bot.on('/TurnOn', function(msg) {
  light.turnOn();
  bot.sendMessage(msg.from.id, 'Light is on');
});
 
var wifi = require('@amperka/wifi').setup(function(err) {
  wifi.connect(SSID, PASSWORD, function(err) {
    print('I\'m ready!');
    bot.connect();
  });
});

Подробнее о функциях библиотеки @amperka/telegram ты можешь узнать из нашей статьи на вики.

Идеи проектов

Прошел набор «IoT»? Молодец! Вот тебе идеи для приборов, которые пригодятся тебе в быту. Применяй знания, полученные из набора, комбинируй различные модули, придумывай и твори с Амперкой!

Используя Troyka-модули барометра и цифрового датчика температуры и влажности, можно создать свою собственную метеостанцию. При помощи пары беспроводной передатчикбеспроводной приёмник на частоте 433 МГц ты сможешь собрать свою метеостанцию в герметичном корпусе и, придумав для неё питание на Power Shield, создать автономное устройство. Оно не будет бояться воды и будет точно сообщать тебе данные о погоде за окном. А модуль в своей комнате ты сможешь оснастить LCD-экраном, чтобы на показания датчиков было приятно смотреть. И, разумеется, ты сможешь получать все эти данные с помощью созданного тобой Telegram-бота!

При помощи датчиков влажности почвы ты сможешь всегда быть уверенным, что твои редкие растения не засохнут от недостатка воды. А даты поливов ты сможешь регистрировать с помощью сервиса Webhooks!

Датчик горючих и угарного газов MQ-9 даст тебе уверенность в безопасности твоего жилья. В случае, если он обнаружит в воздухе присутствие опасных газов, он сможет прислать сообщение тебе прямо в Telegram!

Цветная адресуемая светодиодная лента WS2811 позволит тебе создать освещение в комнате, цвет которого ты сможешь контролировать со смартфона, или даже сделать его реагирующим на музыку, которая играет в твоей комнате.

Датчик шума и ультразвуковой дальномер позволят тебе построить систему сигнализации в твоей комнате — ты всегда будешь знать, если в ней появятся непрошеные гости. А модуль MP3-плеера в комбинации с модулем аудиовыхода сможет твоим голосом вежливо попросить их покинуть твою территорию.

Если ты захочешь еще сильнее защитить свою комнату от незваных гостей — ты сможешь воспользоваться сканером RFID/NFC, выполненном все в том же формате Troyka-модуля. При помощи этого датчика можно сконструировать не только замок на дверь в комнату, но и запереть секретный ящик шкафа и даже реализовать включение компьютера по приближению к датчику NFC-карты или смартфона!

GPRS Shield, совместимый с Iskra JS, позволит тебе создавать ещё более автономные приборы — ведь теперь они будут выходить в сеть не с помощью Wi-Fi роутера, а напрямую с помощью сотовой сети. Не забудь приобрести SIM-карту с безлимитным трафиком!