roman romanovsky, sergey rak - "javascript в iot "
TRANSCRIPT
РоманРомановский
1
Сергей Рак
О чем мы сегодня поговорим
2
● Поделимся своим опытом в области IoT● Расскажем о своем проекте Restroom Revolution● Немного покодим● Расскажем о перспективах JavaScript в IoT● Ответим на ваши вопросы и разыграем пару маек
С чего все начиналось
3
4
5
6
Как мы представляли себе процесс прототипирования
1. Взять какие-то железки2. Скопировать откуда-то примеры кода3. ???4. PROFIT!!!
7
8
Ожидание Реальность
Как создать прототип устройства1. Купить какие-то железки2. Скопировать откуда-то примеры3. А еще:
● Настроить среду разработки● Изучить основы С/С++● Узнать о работе микроконтроллера● Узнать, что такое Push-Pull/Analog pin/тактирование шины● Узнать, что такое прерывания● Узнать, что за интерфейс SPI/I2C/UART● Узнать, что дебага нет● Узнать, что такое инверсия приоритетов● ...
4. PROFIT!!!
9
Никогда не сдавайся
10
Только JavaScript, только hardcore
11
Проекты совмещающие скриптовые языки с прикладным ПО
12
Топ проектов, совмещающих скриптовые языки и прикладное ПО
13
Duktape Espruino JerryScript eLuaRun on MCUFull support ES5.1,Partially ES6/ES7
Run on MCUFull support ES5.1,Partially ES6
Run on MCUFull support ES5.1,+IoT.js = Max Node.js compatibility
Run on MCULua 5.1,Async ModelBest C/C++ API
Топ проектов, совмещающих скриптовые языки и прикладное ПО
14
Duktape Espruino JerryScript eLuaRun on MCUFull support ES5.1,Partially ES6/ES7
Run on MCUFull support ES5.1,Partially ES6
Run on MCUFull support ES5.1,+IoT.js = Max Node.js compatibility
Run on MCULua 5.1,Async ModelBest C/C++ API
Espruino
15
Espruino Firmware Espruino Web IDE Espruino devices
Как работает Espruino
16
Как работает Espruino
17
Как работает Espruino
18
Как работает Espruino
19
Как работает Espruino
20
Как работает Espruino
21
Как это было
22
1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE
Как это было
23
1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE
Загрузили прошивку
24
Что нам понадобилось?1. Screen - sudo apt-get install screen2. Pip - sudo apt-get install python-pip3. Esptool - pip install esptool4. Espruino - http://www.espruino.com/Download
Загрузили прошивку
25
sudo esptool.py --port /dev/ttyUSB0 --baud 115200 \ write_flash --flash_freq 80m --flash_mode qio --flash_size 32m \ 0x0000 "boot_v1.6.bin" 0x1000 espruino_esp8266_user1.bin \ 0x3FC000 esp_init_data_default.bin 0x3FE000 blank.bin
http://www.espruino.com/ESP8266_Flashing
Загрузили прошивку
26
Как это было
27
1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE
Настроили Wi-Fi на устройстве
28
sudo screen /dev/ttyUSB0 115200var wifi = require("Wifi");wifi.connect("my-ssid", { password: "my-password" }, function (error) {
console.log(error || "connected!");});wifi.getIP();wifi.save();
Как это было
29
1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE
Настроили Web IDE
30
Espruino Web IDE
https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo
31
32
33
34
35
36
37
Пример кода
38
var wifi = require("Wifi");var http = require("http");var host = "some-host.com";var path = "/";
var options = { host: host, port: 80, path: path, method: "POST", headers: { "Content-Type": "application/json" }};
(function loop () { var isLightOn = analogRead(D0) > 0.2; var data = JSON.stringify({ "ip": info.ip, "deviceId": info.mac, "status": isLightOn }); var request = http.request(options, function (response) { console.log("posted:", data); console.log("response:", response); }).end(data);
setTimeout(loop, 3000);}());
39
Давайте пошкодим
40
Пример подключения“произвольного” датчика
41
Live Coding
1. Подключим библиотеку «IRReceiver»и научимся принимать коды нажатий кнопок пульта
2. Подключим библиотеку «RGBLed»и помигаем светодиодом в ответ на определенные нажатия кнопок пульта
Демонстрация Restroom Revolution
42
43
44
Фоторезистор RGB светодиод
45
Батарейка «Крона»
Импульсный преобразователь
напряжения
46
Итоговая стоимость устройства
47
var wifi = require("Wifi");var http = require("http");var host = "some-host.com";var path = "/";
var options = { host: host, port: 80, path: path, method: "POST", headers: { "Content-Type": "application/json" }};
(function loop () { var isLightOn = analogRead(D0) > 0.2; var data = JSON.stringify({ "ip": info.ip, "deviceId": info.mac, "status": isLightOn }); var request = http.request(options, function (response) { console.log("posted:", data); console.log("response:", response); }).end(data);
setTimeout(loop, 3000);}());
Witty Cloud
~$5
Импульсный преобразователь напряжения
~$2
Батарейка «Крона»
~$2
Муляж камеры для видеонаблюдения
~$8
~$17
48
Проблемы с которыми мы столкнулись
49
ЭнергопотреблениеПотребление (мА)
Tx 802.11g,OFDM 54Mbps,Pout=+15dBm 140
Tx 802.11n, MCS7, Pout=+13dBm 120
Rx 802.11g, 1024 bytes packet length, -70dBm 56
Rx 802.11n, 1024 bytes packet length, -65dBm 56
Modem-Sleep 15
Light-Sleep 0.5
Deep-Sleep 0.01
50
ЭнергопотреблениеПотребление (мА)
Принять пакет данных 140
Отправить пакет данных 56
Поддержание соединения 15
Выключить WiFi и процессор 0.5
Глубокий сон 0.01
51
Энергопотребление
require("ESP8266").deepSleep(5000);
Если хочется повторить
52
Всё начиналось не так...
53
Что выбрать? Хотим компактное устройство с WiFi
54
Raspberry Pi 3b (Zero W)
Arduino+ Wi-Fi Shield
ESP8266 Witty Cloud
Linux + Node.jsПитание
~ 20$
Не все типы подходят,Большой размер
~ 40$
Малый размер,Малое потребление,
~ 5$
Поддерживаемые устройства проектом Espruino
55
http://www.espruino.com/Other+Boards
https://www.espruino.com/Order
Поддерживаемые датчики
56
http://www.espruino.com/Sensors
Поддержка из коробки
Поддерживаемые датчики
57
Любой SPI/I2C датчик совместимыйс Arduino или Raspberry Pi
Безграничные возможности
58
Перспективы
59
Перспективы: JavaScript IoT
60
● Низкий порог входа – большее число доступных программистов● Overhead производительности за счёт интерпретатора
незначительный для задач управления● Оперативность и продуктивность – на рынок за выходные :)● Возможность загружать код динамически по сети - upgrade
прошивки OTA из коробки● Безопасность – JS в своей песочнице
Перспективы: JavaScript IoT
61
Задавайте любые вопросы :)
62
Роман Романовский[email protected]
Репозиторий проекта:https://github.com/rromanovsky/restroom-revolution
Версия кода с презентации находится на ветке united-dev-conf-2017
Ссылка на эту презентацию:http://goo.gl/jDN7Id
Сергей Рак[email protected]