Monthly Archives: Březen 2016

blynk.cc – rapid prototyping pro IoT (ESP8266, NodeMCU) s podporou mobilek

Blynk.cc je zajímavá platforma pro rychlé prototypování IoT řešení s vizualizací v mobilním telefonu. Pokud potřebujete vyzkoušet senzor a nechce se vám k němu psát serverovou stranu a mobilní front-end, Blynk může být správné řešení.

Podporuje Arduino (s ethernet/wifi shieldy), Particle … a napřímo podporuje i ESP-8266 (NodeMCU). A ta poslední varianta mne zaujala.

První aplikace je hotová za pět minut.

Nainstalujte si mobilkovou aplikaci a podle popisu zde založte první projekt. Získáte autorizační token.

Stáhněte si Arduino knihovnu z http://www.blynk.cc/getting-started/ . Je to ZIP soubor se čtyřmi podadresáři, které nakopírujete do adresáře libraries/ v adresáři s Arduino skeči. Restartujte Arduino IDE.

Udělejte jednoduchý skeč:

#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "autentizační token";
void setup()
{
 Serial.begin(115200);
 Blynk.begin(auth, "ssid wifi sítě", "heslo wifi sítě");
}

void loop()
{
  Blynk.run();
}

No a teď už je možné do projektu v mobilce přidat načítání a zobrazení hodnoty libovolného digitálního či analogového pinu. To se udělá prostým vložením objektu Value display (prosté zobrazení), Gauge („budík“) či Graph (graf – hodinový, denní, měsíční). Jen vložíte na stránku v mobilce ovládací prvek a řeknete mu, jaký pin mikrokontroléru (Dxx, Axx) má obsluhovat. Stejně snadno je možno nastavovat hodnoty výstupních pinů. Na straně kontroléru nic neprogramujete. Neřešíte spojení, ukládání dat na server, vizualizaci – nic.

  

Ale co když chci připojit ke kontroléru něco, co se musí ovládat složitěji než prostým načtením hodnoty z pinu?

Za tímto účelem má Blynk virtuální piny V1 až Vxx. jejich hodnota není vázána přímo na pin kontroléru, ale je obsluhována v aplikaci.

Třeba si takhle připojíme k NodeMCU teploměr DS18B20. Nejjednodušší možné zapojení – napájení na 3.3 V, zem na zem, datový pin teploměru na pin D4 kontroléru a přes odpor 4k7 na napájení.

DSC_4226

Podporu pro OneWire sběrnici má NodeMCU v sobě, knihovna DallasTemperature pro čtení teploty se instaluje v manažerovi knihoven Arduino IDE automaticky.

Sketch vypadá takto:

Hlavička:

#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <OneWire.h> 
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D4
#define TEMPERATURE_PRECISION 10 

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress thermometer;

SimpleTimer timer;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "16a...........305032d";

Setup – enumerace zařízení na OneWire sběrnici, nalezení adresy teploměru a konfigurace Blynku:

void setup()
{
 Serial.begin(115200);

 sensors.begin();
 Serial.println("***************************************************");
 Serial.print("Pocet teplomeru: ");
 Serial.println(sensors.getDeviceCount(), DEC);
 //zjisti adresy
 oneWire.reset_search();
 if (!oneWire.search(thermometer)) Serial.println("teplomer nenalezen!");

 Blynk.begin(auth, "jméno wifi", "heslo k wifi");
  // jednou za tři sekundy chceme poslat teplotu
 timer.setInterval(3000L, sendUptime);   
 
}

A vlastní výkonná smyčka:

void loop()
{
 Blynk.run();
 timer.run();
}

Aha. Tady vlastně nic neděláme s tím teploměrem, že? Teploměr se načítá jednou za 3 sekundy – ve funkci sendUptime, která je volaná z timeru:

void sendUptime()
{
 //nastav rozlišení
 sensors.setResolution(thermometer, TEMPERATURE_PRECISION);
//načti všechny teploměry
 sensors.requestTemperatures();
 float tempC = sensors.getTempC(thermometer);
 
 Blynk.virtualWrite(10, tempC); // virtual pin 
 Blynk.virtualWrite(11, tempC); // virtual pin
if( tempC>26 )
 {
 Blynk.notify("Teplota moc velka!");
 }
  
}

Je tady vidět, že načtu teplotu z teploměru a pošlu jí do dvou virtuálních pinů – V10 a V11. Proč? Protože každý virtuální pin může na mobilce končit jen v jednom zobrazovači. Takže V10 bude zobrazovat aktuální hodnotu a V11 pošlu do grafu.

Jo a ještě pozor na červený text. Pokud na mobilce do projektu vložíte objekt „Push Notifications“, tak pomocí Blynk.notify můžete poslat push notifikaci. A fakt to funguje. Tj. nejen vlastní zobrazení stavu zařízení, ale i upozornění kdykoli.

Na mobilce jsem si udělal jednoduchý projekt: jednou display value z pinu V10, jednou graf z pinu V11. A tlačítko pro ovládání pinu D0 (tam má moje NodeMCU ledku). A prvek pro push notification. No a pak stačí kliknout na „spustit“ (trojúhelníček) a žije to. Na mobilce je vidět graf teplot i aktuální teplota; po kliknutí na tlačítko „led“ se rozsvítí nebo zhasne ledka:

Screenshot_2016-03-17-18-41-36

No a pokud teplota stoupne nad 26 stupňů (zub na grafu) … na mobilce vyskočí push notifikace. I když je mobilka suspendnutá a aplikace neběží.

Screenshot_2016-03-17-14-25-56

Výhody: Skvělé pro jednoduché testování. Nemusíte programovat front-end. Podpora push-notifikací.

Nevýhody: Není webový front-end, jen mobilkový. Nepřekvapilo by mne, kdyby to časem zpoplatnili.

Na okraj: Není nutné využívat jejich cloud. Blynk server si můžete nainstalovat i lokálně u sebe.