This example codes uses the wolfssl library to get hastags from Twitter by using the FRDM-K64F board from Freescale

Dependencies:   EthernetInterface-FRDM HTTPClient mbed-rtos mbed wolfSSL WDT_K64F

Fork of SimpleHTTPSClient by wolf SSL

Committer:
lgarabo
Date:
Thu Aug 06 00:39:07 2015 +0000
Revision:
7:dceeeeca2741
Parent:
5:4d53cdfe94c4
Added watchdog timer for 60 seconds. This prevents to stuck when HTTPS doesn't answer.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:dadab10758d2 1 #include "mbed.h"
wolfSSL 0:dadab10758d2 2 #include "EthernetInterface.h"
wolfSSL 0:dadab10758d2 3 #include "HTTPClient.h"
lgarabo 7:dceeeeca2741 4 #include "Watchdog.h"
wolfSSL 0:dadab10758d2 5
wolfSSL 0:dadab10758d2 6 EthernetInterface eth;
wolfSSL 0:dadab10758d2 7 HTTPClient http;
lgarabo 5:4d53cdfe94c4 8 DigitalOut led1(LED1);
lgarabo 7:dceeeeca2741 9 Watchdog wdt;
lgarabo 5:4d53cdfe94c4 10
lgarabo 5:4d53cdfe94c4 11 char recvBuff[1024*40];
wolfSSL 0:dadab10758d2 12
wolfSSL 3:41412e91afb0 13 void getline(char *line, int size) {
wolfSSL 3:41412e91afb0 14 for(int i=0; i<size; i++) {
wolfSSL 3:41412e91afb0 15 if((line[i] = getchar()) == '\r') {
wolfSSL 3:41412e91afb0 16 line[i] = '\0' ;
wolfSSL 3:41412e91afb0 17 putchar('\n') ;
wolfSSL 3:41412e91afb0 18 break ;
wolfSSL 3:41412e91afb0 19 } else putchar(line[i]) ;
wolfSSL 3:41412e91afb0 20 }
wolfSSL 3:41412e91afb0 21 }
wolfSSL 3:41412e91afb0 22
lgarabo 5:4d53cdfe94c4 23 unsigned long long atoll(char *instr)
lgarabo 5:4d53cdfe94c4 24 {
lgarabo 5:4d53cdfe94c4 25 unsigned long long retval;
lgarabo 5:4d53cdfe94c4 26 //int i;
lgarabo 5:4d53cdfe94c4 27
lgarabo 5:4d53cdfe94c4 28 retval = 0;
lgarabo 5:4d53cdfe94c4 29 for (; *instr; instr++) {
lgarabo 5:4d53cdfe94c4 30 retval = 10*retval + (*instr - '0');
lgarabo 5:4d53cdfe94c4 31 }
lgarabo 5:4d53cdfe94c4 32 return retval;
lgarabo 5:4d53cdfe94c4 33 }
lgarabo 5:4d53cdfe94c4 34
lgarabo 5:4d53cdfe94c4 35 void baud(int baudrate) {
lgarabo 5:4d53cdfe94c4 36 Serial s(USBTX, USBRX);
lgarabo 5:4d53cdfe94c4 37 s.baud(baudrate);
lgarabo 5:4d53cdfe94c4 38 }
lgarabo 5:4d53cdfe94c4 39
wolfSSL 2:071a8275fa40 40 void net_main(void const *av)
wolfSSL 0:dadab10758d2 41 {
wolfSSL 0:dadab10758d2 42 int ret ;
lgarabo 5:4d53cdfe94c4 43 //char substr[10];
lgarabo 5:4d53cdfe94c4 44 char *found;
lgarabo 5:4d53cdfe94c4 45 char twitteTag[] = "data-time=";
lgarabo 5:4d53cdfe94c4 46 char createDate[11] = {0};
lgarabo 5:4d53cdfe94c4 47 unsigned long long dataTime = 0;
lgarabo 5:4d53cdfe94c4 48 unsigned long long lastdataTime = 1438467674;
lgarabo 7:dceeeeca2741 49
lgarabo 7:dceeeeca2741 50 wdt.kick(60); //init the watchdog for a 60 second timeout
lgarabo 7:dceeeeca2741 51
wolfSSL 0:dadab10758d2 52 eth.init(); //Use DHCP
lgarabo 5:4d53cdfe94c4 53
lgarabo 5:4d53cdfe94c4 54 printf("HTTPS Client, Starting,...\n\r") ;
wolfSSL 0:dadab10758d2 55 while(1) {
wolfSSL 0:dadab10758d2 56 if(eth.connect() == 0)break ;
wolfSSL 0:dadab10758d2 57 printf("Retry\n") ;
wolfSSL 0:dadab10758d2 58 }
lgarabo 5:4d53cdfe94c4 59
lgarabo 5:4d53cdfe94c4 60 while(1)
lgarabo 5:4d53cdfe94c4 61 {
lgarabo 5:4d53cdfe94c4 62 /*** HTTPS (SSL) ***/
lgarabo 5:4d53cdfe94c4 63 printf("\nFetching HTTPS\n\r");
lgarabo 5:4d53cdfe94c4 64 //ret = http.get("https://twitter.com/fsl_mcu.html", recvBuff, sizeof(recvBuff));
lgarabo 5:4d53cdfe94c4 65 ret = http.get("https://twitter.com/hashtag/tweetforacandy?f=tweets&amp;src=hash", recvBuff, sizeof(recvBuff),HTTP_CLIENT_DEFAULT_TIMEOUT);
lgarabo 5:4d53cdfe94c4 66 if (!ret) {
lgarabo 5:4d53cdfe94c4 67 printf("Result: %s\n\r", recvBuff);
lgarabo 5:4d53cdfe94c4 68 found = strstr(recvBuff, twitteTag);
lgarabo 5:4d53cdfe94c4 69 snprintf(createDate, sizeof (createDate), found+11);
lgarabo 5:4d53cdfe94c4 70 dataTime = atoll(createDate);
lgarabo 5:4d53cdfe94c4 71 printf("The data-time: %s\r\n", createDate);
lgarabo 5:4d53cdfe94c4 72
lgarabo 5:4d53cdfe94c4 73 if (lastdataTime < dataTime)
lgarabo 5:4d53cdfe94c4 74 {
lgarabo 5:4d53cdfe94c4 75 //Give the candy here!!
lgarabo 7:dceeeeca2741 76 printf("\n\rGiving a candy!!\n\r");
lgarabo 5:4d53cdfe94c4 77 led1 = 0;
lgarabo 5:4d53cdfe94c4 78 lastdataTime = dataTime;
lgarabo 5:4d53cdfe94c4 79 wait(1);
lgarabo 5:4d53cdfe94c4 80 led1 = 1;
lgarabo 5:4d53cdfe94c4 81 }
lgarabo 5:4d53cdfe94c4 82 } else {
lgarabo 5:4d53cdfe94c4 83 printf("Error - ret = %d - HTTP return code = %d\n\r", ret, http.getHTTPResponseCode());
lgarabo 5:4d53cdfe94c4 84 }
lgarabo 7:dceeeeca2741 85 wait(15);
lgarabo 7:dceeeeca2741 86 wdt.kick(); //kick the watchdog before 60 seconds is up
wolfSSL 0:dadab10758d2 87 }
wolfSSL 0:dadab10758d2 88 eth.disconnect();
wolfSSL 2:071a8275fa40 89 }
wolfSSL 2:071a8275fa40 90
wolfSSL 2:071a8275fa40 91 main()
wolfSSL 2:071a8275fa40 92 {
lgarabo 5:4d53cdfe94c4 93 led1 = 1;
lgarabo 5:4d53cdfe94c4 94 baud (115200);
lgarabo 5:4d53cdfe94c4 95
wolfSSL 2:071a8275fa40 96 #define STACK_SIZE 20000
lgarabo 5:4d53cdfe94c4 97 Thread t(net_main, NULL, osPriorityNormal, STACK_SIZE);
wolfSSL 2:071a8275fa40 98 while (true) {
lgarabo 5:4d53cdfe94c4 99 Thread::wait(2000);
wolfSSL 2:071a8275fa40 100 }
wolfSSL 3:41412e91afb0 101 }