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);
}
Diff: ESP8266.cpp
- Revision:
- 2:77388e8f0697
- Parent:
- 1:399414d48048
--- a/ESP8266.cpp Wed Dec 17 13:54:34 2014 +0000
+++ b/ESP8266.cpp Sun Dec 28 21:58:49 2014 +0000
@@ -1,8 +1,8 @@
#include "ESP8266.h"
// Constructor
-ESP8266::ESP8266(PinName tx, PinName rx) : comm(tx, rx) {
- comm.baud(115200);
+ESP8266::ESP8266(PinName tx, PinName rx, int br) : comm(tx, rx) {
+ comm.baud(br);
}
// Destructor
@@ -25,6 +25,29 @@
s[k + 1] = 0;
}
+// Converts integer number to null-terminated string
+void ESP8266::itoa(int n, char * s) {
+ char k = 0;
+ char r[11];
+
+ if(n == 0) {
+ s[0] = '0';
+ s[1] = 0;
+ } else {
+ while(n != 0) {
+ r[k]= (n % 10) + '0';
+ n = n / 10;
+ k++;
+ }
+ while(k > 0) {
+ s[n] = r[k - 1] + '0';
+ n++;
+ k--;
+ }
+ s[n] = 0;
+ }
+}
+
// Sends command to ESP8266. Receives the command string
void ESP8266::SendCMD(char * s) {
AddEOL(s);
@@ -117,4 +140,29 @@
char rs[15];
strcpy(rs, "AT+CIPMUX=1");
SendCMD(rs);
+}
+
+// Gets connection status. Parameter: string to contain status
+void ESP8266::GetConnStatus(char * st) {
+ char cmd[15];
+ strcpy(cmd, "AT+CIPSTATUS");
+ SendCMD(cmd);
+ RcvReply(st, 2000);
+}
+
+// Starts server mode. Parameter: port to be used
+void ESP8266::StartServerMode(int port) {
+ char rs[25];
+ char t[4];
+ strcpy(rs, "AT+CIPSERVER=1,");
+ itoa(port, t);
+ strcat(rs, t);
+ SendCMD(rs);
+}
+
+// Close server mode.
+void ESP8266::CloseServerMode(void) {
+ char rs[20];
+ strcpy(rs, "AT+CIPSERVER=0");
+ SendCMD(rs);
}
\ No newline at end of file
Antonio Quevedo