Digital Photo Frame using FTP Client
Dependencies: FTPClient SDFileSystem SeeedStudioTFTv2 TFT_fonts WIZnetInterface mbed
Overview
This program is smart Digital Photo Frame remotely controlled by FTP protocol.

Demo
<iframe src="https://player.vimeo.com/video/137345478" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> <p><a href="https://vimeo.com/137345478">Digital Photo Frame controlled remotely by using FTP protocol.</a> from <a href="https://vimeo.com/midnightcow">MidnightCow</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
For more detail
http://midnightcow.tistory.com/entry/Digital-Photo-Frame-controlled-remotely-by-using-FTP-protocol
Revision 1:72700c87f8d5, committed 2015-08-26
- Comitter:
- MidnightCow
- Date:
- Wed Aug 26 13:43:34 2015 +0000
- Parent:
- 0:583a42b8d940
- Child:
- 2:c069ab35d315
- Commit message:
- Enhance Program
Changed in this revision
| FTPClient.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/FTPClient.lib Sat Aug 15 08:45:28 2015 +0000 +++ b/FTPClient.lib Wed Aug 26 13:43:34 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/MidnightCow/code/FTPClient/#4bef734cc93e +https://developer.mbed.org/users/MidnightCow/code/FTPClient/#f748d78bba4e
--- a/main.cpp Sat Aug 15 08:45:28 2015 +0000
+++ b/main.cpp Wed Aug 26 13:43:34 2015 +0000
@@ -24,15 +24,15 @@
#define PIN_CS_SD D4
#define MAC "\x00\x08\xDC\x11\x34\x78"
-#define IP "192.168.77.100"
+#define IP "192.168.1.100"
#define MASK "255.255.255.0"
-#define GATEWAY "192.168.77.1"
+#define GATEWAY "192.168.1.1"
-#define HTTPD_SERVER_PORT 80
-#define HTTPD_MAX_REQ_LENGTH 1023
-#define HTTPD_MAX_HDR_LENGTH 255
-#define HTTPD_MAX_FNAME_LENGTH 127
-#define HTTPD_MAX_DNAME_LENGTH 127
+#define FTP_SERVER_IP "192.168.1.200"
+
+#define _MAX_FNAME_LEN_ 127
+#define _FTP_UPDATE_TIME_ 20
+
Serial uart(USBTX, USBRX);
@@ -43,24 +43,10 @@
EthernetInterface eth;
-/*
-char buffer[HTTPD_MAX_REQ_LENGTH+1];
-char httpHeader[HTTPD_MAX_HDR_LENGTH+1];
-char fileName[HTTPD_MAX_FNAME_LENGTH+1];
-char dirName[HTTPD_MAX_DNAME_LENGTH+1];
-char *uristr;
-char *eou;
-char *qrystr;
-
-FILE *fp;
-int rdCnt;
-*/
-
DigitalOut led1(LED1); //server listning status
DigitalOut led2(LED2); //socket connecting status
-
MySeeedStudioTFTv2 TFT(PIN_XP, PIN_XM, PIN_YP, PIN_YM, PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_DC_TFT, PIN_BL_TFT, PIN_CS_SD);
@@ -68,12 +54,17 @@
Ticker ledTick;
+uint32_t ftp_time_1s = 0;
char myfilelist[MAX_SS] = {0,};
void ledTickfunc()
{
led1 = !led1;
+ if(ftp_time_1s)
+ {
+ if(ftp_time_1s++ > _FTP_UPDATE_TIME_) ftp_time_1s = 0;
+ }
}
@@ -82,109 +73,125 @@
int ret;
char* tok = NULL;
char* lasts = NULL;
- char filename[20];
+ char filename[_MAX_FNAME_LEN_];
FILE* fp;
-
-
- ledTick.attach(&ledTickfunc,0.5);
-
+
// Serial Interface eth;
uart.baud(115200);
uart.printf("Initializing\n");
-// Check File System
- uart.printf("Checking File System\n");
- DIR *d = opendir("/sdc/");
- if (d != NULL) {
- uart.printf("SD Card Present\n");
- } else {
- uart.printf("SD Card Root Directory Not Found\n");
- }
-
// EthernetInterface eth;
uart.printf("Initializing Ethernet\n");
+
//eth.init(); //Use DHCP
eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); //IP,mask,Gateway
uart.printf("Connecting\n");
eth.connect();
uart.printf("IP Address is %s\n", eth.getIPAddress());
- //Configure the display driver
- TFT.background(Black);
- TFT.foreground(White);
- TFT.set_font((unsigned char*) Arial12x12);
- TFT.cls();
+// Check File System
+ uart.printf("Checking File System\n");
+ DIR *d = opendir("/sdc/");
+ if (d != NULL) {
+ uart.printf("SD Card Present\n");
+ closedir(d);
+ } else {
+ uart.printf("SD Card Root Directory Not Found\n");
+ }
+ ledTick.attach(&ledTickfunc,1);
- if(myFTP.open("192.168.77.210", 21, "user", "pass"))
+ while(1)
{
- printf("Connect Success to FTPServer\r\n");
- }
- myFTP.ls(myfilelist);
-
-
- if(*myfilelist !=0)
- {
- tok = myfilelist;
- while(tok)
+ if(ftp_time_1s == 0)
{
- tok = strtok_r(tok,"\r\n",&lasts);
- if(tok != NULL)
+ //Configure the display driver
+ ftp_time_1s = 1;
+ TFT.background(Black);
+ TFT.foreground(White);
+ TFT.set_font((unsigned char*) Arial12x12);
+ TFT.cls();
+
+ TFT.locate(0,0);
+ TFT.printf(" UPDATING PHOTO\n");
+ TFT.printf("==================\n\n");
+
+ if(myFTP.open("192.168.77.210", 21, "user", "pass"))
{
- printf("tok=%s\r\n",tok);
- if(strstr(tok,"bmp"))
+ printf("Connect Success to FTPServer\r\n");
+ TFT.printf("Connected to FTP Server\n");
+
+ myFTP.ls(myfilelist);
+
+ if(*myfilelist !=0)
{
- sprintf(filename,"/sdc/%s",tok);
+ tok = myfilelist;
+ while(tok)
+ {
+ tok = strtok_r(tok,"\r\n",&lasts);
+ if(tok != NULL)
+ {
+ printf("tok=%s\r\n",tok);
+ if(strstr(tok,"bmp"))
+ {
+ sprintf(filename,"/sdc/%s",tok);
+ fp = fopen(filename, "r");
+ printf("fp=%d\r\n",fp);
+ if(fp==NULL)
+ {
+ myFTP.getfile(tok);
+ printf("Get File : %s\r\n",tok);
+ TFT.printf(" New file : %s\n", tok);
+ }
+ else fclose(fp);
+ }
+ tok = lasts;
+ }
+ }
+ }
+ else TFT.printf(" Empty FTP Server\n");
+ TFT.printf("\n UPDATE DONE\n");
+ myFTP.quit();
+ }
+ else
+ {
+ TFT.printf(" Can't connect to FTP Server\n\n");
+ TFT.printf(" UPDATE FAIL\n");
+ }
+ TFT.printf("==================\n");
+ }
+
+ d = opendir("/sdc/");
+ if(d != NULL)
+ {
+ struct dirent *p;
+ while((p = readdir(d)) != NULL)
+ {
+ sprintf(filename, "/sdc/%s", p->d_name);
+ uart.printf("%s\n", filename);
+ DIR *subDir = opendir(filename);
+ if (subDir != NULL) uart.printf("Skip a sub-directory\r\n");
+ else
+ {
fp = fopen(filename, "r");
- printf("fp=%d\r\n",fp);
- if(fp==NULL)
+ if(fp)
{
- myFTP.getfile(tok);
- printf("Get File : %s\r\n",tok);
+ TFT.DrawBitmapFile(fp);
+ TFT.locate(1,1);
+ TFT.printf("%s", filename);
+ fclose(fp);
}
- else fclose(fp);
+ else uart.printf("Can't open file %s\r\n", filename);
}
- tok = lasts;
}
-
+ }
+ else
+ {
+ TFT.cls();
+ TFT.locate(0,0);
+ TFT.printf(" No SD Card !!!\n");
+ TFT.printf(" Insert a SD card\n");
}
}
- myFTP.quit();
-
-/*
- struct dirent *p;
- while((p = readdir(d)) != NULL) {
- sprintf(dirName, "%s/%s", fileName, p->d_name);
- uart.printf("%s\n", dirName);
- DIR *subDir = opendir(dirName);
- if (subDir != NULL) {
- sprintf(httpHeader,"<li><a href=\"./%s/\">%s/</a></li>", p->d_name, p->d_name);
- } else {
- sprintf(httpHeader,"<li><a href=\"./%s\">%s</a></li>", p->d_name, p->d_name);
- }
- client.send(httpHeader,strlen(httpHeader));
- }
-*/
-
- for(int i=0; i < 4; i++)
- {
- TFT.set_orientation(i);
- fp = fopen("/sdc/island.bmp", "r");
- if((ret = TFT.DrawBitmapFile(fp)) < 0)
- {
- printf("error : %d\r\n",ret);
- }
- fclose(fp);
- TFT.locate(120-6*strlen("islasn.bmp"),308);
- TFT.printf("red24.bmp");
- fp = fopen("/sdc/tiger24.bmp", "r");
- if((ret = TFT.DrawBitmapFile(fp)) < 0)
- {
- printf("error : %d\r\n",ret);
- }
- fclose(fp);
- TFT.locate(120-6*strlen("tiger24.bmp"),308);
- TFT.printf("tiger24.bmp");
- printf("press key");getchar();
- }
+
}