Вы находитесь на странице: 1из 56

ИНТЕРНЕТ ВЕЩЕЙ

УПРАВЛЯЙ УСТРОЙСТВАМИ ЧЕРЕЗ ИНТЕРНЕТ

Электронная версия книги:


iot.amperka.ru
СОДЕРЖАНИЕ
6 ЧТО В НАБОРЕ
8 ИНТЕРФЕЙСЫ И ПРОТОКОЛЫ
10 СЕРВИСЫ
12 TROYKA SLOT SHIELD

16 № 1 УДАЛЁННЫЙ ТЕРМОМЕТР


20 № 2 ВОСЬМИБИТНЫЙ АУДИОПЛЕЕР
22 № 3 БРАУЗЕРНЫЙ DENDY
24 № 4 УМНЫЙ ДОМ
28 № 5 ИНТЕРАКТИВНЫЙ ДОМ
32 № 6 НАПОМИНАЛЬНИК
42 № 7 TELEGRAM-BOT

48 ИДЕИ ПРОЕКТОВ
50 СПРАВОЧНИК
Управлять приборами
со смартфона

Включать приборы Управлять светом


дистанционно

IOT, «INTERNET OF THINGS» — ИНТЕРНЕТ ВЕЩЕЙ.


Это громкое словосочетание означает концепцию связи боль-
шого количества устройств (вещей) в общую сеть. Устройства
общаются между собой через интернет: передают друг другу
информацию, а затем обрабатывают её. И не просто так,
а принося пользу людям. Например, собирают данные о погоде
со всех концов Земли, управляют офисными зданиями или
сообщают пути объезда, если впереди на дороге образовалась
пробка.
Рой устройств в единой сети создаёт полную картину проис-
ходящего вокруг, повышает комфорт и позволяет улучшить
качество жизни людей.

Собирать данные
о здоровье

Включать музыку Наблюдать за приборами


4
по расписанию по графикам
5

Активировать видеослежение
по движению
Создавать системы
оповещений
Просыпаться
с умным будильником

«Умный дом» — понятие, тесно связанное с интернетом вещей.


Множество устройств, включённых в общую сеть, автомати-
зируют домашние рутинные задачи и позволяют удалённо
наблюдать за состоянием дома. Например, можно включить
чайник незадолго до прихода домой. Кроме того, управлять
светом в квартире со смартфона — это очень весело!
Многие эксперименты из этого набора помогут тебе сделать
первые шаги к созданию своего умного дома. Подумай о том,
какие процессы ты хотел бы автоматизировать, вооружись
Собирать данные
знаниями и действуй!
о погоде

содержание
Измерять Собирать данные
Следить за объектами температуру в единую базу 5
ЭЛЕМЕНТЫ В НАБОРЕ
S V G
P RX
0 V G A0 V G

PROG PWR RESET

RX
DI DO
G V 10
D C 5

V G
MODEL ESP8266MOD
VENDOR AI - THINKER
4 ISM 2.4GHz
PA +25dBm
802.11b/g/n

TX
5 4 1 G V2 13
Troyka Slot Shield
TX V G

A2 V G A1 V G Wi-Fi модуль Мини-реле


Позволяет передавать данные Управляет
DI DO
D C 6

по Wi-Fi-сети высоковольтными
3 V G

G V 9
Amperka

приборами
6 3 A3 G V2 12 5V V2 VIN

DI DO

A4 V G A3 V G
DI DO
V G
D C 7

G V 8
2

7 2 A5 G V2 11

CS V G

Troyka Slot Shield SD-картридер Карта microSD


Плата расширения для компактного Читает и записывает Необходима для хранения
подключения модулей файлы на карту microSD файлов

ВНИМАНИЕ!
Если прошивка твоей платы ниже 1v91, >reset();
=undefined
обнови её. Как обновить прошивку — ищи ____ __
на iot.amperka.ru → «Обновление прошивки». / _/_____ / /__ _____ ____ _
/ / / ___// //_// ___// __ `/
Чтобы узнать версию прошивки твоей Iskra JS, _/ / (__ )/ ,< / / / /_/ /
подключи её к компьютеру и набери в консоли /___//____//_/|_|/_/ \__,_/
Based on Espruino 1v92.194
reset(); (c) 2016 G.Williams, Amperka LLC
Support the work of core developers:
http://espruino.com/Donate
Плата ответит тебе баннером, под которым будет >
указана версия прошивки.
6
ЧТО ЕЩЁ ПОНАДОБИТСЯ
Для проектов IoT тебе потребуются платы и модули из базового
набора «Йодо».
SCL
SDA

~P13
~P12
~P11
~P10
~P9
~P8

P7
~P6
~P5
P4
~P3
~P2
~P1
~P0
AREF
GND
RESET

A
A
A
A
A
A
TX
RX
Amperka
Кабель micro-USB
Cоединяет Iskra JS
SPI
BUSY с компьютером
LED1
ON

BTN1
POWER INPUT

DAC
IOref
VIN3

GND
GND
3.3V
RST

A0~
A1~
A2~
A3~
VIN
VIN

A4
A5
5V

5V

S V G S V G

Iskra JS Термометр Потенциометр


Мозг твоего устройства Измеряет температуру Cообщает
воздуха о повороте ручки

S V G S V G S V G S V G

Что ЕЩё Понадобится


Датчик освещённости Светодиод Кнопка Зуммер
Измеряет яркость света Светит и мигает Сообщает о нажатии Пищит, издаёт звуки

Если ты уже используешь эти модули и платы в своих крутых


проектах, а разбирать их не хочется, закажи недостающие на сайте
iot.amperka.ru → «Необходимые модули из набора Йодо».
На сайте iot.amperka.ru → «Буклет Йодо» ты сможешь найти электронную версию буклета. 7
ИНТЕРФЕЙСЫ И ПРОТОКОЛЫ
Технически, интернет — это сеть из устройств, общающихся между
собой с помощью проводов или радиоволн. Устройства запрашива-
ют друг у друга данные и отдают их. Того, кто запрашивает, называют
клиентом. Того, кто отдаёт, называют сервером.

Покажи-ка мне сайт


amperka.ru

вводим в адресной строке


www.amperka.ru

Cмотри, пожалуйста!

присылает html-страницу
с картинками
КЛИЕНТ СЕРВЕР
Делает запросы к серверу Принимает запросы от клиента
и получает от него ответ и отдаёт ему ответ

Чтобы передать информацию в понятном друг для друга виде,


устройства используют общепринятые интерфейсы и протоколы.

ИНТЕРФЕЙСЫ ПРОТОКОЛЫ
Интерфейсы устанавливают физический способ Протоколы устанавливают правила передачи
передачи сигналов от устройства к устройству. данных между устройствами. Они используют
интерфейсы как «транспорт» для данных.
У людей тоже есть свои интерфейсы. Они пере-
дают друг другу сообщения устно или письменно. Языки, на которых общаются люди, тоже можно
Электроника вместо голоса и письма использу- назвать протоколами. «Меня зовут Амперка» и
ет электрические провода и радиоволны. Для «My name is Amperka» — одна и та же инфор-
устройств очень важно передавать данные на мация, но передана она разными протоколами.
одной скорости, иначе устройства не поймут со- Люди могут общаться, только если знают общий
общения друг друга. протокол и умеют его использовать. Устройствам
для общения тоже нужно знать общий протокол.

8
ИНТЕРФЕЙС UART ПРОТОКОЛ HTTP
UART (Universal Asynchronous Receiver-Transmitter, Протокол HTTP обеспечивает передачу html-
Универсальный Асинхронный Приемопередатчик) страниц и медиафайлов. С ним работают все
использует для передачи данных два провода: браузеры. В этом протоколе клиент и сервер об-
по одному проводу в одну сторону, по другому — щаются прерывно. В перерывах между запросами
в другую. UART задаёт скорость передачи в бодах клиент и сервер отключаются друг от друга.
(1 бод = 1 бит в секунду). Она принимает кон-
кретные значения, например 9 600 бод, 115 200 Передача данных по протоколу HTTP выглядит
бод и другие. Оба устройства обязаны передавать как простой текст из нескольких строк. Подроб-
данные на одной и той же скорости. Часто этот нее о протоколе читай в cправочнике на страни-
интерфейс ещё называют Serial. це 50.

RX RX ПРОТОКОЛ HTTPS
TX TX Протокол HTTPS — это тот же HTTP, но с шиф-
рованием (S — security). Оно необходимо для
Пин RX принимает данные, а пин TX — передаёт. защиты данных от перехвата злоумышленника-
Скорость в бодах иногда называют битрейтом. ми. Шифрование требует большого количества
вычислительных ресурсов. Iskra JS — мощная
ИНТЕРФЕЙС SPI платформа, её ресурсов достаточно для соедине-
Интерфейс SPI (Serial Peripheral Interface) по- ния по протоколу HTTPS.
зволяет соединить в сеть больше двух устройств.
Одно из них становится ведущим (Master, масте- ПРОТОКОЛ WEBSOCKET
ром), а все остальные ведомыми (Slave). Ведущее Протокол WebSocket — это непрерывный про-
устройство по очереди передаёт данные ведо- токол. Соединение между сервером и клиентом
мым по линии MOSI (master output slave input). постоянно поддерживается, и они могут в любой
Очерёдность задаётся линиями CS (Chip Select, момент передавать данные, поэтому серверу не
выбор ведомого). Ведомые устройства передают обязательно ждать запроса от клиента. Прежде
свои данные по линии MISO (master input slave чем установить такое соединение, клиент и сер-
output), но только с разрешения мастера (линией вер договариваются об этом по протоколу HTTP
CS). Скорость передачи задаётся линией SCK ( ). или HTTPS.
Ведущий Ведомые
SPI 0 1 n

Интерфейсы и протоколы
...
DO DI DI ... DI
DI DO DO ... DO
CS0 CS CS CS
CS1
...
CSn ...
DO (data out) DI (data in) SCK ( )
9
СЕРВИСЫ ДЛЯ ПРОЕКТОВ
Интернет вещей состоит из множества устройств, взаимодействую-
щих между собой с помощью различных интерфейсов и протоко-
лов. Они обмениваются информацией друг с другом и с людьми,
и их число постоянно растёт.
Существует множество сервисов, упрощающих работу с устройства-
ми через интернет. Некоторые из них мы будем использовать
в наших экспериментах — давай познакомимся с ними поближе.

DWEET.IO IFTTT
dweet.io — это сервис, позволяющий получать IFTTT (IF This Then That — если это, сделай то).
данные с устройств и выводить их в графическом Этот сервис позволяет подключать множество
виде. Можно установить датчик в своём аквариу- компонентов друг к другу по принципу «если про-
ме и наблюдать значение температуры воды изошло событие А, сделай действие Б». Сервисы
из любой точки Земли. Каждое подключённое Google, социальные сети, мессенджеры, записные
к сервису устройство имеет свой уникальный книжки и многое другое можно связать между
ключ, что позволяет не путать данные. Это почти собой и автоматизировать рутинные действия. Та-
как социальная сеть — только для приборов. кие действия с условиями называются апплетами
(applet, application — приложение, -let — уменьши-
www.dweet.io тельный суффикс). Один из самых простых аппле-
тов — отправить специально сформированный
email в случае срабатывания условия. Мы будем
пользоваться этой функцией в эксперименте № 6.
www.ifttt.com
10
WEBHOOKS TELEGRAM
Для получения HTTP-команд с различных Telegram — продвинутый мессенджер с воз-
DIY-устройств у сервиса IFTTT есть специальный можностью создавать и управлять ботами. Если
апплет — Webhooks. Этот апплет позволяет ты ещё не используешь его — зайди на сайт
как принимать команды, так и отправлять telegram.org, установи приложение Telegram
их на устройства. Подробнее о нём ты узнаешь на свой смартфон и создай свой аккаунт, это при-
в эксперименте № 6. годится тебе в эксперименте № 7.

Сервисы для проектов


www.ifttt.com/maker_webhooks www.telegram.org

11
TROYKA SLOT SHIELD
Troyka Slot Shield — это плата расширения для быстрой сборки ком-
пактных устройств из Troyka-модулей без проводов и паяльника. На
плате расположены шесть слотов. Каждый слот состоит из четырёх
троек контактов, в которые можно подключить один Troyka-модуль.

Тройка-контакты, соответ-
ствующие пинам на Iskra JS. Те,
что отмечены «А», умеют рабо-
D C 7 D C 6 D C 5 тать с аналоговыми сигналами.
7 2 A5

6 3 A3

A2 V G

0 V G
5 4 1
A4 V G

2 V G 3 V G 4 V G

Amperka Troyka Slot Shield

G V 8 G V 9 G V 10
G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G
5

G
C

V
D

0
DI DO DI DO DI DO G

1
V

4
4

5
5V V2 VIN 6 10

G
C V

V
ld

V
D hie G

0
tS

A
Slo
ka
G y DO

13
Tro

A
V DI

V2
3
3

G
a
7 p erk 9

G
Am
C V

V
Пины для подключения
D G

1
A

A
G DO
5

12
A

V DI
устройств по интерфейсу SPI

V2
2

2
7

G
8 VIN

G
V V2

V
Джампер выбора
G 5V

3
A
11 DO
DI
напряжения V2
G

ЧТО МОЖНО ПОДКЛЮЧИТЬ


шесть Troyka-модулей;
пять модулей, использующих аналоговые входы/выходы;
три модуля, работающих по протоколу SPI (DI/DO/ ).

12
КАК ПОДКЛЮЧАТЬ
Вставь Slot Shield в пины Iskra JS сверху. Ты получишь единое
устройство. Для соединения с компьютером, как и раньше, исполь- 5

G
C

V
зуй USB-порт на Iskra JS. А для подключения модулей используй
D

0
разъёмы на Slot Shield.
G

1
Кнопка V

4
4

5
le
du o
aM
yk
Tro
6 10
CS

G
rka
C ld V

V
V
hie
e
D
mp
G

2
G
G
S
A

A
V t
S

Troyka Slot Shield Slo


G y ka

13
Tro

A
V
5

V2
3
C
SD-картридер

V
D
3

6
a
G
1

rk
V
4

DI 4
5

7 pe
DO
6 10
9
CS
G
G

G
C ld V
V

Am

V
C
ie
V
D G
2

Sh

0
G
A
V

V
t
Slo
D ka
G
4

DO

1
G y
3

13
Tro
A

DI
A

A
V
V2
3

3
6

G
a
erk
DI
7
DO
p 9
G

Am
C V
V

G DO
D G
4

1
5

12
A

V DO
DI
G

V2
2
5

12
A

V DI
V2
2

2
2
7

G
7

G
8 VIN
G

V V2
V

G 5V
3
A

DO 8 G
VIN
11

DI
V
V2

V 2
G

G 3 5VV
A
DO
11

DI
V2
G

Iskra JS

Troyka Slot Shield


НАПРЯЖЕНИЕ ПИТАНИЯ
В трёх слотах используется альтернативная линия питания V2,
напряжение на которой можно выбирать джампером:
V2+5V — на V2 будет 5 вольт вне зависимости от рабочего
напряжения управляющей платы;
V2+Vin — на V2 будет напряжение порта Vin управляющей платы.
13
16 № 1 УДАЛЁННЫЙ
ТЕРМОМЕТР
20 № 2 ВОСЬМИБИТНЫЙ
АУДИОПЛЕЕР

22 № 3 БРАУЗЕРНЫЙ DENDY

24 № 4 УМНЫЙ ДОМ

14
1

28 № 5 ИНТЕРАКТИВНЫЙ
ДОМ

32 № 6 НАПОМИНАЛЬНИК

ВКЛ ВЫКЛ

Troyka Slot Shield


42 № 7 TELEGRAM-BOT

15

1 УДАЛЁННЫЙ ТЕРМОМЕТР
Плату Iskra JS в интернет выходить научи. Информацию
о температуре в комнате своей в виде графиков на сайте
dweet.io наблюдай.

TROYKA-МОДУЛЬ WI-FI
Будем отправлять данные в интернет через Wi-Fi. Для доступа
к Wi-Fi воспользуемся специальным модулем. Модуль общается
с Iskra JS по протоколу UART на скорости 115 200 бод.

Пин приёма данных RX TX Пин передачи


данных
P RX

TX V G
Пин выключения
модуля (нам он
802.11b/g/n
PA +25dBm
MODEL ESP8266MOD
VENDOR AI - THINKER
ISM 2.4GHz

не потребуется)

Кнопка перевода
модуля в режим
программирования Кнопка сброса
питания модуля
GND
PROG PWR RESET
VIN A P7
A ~P6
A0~ передачи данных
Пин A ~P5
A1~ A P4
A2~

Amperka
Обрати внимание, пин P0 на Iskra JS отмечен A ~P3
A3~ A ~P2
дополнительным значком . Это значит, что пин
A4 BTN1 TX ~P1
DAC

P0 может выполнять функцию приёма данных RX


A5 ~P0
по протоколу UART. Пин P1 отмечен значком ,
SPI

он отправляет данные. Все эти обозначения при-


сутствуют только на плате Iskra JS — поэтому Iskra JS
не смущайся, если не видишь их на Slot Shield. Пин приёма данных
16
Wi-Fi — это стандарт связи. Сеть Wi-Fi создаётся роутером, к нему ВНИМАНИЕ!
подключаются клиенты. Роутер позволяет клиентам выйти в интер- Если ты не пользуешься роуте-
нет если он сам имеет к нему доступ. Для подключения к роутеру, ром, переведи смартфон
необходимо знать SSID (имя сети) и пароль сети. в режим «точки доступа»
iot.amperka.ru → «Настройка
точки доступа».

Домашний компьютер

Wi-Fi роутер

Плата Iskra JS Wi-Fi модуль Сервер

Установи модуль Wi-Fi и датчик температуры на Slot Shield. Wi-Fi модуль:


Tx → P0
Rx → P1
RX TX

D C 7 D C 6 D C 5

P RX
7 2 A5

6 3 A3

TX V G
A2 V G

5 4 1

0 V G
A4 V G
S V G

2 V G 3 V G 4 V G

802.11b/g/n
PA +25dBm
MODEL ESP8266MOD
VENDOR AI - THINKER
ISM 2.4GHz

№1 Удалённый термометр
Amperka Troyka Slot Shield

Термометр → A2
G V 8 G V 9 G V 10
G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G

DI DO DI DO DI DO
5V V2 VIN
PROG PWR RESET

17
Подключимся к сервису dweet.io и начнём отправлять показания ВНИМАНИЕ!
датчика температуры, а в браузере будем наблюдать за ними на Чтобы не набирать код
красивом графике. программы вручную, скопируй
Сервис dweet.io каждую секунду получает различную информацию его с сайта iot.amperka.ru.
от тысяч устройств. Чтобы различать их между собой, сервису нужно
сообщить свой уникальный ключ, по которому можно однозначно
определить отправителя. Ключ нужно придумать самому. Будем
использовать в качестве такого ключа строку, состоящую из твоего
имени и даты рождения, например 'Amperka03042011' —
Амперка, 03 апреля 2011.

1 Задаём имя Wi-Fi-сети


и пароль. 1 var SSID = 'имя_твоего_wi-fi';
2 var PASSWORD = 'пароль_твоего_wi-fi';
2 Задаём 'твой_уникаль- 3 var NAME = 'твой_уникальный_ключ';
ный_ключ' — только латин- 4
5 var temp = require('@amperka/thermometer').connect(A2);
ские буквы и цифры, 6 var dweet = require('@amperka/dweetio').connect(NAME);
без пробелов. 7
8 function run() {
3 Подключаем библиотеку 9 setInterval(function() {
'@amperka/dweetio' для 10 dweet.send({
работы с сервисом dweet.io. 11 temperature: temp.read('C')
12 });
В функцию connect передаём 13 }, 1000);
в качестве параметра перемен- 14 }
ную NAME, содержащую твой 15
уникальный ключ. 16 var wifi = require('@amperka/wifi').setup(function(err) {
17 wifi.connect(SSID, PASSWORD, function(err) {
4 Создаём функцию run(), 18 print('Click this link', dweet.follow());
19 run();
которую запустим, как только 20 });
Wi-Fi модуль подключится 21 });
к сети. Интервальная функция
setInterval каждую секунду
будет вызывать dweet. 6 Подключаем библиотеку PASSWORD. Библиотека сама
send(). '@amperka/wifi' и сразу задаёт скорость передачи
5 Функция send() отправ- подключаемся к сети с именем, данных для модуля Wi-Fi, это
ляет данные в необходимом указанным в переменной SSID, 115200 бод.
формате. В функцию передаём и паролем из переменной
объект с полем temperature.
18
Загрузи код в Iskra JS, запусти программу и дождись ссылки в консоли.

http://dweet.io/follow/Amperka03042011

Кликни на неё и в браузере увидишь температуру своей комнаты.

ВНИМАНИЕ!
Сервис dweet.io позволяет
отправлять данные не чаще
1 раза в секунду, поэтому нет
смысла задавать интервал вы-
зова функции dweet.send()
меньше 1000 миллисекунд.

7 Как только модуль под-


ЗАДАНИЕ
ключится к сети, функция Набор «Йодо» вспомни ты и ограничь точность приборов пока-
follow() получит адрес, по заний до значений целых.

№1 Удалённый термометр
которому можно отслеживать
данные о температуре. А функ- Другие датчики подключить попробуй. Разные параметры
ция print() выведет строку ты сможешь наблюдать. На синтаксис кода внимание обрати,
'Click this link' и адрес простой запятой объекты разделяй.
в консоль.
Замени NAME на 'Amperka', а параметр 'temperature'
8 Вызываем функцию run(), на своё имя. Возможно, в этот момент кто-нибудь сделает так же
чтобы начать отправку данных и вы сможете сравнить температуры в ваших комнатах.
сервису dweet.io.
19

2 ВОСЬМИБИТНЫЙ АУДИОПЛЕЕР
Музыки проигрыватель сделаем себе. На флеш-карте треки
хранить будем, зуммером их воспроизводить и кнопкой одной
лишь переключать.

TROYKA-МОДУЛЬ SD-КАРТРИДЕР
Модуль SD-картридер позволяет читать файлы с microSD-карты
и записывать их на неё. Картридер работает по интерфейсу SPI.

Пины
MOSI (DI — Digital Input, цифровой вход)
MISO (DO — Digital Output, цифровой выход)
SCK ( — Clock, тактирование)

DI DO Вставь в картридер microSD


карту из набора 1 Подключаем библиотеку
для работы с картридером.
Задаём номер пина, управля-
ющий линией CS интерфейса
SPI. Библиотека сама задаёт
CS V G
скорость передачи данных для
интерфейса.
2 Подключаем библиотеку
Пин CS — Chip Select (выбор ведомого)
воспроизведения рингтонов.
Функция connect(A2) гово-
рит, что звук будет воспроиз-
водиться с модуля, подключён-
ного к пину A2.
3 Нажимая на кнопку shuffle,

ВНИМАНИЕ! будем менять композицию.


На твоей флешке уже есть файлы. Они потребуются для этого и 4 Прежде чем включить сле-
следующих проектов. Не изменяй и не удаляй их, пока не пройдёшь дующий трек, нужно выключить
все эксперименты. Но если вдруг что-то пойдёт не так, скачай текущий. Это и делает функция
файлы с сайта iot.amperka.ru → «Файлы на флеш-карте». stop().
20
Зуммер → A2

SD картридер D C 7 D C 6 D C 5
CS → P8

S V G
7 2 A5

6 3 A3

A2 V G

5 4 1

0 V G
A4 V G
DO → DI
DI → DO 2 V G 3 V G 4 V G
SCK → SCK
Amperka Troyka Slot Shield
CS V G

G V 8 G V 9 G V 10

G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G

S V G
DI DO DI DO DI DO
5V V2 VIN
DI DO

Кнопка → P12

1 var sdCard = require('@amperka/card-reader').connect(P8);


2 var player = require('@amperka/ringtone').create(A2);
3 var shuffle = require('@amperka/button').connect(P12);
4
5 shuffle.on('click', function() { 6 Функция
6 player.stop();
7 var melody = sdCard.readRandomFile('/music');
readRandomFile() возвра-
8 player.play(melody); щает содержимое произволь-
9 }); ного файла в папке '/music'.
10
11 shuffle.on('hold', function() { 7 Если кнопку shuffle удер-
12 player.stop(); живать в течение 1 секунды,
13 });
воспроизведение остановится.

№2 Восьмибитный аудиоплеер
5 Функция player.play()
начнёт воспроизведение ЗАДАНИЕ
мелодии. В проекте кнопку
на ИК-приёмник замени.
На расстоянии музыкой
управляй. Проектами № 17
Собери устройство и нажми на кнопку. Чтобы остановить воспроиз- и № 18 из набора «Йодо»
ведение, зажми кнопку на секунду. Попробуй угадать все мелодии воспользуйся.
из плейлиста (подсказка: всего на флешке их 4).
21

3 БРАУЗЕРНЫЙ DENDY
Роботом управлять будем в игре браузерной.
С флеш-карты её загрузим и настоящими джедаями станем.

Wi-Fi модуль:
TX V G

1 Подключаем библиотеку
Tx → P0

PROG PWR RESET


TX

Rx → P1 '@amperka/server'. Функ-
802.11b/g/n
PA +25dBm

ция create() создаёт HTTP-


ISM 2.4GHz
VENDOR AI - THINKER
MODEL ESP8266MOD

сервер, который будет обраба-


тывать запросы клиентов.
RX

2 Обработчик событий '/'


P RX

будет выдавать клиентам html-


страницу, на которой и будет
находиться наша игра. '/'
0 V G A0 V G означает, что клиент запро-
сил главную страницу сайта.
В нашем случае это 'race.
DI DO
G V 10
D C 5

V G

html'. Этот файл лежит в кор-


4

5 4 1 G V2 13 невой папке SD-карты. Читаем


Troyka Slot Shield

его функцией readFile(),


а функцией send() отдаём
SD картридер обратно клиенту. Содержимое
CS → P8 файла 'race.html' будет
A2 V G A1 V G

ответом нашего сервера.


DI DO

DO → DI
D C 6

3 V G

G V 9

DI → DO 3 С помощью функции getIP


Amperka

6 3 A3 G V2 12
SCK → SCK объекта wifi узнаём IP-адрес
5V V2 VIN

сервера (IP-адрес Iskra JS). По


этому адресу будем подклю-
A4 V G A3 V G чаться и отправлять HTTP-
запросы.
DI DO

CS V G

DI DO
V G
D C 7

G V 8
2

7 2 A5 G V2 11

22
1 var SSID = 'имя_твоего_wi-fi';
2 var PASSWORD = 'пароль_твоего_wi-fi';
3
4 var sdCard = require('@amperka/card-reader').connect(P8);
5 var server = require('@amperka/server').create();
6
7 server.on('/', function(req, res) {
8 var content = sdCard.readFile('race.html');
9 res.send(content);
10 }); 4 listen() запускает сервер.
11
12 var wifi = require('@amperka/wifi').setup(function(err) { Буквально это означает: «Сер-
13 wifi.connect(SSID, PASSWORD, function(err) { вер, начни слушать, что у тебя
14 wifi.getIP(function(err, ip) { запросят клиенты».
15 server.listen();
16 print('Game is ready! http://'+ip+'/'); 5 Выводим в консоль ссылку,
17 });
18 });
по которой можно запустить
19 }); гонки на Робоняшах. С помо-
щью оператора '+' объеди-
няем строку и переменную ip
для вывода в консоль.
Загрузи код в плату и дождись ссылки в окне консоли,
похожей на эту:
I'm ready! Click this link: http://192.168.10.20/
>

Открой страницу, кликнув на ссылку, и выигрывай гонки как настоя-


щий джедай!

ИНТЕРНЕТ ВЕЩЕЙ. № 1 БРАУЗЕРНЫЙ DENDY

4522 1234 СМ 34 ПРЫЖКА

№3 Браузерный Dendy
ЗАДАНИЕ
Рекордом своим в соци-
Поделись достижениями
альных сетях с другими
джедаями поделись.

23

4 УМНЫЙ ДОМ
Дом свой разумом надели. Железку новую освой для этого,
которая напряжением высоким управлять может.

TROYKA-МОДУЛЬ МИНИ-РЕЛЕ
Мини-реле способно выключать и включать питание, будто
выключатель света на стене. Только тот управляется вручную, а
реле управляется программой с Iskra JS. Реле способно работать
под напряжением 220 вольт.

Красный Контакты для подключения ВНИМАНИЕ!


светодиод приборов с высоким напряжением: РАБОТА С ВЫСОКИМ
Нормально замкнутый
Общий НАПРЯЖЕНИЕМ ОПАСНА
Нормально разомкнутый ДЛЯ ЗДОРОВЬЯ И ЖИЗНИ.
Если тебе ни разу не приходи-
S V G
лось работать с напряжением
220 вольт, оставь зелёные
Реле имеет 3 контакта на клеммах. В положении «выключено» (его клеммы неподключёнными.
ещё называют «нормальным» положением) реле замыкает правую
пару контактов и размыкает левую. В состоянии «включено» всё на- Вместо этого используй свето-
оборот:S реле
V G
размыкает правую и замыкает левую пару контактов. диод на реле. Если горит — реле
включено. Если нет — выклю-
На пин S подаётся логический 0. На пин S подаётся логическая 1. чено.
Светодиод не горит. Светодиод горит.

S V G S V G

~220 ~220
вольт вольт

S V G S V G

24
Это сделано для удобства и безопасности. Если на управляющих
пинах (S-V-G) внезапно пропадёт питание, реле отключится
и перейдёт в «нормальное» положение.
Представь, что в твоей комнате свет подключён к реле и Iskra JS.
Внезапно тёмным вечером Iskra JS отключилась. Тебе хотелось бы,
чтобы свет погас? Если ты хочешь, чтобы он остался гореть, нужно
подключать лампочки к нормально замкнутой паре контактов. Если
ты хочешь, чтобы свет потух, — к нормально разомкнутой.
Будем включать и выключать реле из браузера. Сделаем из Iskra JS
домашний сервер, работающий по протоколу HTTP.
На флеш-карте будем хранить html-страницу для отображения
в браузере.

RX TX

D C 7 D C 6 D C 5

P RX
7 2 A5

6 3 A3

TX V G
A2 V G

5 4 1

0 V G
A4 V G

2 V G 3 V G 4 V G

802.11b/g/n
PA +25dBm
MODEL ESP8266MOD
VENDOR AI - THINKER
ISM 2.4GHz
CS V G
Amperka Troyka Slot Shield

G V 8 G V 9 G V 10
G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G
DI DO DI DO DI DO
5V V2 VIN
DI DO PROG PWR RESET

SD картридер Wi-Fi модуль:


CS → P8 Tx → P0
Rx → P1
DO → DI
DI → DO
S V G

SCK → SCK

№4 Умный дом
Мини-реле → P12

25
1 var sdCard = require('@amperka/card-reader').connect(P8);
2 var relay = require('@amperka/relay').connect(P12);
1 Подключаем библиотеку для 3 var server = require('@amperka/server').create();
4
управление реле '@amperka/ 5 var SSID = 'имя_твоего wi-fi';
relay'. Подключаем реле 6 var PASSWORD = 'пароль_wi-fi';
к пину P12. 7
8 server.on('/', function(req, res) {
9 var content = sdCard.readFile('light.html');
10 res.send(content);
2 На первый запрос клиен- 11 });
тов к серверу выдаём html- 12
13 server.on('/turnOn', function() {
страницу 'light.html'. 14 relay.turnOn();
15 });
16
3 Обработчик событий 17 server.on('/turnOff', function() {
18 relay.turnOff();
'/turnOn' сработает, когда 19 });
ты нажмёшь на кнопку «Вклю- 20
чить» в браузере. При нажатии 21 var wifi = require('@amperka/wifi').setup(function(err) {
22 wifi.connect(SSID, PASSWORD, function(err) {
на кнопку браузер сделает 23 wifi.getIP(function(err, ip) {
дополнительный запрос сер- 24 server.listen();
веру. Сервер обработает запрос 25 print('Relay control is ready! http://'+ip+'/');
и включит реле функцией 26 });
27 });
turnOn(). 28 });

4 Обработчик событий 5 Узнаём IP-адрес Iskra JS, по


'/turnOff' выключит реле которому будем подключаться
функцией turnOff(), если ты к панели управления светом.
нажмёшь кнопку «Выключить»
в браузере.

26
I'm ready! Click this link: http://192.168.10.20/
>

Запусти панель управления, кликнув на ссылку, и переключай реле


кнопками «Включить» и «Выключить». При переключении реле
должно издавать щелчки. Это звук работы металлической пластины
внутри чёрного корпуса, которая замыкает то одну, то другую пару
контактов.

ИНТЕРНЕТ ВЕЩЕЙ. № 4 УМНЫЙ ДОМ

Поделись достижениями
ВКЛЮЧИТЬ

ЗАДАНИЕ

№4 Умный дом
Зуммер на Slot Shield уста-
нови. Звуковым сигналом
включение света снабди.

27

5 ИНТЕРАКТИВНЫЙ ДОМ
На содержимое веб-страницы силами природы и волей своей
в реальном времени влиять будем. Прибор для этого
с датчиками соберём.

Воспользуемся HTML-страницей home.html в корневой папке


флеш-карты.

ИНТЕРНЕТ ВЕЩЕЙ. № 5 ИНТЕРАКТИВНЫЙ ДОМ

22,8°C

125
км/ч

10:23:11 30°

Поделись достижениями

Подключим аналоговые датчики и будем влиять на разные элемен-


ты страницы в зависимости от положения ручки потенциометра,
температуры окружающей среды и уровня освещённости в комнате.

28
Потенциометр → A2

S V G
Wi-Fi модуль:
Термометр → A4 Tx → P0
Rx → P1
RX TX

D C 7 D C 6 D C 5
S V G

P RX
7 2 A5

6 3 A3

TX V G
A2 V G

5 4 1

0 V G
A4 V G
2 V G 3 V G 4 V G

802.11b/g/n
PA +25dBm
MODEL ESP8266MOD
VENDOR AI - THINKER
ISM 2.4GHz
Amperka Troyka Slot Shield
CS V G

G V 8 G V 9 G V 10
G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G
DI DO DI DO DI DO
5V V2 VIN
DI DO PROG PWR RESET

SD картридер Датчик освещённости → A1


CS → P8
DO → DI
S V G

DI → DO
SCK → SCK

№5 Интерактивный дом
29
1 var sdCard = require('@amperka/card-reader').connect(P8);
2 var light = require('@amperka/light-sensor').connect(A1);
3 var pot = require('@amperka/pot').connect(A2);
4 var temp = require('@amperka/thermometer').connect(A4);
5
6 var SSID = 'имя_твоего_wi-fi';
7 var PASSWORD = 'пароль_wi-fi';
8
9 var server = require('ws').createServer(function(req, res) {
10 var content = sdCard.readFile('home.html');
11 res.end(content);
1 Подключаем библиотеку 12 });
'ws' для работы с про- 13
14 function prepareData() {
токолом WebSocket. Обрати 15 var data = {
внимание, имя этой библиотеки 16 speed: Math.floor(pot.read() * 41) - 20,
не начинается с '@amperka/'. 17 light: Math.floor(light.read('lx') / 640),
Сразу же создаём сервер 18 temperature: Math.floor(temp.read('C'))
19 };
для подключения. На запрос 20 return JSON.stringify(data);
клиента сервер ответит HTML- 21 }
страницей 'home.html'. 22
23 server.on('websocket', function(ws) {
2 Функцией prepareData() 24 setInterval(function() {
подготавливаем данные с 25 ws.send(prepareData());
26 }, 200);
датчиков в удобный формат 27 });
для передачи по протоколу. 28
Собираем данные в единый 29 var wifi = require('@amperka/wifi').setup(function(err) {
объект с полями 'speed', 30 wifi.connect(SSID, PASSWORD, function(err) {
31 wifi.getIP(function(err, ip) {
'light' и 'temperature', 32 print('I\'m ready! http://'+ip+'/');
а затем упаковываем объект 33 server.listen(80);
в строку функцией JSON. 34 });
stringify(). 35 });
36 });

3 Обработчик событий
server.on() начнёт свою
работу, как только браузер
предложит серверу устано-
вить соединение по протоколу
WebSocket. Как только соедине-
ние установится, сервер начнёт
отправлять браузеру данные
с аналоговых датчиков функ-
цией send().
30
4 Функция read() для ана- Как и в прошлом проекте, дождись ссылки в консоли и кликни
логовых датчиков возвращает на неё.
значения от 0 до 1. Умножив
I'm ready! Click this link: http://192.168.10.20/
результат на 41, получаем >
диапазон от 0 до 41. Функ-
ция Math.floor() округляет Посмотри, как показания датчиков влияют на страницу в браузере:
дробное число до ближайшего Попробуй покрутить ручку потенциометра;
целого в меньшую сторону. Посвети на датчик освещённости или закрой его от света рукой;
Отнимаем 20 и получаем диа- Нагрей ладонью датчик температуры или приложи к нему что-
пазон от −20 до 21. В этом диа- нибудь из холодильника.
пазоне будем менять скорость
космического дома.

5 Запускаем сервер функцией


listen(). Параметр 80 озна-
чает, что мы используем 80-й
порт. Это стандартный номер
порта для HTTP-запросов.

ЗАДАНИЕ
Поуправляй другими элементами страницы.

Параметр Диапазон Пример преобразования информации датчика


Свойство объекта значений в нужный диапазон
Координата робота-
пылесоса cleaner 0…600 Math.floor(pot.read() * 601)

Скорость космического
корабля speed −20…20 Math.floor(pot.read() * 41) - 20

№5 Интерактивный дом
Температура
в печи oven 0…255 Math.floor((temp.read('C') - 20) * 20)

Количество включённых
лампочек light 0…5 Math.floor(light.read('lx') / 640)

Температура внутри
корабля temperature −40…+125 Math.floor(temp.read(‘C’))

31

6 НАПОМИНАЛЬНИК
Важные события жизни своей в почте оставляй. Кота покормил?
В почту себе напоминание пришли, чтобы в тонусе падавана
держать.

Для отправки писем используется особый протокол: SMTP.


Он не очень удобен для работы напрямую с Iskra JS. Гораздо проще
использовать готовые сервисы. Воспользуемся одним из таких —
IFTTT.
Будем высылать на свой email-адрес письмо, содержащее вре-
мя последнего кормления кота или выполнения любого другого
рутинного действия. Свяжем между собой два компонента: сервис
Webhooks и электронную почту.
Сервис Webhooks умеет принимать простые HTTP-запросы
и перенаправлять их IFTTT. Заведи себе учётную запись
на сайте ifttt.com

Нажми на кнопку, Iskra JS


Покормил кота? отправит HTTP-запрос
к сервису Webhooks.

Webhooks перенаправит IFTTT отправит на твой адрес Если кот попросит еды,
запрос сервису IFTTT. письмо. проверь в почте, не забыл ли
с утра его покормить.
1

32
1 Зайди на ifttt.com. Нажми вверху кнопку «My Applets», а затем

«New Applet».

2 Нажми кнопку «this».

№6 Напоминальник
33
3 Набери в поисковой строке «webhooks». В появившемся списке
выбери «Webhooks».

4 Выбери действие «Receive a web request».

34
5 Поле «Event Name» назови «feed» и нажми кнопку «Create
trigger».

6 Мы закончили создавать условие (триггер). Теперь сервис

Webhooks готов принимать HTTP-запросы от Iskra JS. Это похоже на


работу сервиса dweet.io, но Webhooks не строит графики, а пере-
даёт информацию дальше сервису IFTTT. Теперь для IFTTT нужно
задать действие при срабатывании нашего триггера.
Нажми кнопку «that».

№6 Напоминальник
35
7 Набери в поисковой строке «email» и выбери появившийся

компонент.

8 Выбери действие «Send me an email».

36
9 Задай образец письма. Придумай заголовок (Subject), а тело
письма (Body) оставь нетронутым. Затем нажми «Create action».

10 Поля Value1, Value2 и Value3 позволяют передавать в пись-

ме дополнительные данные. Отправляя с Iskra JS запрос сервису


Webhooks, можно указать значения этих полей.
Наконец, жми «finish».

№6 Напоминальник
37
11 Всё готово. Помнишь, в проекте с dweet.io ты придумывал себе
уникальный ключ? Webhooks тоже использует уникальный ключ, но
выдаёт его самостоятельно.
Чтобы узнать этот ключ, перейди во вкладку «Webhooks».

12 Нажми кнопку «Settings»

38
13 Скопируй часть ссылки «URL». Потребуется только последняя часть

адреса. Вставь её в код для Iskra JS.

14 Установи на Slot Shield модуль кнопки. Wi-Fi модуль:


Tx → P0
Rx → P1

RX TX

Кнопка → P12 D C 7 D C 6 D C 5

P RX
7 2 A5

6 3 A3

TX V G
A2 V G

5 4 1

0 V G
A4 V G

2 V G 3 V G 4 V G

802.11b/g/n
PA +25dBm
MODEL ESP8266MOD
VENDOR AI - THINKER
ISM 2.4GHz
S
V G

Amperka Troyka Slot Shield

№6 Напоминальник
G V 8 G V 9 G V 10
G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G

DI DO DI DO DI DO
5V V2 VIN
PROG PWR RESET

39
1 var SSID = 'имя_твоего wi-fi';
2 var PASSWORD = 'пароль_wi-fi';
3
4 var trigger = require('@amperka/button').connect(P12);
5 var maker = require('@amperka/ifttt-webhooks').create({
6 token: 'токен_сервиса_webhooks',
7 action: 'feed'
1 Подключаем библиотеку 8 });
'@amperka/ 9
10 var wifi = require('@amperka/wifi').setup(function(err) {
ifttt-webhooks' 11 wifi.connect(SSID, PASSWORD, function(err) {
для работы с сервисом. Пере- 12 print('Ok, hold button.');
даём в функцию create 13 });
параметры token и action. 14 });
15
token — уникальная часть 16 var data = {
адреса сервиса Webhooks, 17 value1: 'I did it!'
на который будем отправлять 18 };
запросы, action — название 19
20 trigger.on('hold', function() {
нашего события, в письме оно 21 maker.send(data, function(response) {
указано как EventName. 22 print(response);
23 });
24 });

2 Готовим данные для 3 Функция send отправ-


отправки сервису ('Extra ляет HTTP-запрос к сервису
data' в теле письма). Храним Webhooks. В ответ сервис
их в переменной data. Это возвращает строку, выводим
объект с полем value1 и значе- её в окно консоли.
нием 'I did it!' («Я сделал
это!»). Сервис Webhooks может
принять максимум 3 поля:
value1, value2 и value3.
Поля могут принимать любые
значения. Указывать их вовсе
не обязательно, поэтому будем
использовать только value1.

40
Дождись сообщения в консоли, что Iskra JS подключилась к Wi-Fi.
I'm ready!
>

15 Нажми и удерживай кнопку. В консоли увидишь надпись:


I'm ready!
Congratulations! You've fired the feed event

В течение нескольких минут на твою почту придёт сообщение


с твоим заголовком и дополнительным полем 'I did it!'.
Теперь, когда ты с утра покормил кота, нажми на кнопку. Если кот
днём попросит еды, покажи ему письмо, пусть не клянчит.

№6 Напоминальник
ЗАДАНИЕ
Набор «Йодо» вспомни ты. Ультразвуковой
дальномер используй, чтобы двери открытия
триггер создать.

41

7 TELEGRAM-BOT
Мессенджером модным овладей. Iskra JS ему обучи.

Будем использовать мессенджер Telegram. Если у тебя ещё нет


аккаунта в Telegram, заведи его! Установи приложение на свой
смартфон или воспользуйся web-версией.
Telegram позволяет создавать собственных чат-ботов. Чат-бот —
это робот, умеющий вести переписку. Робот может создавать специ-
альные кнопки управления в чате и реагировать на их нажатие.
Такие кнопки называются клавиатурами. Сделаем бота, управляю-
щего светом по команде с клавиатуры.
1 Открой мессенджер. В поиске найди главного 2 Выбери пункт «/newbot».
бота — «@botfather». Заведи с ним диалог
и нажми кнопку «START».

42
3 Придумай имя своему боту. 4 Теперь придумай уникальный логин бота. Он

обязательно должен заканчиваться на «bot».

№7 telegram-bot
43
5 Сделано! Теперь скопируй специальный токен,

который тебе выдал @BotFather. Он потребуется


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

Wi-Fi модуль:
Tx → P0
Rx → P1

RX TX

P RX

TX V G
Светодиод → P3

802.11b/g/n
PA +25dBm
MODEL ESP8266MOD
VENDOR AI - THINKER
ISM 2.4GHz
S V G PROG PWR RESET

D C 7 D C 6 D C 5
7 2 A5

6 3 A3

A2 V G

5 4 1

0 V G
A4 V G

2 V G 3 V G 4 V G

Amperka Troyka Slot Shield

G V 8 G V 9 G V 10
G V2 11

G V2 12

G V2 13
A1 V G
A3 V G

A0 V G
DI DO DI DO DI DO
5V V2 VIN

44
2 Обработчик событий
1 var SSID = 'имя_твоего wi-fi'; '/start' будет вызван, когда
2 var PASSWORD = 'пароль_wi-fi';
3
бот получит сообщение, что
4 var bot = require('@amperka/telegram').create({ собеседник нажал кнопку
5 token: 'здесь_будет_твой_токен', '/start'. В ответ бот при-
6 polling: { timeout: 10 } шлёт клавиатуру с двумя
7 });
8 var light = require('@amperka/led').connect(P3);
кнопками: включить свет и
9 выключить. Клавиатура отправ-
10 bot.on('/start', function(msg) { ляется собеседнику функцией
11 var keyboard = bot.keyboard([ sendMessage с дополнитель-
12 ['/TurnOff', '/TurnOn']
13 ], { resize: true });
ным параметром markup.
14 bot.sendMessage(msg.from.id, 'Light control', {
15 markup: keyboard
16 }); 3 События '/TurnOn'
17 });
18 и '/TurnOff' вызываются
19 bot.on('/TurnOff', function(msg) { по нажатию кнопок на клави-
20 light.turnOff(); атуре. В ответ высылаем под-
21 bot.sendMessage(msg.from.id, 'Light is off');
22 });
тверждение, что бот исполнил
23 команду.
24 bot.on('/TurnOn', function(msg) {
25 light.turnOn();
26 bot.sendMessage(msg.from.id, 'Light is on');
27 });
28
29 var wifi = require('@amperka/wifi').setup(function(err) {
30 wifi.connect(SSID, PASSWORD, function(err) {
31 print('I\'m ready!');
32 bot.connect(); 4 Функция connect()
33 });
34 });
запускает работу с сервисом
Telegram.

1 Подключаем библиотеку
'@amperka/telegram'
и вызываем функцию
create(). В параметре token
указываем токен, который
выдал @BotFather, а в пара-

№7 telegram-bot
метре polling указываем
timeout 10 секунд, чтобы
Iskra JS не отправляла запросы
к серверам Telegram слишком
часто.

45
6 Кликни на ссылку, которую тебе дал 7 Теперь добавь своего бота в контакты

@BotFather, чтобы начать разговор с твоим и нажми кнопку «START»!


ботом.

Нажимай на кнопки в интерфейсе, смотри, как включается


и выключается светодиод.

46
Обрати внимание. Сервис Telegram работает только по протоколу
HTTPS (шифрованное соединение HTTP). Для шифрования данных
требуется много вычислительных ресурсов, поэтому задержка отклика
Iskra JS на сообщение в Telegram заметна глазу.

ЗАДАНИЕ
Подключи к Iskra JS датчики освещённости и температуры. Пусть по команде сообщение тебе
придёт о температуре и яркости в комнате (чтобы обновить клавиатуру на экране, набери /start
в текстовом окне чата). Воспользуйся примерами клавиатур, чтобы сделать свою собственную.

var keyboard = bot.keyboard([


['/TurnOff', '/TurnOn'],
['/LightUp', '/LightDown']
], { resize: true });

var keyboard = bot.keyboard([


['/TurnOff', '/TurnOn'],
['/WarmUp_Teapot'],
['/Backward', '/Play_Pause', '/Forward']
], { resize: true });

var keyboard = bot.keyboard([


['/Wau']
], { resize: false });

№7 telegram-bot
Ура, ты прошёл весь набор! Теперь ты можешь создавать серьёзные
устройства. Используй изученные сервисы для своих крутых про-
ектов. Полив растений, кормушка для домашних животных и птиц,
система умного дома — управление устройствами теперь доступно
с твоего смартфона в любое время даже на другом конце Земли!
47
ИДЕИ ПРОЕКТОВ
Прошёл набор «IoT»? Молодец!
Вот тебе идеи для приборов, которые пригодятся в быту. Применяй
знания, комбинируй модули, придумывай и твори с Амперкой!

МЕТЕОСТАНЦИЯ АВТОПОЛИВ ПОЖАРНАЯ


Создай свою собственную При помощи датчиков влажно- СИГНАЛИЗАЦИЯ
метеостанцию, используя сти почвы ты сможешь всегда Датчик горючих и угарного
Troyka-модули барометра быть уверенным, что твои газов MQ-9 даст тебе уверен-
и цифрового датчика темпе- редкие растения не засохнут ность в безопасности твоего
ратуры и влажности. Добавь от недостатка воды. А даты жилья. В случае, если он обна-
аккумулятор Power Shield, поливов ты сможешь регистри- ружит в воздухе присутствие
и получи автономное устрой- ровать с помощью сервиса опасных газов, он сможет при-
ство, которое можно оставить Webhooks! слать сообщение тебе прямо
на длительное время за окном. в Telegram!
Не забудь поместить метео-
станцию в герметичный корпус,
чтобы она работала даже
в очень плохую погоду.

48
СВЕТОМУЗЫКА АНТИВОР АВТОНОМНЫЙ ГАДЖЕТ
Цветная адресуемая светоди- Датчик шума и ультразвуко- GPRS Shield, совместимый
одная лента WS2811 позволит вой дальномер позволят тебе с Iskra JS, позволит тебе соз-
тебе создать освещение в ком- построить систему сигнализа- давать ещё более автономные
нате, цвет которого ты сможешь ции в твоей комнате — приборы — ведь теперь они
контролировать со смартфона, ты всегда будешь знать, если будут выходить в сеть
или даже сделать его реаги- в ней появятся непрошеные не с помощью Wi-Fi роутера,
рующим на музыку, которая гости. А модуль MP3-плеера а напрямую по сотовой сети.
играет в твоей комнате. в комбинации с модулем ауди- Не забудь приобрести
овыхода сможет твоим голосом SIM-карту с безлимитным
вежливо попросить их покинуть трафиком!
твою территорию.
#СТРУКТОР
Устройства на Troyka Slot Shield
можно удобно оформлять
в корпус из #Структора с помо-
щью набора плашек Slot Box TX

(#Структор). Их можно найти


G
V
TX
RX

на сайте amperka.ru. aM
o
yk
T ro

du
le

T
SE
RE
e

R
ul

PW
od

ВСЕ ЭТИ ДАТЧИКИ


OG
M

PR
a
yk
ro
T
a
rk

И ПРИБОРЫ
e

G S
p

V
m

V
CS
G
A

S
V
G

DI
DO
ТЫ СМОЖЕШЬ НАЙТИ
НА AMPERKA.RU.

Идеи проектов
ОСТАВАЙСЯ С НАМИ —
ТЕБЯ ЖДЁТ ЕЩЁ БОЛЬШЕ
КРУТЫХ ПРОЕКТОВ!
49
СПРАВОЧНИК
ПРОТОКОЛ HTTP
Данные по протоколу HTTP передаются в виде текстовых строк.
В начале текста записаны заголовки (headers), а затем идёт тело
(body). Заголовки — это особые строки, которые определяют
свойства тела. Например, они сообщают размер тела в байтах, тип
данных (текст, объект, файл) и всякую служебную информацию.
Например, запрос браузера к сайту «Амперки» (запрос клиента
к серверу по протоколу HTTP) выглядит примерно так:

Host: amperka.ru
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html

1 Заголовок Host означает 2 User-Agent сообщает 3 Поле Accept означает,


имя сайта, на который отправ- название браузера клиента. Это в каком формате клиент готов
ляется запрос. необходимо для правильного принять ответ от сервера.
отображения страницы В данном случае клиент
в разных браузерах. ожидает html-страницу.

Ответ сервера на запрос:


3 Поля, начинающиеся со слова

HTTP/1.1 200 OK
Content, сообщают свойства
Date: Mon, 10 Apr 2017 11:43:05 GMT тела ответа: длину в байтах,
Content-Language: ru кодировку, язык, формат данных
Content-Type: text/html; и некоторые другие.
Content-Length: 1234
4 Пустая строка в ответе
далее следует запрошенная страница в HTML обязательна. Она сообщает,
что заголовки закончились
1 Первая строчка в ответе 2 Поле Date передаёт время и дальше пойдёт тело ответа.
сервера означает статус ответа. сервера. Оно может отличаться 5 В теле ответа содержатся
Каждый статус закодирован от твоего местного времени, запрашиваемые данные,
числом. Статус 200 говорит, что если сервер находится в дру- например HTML-страница
всё в порядке, сервер обрабо- гом часовом поясе. сайта amperka.ru.
тал запрос и отдал корректный
ответ.
50
СЕРВИС DWEET.IO
var dweet = require('@amperka/dweetio').connect('твой_уникальный_ключ');
dweet.send({
temperature: 36.6,
light: 700,
noise: 40
}) — отправить сервису объект с полями: temperature, light и noise.

dweet.follow() — получить строку с адресом страницы, где видны графики.

Подробнее на wiki.amperka.ru/js:dweetio.

WI-FI
var wifi = require('@amperka/wifi').setup(function(err) {
print(err);
}); — подключить модуль Wi-Fi и вывести в консоль информацию о возможных ошибках.

wifi.connect(SSID, PASSWORD, function(err) {


print(err);
}); — подключиться к сети Wi-Fi с именем SSID и паролем PASSWORD.

wifi.getIP(function(err, ip) {
print(err, ip);
}); — получить IP-адрес, выделенный роутером. Вывести на печать адрес и возможные ошибки.

Подробнее на wiki.amperka.ru/js:wifi.

КАРТРИДЕР
var sdCard = require('@amperka/card-reader').connect(P4); — подключить
картридер с пином CS на P4.

Справочник
sdCard.readDir('/'); — получить список всех файлов и папок в корне SD-карты.

51
sdCard.isDirectory('folder'); — проверить, является «folder» папкой
или файлом.

sdCard.readFile('/music/ringtone.rtttl'); — прочитать содержимое файла


«ringtone.rtttl» из папки «music».

sdCard.readRandomFile('/music'); — прочитать содержимое произвольного файла


в папке «music».

sdCard.writeFile('new_data.txt', 'IoT will save the world'); — создать


новый файл с именем «new_data.txt» и записать в него строку «IoT will save the world».

sdCard.appendFile('data.txt', 'Iskra JS'); — дописать в файл


«data.txt» строку «Iskra JS».

Подробнее на wiki.amperka.ru/js:card-reader.

HTTP-СЕРВЕР
var server = require('@amperka/server').create();
server.listen(80); — запустить HTTP-сервер на порту 80.

server.on('/', function(req, res) {


res.send('hello from server');
}); — обработать запрос и отправить клиенту строку «hello from server».

server.on('/turnOn', function() {
relay.turnOn();
}); — обработать запрос на путь «turnOn».

Подробнее на wiki.amperka.ru/js:server.

52
СЕРВЕР WEBSOCKET
var socket = require('ws').createServer(function(req, res) {
var content = sdCard.readFile('font.html');
res.end(content);
}); — создать HTTP-сервер, поддерживающий протокол websocket.

socket.listen(80); — запустить сервер на порту 80.

socket.on('websocket', function(ws) {
ws.send('ping');
}); — при запросе клиента на создание соединения websocket отправить клиенту
строку «ping».

Подробнее на wiki.amperka.ru/js:websocket.

СЕРВИС WEBHOOKS ДЛЯ IFTTT


var maker = require('@amperka/ifttt-webhooks').create({
token: 'токен_сервиса_webhooks',
action: 'название_действия_в_апплетах_IFTTT'
}); — подключить библиотеку для сервиса Webhooks и задать токен и действие.

maker.send(data, function(response) {
print(response);
}); — отправить сервису Webhooks триггер события.

Подробнее на wiki.amperka.ru/js:ifttt-webhooks.

TELEGRAM-БОТ
var bot = require('@amperka/telegram').create({

Справочник
token: 'токен_сервиса_telegram',
polling: { timeout: 10 }
}); — подключить библиотеку Telegram-бота с заданным токеном и временем удер-
жания соединения при обновлении.
53
var keyboard = bot.keyboard([
['/TurnOff', '/TurnOn'],
], { resize: true }); — создать объект-клавиатуру.

bot.on('/start', function(msg) {
bot.sendMessage(msg.from.id, 'Light control', { markup: keyboard });
}); — отправить клавиатуру собеседнику бота, когда тот нажмёт кнопку «START»
в диалоге.

bot.on('/TurnOff', function(msg) {
light.turnOff();
}); — выключить свет, когда собеседник нажмёт кнопку «/TurnOff».

bot.sendMessage(msg.from.id, 'Light control', { markup: keyboard }); — отправить


сообщение с текстом «Light control» и клавиатурой.

bot.connect(); — запустить автоматическое получение обновлений.

Подробнее на wiki.amperka.ru/js:telegram.
В компании Амперка надеемся
мы, что понравился наш набор.
Если вопросы есть у тебя,
ответят на форуме на них:
forum.amperka.ru
За порцией вдохновения
к видеоканалу обращайся:
youtube.com/AmperkaRU
Руководства и инструкции
подробные ищи
на wiki.amperka.ru
За платами новыми
и модулями могучими
в магазин специальный иди:
amperka.ru
Электронная версия книги:
iot.amperka.ru

vk.com/amperkaru
facebook.com/amperka.ru
instagram.com/amperkaru
Дизайн: студия «Кластер»
clusterstudio.ru twitter.com/amperka