Arduino Ethernet Shield
Arduino + Ethernet
Twittering plant
★Wiznet W5100 ethernet chip
★Client
★Server
★TCP
★UDP
★Four channels



Capabilities
★All looks like a serial port


★Ethernet: initialise network
★Client: connect to a port on a
server, then read() and write()
★Server: waits for a connection
on a port

The Ethernet library
★DHCP needs 3rd-party library
★No DNS
★DIY for high-level protocols
(no HTTP library, etc) - lots of
print() statements
★Library memory footprint



Ethernet limitations
Practical 1: on the network
Example file:
         ChatServer



Practical 1: on the network
byte   mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,
0xED   };
byte   ip[] = { 10, 0, 0, 177 };
byte   gateway[] = { 10, 0, 0, 1 };
byte   subnet[] = { 255, 255, 0, 0 };

...

Ethernet.begin(mac,ip,gateway,subnet);




Configuration
Talking HTTP
$ curl -v http://www.example.com




Talking HTTP
$ curl -v http://www.example.com
* About to connect() to www.example.com port 80 (#0)
*   Trying 208.77.188.166... connected
* Connected to www.example.com (208.77.188.166) port 80 (#0)




Talking HTTP: the request
$   curl -v http://www.example.com
*   About to connect() to www.example.com port 80 (#0)
*     Trying 208.77.188.166... connected
*   Connected to www.example.com (208.77.188.166) port 80 (#0)
>   GET / HTTP/1.1
>   User-Agent: curl/7.16.3
>   Host: www.example.com
>   Accept: */*
>




Talking HTTP: the request
$   curl -v http://www.example.com
*   About to connect() to www.example.com port 80 (#0)
*     Trying 208.77.188.166... connected
*   Connected to www.example.com (208.77.188.166) port 80 (#0)
>   GET / HTTP/1.1
>   User-Agent: curl/7.16.3
>   Host: www.example.com
>   Accept: */*
>
<   HTTP/1.1 200 OK
<   Date: Sun, 16 Aug 2009 16:05:42 GMT
<   Server: Apache/2.2.3 (Red Hat)
<   Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT
<   ETag: "b80f4-1b6-80bfd280"
<   Accept-Ranges: bytes
<   Content-Length: 438
<   Connection: close
<   Content-Type: text/html; charset=UTF-8




Talking HTTP: the response
$ curl -v http://www.example.com
* About to connect() to www.example.com port 80 (#0)
*   Trying 208.77.188.166... connected
* Connected to www.example.com (208.77.188.166) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.16.3
> Host: www.example.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 16 Aug 2009 16:05:42 GMT
< Server: Apache/2.2.3 (Red Hat)
< Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT
< ETag: "b80f4-1b6-80bfd280"
< Accept-Ranges: bytes
< Content-Length: 438
< Connection: close
< Content-Type: text/html; charset=UTF-8
<
<HTML>
..........



Talking HTTP: the document
> GET / HTTP/1.1
> Host: www.example.com
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
<
<HTML>
..........




The most important bits
Practical 2: retrieving data
Example file:
         WebClient



Practical 2: retrieving data
★It’s just HTTP
★At least, the good ones are




Web APIs
★HTTPS
★Crypto (e.g. OAuth)
★XML parsing
★JSON parsing
★Large documents




Web API challenges
Practical 3: serving data
Example file:
         WebServer



Practical 3: serving data

Ethernet Shield

  • 1.
  • 2.
  • 3.
  • 4.
    ★Wiznet W5100 ethernetchip ★Client ★Server ★TCP ★UDP ★Four channels Capabilities
  • 5.
    ★All looks likea serial port ★Ethernet: initialise network ★Client: connect to a port on a server, then read() and write() ★Server: waits for a connection on a port The Ethernet library
  • 6.
    ★DHCP needs 3rd-partylibrary ★No DNS ★DIY for high-level protocols (no HTTP library, etc) - lots of print() statements ★Library memory footprint Ethernet limitations
  • 7.
    Practical 1: onthe network
  • 8.
    Example file: ChatServer Practical 1: on the network
  • 9.
    byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; byte gateway[] = { 10, 0, 0, 1 }; byte subnet[] = { 255, 255, 0, 0 }; ... Ethernet.begin(mac,ip,gateway,subnet); Configuration
  • 10.
  • 11.
    $ curl -vhttp://www.example.com Talking HTTP
  • 12.
    $ curl -vhttp://www.example.com * About to connect() to www.example.com port 80 (#0) * Trying 208.77.188.166... connected * Connected to www.example.com (208.77.188.166) port 80 (#0) Talking HTTP: the request
  • 13.
    $ curl -v http://www.example.com * About to connect() to www.example.com port 80 (#0) * Trying 208.77.188.166... connected * Connected to www.example.com (208.77.188.166) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.16.3 > Host: www.example.com > Accept: */* > Talking HTTP: the request
  • 14.
    $ curl -v http://www.example.com * About to connect() to www.example.com port 80 (#0) * Trying 208.77.188.166... connected * Connected to www.example.com (208.77.188.166) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.16.3 > Host: www.example.com > Accept: */* > < HTTP/1.1 200 OK < Date: Sun, 16 Aug 2009 16:05:42 GMT < Server: Apache/2.2.3 (Red Hat) < Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT < ETag: "b80f4-1b6-80bfd280" < Accept-Ranges: bytes < Content-Length: 438 < Connection: close < Content-Type: text/html; charset=UTF-8 Talking HTTP: the response
  • 15.
    $ curl -vhttp://www.example.com * About to connect() to www.example.com port 80 (#0) * Trying 208.77.188.166... connected * Connected to www.example.com (208.77.188.166) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.16.3 > Host: www.example.com > Accept: */* > < HTTP/1.1 200 OK < Date: Sun, 16 Aug 2009 16:05:42 GMT < Server: Apache/2.2.3 (Red Hat) < Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT < ETag: "b80f4-1b6-80bfd280" < Accept-Ranges: bytes < Content-Length: 438 < Connection: close < Content-Type: text/html; charset=UTF-8 < <HTML> .......... Talking HTTP: the document
  • 16.
    > GET /HTTP/1.1 > Host: www.example.com > < HTTP/1.1 200 OK < Content-Type: text/html; charset=UTF-8 < <HTML> .......... The most important bits
  • 17.
  • 18.
    Example file: WebClient Practical 2: retrieving data
  • 19.
    ★It’s just HTTP ★Atleast, the good ones are Web APIs
  • 20.
    ★HTTPS ★Crypto (e.g. OAuth) ★XMLparsing ★JSON parsing ★Large documents Web API challenges
  • 21.
  • 22.
    Example file: WebServer Practical 3: serving data