diff --git a/WiFi/IPAddress.cpp b/WiFi/IPAddress.cpp new file mode 100644 index 000000000..610ff4c53 --- /dev/null +++ b/WiFi/IPAddress.cpp @@ -0,0 +1,44 @@ + +#include +#include + +IPAddress::IPAddress() +{ + memset(_address, 0, sizeof(_address)); +} + +IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) +{ + _address[0] = first_octet; + _address[1] = second_octet; + _address[2] = third_octet; + _address[3] = fourth_octet; +} + +IPAddress::IPAddress(uint32_t address) +{ + memcpy(_address, &address, sizeof(_address)); +} + +IPAddress::IPAddress(const uint8_t *address) +{ + memcpy(_address, address, sizeof(_address)); +} + +IPAddress& IPAddress::operator=(const uint8_t *address) +{ + memcpy(_address, address, sizeof(_address)); + return *this; +} + +IPAddress& IPAddress::operator=(uint32_t address) +{ + memcpy(_address, (const uint8_t *)&address, sizeof(_address)); + return *this; +} + +bool IPAddress::operator==(const uint8_t* addr) +{ + return memcmp(addr, _address, sizeof(_address)) == 0; +} + diff --git a/WiFi/IPAddress.h b/WiFi/IPAddress.h new file mode 100644 index 000000000..487e420bd --- /dev/null +++ b/WiFi/IPAddress.h @@ -0,0 +1,72 @@ +/* + * + * MIT License: + * Copyright (c) 2011 Adrian McEwen + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * adrianm@mcqn.com 1/1/2011 + */ + +#ifndef IPAddress_h +#define IPAddress_h + +// A class to make it easier to handle and pass around IP addresses + +class IPAddress { +private: + uint8_t _address[4]; // IPv4 address + // Access the raw byte array containing the address. Because this returns a pointer + // to the internal structure rather than a copy of the address this function should only + // be used when you know that the usage of the returned uint8_t* will be transient and not + // stored. + uint8_t* raw_address() { return _address; }; + +public: + // Constructors + IPAddress(); + IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); + IPAddress(uint32_t address); + IPAddress(const uint8_t *address); + + // Overloaded cast operator to allow IPAddress objects to be used where a pointer + // to a four-byte uint8_t array is expected + operator uint32_t() { return *((uint32_t*)_address); }; + bool operator==(const IPAddress& addr) { return (*((uint32_t*)_address)) == (*((uint32_t*)addr._address)); }; + bool operator==(const uint8_t* addr); + + // Overloaded index operator to allow getting and setting individual octets of the address + uint8_t operator[](int index) const { return _address[index]; }; + uint8_t& operator[](int index) { return _address[index]; }; + + // Overloaded copy operators to allow initialisation of IPAddress objects from other types + IPAddress& operator=(const uint8_t *address); + IPAddress& operator=(uint32_t address); + + friend class EthernetClass; + friend class UDP; + friend class Client; + friend class Server; + friend class DhcpClass; + friend class DNSClient; +}; + +const IPAddress INADDR_NONE(0,0,0,0); + + +#endif diff --git a/WiFi/examples/Wifi_Open_RSSI/Wifi_Open_RSSI.ino b/WiFi/examples/Wifi_Open_RSSI/Wifi_Open_RSSI.ino new file mode 100644 index 000000000..e0e8ee103 --- /dev/null +++ b/WiFi/examples/Wifi_Open_RSSI/Wifi_Open_RSSI.ino @@ -0,0 +1,50 @@ +/* + + Open connection using the WiFi shield. Attempts to connect + and prints out the signal strength. + + Circuit: + * WiFi shield attached + created 5 June 2011 + by Tom Igoe + */ +#include +#include + +char ssid[] = "yourNetwork"; // the name of your network +int status = WL_IDLE_STATUS; // the Wifi radio's status + + +byte mac[6]; // the MAC address of your Wifi shield +IPAddress ip; // the IP address of your shield + +void setup() { + // initialize serial: + Serial.begin(9600); + + // attempt to connect using WEP encryption: + Serial.println("Attempting to connect to open network..."); + status = WiFi.begin(ssid); + + Serial.print("SSID: "); + Serial.println(ssid); + + // if you're not connected, stop here: + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } +} + +void loop() { + // if you're connected, print out the signal strength: + if ( status != WL_CONNECTED) { + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("RSSI:"); + Serial.println(rssi); + delay(250); + } +} + + diff --git a/WiFi/examples/Wifi_Open_ScanNetworks/Wifi_Open_ScanNetworks.ino b/WiFi/examples/Wifi_Open_ScanNetworks/Wifi_Open_ScanNetworks.ino new file mode 100644 index 000000000..5a85b98a6 --- /dev/null +++ b/WiFi/examples/Wifi_Open_ScanNetworks/Wifi_Open_ScanNetworks.ino @@ -0,0 +1,155 @@ +/* + + Open connection using the WiFi shield. Attempts to connect + and prints out info about the network + + Circuit: + * WiFi shield attached + + created 13 July 2010 + by Domenico La Fauci + modified 5 June 2011 + by Tom Igoe + */ + + +#include +#include + +char ssid[] = "yourNetwork"; // the name of your network +int status = WL_IDLE_STATUS; // the Wifi radio's status + + +byte mac[6]; // the MAC address of your Wifi shield +IPAddress ip; // the IP address of your shield +IPAddress gateway; // the router's address +IPAddress subnet; // the subnet mask + +void setup() { + // initialize serial: + Serial.begin(9600); + + // attempt to connect using WEP encryption: + Serial.println("Attempting to connect to open network..."); + status = WiFi.begin(ssid); + + Serial.print("SSID: "); + Serial.println(ssid); + + // scan for existing networks: + Serial.println("Scanning available networks..."); + scanNetworks(); + + // if you're not connected, stop here: + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } + // if you are connected, print out info about the connection: + else { + printIpData(); + printCurrentNet(); + } +} + +void loop() { + // do nothing +} + +void printIpData() { + // print your WiFi shield's IP address: + ip = WiFi.localIP(); + Serial.print("IP: "); + Serial.print(ip[0]); + Serial.print("."); + Serial.print(ip[1]); + Serial.print("."); + Serial.print(ip[2]); + Serial.print("."); + Serial.println(ip[3]); + + // print your subnet mask: + subnet = WiFi.subnetMask(); + Serial.print("NETMASK: "); + Serial.print(subnet[0]); + Serial.print("."); + Serial.print(subnet[1]); + Serial.print("."); + Serial.print(subnet[2]); + Serial.print("."); + Serial.println(subnet[3]); + + // print your gateway address: + gateway = WiFi.gatewayIP(); + Serial.print("GATEWAY: "); + Serial.print(gateway[0]); + Serial.print("."); + Serial.print(gateway[1]); + Serial.print("."); + Serial.print(gateway[2]); + Serial.print("."); + Serial.println(gateway[3]); + + // print your MAC address: + WiFi.macAddress(mac); + Serial.print("MAC: "); + Serial.print(mac[5],HEX); + Serial.print(":"); + Serial.print(mac[4],HEX); + Serial.print(":"); + Serial.print(mac[3],HEX); + Serial.print(":"); + Serial.print(mac[2],HEX); + Serial.print(":"); + Serial.print(mac[1],HEX); + Serial.print(":"); + Serial.println(mac[0],HEX); +} + +void printCurrentNet() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print the MAC address of the router you're attached to: + byte bssid[6]; + WiFi.BSSID(bssid); + Serial.print("BSSID: "); + Serial.print(bssid[5],HEX); + Serial.print(":"); + Serial.print(bssid[4],HEX); + Serial.print(":"); + Serial.print(bssid[3],HEX); + Serial.print(":"); + Serial.print(bssid[2],HEX); + Serial.print(":"); + Serial.print(bssid[1],HEX); + Serial.print(":"); + Serial.println(bssid[0],HEX); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("RSSI:"); + Serial.println(rssi); + + // print the encryption type: + byte encryption = WiFi.encryptionType(); + Serial.print("Encryption Type:"); + Serial.println(encryption,HEX); +} + +void scanNetworks() { + // scan for nearby networks: + Serial.println("** Scan Networks **"); + byte numSsid = WiFi.scanNetworks(); + + // print the list of networks seen: + Serial.print("SSID List:"); + Serial.println(numSsid); + // print the network number and name for each network found: + for (int thisNet = 0; thisNet +#include + +char ssid[] = "yourNetwork"; // the name of your network +char keyIndex = 0; // WEP networks can have multiple keys. +char key[] = "BAE4B2EDB9171646AA0DC8ED19"; // the key you're using to connect +int status = WL_IDLE_STATUS; // the Wifi radio's status + + +byte mac[6]; // the MAC address of your Wifi shield +IPAddress ip; // the IP address of your shield +IPAddress gateway; // the router's address +IPAddress subnet; // the subnet mask + +void setup() { + // initialize serial: + Serial.begin(9600); + + // attempt to connect using WEP encryption: + Serial.println("Attempting to connect to WEP-128 network..."); + status = WiFi.begin(ssid, keyIndex, key); + + + Serial.print("SSID: "); + Serial.println(ssid); + + // scan for existing networks: + Serial.println("Scanning available networks..."); + scanNetworks(); + + // if you're not connected, stop here: + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } + // if you are connected, print out info about the connection: + else { + printIpData(); + printCurrentNet(); + } +} + +void loop() { + // do nothing +} + +void printIpData() { + // print your WiFi shield's IP address: + ip = WiFi.localIp(); + Serial.print("IP: "); + Serial.print(ip[3]); + Serial.print("."); + Serial.print(ip[2]); + Serial.print("."); + Serial.print(ip[1]); + Serial.print("."); + Serial.println(ip[0]); + + // print your subnet mask: + subnet = WiFi.subnetMask(); + Serial.print("NETMASK: "); + Serial.print(subnet[3]); + Serial.print("."); + Serial.print(subnet[2]); + Serial.print("."); + Serial.print(subnet[1]); + Serial.print("."); + Serial.println(subnet[0]); + + // print your gateway address: + gateway = WiFi.gatewayIP(); + Serial.print("GATEWAY: "); + Serial.print(gateway[3]); + Serial.print("."); + Serial.print(gateway[2]); + Serial.print("."); + Serial.print(gateway[1]); + Serial.print("."); + Serial.println(gateway[0]); + + // print your MAC address: + WiFi.macAddress(mac); + Serial.print("MAC: "); + Serial.print(mac[5],HEX); + Serial.print(":"); + Serial.print(mac[4],HEX); + Serial.print(":"); + Serial.print(mac[3],HEX); + Serial.print(":"); + Serial.print(mac[2],HEX); + Serial.print(":"); + Serial.print(mac[1],HEX); + Serial.print(":"); + Serial.println(mac[0],HEX); +} + +void printCurrentNet() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print the MAC address of the router you're attached to: + byte bssid[6]; + WiFi.BSSID(bssid); + Serial.print("BSSID: "); + Serial.print(bssid[5],HEX); + Serial.print(":"); + Serial.print(bssid[4],HEX); + Serial.print(":"); + Serial.print(bssid[3],HEX); + Serial.print(":"); + Serial.print(bssid[2],HEX); + Serial.print(":"); + Serial.print(bssid[1],HEX); + Serial.print(":"); + Serial.println(bssid[0],HEX); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("RSSI:"); + Serial.println(rssi); + + // print the encryption type: + byte encryption = WiFi.encryptionType(); + Serial.print("Encryption Type:"); + Serial.println(encryption,HEX); +} + +void scanNetworks() { + // scan for nearby networks: + Serial.println("** Scan Networks **"); + byte numSsid = WiFi.scanNetworks(); + + // print the list of networks seen: + Serial.print("SSID List:"); + Serial.println(numSsid); + // print the network number and name for each network found: + for (int thisNet = 0; thisNet +#include + +char ssid[] = "yourNetwork"; // the name of your network +char pass[] = "secretPassword"; // the WPA2 password for your network +int status = WL_IDLE_STATUS; // the Wifi radio's status + +// telnet defaults to port 23 +Server server(23); + +boolean gotAMessage = false; // whether or not you got a message from the client yet + +void setup() { + Serial.begin(9600); + Serial.println("Attempting to connect to WPA network..."); + Serial.print("SSID: "); + Serial.println(ssid); + + status = WiFi.begin(ssid, pass); + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } + else { + server.begin(); + Serial.print("Connected to wifi. My address:"); + IPAddress myAddress = WiFi.localIP(); + Serial.print(myAddress[0]); + Serial.print("."); + Serial.print(myAddress[1]); + Serial.print("."); + Serial.print(myAddress[2]); + Serial.print("."); + Serial.println(myAddress[3]); + } +} + +void loop() { + // wait for a new client: + Client client = server.available(); + + // when the client sends the first byte, say hello: + if (client) { + if (!gotAMessage) { + Serial.println("I have a new client"); + client.println("Hello, client!"); + gotAMessage = true; + } + // read the bytes incoming from the client: + char thisChar = client.read(); + // echo the bytes back to the client: + client.write(thisChar); + // echo the bytes to the server as well: + Serial.print(thisChar); + } +} + + + + diff --git a/WiFi/examples/Wifi_WPA_PachubeClientString/Wifi_WPA_PachubeClientString.ino b/WiFi/examples/Wifi_WPA_PachubeClientString/Wifi_WPA_PachubeClientString.ino new file mode 100644 index 000000000..227f43b9b --- /dev/null +++ b/WiFi/examples/Wifi_WPA_PachubeClientString/Wifi_WPA_PachubeClientString.ino @@ -0,0 +1,140 @@ +/* + Pachube sensor client with Strings + + This sketch connects an analog sensor to Pachube (http://www.pachube.com) + using an Arduino WiFi shield. + + This example uses the String library, which is part of the Arduino core from + version 0019. + + Circuit: + * Analog sensors attached to analog in 0 and 1 + * WoFo shield attached to pins 10, 11, 12, 13 + + created 15 March 2010 + updated 5 June 2011 + by Tom Igoe + + This code is in the public domain. + + */ + + +#include +#include + +char ssid[] = "yourNetwork"; +char pass[] = "secretPassword"; +int status = WL_IDLE_STATUS; + +// The address of the server you want to connect to (pachube.com): +IPAddress server(173,203,98,29); + +// initialize the library instance: +Client client; + +long lastConnectionTime = 0; // last time you connected to the server, in milliseconds +boolean lastConnected = false; // state of the connection last time through the main loop +const int postingInterval = 30000; //delay between updates to Pachube.com + +int startWiFiWpa() +{ + Serial.println("\nSetup WiFi Wpa..."); + //strcpy(ssid, "AndroidAP9647"); + strcpy(ssid, "tigoenet"); + Serial.print("SSID: "); + Serial.println(ssid); + const char *pass = "m30w-m30w"; + status = WiFi.begin(ssid, pass); + if ( status != WL_CONNECTED) + { + Serial.println("Connection Failed"); + } + return status; +} + + + +void setup() { + // start the WiFi connection and the server: + Serial.begin(9600); + Serial.println("*** Start WebClient WiFi example ***"); + + int _status = startWiFiWpa(); + if ( _status == WL_CONNECTED) + { + Serial.println("\nWiFi Connected."); + } + + delay(1000); +} + + +void loop() { + // read the analog sensor: + int sensorReading = analogRead(A0); + // convert the data to a String to send it: + String dataString = String(sensorReading); + + // you can append multiple readings to this String if your + // pachube feed is set up to handle multiple values: + int otherSensorReading = analogRead(A1); + dataString += ","; + dataString += String(otherSensorReading); + + // if there's incoming data from the net connection. + // send it out the serial port. This is for debugging + // purposes only: + if (client.available()) { + char c = client.read(); + Serial.print(c); + } + + // if there's no net connection, but there was one last time + // through the loop, then stop the client: + if (!client.connected() && lastConnected) { + Serial.println(); + Serial.println("disconnecting."); + client.stop(); + } + + // if you're not connected, and ten seconds have passed since + // your last connection, then connect again and send data: + if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { + sendData(dataString); + } + // store the state of the connection for next time through + // the loop: + lastConnected = client.connected(); +} + +// this method makes a HTTP connection to the server: +void sendData(String thisData) { + // if there's a successful connection: + if (client.connect(server, 80)) { + Serial.println("connecting..."); + // send the HTTP PUT request. + // fill in your feed address here: + client.print("PUT /api/YOUR_FEED_HERE.csv HTTP/1.1\n"); + client.print("Host: www.pachube.com\n"); + // fill in your Pachube API key here: + client.print("X-PachubeApiKey: YOUR_KEY_HERE\n"); + client.print("Content-Length: "); + client.println(thisData.length(), DEC); + + // last pieces of the HTTP PUT request: + client.print("Content-Type: text/csv\n"); + client.println("Connection: close\n"); + + // here's the actual content of the PUT request: + client.println(thisData); + + // note the time that the connection was made: + lastConnectionTime = millis(); + } + else { + // if you couldn't make a connection: + Serial.println("connection failed"); + } +} + diff --git a/WiFi/examples/Wifi_WPA_ScanNetworks/Wifi_WPA_ScanNetworks.ino b/WiFi/examples/Wifi_WPA_ScanNetworks/Wifi_WPA_ScanNetworks.ino new file mode 100644 index 000000000..0c3bbf9fb --- /dev/null +++ b/WiFi/examples/Wifi_WPA_ScanNetworks/Wifi_WPA_ScanNetworks.ino @@ -0,0 +1,167 @@ +/* + + WPA2 conection using the WiFi shield. Attempts to connect + and prints out info about the network + + Circuit: + * WiFi shield attached + + created 13 July 2010 + by Domenico La Fauci + modified 5 June 2011 + by Tom Igoe + */ + + +#include +#include + +char ssid[] = "yourNetwork"; // the name of your network +char pass[] = "secretPassword"; // the WPA2 password for your network + +int status = WL_IDLE_STATUS; // the Wifi radio's status + +byte mac[6]; // the MAC address of your Wifi shield +IPAddress ip; // the IP address of your shield +IPAddress gateway; // the router's address +IPAddress subnet; // the subnet mask + +void setup() { + // initialize serial: + Serial.begin(9600); + + // attempt to connect using WEP encryption: +// Serial.println("Attempting to connect to WEP-128 network..."); +// status = WiFi.begin(ssid, keyIndex, key); + + // attempt to connect using WPA2 encryption: + Serial.println("Attempting to connect to WPA network..."); + status = WiFi.begin(ssid, pass); + + + Serial.print("SSID: "); + Serial.println(ssid); + + // scan for existing networks: + Serial.println("Scanning available networks..."); + scanNetworks(); + + // if you're not connected, stop here: + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } + // if you are connected, print out info about the connection: + else { + printIpData(); + printCurrentNet(); + } +} + +void loop() { + // do nothing +} + +void printIpData() { + // print your WiFi shield's IP address: + ip = WiFi.localIP(); + Serial.print("IP: "); + Serial.print(ip[0]); + Serial.print("."); + Serial.print(ip[1]); + Serial.print("."); + Serial.print(ip[2]); + Serial.print("."); + Serial.println(ip[3]); + + // print your subnet mask: + subnet = WiFi.subnetMask(); + Serial.print("NETMASK: "); + Serial.print(subnet[0]); + Serial.print("."); + Serial.print(subnet[1]); + Serial.print("."); + Serial.print(subnet[2]); + Serial.print("."); + Serial.println(subnet[3]); + + // print your gateway address: + gateway = WiFi.gatewayIP(); + Serial.print("GATEWAY: "); + Serial.print(gateway[0]); + Serial.print("."); + Serial.print(gateway[1]); + Serial.print("."); + Serial.print(gateway[2]); + Serial.print("."); + Serial.println(gateway[3]); + + // print your MAC address: + WiFi.macAddress(mac); + Serial.print("MAC: "); + Serial.print(mac[5],HEX); + Serial.print(":"); + Serial.print(mac[4],HEX); + Serial.print(":"); + Serial.print(mac[3],HEX); + Serial.print(":"); + Serial.print(mac[2],HEX); + Serial.print(":"); + Serial.print(mac[1],HEX); + Serial.print(":"); + Serial.println(mac[0],HEX); +} + +void printCurrentNet() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print the MAC address of the router you're attached to: + byte bssid[6]; + WiFi.BSSID(bssid); + Serial.print("BSSID: "); + Serial.print(bssid[5],HEX); + Serial.print(":"); + Serial.print(bssid[4],HEX); + Serial.print(":"); + Serial.print(bssid[3],HEX); + Serial.print(":"); + Serial.print(bssid[2],HEX); + Serial.print(":"); + Serial.print(bssid[1],HEX); + Serial.print(":"); + Serial.println(bssid[0],HEX); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("RSSI:"); + Serial.println(rssi); + + // print the encryption type: + byte encryption = WiFi.encryptionType(); + Serial.print("Encryption Type:"); + Serial.println(encryption,HEX); +} + +void scanNetworks() { + // scan for nearby networks: + Serial.println("** Scan Networks **"); + byte numSsid = WiFi.scanNetworks(); + + // print the list of networks seen: + Serial.print("SSID List:"); + Serial.println(numSsid); + // print the network number and name for each network found: + for (int thisNet = 0; thisNetthis is a tweet + + This example uses the String library, which is part of the Arduino core from + version 0019. + + Circuit: + * WiFi shield attached to pins 10, 11, 12, 13 + + created 21 May 2011 + by Tom Igoe + + This code is in the public domain. + + */ +#include +#include + +char ssid[] = "yourNetwork"; +char pass[] = "secretpassword"; +int status = WL_IDLE_STATUS; + +// initialize the library instance: +Client client; + +const int requestInterval = 30*1000; // delay between requests; 30 seconds + +IPAddress server(199,59,149,200); // api.twitter.com + +boolean requested; // whether you've made a request since connecting +long lastAttemptTime = 0; // last time you connected to the server, in milliseconds + +String currentLine = ""; // string to hold the text from server +String tweet = ""; // string to hold the tweet +boolean readingTweet = false; // if you're currently reading the tweet + +void setup() { + // reserve space for the strings: + currentLine.reserve(256); + tweet.reserve(150); + // initialize serial: + Serial.begin(9600); + Serial.println("Attempting to connect to WPA network..."); + Serial.print("SSID: "); + Serial.println(ssid); + + status = WiFi.begin(ssid, pass); + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } + else { + Serial.println("Connected to wifi"); + connectToServer(); + } +} + + + +void loop() +{ + if (client.connected()) { + if (client.available()) { + // read incoming bytes: + char inChar = client.read(); + + // add incoming byte to end of line: + currentLine += inChar; + + // if you get a newline, clear the line: + if (inChar == '\n') { + currentLine = ""; + } + // if the current line ends with , it will + // be followed by the tweet: + if ( currentLine.endsWith("")) { + // tweet is beginning. Clear the tweet string: + readingTweet = true; + tweet = ""; + } + // if you're currently reading the bytes of a tweet, + // add them to the tweet String: + if (readingTweet) { + if (inChar != '<') { + tweet += inChar; + } + else { + // if you got a "<" character, + // you've reached the end of the tweet: + readingTweet = false; + Serial.println(tweet); + // close the connection to the server: + client.stop(); + } + } + } + } + else if (millis() - lastAttemptTime > requestInterval) { + // if you're not connected, and two minutes have passed since + // your last connection, then attempt to connect again: + connectToServer(); + } +} + +void connectToServer() { + // attempt to connect, and wait a millisecond: + Serial.println("connecting to server..."); + if (client.connect(server, 80)) { + Serial.println("making HTTP request..."); + // make HTTP GET request to twitter: + client.println("GET /1/statuses/user_timeline.xml?screen_name=arduinoteam HTTP/1.1"); + client.println("HOST: api.twitter.com"); + client.println(); + } + // note the time of this connect attempt: + lastAttemptTime = millis(); +} + diff --git a/WiFi/examples/Wifi_WPA_WebClient/Wifi_WPA_WebClient.ino b/WiFi/examples/Wifi_WPA_WebClient/Wifi_WPA_WebClient.ino new file mode 100644 index 000000000..5e1bd277b --- /dev/null +++ b/WiFi/examples/Wifi_WPA_WebClient/Wifi_WPA_WebClient.ino @@ -0,0 +1,77 @@ + +/* + Web client + + This sketch connects to a website (http://www.google.com) + using a WiFi shield. + + Circuit: + * WiFi shield attached + + created 13 July 2010 + by Domenico La Fauci + modified 21 May 2011 + by Tom Igoe + */ + + +#include +#include +#include + +char ssid[] = "yourNetwork"; +char pass[] = "secretPassword"; +int status = WL_IDLE_STATUS; +IPAddress server(74,125,115,105); // Google + +// Initialize the Ethernet client library +// with the IP address and port of the server +// that you want to connect to (port 80 is default for HTTP): +Client client; + +void setup() { + Serial.begin(9600); + Serial.println("Attempting to connect to WPA network..."); + Serial.print("SSID: "); + Serial.println(ssid); + + status = WiFi.begin(ssid, pass); + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + // don't do anything else: + while(true); + } + else { + Serial.println("Connected to wifi"); + Serial.println("\nStarting connection..."); + // if you get a connection, report back via serial: + if (client.connect(server, 80)) { + Serial.println("connected"); + // Make a HTTP request: + client.println("GET /search?q=arduino HTTP/1.0"); + client.println(); + } + } +} + +void loop() { + // if there are incoming bytes available + // from the server, read them and print them: + if (client.available()) { + char c = client.read(); + Serial.print(c); + } + + // if the server's disconnected, stop the client: + if (!client.connected()) { + Serial.println(); + Serial.println("disconnecting."); + client.stop(); + + // do nothing forevermore: + for(;;) + ; + } +} + + diff --git a/WiFi/examples/Wifi_WPA_WebServer/Wifi_WPA_WebServer.ino b/WiFi/examples/Wifi_WPA_WebServer/Wifi_WPA_WebServer.ino new file mode 100644 index 000000000..9f121ad0b --- /dev/null +++ b/WiFi/examples/Wifi_WPA_WebServer/Wifi_WPA_WebServer.ino @@ -0,0 +1,100 @@ +/* + Web Server + + A simple web server that shows the value of the analog input pins. + using a WiFi shield. + + Circuit: + * WiFi shield attached + * Analog inputs attached to pins A0 through A5 (optional) + + created 13 July 2010 + by Domenico La Fauci + modified 5 June 2011 + by Tom Igoe + */ + + +#include +#include + +char ssid[] = "yourNetwork"; +char pass[] = "secretpassword"; +int status = WL_IDLE_STATUS; + +Server server(80); + +void setup() { + // initialize serial: + Serial.begin(9600); + Serial.println("Attempting to connect to WPA network..."); + Serial.print("SSID: "); + Serial.println(ssid); + + status = WiFi.begin(ssid, pass); + if ( status != WL_CONNECTED) { + Serial.println("Couldn't get a wifi connection"); + while(true); + } + else { + server.begin(); + Serial.print("Connected to wifi. My address:"); + IPAddress myAddress = WiFi.localIp(); + Serial.print(myAddress[0]); + Serial.print("."); + Serial.print(myAddress[1]); + Serial.print("."); + Serial.print(myAddress[2]); + Serial.print("."); + Serial.println(myAddress[3]); + } +} + + +void loop() { + // listen for incoming clients + Client client = server.available(); + if (client) { + // an http request ends with a blank line + boolean currentLineIsBlank = true; + while (client.connected()) { + if (client.available()) { + char c = client.read(); + // if you've gotten to the end of the line (received a newline + // character) and the line is blank, the http request has ended, + // so you can send a reply + if (c == '\n' && currentLineIsBlank) { + // send a standard http response header + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: text/html"); + client.println(); + client.println(""); + // output the value of each analog input pin + for (int analogChannel = 0; analogChannel < 6; analogChannel++) { + client.print("analog input "); + client.print(analogChannel); + client.print(" is "); + client.print(analogRead(analogChannel)); + client.println("
"); + } + client.println(""); + break; + } + if (c == '\n') { + // you're starting a new line + currentLineIsBlank = true; + } + else if (c != '\r') { + // you've gotten a character on the current line + currentLineIsBlank = false; + } + } + } + // give the web browser time to receive the data + delay(1); + // close the connection: + client.stop(); + } +} + +