LoRa-Workshop/presentation/presentation.tex

743 lines
22 KiB
TeX

\documentclass{beamer}
%
% Choose how your presentation looks.
%
% For more themes, color themes and font themes, see:
% http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html
%
\mode<presentation>
{
\usetheme{Singapore} % or try Darmstadt, Madrid, Warsaw, ...
\usecolortheme[RGB={3,138,94}]{structure}
\usefonttheme{structurebold} % or try serif, structurebold, ...
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{headline}{}
%\setbeamertemplate{caption}[numbered]
\setbeamertemplate{footline}[frame number]
}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{fancyvrb}
\usepackage{tcolorbox,listings}
\usepackage{textpos}
\usepackage{setspace}
% Default fixed font does not support bold face
\DeclareFixedFont{\ttb}{T1}{ascii}{m}{n}{7} % for bold
\DeclareFixedFont{\ttm}{T1}{ascii}{m}{n}{7} % for normal
% Custom colors
\usepackage{color}
\definecolor{deepblue}{rgb}{0,0,0.5}
\definecolor{deepred}{rgb}{0.6,0,0}
\definecolor{deepgreen}{rgb}{0,0.5,0}
\definecolor{lightblue}{rgb}{0.6,0.8,1.0}
\definecolor{teal}{rgb}{0.45,0.85,1.0}
\fvset{frame=single,framesep=1mm,fontfamily=courier,fontsize=\scriptsize,framerule=.3mm,numbersep=1mm,commandchars=\\\{\}}
\usepackage{color}
\tcbuselibrary{listings,skins,breakable}
\lstdefinestyle{commandline}{
basicstyle=\ttfamily\scriptsize,
numbers=none,
keywordstyle=\color{blue},
morekeywords={{git add}},
%numberstyle=\tiny,
numbersep=2pt,
moredelim=**[is][\color{darkgreen}]{_green_}{_green_},
moredelim=**[is][\color{red}]{_red_}{_red_},
moredelim=**[is][\color{blue}]{_blue_}{_blue_},
}
% Python style for highlighting
\newcommand\pythonstyle{
\lstset{
language=Python,
basicstyle=\ttfamily\color{white}\tiny,
otherkeywords={self}, % Add keywords here
keywordstyle=\ttfamily\color{lightblue},
commentstyle=\ttfamily\color{teal},
emph={MyClass,__init__}, % Custom highlighting
emphstyle=\ttfamily\color{deepred}, % Custom highlighting style
stringstyle=\ttfamily\color{red},
frame=tb, % Any extra options here
backgroundcolor = \color{black},
showstringspaces=false %
}}
\newtcblisting{ConsoleVerbatim}{
arc=0mm,
top=-2mm,
bottom=-2mm,
left=0mm,
right=0mm,
width=\textwidth,
boxrule=0.5pt,
colupper=white,
colback=black,
spartan,
listing only,
listing options={style=commandline},
breakable
}
% Python environment
\lstnewenvironment{python}[1][]
{
\pythonstyle
\lstset{#1}
}
{}
\lstdefinestyle{commandline}{
basicstyle=\ttfamily\tiny,
numbers=none,
keywordstyle=\color{blue},
morekeywords={{git add}},
%numberstyle=\tiny,
numbersep=2pt,
moredelim=**[is][\color{darkgreen}]{_green_}{_green_},
moredelim=**[is][\color{red}]{_red_}{_red_},
moredelim=**[is][\color{blue}]{_blue_}{_blue_},
}
\newtcblisting{ConsoleVerbatimTiny}{
arc=0mm,
top=-2mm,
bottom=-2mm,
left=0mm,
right=0mm,
width=\textwidth,
boxrule=0.5pt,
colupper=white,
colback=black,
spartan,
listing only,
listing options={style=commandline},
breakable
}
\newenvironment{reference}[2]{ %
\begin{textblock*}{\textwidth}(#1,#2) %
\rule{10cm}{0.5pt}\\
\tiny\bgroup\color{black}}{\egroup % for the emulated
\end{textblock*}}
\usepackage{hyperref}
\definecolor{darkgreen}{rgb}{0.0,0.5,0.0}
\title[LoRa]{A Brief Introduction to \includegraphics[trim=0 4cm 0 0, scale=0.15]{images/lora.jpg}}
\author{Simon Pirkelmann}
\institute{\includegraphics[scale=0.5]{images/iR.pdf}}
\date{December 2nd, 2019}
\AfterPreamble{\hypersetup{
urlcolor=blue,
}}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
% Uncomment these lines for an automatically generated outline.
\begin{frame}{Outline}
\tableofcontents
\end{frame}
\section{LoRa}
\subsection{Motivation}
\begin{frame}{Motivation}
\begin{itemize}
\item Example: monitor well-being of honey bees\\[0.5cm]
\includegraphics[scale=0.10]{images/honeybee.png}
\hspace{0.5cm}
\includegraphics[scale=0.055]{images/weight.png}
\includegraphics[scale=0.045]{images/temperature.jpg}
\includegraphics[scale=0.60]{images/humidity.jpg}\\[0.3cm]
\hspace{6cm}
\includegraphics[scale=0.04]{images/distance.jpg} \hspace{0.5cm}
\includegraphics[scale=0.15]{images/no-electricity.png} \\
\pause
\begin{minipage}{0.40\textwidth}
\vspace{-2cm}
\item Requirements:
\begin{itemize}
\setlength{\itemsep}{0pt}
\item Low data rate (a few bytes per day)
\item Low power consumption
\item Low cost
\item Long range
\end{itemize}
\end{minipage}
\pause
\begin{minipage}{0.45\textwidth}
\hspace{0.2cm}
Options:
\begin{itemize}
\setlength{\itemsep}{0pt}
\item Data line (e.g. ethernet)
\item Wifi, Bluetooth
\item Cellular
\end{itemize}
\end{minipage}
\vspace{0.1cm}
\pause
\item Solution: LPWAN (\textbf{L}ow-\textbf{P}ower \textbf{W}ide-\textbf{A}rea \textbf{N}etwork)
\begin{itemize}
\item \textbf{LoRa}, \textbf{LoRaWAN}, \textbf{TheThingsNetwork}
\item SigFox, NB-IoT, Weightless, ...
\end{itemize}
\end{itemize}
\end{frame}
\subsection{LoRa facts}
\begin{frame}{LoRa Facts}
\begin{reference}{0mm}{70mm}
https://www.thethingsnetwork.org/docs/lorawan/
\end{reference}
\begin{itemize}
\item Developed by \textbf{Semtech} (originally by Cycleo)\\
\hspace{0.3 cm}\textbf{Note:} parts of the PHY layer are \textbf{proprietary}!
\item Frequency: \textbf{868 MHz} \textbf{SRD} band (in the EU)
\item \textbf{25 mW} transmission power
\item Bandwidth: \textbf{125} to \textbf{500 kHz}
\item Data rate between \textbf{250 Bit/sec} and 21 \textbf{kBit/sec} \\
\hspace{0.3 cm}\textbf{BUT}: not made for a lot of data
\item Low cost: \textbf{$\sim $10 EUR} CAPEX (for nodes), almost no OPEX
\item Low power: devices can last \textbf{years on battery}
\item Long distance: up to \textbf{10 km} range
\end{itemize}
\only<2>{
\begin{textblock*}{100mm}(-5mm,-65mm)
\textblockcolour{white}
\begin{exampleblock}{LoRa distance record}
\includegraphics[scale=0.3]{images/distance_record.png}
\end{exampleblock}
\end{textblock*}
}
\end{frame}
\begin{frame}{LoRa facts}
\begin{reference}{0mm}{75mm}
https://www.thethingsnetwork.org/docs/lorawan/
\end{reference}
LoRa is \textbf{NOT} for:
\begin{itemize}
\item Realtime data - only small packets, every couple of minutes
\item Phone calls - you can do that with GPRS/3G/LTE
\item Controlling lights in your house - check out ZigBee or BlueTooth
\item Sending photos, watching Netflix - check out WiFi
\end{itemize}
Important: \includegraphics[trim=0cm 4cm 0 0cm, scale=0.11]{images/lora.jpg} $\leftrightarrow$ \includegraphics[trim=0cm 4cm 0 0cm,scale=0.15]{images/lorawan.jpg} $\leftrightarrow$ \includegraphics[trim=0cm 4cm 0 0cm,scale=0.06]{images/ttn.png}\\[0.3cm]
\begin{itemize}
\item \textbf{LoRa}: PHY layer $\Rightarrow$ modulation technique
\item \textbf{LoRaWAN}: Network protocol
\item \textbf{TheThingsNetwork (TTN)}: Network server, handles routing of data to the \textit{cloud}
\end{itemize}
\end{frame}
\subsection{PHY layer: modulation and demodulation}
\begin{frame}{Digital modulation}
\begin{itemize}
\item \textbf{A}mplitude \textbf{S}hift \textbf{K}eying (ASK)
\end{itemize}
\includegraphics[scale=0.35]{images/unmodulated.png}
\includegraphics<1>[scale=0.35]{images/amplitude_modulation.png}
\includegraphics<2>[scale=0.35]{images/amplitude_modulation_2.png}
\end{frame}
\begin{frame}{Digital modulation}
\begin{reference}{0mm}{75mm}
https://en.wikipedia.org/wiki/Chirp\_spread\_spectrum
\end{reference}
\begin{itemize}
\item \textbf{F}requency \textbf{S}hift \textbf{K}eying (FSK)
\end{itemize}
\includegraphics[scale=0.35]{images/unmodulated.png}
\includegraphics<1>[scale=0.35]{images/frequency_modulation.png}
\includegraphics<2>[scale=0.35]{images/frequency_modulation_2.png}
\end{frame}
\begin{frame}{Digital modulation}
\begin{itemize}
\item Used by LoRa: \textbf{C}hirp \textbf{S}pread \textbf{S}pectrum (CSS) modulation
\begin{center}
\includegraphics[scale=0.3]{images/chirp.png}
\includegraphics[scale=0.3]{images/chirp_spectrogram.png}
\end{center}
\begin{itemize}
\item Chirp = frequency change over time\\
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{LoRa modulation}
\begin{itemize}
\item LoRa uses \textbf{Up-Chirps} (frequency increases) and \textbf{Down-Chirps} (frequency decreases)
\end{itemize}
\includegraphics[scale=0.3]{images/lora_upchirp.png}
\includegraphics[scale=0.3]{images/lora_downchirp.png}
%\item Messages always start with 8 Up-Chirps
\end{frame}
\begin{frame}{Example LoRa packet}
\begin{reference}{0mm}{70mm}
Thanks Valentin and Stefan (DM4SG) for providing this data
\end{reference}
\begin{center}
\includegraphics<1>[scale=0.2]{images/lora_signal.png}
\includegraphics<2>[scale=0.2]{images/lora_signal_2.png}
\includegraphics<3>[scale=0.2]{images/lora_signal_3.png}
\end{center}
\end{frame}
\begin{frame}{Chirps and Symbols}
\begin{overlayarea}{\textwidth}{\textheight}
\begin{center}
\includegraphics<1>[scale=0.38]{images/lora_symbols_0.png}
\includegraphics<2>[scale=0.38]{images/lora_symbols_1.png}
\includegraphics<3>[scale=0.38]{images/lora_symbols_2.png}
\includegraphics<4>[scale=0.38]{images/lora_symbols_3.png}
\includegraphics<5>[scale=0.38]{images/lora_symbols_4.png}
\includegraphics<6>[scale=0.38]{images/lora_symbols_5.png}
\includegraphics<7>[scale=0.35]{images/lora_demodulation_0.png}
\includegraphics<7>[scale=0.35]{images/lora_demodulation_1.png}
\includegraphics<8>[scale=0.38]{images/lora_demodulation_2.png}
\end{center}
\only<2->{
Time of frequency jump determines which data is encoded\\
}
\begin{center}
\only<3>{Example: \texttt{data = }\texttt{00000}}
\only<4>{Example: \texttt{data = }\texttt{00010}}
\only<5>{Example: \texttt{data = }\texttt{00011}}
\only<6>{Example: \texttt{data = }\texttt{10110}}
\end{center}
\only<7->{
\vspace{-0.75cm}
\textbf{Demodulation:}
\begin{itemize}
\item De-chirp signal by multiplying (mixing) with conjugate chirp
\item Fourier Transform
\item Alignment using detect sequence at start of transmission
\end{itemize}
}
\end{overlayarea}
\end{frame}
\begin{frame}{Spreading factor}
\begin{itemize}
\item Number of bits per symbol is determined by \textbf{spreading factor} (SF)
\begin{center}
\includegraphics<1>[scale=0.5]{images/lora_spreading_factors.png}
\end{center}
\item Possible values: SF7 - SF12\\
\hspace{0.5cm} SF7: 7 bits per symbol \\
\hspace{0.5cm} SF12: 12 bits per symbol
\item Spreading factor influences max. range
\end{itemize}
\end{frame}
\begin{frame}{Demodulation}
\begin{itemize}
\item De-chirp signal by multiplying (mixing) with conjugate chirp
\item Fourier Transform
\end{itemize}
\end{frame}
\begin{frame}{Forward error coding}
\begin{itemize}
\item For each symbol several \textbf{parity bits} are added (= redundant information) \\
Reason: allows to detect and fix errors that occur during transmission (due to interference, etc.)
\item \textbf{Coding rate} determines number of parity bits:\\
\hspace{0.25cm} CR 4/5 : of 5 bits transmitted, 4 bits are actual data\\
\hspace{1.5cm}$\vdots$\\
\hspace{0.25cm} CR 4/8 : of 8 bits transmitted, 4 bits are actual data
\item Additionally: \textbf{C}yclical \textbf{R}edundancy \textbf{C}heck (CRC)
\end{itemize}
\end{frame}
\subsection{Packet format}
\begin{frame}{LoRa package format}
\begin{reference}{0mm}{70mm}
Source: SX1276/77/78/79 datasheet
\end{reference}
\includegraphics[scale=.3]{images/lora_packet_structure.png}
\begin{itemize}
\item Header: contains information about
\begin{itemize}
\item payload length
\item coding rate
\item CRC present?
\end{itemize}
\item Implicit header mode: no header sent
\end{itemize}
\end{frame}
\subsection{Data rate and air time}
\begin{frame}{Data rate and air time}
\begin{itemize}
\item Data rate depends on bandwidth (BW), spreading factor (SF) and coding rate (CR)\\[0.3cm]
\begin{minipage}{0.4\textwidth}
\textbf{Symbol duration}:
\begin{equation*}
T_{sym} = \frac{2^{SF}}{BW}
\end{equation*}
\end{minipage}
\begin{minipage}{0.5\textwidth}
\textbf{Symbol rate}:
\begin{equation*}
R_{sym} = \frac{1}{T_{sym}}
\end{equation*}
\end{minipage}
\item \textbf{Data rate}:
\begin{equation*}
R_{data} = \underbrace{SF}_{\# \text{bits per symbol}} \cdot \underbrace{R_{symb}}_{\text{symbol rate}} \cdot \underbrace{\frac{4}{4 + CR}}_{\text{coding rate}}
\end{equation*}
\item Example data rates:\\
\begin{tabular}{lll|lr}
SF7 &BW250 &CR4/5 & $\approx 10.9$ &$\tfrac{kbit}{s}$ \\ \hline
SF7 &BW125 &CR4/5 & $\approx 5.5$ &$\tfrac{kbit}{s}$ \\ \hline
SF12 &BW125 &CR4/5 & $\approx 0.29$ & $\tfrac{kbit}{s}$
\end{tabular}
%\item Sync word: \url{https://forum.chirpstack.io/t/relation-between-sync-word-private-network-and-end-nodes/191/17}
\end{itemize}
\end{frame}
\begin{frame}{Time-On-Air}
\begin{reference}{0mm}{65mm}
According to \textit{Allgemeinzuteilung von Frequenzen zur Nutzung durch Funkanwendungen mit geringer Reichweite für nicht näher spezifizierte Anwendungen; Non-specific
Short Range Devices (SRD)}, Bundesnetzagentur, 2018
\end{reference}
\begin{itemize}
\item Comply with \textbf{duty cycles} of the SRD band:
\begin{tabular}{l|r|r}
Frequency & Duty Cycle & ERP \\
\hline
868,0 - 868,6 MHz & 1 \% & 25 mW
\end{tabular}
\item This amounts to $\approx 30$ seconds of transmission time per hour (maximum!). Try to keep it way below.
\item Airtime calculator: \url{https://www.loratools.nl/\#/airtime}
\item Example: \texttt{20 bytes} payload \\
$\rightarrow$ max. 25 messages per hour on SF12 \\
$\rightarrow$ max. 600 messages per hour on SF7 \\
\end{itemize}
\end{frame}
\section{Playground Part I}
\begin{frame}[fragile]{Playground Part I}
\begin{small}
\begin{itemize}
\item Module used: \textbf{Wemos® TTGO LORA32 868Mhz ESP32}
\begin{minipage}{0.6\textwidth}
\begin{small}
\begin{itemize}
\item ESP32
\item LoRa Chip SX1276
\item OLED display
\item Antenna (needs to be connected!)
\end{itemize}
\end{small}
\end{minipage}%
\begin{minipage}{0.4\textwidth}
\includegraphics[scale=0.075]{images/ttgo_module.JPG}
\end{minipage}
\item Programmable in MicroPython thanks to \texttt{uPyLora} library by lemariva (\url{https://github.com/lemariva/uPyLora})
\begin{spacing}{0.84}
\begin{python}
from lora_transceiver import LoRaTransceiver
from uPySensors.ssd1306_i2c import Display
disp = Display()
# create transceiver
lora = LoRaTransceiver(display=disp)
# send a string
lora.send_string("Hello World!")
# send some raw binary data
lora.send([0x01, 0x02, 0x03])
\end{python}
\end{spacing}
\vspace{-0.1cm}
\item Alternative: HopeRF \textbf{RFM95W} chip
\item For "documentation" see: \url{https://imaginaerraum.de/git/Telos4/LoRa-Workshop}
\end{itemize}
\end{small}
\end{frame}
\begin{frame}[fragile]{Playground Part I}
\begin{itemize}
\item Receiving data:
\begin{spacing}{0.84}
\begin{python}
from lora_transceiver import LoRaTransceiver
from uPySensors.ssd1306_i2c import Display
disp = Display()
# create transceiver
lora = LoRaTransceiver(display=disp)
# start receiving data (and output on the screen)
lora.recv()
\end{python}
\end{spacing}
\item Change LoRa parameters
\begin{spacing}{0.85}
\begin{python}
# change the spreading factor
lora.setSpreadingFactor(10)
# change the frequency
lora.setFrequency(868.1e6)
# change signal bandwidth
lora.setSignalBandwidth(250e3)
# change sync word
lora.setSyncWord(0x34)
\end{python}
\end{spacing}
\item Task: \textit{Turn off your neighbors LED!}
\end{itemize}
\end{frame}
\section{LoRaWAN}
\subsection{Network topology}
\begin{frame}{LoRaWAN}
\begin{reference}{2mm}{80mm}
https://www.thethingsnetwork.org/docs/lorawan/
\end{reference}
\begin{itemize}
\item LoRaWAN is for getting your sensor data online
\item Media access control (MAC) protocol
\item Network topology:\\
\begin{center}
\includegraphics[scale=0.085]{images/lorawan_topology.png}
\end{center}
\item \textbf{Gateways} forward data from nodes to the \textit{cloud}
\item Transmission is secured by AES-128 encryption
\end{itemize}
\end{frame}
\subsection{TheThingsNetwork}
\begin{frame}{Device registration}
\begin{itemize}
\item \textbf{TheThingsNetwork} aims to build a global LoRaWAN network
\item Devices need to be registered and assigned to an application before they can communicate with the network
\begin{enumerate}
\item Create an account on \url{https://www.thethingsnetwork.org/}
\item Log in and open the \textit{Console}
\item
\begin{minipage}{0.35\textwidth}
\vspace{-1.85cm}Create an application
\end{minipage}%
\begin{minipage}{0.6\textwidth}
\vspace{-0.2cm}
\includegraphics[scale=0.08]{images/lorawan_application.png}
\end{minipage}
\item Create a device and register it. Go to \textit{Settings} and change activation method to Activation by Personalisation (ABP)\\
\includegraphics[scale=0.08]{images/lorawan_abp.png}
\end{enumerate}
\end{itemize}
\end{frame}
\begin{frame}{Keys}
\begin{reference}{2mm}{80mm}
https://nootropicdesign.com/projectlab/2018/10/28/lorawan-end-devices/
\end{reference}
\begin{itemize}
\item Three important keys (when using ABP):\\
\begin{scriptsize}
\begin{center}
\hspace*{-8pt}\makebox[\linewidth][c]{%
\begin{tabular}{l|l}
Device Address (\textbf{DevAddr}) & identification of the device in TTN \\
\hline
Network Session Key (\textbf{NwkSKey}) & secure communication between device and TTN \\
\hline
Application Session Key (\textbf{AppSKey}) & secure communication between device and application
\end{tabular}
}
\end{center}
\end{scriptsize}
\begin{itemize}
\item DevAddr tells TTN where to route the data
\item NwkSKey used for message validity check (MIC)\\ (prevents tampering with messages)
\item AppSKey are used for payload encryption/decryption\\ (prevents reading the data)
\item Need to be \textbf{hardcoded} into the device
\end{itemize}
\item Alternatively: use Over-the-Air Activation (OTAA) (more secure)
\item Frame counters: Each message is equipped with a counter that prevents re-transmit attacks
\end{itemize}
\begin{reference}{2mm}{70mm}
https://www.thethingsnetwork.org/forum/t/limitations-data-rate-packet-size-30-seconds-uplink-and-10-messages-downlink-per-day-fair-access-policy-guidelines/1300
\end{reference}
\end{frame}
\begin{frame}{LoRaWAN payload format}
\begin{reference}{2mm}{70mm}
http://www.techplayon.com/lora-long-range-network-architecture-protocol-architecture-and-frame-formats/
\end{reference}
\begin{center}
\includegraphics[scale=0.35]{images/lorawan_payload_format.png}
\end{center}
Useful link:
\begin{itemize}
\item LoRaWAN packet decoder {\small \url{https://lorawan-packet-decoder-0ta6puiniaut.runkit.sh/}}
\end{itemize}
\end{frame}
\subsection{Applications}
\begin{frame}{Use cases}
\begin{reference}{0mm}{80mm}
\url{https://www.semtech.com/lora/resources/lora-white-papers}
\end{reference}
\begin{minipage}{0.5\textwidth}
\begin{flushleft}
\textbf{Smart farming}
\end{flushleft}
\includegraphics[scale=0.09]{images/smart_farming.png}
\end{minipage}%
\begin{minipage}{0.5\textwidth}
\begin{flushright}
\textbf{Smart parking}
\end{flushright}
\includegraphics[scale=0.09]{images/smart_parking.png}
\end{minipage}
\begin{minipage}{0.5\textwidth}
\begin{flushleft}
\textbf{Smart home}
\end{flushleft}
\includegraphics[scale=0.09]{images/smart_home.png}
\end{minipage}%
\begin{minipage}{0.5\textwidth}
\begin{flushright}
\textbf{Smart waste management}
\end{flushright}
\includegraphics[scale=0.09]{images/smart_waste.png}
\end{minipage}%
\end{frame}
\section{Playground Part II}
\begin{frame}[fragile]{Playground Part II}
Example code for sending data to \textbf{TheThingsNetwork}:
\begin{spacing}{0.85}
\begin{python}
from lora_transceiver import LoRaTransceiver
from uPySensors.ssd1306_i2c import Display
import uLoRaWAN
from uLoRaWAN.MHDR import MHDR
disp = Display()
# create transceiver for LoRaWAN frequency (channel 0 = 868.1 Mhz)
lora = LoRaTransceiver(frequency=868.1E6, syncword=0x34, display=disp)
# set address and keys for LoRaWAN (with ABP)
devAddr = [0x26, 0x01, 0x16, 0x5C] # ir_test_device_01
nwkSKey = [0x9D, 0x95, 0x0F, 0xAB, 0xCB, 0x63, 0xD3, 0x04, 0xBC, 0x09,
0xC4, 0x9E, 0xC5, 0xDF, 0x3C, 0x37]
appSKey = [0xC9, 0x6C, 0x00, 0xD1, 0xB0, 0x1C, 0x2E, 0x42, 0x11, 0xBA,
0x32, 0x6F, 0x2F, 0xC2, 0x75, 0x6A]
# lorawan object for conversion of data in LoRaWAN message format
lorawan = uLoRaWAN.new(nwkSKey, appSKey)
message = list(map(ord, 'Hello World!')) # convert to bytes
lorawan.create(MHDR.UNCONF_DATA_UP, { 'devaddr': devAddr, 'fcnt': 0,
'data': message })
payload = lorawan.to_raw()
lora.send(payload)
\end{python}
\end{spacing}
(the code is based on the \texttt{uLoRaWAN} library by mallagant, see: {\small \url{https://github.com/mallagant/uLoRaWAN}})
\end{frame}
\begin{frame}[fragile]{Playground Part II}
For testing you can use the following device addresses and keys:
\begin{itemize}
\item
\textbf{nwkSKey}
\begin{python}
9D 95 0F AB CB 63 D3 04 BC 09 C4 9E C5 DF 3C 37
\end{python}
\item \textbf{appSKey}
\begin{python}
C9 6C 00 D1 B0 1C 2E 42 11 BA 32 6F 2F C2 75 6A
\end{python}
\item \textbf{devAddr} (choose one):
\begin{python}
1: 26 01 16 5C 10: 26 01 1A CE
2: 26 01 18 52 11: 26 01 12 F1
3: 26 01 1E 4F 12: 26 01 1B 18
4: 26 01 17 83 13: 26 01 19 40
5: 26 01 1B 5C 14: 26 01 19 96
6: 26 01 1E B5 15: 26 01 18 FF
7: 26 01 13 DA 16: 26 01 12 5B
8: 26 01 1E 8F 17: 26 01 13 63
9: 26 01 18 F1 18: 26 01 12 09
\end{python}
\item Watch incoming data (forwarded as HTTP POST request) at
\begin{center}
\url{https://t1p.de/ocp6}
\end{center}
and check the gateway log at (connected to @BayernWLAN wifi)
\begin{center}
\url{http://192.168.1.1:1337}
\end{center}
\end{itemize}
\end{frame}
\begin{frame}{References and more information}
\begin{footnotesize}
\textbf{References:}
\begin{itemize}
\item Decoding LoRa \url{https://revspace.nl/DecodingLora}
\item \textit{LoRa und The Things Network} - talk by Hubert Högl (FH Augsburg)
\item \href{https://electronics.stackexchange.com/questions/278192/understanding-the-relationship-between-lora-chips-chirps-symbols-and-bits}{Stackexchange thread about LoRa symbols}
\item \href{http://wireless.ictp.it/school_2017/Slides/LoRaDetails.pdf}{LoRa talk}
\item \href{https://www.youtube.com/playlist?list=PLmL13yqb6OxdeOi97EvI8QeO8o-PqeQ0g}{Mobilefish.com LoRa youtube tutorials}
\end{itemize}
\textbf{Further reading:}
\begin{itemize}
\item TTN Applications: APIs, Python SDK, Integrations {\scriptsize \url{https://www.thethingsnetwork.org/docs/applications/}}
\item Best practices to reduce payload size: {\scriptsize \url{https://www.thethingsnetwork.org/forum/t/best-practices-to-limit-application-payloads/1302}}
\item Forum about all things LoRa: \url{https://www.thethingsnetwork.org/forum/}
\begin{itemize}
\item Gateway guides
\item Radio module/antenna recommendations
\item ...
\end{itemize}
\item Cayenne Low Power Payload (LPP)
\end{itemize}
\end{footnotesize}
\pause
\begin{center}
\textbf{Thanks for your attention!}
\end{center}
\end{frame}
\end{document}