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

Committer:
kazushi2008
Date:
Sun Apr 28 10:29:08 2013 +0000
Revision:
11:c4d8084100ea
Parent:
10:94f45d37174f
major change to WiFly RN-XV

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kazushi2008 10:94f45d37174f 1 // Twitter Mbed with WiFly RN-XV
kazushi2008 1:6b495e0f3b0c 2 //
kazushi2008 1:6b495e0f3b0c 3 // coded by Kazushi Mukaiyama (http://www.kazushi.info/)
kazushi2008 10:94f45d37174f 4 // refer to cookbook of WiFly(https://mbed.org/cookbook/wifly)
kazushi2008 2:56a2ab00e743 5 // refer to GingaX's notebook (http://www31.atwiki.jp/gingax/pages/63.html)
kazushi2008 1:6b495e0f3b0c 6
kazushi2008 1:6b495e0f3b0c 7 #include "mbed.h"
kazushi2008 6:5aa67ed9ae43 8 #include "PowerControl/PowerControl.h"
kazushi2008 6:5aa67ed9ae43 9 #include "PowerControl/EthernetPowerControl.h"
kazushi2008 10:94f45d37174f 10 #include "WiflyInterface.h"
kazushi2008 10:94f45d37174f 11 #include "HTTPClient.h"
kazushi2008 1:6b495e0f3b0c 12 #include "sjis_utf16.h"
kazushi2008 2:56a2ab00e743 13 #include "s_Lcd.h"
kazushi2008 1:6b495e0f3b0c 14
kazushi2008 1:6b495e0f3b0c 15 #define countof(x) ( sizeof(x) / sizeof(x[0]) )
kazushi2008 1:6b495e0f3b0c 16
kazushi2008 10:94f45d37174f 17 #define SSID "your_ssid"
kazushi2008 10:94f45d37174f 18 #define PASS "your_pass"
kazushi2008 1:6b495e0f3b0c 19
kazushi2008 10:94f45d37174f 20 #define HTTP_URI "http://api.supertweet.net/1.1/statuses/user_timeline.json?screen_name=pla3c&count=1"
kazushi2008 10:94f45d37174f 21 #define HTTP_USER "your_id"
kazushi2008 10:94f45d37174f 22 #define HTTP_PASS "your_pass"
kazushi2008 10:94f45d37174f 23
kazushi2008 10:94f45d37174f 24 #define INTERVAL_SEC 90.0
kazushi2008 1:6b495e0f3b0c 25
kazushi2008 1:6b495e0f3b0c 26 //#define _DEBUG
kazushi2008 1:6b495e0f3b0c 27
kazushi2008 10:94f45d37174f 28 WiflyInterface wifly(p13, p14, p15, p16, SSID, PASS, WPA); // TX, RX, reset, connection_status
kazushi2008 10:94f45d37174f 29 HTTPClient http;
kazushi2008 1:6b495e0f3b0c 30 DigitalOut led1(LED1), led2(LED2);
kazushi2008 1:6b495e0f3b0c 31 #ifdef _DEBUG
kazushi2008 1:6b495e0f3b0c 32 Serial pc(USBTX, USBRX);
kazushi2008 1:6b495e0f3b0c 33 #endif
kazushi2008 1:6b495e0f3b0c 34
kazushi2008 10:94f45d37174f 35 char buf[512];
kazushi2008 10:94f45d37174f 36
kazushi2008 2:56a2ab00e743 37 unsigned char kstatus = 0;
kazushi2008 1:6b495e0f3b0c 38 bool estate = false;
kazushi2008 2:56a2ab00e743 39 unsigned char unibuf[4];
kazushi2008 9:86dd65b94dca 40 unsigned char codes[512];
kazushi2008 1:6b495e0f3b0c 41
kazushi2008 1:6b495e0f3b0c 42 unsigned short convert(unsigned short utf){
kazushi2008 1:6b495e0f3b0c 43 unsigned short sjis = NULL;
kazushi2008 1:6b495e0f3b0c 44 for(int i=0; i<countof(sjis2utf16)/2; i++){
kazushi2008 1:6b495e0f3b0c 45 if(utf==sjis2utf16[i*2+1]){
kazushi2008 1:6b495e0f3b0c 46 sjis = sjis2utf16[i*2];
kazushi2008 1:6b495e0f3b0c 47 break;
kazushi2008 1:6b495e0f3b0c 48 }
kazushi2008 1:6b495e0f3b0c 49 }
kazushi2008 1:6b495e0f3b0c 50 return sjis;
kazushi2008 1:6b495e0f3b0c 51 }
kazushi2008 1:6b495e0f3b0c 52
kazushi2008 10:94f45d37174f 53 bool parseCode(const unsigned char* s){
kazushi2008 9:86dd65b94dca 54 unsigned int i = 0;
kazushi2008 9:86dd65b94dca 55 unsigned char c;
kazushi2008 9:86dd65b94dca 56
kazushi2008 10:94f45d37174f 57 bool em = false;
kazushi2008 9:86dd65b94dca 58 while((c = *s++) != '\0') {
kazushi2008 9:86dd65b94dca 59 if(estate && kstatus==4){ // 1st digit of utf-16
kazushi2008 9:86dd65b94dca 60 unibuf[3] = c;
kazushi2008 9:86dd65b94dca 61 char *endptr;
kazushi2008 9:86dd65b94dca 62 unsigned short code = convert(strtol((char*)unibuf, &endptr, 16));
kazushi2008 9:86dd65b94dca 63 codes[i] = code>>8 & 0xFF;
kazushi2008 9:86dd65b94dca 64 i++;
kazushi2008 9:86dd65b94dca 65 codes[i] = code & 0xFF;
kazushi2008 9:86dd65b94dca 66 i++;
kazushi2008 10:94f45d37174f 67 if(code==0x8149) em = true;
kazushi2008 9:86dd65b94dca 68 #ifdef _DEBUG
kazushi2008 9:86dd65b94dca 69 pc.printf("%s, %x\r\n", unibuf, code);
kazushi2008 9:86dd65b94dca 70 #endif
kazushi2008 9:86dd65b94dca 71 kstatus = 0;
kazushi2008 9:86dd65b94dca 72 estate = false;
kazushi2008 9:86dd65b94dca 73 } else if(estate && kstatus==3){ // 2nd digit of utf-16
kazushi2008 9:86dd65b94dca 74 unibuf[2] = c;
kazushi2008 9:86dd65b94dca 75 kstatus = 4;
kazushi2008 9:86dd65b94dca 76 } else if(estate && kstatus==2){ // 3rd digit of utf-16
kazushi2008 9:86dd65b94dca 77 unibuf[1] = c;
kazushi2008 9:86dd65b94dca 78 kstatus = 3;
kazushi2008 9:86dd65b94dca 79 } else if(estate && kstatus==1){ // 4th digit of utf-16
kazushi2008 9:86dd65b94dca 80 unibuf[0] = c;
kazushi2008 9:86dd65b94dca 81 kstatus = 2;
kazushi2008 9:86dd65b94dca 82 } else if(estate && c=='u'){
kazushi2008 9:86dd65b94dca 83 kstatus = 1;
kazushi2008 9:86dd65b94dca 84 } else if(estate && !c=='u'){
kazushi2008 9:86dd65b94dca 85 drawc(c);
kazushi2008 9:86dd65b94dca 86 kstatus = 0;
kazushi2008 9:86dd65b94dca 87 estate = false;
kazushi2008 9:86dd65b94dca 88 } else if(c=='\\'){ // escape code
kazushi2008 9:86dd65b94dca 89 estate = true;
kazushi2008 9:86dd65b94dca 90 } else { // 4x8font
kazushi2008 9:86dd65b94dca 91 codes[i] = c;
kazushi2008 9:86dd65b94dca 92 i++;
kazushi2008 10:94f45d37174f 93 if(c=='!') em = true;
kazushi2008 9:86dd65b94dca 94 }
kazushi2008 1:6b495e0f3b0c 95 }
kazushi2008 9:86dd65b94dca 96
kazushi2008 9:86dd65b94dca 97 codes[i]= '\0';
kazushi2008 10:94f45d37174f 98
kazushi2008 10:94f45d37174f 99 return em;
kazushi2008 1:6b495e0f3b0c 100 }
kazushi2008 1:6b495e0f3b0c 101
kazushi2008 2:56a2ab00e743 102 void drawString(const unsigned char *s){
kazushi2008 1:6b495e0f3b0c 103 unsigned char c;
kazushi2008 9:86dd65b94dca 104 while((c = *s++) != '\0') drawc(c);
kazushi2008 2:56a2ab00e743 105 }
kazushi2008 2:56a2ab00e743 106
kazushi2008 2:56a2ab00e743 107 int connect(){
kazushi2008 10:94f45d37174f 108 char localip[20];
kazushi2008 6:5aa67ed9ae43 109
kazushi2008 10:94f45d37174f 110 wifly.init(); //Use DHCP
kazushi2008 10:94f45d37174f 111 while (!wifly.connect());
kazushi2008 2:56a2ab00e743 112
kazushi2008 2:56a2ab00e743 113 #ifdef _DEBUG
kazushi2008 10:94f45d37174f 114 pc.printf("ip %s\r\n", wifly.getIPAddress());
kazushi2008 2:56a2ab00e743 115 #endif
kazushi2008 10:94f45d37174f 116
kazushi2008 10:94f45d37174f 117 sprintf(localip, "ip %s", wifly.getIPAddress());
kazushi2008 2:56a2ab00e743 118 drawString((unsigned char*)localip); newline();
kazushi2008 10:94f45d37174f 119
kazushi2008 3:cce58539833e 120 return 0;
kazushi2008 1:6b495e0f3b0c 121 }
kazushi2008 1:6b495e0f3b0c 122
kazushi2008 10:94f45d37174f 123 void parseBuffer () {
kazushi2008 1:6b495e0f3b0c 124 led2 = 1;
kazushi2008 1:6b495e0f3b0c 125
kazushi2008 1:6b495e0f3b0c 126 // parse buffer
kazushi2008 10:94f45d37174f 127 char* c = strtok(buf, "\"");
kazushi2008 10:94f45d37174f 128 while(c!=NULL){
kazushi2008 10:94f45d37174f 129 char* c = strtok(NULL, "\"");
kazushi2008 1:6b495e0f3b0c 130 char key[4];
kazushi2008 1:6b495e0f3b0c 131 sprintf(key, "%.4s", c);
kazushi2008 1:6b495e0f3b0c 132 if(strcmp(key, "text")==0){
kazushi2008 1:6b495e0f3b0c 133 c = strtok(NULL, "\"");
kazushi2008 1:6b495e0f3b0c 134 c = strtok(NULL, "\"");
kazushi2008 1:6b495e0f3b0c 135 #ifdef _DEBUG
kazushi2008 1:6b495e0f3b0c 136 pc.printf("%s\r\n", c);
kazushi2008 1:6b495e0f3b0c 137 #endif
kazushi2008 10:94f45d37174f 138 bool emergency = parseCode((unsigned char*)c);
kazushi2008 9:86dd65b94dca 139 if(emergency) color(0xf800); else color(0x001f);
kazushi2008 2:56a2ab00e743 140 cls();
kazushi2008 2:56a2ab00e743 141 color(0xffff);
kazushi2008 9:86dd65b94dca 142 drawString(codes); newline();
kazushi2008 10:94f45d37174f 143 if(emergency) bmp(0,80,1); else bmp(0,80,0); // comment out if you don't use on-memory images
kazushi2008 1:6b495e0f3b0c 144 break;
kazushi2008 1:6b495e0f3b0c 145 }
kazushi2008 1:6b495e0f3b0c 146 }
kazushi2008 1:6b495e0f3b0c 147
kazushi2008 1:6b495e0f3b0c 148 led2 = 0;
kazushi2008 1:6b495e0f3b0c 149 }
kazushi2008 1:6b495e0f3b0c 150
kazushi2008 1:6b495e0f3b0c 151 int main() {
kazushi2008 1:6b495e0f3b0c 152 int r;
kazushi2008 2:56a2ab00e743 153 char* msg;
kazushi2008 6:5aa67ed9ae43 154 led1 = 0;
kazushi2008 6:5aa67ed9ae43 155
kazushi2008 6:5aa67ed9ae43 156 PHY_PowerDown();
kazushi2008 6:5aa67ed9ae43 157 Peripheral_PowerDown(0x7D7F6FE1);
kazushi2008 10:94f45d37174f 158
kazushi2008 1:6b495e0f3b0c 159 #ifdef _DEBUG
kazushi2008 10:94f45d37174f 160 pc.baud(9600);
kazushi2008 1:6b495e0f3b0c 161 #endif
kazushi2008 1:6b495e0f3b0c 162
kazushi2008 2:56a2ab00e743 163 s_Lcdinit();
kazushi2008 2:56a2ab00e743 164
kazushi2008 2:56a2ab00e743 165 color(0x001f);
kazushi2008 2:56a2ab00e743 166 cls();
kazushi2008 2:56a2ab00e743 167 color(0xffff);
kazushi2008 2:56a2ab00e743 168
kazushi2008 1:6b495e0f3b0c 169 msg = "connect";
kazushi2008 2:56a2ab00e743 170 drawString((unsigned char*)msg); newline();
kazushi2008 2:56a2ab00e743 171 r = connect();
kazushi2008 2:56a2ab00e743 172 if(r<0){
kazushi2008 6:5aa67ed9ae43 173 NVIC_SystemReset();
kazushi2008 1:6b495e0f3b0c 174 }
kazushi2008 1:6b495e0f3b0c 175
kazushi2008 10:94f45d37174f 176 wait_ms(1000);
kazushi2008 10:94f45d37174f 177
kazushi2008 1:6b495e0f3b0c 178 msg = "start twitter";
kazushi2008 2:56a2ab00e743 179 drawString((unsigned char*)msg); newline();
kazushi2008 10:94f45d37174f 180
kazushi2008 10:94f45d37174f 181 http.basicAuth(HTTP_USER, HTTP_PASS);
kazushi2008 10:94f45d37174f 182
kazushi2008 10:94f45d37174f 183 wait_ms(1000);
kazushi2008 1:6b495e0f3b0c 184
kazushi2008 3:cce58539833e 185 while(1) {
kazushi2008 2:56a2ab00e743 186 led1 = !led1; wait_ms(500); led1 = !led1; // blink
kazushi2008 1:6b495e0f3b0c 187
kazushi2008 10:94f45d37174f 188 int ret = http.get(HTTP_URI, buf, 351); // out put only 40 zenkaku characters
kazushi2008 10:94f45d37174f 189 if(!ret){
kazushi2008 10:94f45d37174f 190 parseBuffer();
kazushi2008 10:94f45d37174f 191 }else{
kazushi2008 10:94f45d37174f 192 sprintf((char*)codes, "Error - ret = %d - HTTP return code = %d", ret, http.getHTTPResponseCode());
kazushi2008 2:56a2ab00e743 193 color(0x001f);
kazushi2008 2:56a2ab00e743 194 cls();
kazushi2008 10:94f45d37174f 195 color(0xffff);
kazushi2008 10:94f45d37174f 196 drawString(codes); newline();
kazushi2008 10:94f45d37174f 197 if(ret==8){
kazushi2008 10:94f45d37174f 198 drawString("disconnect..."); newline();
kazushi2008 10:94f45d37174f 199 wifly.disconnect();
kazushi2008 10:94f45d37174f 200 wifly.init();
kazushi2008 10:94f45d37174f 201 drawString("reconnect..."); newline();
kazushi2008 10:94f45d37174f 202 while (!wifly.connect());
kazushi2008 10:94f45d37174f 203 drawString("done"); newline();
kazushi2008 10:94f45d37174f 204 }
kazushi2008 2:56a2ab00e743 205 }
kazushi2008 10:94f45d37174f 206
kazushi2008 10:94f45d37174f 207 #ifdef _DEBUG
kazushi2008 10:94f45d37174f 208 if(!ret){
kazushi2008 10:94f45d37174f 209 pc.printf("Page fetched successfully - read %d characters\r\n", strlen(buf));
kazushi2008 10:94f45d37174f 210 pc.printf("Result: %s\r\n", buf);
kazushi2008 10:94f45d37174f 211 }else{
kazushi2008 10:94f45d37174f 212 pc.printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode());
kazushi2008 10:94f45d37174f 213 }
kazushi2008 10:94f45d37174f 214 #endif
kazushi2008 1:6b495e0f3b0c 215 wait(INTERVAL_SEC);
kazushi2008 3:cce58539833e 216 }
kazushi2008 1:6b495e0f3b0c 217 }