Libreria basica para el manejo del ESP01
Dependents: Gateway_Cotosys Gateway_Cotosys_os5
ESP01.cpp
- Committer:
- Thrillex13
- Date:
- 2020-01-06
- Revision:
- 9:21290fc75c17
- Parent:
- 8:ef9014a530cf
File content as of revision 9:21290fc75c17:
#include "ESP01.h" // Constructor ESP01::ESP01(PinName tx, PinName rx, int br) : comm(tx, rx) { comm.baud(br); } // Destructor ESP01::~ESP01() { } // Add <CR> + <LF> at the end of the string void ESP01::AddEOL(char * s) { char k = strlen(s); // Finds position of NULL character s[k] = '\r'; // switch NULL for <CR> s[k + 1] = '\n'; // Add <LF> s[k + 2] = '\0'; // Add NULL at the end } // Add one ASCII character at the end of the string void ESP01::AddChar(char * s, char c) { char k = strlen(s); s[k] = c; s[k + 1] = '\0'; } // Sends command to ESP01. Receives the command string void ESP01::SendCMD(char* s) { comm.printf("%s%s", s, CMD_END); } // Resets the ESP01 void ESP01::Reset(void) { SendCMD("AT+RST"); } // Receive reply until no character is received after a given timeout in miliseconds bool ESP01::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, '\0'); return r[0] != '\0'; } // Gets the AP list. Parameter: the string to receive the list bool ESP01::GetList(char *l) { SendCMD("AT+CWLAP"); return RcvReply(l, 5000); // Needs big timeout because it takes long to start replying } // Joins a Wifi AP. Parameters: SSID and Password (strings) void ESP01::Join(char *id, char *pwd) { char cmd[255]; sprintf(cmd, "AT+CWJAP=\"%s\",\"%s\"", id, pwd); SendCMD(cmd); } // Gets ESP IP. Parameter: string to contain IP bool ESP01::GetIP(char *ip) { SendCMD("AT+CIFSR"); return RcvReply(ip, 3000); } //Defines wifi mode; Parameter: mode; 1= STA, 2= AP, 3=both void ESP01::SetMode(WiFiMode mode) { char cmd[15]; strcpy(cmd, "AT+CWMODE="); AddChar(cmd, mode + '0'); // // Converts number into corresponding ASCII character SendCMD(cmd); } // Quits the AP void ESP01::Quit(void) { SendCMD("AT+CWQAP"); } // Sets single connection void ESP01::SetSingle(void) { SendCMD("AT+CIPMUX=0"); } // Sets multiple connection void ESP01::SetMultiple(void) { SendCMD("AT+CIPMUX=1"); } // Gets connection status. Parameter: string to contain status bool ESP01::GetConnStatus(char * st) { SendCMD("AT+CIPSTATUS"); return RcvReply(st, 2000); } // Starts server mode. Parameter: port to be used void ESP01::StartServerMode(int port) { char rs[25]; sprintf(rs, "AT+CIPSERVER=1,%d", port); SendCMD(rs); } // Close server mode. void ESP01::CloseServerMode(void) { SendCMD("AT+CIPSERVER=0"); } void ESP01::setTransparent(void) { SendCMD("AT+CIPMODE=0"); } void ESP01::startTCPConn(char *IP, int port) { char rs[100]; sprintf(rs, "AT+CIPSTART=0,\"TCP\",\"%s\",%d", IP, port); SendCMD(rs); } void ESP01::sendURL(char *URL, char* IP, char *command) { char snd[20], http_cmd[300]; sprintf(http_cmd, "GET %s HTTP/1.1%sHost: %s%sConnection: close%s%s", URL, CMD_END, IP, CMD_END, CMD_END, CMD_END); sprintf(snd,"AT+CIPSEND=0,%d",strlen(http_cmd)); strcpy(command, http_cmd); SendCMD(snd); wait(1); SendCMD(http_cmd); } void ESP01::deepsleep(size_t ms) { char snd[20]; sprintf(snd, "AT+GSLP=%d", ms); SendCMD(snd); } //------------------ FUNCIONES QUE YO HE AGREGADO ------------------// // Starts SmartConfig void ESP01::StartSmartConfig(void) { SendCMD("AT+CWSTARTSMART=1"); } //Disable Echo void ESP01::DisableEcho(void) { SendCMD("ATE0"); } //Enable DHCP void ESP01::EnableDHCP(void) { SendCMD("AT+CWDHCP=1,1"); } // Receive reply until no character is received after a given timeout in miliseconds void ESP01::RcvSingleReply(char * r) { bool ended = 0; char c; Timer t; strcpy(r, ""); t.start(); while(!ended) { if(comm.readable()) { c = comm.getc(); AddChar(r, c); } if((c==0x0D)||(t.read_ms() > 5000)) { ended = 1; } } //AddChar(r, 0x00); } // Gets connection status code. Parameter: string to contain status void ESP01::GetConnStatusCode(char * st) { char cmd[25]; strcpy(cmd, "AT+CIPSTATUS"); SendCMD(cmd); RcvSingleReply(st); } // Set the Maximum Connections Allowed by Server. Parameter: maximum number of connections void ESP01::SetMaxTCPConn(int maxconn) { char rs[50]; sprintf(rs, "AT+CIPSERVERMAXCONN=%d", maxconn); SendCMD(rs); } // Returns true if data has been received. Parameter: string to contain data received bool ESP01::TCPDataAvailable(char *data) { return RcvReply(data, 500); } // Send TCP Data. Parameter: void ESP01::SendTCPData(int socket,int len, char *data) { char i; char rs[50]; sprintf(rs, "AT+CIPSEND=%d,%d",socket,len); SendCMD(rs); wait(1); SendCMD(data); }