2c sdk espressif iot sdk programming guide v0.9.5
DESCRIPTION
ESP8266 SDK Programming GuideTRANSCRIPT
-
ESP8266EX SDK Programming Guide
1 / 95 Espressif Systems February 9, 2015
Espressif IoT SDK:
Programming Guide
Status Released
Current version V0.9.5
Author Fei Yu
Completion Date 2015.01.22
Reviewer JG Wu
Completion Date 2015.01.22
[ ] CONFIDENTIAL
[ ] INTERNAL
[ ] PUBLIC
-
ESP8266EX SDK Programming Guide
2 / 95 Espressif Systems February 9, 2015
Version Info
Date Version Author Comments/Changes
2013.12.25
~2014.7.10
0.1~0.8 JG Wu /
Han Liu/
Fei Yu
Draft and changes
2014.8.13 0.9 Fei Yu 1.Revise espconn APIs
2.Add sniffer APIs
3.Add system_get_chip_id
4.Add APIs to read/ write mac&ip
2014.9.23 0.9.1 Fei Yu 1Add system_deep_sleep;
2Revise APIs to read/write flash;
3Add APIs for AP_CHE
4Revise UDP APIs
2014.11.20 0.9.3 Fei Yu Introduce esp_iot_sdk_v0.9.3
1Add APIs for auto connecting to
router when power on or not;
2Add APIs for UART swap;
3Add APIs for DHCP;
4Add APIs for RTC
2014.12.19 0.9.4 Fei Yu Introduce esp_iot_sdk_v0.9.4
1Add APIs for sleep type;
2Add APIs for igmp
2015.01.22 0.9.5 Fei Yu Introduce esp_iot_sdk_v0.9.5
1Revised upgrade APIs
2Add more DHCP APIs
3Add API to get recorded AP info
4Add smart config APIs
5Add API to block TCP receiving
data
6Add API for AT commands
-
ESP8266EX SDK Programming Guide
3 / 95 Espressif Systems February 9, 2015
Disclaimer and Copyright Notice
Information in this document, including URL references, is subject to change without
notice.
THIS DOCUMENT IS PROVIDED "AS IS" WITH NO WARRANTIES
WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY,
NONINFRINGEMENT, FITNESS FOR ANY PARTICULAR PURPOSE, OR ANY
WARRANTY OTHERWISE ARISING OUT OF ANY PROPOSAL,
SPECIFICATION OR SAMPLE. All liability, including liability for infringement of
any proprietary rights, relating to use of information in this document is disclaimed. No
licenses express or implied, by estoppel or otherwise, to any intellectual property rights
are granted herein.
The Wi-Fi Alliance Member Logo is a trademark of the Wi-Fi Alliance.
All trade names, trademarks and registered trademarks mentioned in this document are
property of their respective owners, and are hereby acknowledged.
Copyright 2013 Espressif Systems Inc. All rights reserved.
-
ESP8266EX SDK Programming Guide
4 / 95 Espressif Systems February 9, 2015
Table of Contents
Version Info .................................................................................................................. 2
Table of Contents ........................................................................................................ 4
1. Foreword ........................................................................................... 9
2. Overview ......................................................................................... 10
3. Application Programming Interface (APIs) ................................ 11
3.1. Timer ................................................................................................ 11
3.1.1. os_timer_arm .................................................................................. 11
3.1.2. os_timer_disarm .............................................................................. 11
3.1.3. os_timer_setfn ................................................................................. 12
3.2. System APIs ...................................................................................... 12
3.2.1. system_restore ................................................................................. 12
3.2.2. system_restart ................................................................................. 12
3.2.3. system_timer_reinit ......................................................................... 13
3.2.4. system_init_done_cb ....................................................................... 13
3.2.5. system_get_chip_id ......................................................................... 14
3.2.6. system_deep_sleep ......................................................................... 14
3.2.7. system_deep_sleep_set_option ...................................................... 15
3.2.8. system_set_os_print ........................................................................ 16
3.2.9. system_print_meminfo .................................................................... 16
3.2.10. system_get_free_heap_size ............................................................ 16
3.2.11. system_os_task ................................................................................ 17
3.2.12. system_os_post ............................................................................... 18
3.2.13. system_get_time .............................................................................. 18
3.2.14. system_get_rtc_time ....................................................................... 19
3.2.15. system_rtc_clock_cali_proc ............................................................. 19
3.2.16. system_rtc_mem_write ................................................................... 20
3.2.17. system_rtc_mem_read .................................................................... 20
3.2.18. system_uart_swap ........................................................................... 21
3.2.19. system_adc_read ............................................................................. 21
3.3. SPI Flash Related APIs ...................................................................... 22
3.3.1. spi_flash_get_id ............................................................................... 22
3.3.2. spi_flash_erase_sector .................................................................... 22
3.3.3. spi_flash_write ................................................................................. 23
3.3.4. spi_flash_read .................................................................................. 23
3.4. WIFI Related APIs ............................................................................. 25
3.4.1. wifi_get_opmode ............................................................................. 25
3.4.2. wifi_set_opmode ............................................................................. 25
3.4.3. wifi_station_get_config ................................................................... 26
3.4.4. wifi_station_set_config .................................................................... 26
3.4.5. wifi_station_connect ....................................................................... 27
-
ESP8266EX SDK Programming Guide
5 / 95 Espressif Systems February 9, 2015
3.4.6. wifi_station_disconnect ................................................................... 27
3.4.7. wifi_station_get_connect_status..................................................... 27
3.4.8. wifi_station_scan ............................................................................. 28
3.4.9. scan_done_cb_t ............................................................................... 29
3.4.10. wifi_station_ap_number_set ........................................................... 30
3.4.11. wifi_station_get_ap_info ................................................................. 30
3.4.12. wifi_station_ap_change ................................................................... 31
3.4.13. wifi_station_get_current_ap_id ...................................................... 31
3.4.14. wifi_station_get_auto_connect ....................................................... 31
3.4.15. wifi_station_set_auto_connect ....................................................... 32
3.4.16. wifi_station_dhcpc_start ................................................................. 32
3.4.17. wifi_station_dhcpc_stop .................................................................. 32
3.4.18. wifi_station_dhcpc_status ............................................................... 33
3.4.19. wifi_softap_get_config .................................................................... 33
3.4.20. wifi_softap_set_config ..................................................................... 34
3.4.21. wifi_softap_get_station_info ........................................................... 34
3.4.22. wifi_softap_free_station_info ......................................................... 34
3.4.23. wifi_softap_dhcps_start .................................................................. 35
3.4.24. wifi_softap_dhcps_stop ................................................................... 36
3.4.25. wifi_softap_set_dhcps_lease........................................................... 36
3.4.26. wifi_softap_dhcps_status ................................................................ 37
3.4.27. wifi_set_phy_mode ......................................................................... 37
3.4.28. wifi_get_phy_mode ......................................................................... 38
3.4.29. wifi_get_ip_info ............................................................................... 38
3.4.30. wifi_set_ip_info ............................................................................... 39
3.4.31. wifi_set_macaddr ............................................................................ 40
3.4.32. wifi_get_macaddr ............................................................................ 40
3.4.33. wifi_set_sleep_type ......................................................................... 41
3.4.34. wifi_get_sleep_type ......................................................................... 41
3.4.35. wifi_status_led_install ..................................................................... 42
3.4.36. wifi_status_led_uninstall ................................................................. 42
3.5. Upgrade(FOTA) APIs ......................................................................... 43
3.5.1. system_upgrade_userbin_check ..................................................... 43
3.5.2. system_upgrade_flag_set ................................................................ 43
3.5.3. system_upgrade_flag_check............................................................ 44
3.5.4. system_upgrade_start ..................................................................... 44
3.5.5. system_upgrade_reboot .................................................................. 44
3.6. Sniffer Related APIs .......................................................................... 45
3.6.1. wifi_promiscuous_enable ................................................................ 45
3.6.2. wifi_set_promiscuous_rx_cb ........................................................... 45
3.6.3. wifi_get_channel .............................................................................. 45
3.6.4. wifi_set_channel .............................................................................. 46
3.7. smart config APIs ............................................................................. 46
-
ESP8266EX SDK Programming Guide
6 / 95 Espressif Systems February 9, 2015
3.7.1. smartconfig_start ............................................................................. 46
3.7.2. smartconfig_stop ............................................................................. 47
3.7.3. get_smartconfig_status ................................................................... 48
3.8. Network APIs .................................................................................... 49
3.8.1. General APIs ..................................................................................... 49
3.8.1.1. espconn_delete ...................................................................... 49
3.8.1.2. espconn_gethostbyname ...................................................... 49
3.8.1.3. espconn_port .......................................................................... 50
3.8.1.4. espconn_regist_sentcb ......................................................... 51
3.8.1.5. espconn_regist_recvcb ......................................................... 51
3.8.1.6. espconn_sent_callback ......................................................... 52
3.8.1.7. espconn_recv_callback ......................................................... 52
3.8.1.8. espconn_sent .......................................................................... 53
3.8.2. TCP APIs............................................................................................ 53
3.8.2.1. espconn_accept ..................................................................... 53
3.8.2.2. espconn_secure_accept ....................................................... 54
3.8.2.3. espconn_regist_time .............................................................. 54
3.8.2.4. espconn_get_connection_info ............................................. 55
3.8.2.5. espconn_connect ................................................................... 55
3.8.2.6. espconn_connect_callback .................................................. 55
3.8.2.7. espconn_set_opt .................................................................... 56
3.8.2.8. espconn_disconnect .............................................................. 57
3.8.2.9. espconn_regist_connectcb ................................................... 57
3.8.2.10. espconn_regist_reconcb ....................................................... 57
3.8.2.11. espconn_regist_disconcb ..................................................... 58
3.8.2.12. espconn_secure_connect ..................................................... 59
3.8.2.13. espconn_secure_sent ........................................................... 59
3.8.2.14. espconn_secure_disconnect ................................................ 60
3.8.2.15. espconn_tcp_get_max_con .................................................. 60
3.8.2.16. espconn_tcp_set_max_con .................................................. 60
3.8.2.17. espconn_tcp_get_max_con_allow ...................................... 61
3.8.2.18. espconn_tcp_set_max_con_allow ...................................... 61
3.8.2.19. espconn_recv_hold ................................................................ 62
3.8.2.20. espconn_recv_unhold ........................................................... 62
3.8.3. UDP APIs .......................................................................................... 63
3.8.3.1. espconn_create ...................................................................... 63
3.8.3.2. espconn_igmp_join ................................................................ 63
3.8.3.3. espconn_igmp_leave ............................................................. 64
3.9. AT APIs .............................................................................................. 65
3.9.1. at_response_ok ................................................................................ 65
3.9.2. at_response_error ........................................................................... 65
3.9.3. at_cmd_array_regist ........................................................................ 65
3.9.4. at_get_next_int_dec ........................................................................ 66
-
ESP8266EX SDK Programming Guide
7 / 95 Espressif Systems February 9, 2015
3.9.5. at_data_str_copy ............................................................................. 66
3.9.6. at_init ............................................................................................... 67
3.9.7. at_port_print ................................................................................... 67
3.10. json APIs ........................................................................................... 68
3.10.1. jsonparse_setup ............................................................................... 68
3.10.2. jsonparse_next ................................................................................. 68
3.10.3. jsonparse_copy_value ..................................................................... 68
3.10.4. jsonparse_get_value_as_int ............................................................ 69
3.10.5. jsonparse_get_value_as_long.......................................................... 69
3.10.6. jsonparse_get_len ............................................................................ 69
3.10.7. jsonparse_get_value_as_type ......................................................... 70
3.10.8. jsonparse_strcmp_value .................................................................. 70
3.10.9. jsontree_set_up ............................................................................... 70
3.10.10. jsontree_reset .................................................................................. 71
3.10.11. jsontree_path_name ....................................................................... 71
3.10.12. jsontree_write_int ........................................................................... 72
3.10.13. jsontree_write_int_array ................................................................. 72
3.10.14. jsontree_write_string ...................................................................... 72
3.10.15. jsontree_print_next ......................................................................... 73
3.10.16. jsontree_find_next ........................................................................... 73
4. Structure definition ........................................................................ 74
4.1. Timer ................................................................................................ 74
4.2. Wifi related structure ....................................................................... 74
4.2.1. station related .................................................................................. 74
4.2.2. softap related ................................................................................... 75
4.2.3. scan related ...................................................................................... 75
4.3. smart config structure ...................................................................... 76
4.4. json related structure ....................................................................... 77
4.3.1. json structure ................................................................................... 77
4.3.2. json macro definition ....................................................................... 78
4.5. espconn parameters ........................................................................ 79
4.4.1 callback function .............................................................................. 79
4.4.2 espconn ............................................................................................ 79
5. Driver ............................................................................................... 82
5.1. GPIO APIs ......................................................................................... 82
5.1.1. PIN setting macro ............................................................................. 82
5.1.2. gpio_output_set .............................................................................. 82
5.1.3. GPIO input and output macro .......................................................... 83
5.1.4. GPIO interrupt .................................................................................. 83
5.1.5. gpio_pin_intr_state_set ................................................................... 84
5.1.6. GPIO interrupt handler .................................................................... 84
5.2. UART APIs ......................................................................................... 84
5.2.1. uart_init ........................................................................................... 85
-
ESP8266EX SDK Programming Guide
8 / 95 Espressif Systems February 9, 2015
5.2.2. uart0_tx_buffer ................................................................................ 85
5.2.3. uart0_rx_intr_handler ..................................................................... 86
5.3. i2c master APIs ................................................................................. 86
5.3.1. i2c_master_gpio_init ....................................................................... 86
5.3.2. i2c_master_init ................................................................................ 86
5.3.3. i2c_master_start .............................................................................. 87
5.3.4. i2c_master_stop .............................................................................. 87
5.3.5. i2c_master_send_ack ...................................................................... 87
5.3.6. i2c_master_send_nack .................................................................... 88
5.3.7. i2c_master_checkAck ...................................................................... 88
5.3.8. i2c_master_readByte ....................................................................... 88
5.3.9. i2c_master_writeByte ...................................................................... 89
5.4. pwm ................................................................................................. 90
5.4.1. pwm_init .......................................................................................... 90
5.4.2. pwm_start ........................................................................................ 90
5.4.3. pwm_set_duty ................................................................................. 90
5.4.4. pwm_set_freq .................................................................................. 91
5.4.5. pwm_get_duty ................................................................................. 91
5.4.6. pwm_get_freq.................................................................................. 91
6. Appendix ......................................................................................... 92
A. ESPCONN Programming ................................................................... 92
A.1. TCP Client Mode ............................................................................... 92
A.1.1. Instructions ...................................................................................... 92
A.1.2. Steps ................................................................................................. 92
A.2. TCP Server Mode .............................................................................. 93
A.2.1. Instructions ...................................................................................... 93
A.2.2. Steps ................................................................................................. 93
B. RTC APIs Example ............................................................................. 93
-
ESP8266EX SDK Programming Guide
9 / 95 Espressif Systems February 9, 2015
1. Foreword
The SDK based on ESP8266 IoT platform offers users an easy, fast and
efficient way to develop IoT devices.
The programming guide provides overview of the SDK as well as details on
the API. It is written for embedded software developers to help them program
on ESP8266 IoT platform.
-
ESP8266EX SDK Programming Guide
10 / 95 Espressif Systems February 9, 2015
2. Overview
The SDK provides a set of interfaces for data receive and transmit
functions over the Wi-Fi and TCP/IP layer so programmers can focus on
application development on the high level. Users can easily make use of the
corresponding interfaces to realize data receive and transmit.
All networking functions on the ESP8266 IoT platform are realized in the
library, and are not transparent to users. Instead, users can initialize the
interface in user_main.c
void usre_init(void) is the default method provided. Users can add
functions like firmware initialization, network parameters setting, and timer
initialization in the interface.
The SDK provides an API to handle json, and users can also use self-
defined data types to handle the them.
-
ESP8266EX SDK Programming Guide
11 / 95 Espressif Systems February 9, 2015
3. Application Programming Interface
(APIs)
3.1. Timer
Locate in \esp_iot_sdk\include\osapi.h
3.1.1. os_timer_arm
Function: arm timer
Prototype:
void os_timer_arm(ETSTimer *ptimer, uint32_t milliseconds,
boolrepeat_flag)
Input parameters:
ETSTimer*ptimerTimer structure
uint32_t millisecondsTiming, Unit: milisecond
boolrepeat_flagWhether to repeat the timing
Return:
null
3.1.2. os_timer_disarm
Function: Disarm timer
Prototype:
void os_timer_disarm (ETSTimer *ptimer)
Input parameters:
ETSTimer*ptimerTimer structure
Return:
null
-
ESP8266EX SDK Programming Guide
12 / 95 Espressif Systems February 9, 2015
3.1.3. os_timer_setfn
Function: Set timer callback function
Prototype:
void os_timer_setfn (ETSTimer *ptimer, ETSTimerFunc *pfunction, void
*parg)
Input parameters:
ETSTimer*ptimerTimer structure
TESTimerFunc*pfunctiontimer callback function
void*pargcallback function parameter
Return:
null
3.2. System APIs
3.2.1. system_restore
Function: Reset to default settings
Prototype:
void system_restore(void)
Input parameters:
null
Return:
null
3.2.2. system_restart
Function: Restart
Prototype:
void system_restart(void)
Input parameters:
-
ESP8266EX SDK Programming Guide
13 / 95 Espressif Systems February 9, 2015
null
Return:
null
3.2.3. system_timer_reinit
Function: Reinitiate the timer when you need to use microsecond timer
Not es: 1. Define USE_US_TIMER;
2. Put system_timer_reinit at the beginning and user_init in the first
sentence.
Function definition:
void system_timer_reinit (void)
Input parameters:
null
Return:
Null
3.2.4. system_init_done_cb
Functioncall this API in user_init to register a system-init-done callback.
Notewifi_station_scan need to be called after system init done and station
enable.
Prototype
void system_init_done_cb(init_done_cb_t cb)
Parameter
init_done_cb_t cb - system-init-done callback
Return
NULL
Example
-
ESP8266EX SDK Programming Guide
14 / 95 Espressif Systems February 9, 2015
void to_scan(void)
{
wifi_station_scan(NULL,scan_done);
}
void user_init(void)
{
wifi_set_opmode(STATION_MODE);
system_init_done_cb(to_scan);
}
3.2.5. system_get_chip_id
Function: Get chip id
Prototype:
uint32 system_get_chip_id (void)
Input parameters:
null
Return:
Chip id
3.2.6. system_deep_sleep
Function: Set for deep-sleep mode. Device in deep-sleep mode automatically,
every X us wake up once. Everytime device wakes up, it starts from user_init.
Prototype
void system_deep_sleep(uint32 time_in_us)
parameters
uint32 time_in_us during the time (us) device is in deep-sleep
Return
-
ESP8266EX SDK Programming Guide
15 / 95 Espressif Systems February 9, 2015
NULL
Note:
Hardware has to support deep-sleep wake up (XPD_DCDC connects to
EXT_RSTB with 0R).
system_deep_sleep(0) set no wake up timerconnect a GPIO to pin RST,
the chip will wake up by a falling-edge on pin RST
3.2.7. system_deep_sleep_set_option
Function: Call this API before system_deep_sleep to set what the chip will do
when deep-sleep wake up.
Note: following init data means esp_init_data_default.bin.
Prototype
bool system_deep_sleep_set_option(uint8 option)
Parameter
uint8 option - option=0, init data byte 108 is valuable;
option>0, init data byte 108 is valueless.
More details as follows
deep_sleep_set_option(0), RF_CAL or not after deep-sleep wake up,
depends on init data byte 108.
deep_sleep_set_option(1), RF_CAL after deep-sleep wake up, there will be
large current.
deep_sleep_set_option(2) , no RF_CAL after deep-sleep wake up, there will
only be small current.
deep_sleep_set_option(4) , disable RF after deep-sleep wake up, just like
modem sleep, there will be the smallest current.
Return:
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
16 / 95 Espressif Systems February 9, 2015
3.2.8. system_set_os_print
Function: Turn on/off print logFunction
Function definition:
void system_set_os_print (uint8onoff)
Input parameters:
uint8 onoff turn on/off print function;
0x00 : print function off
0x01: print function on
Defaut: print function on
Return:
null
3.2.9. system_print_meminfo
Function: Print memory information, including data/rodata/bss/heap
Function definition:
void system_print_meminfo (void)
Input parameters:
null
Return:
null
3.2.10. system_get_free_heap_size
Function: Get free heap size
Function definition:
uint32 system_get_free_heap_size(void)
Input parameters:
null
Return:
-
ESP8266EX SDK Programming Guide
17 / 95 Espressif Systems February 9, 2015
uint32 available heap size
3.2.11. system_os_task
Function: Set up tasks
Function definition:
bool system_os_task(os_task_t task, uint8 prio, os_event_t *queue,
uint8 qlen)
Input parameters:
os_task_t tasktask function
uint8 priotask priority. 3 priorities are supported, 0/1/2, 0 is the lowest
priority.
os_event_t *queuemessage queue pointer
uint8 qlenmessage queue depth
Return
True - succeed
False - fail.
Example:
#define SIG_RX 0
#define TEST_QUEUE_LEN 4
os_event_t *testQueue;
void test_task (os_event_t *e)
{
switch (e->sig) {
case SIG_RX:
os_printf(sig_rx %c\n, (char)e->par);
break;
default:
break;
}
-
ESP8266EX SDK Programming Guide
18 / 95 Espressif Systems February 9, 2015
}
void task_init(void)
{
testQueue=(os_event_t *)os_malloc(sizeof(os_event_t)*TEST_QUEUE_LEN);
system_os_task(test_task,USER_TASK_PRIO_0,testQueue,TEST_QUEUE_
LEN);
}
3.2.12. system_os_post
Function: send message to task
Function definition:
bool system_os_post (uint8 prio, os_signal_t sig, os_param_t par)
Input parameters:
uint8 priotask priority, corresponding to that you set up
os_signal_t sigmessage type
os_param_t parmessage parameters
Return
True - succeed
False - fail.
Refer to the example above:
void task_post(void)
{
system_os_post(USER_TASK_PRIO_0, SIG_RX, a);
}
Printout: sig_rx a
3.2.13. system_get_time
FunctionGet system time (us).
Prototype
-
ESP8266EX SDK Programming Guide
19 / 95 Espressif Systems February 9, 2015
uint32 system_get_time(void)
Parameter
Null
Return
System time in us.
3.2.14. system_get_rtc_time
FunctionGet RTC time , count by RTC clock period.
Example: If system_get_rtc_time returns 10 (means 10 RTC cycles),
system_rtc_clock_cali_proc returns 5 (means 5us per RTC cycle), then real
time is 10 x 5 = 50 us.
Note: System time will return to zero because of deep sleep or system_restart,
but RTC still goes on.
Prototype
uint32 system_get_rtc_time(void)
Parameter
Null
Return
RTC time.
3.2.15. system_rtc_clock_cali_proc
Function: Get RTC clock period.
Prototype
uint32 system_rtc_clock_cali_proc(void)
Parameter
Null
Return
-
ESP8266EX SDK Programming Guide
20 / 95 Espressif Systems February 9, 2015
RTC clock period (in us), bit11~ bit0 are decimal.
Note: RTC demo in Appendix.
3.2.16. system_rtc_mem_write
Function: During deep sleep, only RTC still working, so maybe we need to save
some user data in RTC memory. Only user data area can be used by user.
|_ _ _ _ _system data _ _ _ _ _|_ _ _ _ _ _ _ _ _ user data _ _ _ _ _ _ _ _ _|
| 256 bytes | 512 bytes |
Note: RTC memory is 4 bytes aligned for read and write operations. Parameter
des_addr means block number(4 bytes per block). So, if we want to save
some data at the beginning of user data area, des_addr will be 256/4 = 64,
save_size will be data length.
Prototype
bool system_rtc_mem_write (uint32 des_addr, void * src_addr, uint32
save_size)
Parameter
uint32 des_addr destination address (block number) in RTC memory,
des_addr >=64
void * src_addr data pointer.
uint32 save_size data length ( byte)
Return
True succeedFalsefail.
3.2.17. system_rtc_mem_read
Function: Read user data from RTC memory. Only user data area here can
be used by user.
|_ _ _ _ _system data _ _ _ _ _|_ _ _ _ _ _ _ _ _ user data _ _ _ _ _ _ _ _ _|
| 256 bytes | 512 bytes |
-
ESP8266EX SDK Programming Guide
21 / 95 Espressif Systems February 9, 2015
Note: RTC memory is 4 bytes aligned for read and write operations. Parameter
src_addr means block number(4 bytes per block). So, if we want to read some
data from the beginning of user data area, src_addr will be 256/4 = 64,
save_size will be data length.
Prototype
bool system_rtc_mem_read (uint32 src_addr, void * des_addr, uint32
save_size)
Parameter
uint32 src_addr source address (block number) in rtc memory
src_addr >=64
void * des_addr data pointer
uint32 save_size data lengthbyte
Return
True succeedFalsefail.
3.2.18. system_uart_swap
Function: UART0 swap. Use MTCK as UART0 RXMTDO as UART0 TX, so
ROM log wont output from this new UART0. We also need to use
MTDO(U0CTS) and MTCK(U0RTS) as UART0 in hardware.
Prototype
void system_uart_swap (void)
Parameter
NULL
Return
NULL
3.2.19. system_adc_read
Function: Get the value of ADC.
-
ESP8266EX SDK Programming Guide
22 / 95 Espressif Systems February 9, 2015
Prototype
Uint16 system_adc_read (void)
Paratmeter
NULL
Return
Value of ADC.
3.3. SPI Flash Related APIs
3.3.1. spi_flash_get_id
Function: Get id info of spi flash
Prototype
Uint32 spi_flash_get_id (void)
Parameters
Null
Return
SPI Flash id
3.3.2. spi_flash_erase_sector
Function: erase sector in flash
Note: More details in document Espressif IOT Flash RW Operation
Prototype
SpiFlashOpResult spi_flash_erase_sector (uint16 sec)
Parameters
uint16 sec Sector number, the count starts at sector 0, 4KB per sector.
Return
Typedef enum{
-
ESP8266EX SDK Programming Guide
23 / 95 Espressif Systems February 9, 2015
SPI_FLASH_RESULT_OK,
SPI_FLASH_RESULT_ERR,
SPI_FLASH_RESULT_TIMEOUT
}SpiFlashOpResult
3.3.3. spi_flash_write
FunctionWrite data to flash
Note: More details in document
Prototype
SpiFlashOpResult spi_flash_write (uint32 des_addr, uint32 *src_addr,
uint32 size)
Parameters
uint32 des_addr - destination address in flash.
uint32 *src_addr source address of the data.
Uint32 size - length of data
Return
Typedef enum{
SPI_FLASH_RESULT_OK,
SPI_FLASH_RESULT_ERR,
SPI_FLASH_RESULT_TIMEOUT
}SpiFlashOpResult
3.3.4. spi_flash_read
Function Read data from flash.
Note: More details in document
-
ESP8266EX SDK Programming Guide
24 / 95 Espressif Systems February 9, 2015
Prototype
SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 * des_addr,
uint32 size)
Parameters
uint32 src_addr - source address in flash
uint32 * des_addr destination address to keep data.
Uint32 size - length of data
Return
Typedef enum{
SPI_FLASH_RESULT_OK,
SPI_FLASH_RESULT_ERR,
SPI_FLASH_RESULT_TIMEOUT
}SpiFlashOpResult
-
ESP8266EX SDK Programming Guide
25 / 95 Espressif Systems February 9, 2015
3.4. WIFI Related APIs
3.4.1. wifi_get_opmode
Function: get wifi working mode
Function definition:
uint8 wifi_get_opmode (void)
Input parameters:
null
Return:
Wifi working modes:
0x01 means STATION_MODE,
0x02 means SOFTAP_MODE,
0x03 means STATIONAP_MODE.
3.4.2. wifi_set_opmode
Function: set wifi working mode as STATION, SOFTAP or STATION+SOFTAP
Note:
Versions before esp_iot_sdk_v0.9.2, need to call system_restart() after this api;
after esp_iot_sdk_v0.9.2, need not to restart.
Function definition:
bool wifi_set_opmode (uint8 opmode)
Input parameters:
uint8 opmodeWifi working modes: 0x01 means STATION_MODE,
0x02
means SOFTAP_MODE, 0x03 means STATIONAP_MODE.
Return:
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
26 / 95 Espressif Systems February 9, 2015
3.4.3. wifi_station_get_config
Function: get wifi station configuration
Function definition:
bool wifi_station_get_config (struct station_config *config)
Input parameters:
struct station_config *configwifi station configuration pointer
Return:
True - succeed
False - fail.
3.4.4. wifi_station_set_config
Function: Set wifi station configuration
Note: If wifi_station_set_config is called in user_init , there is no need to call
wifi_station_connect after that, ESP8266 will connect to router automatically;
otherwise, need wifi_station_connect to connect.
In general, station_config.bssid_set need to be 0, otherwise it will check bssid
which is the mac address of AP.
Function definition:
bool wifi_station_set_config (struct station_config *config)
Input parameters:
struct station_config *configwifi station configuration pointer
Return:
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
27 / 95 Espressif Systems February 9, 2015
3.4.5. wifi_station_connect
Function: wifi station connected AP
Noteif ESP8266 has already connected to a routerits necessary to call
wifi_station_disconnect firstthen call wifi_station_connect to connect.
Function definition:
bool wifi_station_connect (void)
Input parameters:
null
Return:
True - succeed
False - fail.
3.4.6. wifi_station_disconnect
Function: wifi station disconnected AP
Function definition:
bool wifi_station_disconnect (void)
Input parameters:
null
Return:
True - succeed
False - fail.
3.4.7. wifi_station_get_connect_status
Function: get the connection status between wifi station and AP
Function definition:
uint8 wifi_station_get_connect_status (void)
-
ESP8266EX SDK Programming Guide
28 / 95 Espressif Systems February 9, 2015
Input parameters:
null
Return:
enum{
STATION_IDLE = 0,
STATION_CONNECTING,
STATION_WRONG_PASSWORD,
STATION_NO_AP_FOUND,
STATION_CONNECT_FAIL,
STATION_GOT_IP
};
3.4.8. wifi_station_scan
Function: Scan AP
Note: Do not call this API in user_init. This API need to be called after system
initialize done and station enable.
Function definition:
bool wifi_station_scan (struct scan_config *config, scan_done_cb_t cb);
Structure
struct scan_config{
uint8 *ssid; // APs ssid
uint8 *bssid; // APs bssid
uint8 channel; //scan a specific channel
uint8 show_hidden; //scan APs of which ssid is hidden.
};
Parameters:
struct scan_config *config AP config for scan
if config = Null scan all APs
if config.ssidconfig.bssid are nullconfig.channel isnt null, ESP8266
-
ESP8266EX SDK Programming Guide
29 / 95 Espressif Systems February 9, 2015
will scan the specific channel.
scan_done_cb_t cb - callback function after scan
Return:
True - succeed
False - fail.
3.4.9. scan_done_cb_t
Function: scan callback function
Function definition:
void scan_done_cb_t (void *arg, STATUS status);
Input parameters:
void *arginformation of APs that be found, refer to struct bss_info
STATUS statusget status
Return:
NULL
Example:
wifi_station_scan(&config, scan_done);
static void ICACHE_FLASH_ATTR
scan_done(void *arg, STATUS status)
{
if (status == OK)
{
struct bss_info *bss_link = (struct bss_info *)arg;
bss_link = bss_link->next.stqe_next;//ignore first
}
}
-
ESP8266EX SDK Programming Guide
30 / 95 Espressif Systems February 9, 2015
3.4.10. wifi_station_ap_number_set
Function: Set the number of APs that can be recorded for ESP8266 station.
When ESP8266 station connects to an AP, ESP8266 keeps a record of this AP.
Record id starts counting from 0.
Prototype
bool wifi_station_ap_number_set (uint8 ap_number);
Parameters
uint8 ap_number how many APs can be recordedMAX: 5
eg: if ap_number is 5, record id : 0 ~ 4
Return
True - succeed
False - fail.
3.4.11. wifi_station_get_ap_info
Function: Get information of APs recorded by ESP8266 station.
Prototype
uint8 wifi_station_get_ap_info(struct station_config config[])
Parameters
struct station_config config[] information of APs, array size has to be 5.
Return
How many APs that is actually recorded.
Example
struct station_config config[5];
int i = wifi_station_get_ap_info(config);
-
ESP8266EX SDK Programming Guide
31 / 95 Espressif Systems February 9, 2015
3.4.12. wifi_station_ap_change
Function: ESP8266 station change to connect to the AP which is recorded in
specific id.
Prototype
bool wifi_station_ap_change (uint8 current_ap_id);
Parameters
uint8 current_ap_id APs record id, start counting from 0.
Return
True - succeed
False - fail.
3.4.13. wifi_station_get_current_ap_id
Function: Get the current record id of AP.
Prototype
Uint8 wifi_station_get_current_ap_id ();
Parameter
Null
Return
The record id of the AP which ESP8266 is connected with right now.
3.4.14. wifi_station_get_auto_connect
Function: Check whether ESP8266 station will connect to AP (which is
recorded) automatically or not when power on.
Prototype
uint8 wifi_station_get_auto_connect(void)
Parameter
Null
Return
-
ESP8266EX SDK Programming Guide
32 / 95 Espressif Systems February 9, 2015
0 , wont connect to AP automatically
Non-0 , will connect to AP automatically.
3.4.15. wifi_station_set_auto_connect
Function: Set whether ESP8266 station will connect to AP (which is recorded)
automatically or not when power on.
Note: Call this API in user_init , it is effective in this current power on; call it in
other place, it will be effective in next power on.
Prototype
bool wifi_station_set_auto_connect(uint8 set)
Parameter
uint8 set Automatically connect or not
0wont connect automatically1will connect automatically.
Return
True succeedFalse fail.
3.4.16. wifi_station_dhcpc_start
FunctionEnable ESP8266 station dhcp client.
NoteDHCP default enable
Prototype
bool wifi_station_dhcpc_start(void)
Parameter
Null
Return
True succeedFalse fail.
3.4.17. wifi_station_dhcpc_stop
FunctionDisable ESP8266 station dhcp client.
NoteDHCP default enable.
-
ESP8266EX SDK Programming Guide
33 / 95 Espressif Systems February 9, 2015
Prototype
bool wifi_station_dhcpc_stop(void)
Parameter
Null
Return
True succeedFalse fail.
3.4.18. wifi_station_dhcpc_status
FunctionGet ESP8266 station dhcp client status.
Prototype
enum dhcp_status wifi_station_dhcpc_status(void)
Parameter
Null
Return
enum dhcp_status {
DHCP_STOPPED,
DHCP_STARTED
};
3.4.19. wifi_softap_get_config
Function: set wifi softap configuration
Function definition:
bool wifi_softap_get_config(struct softap_config *config)
Parameter
struct softap_config *configESP8266 softap config
Return
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
34 / 95 Espressif Systems February 9, 2015
3.4.20. wifi_softap_set_config
Function: set wifi softap configuration
Function definition:
bool wifi_softap_set_config (struct softap_config *config)
Parameter
struct softap_config *config wifi softap configuration pointer
Return
True - succeed
False - fail.
3.4.21. wifi_softap_get_station_info
Function: get connected station devices under softap mode, including mac
and ip
Function definition
struct station_info * wifi_softap_get_station_info(void)
Input parameters:
null
Return:
struct station_info*station information structure
3.4.22. wifi_softap_free_station_info
Function: free the struct station_info by calling the wifi_softap_get_station_info
function
Function definition:
void wifi_softap_free_station_info(void)
Input parameters:
null
Return:
-
ESP8266EX SDK Programming Guide
35 / 95 Espressif Systems February 9, 2015
null
Examples of getting mac and ip information:
Method 1:
struct station_info * station = wifi_softap_get_station_info();
struct station_info * next_station;
while(station){
os_printf("bssid : "MACSTR", ip : "IPSTR"\n",
MAC2STR(station->bssid), IP2STR(&station->ip));
next_station = STAILQ_NEXT(station, next);
os_free(station); // Free it directly
station = next_station;
}
Method 2
struct station_info * station = wifi_softap_get_station_info();
while(station){
os_printf("bssid : "MACSTR", ip : "IPSTR"\n", MAC2STR(station->bssid),
IP2STR(&station->ip));
station = STAILQ_NEXT(station, next);
}
wifi_softap_free_station_info(); // Free it by calling functions
3.4.23. wifi_softap_dhcps_start
FunctionEnable ESP8266 softAP dhcp server.
NoteDHCP default enable.
Prototype
bool wifi_softap_dhcps_start(void)
Parameter
Null
Return
-
ESP8266EX SDK Programming Guide
36 / 95 Espressif Systems February 9, 2015
True - succeed
False - fail.
3.4.24. wifi_softap_dhcps_stop
FunctionDisable ESP8266 softAP dhcp server.
NoteDHCP default enable.
Prototype
bool wifi_softap_dhcps_stop(void)
Parameter
Null
Return
True - succeed
False - fail.
3.4.25. wifi_softap_set_dhcps_lease
FunctionSet the IP range that can be got from ESP8266 softAP dhcp server.
NoteThis API need to be called during DHCP server disable.
Prototype
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please)
Parameter
struct dhcps_lease {
uint32 start_ip;
uint32 end_ip;
};
Return
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
37 / 95 Espressif Systems February 9, 2015
3.4.26. wifi_softap_dhcps_status
FunctionGet ESP8266 softAP dhcp server status.
Prototype
enum dhcp_status wifi_softap_dhcps_status(void)
Parameter
NULL
Return
enum dhcp_status {
DHCP_STOPPED,
DHCP_STARTED
};
3.4.27. wifi_set_phy_mode
FuctionSet ESP8266 physical mode802.11b/g/n.
NoteESP8266 softAP only support bg.
Prototype
bool wifi_set_phy_mode(enum phy_mode mode)
Parameter
enum phy_mode mode physical mode
enum phy_mode{
PHY_MODE_11B = 1,
PHY_MODE_11G = 2,
PHY_MODE_11N = 3
};
Return
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
38 / 95 Espressif Systems February 9, 2015
3.4.28. wifi_get_phy_mode
FunctionGet ESP8266 physical mode802.11b/g/n
Prototype
Enum phy_mode wifi_get_phy_mode(void)
Parameter
Null
Return
enum phy_mode{
PHY_MODE_11B = 1,
PHY_MODE_11G = 2,
PHY_MODE_11N = 3
};
3.4.29. wifi_get_ip_info
Function: Get ip info of wifi station or softap interface
Function definition:
bool wifi_get_ip_info(uint8 if_index, struct ip_info *info)
Parameters:
uint8 if_indexthe interface to get ip info: 0x00 for STATION_IF, 0x01
for
SOFTAP_IF.
struct ip_info *infopointer to get ip info of a certain interface
Return
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
39 / 95 Espressif Systems February 9, 2015
3.4.30. wifi_set_ip_info
Function: Set ip address of ESP8266 station or softAP
Note: only can be used in user_init.
Function definition:
bool wifi_set_ip_info(uint8 if_index, struct ip_info *info)
Prototype
uint8 if_index set station ip or softAP ip
#define STATION_IF 0x00
#define SOFTAP_IF 0x01
struct ip_info *info ip information
Example
struct ip_info info;
IP4_ADDR(&info.ip, 192, 168, 3, 200);
IP4_ADDR(&info.gw, 192, 168, 3, 1);
IP4_ADDR(&info.netmask, 255, 255, 255, 0);
wifi_set_ip_info(STATION_IF, &info);
IP4_ADDR(&info.ip, 10, 10, 10, 1);
IP4_ADDR(&info.gw, 10, 10, 10, 1);
IP4_ADDR(&info.netmask, 255, 255, 255, 0);
wifi_set_ip_info(SOFTAP_IF, &info);
Return
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
40 / 95 Espressif Systems February 9, 2015
3.4.31. wifi_set_macaddr
Function: set mac address
Note: only can be used in user_init
Function definition:
bool wifi_set_macaddr(uint8 if_index, uint8 *macaddr)
Parameter
uint8 if_index set station mac or softAP mac
#define STATION_IF 0x00
#define SOFTAP_IF 0x01
uint8 *macaddr mac address
Example
char sofap_mac[6] = {0x16, 0x34, 0x56, 0x78, 0x90, 0xab};
char sta_mac[6] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab};
wifi_set_macaddr(SOFTAP_IF, sofap_mac);
wifi_set_macaddr(STATION_IF, sta_mac);
Return
True - succeed
False - fail.
3.4.32. wifi_get_macaddr
Function: get mac address
Function definition:
Bool wifi_get_macaddr(uint8 if_index , uint8 *macaddr)
Parameter
uint8 if_index set station mac or softAP mac
#define STATION_IF 0x00
#define SOFTAP_IF 0x01
-
ESP8266EX SDK Programming Guide
41 / 95 Espressif Systems February 9, 2015
uint8 *macaddr mac address
Return
True - succeed
False - fail.
3.4.33. wifi_set_sleep_type
FunctionSet sleep type for power saving. Set NONE_SLEEP_T to disable
power saving
Note: Default to be Modem sleep.
Prototype
Bool wifi_set_sleep_type(enum sleep_type type)
Parameters
enum sleep_type type sleep type
Return
True succeedFalse fail.
3.4.34. wifi_get_sleep_type
Function: Get sleep type.
Prototype
Enum sleep_type wifi_get_sleep_type(void)
Parameters
NULL
Return
Enum sleep_type{
NONE_SLEEP_T = 0;
LIGHT_SLEEP_T,
MODEM_SLEEP_T
};
-
ESP8266EX SDK Programming Guide
42 / 95 Espressif Systems February 9, 2015
3.4.35. wifi_status_led_install
Function: Install wifi status LED
Function definition:
Void wifi_status_led_install (uint8 gpio_id, uint32 gpio_name, uint8
gpio_func)
Parameter
uint8 gpio_idgpio number
uint8 gpio_namegpio mux name
uint8 gpio_funcgpio function
Return
NULL
Example
Use GPIO0 as wifi status LED
#define HUMITURE_WIFI_LED_IO_MUX PERIPHS_IO_MUX_GPIO0_U
#define HUMITURE_WIFI_LED_IO_NUM 0
#define HUMITURE_WIFI_LED_IO_FUNC FUNC_GPIO0
wifi_status_led_install(HUMITURE_WIFI_LED_IO_NUM,
HUMITURE_WIFI_LED_IO_MUX, HUMITURE_WIFI_LED_IO_FUNC)
3.4.36. wifi_status_led_uninstall
Function: Uninstall wifi status LED
Function definition:
Void wifi_status_led_uninstall ()
Parameter
NULL
Return
NULL
-
ESP8266EX SDK Programming Guide
43 / 95 Espressif Systems February 9, 2015
3.5. Upgrade(FOTA) APIs
3.5.1. system_upgrade_userbin_check
Function: Check userbin
Function definition:
uint8 system_upgrade_userbin_check()
Input parameters:
null
Return:
0x00 : UPGRADE_FW_BIN1 , i.e., user1.bin
0x01 : UPGRADE_FW_BIN2 , i.e., user2.bin
3.5.2. system_upgrade_flag_set
Function: Set upgrade status flag.
Note:
If you using system_upgrade_start to upgrade, this API need not be called;
If you using spi_flash_write to upgrade firmware yourself, this flag need to be
set to UPGRADE_FLAG_FINISH, then call system_upgrade_reboot to reboot
to run new firmware.
Prototype:
void system_upgrade_flag_set(uint8 flag)
Parameter
uint8 flag #define UPGRADE_FLAG_IDLE 0x00
#define UPGRADE_FLAG_START 0x01
#define UPGRADE_FLAG_FINISH 0x02
Return
NULL
-
ESP8266EX SDK Programming Guide
44 / 95 Espressif Systems February 9, 2015
3.5.3. system_upgrade_flag_check
Function: Get upgrade status flag.
Prototype
uint8 system_upgrade_flag_check()
Parameter
NULL
Return
#define UPGRADE_FLAG_IDLE 0x00
#define UPGRADE_FLAG_START 0x01
#define UPGRADE_FLAG_FINISH 0x02
3.5.4. system_upgrade_start
Function: Configure parameters and start upgrade
Function definition:
bool system_upgrade_start (struct upgrade_server_info *server)
Parameters:
struct upgrade_server_info *server server related parameters
Return
true: start upgrade
false: upgrade cant be started.
3.5.5. system_upgrade_reboot
Function: reboot system and use new version
Function definition:
void system_upgrade_reboot (void)
Input parameters:
null
Return:
-
ESP8266EX SDK Programming Guide
45 / 95 Espressif Systems February 9, 2015
Null
3.6. Sniffer Related APIs
3.6.1. wifi_promiscuous_enable
Function: Enable promiscuous mode for sniffer
Function definition:
Void wifi_promiscuous_enable(uint8 promiscuous)
Parameter
uint8 promiscuous 0, disable promiscuous
1, enable promiscuous
Return:
null
Example: apply for a demo of sniffer function from Espressif
3.6.2. wifi_set_promiscuous_rx_cb
Function: register a rx callback function in promiscuous mode, which will be
called when data packet is received.
Function definition:
Void wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb)
Parameter
wifi_promiscuous_cb_t cb callback
Return:
null
3.6.3. wifi_get_channel
Function: get channel number, for sniffer
Function definition:
-
ESP8266EX SDK Programming Guide
46 / 95 Espressif Systems February 9, 2015
uint8 wifi_get_channel(void)
parameters:
null
Return:
Channel number
3.6.4. wifi_set_channel
Function: set channel number, for sniffer
Function definition:
bool wifi_set_channel (uint8 channel)
Parameters
uint8 channel channel number
Return
True - succeed
False - fail.
3.7. smart config APIs
3.7.1. smartconfig_start
FunctionMake ESP8266 station connect to AP
NoteIn this APIESP8266 will be set to station mode. Run phone APP to
make device listen to the SSID and password of targeting AP. Can not call
smartconfig_start twice before it finish.
Prototype
bool smartconfig_start(sc_type type, sc_callback_t cb)
Parameter
sc_type type smart config protocol typeAirKiss or ESP-TOUCH
sc_callback_t cb smart config callbackgo into it when ESP8266 got
SSID and password of targeting APparameter of this callback refer to the
-
ESP8266EX SDK Programming Guide
47 / 95 Espressif Systems February 9, 2015
examplea pointer of struct station_config
Return
True - succeed
False - fail.
Example
void ICACHE_FLASH_ATTR
smartconfig_done(void *data)
{
struct station_config *sta_conf = data;
wifi_station_set_config(sta_conf);
wifi_station_disconnect();
wifi_station_connect();
user_devicefind_init();
user_esp_platform_init();
}
smartconfig_start(SC_TYPE_ESPTOUCH,smartconfig_done);
3.7.2. smartconfig_stop
Functionstop smart configfree the buffer taken by smartconfig_start.
Note: When connect to AP succeed, this API should be called to free memory
taken by smartconfig_start.
Prototype
bool smartconfig_stop(void)
Parameter
NULL
Return
True - succeed
False - fail.
-
ESP8266EX SDK Programming Guide
48 / 95 Espressif Systems February 9, 2015
3.7.3. get_smartconfig_status
Functionget smart config status
NoteCan not call this API after smartconfig_stopbecause smartconfig_stop
will free memory which contains this smart config status
Prototype
sc_status get_smartconfig_status(void)
Parameter
NULL
Return
typedef enum {
SC_STATUS_FIND_CHANNEL = 0,
SC_STATUS_GETTING_SSID_PSWD,
SC_STATUS_GOT_SSID_PSWD,
SC_STATUS_LINK,
} sc_status;
-
ESP8266EX SDK Programming Guide
49 / 95 Espressif Systems February 9, 2015
3.8. Network APIs
Locate in esp_iot_sdk\include\espconn.h
General APIsAPIs can be used for both TCP and UDP .
TCP APIsAPIs that are only used for TCP.
UDP APIsAPIs that are only used for UDP.
3.8.1. General APIs
3.8.1.1. espconn_delete
Function: Delete a transmission.
Note: Correspondence create api : TCP espconn_accept, UDP espconn_create
Prototype
Sin8 espconn_delete(struct espconn *espconn)
Parameter
struct espconn *espconn corresponding connected control block
structure
Return
0 - succeed#define ESPCONN_OK 0
Not 0 - Erropls refer to espconn.h
3.8.1.2. espconn_gethostbyname
Function: DNS
Function definition:
Err_t espconn_gethostbyname(struct espconn *pespconn, const char
*hostname, ip_addr_t *addr, dns_found_callback found)
Parameters:
struct espconn *espconncorresponding connected control block
-
ESP8266EX SDK Programming Guide
50 / 95 Espressif Systems February 9, 2015
structure
const char *hostnamedomain name string pointer
ip_addr_t *addrip address
dns_found_callback foundcallback
Return:
Err_tESPCONN_OK
ESPCONN_INPROGRESS
ESPCONN_ARG
Example as follows. Pls refer to source code of IoT_Demo
ip_addr_t esp_server_ip;
LOCAL void ICACHE_FLASH_ATTR
user_esp_platform_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
{
struct espconn *pespconn = (struct espconn *)arg;
os_printf("user_esp_platform_dns_found %d.%d.%d.%d\n",
*((uint8 *)&ipaddr->addr), *((uint8 *)&ipaddr->addr + 1),
*((uint8 *)&ipaddr->addr + 2), *((uint8 *)&ipaddr->addr + 3));
}
Void dns_test(void)
{
espconn_gethostbyname(pespconn,iot.espressif.cn,&esp_server_ip,user_es
p_platform_dns_found);
}
3.8.1.3. espconn_port
Function: get void ports
Function definition:
-
ESP8266EX SDK Programming Guide
51 / 95 Espressif Systems February 9, 2015
uint32 espconn_port(void);
Input parameters:
null
Return:
uint32id of the port you get
3.8.1.4. espconn_regist_sentcb
Function: register data sent function which will be called back when data are
successfully sent.
Function definition:
Sint8 espconn_regist_sentcb(struct espconn *espconn,
espconn_sent_callback sent_cb)
Parameters
struct espconn *espconncorresponding connected control block
structure
espconn_sent_callback sent_cbregistered callback function
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.1.5. espconn_regist_recvcb
Function: register data receive function which will be called back when data are
received
Function definition:
Sint8 espconn_regist_recvcb(struct espconn *espconn,
espconn_recv_callback recv_cb)
Input parameters:
struct espconn *espconncorresponding connected control block
-
ESP8266EX SDK Programming Guide
52 / 95 Espressif Systems February 9, 2015
structure
espconn_connect_callback connect_cbregistered callback function
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.1.6. espconn_sent_callback
Function: callback after the data are sent
Function definition:
void espconn_sent_callback (void *arg)
Input parameters:
void *argcall back function parameters
Return:
null
3.8.1.7. espconn_recv_callback
Function: callback after data are received
Function definition:
void espconn_recv_callback (void *arg, char *pdata, unsigned short len)
Input parameters:
void *argcallback function parameters
char *pdatareceived data entry parameters
unsigned short lenreceived data length
Return:
null
-
ESP8266EX SDK Programming Guide
53 / 95 Espressif Systems February 9, 2015
3.8.1.8. espconn_sent
Function: send data through wifi
Note: Please call espconn_sent after espconn_sent_callback of the pre-packet.
Function definition:
sint8 espconn_sent(struct espconn *espconn, uint8 *psent, uint16 length)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
uint8 *psentsent data pointer
uint16 lengthsent data length
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2. TCP APIs
3.8.2.1. espconn_accept
Function: listening connection. This function is used when create a TCP server.
Function definition:
sint8 espconn_accept(struct espconn *espconn)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
-
ESP8266EX SDK Programming Guide
54 / 95 Espressif Systems February 9, 2015
3.8.2.2. espconn_secure_accept
Function: encrypted listening connection. This function is used when create a
TCP server which support SSL.
Function definition:
sint8 espconn_secure_accept(struct espconn *espconn)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.3. espconn_regist_time
Function: register timeout interval when ESP8266 is TCP server
Function definition:
sint8 espconn_regist_time(struct espconn *espconn, uint32 interval, uint8
type_flag)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
uint32 interval timeout interval, unit: second, maximum: 7200
seconds
uint8 type_flag 0, set all connections; 1, set a single connection
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
-
ESP8266EX SDK Programming Guide
55 / 95 Espressif Systems February 9, 2015
3.8.2.4. espconn_get_connection_info
Function: get a connections info in TCP multi-connection case
Function definition:
sint8 espconn_get_connection_info(struct espconn *espconn, remot_info
**pcon_info, uint8 typeflags)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
remot_info **pcon_infoconnect to client info
uint8 typeflags 0, regular server;1, ssl server
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.5. espconn_connect
Function: connect to a TCP server, and ESP8266 is the TCP client.
Function definition:
sint8 espconn_connect(struct espconn *espconn)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.6. espconn_connect_callback
Function: successful listening(ESP8266 as TCP server) or
-
ESP8266EX SDK Programming Guide
56 / 95 Espressif Systems February 9, 2015
connection(ESP8266 as TCP client) callback
Function definition:
void espconn_connect_callback (void *arg)
Input parameters:
void *argcallback function parameters
Return:
null
3.8.2.7. espconn_set_opt
Function: Set option of TCP connection
Prototype
sint8 espconn_set_opt(struct espconn *espconn, uint8 opt)
Parameter
struct espconn *espconncorresponding connected control structure
uint8 opt
0, free memory after TCP disconnection happen need not wait 2
minutes
1disable nalgo algorithm during TCP data transmission, quiken the
data transmission.
Return
0 - succeed#define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
Note
In general, we need not call this API
If call espconn_set_opt(espconn, 0)please call it in connected callback
If call espconn_set_opt(espconn, 1)please call it before disconnect
-
ESP8266EX SDK Programming Guide
57 / 95 Espressif Systems February 9, 2015
3.8.2.8. espconn_disconnect
Function: disconnect a TCP connection
Function definition:
sint8 espconn_disconnect(struct espconn *espconn);
Input parameters:
struct espconn *espconncorresponding connected control structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.9. espconn_regist_connectcb
Function: register connection function which will be called back under
successful TCP connection
Function definition:
Sint8 espconn_regist_connectcb(struct espconn *espconn,
espconn_connect_callback connect_cb)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
espconn_connect_callback connect_cbregistered callback function
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.10. espconn_regist_reconcb
Function: register reconnect callback
Note: Reconnect callback is more like a network error handler, no matter error
-
ESP8266EX SDK Programming Guide
58 / 95 Espressif Systems February 9, 2015
occurred in any phase, it will go into reconnect callback. For example, if
espconn_sent fail, it will go into reconnect callback as network is broken.
Function definition:
sint8 espconn_regist_reconcb(struct espconn *espconn,
espconn_connect_callback recon_cb)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
espconn_connect_callback connect_cbregistered callback function
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.11. espconn_regist_disconcb
Function: register disconnection function which will be called back under
successful TCP disconnection
Function definition:
Sint8 espconn_regist_disconcb(struct espconn *espconn,
espconn_connect_callback discon_cb)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
espconn_connect_callback connect_cbregistered callback function
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
-
ESP8266EX SDK Programming Guide
59 / 95 Espressif Systems February 9, 2015
3.8.2.12. espconn_secure_connect
Function: Secure connect(SSL) to a TCP server, and ESP8266 is the TCP
client.
Function definition:
Sint8 espconn_secure_connect (struct espconn *espconn)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.13. espconn_secure_sent
Function: send encrypted dataSSL
Function definition:
Sint8 espconn_secure_sent (struct espconn *espconn, uint8 *psent, uint16
length)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
uint8 *psentsent data pointer
uint16 lengthsent data length
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
-
ESP8266EX SDK Programming Guide
60 / 95 Espressif Systems February 9, 2015
3.8.2.14. espconn_secure_disconnect
Function: secure TCP disconnection(SSL)
Function definition:
Sint8 espconn_secure_disconnect(struct espconn *espconn)
Input parameters:
struct espconn *espconncorresponding connected control block
structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.15. espconn_tcp_get_max_con
FunctionGet maximum number of how many TCP connection is allowed.
Prototype
uint8 espconn_tcp_get_max_con(void)
Parameter
NULL
Return
Maximum number of how many TCP connection is allowed.
3.8.2.16. espconn_tcp_set_max_con
FunctionSet the maximum number of how many TCP connection is allowed.
Prototype
Sint8 espconn_tcp_set_max_con(uint8 num)
Parameter
uint8 num Maximum number of how many TCP connection is allowed.
Return:
-
ESP8266EX SDK Programming Guide
61 / 95 Espressif Systems February 9, 2015
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
3.8.2.17. espconn_tcp_get_max_con_allow
Function: Get the maximum number of TCP clients which are allowed to
connect to ESP8266 TCP server.
Prototype
Sint8 espconn_tcp_get_max_con_allow(struct espconn *espconn)
Parameter:
struct espconn *espconncorresponding connected control structure
Return:
Maximum number of TCP clients which are allowed.
3.8.2.18. espconn_tcp_set_max_con_allow
Function: Set the maximum number of TCP clients which are allowed to
connect to ESP8266 TCP server.
Prototype
Sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn, uint8
num)
Parameter:
struct espconn *espconncorresponding connected control structure
uint8 num -- Maximum number of TCP clients which are allowed.
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.h
-
ESP8266EX SDK Programming Guide
62 / 95 Espressif Systems February 9, 2015
3.8.2.19. espconn_recv_hold
FunctionBlock TCP receiving data
NoteThis API block TCP receiving data eventuallynot immediatelyso we
recommended to call it while reserving 1460*5 Bytes memory. This API can be
called more than once.
Prototype
Sint8 espconn_recv_hold(struct espconn *espconn)
Parameter:
struct espconn *espconncorresponding connected control structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.hESPCONN_ARG means could not
find the TCP connection according to parameter espconn
3.8.2.20. espconn_recv_unhold
FunctionStop blocking TCP receiving data
NoteThis API take effect immediately
Prototype
Sint8 espconn_recv_unhold(struct espconn *espconn)
Parameter:
struct espconn *espconncorresponding connected control structure
Return:
0 - succeed, #define ESPCONN_OK 0
Not 0 - error, pls refer to espconn.hESPCONN_ARG means could not
find the TCP connection according to parameter espconn
-
ESP8266EX SDK Programming Guide
63 / 95 Espressif Systems February 9, 2015
3.8.3. UDP APIs
3.8.3.1. espconn_create
Functioncreate UDP transmission.
Prototype
Sin8 espconn_create(struct espconn *espconn)
Parameter
struct espconn *espconn corresponding connected control block
structure
Return
0 - succeed#define ESPCONN_OK 0
Not 0 - Erropls refer to espconn.h
3.8.3.2. espconn_igmp_join
FunctionJoin a multicast group
Prototype
Sin8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip)
Parameters
ip_addr_t *host_ip ip of host
ip_addr_t *multicast_ip ip of multicast group
Return
0 - succeed#define ESPCONN_OK 0
Not 0 - Erropls refer to espconn.h
-
ESP8266EX SDK Programming Guide
64 / 95 Espressif Systems February 9, 2015
3.8.3.3. espconn_igmp_leave
FunctionQuit a multicast group
Prototype
Sin8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip)
Parameters
ip_addr_t *host_ip ip of host
ip_addr_t *multicast_ip ip of multicast group
Return
0 - succeed#define ESPCONN_OK 0
Not 0 - Erropls refer to espconn.h
-
ESP8266EX SDK Programming Guide
65 / 95 Espressif Systems February 9, 2015
3.9. AT APIs
AT APIs example refer to esp_iot_sdk/examples/5.at/user/user_main.c
3.9.1. at_response_ok
Functionoutput OK to AT Port (UART0)
Prototype
void at_response_ok(void)
Parameter
NULL
Return
NULL
3.9.2. at_response_error
Functionoutput ERROR to AT Port (UART0)
Prototype
void at_response_error(void)
Parameter
NULL
Return
NULL
3.9.3. at_cmd_array_regist
Functionregister user-define AT commands
Prototype
void at_cmd_array_regist (at_funcation * custom_at_cmd_arrar, uint32
cmd_num)
Parameter
-
ESP8266EX SDK Programming Guide
66 / 95 Espressif Systems February 9, 2015
at_funcation * custom_at_cmd_arrar Array of user-define AT commands
uint32 cmd_num Number counts of user-define AT commands
Return
NULL
Examplerefer to esp_iot_sdk/examples/5.at/user/user_main.c
3.9.4. at_get_next_int_dec
Functionparse int from AT command
Prototype
bool at_get_next_int_dec (char **p_src,int* result,int* err)
Parameter
char **p_src - *p_src is the AT command that need to be parsed
int* result int number parsed from the AT command
int* err - error code
1int number is omitreturn error code 1
3only -be found, return error code 3
Return
TRUEparser succeed (if int number default omitit will return Truebut
error code to be 1)
FALSEparser error with error code, probable causeint number more than
10 bytescontains termination characters\r only contains -
Example: refer to esp_iot_sdk/examples/5.at/user/user_main.c
3.9.5. at_data_str_copy
Functionparse string from AT command
Prototype
Int32 at_data_str_copy (char * p_dest, char ** p_src,int32 max_len)
Parameter
char * p_dest - string parsed from the AT command
-
ESP8266EX SDK Programming Guide
67 / 95 Espressif Systems February 9, 2015
char ** p_src - *p_src is the AT command that need to be parsed
int32 max_len max string length that allowed
Return
If succeedreturns the length of the string
If failreturns -1
Example: refer to esp_iot_sdk/examples/5.at/user/user_main.c
3.9.6. at_init
Function: AT initialize
Prototype
void at_init (void)
Parameter
NULL
Return
NULL
Example: refer to esp_iot_sdk/examples/5.at/user/user_main.c
3.9.7. at_port_print
Funtion: output string to AT PORT(UART0)
Prototype
void at_port_print(const char *str)
Parameter
const char *str string that need to output
Return
NULL
Example: refer to esp_iot_sdk/examples/5.at/user/user_main.c
-
ESP8266EX SDK Programming Guide
68 / 95 Espressif Systems February 9, 2015
3.10. json APIs
Locate in : esp_iot_sdk\include\json\jsonparse.h & jsontree.h
3.10.1. jsonparse_setup
Function:json initialize parsing
Function definition:
void jsonparse_setup(struct jsonparse_state *state, const char *json, int
len)
Input parameters:
struct jsonparse_state *statejson parsing pointer
const char *jsonjson parsing character string
int lencharacter string length
Return:
null
3.10.2. jsonparse_next
Function: jsonparse next object
Function definition:
int jsonparse_next(struct jsonparse_state *state)
Input parameters:
struct jsonparse_state *statejson parsing pointer
Return:
intparsing result
3.10.3. jsonparse_copy_value
Function: copy current parsing character string to a certain buffer
Function definition:
int jsonparse_copy_value(struct jsonparse_state *state, char *str, int
-
ESP8266EX SDK Programming Guide
69 / 95 Espressif Systems February 9, 2015
size)
Input parameters:
struct jsonparse_state *statejson parsing pointer
char *strbuffer pointer
int sizebuffer size
Return:
intcopy result
3.10.4. jsonparse_get_value_as_int
Function: parse json to get integer
Function definition:
int jsonparse_get_value_as_int(struct jsonparse_state *state)
Input parameters:
struct jsonparse_state *statejson parsing pointer
Return:
intparsing result
3.10.5. jsonparse_get_value_as_long
Function: parse json to get long integer
Function definition:
long jsonparse_get_value_as_long(struct jsonparse_state *state)
Input parameters:
struct jsonparse_state *statejson parsing pointer
Return:
longparsing result
3.10.6. jsonparse_get_len
Function: get parsed json length
Function definition:
-
ESP8266EX SDK Programming Guide
70 / 95 Espressif Systems February 9, 2015
int jsonparse_get_value_len(struct jsonparse_state *state)
Input parameters:
struct jsonparse_state *statejson parsing pointer
Return:
intparsed jason length
3.10.7. jsonparse_get_value_as_type
Function: parsed json data type
Function definition:
int jsonparse_get_value_as_type(struct jsonparse_state *state)
Input parameters:
struct jsonparse_state *statejson parsing pointer
Return:
intparsed json data type
3.10.8. jsonparse_strcmp_value
Function: compare parsed json and certain character string
Function definition:
int jsonparse_strcmp_value(struct jsonparse_state *state, const char *str)
Input parameters:
struct jsonparse_state *statejson parsing pointer
const char *strcharacter buffer
Return:
intcomparison result
3.10.9. jsontree_set_up
Function: create json data tree
Function definition:
void jsontree_setup(struct jsontree_context *js_ctx,
-
ESP8266EX SDK Programming Guide
71 / 95 Espressif Systems February 9, 2015
struct jsontree_value *root, int (* putchar)(int))
Input parameters:
struct jsontree_context *js_ctxjson tree element pointer
struct jsontree_value *rootroot element pointer
int (* putchar)(int)input function
Return:
null
3.10.10. jsontree_reset
Function: reset json tree
Function definition:
void jsontree_reset(struct jsontree_context *js_ctx)
Input parameters:
struct jsontree_context *js_ctxjson data tree pointer
Return:
null
3.10.11. jsontree_path_name
Function: get json tree parameters
Function definition:
const char *jsontree_path_name(const struct jsontree_cotext *js_ctx, int
depth)
Input parameters:
struct jsontree_context *js_ctxjson tree pointer
int depthjson tree depth
Return:
char*parameter pointer
-
ESP8266EX SDK Programming Guide
72 / 95 Espressif Systems February 9, 2015
3.10.12. jsontree_write_int
Function: write integer to joson tree
Function definition:
void jsontree_write_int(const struct jsontree_context *js_ctx, int value)
Input parameters:
struct jsontree_context *js_ctxjson tree pointer
int valueinteger value
Return:
null
3.10.13. jsontree_write_int_array
Function: write integer array to json tree
Function definition:
void jsontree_write_int_array(const struct jsontree_context *js_ctx, const
int *text, uint32 length)
Input parameters:
struct jsontree_context *js_ctxjson tree pointer
int *textarray entry address
uint32 lengtharray length
Return:
null
3.10.14. jsontree_write_string
Function: write string to json tree
Function definition:
void jsontree_write_string(const struct jsontree_context *js_ctx, const
char *text)
Input parameters:
struct jsontree_context *js_ctxjson tree pointer
-
ESP8266EX SDK Programming Guide
73 / 95 Espressif Systems February 9, 2015
const char* textcharacter string pointer
Return:
null
3.10.15. jsontree_print_next
Function: json tree depth
Function definition:
int jsontree_print_next(struct jsontree_context *js_ctx)
Input parameters:
struct jsontree_context *js_ctxjson tree pointer
Return:
intjson tree depth
3.10.16. jsontree_find_next
Function: find json tree element
Function definition:
struct jsontree_value *jsontree_find_next(struct jsontree_context *js_ctx,
int type)
Input parameters:
struct jsontree_context *js_ctxjson tree pointer
inttype
Return:
struct jsontree_value *json tree element pointer
-
ESP8266EX SDK Programming Guide
74 / 95 Espressif Systems February 9, 2015
4. Structure definition
4.1. Timer
typedef void ETSTimerFunc(void *timer_arg);
typedef struct _ETSTIMER_ {
struct _ETSTIMER_ *timer_next;
uint32_t timer_expire;
uint32_t timer_period;
ETSTimerFunc *timer_func;
void *timer_arg;
} ETSTimer;
4.2. Wifi related structure
4.2.1. station related
struct station_config {
uint8 ssid[32];
uint8 password[64];
uint8 bssid_set;
uint8 bssid[6];
};
Note:
Bssid as mac address of AP, will be used when serveral APs have the same
ssid.
If station_config.bssid_set