lpwan sigfox modem je komunikační modul, který umožňuje ...lpwan sigfox modem je komunikační...
Embed Size (px)
TRANSCRIPT

LPWAN Sigfox modem je komunikační modul, který umožňuje připojit Arduino k IOT síti
Sigfox. Tento modem obsahuje řídící obvod WiSOL SFM10R1, který pracuje na frekvenci 868
MHz a komunikuje s ostatními zařízeními pomocí sériové linky, tedy přes rozhraní UART.
Samotná komunikace je řízena přes AT příkazy a je velmi jednoduchá. Tento model umožňuje
použít napájecí napětí v rozsahu 1,8 až 3,6 Voltů. Co se týká odběru proudu, tak ten dosahuje
při odesílání maximálně 65 mA a při příjmu 15 mA. Ale co je nejdůležitější, tak v režimu
spánku je proudový odběr velký přibližně 2 uA při napětí 3,3 V a teplotě 25°C. Celý rozsah
provozních teplot je pak od -30 do +85°C. Velkou výhodou je také velikost modulu, která je
pouze 24,31 x 14,97 mm.
Pro úspěšné propojení Sigfox modemu s Arduinem stačí zapojit celkem čtyři vodiče. Propojíme
3V3 s 3V3 Arduina, GND se zemí Arduina, RX s pinem D8 a TX s pinem D7. Pro piny RX a
TX je možné použít také ostatní volné digitální piny, ale tuto volbu je nutné provést také na
začátku programu. Pokud byste chtěli použít jinou desku než UNO, tak na deskách Mega a
Mega 2560 je možné pro pin RX využít pouze tyto piny: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53,
A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). A na deskách
Leonardo a Micro lze pro pin RX využít tyto piny: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16
(MOSI). A pro plnou funkčnost také samozřejmě připojíme přiloženou anténu ke konektoru na
modulu.

Pro zprovoznění komunikace našeho Sigfox modemu se sítí je potřeba udělat následující kroky.
Jako první si otevřeme webové stránky https://backend.lpwan.cz/login/ a zde klikneme
v pravém horním rohu na tlačítko "Registrace uživatele".

Na této stránce vyplníme všechny potřebné údaje a tím dokončíme registraci na stránce
LPWAN.

V dalším kroku si přidáme náš Sigfox modem. Ten obsahuje na svém balení vytištěné dva
důležité údaje – ID a PAC. Po kliknutí na tlačítko "Přidat zařízení" tyto dva údaje napíšeme do
formuláře a potvrdíme nabídku tlačítkem "Registrovat".

V tuto chvíli tedy máme zaregistrované zařízení a můžeme zkontrolovat emailovou schránku,
kterou jsme uvedli při registraci. Na ní budeme mít během chvíle email ze stránek Sigfox, který
obsahuje odkaz na nastavení hesla pro Sigfox stránky. Zde je vyžadováno poměrně silné heslo,
které musí mít alespoň 8 znaků, mezi kterými je alespoň 1 malé písmeno, 1 velké písmeno, 1
číslovka a jeden speciální symbol (např. @#$).
Po vyplnění tohoto hesla proběhne přesměrování do portálu Sigfox, kde po souhlasu
s podmínkami použití uvidíme námi zaregistrované zařízení, které ale zatím bude bez signálu.

Pro ověření očekávané síly signálu se můžeme podívat na mapu pokrytí sítí Sigfox. Na tu se
dostaneme tak, že klikneme v levém horním rohu na logo Sigfox a na nově otevřené stránce
klikneme vlevo na odkaz Service map. Na nově otevřené mapě je ještě důležité přepnout pohled
na Českou republiku – pro přepnutí si otevřeme nabídku po pravé straně a zvolíme
SIGFOX_Czech_Rep_Simplecell. Nyní tedy vidíme různými barvami pokrytí signálu sítě
Sigfox, kdy modrá označuje jeden vysílač, zelená dva vysílače a červená nejlepší pokrytí díky
třem a více vysílačům.
Pro otestování funkce a zaslání první zprávy do sítě Sigfox slouží první ukázkový program. Ten
obsahuje na svém začátku připojení potřebné knihovny SoftwareSerial, nastavení
propojovacích pinů RX a TX a inicializaci softwarové sériové linky z knihovny.
V podprogramu setup si nastavíme nejprve sériovou linku pro komunikaci mezi počítačem a
Arduinem a následně softwarovou sériovou linku pro komunikaci mezi Arduinem a Sigfox
modemem. V nekonečné smyčce loop se pak nachází jednoduchý kód, který nám slouží jako
komunikační most mezi použitými sériovými linkami. Pokud tedy přijde na jednu ze sériových
linek nějaký znak, zapíšeme ho na druhou sériovou linku.
kopírovat do schránky// Testování komunikace pomocí softwarové sériové
linky
// připojení potřebné knihovny
#include <SoftwareSerial.h>
// nastavení projojovacích pinů
#define TX 7
#define RX 8
// inicializace softwarové sériové linky z knihovny
SoftwareSerial Sigfox(RX, TX);
void setup() {

// zahájení komunikace po sériové lince rychlostí 9600 baud
Serial.begin(9600);
// zahájení komunikace po softwarové sériové lince rychlostí 9600 baud
Sigfox.begin(9600);
}
void loop() {
// když dostaneme nějaké znaky na softwarové sériové lince,
// odešleme je do počítače
if (Sigfox.available()) {
Serial.write(Sigfox.read());
}
// když dostaneme nějaké znaky na počítačové sériové lince,
// odešleme je do Sigfox modulu
if (Serial.available()) {
Sigfox.write(Serial.read());
}
}
Po nahrání programu do Arduino desky s připojeným Sigfox modemem si otevřeme Sériový
monitor s nastavenou rychlostí 9600 baudů a odesíláním znaků „Návrat vozíku (CR)“. Nyní si
můžeme zkusit poslat testovací příkaz „AT“, na který bychom měli dostat odpověď „OK“.
Pokud se tak stalo, máme správně propojený a napájený modul (v opačném případě bude
pravděpodobně přehozená dvojice RX/TX). Jako další krok si můžeme zkusit odeslat první
testovací zprávu do Sigfox sítě. Ta vypadá například takto „AT$SF=A123“. Znaky A123 jsou
hexadecimální čísla a dekadicky by tedy toto číslo odpovídalo číslu 41251. Po odeslání této
druhé zprávy si nyní můžeme zkontrolovat na stránkách Sigfox, jestli se nám v seznamu
zařízení změní údaje o našem modemu – hlavně průměrná síla signálu (Rssi) a poslední
komunikace (Last seen). Pokud se tyto údaje neaktualizují, je možné, že máte slabý signál.
Zkuste přesunout anténu modemu co nejblíže oknu, případně ven, a znovu poslat testovací
zprávu. Po úspěšném testování modemu Sigfox si nyní ukážeme, jak využít Arduino pro
posílání tří čísel na server Thingspeak.
Pokud neznáte server Thingspeak, tak se jedná o zajímavý web, který nám umožňuje nahrávat
a ukládat různá data do takzvaných kanálů a následně si je prohlížet v grafech. Více informací
včetně toho, jak si založit účet, naleznete v tomto článku.
Druhý ukázkový program je rozšířením prvního. Přibyl zde podprogram odesliData, který
obsahuje vytvoření, zpracování a zaslání zprávy modemem Sigfox. Na jeho začátku si
vytvoříme zprávu o 12 znacích (maximální velikost) a poté tři číselné proměnné. Do těchto
proměnných si pro ukázku nahrajeme analogovou hodnotu z různých analogových pinů
Arduina. Následně si pomocí funkce sprintf převedeme všechny tři čísla do hexadecimálního
tvaru a uložíme je za sebou do zprávy(každá číslice má 4 hexa znaky, tedy maximum FFFF =
65535). V poslední kroku si pro informaci vytiskneme posílané číslice a zprávu do počítače,
následně vytiskneme zprávu do Sigfox modulu a vyčkáme 1 vteřinu. Tento podprogram je pro
ukázku volán poprvé na konci podprogramu setup a následně každých 15 minut v nekonečné
smyčce loop. Zmíněný interval je kontrolován tak, že zkontrolujeme počet vteřin od zapnutí
Arduina a toto číslo vydělíme 900 (900 vteřin = 15 minut). Pokud je výsledek po dělení rovný
nule, zavoláme podprogram pro odeslání dat.

#include <SoftwareSerial.h>
// nastavení propojovacích pinů
#define TX 7
#define RX 8
// inicializace softwarové sériové linky z knihovny
SoftwareSerial Sigfox(RX, TX);
void setup() {
// zahájení komunikace po sériové lince rychlostí 9600 baud
Serial.begin(9600);
// zahájení komunikace po softwarové sériové lince rychlostí 9600 baud
Sigfox.begin(9600);
delay(1000);
// odeslání první zprávy
odesliData();
}
void loop() {
// když dostaneme nějaké znaky na softwarové sériové lince,
// odešleme je do počítače
if (Sigfox.available()) {
Serial.write(Sigfox.read());
}
// když dostaneme nějaké znaky na počítačové sériové lince,
// odešleme je do Sigfox modulu
if (Serial.available()) {
Sigfox.write(Serial.read());
}
// každých 15 minut se provede následující odeslání dat
// (15 minut je získáno tak, že načteme počet vteřin od
// zapnutí napájení, zjistíme zbytek po dělení 900 vteřinami
// a pokud je tento zbytek 0, máme 15 minutový interval)
if ((millis()/1000 % 900) == 0) {
odesliData();
}
}
void odesliData() {
// vytvoření proměnné typu char o velikosti 4 znaků,
// do 4 hexa znaků lze uložit číslo typu uint
// (velikost 0 až 65535)
char zprava[12];
// vytvoření proměnné typu unsigned integer a načtení hodnoty A0
unsigned int cislo1 = analogRead(A0);
unsigned int cislo2 = analogRead(A1);
unsigned int cislo3 = analogRead(A2);
// převod načteného čísla na hexadecimální tvar o 4 znacích
sprintf(zprava, "%04X%04X%04X", cislo1, cislo2, cislo3);
Serial.print("Odeslani dat do Sigfox site, odesilam: ");
Serial.print(cislo1);
Serial.print(", ");
Serial.print(cislo2);
Serial.print(", ");
Serial.print(cislo3);
Serial.print(", hexa tvar: ");
Serial.println(zprava);
Sigfox.print("AT$SF=");
Sigfox.println(zprava);
delay(1000);
}

Po nahrání programu do Arduino desky s připojeným Sigfox modemem je nutné nastavit
správně zpracování dat na straně Sigfox webu, které se provádí v menu Callback. Do tohoto
menu se dostaneme tak, že na stránkách Sigfox si klikneme na menu „Device Type“, zde u
našeho modemu klikneme na jeho „Device type“ (LPWAN.cz Arduino-shop kit) a následně
v levé nabídce klikneme na položku „Callbacks“. Pro vytvoření nového Callbacku klikneme po
pravě straně na tlačítko „New“ a zvolíme možnost „Custom callback“. V otevřeném formuláři
je nutné nastavit dešifrování zaslané zprávy (Custom payload config), webovou adresu pro
odeslání informací na server Thingspeak (Url pattern) a správný typ odeslání dat (Use HTTP
Method). Já jsem v testovacím programu zvolil takový tvar dat, že se odesílají tři čísla o velikost
16 bitů (4 bajty = znaky) za sebou, proto tedy do řádku „Custom payload config“ napíšu tento
výraz:
„cislo1::uint:16 cislo2::uint:16 cislo3::uint:16“.
Aby server Thingspeak správně rozeznal všechny údaje, je nutné do řádku „Url pattern“ napsat
tento výraz:
„http://api.thingspeak.com/update?api_key=<ZAPIS_API_KLIC>&field1={device}&fiel
d2={customData#cislo1}&field3={customData#cislo2}&field4={customData#cislo3}&fiel
d5={rssi}&field6={seqNumber}“.
Po vložení zápisového klíče se tedy do prvního pole zapíše ID vašeho zařízení, do druhého až
čtvrtého pole posílané číselné údaje, do pátého pole velikost signálu a do posledního pole číslo
posílané zprávy. Posledním údajem, který musíme nastavit u Callbacku, je typ odesláných dat,
kdy je nutné nastavit metodu „POST“. Po vyplnění těchto údajů potvrdíme volbu tlačítkem OK.
Nyní je ještě nutné shodně nastavit očekávaná pole na stránce Thingspeak, ukázka na obrázku
níže.


Pokud jste všechny kroky provedli správně, měli byste během chvíle vidět ve vašem kanále
Thingspeak nové údaje zaslané z modemu Sigfox, přičemž si můžete ověřit na výstupu
sériového monitoru, jestli proběhla konverze údajů do hexadecimálního tvaru a nazpět
v pořádku.
LPWAN Sigfox modem je velice zajímavým IOT modulem, který umožňuje posílat různé údaje
pomocí Arduina či třeba Raspberry Pi přes komunikační síť Sigfox. Velkou výhodou je zde
například velmi dobré pokrytí signálem v České republice a roční licence pro používání v ceně.
Měli bychom ale pomatovat na jistá omezení, která se týkají provozu těchto zařízení. Jedním
z omezení je velikost zprávy, která může obsahovat maximálně 12 bajtů a také počet
odeslaných zpráv, který je omezen na 140 zpráv na den (proto jsem zvolil interval 15 minut
mezi zprávami). Příklad použití modemu Sigfox vidím v různých meteostanicích, senzorech
pohybu či obecně bezpečnostních systémech, které jsou umístěny mimo dosah WiFi anebo je
pro nás zbytečné investovat do GSM modulu a platit za SIM kartu. Více informací naleznete
na stránkách LPWAN.cz