ESP8266 ESP-01 moduel WiFi client demo with LPC1768
Dependencies: BreathLed BufferedSerial ESP8266 mbed
main.cpp@0:1e99d872e742, 2015-05-03 (annotated)
- Committer:
- steeven
- Date:
- Sun May 03 14:48:12 2015 +0000
- Revision:
- 0:1e99d872e742
init version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
steeven | 0:1e99d872e742 | 1 | #include "mbed.h" |
steeven | 0:1e99d872e742 | 2 | #include "BreathLed/BreathLed.h" |
steeven | 0:1e99d872e742 | 3 | #include "ESP8266/Esp8266.h" |
steeven | 0:1e99d872e742 | 4 | #include "BufferedSerial/BufferedSerial.h" |
steeven | 0:1e99d872e742 | 5 | |
steeven | 0:1e99d872e742 | 6 | using namespace steeven; |
steeven | 0:1e99d872e742 | 7 | |
steeven | 0:1e99d872e742 | 8 | /* |
steeven | 0:1e99d872e742 | 9 | * ESP8266 demo that: |
steeven | 0:1e99d872e742 | 10 | * 1. accept host name from console, print http request result |
steeven | 0:1e99d872e742 | 11 | * 2. print AT command result from console |
steeven | 0:1e99d872e742 | 12 | * Press user button on LPC1768 to switch mode and debug level, see console prompt |
steeven | 0:1e99d872e742 | 13 | */ |
steeven | 0:1e99d872e742 | 14 | |
steeven | 0:1e99d872e742 | 15 | BreathLed led4(LED4); |
steeven | 0:1e99d872e742 | 16 | DigitalOut led1(LED1); //0:no log, 1:log |
steeven | 0:1e99d872e742 | 17 | DigitalOut led2(LED2); //2:dbg 1, 3:dbg 2 |
steeven | 0:1e99d872e742 | 18 | DigitalOut led3(LED3); //input host or cmd |
steeven | 0:1e99d872e742 | 19 | InterruptIn btn(P2_8); //UBTN |
steeven | 0:1e99d872e742 | 20 | |
steeven | 0:1e99d872e742 | 21 | BufferedSerial pc(USBTX, USBRX, 256, 20); |
steeven | 0:1e99d872e742 | 22 | Esp8266 wifi(p28, p27, p29, p26); |
steeven | 0:1e99d872e742 | 23 | |
steeven | 0:1e99d872e742 | 24 | void on_btn(void) { |
steeven | 0:1e99d872e742 | 25 | |
steeven | 0:1e99d872e742 | 26 | int n = (led3 << 2) + (led2 << 1) + led1; |
steeven | 0:1e99d872e742 | 27 | n++; |
steeven | 0:1e99d872e742 | 28 | led3 = (n >> 2) & 1; |
steeven | 0:1e99d872e742 | 29 | led2 = (n >> 1) & 1; |
steeven | 0:1e99d872e742 | 30 | led1 = (n >> 0) & 1; |
steeven | 0:1e99d872e742 | 31 | wifi.set_log((n & 7) > 0 ? &pc : NULL, (n & 3) - 1); |
steeven | 0:1e99d872e742 | 32 | if (wifi._dbg == -1) |
steeven | 0:1e99d872e742 | 33 | wifi.set_log(wifi._logger, 0); |
steeven | 0:1e99d872e742 | 34 | pc.printf("log:%d dbg:%d mode:%s\n", wifi._logger == NULL ? 0 : 1, |
steeven | 0:1e99d872e742 | 35 | wifi._dbg, led3 > 0 ? "host" : "cmd"); |
steeven | 0:1e99d872e742 | 36 | |
steeven | 0:1e99d872e742 | 37 | } |
steeven | 0:1e99d872e742 | 38 | |
steeven | 0:1e99d872e742 | 39 | char *trim(char *buf) { |
steeven | 0:1e99d872e742 | 40 | int len = strlen(buf); |
steeven | 0:1e99d872e742 | 41 | int i; |
steeven | 0:1e99d872e742 | 42 | for (i = len - 1; i >= 0; i--) { |
steeven | 0:1e99d872e742 | 43 | if (buf[i] == '\r' || buf[i] == '\n' || buf[i] == '\t' || buf[i] == ' ') |
steeven | 0:1e99d872e742 | 44 | buf[i] = 0; |
steeven | 0:1e99d872e742 | 45 | else |
steeven | 0:1e99d872e742 | 46 | break; |
steeven | 0:1e99d872e742 | 47 | } |
steeven | 0:1e99d872e742 | 48 | return buf; |
steeven | 0:1e99d872e742 | 49 | } |
steeven | 0:1e99d872e742 | 50 | |
steeven | 0:1e99d872e742 | 51 | void ipd_cb(char *buf, int len) { |
steeven | 0:1e99d872e742 | 52 | if (buf != NULL) { |
steeven | 0:1e99d872e742 | 53 | pc.printf("\n-----------HTTP data len: %d----------\n", len); |
steeven | 0:1e99d872e742 | 54 | /* WARNNING: print data to console will cause data lost for big pages */ |
steeven | 0:1e99d872e742 | 55 | buf[len] = 0; |
steeven | 0:1e99d872e742 | 56 | pc.puts(buf); |
steeven | 0:1e99d872e742 | 57 | } else { |
steeven | 0:1e99d872e742 | 58 | pc.puts("===================END====================\n"); |
steeven | 0:1e99d872e742 | 59 | } |
steeven | 0:1e99d872e742 | 60 | } |
steeven | 0:1e99d872e742 | 61 | |
steeven | 0:1e99d872e742 | 62 | int main() { |
steeven | 0:1e99d872e742 | 63 | char buf[256]; |
steeven | 0:1e99d872e742 | 64 | char tx[256]; |
steeven | 0:1e99d872e742 | 65 | int r; |
steeven | 0:1e99d872e742 | 66 | char *cmd; |
steeven | 0:1e99d872e742 | 67 | |
steeven | 0:1e99d872e742 | 68 | pc.baud(115200); |
steeven | 0:1e99d872e742 | 69 | pc.printf("starting...\n"); |
steeven | 0:1e99d872e742 | 70 | |
steeven | 0:1e99d872e742 | 71 | led4.loop(0.5, 0.2); |
steeven | 0:1e99d872e742 | 72 | btn.fall(on_btn); |
steeven | 0:1e99d872e742 | 73 | |
steeven | 0:1e99d872e742 | 74 | // wifi.set_log(&pc, 0); |
steeven | 0:1e99d872e742 | 75 | |
steeven | 0:1e99d872e742 | 76 | wifi.init(); |
steeven | 0:1e99d872e742 | 77 | wifi.switchClientMode(1); |
steeven | 0:1e99d872e742 | 78 | |
steeven | 0:1e99d872e742 | 79 | wifi.cmd_data("AT+CWLAP"); //list Routers |
steeven | 0:1e99d872e742 | 80 | |
steeven | 0:1e99d872e742 | 81 | wifi.connect("steeven@qp", "xxxxxx"); |
steeven | 0:1e99d872e742 | 82 | |
steeven | 0:1e99d872e742 | 83 | // http://releases.ubuntu.com/14.10/MD5SUMS |
steeven | 0:1e99d872e742 | 84 | wifi.send("releases.ubuntu.com", 80, "GET /14.10/MD5SUMS HTTP/1.1\r\nHOST: releases.ubuntu.com\r\n\r\n", ipd_cb); |
steeven | 0:1e99d872e742 | 85 | |
steeven | 0:1e99d872e742 | 86 | // wifi.send("g.cn", 80, "GET / HTTP/1.1\r\nHOST: g.cn\r\n\r\n", ipd_cb); |
steeven | 0:1e99d872e742 | 87 | |
steeven | 0:1e99d872e742 | 88 | while (1) { |
steeven | 0:1e99d872e742 | 89 | pc.readl(buf, sizeof(buf)); |
steeven | 0:1e99d872e742 | 90 | cmd = trim(buf); |
steeven | 0:1e99d872e742 | 91 | if (led3.read() == 1) |
steeven | 0:1e99d872e742 | 92 | wifi.cmd_data(cmd); |
steeven | 0:1e99d872e742 | 93 | else { |
steeven | 0:1e99d872e742 | 94 | sprintf(tx, "GET / HTTP/1.1\r\nHOST: %s\r\n\r\n", cmd); |
steeven | 0:1e99d872e742 | 95 | if ((r = wifi.send(cmd, 80, tx, |
steeven | 0:1e99d872e742 | 96 | (led1 == 0 && led2 == 0) ? ipd_cb : NULL)) <= 0) |
steeven | 0:1e99d872e742 | 97 | pc.printf("========== Error: %d ==========\n", r); |
steeven | 0:1e99d872e742 | 98 | } |
steeven | 0:1e99d872e742 | 99 | } |
steeven | 0:1e99d872e742 | 100 | } |
steeven | 0:1e99d872e742 | 101 | |
steeven | 0:1e99d872e742 | 102 |