Espruino/targets/esp8266/docs/05-User_Guide.md
2015-10-16 13:46:02 +02:00

11 KiB

This is the page where the User Guide for using the Espruino ESP8266 will be documented. It is vital that you realize that this is still a work in progress and hence if you start coding to this guide be prepared to make changes to your own code should the APIs and semantics change before the project completes and becomes part of Espruino as whole.

By completion, this documentation will be polished and placed in the code itself so that automated documentation generation will work.

##Listing access points An access point is a potential WiFi device that an ESP8266 can connect to as a client. In order to connect, you will need to know the identity of the network (the SSID) and the password (if needed). To list access points, we can use the function called ESP8266WiFi.getAccessPoints(). The syntax of the function is:

ESP8266WiFi.getAccessPoints(callback)

Where callback is a function that takes a single parameter that is an array of objects. Each object in the array corresponds to an available access point and contains the following properties:

  • ssid - The network id
  • authMode - The authentication mode
  • rssi - The signal strength
  • channel - The network channel
  • isHidden - Is hidden from discovery

Here is an example of use:

ESP8266WiFi.getAccessPoints(function(arrayOfAcessPoints) {
  for (var i=0; i<arrayOfAcessPoints.length; i++) {
    print("Access point: " + i + " = " + JSON.stringify(arrayOfAcessPoints[i]));
  }
});

with a resulting output of:

Access point: 0 = {"rssi":-48,"channel":7,"authMode":3,"isHidden":false,"ssid":"mySsid"}
Access point: 1 = {"rssi":-84,"channel":9,"authMode":4,"isHidden":false,"ssid":"2WIRE874"}

##Connect to an access point We can connect to an access point using ESP8266WiFi.connect(). This function takes an SSID and password of the access point to which we wish to connect. We can also supply an optional callback function that will be invoked when we have been assigned an IP address and are ready for work.

##Determining your own IP address To determine the ESP8266's current IP address, we can use the ESP8266WiFi.getIPInfo() function.

var ipInfo = ESP8266WiFi.getIPInfo();
print("Current IP address is: " + ESP8266WiFi.getAddressAsString(ipInfo.ip));

##Disconnect from the access point When connected to an access point, you can disconnect from it with a call to ESP8266WiFi.disconnect().

##Forming a TCP connection Assuming that the ESP8266 is now connected to the network, we can form a TCP connection to a partner. To do this, we need to know the IP address and port number on which the partner is listening. From there, we can use the Espruino supplied library called "net". We gain access to this library using:

var net = require("net");

From this, we can now start calling the functions available within that library. For example, to connect to a partner using TCP we can issue:

net.connect(<connectionDetails>, function(conn) {
   // Work with connection here
});

The connection details can either be a URL of the form http://<IP Address>:<port> or an object with the properties:

  • host - The IP address of the target
  • port - The target IP address

We can close the socket with a call to end().

##Becoming an HTTP server We can use the Espruino libraries to become an HTTP server. Our first step is to load the appropriate library using:

var http = require("http");

From here, we can call createServer() to create an instance of an HTTP server. Note that once created we are not yet listening for incomming connections. That comes later.

var httpSrv = http.createServer(callbackFunction);

The callbackFunction is a function that will be called when an HTTP client request is received. The function takes two parameters:

  • request - An instance of a
  • response

##Being an HTTP client We can use the Espruino libraries to be an HTTP client. Our first step is to load the appropriate library using:

var http = require("http");

From here, we can call get() to send an HTTP get request and get the response.

For example:

http.get({
   host: "184.168.192.49",
   port: 80,
   path: "/"
}, function(response) {
   print("get callback!");
});

This will send a request to the IP address specified by host and, when a response is received, the callback function will be invoked. The response data object contains details of the response.

From the response object, we can register callbacks to be informed when new data is available and also when the connection is closed. For example:

response.on("data", function(data) {
   // Data available here.
});

and

response.on("close", function() {
   // Connection was closed.
});

#Reference


##ESP8266WiFi.init

ESP8266WiFi.init()

Initialize the ESP8266 WiFi and TCP subsystems. This is undoubtedly NOT going to be in the final releases however until we understand more about the architecture, this is needed as scafolding (if nothing else).


##ESP8266WiFi.getAccessPoints

Get a list of the access points and pass them as an array into the callback.

ESP8266WiFi.getAccessPoints(callback)


##ESP8266WiFi.connect

Connect to a named access point.

ESP8266WiFi.connect(ssid, password, [callback])

When called, this function places the ESP8266 in station mode. This means that we will not be an access point. Once done, we then connect to the named access point using the network and password parameters supplied by ssid and password. The optional callback is a function that is invoked when an IP address has been assigned to us meaning that we are now ready for TCP/IP based work.

  • ssid - The network id of the access point.
  • password - The password to use to connect to the access point.
  • callback - An optional JavaScript function that is called when we are ready for TCP/IP based work.

##ESP8266WiFi.disconnect Disconnect the ESP8266 from the access point.

ESP8266WiFi.disconnect()


##ESP8266WiFi.restart

Restart the ESP8266. Purely for debug and will be removed.

ESP8266WiFi.restart()


##ESP8266WiFi.getRstInfo

ESP8266WiFi.getRstInfo()

Returns an object that contains the details of the last ESP8266 restart.


##ESP8266WiFi.getIPInfo

ESP8266WiFi.getIPInfo()

Returns an object that contains the details of the current IP address. The object contains:

  • ip - The current IP address
  • gw - The current Gateway address
  • netmask - The current Netmask value

Each of these properties are 32 bit integers (4 bytes corresponding to the IP address). To convert these into string dotted decimal format one can use the ESP8266WiFi.getAddressAsString function.


##ESP8266WiFi.getAutoConnect

Get the current value of the auto connect mode.

ESP8266WiFi.getAutoConnect()

Returns true if we are going to auto connect on next restart.


##ESP8266WiFi.setAutoConnect

Set the auto connect mode on next restart.

ESP8266WiFi.setAutoConnect(autoconnect)

  • autoconnect - A value of true to perform an autoconnect and false otherwise.

##ESP8266WiFi.getStationConfig

Get the station configuration settings.

ESP8266WiFi.getStationConfig()

The return is an object containing:

  • ssid - The network name of the access point.
  • password - The password used to connect to the access point.

##ESP8266WiFi.onWiFiEvent

Set the WiFi event handler.

ESP8266WiFi.onWiFiEvent(callback)

  • callback - A callback function that is invoked with the details of the WiFi event.

##ESP8266WiFi.getAddressAsString

Get a string representation of an IP address.

ESP8266WiFi.getAddressAsString(address)

  • address - An integer representation of a string.

The return is a JS string that represents our IP address.


##ESP8266WiFi.getConnectStatus

Get the current connection status.

ESP8266WiFi.getConnectStatus()

Retrieve the connection status. The return is an object that contains:

  • status - The status code from ESP8266
  • statusMsg - The description of the code

The status is a JS integer that describes the current connection status which will be one of:

  • 0 - STATION_IDLE
  • 1 - STATION_CONNECTING
  • 2 - STATION_WRONG_PASSWORD
  • 3 - STATION_NO_AP_FOUND
  • 4 - STATION_CONNECT_FAIL
  • 5 - STATION_GOT_IP
  • 255 - Not in station mode

##ESP8266WiFi.beAccessPoint

Become an access point.

ESP8266WiFi.beAccessPoint(ssid [,password])

Become an access point for the network supplied by ssid with a password of password. If no password is supplied, then the access point is considered open and be connected to by a station that need not supply a password. If a password is supplied, it must be at least eight characters in size.


##ESP8266WiFi.stopAP

Don't be an access point any longer.

ESP8266WiFi.stopAP()

If we are playing the role of an access point, stop performing that function. Connected stations will be disconnected and we will no longer be visible as a WiFi network.


##ESP8266WiFi.getConnectedStations

List the WiFi stations connected to the ESP8266 assuming it is being an access point.

ESP8266WiFi.getConnectedStations()

The return is an array of objects where each object contains:

  • ip - The IP address of the connected station.

If no stations are connected then the return is an array with zero elements.


##ESP8266WiFi.getRSSI

Get the RSSI (signal strength) of the WiFi signal.

ESP8266WiFi.getRSSI()

The return is an integer representing the signal strength of the connected WiFi network.


##ESP8266WiFi.ping

Ping an IP address.

ESP8266WiFi.ping(ipAddress, callback)

Ping the TCP/IP device given by the address. The address can be either a dotted decimal string or a 32bit numeric. A callback function can be supplied which is invoked for each ping response. A parameter is supplied to the callback which is a JS object that contains the following fields:

  • totalCount
  • totalBytes
  • totalTime
  • respTime
  • seqNo
  • timeoutCount
  • bytes
  • error

An example of calling this function would be:

ESP8266WiFi.ping("192.168.1.31", function(resp) {
    print("Ping response: " + JSON.stringify(resp));
});

##ESP8266WiFi.getState

Return an object that represents the state and details of the ESP8266 device.

ESP8266WiFi.getState()

The returned object contains the following fields:

  • sdkVersion - The version of the ESP8266 SDK used to build this release.
  • cpuFrequency - The CPU operating frequency in MHz.
  • freeHeap - The amount of free heap in bytes.

##ESP8266WiFi.updateCPUFreq

Set the operating frequency of the ESP8266 processor.

ESP8266WiFi.updateCPUFreq(newFreq)

  • newFreq - The new operating frequency of the CPU. Either 80 (80MHz) or 160 (160MHz).

##ESP8266WiFi.logDebug

Enable or disable the logging of debug messages to the UART1 debug log.

ESP8266WiFi.logDebug(onOff)

  • onOff - A boolean. A value of true enables debugging while false disables.