espat

package
v0.0.0-...-b8e278e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 14, 2019 License: BSD-3-Clause Imports: 4 Imported by: 0

Documentation

Overview

Package espat implements TCP/UDP wireless communication over serial with a separate ESP8266 or ESP32 board using the Espressif AT command set across a UART interface.

In order to use this driver, the ESP8266/ESP32 must be flashed with firmware supporting the AT command set. Many ESP8266/ESP32 chips already have this firmware installed by default. You will need to install this firmware if you have an ESP8266 that has been flashed with NodeMCU (Lua) or Arduino firmware.

AT Command Core repository: https://github.com/espressif/esp32-at

Datasheet: https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

AT command set: https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf

Index

Constants

View Source
const (
	// Test that the device is working.
	Test = ""

	// Restart module
	Restart = "+RST"

	// Version show info about the current software version.
	Version = "+GMR"

	// Enter deep-sleep mode
	Sleep = "+GSLP"

	// Configure echo.
	EchoConfig = "E"

	// EchoConfigOn
	EchoConfigOn = EchoConfig + "1"

	// EchoConfigOff
	EchoConfigOff = EchoConfig + "0"

	// Configure UART
	UARTConfig = "+UART"
)

Basic AT commands

View Source
const (
	// WiFi mode (sta/AP/sta+AP)
	WifiMode = "+CWMODE"

	// Connect to an access point.
	ConnectAP = "+CWJAP"

	// List available AP's
	ListAP = "+CWLAP"

	// Disconnect from the current AP
	Disconnect = "+CWQAP"

	// Set softAP configuration. This also activates the ESP8266/ESP32 to act as an access point.
	// The settings will not be saved in flash memory, so they will be forgotten on next reset.
	SoftAPConfigCurrent = "+CWSAP_CUR"

	// Set softAP configuration as saved in flash. This also activates the ESP8266/ESP32 to act as an
	// access point. The settings will be saved in flash memory, so they will be used on next reset.
	SoftAPConfigFlash = "+CWSAP_DEF"

	// List station IP's connected to softAP
	ListConnectedIP = "+CWLIF"

	// Enable/disable DHCP
	DHCPConfig = "+CWDHCP"

	// Set MAC address of station
	SetStationMACAddress = "+CIPSTAMAC"

	// Set MAC address of softAP
	SetAPMACAddress = "+CIPAPMAC"

	// Set IP address of ESP8266/ESP32 station
	SetStationIP = "+CIPSTA"

	// Set IP address of ESP8266/ESP32 when acting as access point.
	// The IP address will not be saved in flash memory, so it will be forgotten on next reset.
	SetSoftAPIPCurrent = "+CIPAP_CUR"

	// Set IP address of ESP8266/ESP32 when acting as access point.
	// The IP address will be saved in flash memory, so they will be used on next reset.
	SetSoftAPIPFlash = "+CIPAP_DEF"
)

WiFi commands.

View Source
const (
	// Get connection status
	TCPStatus = "+CIPSTATUS"

	// Establish TCP connection or register UDP port
	TCPConnect = "+CIPSTART"

	// Send Data
	TCPSend = "+CIPSEND"

	// Close TCP/UDP connection
	TCPClose = "+CIPCLOSE"

	// Get local IP address
	GetLocalIP = "+CIFSR"

	// Set multiple connections mode
	TCPMultiple = "+CIPMUX"

	// Configure as server
	ServerConfig = "+CIPSERVER"

	// Set transmission mode
	TransmissionMode = "+CIPMODE"

	// Set timeout when ESP8266/ESP32 runs as TCP server
	SetServerTimeout = "+CIPSTO"
)

TCP/IP commands

View Source
const (
	TCPMuxSingle   = 0
	TCPMuxMultiple = 1

	TCPTransferModeNormal      = 0
	TCPTransferModeUnvarnished = 1
)
View Source
const (
	WifiModeClient = 1
	WifiModeAP     = 2
	WifiModeDual   = 3

	WifiAPSecurityOpen         = 1
	WifiAPSecurityWPA_PSK      = 2
	WifiAPSecurityWPA2_PSK     = 3
	WifiAPSecurityWPA_WPA2_PSK = 4
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Device

type Device struct {
	// contains filtered or unexported fields
}

Device wraps UART connection to the ESP8266/ESP32.

func New

func New(b machine.UART) *Device

New returns a new espat driver. Pass in a fully configured UART bus.

func (Device) Configure

func (d Device) Configure()

Configure sets up the device for communication.

func (*Device) ConnectTCPSocket

func (d *Device) ConnectTCPSocket(addr, port string) error

ConnectTCPSocket creates a new TCP socket connection for the ESP8266/ESP32. Currently only supports single connection mode.

func (*Device) ConnectToAP

func (d *Device) ConnectToAP(ssid, pwd string, ws int) error

ConnectToAP connects the ESP8266/ESP32 to an access point. ws is the number of seconds to wait for connection.

func (*Device) ConnectUDPSocket

func (d *Device) ConnectUDPSocket(addr, sendport, listenport string) error

ConnectUDPSocket creates a new UDP connection for the ESP8266/ESP32.

func (*Device) Connected

func (d *Device) Connected() bool

Connected checks if there is communication with the ESP8266/ESP32.

func (Device) DialUDP

func (d Device) DialUDP(network string, laddr, raddr *UDPAddr) (*SerialConn, error)

DialUDP makes a UDP network connection. raadr is the port that the messages will be sent to, and laddr is the port that will be listened to in order to receive incoming messages.

func (*Device) DisconnectFromAP

func (d *Device) DisconnectFromAP() error

DisconnectFromAP disconnects the ESP8266/ESP32 from the current access point.

func (*Device) DisconnectSocket

func (d *Device) DisconnectSocket() error

DisconnectSocket disconnects the ESP8266/ESP32 from the current TCP/UDP connection.

func (Device) Echo

func (d Device) Echo(set bool)

Echo sets the ESP8266/ESP32 echo setting.

func (*Device) EndSocketSend

func (d *Device) EndSocketSend() error

EndSocketSend tell the ESP8266/ESP32 the TCP/UDP socket data sending is complete, and to return to command mode. This is only used in "unvarnished" raw mode.

func (Device) Execute

func (d Device) Execute(cmd string) error

Execute sends an AT command to the ESP8266/ESP32.

func (*Device) GetAPClients

func (d *Device) GetAPClients() string

GetAPClients returns the ESP8266/ESP32 current clients when acting as an Access Point.

func (*Device) GetAPConfig

func (d *Device) GetAPConfig() string

GetAPConfig returns the ESP8266/ESP32 current configuration when acting as an Access Point.

func (*Device) GetAPConfigFlash

func (d *Device) GetAPConfigFlash() string

GetAPConfigFlash returns the ESP8266/ESP32 current configuration acting as an Access Point from flash storage. These settings are those used after a reset.

func (*Device) GetAPIP

func (d *Device) GetAPIP() string

GetAPIP returns the ESP8266/ESP32 current IP addess when configured as an Access Point.

func (*Device) GetAPIPFlash

func (d *Device) GetAPIPFlash() string

GetAPIPFlash returns the ESP8266/ESP32 IP address as saved to flash storage. This is the IP address that will be used after a reset.

func (*Device) GetClientIP

func (d *Device) GetClientIP() string

GetClientIP returns the ESP8266/ESP32 current client IP addess when connected to an Access Point.

func (*Device) GetConnectedAP

func (d *Device) GetConnectedAP() []byte

GetConnectedAP returns the ESP8266/ESP32 is currently connected to as a client.

func (*Device) GetMux

func (d *Device) GetMux() ([]byte, error)

GetMux returns the ESP8266/ESP32 current client TCP/UDP configuration for concurrent connections.

func (*Device) GetTCPTransferMode

func (d *Device) GetTCPTransferMode() []byte

GetTCPTransferMode returns the ESP8266/ESP32 current client TCP/UDP transfer mode.

func (*Device) GetWifiMode

func (d *Device) GetWifiMode() []byte

GetWifiMode returns the ESP8266/ESP32 wifi mode.

func (Device) ListenUDP

func (d Device) ListenUDP(network string, laddr *UDPAddr) (*SerialConn, error)

ListenUDP listens for UDP connections on the port listed in laddr.

func (Device) Query

func (d Device) Query(cmd string) (string, error)

Query sends an AT command to the ESP8266/ESP32 that returns the current value for some configuration parameter.

func (*Device) Read

func (d *Device) Read(b []byte) (n int, err error)

Read raw bytes from the UART.

func (*Device) ReadSocket

func (d *Device) ReadSocket(b []byte) (n int, err error)

ReadSocket returns the data that has already been read in from the responses.

func (Device) Reset

func (d Device) Reset()

Reset restarts the ESP8266/ESP32 firmware. Due to how the baud rate changes, this messes up communication with the ESP8266/ESP32 module. So make sure you know what you are doing when you call this.

func (*Device) Response

func (d *Device) Response() []byte

Response gets the next response bytes from the ESP8266/ESP32.

func (Device) Set

func (d Device) Set(cmd, params string) error

Set sends an AT command with params to the ESP8266/ESP32 for a configuration value to be set.

func (*Device) SetAPConfig

func (d *Device) SetAPConfig(ssid, pwd string, ch, security int) error

SetAPConfig sets the ESP8266/ESP32 current configuration when acting as an Access Point. ch indicates which radiochannel to use. security should be one of the const values such as WifiAPSecurityOpen etc.

func (*Device) SetAPConfigFlash

func (d *Device) SetAPConfigFlash(ssid, pwd string, ch, security int) error

SetAPConfigFlash sets the ESP8266/ESP32 current configuration acting as an Access Point, and saves them to flash storage. These settings will be used after a reset. ch indicates which radiochannel to use. security should be one of the const values such as WifiAPSecurityOpen etc.

func (*Device) SetAPIP

func (d *Device) SetAPIP(ipaddr string) error

SetAPIP sets the ESP8266/ESP32 current IP addess when configured as an Access Point.

func (*Device) SetAPIPFlash

func (d *Device) SetAPIPFlash(ipaddr string) error

SetAPIPFlash sets the ESP8266/ESP32 current IP addess when configured as an Access Point. The IP will be saved to flash storage, and will be used after a reset.

func (*Device) SetClientIP

func (d *Device) SetClientIP(ipaddr string) []byte

SetClientIP sets the ESP8266/ESP32 current client IP addess when connected to an Access Point.

func (*Device) SetMux

func (d *Device) SetMux(mode int) error

SetMux sets the ESP8266/ESP32 current client TCP/UDP configuration for concurrent connections either single TCPMuxSingle or multiple TCPMuxMultiple (up to 4).

func (*Device) SetTCPTransferMode

func (d *Device) SetTCPTransferMode(mode int) error

SetTCPTransferMode sets the ESP8266/ESP32 current client TCP/UDP transfer mode. Either TCPTransferModeNormal or TCPTransferModeUnvarnished.

func (*Device) SetWifiMode

func (d *Device) SetWifiMode(mode int) error

SetWifiMode sets the ESP8266/ESP32 wifi mode.

func (*Device) StartSocketSend

func (d *Device) StartSocketSend(size int) error

StartSocketSend gets the ESP8266/ESP32 ready to receive TCP/UDP socket data.

func (Device) Version

func (d Device) Version() []byte

Version returns the ESP8266/ESP32 firmware version info.

func (*Device) Write

func (d *Device) Write(b []byte) (n int, err error)

Write raw bytes to the UART.

type IP

type IP []byte

IP is an IP address. Unlike the standard implementation, it is only a buffer of bytes that contains the string form of the IP address, not the full byte format used by the Go standard .

func ParseIP

func ParseIP(s string) IP

ParseIP parses s as an IP address, returning the result.

func (IP) String

func (ip IP) String() string

String returns the string form of the IP address ip.

type SerialConn

type SerialConn struct {
	Adaptor *Device
	// contains filtered or unexported fields
}

SerialConn is a loosely net.Conn compatible intended to support TCP/UDP over serial.

func (*SerialConn) Close

func (c *SerialConn) Close() error

Close closes the connection. Currently only supports a single Read or Write operations without blocking.

func (*SerialConn) LocalAddr

func (c *SerialConn) LocalAddr() UDPAddr

LocalAddr returns the local network address.

func (*SerialConn) Read

func (c *SerialConn) Read(b []byte) (n int, err error)

Read reads data from the connection. TODO: implement the full method functionality: Read can be made to time out and return an Error with Timeout() == true after a fixed time limit; see SetDeadline and SetReadDeadline.

func (*SerialConn) RemoteAddr

func (c *SerialConn) RemoteAddr() UDPAddr

RemoteAddr returns the remote network address.

func (*SerialConn) SetDeadline

func (c *SerialConn) SetDeadline(t time.Time) error

SetDeadline sets the read and write deadlines associated with the connection. It is equivalent to calling both SetReadDeadline and SetWriteDeadline.

A deadline is an absolute time after which I/O operations fail with a timeout (see type Error) instead of blocking. The deadline applies to all future and pending I/O, not just the immediately following call to Read or Write. After a deadline has been exceeded, the connection can be refreshed by setting a deadline in the future.

An idle timeout can be implemented by repeatedly extending the deadline after successful Read or Write calls.

A zero value for t means I/O operations will not time out.

func (*SerialConn) SetReadDeadline

func (c *SerialConn) SetReadDeadline(t time.Time) error

SetReadDeadline sets the deadline for future Read calls and any currently-blocked Read call. A zero value for t means Read will not time out.

func (*SerialConn) SetWriteDeadline

func (c *SerialConn) SetWriteDeadline(t time.Time) error

SetWriteDeadline sets the deadline for future Write calls and any currently-blocked Write call. Even if write times out, it may return n > 0, indicating that some of the data was successfully written. A zero value for t means Write will not time out.

func (*SerialConn) Write

func (c *SerialConn) Write(b []byte) (n int, err error)

Write writes data to the connection. TODO: implement the full method functionality for timeouts. Write can be made to time out and return an Error with Timeout() == true after a fixed time limit; see SetDeadline and SetWriteDeadline.

type UDPAddr

type UDPAddr struct {
	IP   IP
	Port int
	Zone string // IPv6 scoped addressing zone; added in Go 1.1
}

UDPAddr here to serve as compatible type. until TinyGo can compile the net package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL