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
main.cpp@7:dceeeeca2741, 2015-08-06 (annotated)
- 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?
User | Revision | Line number | New 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&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 | } |