========
L’objectif de ce projet est d’utiliser un compte Twitter pour envoyer
Notes de la porte de votre bureau, qui est équipé d’un 20 x 4 LCD
(affichage). Ce projet présente essentiellement une mise en œuvre de
l’idée abordée dans cet article de l’IEEE Spectrum :
http://Spectrum.IEEE.org/Geek-Life/Hands-on/Send-a-tweet-to-your-Office-Door
Comme une amélioration, il affiche également la température actuelle (lire dans
de weather.gov) dans un endroit donné. La mise en œuvre repose sur
la combinaison d’une carte Arduino Uno avec un Arduino Ethernet
Bouclier. Le coût total est d’environ 120 $. Il est supposé que vous
sont familiers avec les outils de l’Arduino.
Matériels et logiciels
=====================
Matériel
--------
$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 blanc sur bleu : http://www.hacktronics.com/LCDs/20-x-4-LCD-White-on-Blue/flypage.tpl.html (pourrait être semblable de sparkfun.com pour minimiser les frais de port)
$11.95 - armoire de projet Arduino : http://www.sparkfun.com/products/10088 (héberge le jury et le bouclier)
$3.95 - câble USB A à B - 6 pieds : http://www.sparkfun.com/products/512 (en option ; vous devriez avoir un déjà)
$2.99 - 9 échoués de conducteurs 24 AWG blindé 6FT: http://www.frys.com/product/3550794?site=sr:SEARCH:MAIN_RSLT_PG (pour accrocher l’écran LCD au Conseil d’administration)
$2.99 - 3 câble CAT6 FT: http://www.frys.com/product/5979924?site=sr:SEARCH:MAIN_RSLT_PG (pour accrocher le jury à votre routeur Internet)
1,90 $ - 6 broches à Angle droit femelle en-tête : http://www.sparkfun.com/products/9429 (deux d'entre eux ; pour la connexion de l’écran LCD)
1,90 $ projet boîte : http://www.futurlec.com/ProjectBoxes.shtml (pour affichage)
--------------
$116.53 - TOTAL
Logiciel
--------
--Arduino croquis : inclus à la fin de cette instructable. L’esquisse
doivent être modifiés afin de répondre à vos exigences individuelles. Il contient
Commentaires avec la description de chaque modification et comment cela peut être fait.
--Vous devez compiler et charger le croquis à la Commission avec les outils de l’Arduino : http://arduino.cc/en/Main/Software
Pour pouvoir compiler, vous devez également les bibliothèques suivantes pour vos outils Arduino :
--EthernetDHCP Arduino : http://gkaindl.com/software/arduino-ethernet/dhcp
--Bibliothèque de Finder texte : http://www.arduino.cc/playground/Code/TextFinder
Croquis de l’Arduino : bzdoor2lcd.pde
------------------------------
Get « sélectionné » dernier tweet du compte Twitter « BZDoor » et l’affiche sur la
Écran LCD, qui je l’ai fixé sur la porte de mon bureau. De certaines je veux dire que tweets
Démarrer avec la clé « BZD » seulement. J’utilise le compte Twitter de poster des notes sur mon
porte du Bureau sur les heures de bureau, être dehors pour le café, etc..:-)
//
Le circuit :
Écran LCD pins 1,3,5,16 à Arduino numérique broche GND
Broche 2 de LCD à broche numérique Arduino + 5V
Broche 15 de LCD via resistance 330 Ohms à la broche numérique Arduino + 5V
Broche de LCD 14 à Arduino broche numérique 2
Broche 13 de LCD à Arduino broche numérique 3
Axe de LCD 12 à Arduino broche numérique 4
Broche 11 de LCD à Arduino broche numérique 5
Broche 4 de LCD à Arduino broche numérique 9
Broche 6 de LCD à Arduino broche numérique 8
#include < SPI.h >
#include < Ethernet.h >
#include < EthernetDHCP.h >
#include < TextFinder.h >
#include < LiquidCrystal.h >
Innovente lcd (9, 8, 5, 4, 3, 2) ;
la mac de Byte [] = {0x90, 0xA2, 0xDA, 0 x 00, 0x4F, 0x8A} ;
la propriété intellectuelle de Byte [] = {192,168,1,177} ;
serveur de Byte = {199,59,148,10} ; Twitter.com
server_weather Byte = {140,90,113,200} ; Weather.gov
#define NUM_CHAR_USERNAME 7 / / "BZDoor:" nom d’utilisateur à 6 caractères + :
#define TWEET_OFFSET NUM_CHAR_USERNAME + 5 / / infos utiles de tweet pour être affiché apparaît après "BZDoor : BZD"
char tweet [NUM_CHAR_USERNAME + 140] ; 147 = "BZDoor:" + 140 pour réel tweet
Char [] old_tweet = {"BZDoor : BZD aucune mise à jour. Bonne Journee! Température actuelle : NA Cris "} ;
température de char [8] ;
Client client (serveur, 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) vérifier si nouveau tweet est présent dans le compte de BZDoor ;
check_for_new_valid_tweet() ;
(2) vérifier la température ; afficher également signature ;
check_for_new_temperature() ;
(3) nettoyer ;
client.Stop() ;
client.Flush() ;
client_weather.Stop() ;
client_weather.Flush() ;
(4) également effacer la matrice de stockage « tweet » ; sinon si le dernier tweet est plus courte
que le précédent, vestiges de l’ancien feront partie de la plus récente ;
pour (int i = 0; j’ai < NUM_CHAR_USERNAME + 140; i ++) tweet [i] = ' ' ;
(5) retard 2 minutes avant la prochaine mise à jour ;
Delay(120000) ;
}
void check_for_new_valid_tweet() {}
responsable de 1re et 2e rangées des 4 x 20 LCD ;
se connecter à Twitter (RSS d’utilisateur BZDoor : 316663659) et téléchargez le dernier tweet ;
Cette vérification s’effectuera tous les autres 2 minutes, donc si plus de tweets ont été affichés
ont été validées au sein de ces 2 minutes que seulement le dernier tweet sera traité ;
Si (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 ("connexion Twitter") ;
lcd.setCursor(0,1) ; LCD.Print ("failed!") ;
Serial.println ("Twitter connexion a échoué.") ;
}
Si (client.connected()) {}
obtenir le dernier tweet dans un compte de BZDoor simplement l’analyse les balises d’élément et titre ;
Si ((finder.find ("< élément >") & & (finder.getString (« < title > », "</title >", tweet, 140)! = 0))) {}
seulement tweets qui commencent par les trois caractères « BZD » s’affiche
sur l’écran LCD sur la porte du Bureau ; tous les autres seront imprimés uniquement à
serial monitor de l’Arduino
Serial.println(Tweet) ;
un tweet régulièrement compte de BZDoor est toujours dans l’un des deux formats :
1) "BZDoor : il s’agit d’un Hello World ! Tweet! ", qui n’est pas affiché sur le LCD ;
2) "BZDoor : BZD quelques mise à jour", qui s’affiche sur l’écran LCD car commence avec clé BZD ;
Si (tweet [8] == « B » & & tweet [9] == « Z » & & tweet [10] == avait ') {}
Il s’agit d’un tweet qui a une mise à jour de BZDoor à apposer sur la porte du Bureau ;
display_tweet(Tweet) ;
Copiez également cette dernière twit old_tweet tableau ;
strncpy (old_tweet, tweet, 80 + TWEET_OFFSET) ;
} else {}
display_tweet(old_tweet) ; première fois, cela ne dit aucune nouvelle mise à jour ;
}
} else {}
lcd.setCursor(0,0) ; LCD.Print ("Impossible de trouver le point") ;
lcd.setCursor(0,1) ; LCD.Print (« champ dans dernier twit ») ;
Serial.println ("Impossible de trouver champ d’élément en dernier twit ») ;
}
} else {}
lcd.setCursor(0,0) ; LCD.Print ("déconnecté du") ;
lcd.setCursor(0,1) ; LCD.Print ("twitter") ;
Serial.println ("déconnecté de twitter") ;
}
}
void display_tweet (char msg[]) {}
Affichez seulement 40 caractères sur les deux premières lignes de la
écran LCD de 20 x 4 ; les troisième et quatrième lignes sont utilisés pour
affichage température et signature ;
LCD.Clear() ;
afficher les 40 premiers chars tweet ;
lcd.setCursor(0,0) ;
pour (int i = TWEET_OFFSET; i < TWEET_OFFSET + 20; i ++) {}
Si (msg [i]! = 0) lcd.print(msg[i]) ;
d’autre lcd.print(' ') ;
}
lcd.setCursor(0,1) ;
pour (int i = TWEET_OFFSET + 20; i < TWEET_OFFSET + 40; i ++) {}
Si (msg [i]! = 0) lcd.print(msg[i]) ;
d’autre lcd.print(' ') ;
}
Imprimez aussi à serial 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) ;
}
void check_for_new_temperature() {}
responsable avec les 3e et 4e rangs des 4 x 20 LCD ;
se connecter à www.weather.gov et obtenez la température pour Fargo Aeroport ;
Si (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 ("connexion météo") ;
lcd.setCursor(0,3) ; LCD.Print ("failed!") ;
Serial.println ("météo connexion a échoué.") ;
}
Si (client_weather.connected()) {}
Si ((finder_weather.getString (« < temp_f > »,"</temp_f > », température, 8)! = 0)) {}
lcd.setCursor(0,2) ;
LCD.Print ("Curr temp:") ; LCD.Print(temperature) ; LCD.Print ("F") ;
lcd.setCursor(0,3) ; LCD.Print ("Cris") ;
moniteur d’impression aussi de série
Serial.println ("Curr temp:") ; Serial.println(temperature) ; Serial.println ("F") ;
Serial.println ("Cris") ;
} else {}
lcd.setCursor(0,2) ; LCD.Print ("temp actuel : NA") ;
lcd.setCursor(0,3) ; LCD.Print ("Cris") ;
Serial.println ("Impossible de trouver temp_f dans les flux météo") ;
}
} else {}
lcd.setCursor(0,2) ; LCD.Print ("temp actuel : NA") ;
lcd.setCursor(0,3) ; LCD.Print ("Cris") ;
Serial.println ("déconnecté du temps ») ;
}
}