V diskuzi k Wemos D1 jsem se zmiňoval o projektu, kde jsem narazil na problém se sdílením signálů TX a RX mezi USB převodníkem a aplikací. Destička Witty ale zatím bohužel nedorazila a já musel objednat novou. Protože jsem ale chtěl alespoň část projektu vyzkoušet, pokusil jsem se jít malinko jinou cestou. Jde o to, že mě napadlo, kdyby, na tomto webu již zmiňovaná meteostanice pro Jirky, uměla ještě něco navíc – to „něco“ by mělo být pořizování a přenos fotografií z modulku kamery, umístěné přímo ve vnější jednotce stanice.
Protože samotný ESP8266 nestačí pro přímé připojení kamerového modulu pomohl jsem si trikem – rozhodl jsem se použít snímací prvek se sériovým rozhraním a JPEG kompresí. Takové moduly se dají pořídit na Aliexpress za něco kolem $16 a já doma objevil pro první pokusy letitý modul C328R (už se nedodává). Zapojení jsem prozatím realizoval na nepájivém kontaktním poli a je velmi jednoduché – kamera vyžaduje pouze napájení 3,3V a dva komunikační signály TXD a RXD.
Protože přenášený datový objem mezi kamerou a ESP8266 je relativně velký, chtěl jsem pro spojení použít hardwarový sériový port, který je normálně použitý pro programování. Abych nepřišel o komfort nahrávání a nemusel jsem pořád kamerový modul odpojovat, doplnil jsem skript o možnost nahrání firmware přes WiFi použitím knihovny ArduinoOTA. Tohle byl můj již asi třetí pokus o použití OTA a teprve tentokrát vyšel – je však třeba dodržet následující pravidla (pracuji na systému Windows 7 64, takže nevím, zda uvedené platí i pro ostatní OS).
- Používám Arduino IDE ve verzi 1.6.7, nainstalovanou ve variantě „portable“
- Verzi jádra pro ESP8266 používám Stable 2.0.0, nainstalovanou přes správce desek
- Poprvé je třeba nahrát skript přes sériové rozhraní. Po restartu modulu se spustí vše, co je potřebné pro běh OTA
- Vždy je třeba, aby bylo ESP8266 zapnuté dříve, než spustíme Arduino IDE, jinak se zařízení neobjeví v seznamu dostupných portů pro programování. Viděl jsem sice na internetu tvrzení, že se port časem objeví i pokud zapneme modul až po spuštění IDE, ale já jsem takové chování ještě nezaznamenal
Správně běžící OTA skript v modulu se projeví zobrazením v síťových portech v IDE.
Tímto jsem se sice zbavil softwareového problému sdílení sériového portu, ale při realizaci vyvstal problém jiný – kamerový modul nestačil „přetáhnout“ svým TXD výstupem výstup z CH340 i když byly oba odděleny odpory 470 ohmů a docházelo k chybám přenosu zejména na vyšších rychlostech (tohle je právě okamžik, kdy se projeví rozdíl v konstrukci mezi Wemos D1 mini a Witty).
Protože ale desku Witty ještě nemám, tak jsem zkusil sériový přenos prozatím realizovat přes knihovnu SoftwareSerial (jde mi zatím spíše o Proof-of-Concept nežli o finální realizaci). Výsledek je vidět na dalším obrázku:
Na obrázku je vidět webová stránka, servírovaná přímo modulem ESP8266. Fotografie je v rozlišení 640×480 (maximální, co „umí“ kamera), přenášená ve formátu JPEG. Výsledná velikost obrázku se pohybuje okolo 36kB a přenos trvá cca 48 sekund. Je to proto, že sériová rychlost komunikace s kamerou je 14400Bd díky použití SoftwareSerial. Sestava, použitá pro programování a pořízení fotografie vypadala takto:
Na stativu je obyčejnou gumičkou připevněna sestava kamery na nepájivém poli
a celek je pouze napájený USB nabíječkou od mobilního telefonu. Jak programování, tak pořizování snímků běží přes Wifi.
Na závěr přikládám zdrojový kód skriptu
… a modifikovanou knihovnu pro obsluhu kamery C328
Knihovnu WiFiConfig nepřikládám – je možné ji stáhnout z těchto stránek.
A opět opakuji – jedná se pouze o část většího projektu a spíš o ověření možností, než o hotový celek, přesto uvítám náměty…
Krásná práce, bych nevěřil, že to bude fungovat. Řeším podobnou věc, a potřeboval bych trochu nasměrovat:
mám esp8266-01 a chtěl bych po seriovém portu přijímat data z arduina, který by se zobrazovaly přes webserver a zároveň ovládat z webu arduino zase přes sériový port.
Mám něco podobnýho s arduinem a w5100, ale tady bych asi potřeboval nějakej tip.
A jak by měla vypadat ta webová stránka? Zkuste tohle https://petestechprojects.wordpress.com/2014/12/19/leds-control-through-esp8266-arduino-web-page/ a pokud to nebude stačit, tak vymyslíme něco dalšího…
Tohle je to co bych asi úplně nechtěl, je to sice nejjednodušší a je to skoro to stejný jako mám s w5100, jenom je tam pár AT příkazů pro spuštění esp, mě ale láká využít esp8266 s knihovnou pro konfiguraci a vnitřní webserver, kde bych zasílal z arduina data třeba ve formátu u 152, p 524, e 125225…. a zpracoval je v esp kde bude spuštěn webserver, a zase zpět by mi přicházelo zpracované http get třeba ve formátu u +, umax 250, pmax 450, off, on, a podobně, tohle v arduinu umím zpracovat, ale nevím jak s webserverem v esp8266.
Takhle bych to chtěl i pro to, že třeba někdo změní wifi síť, a bez přeprogramování je to mrtvý zařízení, navíc bych chtěl udělat pár kusů pro známý, a aby si to mohli sami nakonfigurovat (teda hlavně připojení k wifi)
Karel
PS. klidně mi tykej.
Ok. Zkusím něco vymyslet a načrtnout. Napíšu Ti nejspíš o víkendu něco mailem…
Pavel
dík moc.
Karel
Dobrý den,
mohu vás prosím požádat o kontakt.
Odeslán mailem…
To Karel:
Ono se dá inspirovat i https://www.xpablo.cz/?p=689
Já jsem to podle toho zbastlil.
Ale Pavlovo řešení by mě taky zajímalo. Šlo by to dát tady do komentáře?
Dík.
Udělám o tom teda článek… Aspoň budeme moct diskutovat.
Tak to je paráda. Já tím ovládám relátka. Ještě jsem se dozvěděl, že jde pro webové stránky jde použít i SPIFFS (SPI Flash File System), vnitřní filesystém.
Ano. Přesně s ním to bude. Akorat rychlost není nijak závratná…
Bojuji s OTA. Udělal jsem to (snad) podle Vašeho článku a částečný úspěch. (Napřed to hlásilo, že nemůže najít python, tak jsem zadal cestu do platform.txt c:\KiCad\bin\python.exe) a nahrávání se zahájí a pak zastaví. Když dám seriový monitor, tak na mě vyskočí okno Arduino IDE :“Zadejte přístupové heslo ke konzoli vývojové desky“
Co jsem přehlédnul?
Děkuji
Jejda. Beru dotaz nazpět. Tak to funguje jak má. Paráda. Program se nahrál a to rychle. Na sledování se doporučuje externí montitorovací program třeba http://www.compuphase.com/software_termite.htm
Díky za přínosný článek.
Tak wifi konfig ok, akorát bych potřeboval to tlačítko na gpio2 (mám esp8266-01 a port budu potřebovat) a nikde jsem nenašel jaké by to mělo být číslo pinu pro arduino ide….můžete někdo poradit?
No přímo na githubu Arduino ESP8266 je napsaný tohle:
Dobrý den, chci se zeptat, šla by na tohle použít stará webkamera?
Bohužel asi ne. Vyžaduje to sériový port a ne USB. Hledejte „serial jpeg camera“. Chystám článek s modernější verzí – snad bude na vánoce…
Dobře, děkuji.