From f64b81fed9702c41af4cec14d91f38ce5ad3384e Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Tue, 24 Apr 2018 09:23:08 +0200 Subject: o Moving everything under slides. --- slides/what-is-iot.md | 491 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 491 insertions(+) create mode 100644 slides/what-is-iot.md (limited to 'slides/what-is-iot.md') diff --git a/slides/what-is-iot.md b/slides/what-is-iot.md new file mode 100644 index 0000000..984dfb4 --- /dev/null +++ b/slides/what-is-iot.md @@ -0,0 +1,491 @@ +--- +title: "IoT Workshop" +author: Trygve Laugstøl \ +header-includes: + - \hypersetup{colorlinks=true, + allbordercolors={0 0 0}, + pdfborderstyle={/S/U/W 1}} + - \usepackage{tikz} + \usetikzlibrary{angles,arrows,backgrounds,calc,chains,decorations,decorations.pathmorphing,decorations.pathreplacing,decorations.text,fit,positioning, quotes,shapes.arrows,shapes.geometric,shapes.symbols} +!ifndef(QUICK) +~~~~~~ + - \usepackage{fontspec} + \setsansfont{Verdana} +~~~~~~ + +--- + +# What is IoT + +## What is IoT + +* Not "a computer connected to the internet" + * Then it is really just another computer connected to the internet + +* Must be something else + * It is simply devices that are resource constrained + * Usually in more than one way + +* Autonomous operation, the connection might not be permanent + +## IoT is just a concept + +* *The Internet of Things (IoT) is the network of physical devices, + vehicles, home appliances and other items embedded with + electronics, software, sensors, actuators, and connectivity which + enables these objects to connect and exchange data.*^[ + Wikipedia "Internet of Things"] + +## What is an IoT Device? + +::: notes + +As for their definition. + +What differentiates a computer from an IoT device? + +::: + +## What is an IoT Device? + +* Constrained in (one or more of): + * Memory + * CPU + * Network bandwidth and/or latency + * Storage +* Connected + * Bluetooth + * Wi-Fi + * NB-IoT + * LTE Cat-M + + * IR + * UART + * CAN + +::: notes + + + +::: + +## Typical IoT chips - Bluetooth 4/5 + +!comment +~~~ +~~~ +Chip CPU Freq RAM Flash Price +-------- -------- ---- -------- ------ ------ +nRF52810 Cortex-M4 64 MHz 24k 192k $1.88 +High performance, entry-level Bluetooth 4/ANT/2.4GHz SoC + +nRF52832 Cortex-M4F 32k 256k $2.54 + 64k 512k $2.59 +High performance Bluetooth 4/ANT/2.4GHz SoC + +nRF52840 Cortex-M4F 256k 1024k $3.85 +Advanced multi-protocol System-on-Chip Supporting: Bluetooth 5, ANT/ANT+, 802.15.4 and 2.4GHz proprietary + +::: notes + +All quantities are 1000 pieces + +nRF51: https://www.digikey.no/products/en/rf-if-and-rfid/rf-transceiver-ics/879?k=nrf51822 + +nRF52832: these have different packagings, not only difference price + +https://www.digikey.no/products/en/rf-if-and-rfid/rf-transceiver-ics/879?FV=1c0001%2Cffe0036f&quantity=3000&ColumnSort=1000011&page=1&k=nrf52832&pageSize=500&pkeyword=nrf52810 + +::: + +## Typical IoT chips - Wi-Fi + +Chip CPU Freq ROM RAM Price +----- ------- ------- ----- ------ ------ +ESP8266 Tensilica L106 160 MHz N/A ~50 kB < $1 + +ESP32 - dual cpu, Wi-Fi, Bluetooth 4 +ESP32-D0WDQ6 2x Xtensa @ 160MHz $ 4.53 @ 10 + +::: notes + +The ESP8266's RAM depends on which firmware stack is used. Physical is probably 128k or most likely 64k. + +::: + +## ESP8266 details - Power usage + ++--------------------------+----------------+ +| State | Current usage | ++==========================+===============:+ +| Off | 0.5 µA | ++--------------------------+----------------+ +| Deep sleep with RTC | 20 µA | ++--------------------------+----------------+ +| Light sleep (with Wi-Fi) | 1 mA | ++--------------------------+----------------+ +| Sleep with peripherials | 15 mA | ++--------------------------+----------------+ +| TX | 170 mA | ++--------------------------+----------------+ + +::: notes + +Datasheet page 18 + +::: + +## ESP8266 details - Arduino + +https://github.com/esp8266/Arduino + +# Going back to basics + +## What is the internet again? + +## OSI model + +1. Physical Layer +1. Data Link Layer +1. Network Layer +1. Transport Layer +1. Session Layer +1. Presentation Layer +1. Application Layer + + +* [Wikipedia: OSI model](https://en.wikipedia.org/wiki/OSI_model) +* [Wikipedia: OSI model#Examples](https://en.wikipedia.org/wiki/OSI_model#Examples) + +::: notes + +Does not match the TCP/IP stack very closely. + +::: + +## Layer 1: Physical Layer + +* 10BASE5, 10BASE2 +* 10BASE-T / 100BASE-TX / 1000BASE-TX +* 802.11a/b/g/n PHY +* RS-232 + +::: notes + +Ethernet: Hubs and switches (that act on this level) is not on it's own +layer. It is more of a implementation detail in the architecture diagram. + +RS-232 signaling is used in *all* MCUs, many have several ports +available. It is extremely flexible, both used for implementing +applications and debugging. Frequently an easy way to hack embedded +devices. "USB dongles", "USB TTL" all use RS-232 signaling. + +Note that this only applies to its logical signals, not voltage +levels. The signaling does not specify any max data rate, very high rates +(>= 1Mbps) is often supported. + +::: + + +## Layer 2: Data Link Layer + +* Ethernet +* WiFi +* Bluetooth +* Token Ring + +## Layer 3: Network Layer + +* IP +* ICMP +* IPX + +## Layer 4: Transport Layer + +* TCP +* UDP + +## Layer 5: Session Layer + +* "sockets" +* NetBIOS + +## Layer 6: Presentation Layer + +* SSL + +::: notes + +This layer is not really much used in the IP stack + +::: + +## Layer 7: Application Layer + +* HTTP +* DNS +* MQTT +* CoAP +* (everything else..) + +## Details: IP + +!ifdef(REVEAL) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +![](images/ip-header.svg) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!ifdef(BEAMER) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!ifndef(QUICK)(![](images/ip-header.pdf)) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +::: notes + +Note that the "total length" field is 16 bits, 2 bytes, it's maximum value is 64k, 65536. + +::: + +## Details: IP + +!ifndef(QUICK)(!include(images/IP-Header_eng.tex)) + +!comment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +![](images/IP-Header_eng.pdf) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Lecture: ESP8266 + +!comment(aka NodeMCU aka ESP-12) + +## ESP8266 software layers + +!ifndef(QUICK)(!include(images/esp+arduino-sdks.pgf)) + +# Lecture: MQTT + +## MQTT + +* *Message Queuing Telemetry Transport* +* [Wikipedia: MQTT](https://en.wikipedia.org/wiki/MQTT) + +::: notes + +MQTT is *the* standard for IoT applications (and lots of other useful stuff to). Using HTTP is just silly. + +Supports SSL, and requires TCP. + +Has UDP-like semantics with "fire and forget" but on a higher level (the message always have to be delivered and ACKed by the broker, not it's final recipient. + +Version 3.1.1 er den som gjelder, V 3.1 er rar, de andre finnes ikke (før standardisering). + +::: + +## MQTT - The protocol + +Agents have one of two roles: + +* *Client* + * Publishes *messages* + * Subscribes / unsubscribes to *topics* + +* *Broker* (aka Server) + * Handles network connections + * Keeps subscriptions + * Manages client + * Disconnects + * *(last) will* + * Persistence of retained messages + +::: notes + +network connections: this includes removing closed sockets, client's that doesn't respons to timeouts and duplicate clients. + +http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html + +Subscriptions are not permanent. The connection is (unlike HTTP) +stateful. + +Some messages may be persistent, but only one per topic. You will +often end up with a "proper" mq on the backend if queuing is needed. + +::: + +## MQTT - The protocol - MQTT Topic + +* Topic name: `foo/bar/baz` +* Topic filter + * `foo/bar/?` + * `foo/#` + +## MQTT - The protocol - MQTT Topic + +The temperature sensor: + +* Publishes on: + * `myapp/$device-id/temperature` + * `myapp/$device-id/humidity` + * `myapp/$device-id/altert` +* Subscribes to: + * `myapp/$device-id/command` + +The central application: + +* Subscribes to: + * `myapp/#/temperature` + * `myapp/#/humidity` +* Publishes on: + * `myapp/$device-id/command` + +::: notes + +Typical first round of implementation. + +Commands can be: +* load new firmware (maybe an URL and firmware signature). +* Set new calibration values +* Change reading interval, altert levels (autonomous operation) + +::: + +## MQTT - The protocol - MQTT Packet + +* Size oriented +* Flags indicate type of remaining bytes + * Packet type + * Topic name + * Payload + +::: notes + +Only packet type + flags (1 byte) is required, everything else is optional. + +The size field is variable length encoded, 0-127 bytes is 1 byte, 128-16383 use 2 bytes etc, up to 4 bytes for 256MB payload. + +::: + +## MQTT - The protocol - MQTT Topic - more + +Enten må den holdes rett etter "## MQTT - The protocol - MQTT Topic" ellers kanskje flyttes etter "patterns". + +The central application is split: + +* An aggregating agent: + * `myapp/#/temperature` + * `myapp/#/humidity` +* Emailing agent + * `myapp/$device-id/altert` + +* Publishes on: + * `myapp/$device-id/command` + +::: notes + +::: + +## MQTT - The protocol - Retained message + +Message is kept by the server even after disconnect + +* `CONNECT` +* `PUBLISH` + * `RETAIN` + * `$app/$device/temperature` + * `22.3` +* `DISCONNECT` + +Later on: + +* `SUBSCRIBE` + * `$app/#/temperature` +* `PUBLISH` + * `$app/$device/temperature` + * `22.3` + +::: notes + +The last PUBLISH is an incoming message + +::: + +## MQTT - The protocol - Will message + +Message sent when you disconnect + +Client #1: + +1. `CONNECT` + * `WILL TOPIC: $app/$device/online` + * `WILL PAYLOAD: 0` +1. `PUBLISH` + * `$app/$device/online` + * `1` +1. `DISCONNECT` + +Broker + +1. *To all subscribers* `PUBLISH` + * `$app/$device/online` + * `0` + +## MQTT - Patterns + +Må utvides + +Explain: + +* Push vs pull, central applications can push to clients +* mostly mqtt, some http +* Client id - sparker ut gamle koblinger +* Keep alive / ping meldinger +* Alternative transporter - websockets(!) + +## MQTT - Implementations + +* Mosquitto +* Eclipse Paho +* RabbitMQ +* ActiveMQ + +::: notes + +RabbitMQ has a separate connector that must be installed +Not sure about ActiveMQ but it is at least a part of the project so it is releases at the same time. + +::: + +## MQTT Cloud Connectors + +* Cloud + * Amazon IoT + * Google Cloud IoT + * Microsoft Azure IoT + * CloudMQTT (at Heroku) + +* DIY + * ThingMQ + * HiveMQ + +::: notes + +In between are: + +* self hosted +* Generic bridges + +::: + +# Assignments + +## Assignment 1: Blink a led + +## Assignment 2: Connect to Wi-Fi + +## Assignment 3: Connect to MQTT broker + +## Assignment 4: Network play time + +* Measure round trip time/latency. Measure UDP, TCP. Measure when the + packet size is greater than the MTU + +* Notice variations in RTT -- cgit v1.2.3