test

Dependencies:   ATParser

Fork of ESP8266 by NetworkSocketAPI

Committer:
sarahmarshy
Date:
Mon Jul 27 15:17:06 2015 +0000
Revision:
11:1ee70fa0fdea
Parent:
10:965fbbf4169d
Sending changes

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 11:1ee70fa0fdea 115 if(!atParser.send(send_command.c_str(), ">")){
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 }