Library for using the Wifi module ESP8266, first version with basic commands, soon new commands will be added
Dependents: PIR_Sensor_wifi myESP8266forLOstFound Motin_Activated_Temperature_Humidity_BluetoothHC-06_ESP8266_IOT 1Project3_Robot1_Final ... more
Library updated in Dec 28, 2014. Now the ESP baudrate is passed as a parameter in the constructor. Also, some new functions were added. Here is an example code:
ESP8266 example code
#include "mbed.h" #include <string> #include "ESP8266.h" // Objects Serial pc(USBTX, USBRX); ESP8266 esp(PTE0, PTE1, 115200); // Global variables char snd[255], rcv[1000]; // Strings for sending and receiving commands / data / replies int main() { pc.baud(115200); pc.printf("START\r\n"); wait(3); pc.printf("Reset ESP\r\n"); esp.Reset(); esp.RcvReply(rcv, 400); pc.printf("%s", rcv); wait(2); pc.printf("Sending AT\r\n"); strcpy(snd, "AT"); esp.SendCMD(snd); esp.RcvReply(rcv, 400); pc.printf("%s", rcv); wait(2); pc.printf("Set mode to AP\r\n"); esp.SetMode(1); esp.RcvReply(rcv, 1000); pc.printf("%s", rcv); pc.printf("Receiving Wifi List\r\n"); esp.GetList(rcv); pc.printf("%s", rcv); pc.printf("Connecting to AP\r\n"); esp.Join("MyAP", "MyPasswd"); // Replace MyAP and MyPasswd with your SSID and password esp.RcvReply(rcv, 1000); pc.printf("%s", rcv); wait(8); pc.printf("Getting IP\r\n"); esp.GetIP(rcv); pc.printf("%s", rcv); pc.printf("Setting multiple connections\r\n"); esp.SetMultiple(); esp.RcvReply(rcv, 1000); pc.printf("%s", rcv); pc.printf("Getting Connection Status\r\n"); esp.GetConnStatus(rcv); pc.printf("%s", rcv); pc.printf("Start server mode on port 80\r\n"); esp.StartServerMode(80); esp.RcvReply(rcv, 1000); pc.printf("%s", rcv); wait(4); pc.printf("Close server mode\r\n"); esp.CloseServerMode(); esp.RcvReply(rcv, 1000); pc.printf("THE END"); while(1); }
ESP8266.cpp
- Committer:
- quevedo
- Date:
- 2014-12-17
- Revision:
- 1:399414d48048
- Parent:
- 0:e58f27687450
- Child:
- 2:77388e8f0697
File content as of revision 1:399414d48048:
#include "ESP8266.h" // Constructor ESP8266::ESP8266(PinName tx, PinName rx) : comm(tx, rx) { comm.baud(115200); } // Destructor ESP8266::~ESP8266() { } // Add <CR> + <LF> at the end of the string void ESP8266::AddEOL(char * s) { char k; k = strlen(s); // Finds position of NULL character s[k] = 0x0D; // switch NULL for <CR> s[k + 1] = 0x0A; // Add <LF> s[k + 2] = 0; // Add NULL at the end } // Add one ASCII character at the end of the string void ESP8266::AddChar(char * s, char c) { char k; k = strlen(s); s[k] = c; s[k + 1] = 0; } // Sends command to ESP8266. Receives the command string void ESP8266::SendCMD(char * s) { AddEOL(s); comm.printf("%s", s); } // Resets the ESP8266 void ESP8266::Reset(void) { char rs[10]; strcpy(rs, "AT+RST"); SendCMD(rs); } // Receive reply until no character is received after a given timeout in miliseconds void ESP8266::RcvReply(char * r, int to) { Timer t; bool ended = 0; char c; strcpy(r, ""); t.start(); while(!ended) { if(comm.readable()) { c = comm.getc(); AddChar(r, c); t.start(); } if(t.read_ms() > to) { ended = 1; } } AddChar(r, 0x00); } // Gets the AP list. Parameter: the string to receive the list void ESP8266::GetList(char * l) { char rs[15]; strcpy(rs, "AT+CWLAP"); SendCMD(rs); RcvReply(l, 5000); // Needs big timeout because it takes long to start replying } // Joins a Wifi AP. Parameters: SSID and Password (strings) void ESP8266::Join(char * id, char * pwd) { char cmd[255]; strcpy(cmd, "AT+CWJAP="); AddChar(cmd, 0x22); strcat(cmd, id); AddChar(cmd, 0x22); AddChar(cmd, 0x2C); AddChar(cmd, 0x22); strcat(cmd, pwd); AddChar(cmd, 0x22); SendCMD(cmd); } // Gets ESP IP. Parameter: string to contain IP void ESP8266::GetIP(char * ip) { char cmd[15]; strcpy(cmd, "AT+CIFSR"); SendCMD(cmd); RcvReply(ip, 2000); } //Defines wifi mode; Parameter: mode; 1= STA, 2= AP, 3=both void ESP8266::SetMode(char mode) { char cmd[15]; strcpy(cmd, "AT+CWMODE="); mode = mode + 0x30; // Converts number into corresponding ASCII character AddChar(cmd, mode); // Completes command string SendCMD(cmd); } // Quits the AP void ESP8266::Quit(void) { char cmd[15]; strcpy(cmd, "AT+CWQAP"); SendCMD(cmd); } // Sets single connection void ESP8266::SetSingle(void) { char cmd[15]; strcpy(cmd, "AT+CIPMUX=0"); SendCMD(cmd); } // Sets multiple connection void ESP8266::SetMultiple(void) { char rs[15]; strcpy(rs, "AT+CIPMUX=1"); SendCMD(rs); }