Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

62
Роман Романовский 1 Сергей Рак

Transcript of Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Page 1: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

РоманРомановский

1

Сергей Рак

Page 2: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

О чем мы сегодня поговорим

2

● Поделимся своим опытом в области IoT● Расскажем о своем проекте Restroom Revolution● Немного покодим● Расскажем о перспективах JavaScript в IoT● Ответим на ваши вопросы и разыграем пару маек

Page 3: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

С чего все начиналось

3

Page 4: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

4

Page 5: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

5

Page 6: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

6

Page 7: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как мы представляли себе процесс прототипирования

1. Взять какие-то железки2. Скопировать откуда-то примеры кода3. ???4. PROFIT!!!

7

Page 8: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

8

Ожидание Реальность

Page 9: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как создать прототип устройства1. Купить какие-то железки2. Скопировать откуда-то примеры3. А еще:

● Настроить среду разработки● Изучить основы С/С++● Узнать о работе микроконтроллера● Узнать, что такое Push-Pull/Analog pin/тактирование шины● Узнать, что такое прерывания● Узнать, что за интерфейс SPI/I2C/UART● Узнать, что дебага нет● Узнать, что такое инверсия приоритетов● ...

4. PROFIT!!!

9

Page 10: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Никогда не сдавайся

10

Page 11: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Только JavaScript, только hardcore

11

Page 12: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Проекты совмещающие скриптовые языки с прикладным ПО

12

Page 13: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Топ проектов, совмещающих скриптовые языки и прикладное ПО

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

Page 14: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Топ проектов, совмещающих скриптовые языки и прикладное ПО

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

Page 15: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Espruino

15

Espruino Firmware Espruino Web IDE Espruino devices

Page 16: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как работает Espruino

16

Page 17: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как работает Espruino

17

Page 18: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как работает Espruino

18

Page 19: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как работает Espruino

19

Page 20: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как работает Espruino

20

Page 21: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как работает Espruino

21

Page 22: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как это было

22

1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE

Page 23: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как это было

23

1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE

Page 24: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Загрузили прошивку

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

Page 25: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Загрузили прошивку

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

Page 26: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Загрузили прошивку

26

Page 27: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как это было

27

1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE

Page 28: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Настроили 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();

Page 29: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Как это было

29

1. Загрузили прошивку2. Настроили Wi-Fi на устройстве3. Настроили Web IDE

Page 30: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Настроили Web IDE

30

Espruino Web IDE

https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo

Page 31: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

31

Page 32: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

32

Page 33: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

33

Page 34: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

34

Page 35: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

35

Page 36: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

36

Page 37: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

37

Page 38: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Пример кода

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);}());

Page 39: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

39

Давайте пошкодим

Page 40: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

40

Пример подключения“произвольного” датчика

Page 41: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

41

Live Coding

1. Подключим библиотеку «IRReceiver»и научимся принимать коды нажатий кнопок пульта

2. Подключим библиотеку «RGBLed»и помигаем светодиодом в ответ на определенные нажатия кнопок пульта

Page 42: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Демонстрация Restroom Revolution

42

Page 43: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

43

Page 44: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

44

Фоторезистор RGB светодиод

Page 45: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

45

Батарейка «Крона»

Импульсный преобразователь

напряжения

Page 46: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

46

Page 47: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Итоговая стоимость устройства

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

Page 48: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

48

Проблемы с которыми мы столкнулись

Page 49: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

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

Page 50: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

50

ЭнергопотреблениеПотребление (мА)

Принять пакет данных 140

Отправить пакет данных 56

Поддержание соединения 15

Выключить WiFi и процессор 0.5

Глубокий сон 0.01

Page 51: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

51

Энергопотребление

require("ESP8266").deepSleep(5000);

Page 52: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Если хочется повторить

52

Page 53: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Всё начиналось не так...

53

Page 54: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Что выбрать? Хотим компактное устройство с WiFi

54

Raspberry Pi 3b (Zero W)

Arduino+ Wi-Fi Shield

ESP8266 Witty Cloud

Linux + Node.jsПитание

~ 20$

Не все типы подходят,Большой размер

~ 40$

Малый размер,Малое потребление,

~ 5$

Page 55: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Поддерживаемые устройства проектом Espruino

55

http://www.espruino.com/Other+Boards

https://www.espruino.com/Order

Page 56: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Поддерживаемые датчики

56

http://www.espruino.com/Sensors

Поддержка из коробки

Page 57: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Поддерживаемые датчики

57

Любой SPI/I2C датчик совместимыйс Arduino или Raspberry Pi

Page 58: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Безграничные возможности

58

Page 59: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Перспективы

59

Page 60: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Перспективы: JavaScript IoT

60

● Низкий порог входа – большее число доступных программистов● Overhead производительности за счёт интерпретатора

незначительный для задач управления● Оперативность и продуктивность – на рынок за выходные :)● Возможность загружать код динамически по сети - upgrade

прошивки OTA из коробки● Безопасность – JS в своей песочнице

Page 61: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Перспективы: JavaScript IoT

61

Page 62: Roman Romanovsky, Sergey Rak - "JavaScript в IoT "

Задавайте любые вопросы :)

62

Роман Романовский[email protected]

Репозиторий проекта:https://github.com/rromanovsky/restroom-revolution

Версия кода с презентации находится на ветке united-dev-conf-2017

Ссылка на эту презентацию:http://goo.gl/jDN7Id

Сергей Рак[email protected]