diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2018-04-24 09:23:08 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2018-04-24 09:23:08 +0200 |
commit | f64b81fed9702c41af4cec14d91f38ce5ad3384e (patch) | |
tree | 63e91bbcd80c75f2239e7313284fcc9b1f42f22d /what-is-iot-slides.tex | |
parent | 83f6af8f26bd51844d5e83640e81d9d80dc467d4 (diff) | |
download | iot-workshop-f64b81fed9702c41af4cec14d91f38ce5ad3384e.tar.gz iot-workshop-f64b81fed9702c41af4cec14d91f38ce5ad3384e.tar.bz2 iot-workshop-f64b81fed9702c41af4cec14d91f38ce5ad3384e.tar.xz iot-workshop-f64b81fed9702c41af4cec14d91f38ce5ad3384e.zip |
o Moving everything under slides.
Diffstat (limited to 'what-is-iot-slides.tex')
-rw-r--r-- | what-is-iot-slides.tex | 851 |
1 files changed, 0 insertions, 851 deletions
diff --git a/what-is-iot-slides.tex b/what-is-iot-slides.tex deleted file mode 100644 index 29a0c78..0000000 --- a/what-is-iot-slides.tex +++ /dev/null @@ -1,851 +0,0 @@ -\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} -\item - Connected - - \begin{itemize} - \tightlist - \item - Bluetooth - \item - Wi-Fi - \item - NB-IoT - \item - LTE Cat-M - \item - IR - \item - UART - \item - CAN - \end{itemize} -\end{itemize} - -\note{} - -\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}{% -\section{Lecture: ESP8266}\label{lecture-esp8266}} - -\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 subscriptions - \item - Manages client - - \begin{itemize} - \tightlist - \item - Disconnects - \item - \emph{(last) will} - \end{itemize} - \item - Persistence of retained messages - \end{itemize} -\end{itemize} - -\note{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.} - -\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 - Size oriented -\item - Flags indicate type of remaining bytes - - \begin{itemize} - \tightlist - \item - Packet type - \item - Topic name - \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}[fragile]{MQTT - The protocol - Retained message} -\protect\hypertarget{mqtt---the-protocol---retained-message}{} - -Message is kept by the server even after disconnect - -\begin{itemize} -\tightlist -\item - \texttt{CONNECT} -\item - \texttt{PUBLISH} - - \begin{itemize} - \tightlist - \item - \texttt{RETAIN} - \item - \texttt{\$app/\$device/temperature} - \item - \texttt{22.3} - \end{itemize} -\item - \texttt{DISCONNECT} -\end{itemize} - -Later on: - -\begin{itemize} -\tightlist -\item - \texttt{SUBSCRIBE} - - \begin{itemize} - \tightlist - \item - \texttt{\$app/\#/temperature} - \end{itemize} -\item - \texttt{PUBLISH} - - \begin{itemize} - \tightlist - \item - \texttt{\$app/\$device/temperature} - \item - \texttt{22.3} - \end{itemize} -\end{itemize} - -\note{The last PUBLISH is an incoming message} - -\end{frame} - -\begin{frame}[fragile]{MQTT - The protocol - Will message} -\protect\hypertarget{mqtt---the-protocol---will-message}{} - -Message sent when you disconnect - -Client \#1: - -\begin{enumerate} -[1.] -\tightlist -\item - \texttt{CONNECT} - - \begin{itemize} - \tightlist - \item - \texttt{WILL\ TOPIC:\ \$app/\$device/online} - \item - \texttt{WILL\ PAYLOAD:\ 0} - \end{itemize} -\item - \texttt{PUBLISH} - - \begin{itemize} - \tightlist - \item - \texttt{\$app/\$device/online} - \item - \texttt{1} - \end{itemize} -\item - \texttt{DISCONNECT} -\end{enumerate} - -Broker - -\begin{enumerate} -[1.] -\tightlist -\item - \emph{To all subscribers} \texttt{PUBLISH} - - \begin{itemize} - \tightlist - \item - \texttt{\$app/\$device/online} - \item - \texttt{0} - \end{itemize} -\end{enumerate} - -\end{frame} - -\begin{frame}{MQTT - Patterns} -\protect\hypertarget{mqtt---patterns}{} - -Må utvides - -Explain: - -\begin{itemize} -\tightlist -\item - Push vs pull, central applications can push to clients -\item - mostly mqtt, some http -\item - Client id - sparker ut gamle koblinger -\item - Keep alive / ping meldinger -\item - Alternative transporter - websockets(!) -\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 (at Heroku) - \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{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} |