IOT LPWAN SigFox Node UART Modem 868MHz

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.

// 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.

// Sigfox modem - odesílání dat

// 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);
  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
    // analogového pinu 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}&field2={customData#cislo1}&field3={customData#cislo2}&field4={customData#cislo3}&field5={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

 

Seznam použitých komponent:

http://dratek.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html

https://dratek.cz/arduino/1584-lpwan-sigfox-node-1493197325.html

Další podobné články