========
Het doel van dit project is om een Twitter-account te verzenden
toelichting op de deur van uw kantoor, die is uitgerust met een 20 x 4 LCD
(weergeven). Dit project vormt in principe een implementatie van
het idee besproken in dit artikel IEEE Spectrum:
http://spectrum.IEEE.org/Geek-Life/hands-on/Send-a-tweet-to-your-Office-door
Als toebehoren toont het ook de huidige temperatuur (Lees in
uit weather.gov) op een bepaalde locatie. De implementatie is gebaseerd op
de combinatie van een Arduino Uno-board met een Arduino Ethernet
Schild. De totale kosten is ongeveer $120. Er wordt van uitgegaan dat u
zijn vertrouwd met Arduino tools.
Hardware en software
=====================
Hardware
--------
$45.95 - Arduino Ethernet Shield: http://www.sparkfun.com/products/9026
$29.95 - Arduino Uno: http://www.sparkfun.com/products/9950
$14.95 - 20 x 4 LCD wit op blauw: http://www.hacktronics.com/LCDs/20-x-4-LCD-White-on-Blue/flypage.tpl.html (kon krijgen van de sparkfun.com te minimaliseren verzendkosten vergelijkbaar)
$11,95 - Arduino Project behuizing: http://www.sparkfun.com/products/10088 (host voor zowel de Raad van bestuur en het schild)
$3.95 - USB-kabel A naar B - 6 voet: http://www.sparkfun.com/products/512 (optioneel; u moet al een hebt)
$2.99 - 9 6FT dirigent 24 AWG strandde afgeschermd: http://www.frys.com/product/3550794?site=sr:SEARCH:MAIN_RSLT_PG (om hook-up de LCD display aan de Raad)
$2.99 - 3 FT CAT6 patchkabel: http://www.frys.com/product/5979924?site=sr:SEARCH:MAIN_RSLT_PG (om hook-up het bord naar uw Internet-router)
$1.90 - 6 pin rechte hoek vrouwelijke Header: http://www.sparkfun.com/products/9429 (twee van hen, voor aansluiting van de LCD)
$1.90 - vak van het project: http://www.futurlec.com/ProjectBoxes.shtml (voor weergave)
--------------
$116.53 - TOTAAL
Software
--------
--Arduino sketch: opgenomen aan het einde van dit instructable. De schets
moet worden gewijzigd om te voldoen aan uw individuele specificaties. Het bevat
opmerkingen met een beschrijving van elke wijziging en hoe het kan worden gedaan.
--U zult moeten compileren en laden de schets op het bord met Arduino tools: http://arduino.cc/en/Main/Software
Om te kunnen om het te compileren moet u ook de volgende bibliotheken voor uw Arduino tools:
--Arduino EthernetDHCP: http://gkaindl.com/software/arduino-ethernet/dhcp
--Tekst Finder bibliotheek: http://www.arduino.cc/playground/Code/TextFinder
Arduino schets: bzdoor2lcd.pde
------------------------------
Get "geselecteerd" laatste tweet van Twitter-account "BZDoor" en weer te geven op de
LCD vertoning, die ik op de deur van mijn kantoor vast heb. Door geselecteerd ik bedoel dat tweets
begin met de toets "BZD" alleen. Ik gebruik de Twitter-account om notities posten op mijn
deur van de Office over kantooruren, wordt uit voor koffie, etc. :-)
//
Het circuit:
LCD 1,3,5,16 aan digitale pin van de Arduino GND pinnen
LCD pin 2 naar digitale pin van de Arduino + 5V
LCD pin 15 via weerstand 330 Ohm digitale pin van de Arduino + 5V
LCD pin 14 tot en met Arduino digitale pin 2
LCD pin 13 tot en met Arduino digitale pin 3
LCD pin 12 aan Arduino digitale pin 4
LCD pin 11 tot en met Arduino digitale pin 5
LCD pin 4 tot en met Arduino digitale pin 9
LCD pin 6 tot en met Arduino digitale pin 8
#include < SPI.h >
#include < Ethernet.h >
#include < EthernetDHCP.h >
#include < TextFinder.h >
#include < LiquidCrystal.h >
LiquidCrystal lcd (9, 8, 5, 4, 3, 2);
byte mac [] = {0x90, 0xA2, 0xDA, 0x00, 0x4F, 0x8A};
byte ip [] = {192,168,1,177};
byte server [] = {199,59,148,10}; Twitter.com
byte server_weather [] {140,90,113,200} =; Weather.gov
#define NUM_CHAR_USERNAME 7 / / "BZDoor:" is gebruikersnaam met 6 tekens +:
#define TWEET_OFFSET NUM_CHAR_USERNAME + 5 / / nuttige info van tweet moet worden weergegeven, verschijnt na "BZDoor: BZD"
char tweet [NUM_CHAR_USERNAME + 140]; 147 = "BZDoor:" + 140 voor werkelijke tweet
char [old_tweet] = {"BZDoor: BZD geen updates. Een prettige dag! Huidige temperaturen: nb Cris "};
char temperatuur [8];
Cliënt (server, 80);
TextFinder finder(client);
Client client_weather (server_weather, 80);
TextFinder finder_weather(client_weather);
VOID Setup
{
LCD.begin(4,20);
LCD.Clear();
LCD.Print("BZDoor2LCD");
Serial.begin(9600);
Serial.println("BZDoor2LCD");
Ethernet.begin (mac, ip);
}
void loop
{
(1) Controleer of nieuwe tweet aanwezig in BZDoor account is;
check_for_new_valid_tweet();
(2) het selectievakje voor temperatuur; ook weergeven handtekening;
check_for_new_temperature();
(3) opruimen;
client.stop();
client.Flush();
client_weather.stop();
client_weather.Flush();
(4) ook duidelijk de opslagarray "tweet"; anders als laatste tweet is korter
dan de vorige, zal restanten van de vorige deel uitmaken van de laatste;
for (int i = 0; ik < NUM_CHAR_USERNAME + 140; i ++) tweet [i] = ' ';
(5) vertraging 2 minuten voordat de volgende update;
delay(120000);
}
ongeldig check_for_new_valid_tweet() {}
belast met het 1ste en 2de rijen van 4 x 20 LCD;
verbinden met Twitter (RSS van gebruiker BZDoor: 316663659) en krijg de laatste tweet;
deze controle zal gebeuren elke andere 2 minuten, dus als meer tweets zijn geboekt
zijn geboekt binnen deze 2 minuten die alleen de laatste tweet worden verwerkt;
Als (client.connect()) {}
client.println ("GET http://www.twitter.com/statuses/user_timeline/316663659.rss HTTP/1.0"); BZDoor;
client.println();
} else {}
lcd.setCursor(0,0); LCD.Print ("Twitter connectie");
lcd.setCursor(0,1); LCD.Print ("mislukt!");
Serial.println ("Twitter connection failed.");
}
Als (client.connected()) {}
de laatste tweet in BZDoor de rekening krijgen door simpelweg het ontleden van het item en titel tags;
Als ((finder.find ("< opdracht >") & & (finder.getString ("< title >", "</title >", tweet, 140)! = 0))) {}
alleen tweets die beginnen met de drie tekens "BZD" wordt weergegeven
op de LCD display op de deur van het kantoor; alle anderen zal alleen op worden afgedrukt
van de Arduino seriële monitor
Serial.println(Tweet);
een gewone tweet in de BZDoor-account is altijd in een van twee formaten:
1) "BZDoor: dit is een Hallo wereld! Tweet! ", die niet wordt weergegeven op de LCD;
2) "BZDoor: BZD wat update", die wordt weergegeven op de LCD omdat begint met sleutel BZD;
Als (tweet [8] == "B" & & tweet [9] == 'Z' & & tweet [10] == had') {}
Dit is een tweet dat een uit BZDoor update moet worden weergegeven op de deur van het kantoor;
display_tweet(Tweet);
ook deze nieuwste twit te kopiëren naar old_tweet array;
strncpy (old_tweet, tweet, 80 + TWEET_OFFSET);
} else {}
display_tweet(old_tweet); eerst dit zegt geen nieuwe updates;
}
} else {}
lcd.setCursor(0,0); LCD.Print kan ("niet vinden item');
lcd.setCursor(0,1); LCD.Print ("veld in laatste twit");
Serial.println kan ("veld niet vinden item in laatste twit");
}
} else {}
lcd.setCursor(0,0); LCD.Print ("verbroken van");
lcd.setCursor(0,1); LCD.Print ("twitter");
Serial.println ("verbroken van twitter");
}
}
VOID display_tweet (char msg[]) {}
slechts 40 tekens weergegeven op de eerste twee rijen van de
20 x 4 LCD-display; de derde en vierde rij worden gebruikt voor
weergave van temperatuur en handtekening;
LCD.Clear();
tweet de eerste 40 tekens; weergeven
lcd.setCursor(0,0);
for (int i = TWEET_OFFSET; ik < TWEET_OFFSET + 20; i ++) {}
Als (msg [i]! = 0) lcd.print(msg[i]);
anders lcd.print(' ');
}
lcd.setCursor(0,1);
for (int i = TWEET_OFFSET + 20; ik < TWEET_OFFSET + 40; i ++) {}
Als (msg [i]! = 0) lcd.print(msg[i]);
anders lcd.print(' ');
}
ook afdrukken op seriële monitor;
char buffer_row [20];
strncpy (buffer_row, msg + TWEET_OFFSET, 20); buffer_row [20] = '\0';
Serial.println(buffer_row);
strncpy (buffer_row, msg, TWEET_OFFSET + 20, 20); buffer_row [20] = '\0';
Serial.println(buffer_row);
}
ongeldig check_for_new_temperature() {}
belast met het 3e en 4e rijen van 4 x 20 LCD;
verbinden met www.weather.gov en temperatuur voor Fargo Luchthaven;
Als (client_weather.connect()) {}
client_weather.println ("GET /xml/current_obs/KFAR.xml HTTP/1.0");
client_weather.println();
} else {}
lcd.setCursor(0,2); LCD.Print ("weer connectie");
lcd.setCursor(0,3); LCD.Print ("mislukt!");
Serial.println ("weer verbinding mislukt.");
}
Als (client_weather.connected()) {}
Als ((finder_weather.getString ("< temp_f >","</temp_f >", temperatuur, 8)! = 0)) {}
lcd.setCursor(0,2);
LCD.Print ("huidige temp:"); LCD.Print(Temperature); LCD.Print ("F");
lcd.setCursor(0,3); LCD.Print ("Cris");
ook afdrukken op seriële monitor
Serial.println ("huidige temp:"); Serial.println(Temperature); Serial.println ("F");
Serial.println ("Cris");
} else {}
lcd.setCursor(0,2); LCD.Print ("huidige temperaturen: NA");
lcd.setCursor(0,3); LCD.Print ("Cris");
Serial.println kon niet ("vinden temp_f in weer stroom");
}
} else {}
lcd.setCursor(0,2); LCD.Print ("huidige temperaturen: NA");
lcd.setCursor(0,3); LCD.Print ("Cris");
Serial.println ("verbroken van weer");
}
}