Электронная версия инструкции из набора «IoT (Интернет вещей)». Здесь собраны все исходные коды экспериментов, подсказки и хаки по прохождению набора.
Если прошивка твоей платы ниже 1v91, обнови её. Обновить версию прошивки до самой свежей можно непосредственно в IDE. Для этого перейди в в разделе про обновление прошивки Iskra JS.
, нажми кнопку Flash Firmware и следуй инструкциям на экране. Более подробную информацию ты найдешь
Для проектов IoT тебе потребуются платы и модули из базового набора «Йодо»:
Если ты уже используешь эти модули и платы в своих крутых проектах, а разбирать их не хочется — закажи недостающие!
На флешке в составе набора уже есть файлы. Они понадобятся тебе для проектов, не изменяй и не удаляй их. Но если всё-таки что-то пошло не так — ты всегда сможешь скачать архив с файлами. Распакуй архив и скопируй файлы на SD-карту. Iskra JS работает только с картами, отформатированными в FAT32.
Иногда в прямой досягаемости нет Wi-Fi сети, а сделать эксперименты из набора очень хочется. Что же делать в таком случае? Поднять такую сеть самому при помощи смартфона!
Некоторые операторы блокируют возможность раздавать Wi-Fi с телефона. Если у тебя в меню нет нужных пунктов — свяжись со службой поддержки оператора и попроси активировать эту функцию. Обычно операторы восстанавливают эту возможность в течение часа после обращения.
Настройки общего доступа к сотовой сети твоего телефона находятся в меню
. В этом меню можно включить режим точки доступа и задать ей пароль. Именем (SSID) точки доступа будет имя телефона. Рекомендуем не закрывать это меню до тех пор, пока клиент не подключится к точке доступа.
После первого включения режима модема такой пункт скорее всего появится в главном меню настроек телефона.
Особенность телефонов на ОС Android — практически у каждого производителя свой интерфейс. Это значит, что невозможно точно сказать, где в твоем телефоне находится кнопка «Раздать интернет» (или даже как она называется). Обычно её можно найти в настройках под названиями вроде «Режим модема и переносная точка доступа».
Плату 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.
Музыки проигрыватель сделаем себе. На флеш-карте треки хранить будем, зуммером их воспроизводить и кнопкой одной лишь переключать. Потребуется модуль 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.
Роботом управлять будем в игре браузерной. С флеш-карты её загрузим и мастерством гоночным овладеем!
Для этого эксперимента мы будем использовать модули 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+'/'); }); }); });
Дом свой разумом надели. Мини-реле освой для этого, которое напряжением высоким управлять может.
ВНИМАНИЕ! РАБОТА С ВЫСОКИМ НАПРЯЖЕНИЕМ ОПАСНА ДЛЯ ЗДОРОВЬЯ И ЖИЗНИ.
Если тебе ни разу не приходилось работать с напряжением 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.
На содержимое веб-страницы силами природы и волей своей в реальном времени влиять будем. Прибор для этого с датчиками освещения и температуры соберем. А для волей контроля потенциометр добавим.
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.
Важные события жизни своей в почте оставляй. Кота покормил? В почту себе напоминание пришли, чтобы в тонусе падавана держать. Использовать для этого сервисы 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 ты можешь узнать из нашей статьи на вики.
Mессенджером Telegram овладеем. Iskra JS ему обучим и сложные интерактивные системы строить с ним будем. А для начала научимся света включением из чата управлять.
node --version && npm --version
Вы должны увидеть текущие версии установленных программ:
v12.15.0 6.14.5
npm install -g --unsafe-perm node-red
node-red
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Cкрипт делает следующее:
sudo apt install nodejs
sudo apt install npm
sudo npm install -g --unsafe-perm node-red
node-red
node --version && npm --version
Вы должны увидеть текущие версии установленных программ:
v12.15.0 6.14.5
npm install -g --unsafe-perm node-red
node-red
MQTT — это легковесный протокол, применяемый для общения между устройствами (M2M — machine-to-machine). Он использует модель издатель-подписчик для передачи сообщений поверх протокола TCP/IP. Центральная часть MQTT-протокола это MQTT-сервер или брокер, который имеет доступ к издателю и подписчику. Используя MQTT можно построить сеть датчиков, где они публикуют свои данные в форме сообщений, уникальных для каждого из них. Исполнительные устройства подписываются на сообщения, на которые им необходимо реагировать. MQTT-брокер будет заботиться о перенаправлении сообщений от издателя к подписчику.
В качестве MQTT-брокера используем mosquitto.
sudo apt install mosquitto
sudo service mosquitto status
В терминале вы должны увидеть следующее:
● mosquitto.service - Mosquitto MQTT Broker Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-12-03 12:49:04 MSK; 2min 10s ago Docs: man:mosquitto.conf(5) man:mosquitto(8) Main PID: 2069 (mosquitto) Tasks: 1 (limit: 4150) CGroup: /system.slice/mosquitto.service └─2069 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Убедитесь, что в строке Active указан статус active (running). Если это не так, запустите сервис mosquitto с помощью команды:
sudo systemctl start mosquitto.service
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install mosquitto
node-red
Запуск может занять несколько секунд. Вы увидите, что сервер Node-RED запущен по адресу http://127.0.0.1:1880
Внимание! Вы должны держать терминал с запущенным Node-RED открытым.
Чтобы завершить работу с Node-RED нажмите клавиши Ctrl-C или просто закройте терминал, нажав на крестик.
node-red
Запуск может занять несколько секунд. Вы увидите, что сервер Node-RED запущен по адресу http://127.0.0.1:1880
Внимание! Вы должны держать терминал с запущенным Node-RED открытым.
var SSID = 'имя_вашей_wi-fi_сети'; var PASSWORD = 'пароль_вашей_wi_fi_сети'; var MQTT_HOST = 'ip_адрес_вашего_компьютера'; var TOPIC = 'led/'; var led = require('@amperka/led').connect(P6); var wifi = require('@amperka/wifi').setup(function(err) { wifi.connect(SSID, PASSWORD, function(err) { if (err) { console.log(err); } else { console.log('Connected to Wifi'); mqttConnect(); } }); }); function mqttConnect() { mqtt = require('MQTT').connect({ host: MQTT_HOST, }); mqtt.on('connected', function() { console.log('MQTT connected'); mqtt.subscribe(TOPIC + 'set'); }); mqtt.on('disconnected', function() { console.log("MQTT disconnected"); }); mqtt.on('publish', function(pub) { if (pub.topic == TOPIC + 'set') { var message = JSON.parse(pub.message); if (message.content == 'On') { led.turnOn(); message.content = 'LED is turned on'; } else if (message.content == 'Off') { led.turnOff(); message.content = 'LED is turned off'; } else { message.content = 'I don\'t understand'; } mqtt.publish(TOPIC + 'status', JSON.stringify(message)); } }); }
Не забудьте заменить в коде значения переменных SSID, PASSWORD, MQTT_HOST на имя вашей Wi-fi сети, пароль и IP-адрес вашего компьютера соответственно.
ipconfig
Прошел набор «IoT»? Молодец! Лови идеи для приборов, которые пригодятся тебе в быту. Применяй знания, полученные из набора, комбинируй различные модули, придумывай и твори с Амперкой!
Используя Troyka-модули барометра и цифрового датчика температуры и влажности, можно создать свою собственную метеостанцию. При помощи пары беспроводной передатчик — беспроводной приёмник на частоте 433 МГц ты сможешь собрать свою метеостанцию в герметичном корпусе и, придумав для неё питание на Power Shield, создать автономное устройство. Оно не будет бояться воды и будет точно сообщать тебе данные о погоде за окном. А модуль в своей комнате ты сможешь оснастить LCD-экраном, чтобы на показания датчиков было приятно смотреть. И, разумеется, ты сможешь получать все эти данные с помощью созданного тобой Telegram-бота!
При помощи датчиков влажности почвы ты сможешь всегда быть уверенным, что твои редкие растения не засохнут от недостатка воды. А даты поливов ты сможешь регистрировать с помощью сервиса Webhooks!
Датчик горючих и угарного газов MQ-9 даст тебе уверенность в безопасности твоего жилья. В случае, если он обнаружит в воздухе присутствие опасных газов, он сможет прислать сообщение тебе прямо в Telegram!
Цветная адресуемая светодиодная лента WS2811 позволит тебе создать освещение в комнате, цвет которого ты сможешь контролировать со смартфона, или даже сделать его реагирующим на музыку, которая играет в твоей комнате.
Датчик шума и ультразвуковой дальномер позволят тебе построить систему сигнализации в твоей комнате — ты всегда будешь знать, если в ней появятся непрошеные гости. А модуль MP3-плеера в комбинации с модулем аудиовыхода сможет твоим голосом вежливо попросить их покинуть твою территорию.
Если ты захочешь еще сильнее защитить свою комнату от незваных гостей — ты сможешь воспользоваться сканером RFID/NFC, выполненном все в том же формате Troyka-модуля. При помощи этого датчика можно сконструировать не только замок на дверь в комнату, но и запереть секретный ящик шкафа и даже реализовать включение компьютера по приближению к датчику NFC-карты или смартфона!
GPRS Shield, совместимый с Iskra JS, позволит тебе создавать ещё более автономные приборы — ведь теперь они будут выходить в сеть не с помощью Wi-Fi роутера, а напрямую с помощью сотовой сети. Не забудь приобрести SIM-карту с безлимитным трафиком!