Socket interface for ESP8266. Implements the NetworkSocketAPI. Requires device to use the Espressif Firmware.

Dependencies:   ESP8266

Dependents:   ESP8266InterfaceTests HelloESP8266Interface

Fork of ESP8266Interface 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.

Currently the ESP8266Interface LIbrary has the following Abilities:

Working

  • TCP Client
  • UDP Client
  • Transparent mode (single connection of 1 type at a time)
  • Station Mode (connects to AP)

To be implimented

  • TCP Server
  • UDP Server
  • Multi Connection Mode (able to have up to 5 sockets at a time)
  • AP Mode (Make ESP Chip act like access point)
  • DNS Support (currently websites must be looked up by IP)
  • Error Recovery

Nice but not necessary

  • colorized text for ESP AT Commands in Command line (easier to differentiate from other text)
Committer:
Christopher Haster
Date:
Tue Feb 23 04:02:07 2016 -0600
Branch:
api-changes
Revision:
38:eb1e46561a19
Parent:
34:9c26a3dcdc1f
Child:
39:7e85bf8003fa
Matched changes to NetworkSocketAPI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sarahmarshy 18:9fc7976c7b27 1 /* ESP8266Interface Example
sam_grove 11:288c15b80a26 2 * Copyright (c) 2015 ARM Limited
sam_grove 11:288c15b80a26 3 *
sam_grove 11:288c15b80a26 4 * Licensed under the Apache License, Version 2.0 (the "License");
sam_grove 11:288c15b80a26 5 * you may not use this file except in compliance with the License.
sam_grove 11:288c15b80a26 6 * You may obtain a copy of the License at
sam_grove 11:288c15b80a26 7 *
sam_grove 11:288c15b80a26 8 * http://www.apache.org/licenses/LICENSE-2.0
sam_grove 11:288c15b80a26 9 *
sam_grove 11:288c15b80a26 10 * Unless required by applicable law or agreed to in writing, software
sam_grove 11:288c15b80a26 11 * distributed under the License is distributed on an "AS IS" BASIS,
sam_grove 11:288c15b80a26 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sam_grove 11:288c15b80a26 13 * See the License for the specific language governing permissions and
sam_grove 11:288c15b80a26 14 * limitations under the License.
sam_grove 11:288c15b80a26 15 */
sam_grove 24:37504440f296 16
sarahmarshy 18:9fc7976c7b27 17 #include "ESP8266Interface.h"
Christopher Haster 34:9c26a3dcdc1f 18 #include "ESP8266SocketInterface.h"
sam_grove 11:288c15b80a26 19
Christopher Haster 34:9c26a3dcdc1f 20 ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug)
Christopher Haster 34:9c26a3dcdc1f 21 : _esp(tx, rx, debug)
sam_grove 24:37504440f296 22 {
Christopher Haster 34:9c26a3dcdc1f 23 memset(_ids, 0, sizeof(_ids));
sam_grove 11:288c15b80a26 24 }
sam_grove 11:288c15b80a26 25
Christopher Haster 34:9c26a3dcdc1f 26 int32_t ESP8266Interface::connect(
Christopher Haster 34:9c26a3dcdc1f 27 const char *ap,
Christopher Haster 34:9c26a3dcdc1f 28 const char *pass_phrase,
Christopher Haster 38:eb1e46561a19 29 wifi_security_t)
sam_grove 11:288c15b80a26 30 {
Christopher Haster 38:eb1e46561a19 31 _esp.setTimeout(getTimeout());
Christopher Haster 34:9c26a3dcdc1f 32
Christopher Haster 34:9c26a3dcdc1f 33 if (!_esp.startup(3)) return -1;
Christopher Haster 34:9c26a3dcdc1f 34 if (!_esp.dhcp(true, 1)) return -1;
Christopher Haster 34:9c26a3dcdc1f 35 if (!_esp.connect(ap, pass_phrase)) return -1;
Christopher Haster 34:9c26a3dcdc1f 36
Christopher Haster 34:9c26a3dcdc1f 37 _ip_address = _esp.getIPAddress();
Christopher Haster 34:9c26a3dcdc1f 38 _mac_address = _esp.getMACAddress();
Christopher Haster 34:9c26a3dcdc1f 39 if (!_ip_address || !_mac_address) return -1;
Christopher Haster 34:9c26a3dcdc1f 40
sam_grove 24:37504440f296 41 return 0;
sam_grove 11:288c15b80a26 42 }
sam_grove 11:288c15b80a26 43
Christopher Haster 34:9c26a3dcdc1f 44 int32_t ESP8266Interface::disconnect()
sam_grove 11:288c15b80a26 45 {
Christopher Haster 34:9c26a3dcdc1f 46 if (!_esp.disconnect()) return -1;
Christopher Haster 34:9c26a3dcdc1f 47
sarahmarshy 22:312453862371 48 return 0;
sam_grove 11:288c15b80a26 49 }
sam_grove 11:288c15b80a26 50
Christopher Haster 34:9c26a3dcdc1f 51 const char *ESP8266Interface::getIPAddress()
sarahmarshy 18:9fc7976c7b27 52 {
Christopher Haster 34:9c26a3dcdc1f 53 return _ip_address;
sarahmarshy 18:9fc7976c7b27 54 }
sarahmarshy 18:9fc7976c7b27 55
Christopher Haster 34:9c26a3dcdc1f 56 const char *ESP8266Interface::getMACAddress()
sam_grove 11:288c15b80a26 57 {
Christopher Haster 34:9c26a3dcdc1f 58 return _mac_address;
sam_grove 11:288c15b80a26 59 }
sam_grove 11:288c15b80a26 60
Christopher Haster 38:eb1e46561a19 61 void ESP8266Interface::setTimeout(uint32_t timeout)
Christopher Haster 38:eb1e46561a19 62 {
Christopher Haster 38:eb1e46561a19 63 NetworkInterface::setTimeout(timeout);
Christopher Haster 38:eb1e46561a19 64 _esp.setTimeout(timeout);
Christopher Haster 38:eb1e46561a19 65 }
Christopher Haster 38:eb1e46561a19 66
Christopher Haster 34:9c26a3dcdc1f 67 SocketInterface *ESP8266Interface::createSocket(socket_protocol_t proto)
sam_grove 11:288c15b80a26 68 {
Christopher Haster 34:9c26a3dcdc1f 69 // Look for an unused socket
sarahmarshy 18:9fc7976c7b27 70 int id = -1;
Christopher Haster 34:9c26a3dcdc1f 71
Christopher Haster 34:9c26a3dcdc1f 72 for (int i = 0; i < ESP8266_SOCKET_COUNT; i++) {
Christopher Haster 34:9c26a3dcdc1f 73 if (!_ids[i]) {
sam_grove 24:37504440f296 74 id = i;
Christopher Haster 34:9c26a3dcdc1f 75 _ids[i] = true;
sarahmarshy 18:9fc7976c7b27 76 break;
sarahmarshy 18:9fc7976c7b27 77 }
sarahmarshy 18:9fc7976c7b27 78 }
Christopher Haster 34:9c26a3dcdc1f 79
sam_grove 24:37504440f296 80 if (id == -1) {
Christopher Haster 34:9c26a3dcdc1f 81 return 0;
sarahmarshy 22:312453862371 82 }
bridadan 16:b2f781416464 83
Christopher Haster 34:9c26a3dcdc1f 84 return new ESP8266SocketInterface(&_esp, proto, id);
bridadan 16:b2f781416464 85 }
bridadan 16:b2f781416464 86
Christopher Haster 34:9c26a3dcdc1f 87 void ESP8266Interface::destroySocket(SocketInterface *iface)
sarahmarshy 18:9fc7976c7b27 88 {
Christopher Haster 34:9c26a3dcdc1f 89 ESP8266SocketInterface *socket = (ESP8266SocketInterface *)iface;
Christopher Haster 34:9c26a3dcdc1f 90 _ids[socket->getID()] = false;
sam_grove 13:0186e9e35a24 91 }
sam_grove 13:0186e9e35a24 92