ESP8266 + C328R aneb WiFi (still) kamerka snadno a rychle

IMG_9637_webV 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.IMG_9634_web

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.

D1C328_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:

D1C328_Foto

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:

IMG_9635_web

Na stativu je obyčejnou gumičkou připevněna sestava kamery na nepájivém poli

IMG_9636_web

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

D1C328 (2.3 KiB, 407 downloads)

… a modifikovanou knihovnu pro obsluhu kamery C328

CameraC328R (6.4 KiB, 407 downloads)

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…

D1C328
D1C328
D1C328.zip
2.3 KiB
407 Downloads
Details
CameraC328R
CameraC328R
CameraC328R.zip
6.4 KiB
407 Downloads
Details

18 thoughts on “ESP8266 + C328R aneb WiFi (still) kamerka snadno a rychle”

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

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

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

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

  5. 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?

    1. No přímo na githubu Arduino ESP8266 je napsaný tohle:

      Pin numbers in Arduino correspond directly to the ESP8266 GPIO pin numbers. pinMode, digitalRead, and digitalWrite functions work as usual, so to read GPIO2, call digitalRead(2).

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *