OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » IoT - Internet of Things » SIGFOX WISOL Arduino

SIGFOX WISOL Arduino

Vážení kolegové, přátelé IoT, konečně po dlouhé době jsem se opět dostal k hobby doméně, tedy k Arduinu a jeho využití v IoT low power sítích, tentokráte pro infrastrukturu SIGFOX, která se v našich končinách velmi slibně rozvíjí, máme za sebou první velké pilotní projekty a vše hezky jede ke komerčnímu nasazení v masovém měřítku, tak jak se před zhruba rokem předpovídalo. Má odmlka byla právě způsobená tímto masovým rozmachem low power infrastruktur a nasbíral jsem opravdu tuny zkušeností a některé bych chtěl posunout i do hobby úrovně tak, aby jste si byli schopni sami vyrobit různé teploměry, snímače hladiny, PIR čidla atd.

Třídolarový WISOL je tady!

Jak jste sami pozorovali, konstrukce senzorů pro infrastrukturu SIGFOX nebo LoRaWAN není žádnou levnou záležitostí, ceny transceiverů pro tyto sítě se pohybovaly kolem hranice 20 USD i více. Společnost SIGFOX, operátor největší celosvětové infrastruktury narrow band IoT zainvestovala vývoj a výrobu velmi levných, ale přitom velmi kvalitních transceiverů. Po několika profi konstrukcích, certifikačním procesu u Sigfoxu a dalších aktivitách nejen kolem tohoto transceiveru jsem se rozhodl, že jej zpřístupním Arduino veřejnosti v té nejjednodušší formě, kterou v zápětí popíšu. Ano, skutečně je WISOL třídolarovým transceiverem, přesněji s cenou 2.89USD za kus se již dá pomýšlet na nejrůznější domací udělátka a být tak Sigfox ready. Než se pustíme do popisu konstrukce a příkladového sketche, podívejme se na základní vlastnosti transceiveru SIGFOX:

  • Transceiver na bázi čipu Axsem
  • Certifikován pro použití v síti Sigfox a konstrukci tzv. P2 certifikovaných zařízení
  • Anténní výstup 50ohmů
  • ERP kolem 14dBm
  • striktně 3.3V
  • Deep sleep režim 600nA!!! (není to katalogová hodnota, ale mnou změřená)
  • Přívětivý command set s AT příkazy

...a to je on:

WISOL Arduino Pro Mini

Pro Arduino konstrukci jsem se rozhodl využít klon Arduino pro Mini s krystalem 8MHz a 3.3V provedení. Proč? Protože:

  • Cena kolem 3USD
  • 8MHz = není nesmyslně přetaktovaný procesor a tudíž je zajištěna práce i v jiných než pokojových teplotách na rozdíl od 16MHz taktování. Pro naše účely těch 8MHz bude bohatě stačit
  • 3.3V = žádné problémy s konverzí na potřebné logické úrovně - a to jak transceiveru, tak moderních součástek, ty neperspektivní dnes ještě jedou na 5V a tudíž jsou pro mně nezajímavé, zastaralé a je lepší se porozhlédnout po daleko lepším ekvivalentu.

Schéma WISOL Arduino Pro MINI

Zapojení nemůže být jednodušší, prakticky je to spojení Arduino pro Mini s transceiverem WISOL a nějakou drobnou bižutérií kolem. Všimněte si shottkyho diody, ta slouží pro eventuální připojení baterie. Jinak schéma asi nepotřebuje více komentáře.

Pinout WISOL Arduino pro Mini

Připojení USB/UART převodníku pro flash

Pro nahrání sketche doporučuji použít USB/UART převodník z našeho eshopu a v Arduino IDE pak vyberte modul Arduino pro Mini 3.3V/8MHz.

Vzorový sketch

Nyní se podívejme, jak je jednoduché vytvořit základní sketch pro práci s modulem WISOL - tento sketch přečte nutné identifikační údaje pro registraci do sítě Sigfox - tzv. ID a PAC modul a v jeho commandParseru jsou implementovány 2 příkazy send:xxxx a sendTest - oba tyto příkazy slouží pro poslání dat do sítě Sigfox. Nebudu zde rozebírat, jak to v Sigfoxu funguje, kam se přenášejí data pod. to možná v jiném článku, předpokládám, že zájemci o komunikaci v síti Sigfox již tyto znalostí mají.

#include <NeoSWSerial.h>
NeoSWSerial WISOL(4,5);
char c;
String response;

void printStars()
{
	Serial.println ("**********************************");
}
void checkResponse()
{
	response = "";
	while(WISOL.available()==0);
	while(WISOL.available()>0)
	{
		delay(5);
		c = WISOL.read();
		response = response + c;
	}
	response = response.substring(0,(response.length()-2));
}
void checkTRX()
{
	response = "";
	c=0x00;
	while(WISOL.available()>0)
	{
		WISOL.read();
		delay(5);
	}
	while(response.substring(0,2) !="OK")
	{
		WISOL.println("AT");
		delay(5);
		response = "";
		while(WISOL.available()>0)
		{
			delay(5);
			c = WISOL.read();
			response = response + c;
		}
		//Serial.println("WISOL response:");
		//Serial.print(response);
	}
}
void getID()
{
	printStars();
	WISOL.println("AT$I=10");
	delay(5);
	response = "";
	while(WISOL.available()>0)
	{
		delay(5);
		c = WISOL.read();
		response = response + c;
	}
	Serial.print("ID:" + response);
	WISOL.println("AT$I=11");
	delay(5);
	response = "";
	while(WISOL.available()>0)
	{
		delay(5);
		c = WISOL.read();
		response = response + c;
	}
	Serial.print("PAC:" + response);
	printStars();
}
void getVersion()
{
	WISOL.println("AT$I=0");
	delay(5);
	response = "";
	while(WISOL.available()>0)
	{
		delay(5);
		c = WISOL.read();
		response = response + c;
	}
	Serial.print("TRX version:" + response);
}
void send(String payload)
{
	Serial.println("Sending payload ...");
	WISOL.print("AT$SF=");
	WISOL.println(payload);
	delay(1000);
	//po�kej na OK
	checkResponse();
	if (response == "OK") Serial.println("Payload sent!");
	else Serial.println("Sending Error!");
	return;
}
bool parseCommand(String resp)
{
	if (resp == "sendTest")
	{
		Serial.println("Test message sending...");
		send("ABBA1234");
		return 1;
	}
	if (resp.substring(0,5) == "send:")
	{
		resp = resp.substring(5,resp.length());
		Serial.println("Payload:" + resp);
		send(resp);
		return 1;
	}
	Serial.println("Unknown command");
	return 0;
}

void setup()
{
  
  Serial.begin(9600);
  WISOL.begin(9600);
  pinMode(13,OUTPUT);
  pinMode(6,OUTPUT);
  printStars();
  Serial.println ("********SIGFOX WISOL Frame********");
  digitalWrite(13,HIGH);
  delay(200);
  digitalWrite(13,LOW);
  checkTRX();
  Serial.println("WISOL detected!");
  getVersion();
  getID();
  response = "";

}

void loop()
{
	if(Serial.available()>0)
	{
		c = Serial.read();
		Serial.print(c);
		response = response + c;
		if (c == '\n')
		{
			response = response.substring(0,(response.length()-2));
			parseCommand(response);
			response = "";
		}
		
		
	}

}

Sketch je takový self-explaining a jeho strukturu jistě pochopíte ze setup() a loop(). Jen jedna poznámka - místo SoftwareSerial vestavěném v Arduino IDE doporučuji stáhnout NeoSWSerial, protože je mnohem stabilnější při 8MHz taktování, SoftwareSerial i při nízké rychlosti komunikace s transceiverem házel občas nesmysly.

Dostupnost WISOL Arduino Pro Mini

Na našem eshopu (květen 2017) brzy naleznete tento produkt za cenu 550,-Kč bez DPH, tedy 665,-Kč včetně DPH. Momentálně je vyrobených několik vzorků na testování a v tuto chvíli přijímám předobjednávky. Pár nedočkavců mohu uspokojit již nyní, 10ks je k dispozici. Nezapomeňte pak přiobjednat USB/UART převodní a nějaké ty drobnosti pro stavbu reálného čidla - třeba teploměr DS18B20, což si popíšeme v některém dalším článku. Budu také zakrátko rozšiřovat sortiment o akcelerometry a další low power senzoriku, takže je se na co těšit. Dá-li bůh a čas, pak pár reálných konstrukcí popíšu v krátké době.

PF
petr.foltyn@arduinotech.cz

Přidat komentář

Zvýrazněné položky jsou povinné.

Přehled komentářů

  1. ceny (Zdeněk Buchta, 4.5.2017 9:29:14) Odpovědět

    cenik je dostupný na webu simplecellu

    http://www.simplecell.eu/wp-content/uploads/2017/02/CENIK_TELEKOMUNIKACNICH_SLUZEB_v3.pdf

  2. Sleep režim (Petr K, 2.5.2017 12:46:12) Odpovědět

    Dobrý den,
    Moc pěkný článek. Myslíte, že by jste mohl napsat článek o spojení právě tohoto modulu (ARD mini + Wisol) se senzorem na měření teploty, třeba DS18B20 a prakticky ukázat nejvhodnější způsob režimu na baterii? Hlavně co se týče problematiky uspání arduina, aby například po roce se neposunul čas odeslání údaje o teplotě apod. Např použití vhodného RTC obvodu? Jinak s ARD mini se dá dostat v režimu spánku pěkných 5uA.

    Dobrý den,
    Ano, článek na low power připravuji, dostal jsem se reálně na 4,6uA i s transceiverem, chce to ale trochu "vykostit" Arduino. Popíšu to a modulky budu dodávat už patřičně vykoštěné pro low power. Začneme od sketche pro periodické vysílání - teplotu si vezmeme z transceiveru a pak to doplníme o ds18b20 nebo něco podobného. Ds18b20 je fajn, 2uA spotřeby jsou perfektní.

    PF

  3. Proud (Miroslav Vochozka, 28.4.2017 17:59:05) Odpovědět | Zobrazit odpovědi

    Proud do modulu WISOL je mi jasný. Kdy a kolik bere Arduino - to netuším. Je toto spojení vhodné?

    Dobrý den!
    No a proč by to nebylo vhodné, i to "hloupé" arduino - pardon čip AT328p v roce 2017 nelze už jinak nazvat, lze zkrotit do low power. Bude článek, kde se tímto budu zabývat. Lze sešplhat na hezkých průměrných cca 25uA. No ve srovnání s "chytřejšími" bratry je to pořád bída, ale když vezmete kalkulačku a začnete počítat, kam se s touto spotřebou dostanete, pak to není tak hrozné. Dá se tak realizovat senzor, který bude data v rozumných intervalech (třeba jednou za hodinu) posílat pár let na jednu lithiovku rozměru AA a kapacitě 2,6Ah. Takže toto spojení? Proč ne?

    PF

    1. Re: Proud (Miroslav Vochozka, 28.4.2017 20:55:27) Odpovědět

      Děkuji. Už vím, co budu dělat na podzim.

  4. WISOL Pro Mini (Pavel DC, 28.4.2017 12:08:51) Odpovědět

    Pokud v tom někdo plave,tak jako třeba já, doporučuji tuto přednášku https://youtu.be/ziM6Q_jtepw

    Váš modulek vypadá velice velice zajímavě za super cenu! Po zmíněných deseti kusech se určitě jen zaprášilo, takže bych měl vážný zájem o předobjednávku - emailem? Pavel

  5. Kolik za provoz (Karel Trojan, 22.4.2017 23:13:17) Odpovědět

    Nějak jsem se nedočetl, kolik se platí měsíčně za připojení.

    Dobrý den,
    tarify Sigfoxu jsou v ČR známé, nepovím Vám na korunu přesně, protože se snažíme s partnery nakoupit větší množství konektivity a tím je ještě srazit níže, nicméně 2 zprávy denně = 20,-Kč/měsíc, maximum 144 zpráv denně = 35,-Kč/měsíc. Bude článek o tom jak a za kolik.

    S pozdravem,
    PF


TOP produkty

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist