Arduino Ethernet Shield
Arduino + Ethernet
Twittering plant
Capabilities
★Wiznet W5100 ethernet chip★Client★Server★TCP★UDP★Four channels
The Ethernet library
★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
Ethernet limitations
★DHCP needs 3rd-party library★No DNS★DIY for high-level protocols (no HTTP library, etc) - lots of print() statements★Library memory footprint
Practical 1: on the network
Practical 1: on the network
Example file:ChatServer
Configuration
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);
Talking HTTP
Talking HTTP
$ curl -v http://www.example.com
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)
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 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
Talking HTTP: the document
$ 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>..........
The most important bits
> GET / HTTP/1.1> Host: www.example.com> < HTTP/1.1 200 OK< Content-Type: text/html; charset=UTF-8< <HTML>..........
Practical 2: retrieving data
Practical 2: retrieving data
Example file:WebClient
Web APIs
★It’s just HTTP★At least, the good ones are
Web API challenges
★HTTPS★Crypto (e.g. OAuth)★XML parsing★JSON parsing★Large documents
Practical 3: serving data
Practical 3: serving data
Example file:WebServer