Kazuo Tsubaki
/
ESP-WROOM-02_test
Very simple example using ESP-WROOM-02 (ESP-8266) from LPC1114
ESP8266/ESP8266.cpp@0:e450010334e1, 2016-05-13 (annotated)
- Committer:
- kazz12211
- Date:
- Fri May 13 12:05:34 2016 +0000
- Revision:
- 0:e450010334e1
Use ESP-WROOM-02 (ESP-8266) from LPC1114 using SoftSerial.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kazz12211 | 0:e450010334e1 | 1 | #include "ESP8266.h" |
kazz12211 | 0:e450010334e1 | 2 | |
kazz12211 | 0:e450010334e1 | 3 | #define LOG_DEBUG(s) if(logger != NULL) { logger->printf("%s\r\n", s); }; |
kazz12211 | 0:e450010334e1 | 4 | |
kazz12211 | 0:e450010334e1 | 5 | ESP8266::ESP8266(SoftSerial *s) { |
kazz12211 | 0:e450010334e1 | 6 | stream = s; |
kazz12211 | 0:e450010334e1 | 7 | } |
kazz12211 | 0:e450010334e1 | 8 | |
kazz12211 | 0:e450010334e1 | 9 | ESP8266::~ESP8266() { |
kazz12211 | 0:e450010334e1 | 10 | } |
kazz12211 | 0:e450010334e1 | 11 | |
kazz12211 | 0:e450010334e1 | 12 | void ESP8266::setLogger(Serial *l) { |
kazz12211 | 0:e450010334e1 | 13 | logger = l; |
kazz12211 | 0:e450010334e1 | 14 | } |
kazz12211 | 0:e450010334e1 | 15 | |
kazz12211 | 0:e450010334e1 | 16 | bool ESP8266::_ok() { |
kazz12211 | 0:e450010334e1 | 17 | return (strstr(replybuffer, "OK\r\n") != NULL); |
kazz12211 | 0:e450010334e1 | 18 | } |
kazz12211 | 0:e450010334e1 | 19 | |
kazz12211 | 0:e450010334e1 | 20 | bool ESP8266::nop() { |
kazz12211 | 0:e450010334e1 | 21 | sendRequest("AT\r\n"); |
kazz12211 | 0:e450010334e1 | 22 | timeout=20; |
kazz12211 | 0:e450010334e1 | 23 | getReply(); |
kazz12211 | 0:e450010334e1 | 24 | return _ok(); |
kazz12211 | 0:e450010334e1 | 25 | } |
kazz12211 | 0:e450010334e1 | 26 | |
kazz12211 | 0:e450010334e1 | 27 | bool ESP8266::reset() { |
kazz12211 | 0:e450010334e1 | 28 | LOG_DEBUG("Reset & get Firmware"); |
kazz12211 | 0:e450010334e1 | 29 | sendRequest("AT+RST\r\n"); |
kazz12211 | 0:e450010334e1 | 30 | timeout=200; |
kazz12211 | 0:e450010334e1 | 31 | getReply(); |
kazz12211 | 0:e450010334e1 | 32 | LOG_DEBUG(replybuffer); |
kazz12211 | 0:e450010334e1 | 33 | return _ok(); |
kazz12211 | 0:e450010334e1 | 34 | } |
kazz12211 | 0:e450010334e1 | 35 | |
kazz12211 | 0:e450010334e1 | 36 | void ESP8266::version() { |
kazz12211 | 0:e450010334e1 | 37 | LOG_DEBUG("Get Version"); |
kazz12211 | 0:e450010334e1 | 38 | sendRequest("AT+GMR\r\n"); |
kazz12211 | 0:e450010334e1 | 39 | timeout=200; |
kazz12211 | 0:e450010334e1 | 40 | getReply(); |
kazz12211 | 0:e450010334e1 | 41 | LOG_DEBUG(replybuffer); |
kazz12211 | 0:e450010334e1 | 42 | } |
kazz12211 | 0:e450010334e1 | 43 | |
kazz12211 | 0:e450010334e1 | 44 | // 1=Station, 2=AP, 3=BOTH, default=Station |
kazz12211 | 0:e450010334e1 | 45 | bool ESP8266::mode(int mode) { |
kazz12211 | 0:e450010334e1 | 46 | char cmd[255]; |
kazz12211 | 0:e450010334e1 | 47 | sprintf(cmd, "AT+CWMODE=%d\r\n", mode); |
kazz12211 | 0:e450010334e1 | 48 | sendRequest(cmd); |
kazz12211 | 0:e450010334e1 | 49 | timeout=60; |
kazz12211 | 0:e450010334e1 | 50 | getReply(); |
kazz12211 | 0:e450010334e1 | 51 | LOG_DEBUG(replybuffer); |
kazz12211 | 0:e450010334e1 | 52 | return _ok(); |
kazz12211 | 0:e450010334e1 | 53 | } |
kazz12211 | 0:e450010334e1 | 54 | |
kazz12211 | 0:e450010334e1 | 55 | // 0=Single, 1=Multi |
kazz12211 | 0:e450010334e1 | 56 | bool ESP8266::connectionMode(int connMode) { |
kazz12211 | 0:e450010334e1 | 57 | char cmd[255]; |
kazz12211 | 0:e450010334e1 | 58 | sprintf(cmd, "AT+CIPMUX=%d\r\n", connMode); |
kazz12211 | 0:e450010334e1 | 59 | sendRequest(cmd); |
kazz12211 | 0:e450010334e1 | 60 | timeout=80; |
kazz12211 | 0:e450010334e1 | 61 | getReply(); |
kazz12211 | 0:e450010334e1 | 62 | LOG_DEBUG(replybuffer); |
kazz12211 | 0:e450010334e1 | 63 | return _ok(); |
kazz12211 | 0:e450010334e1 | 64 | } |
kazz12211 | 0:e450010334e1 | 65 | |
kazz12211 | 0:e450010334e1 | 66 | void ESP8266::connectionStatus() { |
kazz12211 | 0:e450010334e1 | 67 | LOG_DEBUG("Get Connection Status"); |
kazz12211 | 0:e450010334e1 | 68 | sendRequest("AT+CIPSTA?\r\n"); |
kazz12211 | 0:e450010334e1 | 69 | timeout=100; |
kazz12211 | 0:e450010334e1 | 70 | getReply(); |
kazz12211 | 0:e450010334e1 | 71 | LOG_DEBUG(replybuffer); |
kazz12211 | 0:e450010334e1 | 72 | } |
kazz12211 | 0:e450010334e1 | 73 | |
kazz12211 | 0:e450010334e1 | 74 | bool ESP8266::config() { |
kazz12211 | 0:e450010334e1 | 75 | timeout=1000; getcount=600; |
kazz12211 | 0:e450010334e1 | 76 | wait(1); |
kazz12211 | 0:e450010334e1 | 77 | |
kazz12211 | 0:e450010334e1 | 78 | if(!nop()) |
kazz12211 | 0:e450010334e1 | 79 | return false; |
kazz12211 | 0:e450010334e1 | 80 | wait(1); |
kazz12211 | 0:e450010334e1 | 81 | |
kazz12211 | 0:e450010334e1 | 82 | version(); |
kazz12211 | 0:e450010334e1 | 83 | wait(3); |
kazz12211 | 0:e450010334e1 | 84 | |
kazz12211 | 0:e450010334e1 | 85 | if(!mode(1)) |
kazz12211 | 0:e450010334e1 | 86 | return false; |
kazz12211 | 0:e450010334e1 | 87 | wait(2); |
kazz12211 | 0:e450010334e1 | 88 | |
kazz12211 | 0:e450010334e1 | 89 | if(!connectionMode(1)) |
kazz12211 | 0:e450010334e1 | 90 | return false; |
kazz12211 | 0:e450010334e1 | 91 | wait(2); |
kazz12211 | 0:e450010334e1 | 92 | |
kazz12211 | 0:e450010334e1 | 93 | return true; |
kazz12211 | 0:e450010334e1 | 94 | } |
kazz12211 | 0:e450010334e1 | 95 | |
kazz12211 | 0:e450010334e1 | 96 | bool ESP8266::connect(char *ssid, char *password) { |
kazz12211 | 0:e450010334e1 | 97 | char cmd[256]; |
kazz12211 | 0:e450010334e1 | 98 | LOG_DEBUG("Connecting"); |
kazz12211 | 0:e450010334e1 | 99 | strcpy(cmd, "AT+CWJAP=\""); |
kazz12211 | 0:e450010334e1 | 100 | strcat(cmd, ssid); |
kazz12211 | 0:e450010334e1 | 101 | strcat(cmd, "\",\""); |
kazz12211 | 0:e450010334e1 | 102 | strcat(cmd, password); |
kazz12211 | 0:e450010334e1 | 103 | strcat(cmd, "\"\r\n"); |
kazz12211 | 0:e450010334e1 | 104 | LOG_DEBUG(cmd); |
kazz12211 | 0:e450010334e1 | 105 | sendRequest(cmd); |
kazz12211 | 0:e450010334e1 | 106 | timeout=10000; |
kazz12211 | 0:e450010334e1 | 107 | getReply(); |
kazz12211 | 0:e450010334e1 | 108 | |
kazz12211 | 0:e450010334e1 | 109 | wait(5); |
kazz12211 | 0:e450010334e1 | 110 | |
kazz12211 | 0:e450010334e1 | 111 | return _ok(); |
kazz12211 | 0:e450010334e1 | 112 | } |
kazz12211 | 0:e450010334e1 | 113 | |
kazz12211 | 0:e450010334e1 | 114 | void ESP8266::sendRequest(char *req) { |
kazz12211 | 0:e450010334e1 | 115 | strcpy(cmdbuffer, req); |
kazz12211 | 0:e450010334e1 | 116 | sendCmd(); |
kazz12211 | 0:e450010334e1 | 117 | } |
kazz12211 | 0:e450010334e1 | 118 | |
kazz12211 | 0:e450010334e1 | 119 | char *ESP8266::readResponse() { |
kazz12211 | 0:e450010334e1 | 120 | getReply(); |
kazz12211 | 0:e450010334e1 | 121 | return replybuffer; |
kazz12211 | 0:e450010334e1 | 122 | } |
kazz12211 | 0:e450010334e1 | 123 | |
kazz12211 | 0:e450010334e1 | 124 | |
kazz12211 | 0:e450010334e1 | 125 | void ESP8266::sendCmd() { |
kazz12211 | 0:e450010334e1 | 126 | stream->printf("%s", cmdbuffer); |
kazz12211 | 0:e450010334e1 | 127 | } |
kazz12211 | 0:e450010334e1 | 128 | |
kazz12211 | 0:e450010334e1 | 129 | void ESP8266::getReply() { |
kazz12211 | 0:e450010334e1 | 130 | memset(replybuffer, '\0', sizeof(replybuffer)); |
kazz12211 | 0:e450010334e1 | 131 | replycount = 0; |
kazz12211 | 0:e450010334e1 | 132 | t.reset(); t.start(); |
kazz12211 | 0:e450010334e1 | 133 | while(t.read_ms() < timeout && replycount < getcount) { |
kazz12211 | 0:e450010334e1 | 134 | if(stream->readable()) { |
kazz12211 | 0:e450010334e1 | 135 | replybuffer[replycount] = stream->getc(); |
kazz12211 | 0:e450010334e1 | 136 | replycount++; |
kazz12211 | 0:e450010334e1 | 137 | } |
kazz12211 | 0:e450010334e1 | 138 | } |
kazz12211 | 0:e450010334e1 | 139 | } |
kazz12211 | 0:e450010334e1 | 140 |