Category Archives: Mikrokontroléry – Arduino, ESP8266, Picaxe, …

Záchrana neřiditelného RC modelu skrzevá Arduino

Dítko během posledních dvou let v modelářském klubu postavilo maketu říčního remorkéru ČSPLO „Bečva„. Bezmála metrový model pro soutěže v kategorii F2B (Naviga) vypadá moc hezky….

Jpeg Celý příspěvek

Reklamy

komentáře 3

Filed under Mikrokontroléry - Arduino, ESP8266, Picaxe, ..., Počítače, vývoj HW a SW

Hodiny z pekla

Tchýně přijela na návštěvu a vypadá to, že neplánuje odjet? Zlobivý mladší sourozenec? Zbytečně dobré pracovní prostředí? Problém dokážeme snadno vyřešit s Arduinem!

Spousta lidí si stěžuje, že nemůže spát, když v místnosti tikají hodiny. Ale časem si stejně zvyknou. Co takhle to trochu vylepšit a udělat hodiny, které tikají nestandardně? Deset minut jdou běžným způsobem, pak se na půl minuty zastaví a následně zpoždění doženou… a pak zase čtvrt hodiny běží normálně. Tohle je daleko více obtěžující, než běžné tikání! A přitom ty hodiny jdou přesně – v každou chvíli je odchylka od aktuálního času menší než dvě minuty.

Tedy postavte si takovéhle super hodiny, nainstalujte je do místnosti, kde spí nechtěná návštěva, a pak už se jen kochejte výsledkem.

Celý příspěvek

Napsat komentář

Filed under Mikrokontroléry - Arduino, ESP8266, Picaxe, ..., Počítače, vývoj HW a SW

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.

 

Napsat komentář

Filed under Mikrokontroléry - Arduino, ESP8266, Picaxe, ..., Počítače, vývoj HW a SW

Zkuste to bez drátů, pane Marconi!

(Prvotně publikováno 7.3.2014 na raspi.cz.)

Kterak k Raspberry Pi připojit bezdrátový senzor něčeho, třeba teploty.

Pro plánované zařízení jsem potřeboval, aby dva mikrokontroléry byly schopny si mezi sebou na vzdálenost pár metrů vyměňovat data bezdrátově. Po chvíli hledání jsem našel zajímavý komunikační čip od Nordic Semiconductors – nFR24L01+.

nFR24L01+ není jen tak obyčejné ASK-OOK pípátko, přes které se dá prodloužit sériový port. Tenhle čip funguje až na vrstvě 4 modelu ISO/OSI, tedy udělá za vás spoustu práce.  Vysílá na frekvenci 2.4 GHz (volné pásmo ISM – industrial, science, magic). Umí zpracovávat pakety o délce až 32 byte, které chrání pomocí šestnáctibitového CRC. Každý čip má nastavenou svou adresu (pětibajtovou) a je schopen přijímat data až od dalších pěti čipů. A automaticky obsluhuje potvrzení příjmu od protistrany. Tedy funguje to tak, že dáte čipu data a řeknete „odešli na stanici s adresou 1-2-3-4-5“. Čip autonomně odešle data a počká na potvrzení od protistrany. Když potvrzení nedojde, opakuje vysílání ještě několikrát. A na závěr vám řekne, zda se podařilo či nepodařilo data dodat na druhou stranu. Komunikace je přes SPI. No a to nejlepší na závěr: [tady] ho mají zabalený v hezkém hotovém modulu za 1.72 USD včetně dopravy do ČR! Tedy za tuhle cenu je jeden, potřebujete dva. Ale necelé 4 USD = 80 Kč za bezdrátový spolehlivý link mi přijde jako dobrá cena.

DSC_4913

Aby se mi neznámé zařízení lépe ladilo, rozhodl jsem se, že odesílat budu z mikrokontroléru, ale přijímat budu do Raspberry Pi, protože by se to mohlo časem taky hodit. Jako mikrokontrolér pro podobné hračky používám čipy Picaxe. Konkrétně v tomhle případě Picaxe 20M2. Stejně jako u populárních Atmelů (Arduino) je to kompletní mikrokontrolér, který má na čipu vše potřebné – analogové i digitální vstupy i výstupy, podporu I2C, sériového portu a spousty dalších věcí. Programuje se to v „basicu“ – syntaxí je to basic, ale sémantikou spíše assembler (pracujete přímo s registry/pamětí). Vývojové prostředí je zdarma. Největší rozdíly proti Atmelu/Arduinu jsou tyto:

  1. Pro programování nepotřebujete programátor ani jiné specifické USB hračky. K obvodu stačí dát dva rezistory a je možné ho připojit k běžnému sériovému portu, přes který se programuje a přes který umí posílat debugovací hlášení. Podpora pro sériový port může být i v hotovém zařízení. Je možné ho tedy přeprogramovávat kdykoli.
  2. Podporuje napájení 5 V i 3.3 V.
  3. Přímo na úrovni jazyka obsahuje spoustu knihoven, které pokrývají většinu úkolů. Potřebujete změřit délku impulzu? Načíst teplotu z 1-wire teploměru? Poslat data přes I2C? Na všechno jsou tam jednořádkové příkazy, které to umí samy.

Zapojení – vysílač – Picaxe

Na straně vysílače je to jednoduché. Všechny datové nohy bezdrátového modulu připojíme napřímo na nohy mikrokontroléru.

  • C.0  -> Nordic CE
  • C.1  -> Nordic CSN
  • C.2  -> Nordic SCK
  • C.3  -> Nordic MOSI
  • C.4  -> Nordic MISO
  • C.5  -> Nordic IRQ

Na další piny připojíme 1-wire teploměr DS18B20 (do standardního zapojení popsaného na webu Picaxe) a dvě LED diody pro signalizaci (komunikace OK, chyba). Zbývá už jen napojit napájení bezdrátového modulu. A tady pozor! I když jsou datové nohy modulu tolerantní k 5 V, napájení musí být 3.3 V! A ještě jedno upozornění: k napájení modulu je nutné připojit kondenzátor 10 uF. Dokud tam nebyl, chovalo se to divně.

DSC_4919

Schema zapojení:

DSC_4920

Zapojení – přijímač – Raspberry Pi

Tady P.T. čtenáře přesměruji [na tento článek]. Tam je to všechno step-by-step popsáno, včetně zapnutí SPI na straně Raspberry Pi.

DSC_4915

Zapojení je extrémně jednoduché – jen se propojí odpovídající piny RPi s odpovídajícími piny modulu.

RPi GPIO9 /MISO    (Pin 21)    – modul  pin 7 ( MISO )
RPi GPIO10/MOSI   (Pin 19)   – modul  pin 6 ( MOSI )
RPi GPIO11/CLK   (Pin 23)    – modul  pin 5 ( SCK )
RPi GPIO8/CE0     (Pin 24)    – modul pin 4 ( CSN )
RPi GPIO25  (Pin 22)    – modul pin 3  ( CE ) – tohle je jediná věc mimo standardní SPI zapojení, tímhle pinem se ovládá, kdy je modul rádiově aktivní
RPI 3.3V        (Pin 1)    – modul  pin 2 ( VCC/3.3V )
RPi Gnd         (Pin 6)    – modul  pin 1 (GND)

Software

Vhodný startovní kód pro Picaxe jsem [našel zde].

Kód pro Raspberry Pi je na již dříve [zmíněném odkazu].

Samozřejmě, že si spolu navzájem nerozuměly. Musel jsem postupně procházet datasheet obvodu a pochopit, co je potřeba změnit:

  • Obě strany samozřejmě musí mít stejně nastavenu linkovou vrstvu – frekvenci, rychlost, režim potvrzování.
  • Na straně přijímače musí být nastavená stejná délka paketu, jakou vysílač opravdu pošle.
  • Vysílající strana si nastaví odesílací i přijímací adresu na stejnou adresu, jakou má přijímač (!!!).
  • Odesilatel by si neměl vymaskovat stavové informace o odeslání paketu, přijímač by neměl nechat maskovat stavové informace o příjmu paketu.
  • No a pak nastane magie a začne to fungovat.

Finální kód pro obě strany najdete [zde].

Raspberry Pi tedy dostává každou chvíli paket o délce 1 byte, který obsahuje teplotu naměřenou na straně vysílače, přímo ve stupních celsia.

Finální řešení bude mít i na straně přijímače také mikrokontrolér Picaxe. Ale až někdy budete potřebovat něco měřit bezdrátově, vzpomeňte si na moduly nFR24L01+, možná budou váš problém řešit.

Jo a ještě zbývá doplnit dosah: na volném prostranství jsem měl data cca 25 metrů od vysílače. Přes dvě tlusté zdi to funguje na cca 8 metrů bez problémů.

Napsat komentář

Filed under Mikrokontroléry - Arduino, ESP8266, Picaxe, ..., Počítače, vývoj HW a SW