9

Ethernet modul HR911105A – server

Budeme ovládat LED diody přes internet pomocí Ethernet Shieldu nebo Ethernet modulu.

Potřebujemerj45

  • Propojovací kabel UTP (RJ45)
  • Zdířku, do které zapojíme kabel (router)
  • Propojovací vodiče
  • modul HR911105A
  • Arduino Uno či jiné

Knihovny

Pro správné fungování si stáhněte .zip se dvěma knihovnami.

Stáhnout

Zapojení

HR911105A modul Arduino deska
PIN CS PIN 10
PIN SI (nebo ST) PIN 11
PIN SO PIN 12
PIN SCK PIN 13
PIN VCC PIN 5V nebo 3,3V
PIN GND PIN GND

 

P50501-105310P50501-105209

Po zapojení musí modul svítit oranžově!

Zdrojový kód – Zkouška

// Jednoduché otestování funkčnosti

[sourcecode language=“plain“]
// jednoduchá zkouška funkčnosti

#include "etherShield.h"
#include "ETHER_28J60.h"

// definování MAC adresy
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {192, 168, 1, 20}; //nastavení IP adresy, kde se nám zobrazí výsledek
static uint16_t port = 80; // Standardní port HTTP

ETHER_28J60 ethernet;

void setup()
{
ethernet.setup(mac, ip, port);
}

void loop()
{
if (ethernet.serviceRequest())
{
ethernet.print("<H1>Gratuluji, protože ti to funguje!</H1>");
ethernet.respond();
}
delay(100);
}
[/sourcecode]

Nyní si do prohlížeče internetu napíšeme http://192.168.1.20/ a musí se nám objevit:

Gratuluji, protože ti to funguje!

Upozorňuji, že to funguje pouze z naší lokální sítě! Pokud máte veřejnou IP adresu, tak můžete arduino ovládat z celého internetu, ale bude potřeba si přenastavit router.

HTML

V kódu můžete vidět

[sourcecode language=“plain“]ethernet.print("<H1>Gratuluji, protože ti to funguje!</H1>");[/sourcecode]

to h1 jsou tagy jazyka HTML, návod na něj naleznete zde.

Pojmy

MAC ADRESA

Mělo by se jednat o unikátní adresu přidělenou výrobcem zařízení, ale my takovou žádnou nemáme, a tak by bylo nejlepší použít adresu nějaké staré vyřazené síťové karty. Nebo si ji prostě vymyslíme.

IP ADRESA

Zjistíte ji spuštěním cmd a napsáním ipconfig /all 

 

OVLÁDÁNÍ LED DIOD Z PROHLÍŽEČE – SERVER

Zapojil jsem si dvě velké led diody (bílá a oranžová) na piny A0 a A5 (můžete použít i jiné piny samozřejmě, nemusí to být analogové). Důležité mít před diodou předřadný rezistor, jak vypočítat.

[sourcecode language=“plain“]

#include "etherShield.h"
#include "ETHER_28J60.h"

int oran = A0; //PROMĚNNÁ PINU A0 – ORANŽOVÁ LED
int bil = A5;//PROMĚNNÁ PINU A5 – BÍLÁ LED
// definování MAC adresy
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {192, 168, 1, 20}; //nastavení IP adresy, kde se nám zobrazí výsledek
static uint16_t port = 80; // Standardní port HTTP
ETHER_28J60 e;

void setup()
{
e.setup(mac, ip, port);
pinMode(oran, OUTPUT); //označení pinu, že je výstupní, připojena k ní oranžová led přes rezistor
pinMode(bil, OUTPUT); //označení pinu, že je výstupní, připojena k ní bílá led přes rezistor
}

void loop()
{
char* params;
if (params = e.serviceRequest())
{
e.print("<center><H1 >OVLÁDÁNÍ LED DIOD</H1>"); //začátek HTML KODU
e.print("<H2>ORANZOVÁ LED</H2>");
e.print("<A HREF=‘?cmd=zapnutaoranzova‘>ZAPNOUT</A><br>");
e.print("<A HREF=‘?cmd=vypnutaoranzova‘>VYPNOUT </A><br>");
e.print("STAV: ");
if (strcmp(params, "?cmd=zapnutaoranzova") == 0)
{
digitalWrite(oran, HIGH);
e.print("ZAPNUTÁ ");
}
else if (strcmp(params, "?cmd=vypnutaoranzova") == 0)
{
digitalWrite(oran, LOW);
e.print("VYPNUTÁ ");

}

e.print("<H2>BÍLÁ LED</H2>");
e.print("<A HREF=‘?cmd=zapnutabila‘>ZAPNOUT </A><br>");
e.print("<A HREF=‘?cmd=vypnutabila‘>VYPNOUT </A><br>");
e.print("STAV: ");
if (strcmp(params, "?cmd=zapnutabila") == 0)
{
digitalWrite(bil, HIGH);
e.print("ZAPNUTÁ ");
}
else if (strcmp(params, "?cmd=vypnutabila") == 0)
{
digitalWrite(bil, LOW);
e.print("VYPNUTÁ</center>");

}
e.respond();
}
}
[/sourcecode]

P50501-105301

NÁHLED

 

P50501-104837

Pozor: nesmíte psát háčky v HTML

Samozřejmě. že je také možné modul použít jako client a napojit si arduino na nějakou vlastní webovou stránku, tím pádem byste poté měli být schopni ovládat arduino projekty z jakéhokoliv místa s internetem.

Existuje mnoho free hostingů, kde vám dají i doménu třetího řádu zdarma. Můžete si také koupit vlastni doménu druhého řádu, ve formátu www.arduino-rozhrani.cz , cena se pohybuje okolo 200 Kč za rok.

P50501-105201

Arduino Uno, Mega, Senzory, Moduly za

VÝHODNOU CENU

Adam Gajdečka

Vytvářím návody pro Arduino, skvěle se orientuji v IT a označuji se za geeka. Miluji nové technologie, protože jsou úžasné. Budu rád, když můj malý magazín o Arduinu podpoříte! Děkuji moc, jste skvělí

  1. Nechápu jednu věc… proč každej ardujínista tomu říká „modul HR911105A“… přitom, krucinál, HR911105A je typ toho ETH konektoru…

  2. Po dlouhém boji s ethernet modulem ENC28J60 přidám pár cenných zkušeností:
    – Dle mého názoru nejlepší knihovna je UIPEthernet, kterou stvořil Norbert Truchsess. Ke stažení zde: https://github.com/ntruchsess/arduino_uip
    – HW modul v sobě nemá žádné vlastní zpracování paketů, takže vše co dorazí po síti musí zpracovat Arduino = potřeba velkého bufferu a strojového času
    – Protože vše ze sítě musí zpracovat Arduino, znamená to, že nějaké volání ethernet funkce musí být prováděno co nejčastěji v hlavní loop smyčce programu (např. if(client.available()….). Automaticky se při tom provede i zpracování dat která mezitím přišla po síti.
    – Bohužel i tak je rychlost zpracování příchozích paketů velmi malá a i po dlouhé konfiguraci knihovny a „tunningu“ bývá provoz na středně velké lokální síti tak hustý (hlavně díky broadcastům), že se spojení buď vůbec nedaří a nebo se povede třeba až na padesátý nebo stopadesátý pokus a pak zase nic.
    – A ještě jedna důležitá věc – modul má dost vysokou spotřebu (přes 300 mA) a vyžaduje tvrdší zdroj a spolehlivé napájení. Při napájení z desky Arduina jsem měl problémy a rozhodně doporučuji samostatné napájení (vlastní napájecí větev)

    Moje doporučení:
    Používat dražší moduly s čipem W5100, který sám zpracovává základní vrstvu ethernetu. Pokud se ale přeci jenom vydáte cestou levných modulů s ENC28J60, tak je dobré připojit a programově ovládat i reset pin na modulu při jeho inicializaci. U lokální sítě s větším provozem je řešení „schovat“ zařízení za nějaký router, který bude tvořit filtr mezi broadcastovým provozem v LAN a k arduino zařízení propustí jenom jemu konkrétně určené pakety. Řešení je to sice nešikovné, ale funkční. Moje zkušenost je taková, že modul připojený přímo do LAN se nepřipojil ani jednou z 500 pokusů. Po umístění za firewall a filtraci paketů se úspěšnost pohybuje téměř na 100%.

  3. Jo kéž by to spravily pouhé hodiny, nebo dny. Já jsem ladil web klient aplikaci měsíce a když to tak zrekapituluji zpětně, tak prakticky více než rok :-(
    Mezi tím klesly ceny a tak jsem zkusil místo „občas nespolehlivého“ ENC28J60 zakoupit W5100. Vidina použití daleko chytřejšího čipu, který spoustu datových záležitostí řeší sám na HW úrovni mě tuze lákala. Bohužel po prvních zkouškách přišlo rychlé vystřízlivění.
    Mnohem dražší čip nepřináší kromě malé úspory flash paměti atmela prakticky nic navíc a to bohužel ani spolehlivost :-(
    Teď už je mi jasné, proč se vyskytuje spousta článků o arduino ethernetu ve stylu školního příkladu a jenom velmi málo článků lidí, kteří dotáhli nějaký ethernet projekt až do úspěšného dlouhodobého nasazení v praxi.

  4. Po dlouhém zkoušení jsem pro ethernet čip ENC28J60 dal přednost knihovně UIPEthernet, kterou stvořil Norbert Truchsess. Ale až její nyní poslední verze 1.09 je opravdu stabilní a vhodná pro aplikace 24h x 365dnů. S touto knihovnou provozuji nonstop upload meteorologických dat na web už 9 měsíců nonstop bez problémů :-)

    • Jsi nejlepší komentátor webu! :-) Díky. S tímto modulem jsem měl dost problémů to nějak rozchodit. Chtěl jsem ještě napsat návod na klient, ale to se mi nepodařilo a štvát se tím hodiny se mi nechtělo :-)

      • Pardon, můj poslední příspěvek (nyní nahoře) měl být reakce na tento.

Napsat komentář

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