display your latest tweet with WiFly RN-XV and AD128160-UART

Dependencies:   AD128160_kazushi_branch HTTPClient mbed PowerControl WiflyInterface

Fork of FontTest3 by Sim mbed

/media/uploads/kazushi2008/_scaled_twittermbed_scene.jpg /media/uploads/kazushi2008/_scaled_twittermbed.jpg

Please see at http://kazushi-lab.c.fun.ac.jp/pukiwiki/index.php?TwitterMbed

Files at this revision

API Documentation at this revision

Comitter:
kazushi2008
Date:
Sun Apr 28 10:05:28 2013 +0000
Parent:
9:86dd65b94dca
Child:
11:c4d8084100ea
Commit message:
major change from Gainspan to WiFly

Changed in this revision

GSwifi.lib Show diff for this revision Revisions of this file
HTTPClient.lib Show annotated file Show diff for this revision Revisions of this file
WiflyInterface.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/GSwifi.lib	Mon Feb 25 03:26:07 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/kazushi2008/code/GSwifi/#deaa437ec4ee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPClient.lib	Sun Apr 28 10:05:28 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/stevep/code/HTTPClient/#cf5d7427a9ec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WiflyInterface.lib	Sun Apr 28 10:05:28 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/WiflyInterface/#0bcec6272784
--- a/main.cpp	Mon Feb 25 03:26:07 2013 +0000
+++ b/main.cpp	Sun Apr 28 10:05:28 2013 +0000
@@ -1,42 +1,43 @@
-// Twitter Mbed with Gain Span WiFi
+// Twitter Mbed with WiFly RN-XV
 // 
 // coded by Kazushi Mukaiyama (http://www.kazushi.info/)
-// refer to gs fan's notebook (http://mbed.org/users/gsfan/notebook/gainspan_wifi/)
+// refer to cookbook of WiFly(https://mbed.org/cookbook/wifly)
 // refer to GingaX's notebook (http://www31.atwiki.jp/gingax/pages/63.html)
 
 #include "mbed.h"
 #include "PowerControl/PowerControl.h"
 #include "PowerControl/EthernetPowerControl.h"
-#include "GSwifi.h"
+#include "WiflyInterface.h"
+#include "HTTPClient.h"
 #include "sjis_utf16.h"
 #include "s_Lcd.h"
 
 #define countof(x) ( sizeof(x) / sizeof(x[0]) )
 
-#define SECURE GSSEC_WPA_PSK
-#define SSID "WIFISSID"
-#define PASS "abcdef1234"
+#define SSID "your_ssid"
+#define PASS "your_pass"
 
-#define HTTP_HOST "api.supertweet.net" // SuperTweet.net
-//#define HTTP_URI "/1.1/statuses/show.json?id=281639966776369152"
-#define HTTP_URI "/1.1/statuses/user_timeline.json?screen_name=pla3c&count=1"
-#define HTTP_USER "user"
-#define HTTP_PASS "pass"
-#define INTERVAL_SEC 60.0
+#define HTTP_URI "http://api.supertweet.net/1.1/statuses/user_timeline.json?screen_name=pla3c&count=1"
+#define HTTP_USER "your_id"
+#define HTTP_PASS "your_pass"
+
+#define INTERVAL_SEC 90.0
 
 //#define _DEBUG
 
-GSwifi gs(p13, p14); // TX, RX (no flow control)
+WiflyInterface wifly(p13, p14, p15, p16, SSID, PASS, WPA); // TX, RX, reset, connection_status
+HTTPClient http;
 DigitalOut led1(LED1), led2(LED2);
 #ifdef _DEBUG
     Serial pc(USBTX, USBRX);
 #endif
 
+char buf[512];
+
 unsigned char kstatus = 0;
 bool estate = false;
 unsigned char unibuf[4];
 unsigned char codes[512];
-bool emergency = false;
 
 unsigned short convert(unsigned short utf){
     unsigned short sjis = NULL; 
@@ -49,11 +50,11 @@
     return sjis;
 }
 
-void parseCode(const unsigned char* s){
+bool parseCode(const unsigned char* s){
     unsigned int i = 0;
     unsigned char c;
     
-    emergency = false;
+    bool em = false;
     while((c = *s++) != '\0') {
         if(estate && kstatus==4){ // 1st digit of utf-16
             unibuf[3] = c;
@@ -63,7 +64,7 @@
             i++;
             codes[i] = code & 0xFF;
             i++;
-            if(code==0x8149) emergency = true;
+            if(code==0x8149) em = true;
     #ifdef _DEBUG
             pc.printf("%s, %x\r\n", unibuf, code);
     #endif
@@ -89,11 +90,13 @@
         } else { // 4x8font
             codes[i] = c;
             i++;
-            if(c=='!') emergency = true;
+            if(c=='!') em = true;
         }
     }
     
     codes[i]= '\0';
+    
+    return em;
 }
 
 void drawString(const unsigned char *s){
@@ -102,55 +105,28 @@
 }
 
 int connect(){
-    IpAddr ipaddr, netmask, gateway, nameserver;
-    
-    //gs.command("AT&F", GSRES_NORMAL);
+    char localip[20];
     
-    if (gs.connect(SECURE, SSID, PASS, 1, 5)) {
-        drawString("WiFi connection error"); newline();
-#ifdef _DEBUG
-        pc.printf("WiFi connection error\r\n");
-#endif
-        return -1;
-    }
+    wifly.init(); //Use DHCP
+    while (!wifly.connect());
     
-    gs.getAddress(ipaddr, netmask, gateway, nameserver);
-    if(nameserver.isNull()) {
-        nameserver = IpAddr(192,168,1,1);
-        gs.setAddress(ipaddr, netmask, gateway, nameserver);
-        gs.getAddress(ipaddr, netmask, gateway, nameserver);
-    }
 #ifdef _DEBUG
-    pc.printf("ip %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
-    pc.printf("gw %d.%d.%d.%d\r\n", gateway[0], gateway[1], gateway[2], gateway[3]);
-    pc.printf("ns %d.%d.%d.%d\r\n", nameserver[0], nameserver[1], nameserver[2], nameserver[3]);
+    pc.printf("ip %s\r\n", wifly.getIPAddress());
 #endif
-    char localip[20];
-    sprintf(localip, "ip %d.%d.%d.%d", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
-    drawString((unsigned char*)localip); newline();
-    sprintf(localip, "gw %d.%d.%d.%d", gateway[0], gateway[1], gateway[2], gateway[3]);
+
+    sprintf(localip, "ip %s", wifly.getIPAddress());
     drawString((unsigned char*)localip); newline();
-    sprintf(localip, "ns %d.%d.%d.%d", nameserver[0], nameserver[1], nameserver[2], nameserver[3]);
-    drawString((unsigned char*)localip); newline();
-    
-    delete [] localip;
-    
+        
     return 0;
 }
 
-void onGsReceive (int cid, int len) {
-    int i;
-    char buf[GS_DATA_SIZE + 1];
-    
+void parseBuffer () {
     led2 = 1;
-    i = gs.recv(cid, buf, len);
-    buf[i] = 0;
     
     // parse buffer    
-    char* c = strtok(buf, "\r\n");
-    if(strcmp(c, "200 OK")==0){
-        while(c!=NULL){
-            c = strtok(NULL, "\"");
+    char* c = strtok(buf, "\"");
+         while(c!=NULL){
+            char* c = strtok(NULL, "\"");
             char key[4];
             sprintf(key, "%.4s", c);
             if(strcmp(key, "text")==0){
@@ -159,35 +135,29 @@
 #ifdef _DEBUG
                 pc.printf("%s\r\n", c);
 #endif
-                //c = strtok(c, "@");
-                parseCode((unsigned char*)c);
+                bool emergency = parseCode((unsigned char*)c);
                 if(emergency) color(0xf800); else color(0x001f);
                 cls();
                 color(0xffff);
                 drawString(codes); newline();
-                //c = strtok(NULL, "@");
-                //drawString((unsigned char*)c); newline();
+                if(emergency) bmp(0,80,1); else bmp(0,80,0); // comment out if you don't use on-memory images
                 break;
             }
         }
-    }
     
     led2 = 0;
-    
-    delete [] buf;
 }
 
 int main() {
     int r;
     char* msg;
-    Host host;
     led1 = 0;
     
     PHY_PowerDown();
     Peripheral_PowerDown(0x7D7F6FE1);    
-    gs.setBaud(115200);
+
 #ifdef _DEBUG
-    pc.baud(115200);
+    pc.baud(9600);
 #endif
     
     s_Lcdinit();
@@ -203,27 +173,45 @@
         NVIC_SystemReset();
     }
     
+    wait_ms(1000);
+    
     msg = "start twitter";
     drawString((unsigned char*)msg); newline();
+
+    http.basicAuth(HTTP_USER, HTTP_PASS);
+
+    wait_ms(1000);
     
-    host.setName(HTTP_HOST);
-
     while(1) {
         led1 = !led1; wait_ms(500); led1 = !led1; // blink
         
-        r = gs.httpGet(host, HTTP_URI, HTTP_USER, HTTP_PASS, 0, &onGsReceive);
-        gs.poll();       
-        if (!gs.isConnected(r)) {
+        int ret = http.get(HTTP_URI, buf, 351); // out put only 40 zenkaku characters
+        if(!ret){
+            parseBuffer();
+        }else{
+            sprintf((char*)codes, "Error - ret = %d - HTTP return code = %d", ret, http.getHTTPResponseCode());
             color(0x001f);
             cls();
-            msg = "reconnect";
-            drawString((unsigned char*)msg); newline();
-            wait_ms(5);
-            r = gs.disconnect();
-            r = connect();
+            color(0xffff);
+            drawString(codes); newline();
+            if(ret==8){
+                drawString("disconnect..."); newline();
+                wifly.disconnect();
+                wifly.init();
+                drawString("reconnect..."); newline();
+                while (!wifly.connect());
+                drawString("done"); newline();
+            }
         }
-
+        
+#ifdef _DEBUG
+        if(!ret){
+            pc.printf("Page fetched successfully - read %d characters\r\n", strlen(buf));
+            pc.printf("Result: %s\r\n", buf);
+        }else{
+            pc.printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode());
+        }
+#endif
         wait(INTERVAL_SEC);
    }
-   
 }