Heleď zrovna pracuji na podobném zařízení a abych se tedy podělil o své poznatky.
Můj cíl je za co nejméně peněz sledovat teploty v celém domě z webu a zároveň z webu ovládat cokoli.
Tak že, jsem koupil Arduino Pro mini (převodníku mi tu leží kopa) jako mozek, dále jsem potřeboval to připojení k netu, nejlevnější variantou je ethernetový modul s ENC28J60 takže jsem ho objednal a všechno hezky pozapojoval.
Původně jsem si myslel že z Arduina udělám web server, hodnoty čidel budu ukládat na sd karu (modul jsem si vyrobil je tam pouze slot a jednoduchá logika resp. napětový dělič) a stavy pro výstup budou v nějakém configu také na té kartě.
Postupem času, při programování jsem začal vnímat jisté problémy, ENC28J60 není zrovna žádný master ethernet chip takže pokud vytvoříte více připojení k tomuto Arduino servříku, tak se z toho tento chip posere (stačí mít otevřených víc oken s danou stránkou), další problém začal být s tím že musíte v kodu vytvorit danou html stranku (omezeno jen na html) a tudiz tam fakt neudelate zadny krasny webovy rozhraní, ne kvuli omezeni na html ale kvuli nedostatku pameti Arduina. Ano šlo by mít tu html na té sd kartě ale čím více budeme chtít po procáku tím víc nás nebude mít rád.
Zkrátka Arduino jako server není to právé ořechové.
Jiná věc je udělat z něj klienta a jako server použít pc což se mi sakra osvědčilo, server s apachem mám už léta takže jsem nemusel nic řešit.
Řešení které tedy používám je tedy Arduino jako tcp klient a hardwarový prostředník, a pc jako to rozhraní pro přístup z webu.
No a šlape to asi tak že arduino v setup automaticky nastaví ethernet díky DHCP. V loopu si vyžádá hodnotu z 1. čidla , dále vytvoří connect na server a pomocí GET předá hodnotu serveru, který při zpracováváni php zároveň hodnotu uloží do mysql databáze. Dále se proces opakuje pro libovolný počet čidel. To byly čidla. A co spínání, no je to podobné vitvořím connect na server, script v php mi načte bud 1 nebo 0 (tyto hodnoty mam prozatim v jednoduchym txt ale prdnu je taky do mysql db), Arduino si tuto hodnotu vezme a podle toho jakou dostane udela bud OUTPUT HIGH nebo LOW. Duino samozdřejmě neovládá jen jeden výstup takže ta hodnota co duino dostává není jen 1 nebo 0 ale je to treba 1111 pro ctyri vystupy. No a po nákém delay se proces opakuje.
Toto řešení se mi osvědčilo převážne pro to že výkon Arduina na to v klidu stačí, jelikož si rozděluje práci se serverem, také je super že hodnoty nejsou jen v paměti takže při výpadku proudu si je znovu načtem ze serveru.Další věcí je že díky klasickýmu web serveru můžete udělat krásné uřivatelské rozhraní které ošetříte heslem a můžete tam být třeba celá rodina a arduinu to bude jedno což by tak nebylo kdyby bylo serverem.Avšak má to i úskalí změna stavu se projeví až po nastaveném delay které ale může být téměř nulové. Dalším úskalím je mít ten server.
Omlouvám se že to tu píšu jako mongol, novinář ze mě nikdy nebude, ale věřím že vám to bude alespoň trochu užitečné. Pokud by byl zájem není problém o tom pohovořit například pomocí skype nebo mě kontaktovat na
david.smejkal@atlas.cz , jsem ochoten nabídnout i zdrojáky jak pro Duino tak pro server.