Twitter aktiverad Text till tal (3 / 5 steg)
Steg 3: Ta emot Tweets från Twitter
SpeakJet och TTS256 med Twitter
Amanda Ghassaei 2012
delar av denna kod är hämtade från följande två bitar av kod:
TTS256 Speakjet gränssnitt Chip Demo skiss
Skrivet av Ryan Owens
SparkFun elektronik
/*
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 >
skapad 21 maj 2011
av Tom Igoe
Denna kod är i public domain.
*/
inkludera bibliotek för ethernet-anslutning
#include < SPI.h >
#include < Ethernet.h >
ställa in en SoftwareSerial port för Speakjet sköld
#include < SoftwareSerial.h >
#define txPin 2
SoftwareSerial speakjet = SoftwareSerial (0, txPin);
#define RDY 5
#define SPK 3
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(192,168,22,112); <<< Ange din IP-adress här!!!
initiera bibliotek instans:
EthernetClient klient;
CONST int requestInterval = 10000; fördröjning mellan begäranden 10000ms = 10 SEK
char servernamn [] = "api.twitter.com"; Twitter URL
String twitterName = "GET /1/statuses/user_timeline.xml?screen_name=instructables & count = 1 HTTP/1.1";//"GET /1/statuses/user_timeline.xml?screen_name=[YOUR här} & count = 1 HTTP/1.1";
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
String prevTweet = ""; lagring för föregående tweet-jämför om senaste tweet är olika
booleska readingTweet = false; Om du läser för närvarande tweet
void setup() {
initiera den seriell kommunikationen med SpeakJet-TTS256
pinMode (txPin, produktionen);
speakjet.BEGIN(9600); / / set datahastigheten för SoftwareSerial port
PIN-kod som låter oss veta att SpeakJet är upptagen pratar
pinMode (SPK, indata);
Konfigurera redo PIN-koden som en input-lets oss vet SpeakJet är redo för mer data
pinMode (RDY, indata);
speakjet.println ("speakjet är redo"); speakjet berättar att det är gjort inträffade
fördröjning (2000), //let speakjet finish talar
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:
initialConnectToServer();
}
void loop() {
getTwitterData();
}
void getTwitterData() {
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! = ' <') {
om (inChar! = ' >') {
Tweet += inChar;
}
}
annat {
Om du fick en "<" karaktär,
du har kommit till slutet av tweet:
readingTweet = false;
Kontrollera om tweet är nya
om (tweet! = prevTweet) {
speakjet.println(tweet);
prevTweet = tweet;
}
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(twitterName);
client.println ("HOST: api.twitter.com");
client.println();
}
Obs tiden för detta Anslut försök:
lastAttemptTime = millis();
}
void initialConnectToServer() {
försök att ansluta, och vänta en millisekund:
speakjet.println ("ansluter till server");
Delay(1000);
om (client.connect (servernamn, 80)) {
speakjet.println ("connected, att göra Rumpsteken tee tee pee request");//speakjet.println ("anslutna, göra HTTP request...")
Delay(4000);
göra HTTP GET begära Twitter:
client.println(twitterName);
client.println ("HOST: api.twitter.com");
client.println();
speakjet.println ("klar för tweets"), //initialization fungerade, redo för tweets
}
annat {
speakjet.println kunde ("inte ansluta");
Delay(1000);
}
Obs tiden för detta Anslut försök:
lastAttemptTime = millis();
}
Installationen av maskinvara har ändrats något från det sista steget att göra plats för Ethernet-shield anslutningar. En full Schematisk ges i figur 2. De nya pin-anslutningarna är följande:
Digital Pin 2 ansluten till pin 18 0f TTS256
Digital Pin 3 ansluten till pin 16 av SpeakJet
Digital Pin 5 ansluten till pin 17 av SpeakJet
Dessa Stifttilldelningar kan ändras genom att redigera följande rader av firmware:
#define txPin 2
#define RDY 5
#define SPK 3
Det finns två linjer som du vill ändra för att anpassa denna Twitter setup. Först är IP-adressrad:
IP-adress ip(192,168,22,112); <<< Ange din IP-adress här!!!
Du måste ta reda på din IP-adress och sätter dessa siffrorna inom parentes i stället för vad jag skrivit. Den andra raden ändra är adressraden Twitter-flöde:
String twitterName = "GET /1/statuses/user_timeline.xml?screen_name=instructables & count = 1 HTTP/1.1";
Som det är skrivet här, denna firmware kommer att alltid titta på instructables foder, så ändrar du det till ett annat foder detta format:
"GET /1/statuses/user_timeline.xml?screen_name=[YOUR TWITTER namn här} & count = 1 HTTP/1.1"
När du laddar upp den fasta programvaran du hör SpeakJet säga "Ready" och sedan "SpeakJet är redo" när det är gjort inträffade. Om detta händer då vet du din hårdvara anslutningar till SpeakJet är bra. Sedan hör du SpeakJet säger "ansluter till server" om det står "kunde inte ansluta" då din ethernet shield är att ha problem med att ansluta till internet. Kontrollera att du har rätt IP-adress i firmware. Om allt är ok, du kommer att höra "ansluten, att göra HTTP-begäran" och "redo för tweets" när initiering av ethernet-anslutningen är klar. Sedan kommer SpeakJet Läs av senaste tweet från din twitter feed val. Arduinoen kommer hålla ansluta till Twitter var 10 sekunder att kontrollera om Twitter-flöde har uppdaterats och det kommer att läsa alla nya tweets högt.