ESP8266

Dependencies:   mbed

Fork of Client-ESP8266 by Digital dog

Committer:
chanagan2540
Date:
Sun Dec 10 18:46:31 2017 +0000
Revision:
2:a3692ba08124
Parent:
1:edcfe804de99
Child:
3:2df821b3eb35
fuck

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chanagan2540 0:3222c85ebd43 1 #include "ESP8266.h"
chanagan2540 0:3222c85ebd43 2
chanagan2540 0:3222c85ebd43 3 // Constructor
chanagan2540 0:3222c85ebd43 4 ESP8266::ESP8266(PinName tx, PinName rx, int br) : comm(tx, rx) {
chanagan2540 0:3222c85ebd43 5 comm.baud(br);
chanagan2540 0:3222c85ebd43 6 }
chanagan2540 0:3222c85ebd43 7
chanagan2540 0:3222c85ebd43 8 // Destructor
chanagan2540 0:3222c85ebd43 9 ESP8266::~ESP8266() { }
chanagan2540 0:3222c85ebd43 10
chanagan2540 0:3222c85ebd43 11 void ESP8266::AddEOL(char * s) {
chanagan2540 0:3222c85ebd43 12 char k;
chanagan2540 0:3222c85ebd43 13 k = strlen(s); // Finds position of NULL character
chanagan2540 0:3222c85ebd43 14 s[k] = 0x0D; // switch NULL for <CR>
chanagan2540 0:3222c85ebd43 15 s[k + 1] = 0x0A; // Add <LF>
chanagan2540 0:3222c85ebd43 16 s[k + 2] = 0; // Add NULL at the end
chanagan2540 0:3222c85ebd43 17 }
chanagan2540 0:3222c85ebd43 18
chanagan2540 0:3222c85ebd43 19 void ESP8266::AddChar(char * s, char c) {
chanagan2540 0:3222c85ebd43 20 char k;
chanagan2540 0:3222c85ebd43 21 k = strlen(s);
chanagan2540 0:3222c85ebd43 22 s[k] = c;
chanagan2540 0:3222c85ebd43 23 s[k + 1] = 0;
chanagan2540 0:3222c85ebd43 24 }
chanagan2540 0:3222c85ebd43 25
chanagan2540 0:3222c85ebd43 26 void ESP8266::itoa(int n, char * s) {
chanagan2540 0:3222c85ebd43 27 char k = 0;
chanagan2540 0:3222c85ebd43 28 char r[11];
chanagan2540 0:3222c85ebd43 29
chanagan2540 0:3222c85ebd43 30 if(n == 0) {
chanagan2540 0:3222c85ebd43 31 s[0] = '0';
chanagan2540 0:3222c85ebd43 32 s[1] = 0;
chanagan2540 0:3222c85ebd43 33 } else {
chanagan2540 0:3222c85ebd43 34 while(n != 0) {
chanagan2540 0:3222c85ebd43 35 r[k]= (n % 10) + '0';
chanagan2540 0:3222c85ebd43 36 n = n / 10;
chanagan2540 0:3222c85ebd43 37 k++;
chanagan2540 0:3222c85ebd43 38 }
chanagan2540 0:3222c85ebd43 39 while(k > 0) {
chanagan2540 0:3222c85ebd43 40 s[n] = r[k - 1] + '0';
chanagan2540 0:3222c85ebd43 41 n++;
chanagan2540 0:3222c85ebd43 42 k--;
chanagan2540 0:3222c85ebd43 43 }
chanagan2540 0:3222c85ebd43 44 s[n] = 0;
chanagan2540 0:3222c85ebd43 45 }
chanagan2540 0:3222c85ebd43 46 }
chanagan2540 0:3222c85ebd43 47
chanagan2540 0:3222c85ebd43 48 void ESP8266::SendCMD(char * s) {
chanagan2540 0:3222c85ebd43 49 AddEOL(s);
chanagan2540 0:3222c85ebd43 50 comm.printf("%s", s);
chanagan2540 0:3222c85ebd43 51 }
chanagan2540 0:3222c85ebd43 52
chanagan2540 0:3222c85ebd43 53 void ESP8266::Reset(void) {
chanagan2540 0:3222c85ebd43 54 char rs[10];
chanagan2540 0:3222c85ebd43 55 strcpy(rs, "AT+RST");
chanagan2540 0:3222c85ebd43 56 SendCMD(rs);
chanagan2540 0:3222c85ebd43 57 }
chanagan2540 0:3222c85ebd43 58
chanagan2540 0:3222c85ebd43 59 void ESP8266::RcvReply(char * r, int to) {
chanagan2540 0:3222c85ebd43 60 Timer t;
chanagan2540 0:3222c85ebd43 61 bool ended = 0;
chanagan2540 0:3222c85ebd43 62 char c;
chanagan2540 0:3222c85ebd43 63
chanagan2540 0:3222c85ebd43 64 strcpy(r, "");
chanagan2540 0:3222c85ebd43 65 t.start();
chanagan2540 0:3222c85ebd43 66 while(!ended) {
chanagan2540 0:3222c85ebd43 67 if(comm.readable()) {
chanagan2540 0:3222c85ebd43 68 c = comm.getc();
chanagan2540 0:3222c85ebd43 69 AddChar(r, c);
chanagan2540 0:3222c85ebd43 70 t.start();
chanagan2540 0:3222c85ebd43 71 }
chanagan2540 0:3222c85ebd43 72 if(t.read_ms() > to) {
chanagan2540 0:3222c85ebd43 73 ended = 1;
chanagan2540 0:3222c85ebd43 74 }
chanagan2540 0:3222c85ebd43 75 }
chanagan2540 0:3222c85ebd43 76 AddChar(r, 0x00);
chanagan2540 0:3222c85ebd43 77 }
chanagan2540 0:3222c85ebd43 78
chanagan2540 0:3222c85ebd43 79 void ESP8266::SetMode(char mode) {
chanagan2540 0:3222c85ebd43 80 char cmd[15];
chanagan2540 0:3222c85ebd43 81 strcpy(cmd, "AT+CWMODE=");
chanagan2540 0:3222c85ebd43 82 mode = mode + 0x30; // Converts number into corresponding ASCII character
chanagan2540 0:3222c85ebd43 83 AddChar(cmd, mode); // Completes command string
chanagan2540 0:3222c85ebd43 84 SendCMD(cmd);
chanagan2540 0:3222c85ebd43 85 }
chanagan2540 0:3222c85ebd43 86
chanagan2540 0:3222c85ebd43 87 void ESP8266::GetList(char * l) {
chanagan2540 0:3222c85ebd43 88 char rs[15];
chanagan2540 0:3222c85ebd43 89 strcpy(rs, "AT+CWLAP");
chanagan2540 0:3222c85ebd43 90 SendCMD(rs);
chanagan2540 0:3222c85ebd43 91 RcvReply(l, 5000); // Needs big timeout because it takes long to start replying
chanagan2540 0:3222c85ebd43 92 }
chanagan2540 0:3222c85ebd43 93
chanagan2540 1:edcfe804de99 94 void ESP8266::Join(char * id, char * pwd) {
chanagan2540 0:3222c85ebd43 95 char cmd[255];
chanagan2540 0:3222c85ebd43 96 strcpy(cmd, "AT+CWJAP=");
chanagan2540 0:3222c85ebd43 97 AddChar(cmd, 0x22);
chanagan2540 0:3222c85ebd43 98 strcat(cmd, id);
chanagan2540 1:edcfe804de99 99 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 100 AddChar(cmd, 0x2C);
chanagan2540 1:edcfe804de99 101 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 102 strcat(cmd, pwd);
chanagan2540 1:edcfe804de99 103 AddChar(cmd, 0x22);
chanagan2540 0:3222c85ebd43 104 SendCMD(cmd);
chanagan2540 0:3222c85ebd43 105 }
chanagan2540 0:3222c85ebd43 106
chanagan2540 1:edcfe804de99 107 void ESP8266::look(void) {
chanagan2540 1:edcfe804de99 108 char rs[10];
chanagan2540 1:edcfe804de99 109 strcpy(rs, "AT+CWSAP?");
chanagan2540 1:edcfe804de99 110 SendCMD(rs);
chanagan2540 0:3222c85ebd43 111 }
chanagan2540 0:3222c85ebd43 112
chanagan2540 0:3222c85ebd43 113 void ESP8266::GetIP(char * ip) {
chanagan2540 0:3222c85ebd43 114 char cmd[15];
chanagan2540 0:3222c85ebd43 115 strcpy(cmd, "AT+CIFSR");
chanagan2540 0:3222c85ebd43 116 SendCMD(cmd);
chanagan2540 0:3222c85ebd43 117 RcvReply(ip, 2000);
chanagan2540 0:3222c85ebd43 118 }
chanagan2540 0:3222c85ebd43 119
chanagan2540 0:3222c85ebd43 120 void ESP8266::SetSingle(void) {
chanagan2540 0:3222c85ebd43 121 char cmd[15];
chanagan2540 0:3222c85ebd43 122 strcpy(cmd, "AT+CIPMUX=0");
chanagan2540 0:3222c85ebd43 123 SendCMD(cmd);
chanagan2540 0:3222c85ebd43 124 }
chanagan2540 0:3222c85ebd43 125
chanagan2540 2:a3692ba08124 126 void ESP8266::SetMultiple(void) {
chanagan2540 2:a3692ba08124 127 char rs[15];
chanagan2540 2:a3692ba08124 128 strcpy(rs, "AT+CIPMUX=1");
chanagan2540 2:a3692ba08124 129 SendCMD(rs);
chanagan2540 2:a3692ba08124 130 }
chanagan2540 2:a3692ba08124 131
chanagan2540 1:edcfe804de99 132 void ESP8266::SetPath(char * t, char * o, char * v) {
chanagan2540 1:edcfe804de99 133 char cmd[255];
chanagan2540 1:edcfe804de99 134 strcpy(cmd, "AT+CIPSTART=");
chanagan2540 1:edcfe804de99 135 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 136 strcat(cmd, t);
chanagan2540 1:edcfe804de99 137 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 138 AddChar(cmd, 0x2C);
chanagan2540 1:edcfe804de99 139 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 140 strcat(cmd, o);
chanagan2540 1:edcfe804de99 141 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 142 AddChar(cmd, 0x2C);
chanagan2540 1:edcfe804de99 143 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 144 strcat(cmd, v);
chanagan2540 1:edcfe804de99 145 AddChar(cmd, 0x22);
chanagan2540 1:edcfe804de99 146 SendCMD(cmd);
chanagan2540 0:3222c85ebd43 147 }