\hypertarget{what-is-iot}{%
\section{What is IoT}\label{what-is-iot}}

\begin{frame}{What is IoT}
\protect\hypertarget{what-is-iot-1}{}

\begin{itemize}
\tightlist
\item
  Not “a computer connected to the internet”

  \begin{itemize}
  \tightlist
  \item
    Then it is really just another computer connected to the internet
  \end{itemize}
\item
  Must be something else

  \begin{itemize}
  \tightlist
  \item
    It is simply devices that are resource constrained

    \begin{itemize}
    \tightlist
    \item
      Usually in more than one way
    \end{itemize}
  \end{itemize}
\item
  Autonomous operation, the connection might not be permanent
\end{itemize}

\end{frame}

\begin{frame}{IoT is just a concept}
\protect\hypertarget{iot-is-just-a-concept}{}

\begin{itemize}
\tightlist
\item
  \emph{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.}\footnote<.->{Wikipedia
    “Internet of Things”}
\end{itemize}

\end{frame}

\begin{frame}{What is an IoT Device?}
\protect\hypertarget{what-is-an-iot-device}{}

\note{As for their definition.

What differentiates a computer from an IoT device?}

\end{frame}

\begin{frame}{What is an IoT Device?}
\protect\hypertarget{what-is-an-iot-device-1}{}

\begin{itemize}
\tightlist
\item
  Constrained in (one or more of):

  \begin{itemize}
  \tightlist
  \item
    Memory
  \item
    CPU
  \item
    Network bandwidth and/or latency
  \item
    Storage
  \end{itemize}
\end{itemize}

\end{frame}

\begin{frame}{Typical IoT chips - Bluetooth 4/5}
\protect\hypertarget{typical-iot-chips---bluetooth-45}{}

\begin{longtable}[]{@{}llllll@{}}
\toprule
Chip & CPU & Freq & RAM & Flash & Price\tabularnewline
\midrule
\endhead
nRF52810 & Cortex-M4 & 64 M & Hz 24k & 192k & \$1.88\tabularnewline
High perf & ormance, & entry & -level Bl & uetooth & 4/ANT/2.4GHz
SoC\tabularnewline
\bottomrule
\end{longtable}

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

\note{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}

\end{frame}

\begin{frame}{Typical IoT chips - Wi-Fi}
\protect\hypertarget{typical-iot-chips---wi-fi}{}

\begin{longtable}[]{@{}llllll@{}}
\toprule
Chip & CPU & Freq & ROM & RAM & Price\tabularnewline
\midrule
\endhead
ESP8266 & Tensilica L106 & 160 MHz & N/A & \textasciitilde{}50 kB &
\textless{} \$1\tabularnewline
\bottomrule
\end{longtable}

ESP32 - dual cpu, Wi-Fi, Bluetooth 4 ESP32-D0WDQ6 2x Xtensa @ 160MHz \$
4.53 @ 10

\note{The ESP8266’s RAM depends on which firmware stack is used.
Physical is probably 128k or most likely 64k.}

\end{frame}

\begin{frame}{ESP8266 details - Power usage}
\protect\hypertarget{esp8266-details---power-usage}{}

\begin{longtable}[]{@{}lr@{}}
\toprule
\begin{minipage}[b]{0.35\columnwidth}\raggedright
State\strut
\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedleft
Current usage\strut
\end{minipage}\tabularnewline
\midrule
\endhead
\begin{minipage}[t]{0.35\columnwidth}\raggedright
Off\strut
\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedleft
0.5 µA\strut
\end{minipage}\tabularnewline
\begin{minipage}[t]{0.35\columnwidth}\raggedright
Deep sleep with RTC\strut
\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedleft
20 µA\strut
\end{minipage}\tabularnewline
\begin{minipage}[t]{0.35\columnwidth}\raggedright
Light sleep (with Wi-Fi)\strut
\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedleft
1 mA\strut
\end{minipage}\tabularnewline
\begin{minipage}[t]{0.35\columnwidth}\raggedright
Sleep with peripherials\strut
\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedleft
15 mA\strut
\end{minipage}\tabularnewline
\begin{minipage}[t]{0.35\columnwidth}\raggedright
TX\strut
\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedleft
170 mA\strut
\end{minipage}\tabularnewline
\bottomrule
\end{longtable}

\note{Datasheet page 18}

\end{frame}

\begin{frame}{ESP8266 details - Arduino}
\protect\hypertarget{esp8266-details---arduino}{}

https://github.com/esp8266/Arduino

\end{frame}

\hypertarget{going-back-to-basics}{%
\section{Going back to basics}\label{going-back-to-basics}}

\begin{frame}{What is the internet again?}
\protect\hypertarget{what-is-the-internet-again}{}

\end{frame}

\begin{frame}{OSI model}
\protect\hypertarget{osi-model}{}

\begin{enumerate}
[1.]
\tightlist
\item
  Physical Layer
\item
  Data Link Layer
\item
  Network Layer
\item
  Transport Layer
\item
  Session Layer
\item
  Presentation Layer
\item
  Application Layer
\end{enumerate}

\begin{itemize}
\tightlist
\item
  \href{https://en.wikipedia.org/wiki/OSI_model}{Wikipedia: OSI model}
\item
  \href{https://en.wikipedia.org/wiki/OSI_model\#Examples}{Wikipedia:
  OSI model\#Examples}
\end{itemize}

\note{Does not match the TCP/IP stack very closely.}

\end{frame}

\begin{frame}{Layer 1: Physical Layer}
\protect\hypertarget{layer-1-physical-layer}{}

\begin{itemize}
\tightlist
\item
  10BASE5, 10BASE2
\item
  10BASE-T / 100BASE-TX / 1000BASE-TX
\item
  802.11a/b/g/n PHY
\item
  RS-232
\end{itemize}

\note{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 \emph{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
(\textgreater{}= 1Mbps) is often supported.}

\end{frame}

\begin{frame}{Layer 2: Data Link Layer}
\protect\hypertarget{layer-2-data-link-layer}{}

\begin{itemize}
\tightlist
\item
  Ethernet
\item
  WiFi
\item
  Bluetooth
\item
  Token Ring
\end{itemize}

\end{frame}

\begin{frame}{Layer 3: Network Layer}
\protect\hypertarget{layer-3-network-layer}{}

\begin{itemize}
\tightlist
\item
  IP
\item
  ICMP
\item
  IPX
\end{itemize}

\end{frame}

\begin{frame}{Layer 4: Transport Layer}
\protect\hypertarget{layer-4-transport-layer}{}

\begin{itemize}
\tightlist
\item
  TCP
\item
  UDP
\end{itemize}

\end{frame}

\begin{frame}{Layer 5: Session Layer}
\protect\hypertarget{layer-5-session-layer}{}

\begin{itemize}
\tightlist
\item
  “sockets”
\item
  NetBIOS
\end{itemize}

\end{frame}

\begin{frame}{Layer 6: Presentation Layer}
\protect\hypertarget{layer-6-presentation-layer}{}

\begin{itemize}
\tightlist
\item
  SSL
\end{itemize}

\note{This layer is not really much used in the IP stack}

\end{frame}

\begin{frame}{Layer 7: Application Layer}
\protect\hypertarget{layer-7-application-layer}{}

\begin{itemize}
\tightlist
\item
  HTTP
\item
  DNS
\item
  MQTT
\item
  CoAP
\item
  (everything else..)
\end{itemize}

\end{frame}

\begin{frame}{Details: IP}
\protect\hypertarget{details-ip}{}

\note{Note that the “total length” field is 16 bits, 2 bytes, it’s
maximum value is 64k, 65536.}

\end{frame}

\begin{frame}{Details: IP}
\protect\hypertarget{details-ip-1}{}

\end{frame}

\hypertarget{lecture-esp8266-aka-nodemcu-aka-esp-12}{%
\section{Lecture: ESP8266 aka NodeMCU aka
ESP-12}\label{lecture-esp8266-aka-nodemcu-aka-esp-12}}

\begin{frame}{ESP8266 software layers}
\protect\hypertarget{esp8266-software-layers}{}

\end{frame}

\hypertarget{lecture-mqtt}{%
\section{Lecture: MQTT}\label{lecture-mqtt}}

\begin{frame}{MQTT}
\protect\hypertarget{mqtt}{}

\begin{itemize}
\tightlist
\item
  \emph{Message Queuing Telemetry Transport}
\item
  \href{https://en.wikipedia.org/wiki/MQTT}{Wikipedia: MQTT}
\end{itemize}

\note{MQTT is \emph{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).}

\end{frame}

\begin{frame}{MQTT - The protocol}
\protect\hypertarget{mqtt---the-protocol}{}

Agents have one of two roles:

\begin{itemize}
\tightlist
\item
  \emph{Client}

  \begin{itemize}
  \tightlist
  \item
    Publishes \emph{messages}
  \item
    Subscribes / unsubscribes to \emph{topics}
  \end{itemize}
\item
  \emph{Broker} (aka Server)

  \begin{itemize}
  \tightlist
  \item
    Handles network connections
  \item
    Keeps subscription state
  \item
    Manages client

    \begin{itemize}
    \tightlist
    \item
      Disconnects
    \item
      \emph{(last) will}
    \end{itemize}
  \item
    Persistence
  \end{itemize}
\end{itemize}

\note{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.}

\end{frame}

\begin{frame}[fragile]{MQTT - The protocol - MQTT Topic}
\protect\hypertarget{mqtt---the-protocol---mqtt-topic}{}

\begin{itemize}
\tightlist
\item
  Topic name: \texttt{foo/bar/baz}
\item
  Topic filter

  \begin{itemize}
  \tightlist
  \item
    \texttt{foo/bar/?}
  \item
    \texttt{foo/\#}
  \end{itemize}
\end{itemize}

\end{frame}

\begin{frame}[fragile]{MQTT - The protocol - MQTT Topic}
\protect\hypertarget{mqtt---the-protocol---mqtt-topic-1}{}

The temperature sensor:

\begin{itemize}
\tightlist
\item
  Publishes on:

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\$device-id/temperature}
  \item
    \texttt{myapp/\$device-id/humidity}
  \item
    \texttt{myapp/\$device-id/altert}
  \end{itemize}
\item
  Subscribes to:

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\$device-id/command}
  \end{itemize}
\end{itemize}

The central application:

\begin{itemize}
\tightlist
\item
  Subscribes to:

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\#/temperature}
  \item
    \texttt{myapp/\#/humidity}
  \end{itemize}
\item
  Publishes on:

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\$device-id/command}
  \end{itemize}
\end{itemize}

\note{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)}

\end{frame}

\begin{frame}{MQTT - The protocol - MQTT Packet}
\protect\hypertarget{mqtt---the-protocol---mqtt-packet}{}

\begin{itemize}
\tightlist
\item
  Very small
\end{itemize}

\begin{itemize}
\tightlist
\item
  Packet type + flags
\item
  Packet identifier
\item
  Payload

  \begin{itemize}
  \tightlist
  \item
    Size
  \item
    Payload
  \end{itemize}
\end{itemize}

\note{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.}

\end{frame}

\begin{frame}[fragile]{MQTT - The protocol - MQTT Topic - more}
\protect\hypertarget{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:

\begin{itemize}
\tightlist
\item
  An aggregating agent:

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\#/temperature}
  \item
    \texttt{myapp/\#/humidity}
  \end{itemize}
\item
  Emailing agent

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\$device-id/altert}
  \end{itemize}
\item
  Publishes on:

  \begin{itemize}
  \tightlist
  \item
    \texttt{myapp/\$device-id/command}
  \end{itemize}
\end{itemize}

\note{}

\end{frame}

\begin{frame}{MQTT - Patterns}
\protect\hypertarget{mqtt---patterns}{}

Må utvides

Explain:

\begin{itemize}
\tightlist
\item
  Message sizes with MQTT
\item
  “will” messages
\item
  Push vs pull, central applications can push to clients
\item
  mostly mqtt, some http
\end{itemize}

\end{frame}

\begin{frame}{MQTT - Implementations}
\protect\hypertarget{mqtt---implementations}{}

\begin{itemize}
\tightlist
\item
  Mosquitto
\item
  Eclipse Paho
\item
  RabbitMQ
\item
  ActiveMQ
\end{itemize}

\note{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.}

\end{frame}

\begin{frame}{MQTT Cloud Connectors}
\protect\hypertarget{mqtt-cloud-connectors}{}

\begin{itemize}
\tightlist
\item
  Cloud

  \begin{itemize}
  \tightlist
  \item
    Amazon IoT
  \item
    Google Cloud IoT
  \item
    Microsoft Azure IoT
  \item
    CloudMQTT
  \end{itemize}
\item
  DIY

  \begin{itemize}
  \tightlist
  \item
    ThingMQ
  \item
    HiveMQ
  \end{itemize}
\end{itemize}

\note{In between are:

\begin{itemize}
\tightlist
\item
  self hosted
\item
  Generic bridges
\end{itemize}}

\end{frame}

\hypertarget{notes}{%
\section{Notes}\label{notes}}

\hypertarget{assignments}{%
\section{Assignments}\label{assignments}}

\begin{frame}{Assignment 1: Blink a led}
\protect\hypertarget{assignment-1-blink-a-led}{}

\end{frame}

\begin{frame}{Assignment 2: Connect to Wi-Fi}
\protect\hypertarget{assignment-2-connect-to-wi-fi}{}

\end{frame}

\begin{frame}{Assignment 3: Connect to MQTT broker}
\protect\hypertarget{assignment-3-connect-to-mqtt-broker}{}

\end{frame}

\begin{frame}{Assignment 4: Network play time}
\protect\hypertarget{assignment-4-network-play-time}{}

\begin{itemize}
\item
  Measure round trip time/latency. Measure UDP, TCP. Measure when the
  packet size is greater than the MTU
\item
  Notice variations in RTT
\end{itemize}

\end{frame}
