Twitter kontrollerad sällskapsdjur mataren (18 / 19 steg)
Steg 18: Firmware
Denna firmware kommer att läsa inkommande twitter data så att om du tweet "feed me!" från användarnamn omnomnom arduino tänds upp två lampor kopplade till stift 2 och 3 i 1 sekund, orsakar mat leverans sekvensen att starta.
Jag använder Arduino 1.0 för detta projekt, jag rekommenderar att ladda ner denna version (eller senare) för detta projekt. Om du inte vill använda den nya versionen, kontrollera att du har följande Arduino bibliotek (de är kombinerade med v1.0):
- Ethernet (för Ethernet Shield)
- EthernetDHCP (för självkonfigurerande IP adress är du använder DHCP hemma)
Slå på strömbrytaren på botten av mataren, LCD bör flash 12:00 och motorerna ska köras igenom sekvensen mat leverans en gång. Se manualen om du vill ställa in klockan eller ange ytterligare mat timers, detta kommer inte att vara nödvändigt för projektet. Tryck på rec-knappen och spela in ett personligt meddelande för ditt husdjur, detta kommer att spela i slutet av varje mat leverans sekvens.
Här är Firmware:
< pre > / *
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
ändrat av Amanda Ghassaei juni 2012
Denna kod är i public domain.
*/
#include < SPI.h >
#include < Ethernet.h >
variabel för att förhindra övergödning
booleska justFed = 1;
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(190,298,34,132); <<< Ange din IP-adress här!!!
initiera bibliotek instans:
EthernetClient klient;
CONST int requestInterval = 60000; fördröjning mellan begäranden = 1min
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);
pinMode (3, OUTPUT);
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();
Testing();
}
void loop()
{
om (justFed) {
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 == "> mata mig!") {
digitalWrite (2, hög).
digitalWrite (3, hög).
Serial.println ("LED på!");
fördröjning (1000); //turn på för 1 SEK
digitalWrite (2, låg).
digitalWrite (3, låg).
justFed = 0;
}
om (tweet! = "> mata mig!") {
digitalWrite (2, låg).
digitalWrite (3, 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();
}
}
annars om (millis() - lastAttemptTime > 14400000) {//if fyra timmar har gått sedan senaste utfodring
justFed = 1;
}
}
void testing() {
digitalWrite (2, hög).
digitalWrite (3, hög).
Delay(1000);
digitalWrite (2, låg).
digitalWrite (3, låg).
}
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=nomnomnomfeeder & 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 att behöva göra en två redigeringar innan denna firmware är klar att användas.
1. sätt in din IP-adress på raden överst i firmware:
IP-adress ip(190,298,34,132); << Ange din IP-adress här!!!
Om du inte vet din IP-adress öppna filen >> exempel >> Ethernet >> DhcpAddressPrinter, ladda upp här koden till din arduino med Ethernet-shield inkopplad (och ethernet-kabel ansluten) och öppna seriell övervaka Tools >> SerialMonitor
2. ändra användarnamnet för ditt twitterkonto på raden (från funktionen connectToServer():
client.println ("GET /1/statuses/user_timeline.xml?screen_name=nomnomnomfeeder& count = 1 HTTP/1.1");
Ladda upp firmware på din arduino ombord, koppla in Ethernet-modem/router. Tweet "feed me!" från din twitter-konto och du bör se din sällskapsdjur mataren avstå från mat i en minut eller mindre. Mataren kommer inte få någon ytterligare tweets i fyra timmar (för att förhindra över utfodring), under denna tid, tweet ett annat budskap att ersätta "feed me!" som ditt senaste meddelande.