Arduino Ethernet Shield handledning (5 / 5 steg)
Steg 5: klient
Webbplatser har en massa text både synliga och dolda, vilket gör programmering på klientsidan mycket knepigt. Läsa information från webbplatser vanligtvis innebär parsning av en massa strängar. Detta är irriterande, men värt det, om det är vad du tänker göra.
Jag skulle skriva lite kod för att läsa Twitter-meddelanden, men sådan kod finns redan som ett exempel inom Arduino programmeraren. Istället, jag bara ändrade det något att slå på en LED om ett särskilt meddelande läses.
Att göra detta arbete Anslut positiva ledde till stift D2, och negativa bly i serie med en 220 ohm motstånd till jord.
Glöm inte att ange din egen IP-adress i koden nedan, eller det kommer inte att fungera.
Här är koden:
/*
Twitter-klient med strängar
Denna skiss ansluter till Twitter med hjälp av en Ethernet shield. Analyserar det XML
återvänt, och ser detta är en tweet för < text > < / text >
Du kan använda Arduino Ethernet shield eller Adafruit Ethernet shield,
antingen en fungerar, så länge som den har fått en Wiznet Ethernet modul ombord.
I detta exempel används DHCP-rutiner i Ethernet-biblioteket som är en del av den
Arduino kärna från version 1.0 beta 1
I detta exempel används strängen biblioteket, som är en del av Arduino kärnan från
version 0019.
Krets:
* Ethernet shield bifogas stift 10, 11, 12, 13
skapad 21 maj 2011
av Tom Igoe
Denna kod är i public domain.
*/
#include < SPI.h >
#include < Ethernet.h >
Ange en MAC-adress och IP-adressen för din controller nedan.
IP-adressen kommer att bero på ditt lokala nätverk:
byte [mac] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01};
IP-adress ip(191,11,1,1); <<< Ange din IP-adress här!!!
initiera bibliotek instans:
EthernetClient klient;
CONST int requestInterval = 60000; fördröjning mellan begäranden
char servernamn [] = "api.twitter.com"; Twitter URL
Boolean efterfrågades; Om du har gjort en begäran sedan ansluter
lång lastAttemptTime = 0; förra gången du ansluten till servern, i millisekunder
String currentLine = ""; sträng till texten från servern
Sträng tweet = ""; sträng att hålla tweet
booleska readingTweet = false; Om du läser för närvarande tweet
void setup() {
pinMode (2, utgång);
boka plats för strängarna:
currentLine.reserve(256);
Tweet.Reserve(150);
initiera följetong:
Serial.BEGIN(9600);
försök en DHCP-anslutning:
IF (!. Ethernet.BEGIN(Mac)) {
om DHCP misslyckas, börja med en hårdkodad adress:
Ethernet.BEGIN (mac, ip);
}
ansluta till Twitter:
connectToServer();
}
void loop()
{
om (client.connected()) {
om (client.available()) {
Läs inkommande byte:
char inChar = client.read();
Lägg till inkommande byte till slutet av raden:
currentLine += inChar;
Om du får en ny rad, avmarkera raden:
om (inChar == "\n") {
currentLine = "";
}
om den aktuella raden avslutas med < text >, kommer det att
följas av tweet:
om (currentLine.endsWith ("< text >")) {
tweet börjar. Rensa tweet strängen:
readingTweet = sant;
Tweet = "";
}
Om du läser för närvarande byten i en tweet,
lägga till dem i tweet sträng:
om (readingTweet) {
om (inChar! = ' <') {
Tweet += inChar;
}
annat {
Om du fick en "<" karaktär,
du har kommit till slutet av tweet:
readingTweet = false;
Serial.println(tweet);
om (tweet == "> Hej grymma värld") {
digitalWrite (2, hög).
Serial.println ("LED på!");
}
om (tweet! = "> Hej grymma värld") {
digitalWrite (2, låg).
Serial.println ("LED OFF!");
}
stänga anslutningen till servern:
client.stop();
}
}
}
}
annars om (millis() - lastAttemptTime > requestInterval) {
Om du inte är ansluten, och två minuter har gått sedan
din sista anslutning, sedan försök att ansluta igen:
connectToServer();
}
}
void connectToServer() {
försök att ansluta, och vänta en millisekund:
Serial.println ("ansluter till server...");
om (client.connect (servernamn, 80)) {
Serial.println ("att göra HTTP-begäran...");
göra HTTP GET begära Twitter:
client.println ("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester & count = 1 HTTP/1.1");
client.println ("HOST: api.twitter.com");
client.println();
}
Obs tiden för detta Anslut försök:
lastAttemptTime = millis();
}
Du kommer förmodligen att vilja läsa något annat än det senaste inlägget på RandyMcTester Twitter feed.
För att läsa andra Twitter-feeds, ändra följande bit av texten:
client.println ("GET /1/statuses/user_timeline.xml?screen_name=[nya TWITTER namn här]& count = 1 HTTP/1.1");