Very simple example using ESP-WROOM-02 (ESP-8266) from LPC1114

Dependencies:   SoftSerial mbed

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?

UserRevisionLine numberNew 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