Driver for the ESP8266 WiFi module using ATParser library. Espressif Firmware.

Dependencies:   ATParser

Dependents:   ESP8266Interface

Fork of ESP8266 by NetworkSocketAPI

Note

This library assumes your ESP8266 is running the Espressif Firmware. For instructions on how to update your ESP8266 to use the correct firmware see the Firmware Update Wiki Page.

Committer:
sarahmarshy
Date:
Fri Jul 24 22:43:06 2015 +0000
Revision:
10:965fbbf4169d
Parent:
8:80048194de79
Child:
11:1ee70fa0fdea
Revisions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sarahmarshy 8:80048194de79 1 /* ESP8266 Example
sarahmarshy 8:80048194de79 2 * Copyright (c) 2015 ARM Limited
sarahmarshy 8:80048194de79 3 *
sarahmarshy 8:80048194de79 4 * Licensed under the Apache License, Version 2.0 (the "License");
sarahmarshy 8:80048194de79 5 * you may not use this file except in compliance with the License.
sarahmarshy 8:80048194de79 6 * You may obtain a copy of the License at
sarahmarshy 8:80048194de79 7 *
sarahmarshy 8:80048194de79 8 * http://www.apache.org/licenses/LICENSE-2.0
sarahmarshy 8:80048194de79 9 *
sarahmarshy 8:80048194de79 10 * Unless required by applicable law or agreed to in writing, software
sarahmarshy 8:80048194de79 11 * distributed under the License is distributed on an "AS IS" BASIS,
sarahmarshy 8:80048194de79 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sarahmarshy 8:80048194de79 13 * See the License for the specific language governing permissions and
sarahmarshy 8:80048194de79 14 * limitations under the License.
sarahmarshy 8:80048194de79 15 */
sarahmarshy 8:80048194de79 16
sarahmarshy 8:80048194de79 17 #include "ESP8266.h"
sarahmarshy 8:80048194de79 18
sarahmarshy 8:80048194de79 19 ESP8266::ESP8266(PinName tx, PinName rx)
sarahmarshy 8:80048194de79 20 : serial(tx, rx), atParser(&serial)
sarahmarshy 8:80048194de79 21 {
sarahmarshy 8:80048194de79 22 serial.baud(115200);
sarahmarshy 8:80048194de79 23 }
sarahmarshy 8:80048194de79 24
sarahmarshy 8:80048194de79 25
sarahmarshy 8:80048194de79 26 bool ESP8266::startup(void)
sarahmarshy 8:80048194de79 27 {
sarahmarshy 8:80048194de79 28 return (atParser.send("AT") && atParser.recv("OK"));
sarahmarshy 8:80048194de79 29 }
sarahmarshy 8:80048194de79 30 bool ESP8266::reset(void)
sarahmarshy 8:80048194de79 31 {
sarahmarshy 8:80048194de79 32 return (atParser.send("AT+RST") && atParser.recv("OK\r\nready"));
sarahmarshy 8:80048194de79 33 }
sarahmarshy 8:80048194de79 34 bool ESP8266::wifiMode(int mode)
sarahmarshy 8:80048194de79 35 {
sarahmarshy 8:80048194de79 36 //only 3 valid modes
sarahmarshy 8:80048194de79 37 if(mode < 1 || mode > 3)
sarahmarshy 8:80048194de79 38 return false;
sarahmarshy 8:80048194de79 39
sarahmarshy 8:80048194de79 40 char modestr[1];
sarahmarshy 8:80048194de79 41 sprintf(modestr,"%d",mode);
sarahmarshy 8:80048194de79 42 string mode_command = "AT+CWMODE="+string(modestr);
sarahmarshy 8:80048194de79 43 return (atParser.send(mode_command.c_str()) && atParser.recv("OK"));
sarahmarshy 8:80048194de79 44 }
sarahmarshy 8:80048194de79 45 bool ESP8266::multipleConnections(bool enabled)
sarahmarshy 8:80048194de79 46 {
sarahmarshy 8:80048194de79 47 int on = (int)enabled;
sarahmarshy 8:80048194de79 48 char enable[1];
sarahmarshy 8:80048194de79 49 sprintf(enable,"%d",on);
sarahmarshy 8:80048194de79 50 string mux_command = "AT+CIPMUX="+string(enable);
sarahmarshy 8:80048194de79 51 return (atParser.send(mux_command.c_str()) && atParser.recv("OK"));
sarahmarshy 8:80048194de79 52 }
sarahmarshy 8:80048194de79 53 bool ESP8266::dhcp(int mode, bool enabled)
sarahmarshy 8:80048194de79 54 {
sarahmarshy 8:80048194de79 55 //only 3 valid modes
sarahmarshy 8:80048194de79 56 if(mode < 0 || mode > 2)
sarahmarshy 8:80048194de79 57 return false;
sarahmarshy 8:80048194de79 58
sarahmarshy 8:80048194de79 59 int on = (int)enabled;
sarahmarshy 8:80048194de79 60 char enable[1];
sarahmarshy 8:80048194de79 61 sprintf(enable,"%d",on);
sarahmarshy 8:80048194de79 62 char modestr[1];
sarahmarshy 8:80048194de79 63 sprintf(modestr,"%d",mode);
sarahmarshy 8:80048194de79 64 string mode_command = "AT+CWDHCP="+string(modestr)+","+string(enable);
sarahmarshy 8:80048194de79 65 return (atParser.send(mode_command.c_str()) && atParser.recv("OK"));
sarahmarshy 8:80048194de79 66 }
sarahmarshy 8:80048194de79 67
sarahmarshy 8:80048194de79 68 bool ESP8266::connect(const char *ap, const char *passPhrase)
sarahmarshy 8:80048194de79 69 {
sarahmarshy 8:80048194de79 70 string connect_command = "AT+CWJAP=\""+(string)ap+"\",\""+(string)passPhrase+"\"";
sarahmarshy 8:80048194de79 71 return (atParser.send(connect_command.c_str()) && atParser.recv("OK"));
sarahmarshy 8:80048194de79 72 }
sarahmarshy 8:80048194de79 73
sarahmarshy 8:80048194de79 74 bool ESP8266::disconnect(void)
sarahmarshy 8:80048194de79 75 {
sarahmarshy 8:80048194de79 76 return (atParser.send("AT+CWQAP") && atParser.recv("OK"));
sarahmarshy 8:80048194de79 77 }
sarahmarshy 8:80048194de79 78
sarahmarshy 8:80048194de79 79 bool ESP8266::getIPAddress(char* ip)
sarahmarshy 8:80048194de79 80 {
sarahmarshy 8:80048194de79 81 return (atParser.send("AT+CIPSTA?") && atParser.recv("+CIPSTA:\"%[^\"]\"", ip));
sarahmarshy 8:80048194de79 82 }
sarahmarshy 8:80048194de79 83 bool ESP8266::isConnected(void)
sarahmarshy 8:80048194de79 84 {
sarahmarshy 8:80048194de79 85 char* ip;
sarahmarshy 8:80048194de79 86 return getIPAddress(ip);
sarahmarshy 8:80048194de79 87 }
sarahmarshy 8:80048194de79 88 bool ESP8266::openSocket(string sockType, int id, int port, char* addr)
sarahmarshy 8:80048194de79 89 {
sarahmarshy 8:80048194de79 90 //IDs only 0-4
sarahmarshy 10:965fbbf4169d 91 if(id > 4 || id < 0)
sarahmarshy 8:80048194de79 92 return false;
sarahmarshy 8:80048194de79 93
sarahmarshy 8:80048194de79 94 char portstr[5];
sarahmarshy 8:80048194de79 95 char idstr[2];
sarahmarshy 8:80048194de79 96 sprintf(idstr,"%d",id);
sarahmarshy 8:80048194de79 97 sprintf(portstr, "%d", port);
sarahmarshy 8:80048194de79 98
sarahmarshy 8:80048194de79 99 string start_command = "AT+CIPSTART="+(string)idstr+",\""+sockType+"\",\""+(string)addr+"\","+(string)portstr;
sarahmarshy 8:80048194de79 100 if (!(atParser.send(start_command.c_str()) && atParser.recv("OK"))){
sarahmarshy 8:80048194de79 101 return false;//opening socket not succesful
sarahmarshy 8:80048194de79 102 }
sarahmarshy 8:80048194de79 103 return true;
sarahmarshy 8:80048194de79 104
sarahmarshy 8:80048194de79 105 }
sarahmarshy 8:80048194de79 106
sarahmarshy 8:80048194de79 107 bool ESP8266::sendData(int id, const void *data, uint32_t amount)
sarahmarshy 8:80048194de79 108 {
sarahmarshy 8:80048194de79 109 char idstr[2];
sarahmarshy 8:80048194de79 110 sprintf(idstr,"%d",id);
sarahmarshy 8:80048194de79 111 char lenstr[5];
sarahmarshy 8:80048194de79 112 sprintf(lenstr,"%d",(int)amount);
sarahmarshy 8:80048194de79 113
sarahmarshy 8:80048194de79 114 string send_command = "AT+CIPSEND="+(string)idstr+","+(string)lenstr;
sarahmarshy 8:80048194de79 115 if(!atParser.send(send_command.c_str(), "SEND OK")){
sarahmarshy 8:80048194de79 116 return false;
sarahmarshy 8:80048194de79 117 }
sarahmarshy 8:80048194de79 118 atParser.write((char*)data, (int)amount);
sarahmarshy 8:80048194de79 119 return true;
sarahmarshy 8:80048194de79 120 }
sarahmarshy 8:80048194de79 121
sarahmarshy 8:80048194de79 122 uint32_t ESP8266::recv(void *data, uint32_t amount)
sarahmarshy 8:80048194de79 123 {
sarahmarshy 8:80048194de79 124 int length;
sarahmarshy 8:80048194de79 125 int id;
sarahmarshy 8:80048194de79 126 if (!(atParser.recv("+IPD,%d,%d:", &id, &length) &&
sarahmarshy 8:80048194de79 127 atParser.read((char*)data, length) &&
sarahmarshy 8:80048194de79 128 atParser.recv("OK"))){
sarahmarshy 8:80048194de79 129 return 0;
sarahmarshy 8:80048194de79 130 }
sarahmarshy 8:80048194de79 131 return length;
sarahmarshy 8:80048194de79 132 }
sarahmarshy 8:80048194de79 133 bool ESP8266::close(int id)
sarahmarshy 8:80048194de79 134 {
sarahmarshy 8:80048194de79 135 //IDs only 0-4
sarahmarshy 10:965fbbf4169d 136 if(id > 4 || id < 0)
sarahmarshy 8:80048194de79 137 return false;
sarahmarshy 8:80048194de79 138
sarahmarshy 8:80048194de79 139 char idstr[2];
sarahmarshy 8:80048194de79 140 sprintf(idstr,"%d",id);
sarahmarshy 8:80048194de79 141 string close_command = "AT+CIPCLOSE="+(string)idstr;
sarahmarshy 8:80048194de79 142
sarahmarshy 8:80048194de79 143 return (atParser.send(close_command.c_str()) && atParser.recv("OK"));
sarahmarshy 8:80048194de79 144 }
sarahmarshy 8:80048194de79 145 void ESP8266::setTimeout(uint32_t timeout_ms)
sarahmarshy 8:80048194de79 146 {
sarahmarshy 8:80048194de79 147 atParser.setTimeout(timeout_ms);
sarahmarshy 8:80048194de79 148 }