函数ip在线查询

ip在线查询  时间:2021-03-19  阅读:()
www.
espressif.
comESP8266Non-OSSDKAPI参考版本3.
0.
2乐鑫信息科技版权所有2020关于本手册本文档提供ESP8266_NONOS_SDK的API说明.
发布说明日期版本发布说明2016.
03V1.
5.
2更新章节3.
2、A.
5和3.
3.
372016.
04V1.
5.
3新增章节3.
5.
11和3.
5.
12更新章节3.
5.
67和3.
7.
92016.
05V1.
5.
4新增章节3.
3.
8、3.
3.
46、3.
3.
47、3.
3.
48和3.
7.
8更新章节3.
72016.
07V2.
0.
0更新章节3.
8.
6和3.
5.
65新增章节3.
9、3.
14、3.
3.
48、3.
5.
72和3.
5.
732016.
11V2.
0.
1将章节3.
5.
30中的函数定义wifi_station_get_hostname改为wifi_station_set_hostname2017.
01V2.
0.
2更新第2章2017.
05V2.
1.
0新增章节3.
3.
49,3.
3.
50,4.
3.
6和8.
2.
42017.
05V2.
1.
1更新第2章2017.
06V2.
1.
2更新章节3.
3.
92018.
02V2.
2更新章节6.
2.
1,6.
2.
3,6.
2.
4,3.
3.
49新增章节3.
4.
8,3.
4.
9,3.
5.
74,3.
5.
752018.
05V2.
2.
1更新章节2.
4,3.
5.
54,3.
72018.
08V3.
0新增章节3.
3.
50,3.
3.
51,3.
3.
52,3.
5.
76,3.
5.
77,3.
5.
78,3.
5.
79,附录A.
6更新章节2.
5删除system_phy_freq_trace_enable2019.
03V3.
0.
1删除章节3.
5.
76,3.
5.
77,3.
5.
78,3.
5.
792020.
09V3.
0.
2删除关于文档《ESP8266Flash读写说明》的链接文档变更通知用户可通过乐鑫官网订阅页面https://www.
espressif.
com/zh-hans/subscribe订阅技术文档变更的电子邮件通知.
证书下载用户可通过乐鑫官网证书下载页面https://www.
espressif.
com/zh-hans/certicates下载产品证书.
目录1.
前言12.
Non-OSSDK22.
1.
Non-OSSDK简介22.
2.
代码结构22.
3.
定时器(timer)和中断42.
4.
系统性能42.
5.
系统存储43.
应用程序接口(API)73.
1.
软件定时器73.
1.
1.
os_timer_arm73.
1.
2.
os_timer_disarm73.
1.
3.
os_timer_setfn83.
1.
4.
system_timer_reinit83.
1.
5.
os_timer_arm_us83.
2.
硬件中断定时器83.
2.
1.
hw_timer_init93.
2.
2.
hw_timer_arm93.
2.
3.
hw_timer_set_func103.
2.
4.
硬件定时器示例103.
3.
系统接口103.
3.
1.
system_get_sdk_version103.
3.
2.
system_restore113.
3.
3.
system_restart113.
3.
4.
system_init_done_cb113.
3.
5.
system_get_chip_id113.
3.
6.
system_get_vdd33123.
3.
7.
system_adc_read123.
3.
8.
system_adc_read_fast133.
3.
9.
system_deep_sleep143.
3.
10.
system_deep_sleep_set_option153.
3.
11.
system_phy_set_rfoption153.
3.
12.
system_phy_set_powerup_option163.
3.
13.
system_phy_set_max_tpw163.
3.
14.
system_phy_set_tpw_via_vdd33163.
3.
15.
system_set_os_print173.
3.
16.
system_print_meminfo173.
3.
17.
system_get_free_heap_size173.
3.
18.
system_os_task173.
3.
19.
system_os_post183.
3.
20.
system_get_time183.
3.
21.
system_get_rtc_time193.
3.
22.
system_rtc_clock_cali_proc193.
3.
23.
system_rtc_mem_write193.
3.
24.
system_rtc_mem_read203.
3.
25.
system_uart_swap203.
3.
26.
system_uart_de_swap203.
3.
27.
system_get_boot_version213.
3.
28.
system_get_userbin_addr213.
3.
29.
system_get_boot_mode213.
3.
30.
system_restart_enhance213.
3.
31.
system_update_cpu_req223.
3.
32.
system_get_cpu_freq223.
3.
33.
system_get_ash_size_map223.
3.
34.
system_get_rst_info233.
3.
35.
system_soft_wdt_stop233.
3.
36.
system_soft_wdt_restart233.
3.
37.
system_soft_wdt_feed243.
3.
38.
system_show_malloc243.
3.
39.
os_memset243.
3.
40.
os_memcpy253.
3.
41.
os_strlen253.
3.
42.
os_printf253.
3.
43.
os_bzero253.
3.
44.
os_delay_us263.
3.
45.
os_install_putc1263.
3.
46.
os_random263.
3.
47.
os_get_random263.
3.
48.
user_rf_cal_sector_set263.
3.
49.
system_deep_sleep_instant283.
3.
50.
system_partition_table_regist283.
3.
51.
system_partition_get_ota_partition_size283.
3.
52.
system_partition_get_item293.
4.
SPIFlash接口293.
4.
1.
spi_ash_get_id293.
4.
2.
spi_ash_erase_sector293.
4.
3.
spi_ash_write293.
4.
4.
spi_ash_read303.
4.
5.
system_param_save_with_protect303.
4.
6.
system_param_load313.
4.
7.
spi_ash_set_read_func313.
4.
8.
spi_ash_erase_protect_enable323.
4.
9.
spi_ash_erase_protect_disable323.
5.
Wi-Fi接口333.
5.
1.
wi_get_opmode333.
5.
2.
wi_get_opmode_default333.
5.
3.
wi_set_opmode333.
5.
4.
wi_set_opmode_current343.
5.
5.
wi_station_get_cong343.
5.
6.
wi_station_get_cong_default343.
5.
7.
wi_station_set_cong353.
5.
8.
wi_station_set_cong_current353.
5.
9.
wi_station_set_cert_key363.
5.
10.
wi_station_clear_cert_key373.
5.
11.
wi_station_set_username373.
5.
12.
wi_station_clear_username373.
5.
13.
wi_station_connect373.
5.
14.
wi_station_disconnect383.
5.
15.
wi_station_get_connect_status383.
5.
16.
wi_station_scan383.
5.
17.
scan_done_cb_t393.
5.
18.
wi_station_ap_number_set393.
5.
19.
wi_station_get_ap_info393.
5.
20.
wi_station_ap_change403.
5.
21.
wi_station_get_current_ap_id403.
5.
22.
wi_station_get_auto_connect403.
5.
23.
wi_station_set_auto_connect403.
5.
24.
wi_station_dhcpc_start413.
5.
25.
wi_station_dhcpc_stop413.
5.
26.
wi_station_dhcpc_status413.
5.
27.
wi_station_dhcpc_set_maxtry413.
5.
28.
wi_station_set_reconnect_policy423.
5.
29.
wi_station_get_rssi423.
5.
30.
wi_station_set_hostname423.
5.
31.
wi_station_get_hostname423.
5.
32.
wi_softap_get_cong423.
5.
33.
wi_softap_get_cong_default433.
5.
34.
wi_softap_set_cong433.
5.
35.
wi_softap_set_cong_current433.
5.
36.
wi_softap_get_station_num433.
5.
37.
wi_softap_get_station_info443.
5.
38.
wi_softap_free_station_info443.
5.
39.
wi_softap_dhcps_start443.
5.
40.
wi_softap_dhcps_stop453.
5.
41.
wi_softap_set_dhcps_lease453.
5.
42.
wi_softap_get_dhcps_lease463.
5.
43.
wi_softap_set_dhcps_lease_time463.
5.
44.
wi_softap_get_dhcps_lease_time473.
5.
45.
wi_softap_reset_dhcps_lease_time473.
5.
46.
wi_softap_dhcps_status473.
5.
47.
wi_softap_set_dhcps_oer_option473.
5.
48.
wi_set_phy_mode483.
5.
49.
wi_get_phy_mode483.
5.
50.
wi_get_ip_info483.
5.
51.
wi_set_ip_info493.
5.
52.
wi_set_macaddr493.
5.
53.
wi_get_macaddr503.
5.
54.
wi_set_sleep_type503.
5.
55.
wi_get_sleep_type503.
5.
56.
wi_status_led_install513.
5.
57.
wi_status_led_uninstall513.
5.
58.
wi_set_broadcast_if513.
5.
59.
wi_get_broadcast_if523.
5.
60.
wi_set_event_handler_cb523.
5.
61.
wi_wps_enable533.
5.
62.
wi_wps_disable543.
5.
63.
wi_wps_start543.
5.
64.
wi_set_wps_cb543.
5.
65.
wi_register_send_pkt_freedom_cb553.
5.
66.
wi_unregister_send_pkt_freedom_cb553.
5.
67.
wi_send_pkt_freedom563.
5.
68.
wi_rd_locp_recv_open563.
5.
69.
wi_rd_locp_recv_close563.
5.
70.
wi_register_rd_locp_recv_cb573.
5.
71.
wi_unregister_rd_locp_recv_cb573.
5.
72.
wi_enable_gpio_wakeup573.
5.
73.
wi_disable_gpio_wakeup573.
5.
74.
wi_set_country583.
5.
75.
wi_get_country583.
6.
RateControl接口593.
6.
1.
wi_set_user_xed_rate593.
6.
2.
wi_get_user_xed_rate593.
6.
3.
wi_set_user_sup_rate603.
6.
4.
wi_set_user_rate_limit613.
6.
5.
wi_set_user_limit_rate_mask623.
6.
6.
wi_get_user_limit_rate_mask623.
7.
强制休眠接口633.
7.
1.
wi_fpm_open633.
7.
2.
wi_fpm_close633.
7.
3.
wi_fpm_do_wakeup633.
7.
4.
wi_fpm_set_wakeup_cb643.
7.
5.
wi_fpm_do_sleep643.
7.
6.
wi_fpm_set_sleep_type643.
7.
7.
wi_fpm_get_sleep_type653.
7.
8.
wi_fpm_auto_sleep_set_in_null_mode653.
7.
9.
示例代码653.
8.
ESP-NOW接口683.
8.
1.
结构体683.
8.
2.
esp_now_init683.
8.
3.
esp_now_deinit693.
8.
4.
esp_now_register_recv_cb693.
8.
5.
esp_now_unregister_recv_cb693.
8.
6.
esp_now_register_send_cb703.
8.
7.
esp_now_unregister_send_cb703.
8.
8.
esp_now_send713.
8.
9.
esp_now_add_peer713.
8.
10.
esp_now_del_peer713.
8.
11.
esp_now_set_self_role713.
8.
12.
esp_now_get_self_role723.
8.
13.
esp_now_set_peer_role723.
8.
14.
esp_now_get_peer_role723.
8.
15.
esp_now_set_peer_key723.
8.
16.
esp_now_get_peer_key733.
8.
17.
esp_now_set_peer_channel733.
8.
18.
esp_now_get_peer_channel733.
8.
19.
esp_now_is_peer_exist733.
8.
20.
esp_now_fetch_peer743.
8.
21.
esp_now_get_cnt_info743.
8.
22.
esp_now_set_kok743.
9.
Simple-Pair接口753.
9.
1.
结构体753.
9.
2.
register_simple_pair_status_cb753.
9.
3.
unregister_simple_pair_status_cb753.
9.
4.
simple_pair_init763.
9.
5.
simple_pair_deinit763.
9.
6.
simple_pair_state_reset763.
9.
7.
simple_pair_ap_enter_announce_mode763.
9.
8.
simple_pair_sta_enter_scan_mode763.
9.
9.
simple_pair_sta_start_negotiate773.
9.
10.
simple_pair_ap_start_negotiate773.
9.
11.
simple_pair_ap_refuse_negotiate773.
9.
12.
simple_pair_set_peer_ref773.
9.
13.
simple_pair_get_peer_ref783.
10.
云端升级(FOTA)接口793.
10.
1.
system_upgrade_userbin_check793.
10.
2.
system_upgrade_ag_set793.
10.
3.
system_upgrade_ag_check793.
10.
4.
system_upgrade_start793.
10.
5.
system_upgrade_reboot803.
11.
Snier相关接口813.
11.
1.
wi_promiscuous_enable813.
11.
2.
wi_promiscuous_set_mac813.
11.
3.
wi_set_promiscuous_rx_cb813.
11.
4.
wi_get_channel823.
11.
5.
wi_set_channel823.
12.
SmartCong接口833.
12.
1.
smartcong_start833.
12.
2.
smartcong_stop843.
12.
3.
smartcong_set_type843.
12.
4.
airkiss_version853.
12.
5.
airkiss_lan_recv853.
12.
6.
airkiss_lan_pack863.
13.
SNTP接口873.
13.
1.
sntp_setserver873.
13.
2.
sntp_getserver873.
13.
3.
sntp_setservername873.
13.
4.
sntp_getservername873.
13.
5.
sntp_init873.
13.
6.
sntp_stop883.
13.
7.
sntp_get_current_timestamp883.
13.
8.
sntp_get_real_time883.
13.
9.
sntp_set_timezone883.
13.
10.
sntp_get_timezone893.
13.
11.
SNTP示例893.
14.
WPA2-Enterprise接口903.
14.
1.
wi_station_set_wpa2_enterprise_auth903.
14.
2.
wi_station_set_enterprise_cert_key903.
14.
3.
wi_station_clear_enterprise_cert_key913.
14.
4.
wi_station_set_enterprise_ca_cert913.
14.
5.
wi_station_clear_enterprise_ca_cert913.
14.
6.
wi_station_set_enterprise_username913.
14.
7.
wi_station_clear_enterprise_username923.
14.
8.
wi_station_set_enterprise_password923.
14.
9.
wi_station_clear_enterprise_password923.
14.
10.
wi_station_set_enterprise_new_password923.
14.
11.
wi_station_clear_enterprise_new_password933.
14.
12.
wi_station_set_enterprise_disable_time_check933.
14.
13.
wi_station_get_enterprise_disable_time_check933.
14.
14.
wpa2_enterprise_set_user_get_time933.
14.
15.
示例流程944.
TCP/UDP接口954.
1.
通用接口954.
1.
1.
espconn_delete954.
1.
2.
espconn_gethostbyname954.
1.
3.
espconn_port964.
1.
4.
espconn_regist_sentcb964.
1.
5.
espconn_regist_recvcb974.
1.
6.
espconn_sent_callback974.
1.
7.
espconn_recv_callback974.
1.
8.
espconn_get_connection_info974.
1.
9.
espconn_send984.
1.
10.
espconn_sent994.
2.
TCP接口1004.
2.
1.
espconn_accept1004.
2.
2.
espconn_regist_time1004.
2.
3.
espconn_connect1004.
2.
4.
espconn_regist_connectcb1014.
2.
5.
espconn_connect_callback1014.
2.
6.
espconn_set_opt1014.
2.
7.
espconn_clear_opt1024.
2.
8.
espconn_set_keepalive1024.
2.
9.
espconn_get_keepalive1034.
2.
10.
espconn_reconnect_callback1034.
2.
11.
espconn_regist_reconcb1044.
2.
12.
espconn_disconnect1044.
2.
13.
espconn_regist_disconcb1054.
2.
14.
espconn_abort1054.
2.
15.
espconn_regist_write_nish1054.
2.
16.
espconn_tcp_get_max_con1064.
2.
17.
espconn_tcp_set_max_con1064.
2.
18.
espconn_tcp_get_max_con_allow1064.
2.
19.
espconn_tcp_set_max_con_allow1064.
2.
20.
espconn_recv_hold1064.
2.
21.
espconn_recv_unhold1074.
2.
22.
espconn_secure_accept1074.
2.
23.
espconn_secure_delete1074.
2.
24.
espconn_secure_set_size1084.
2.
25.
espconn_secure_get_size1084.
2.
26.
espconn_secure_connect1094.
2.
27.
espconn_secure_send1094.
2.
28.
espconn_secure_sent1104.
2.
29.
espconn_secure_disconnect1104.
2.
30.
espconn_secure_ca_enable1104.
2.
31.
espconn_secure_ca_disable1114.
2.
32.
espconn_secure_cert_req_enable1114.
2.
33.
espconn_secure_cert_req_disable1114.
2.
34.
espconn_secure_set_default_certicate1124.
2.
35.
espconn_secure_set_default_private_key1124.
3.
UDP接口1134.
3.
1.
espconn_create1134.
3.
2.
espconn_sendto1134.
3.
3.
espconn_igmp_join1134.
3.
4.
espconn_igmp_leave1144.
3.
5.
espconn_dns_setserver1144.
3.
6.
espconn_dns_getserver1144.
4.
mDNS接口1154.
4.
1.
espconn_mdns_init1154.
4.
2.
espconn_mdns_close1154.
4.
3.
espconn_mdns_server_register1154.
4.
4.
espconn_mdns_server_unregister1164.
4.
5.
espconn_mdns_get_servername1164.
4.
6.
espconn_mdns_set_servername1164.
4.
7.
espconn_mdns_set_hostname1164.
4.
8.
espconn_mdns_get_hostname1164.
4.
9.
espconn_mdns_disable1174.
4.
10.
espconn_mdns_enable1174.
4.
11.
mDNS示例1175.
应用相关接口1185.
1.
AT接口1185.
1.
1.
at_response_ok1185.
1.
2.
at_response_error1185.
1.
3.
at_cmd_array_regist1185.
1.
4.
at_get_next_int_dec1195.
1.
5.
at_data_str_copy1195.
1.
6.
at_init1195.
1.
7.
at_port_print1205.
1.
8.
at_set_custom_info1205.
1.
9.
at_enter_special_state1205.
1.
10.
at_leave_special_state1205.
1.
11.
at_get_version1205.
1.
12.
at_register_uart_rx_intr1215.
1.
13.
at_response1215.
1.
14.
at_register_response_func1215.
1.
15.
at_fake_uart_enable1225.
1.
16.
at_fake_uart_rx1225.
1.
17.
at_set_escape_character1225.
2.
JSON接口1235.
2.
1.
jsonparse_setup1235.
2.
2.
jsonparse_next1235.
2.
3.
jsonparse_copy_value1235.
2.
4.
jsonparse_get_value_as_int1235.
2.
5.
jsonparse_get_value_as_long1245.
2.
6.
jsonparse_get_len1245.
2.
7.
jsonparse_get_value_as_type1245.
2.
8.
jsonparse_strcmp_value1245.
2.
9.
jsontree_set_up1245.
2.
10.
jsontree_reset1255.
2.
11.
jsontree_path_name1255.
2.
12.
jsontree_write_int1255.
2.
13.
jsontree_write_int_array1265.
2.
14.
jsontree_write_string1265.
2.
15.
jsontree_print_next1265.
2.
16.
jsontree_nd_next1266.
参数结构体和宏定义1276.
1.
定时器1276.
2.
Wi-Fi参数1276.
2.
1.
Station参数1276.
2.
2.
SoftAP参数1276.
2.
3.
Scan参数1286.
2.
4.
Wi-FiEvent结构体1296.
2.
5.
SmartCong结构体1316.
3.
JSON相关结构体1316.
3.
1.
JSON结构体1316.
3.
2.
JSON宏定义1326.
4.
espconn参数1336.
4.
1.
回调函数1336.
4.
2.
espconn1336.
5.
中断相关宏定义1347.
外设驱动接口1367.
1.
GPIO接口1367.
1.
1.
PIN相关宏定义1367.
1.
2.
gpio_output_set1367.
1.
3.
GPIO输入输出相关宏1377.
1.
4.
GPIO中断1377.
1.
5.
gpio_pin_intr_state_set1377.
1.
6.
GPIO中断处理函数1377.
2.
UART接口1387.
2.
1.
uart_init1387.
2.
2.
uart0_tx_buer1387.
2.
3.
uart0_rx_intr_handler1387.
2.
4.
uart_div_modify1397.
3.
I2CMaster接口1397.
3.
1.
i2c_master_gpio_init1397.
3.
2.
i2c_master_init1397.
3.
3.
i2c_master_start1407.
3.
4.
i2c_master_stop1407.
3.
5.
i2c_master_send_ack1407.
3.
6.
i2c_master_send_nack1407.
3.
7.
i2c_master_checkAck1407.
3.
8.
i2c_master_readByte1417.
3.
9.
i2c_master_writeByte1417.
4.
PWM接口1417.
4.
1.
pwm_init1417.
4.
2.
pwm_start1427.
4.
3.
pwm_set_duty1427.
4.
4.
pwm_get_duty1427.
4.
5.
pwm_set_period1427.
4.
6.
pwm_get_period1437.
4.
7.
get_pwm_version1437.
5.
SDIO接口1437.
5.
1.
sdio_slave_init1437.
5.
2.
sdio_load_data1437.
5.
3.
sdio_register_recv_cb144A.
附录145A.
1.
ESPCONN编程145A.
1.
1.
TCPClient模式145A.
1.
2.
TCPServer模式145A.
1.
3.
espconnCallback146A.
2.
RTCAPI使用示例146A.
3.
Snier说明148A.
4.
ESP8266SoftAP和Station信道定义148A.
5.
ESP8266启动信息说明149A.
6.
ESP8266信令测试使用说明150!
1.
前言1.
前言ESP8266EX由乐鑫公司开发,提供了一套高度集成的Wi-FiSoC解决方案,其低功耗、紧凑设计和高稳定性可以满足用户的需求.
ESP8266EX拥有完整的且自成体系的Wi-Fi网络功能,既能够独立应用,也可以作为从机搭载于其他主机MCU运行.
当ESP8266EX独立应用时,能够直接从外接Flash中启动.
内置的高速缓冲存储器有利于提高系统性能,并且优化存储系统.
此外ESP8266EX只需通过SPI/SDIO接口或I2C/UART口即可作为Wi-Fi适配器,应用到基于任何微控制器的设计中.
ESP8266EX集成了天线开关、射频balun、功耗放大器、低噪放大器、过滤器和电源管理模块.
这样紧凑的设计仅需极少的外部电路并且将PCB的尺寸降到最小.
ESP8266EX还集成了增强版的Tensilica'sL106钻石系列32-bit内核处理器,带片上SRAM.
ESP8266EX可以通过GPIO外接传感器和其他设备.
软件开发包(SDK)提供了一些应用的示例代码.
乐鑫智能互联平台(ESCP-EspressifSystems'SmartConnectivityPlatform)表现出来的领先特征有:睡眠/唤醒模式之间的快速切换以实现节能、配合低功耗操作的自适应射频偏置、前端信号的处理功能、故障排除和射频共存机制可消除蜂窝/蓝牙/DDR/LVDS/LCD干扰.
基于ESP8266EX物联网平台的SDK为用户提供了一个简单、快速、高效开发物联网产品的软件平台.
本文旨在介绍该SDK的基本框架,以及相关的API接口.
主要的阅读对象为需要在ESP8266物联网平台进行软件开发的嵌入式软件开发人员.
Espressif!
/!
2020.
091151!
2.
Non-OSSDK2.
Non-OSSDK2.
1.
Non-OSSDK简介Non-OSSDK为用户提供了一套应用程序编程接口(API),能够实现ESP8266的核心功能改,例如数据接收/发送、TCP/IP功能、硬件接口功能,以及基本的系统管理功能等.
用户不必关心底层网络,如Wi-Fi、TCP/IP等的具体实现,只需要专注于物联网上层应用的开发,利用相应接口实现各种功能即可.
ESP8266物联网平台的所有网络功能均在库中实现,对用户不透明.
用户应用的初始化功能可以在user_main.
c中实现.
voiduser_init(void)是上层程序的入口函数,给用户提供一个初始化接口,用户可在该函数内增加硬件初始化、网络参数设置、定时器初始化等功能.
对于ESP8266_NONOS_SDK_v3.
0.
0及之后版本,请在user_main.
c增加函数voidICACHE_FLASH_ATTRuser_pre_init(void),并且在user_pre_init中注册自己的partitiontable.
对于ESP8266_NONOS_SDK_v1.
5.
2至ESP8266_NONOS_SDK_v2.
2.
1之间的版本,请在user_main.
c增加函数voiduser_rf_pre_init(void)和uint32user_rf_cal_sector_set(void),可参考IOT_Demo的user_main.
c.
用户可在user_rf_pre_init中配置RF初始化,RF设置接口为system_phy_set_rfoption,或者在Deep-sleep前调用system_deep_sleep_set_option.
如果设置为RF不打开,则ESP8266Station及SoftAP均无法使用,请勿调用Wi-Fi相关接口及网络功能.
RF关闭时,Wi-Fi射频功能和网络堆栈管理API均无法使用.
对于ESP8266_NONOS_SDK_v2.
1.
0及之后版本,用户如果并未使用DIO-To-QIOash,可以在user_main.
c中增加空函数voiduser_spi_flash_dio_to_qio_pre_init(void)来优化iRAM空间.
SDK中提供了对JSON包的处理API,用户也可以采用自定义数据包格式,自行对数据进行处理.
2.
2.
代码结构Non-OSSDK适用于用户需要完全控制代码执行顺序的应用程序.
由于没有操作系统,non-OSSDK不支持任务调度,也不支持基于优先级的抢占.
Non-OSSDK最适合用于事件驱动的应用程序.
由于没有操作系统,non-OSSDK没有单个任务堆栈大小的限制或者执行时隙要求.
Espressif!
/!
2020.
092151!
2.
Non-OSSDK而RTOSSDK可用于基于任务的模块化编程.
要了解有关RTOSSDK的更多信息,请参阅《ESP8266SDK入门指南》.
Non-OSSDK中的代码结构具有以下特征:Non-OSSDK不像基于RTOS的应用程序支持任务调度.
Non-OSSDK使用四种类型的函数:-应用函数-回调函数-用户任务-中断服务程序(InterruptServiceRoutines,ISR)应用函数类似于嵌入式C编程中的常用C函数.
这些函数必须由另一个函数调用.
应用函数在定义时建议添加ICACHE_FLASH_ATTR宏,相应程序将存放在ash中,被调用时才加载到cache运行.
而如果添加了IRAM_ATTR宏的函数,则会在上电启动时就加载到iRAM中.
回调函数是指不直接从用户程序调用的函数,而是当某系统事件发生时,相应的回调函数由non-OSSDK内核调用执行.
这使得开发者能够在不使用RTOS或者轮询事件的情况下响应实时事件.
要编写回调函数,用户首先需要使用相应的register_cbAPI注册回调函数.
回调函数的示例包括定时器回调函数和网络事件回调函数.
中断服务程序(ISR)是一种特殊类型的回调函数.
发生硬件中断时会调用这些函数.
当使能中断时,必须注册相应的中断处理函数.
请注意,ISR必须添加IRAM_ATTR.
用户任务可以分为三个优先级:0、1、2.
任务优先级为2>1>0.
即Non-OSSDK最多只支持3个用户任务,优先级分别为0、1、2.
用户任务一般用于函数不能直接被调用的情况下.
要创建用户任务,请参阅本文档中的system_os_task()的API描述.
例如,espconn_disconnect()API不能直接在espconn的回调函数中调用,因此建议开发者可以在espconn回调中创建用户任务来执行espconn_disconnect.
如前所述,non-OSSDK不支持抢占任务或进程切换.
因此开发者需要自行保证程序的正确执行,用户代码不能长期占用CPU.
否则会导致看门狗复位,ESP8266重启.
如果某些特殊情况下,用户线程必须执行较长时间(比如大于500ms),建议经常调用system_soft_wdt_feed()API来喂软件看门狗,而不建议禁用软件看门狗.
Espressif!
/!
2020.
093151!
2.
Non-OSSDK请注意,esp_init_data.
bin和blank.
bin文件至少需要烧录一次,以用于正确的初始化系统.
对于ESP8266_NONOS_SDK_v2.
2.
1及之前的版本,应用程序必须在user_rf_cal_sector_set中设置RF校准扇区.
2.
3.
定时器(timer)和中断对于需要进行轮询的应用,建议使用系统定时器定期检查事件.
-如果使用循环(while或for),不仅效率低下,而且阻塞CPU,不建议使用.
-如果需要在定时器回调中执行os_delay_us或while或for,请勿占用CPU超过15ms.
请勿频繁调用定时器,建议频率不高于每5ms一次(微秒计时器则为100μs).
有关定时器使用的详细信息,请参阅os_timer_arm()和相关的API说明.
微秒定时器不是很精确,请在回调中考虑500μs的抖动.
如需实现高精度的定时,可以参考驱动程序(driver_lib)使用硬件定时器.
请注意,PWMAPI不能与硬件定时器同时使用.
请勿长时间关闭中断.
ISR执行时间也应当尽可能短(即微秒级).
2.
4.
系统性能ESP8266通常的运行速率为80MHz,在高性能应用中也可以配置为160MHz.
请注意,外设不受CPU频率设置的影响,因为它们使用了不同的时钟源.
设置更高的时钟频率或者禁用睡眠模式,会导致更大的功耗,但能获得更好的性能.
应用程序应考虑两者之间的平衡.
添加了ICACHE_FLASH_ATTR的代码通常比使用IRAM_ATTR标记的代码执行得慢.
然而,像大多数嵌入式平台一样,ESP8266的iRAM空间有限,因此建议一般代码添加ICACHE_FLASH_ATTR,仅对执行效率要求高的代码添加IRAM_ATTR宏.
Flash模式和频率直接影响代码执行速度.
将ash设置为更高的频率和QIO模式会产生更好的性能,但会导致更大的功耗.
2.
5.
系统存储ESP8266支持高达128Mbits的外部QSPIash,用于存储代码和数据.
也可以使用辅助存储芯片来存储用户数据.
ESP8266没有存储用户代码或数据的非易失性存储.
ESP8285是一款在ESP8266的基础上集成了ash的芯片.
更多详细信息请参考ESP8285技术规格书.
Espressif!
/!
2020.
094151!
2.
Non-OSSDKESP8266带有160KB的RAM,其中64KB为iRAM,96KB为dRAM.
iRAM进一步分成两块:32KBiRAM块运行标有IRAM_ATTR的代码,另一个32KB块用作cache,运行标有ICACHE_FLASH_ATTR的代码.
从ESP8266_NonOS_SDK_V3.
0开始,增加了支持使用iRAM作为内存的功能,能够多提供约17KB的内存,对性能可能有一定的影响,请根据实际应用需求设置,并建议做详细测试进行确认.
使用方法如下:-在应用中定义user_iram_memory_is_enabled函数并设置返回值为1.
示例:#defineCONFIG_ENABLE_IRAM_MEMORY1#ifdefCONFIG_ENABLE_IRAM_MEMORYuint32user_iram_memory_is_enabled(void){returnCONFIG_ENABLE_IRAM_MEMORY;}#endif-如上设置后,默认使用IRAM作为内存,os_malloc、os_zalloc和os_calloc优先从iRAM分配,iRAM用尽后会继续使用dRAM分配;-或者直接调用os_malloc_iram、os_zalloc_iram、os_calloc_iram指定从iRAM分配内存,iRAM用尽后会继续使用dRAM分配;直接调用os_malloc_dram、os_zalloc_dram、os_calloc_dram指定从dRAM分配内存;-如需与旧版本兼容,可使能宏MEM_DEFAULT_USE_DRAM,os_malloc、os_zalloc和os_calloc将从dRAM分配,而os_malloc_iram、os_zalloc_iram、os_calloc_iram可以指定从iRAM分配,iRAM用尽后会继续使用dRAM分配.
例如,在makele中添加:CONFIGURATION_DEFINES+=-DMEM_DEFAULT_USE_DRAM在include/mem.
h中的具体定义如下:#ifdefMEM_DEFAULT_USE_DRAM#defineos_mallocos_malloc_dram#defineos_zallocos_zalloc_dram#defineos_callocos_calloc_dram#else#defineos_mallocos_malloc_iram#defineos_zallocos_zalloc_iram#defineos_callocos_calloc_iram#endifEspressif!
/!
2020.
095151!
2.
Non-OSSDKRAM和ash访问必须是4字对齐的,请勿直接进行指针转换.
请使用os_memcpy或其他API进行内存操作.
Espressif!
/!
2020.
096151!
3.
应用程序接口(API)3.
应用程序接口(API)3.
1.
软件定时器以下软件定时器接口位于/ESP8266_NONOS_SDK/include/osapi.
h.
请注意,以下接口使用的定时器由软件实现,定时器的函数在任务中被执行.
因为任务可能被中断,或者被其他高优先级的任务延迟,因此以下os_timer系列的接口并不能保证定时器精确执行.
如果需要精确的定时,例如,周期性操作某GPIO,请使用硬件中断定时器,具体可参考hw_timer.
c,硬件定时器的执行函数在中断里被执行.
注意:对于同一个timer,os_timer_arm或os_timer_arm_us不能重复调用,必须先os_timer_disarm.
os_timer_setfn必须在timer未使能的情况下调用,在os_timer_arm或os_timer_arm_us之前或者os_timer_disarm之后.
3.
1.
1.
os_timer_arm3.
1.
2.
os_timer_disarm功能使能毫秒级定时器函数定义voidos_timer_arm(os_timer_t*ptimer,uint32_tmilliseconds,boolrepeat_flag)参数os_timer_t*ptimer:定时器结构uint32_tmilliseconds:定时时间,单位:ms-如未调用system_timer_reinit,可支持范围5~0x68D7A3-如调用了system_timer_reinit,可支持范围100~0x689D0boolrepeat_flag:定时器是否重复返回无功能取消定时器定时函数定义voidos_timer_disarm(os_timer_t*ptimer)参数os_timer_t*ptimer:定时器结构返回无Espressif!
/!
2020.
097151!
3.
应用程序接口(API)3.
1.
3.
os_timer_setfn3.
1.
4.
system_timer_reinit3.
1.
5.
os_timer_arm_us3.
2.
硬件中断定时器以下硬件中断定时器接口位于/ESP8266_NONOS_SDK/examples/driver_lib/hw_timer.
c.
用户可根据driver_lib文件夹下的readme.
txt文件使用.
功能设置定时器回调函数.
使用定时器,必须设置回调函数.
函数定义voidos_timer_setfn(os_timer_t*ptimer,os_timer_func_t*pfunction,void*parg)参数os_timer_t*ptimer:定时器结构os_timer_func_t*pfunction:定时器回调函数void*parg:回调函数的参数返回无功能重新初始化定时器,当需要使用微秒级定时器时调用注意同时定义USE_US_TIMERsystem_timer_reinit在程序最开始调用,user_init的第一句.
函数定义voidsystem_timer_reinit(void)参数无返回无功能使能微秒级定时器.
注意请定义USE_US_TIMER,并在user_init起始第一句,先调用system_timer_reinit.
最高精度为500μs.
函数定义voidos_timer_arm_us(os_timer_t*ptimer,uint32_tmicroseconds,boolrepeat_flag)参数os_timer_t*ptimer:定时器结构uint32_tmicroseconds:定时时间,单位:μs,最小定时0x64,最大可输入0xFFFFFFFboolrepeat_flag:定时器是否重复返回无Espressif!
/!
2020.
098151!
3.
应用程序接口(API)注意:如果使用NMI中断源,且为自动填装的定时器,调用hw_timer_arm时参数val必须大于100.
如果使用NMI中断源,那么该定时器将为最高优先级,可打断其他ISR.
如果使用FRC1中断源,那么该定时器无法打断其他ISR.
hw_timer.
c的接口不能跟PWM驱动接口函数同时使用,因为二者共用了同一个硬件定时器.
硬件中断定时器的回调函数定义,请勿添加ICACHE_FLASH_ATTR宏.
使用hw_timer.
c的接口,请勿调用wifi_set_sleep_type(LIGHT_SLEEP);将自动睡眠模式设置为Light-sleep.
因为Light-sleep在睡眠期间会停CPU,停CPU期间不能响应NMI中断.
3.
2.
1.
hw_timer_init3.
2.
2.
hw_timer_arm功能初始化硬件ISR定时器函数定义voidhw_timer_init(FRC1_TIMER_SOURCE_TYPEsource_type,u8req)参数FRC1_TIMER_SOURCE_TYPEsource_type:定时器的ISR源-FRC1_SOURCE:使用FRC1中断源-NMI_SOURCE:使用NMI中断源u8req-0:不自动填装;-1:自动填装返回无功能使能硬件中断定时器函数定义voidhw_timer_arm(uint32val)参数uint32val:定时时间自动填装模式:-使用FRC1中断源FRC1_SOURCE,取值范围:50~0x199999μs;-使用NMI中断源NMI_SOURCE,取值范围:100~0x199999μs:非自动填装模式,取值范围:10~0x199999μs返回无Espressif!
/!
2020.
099151!
3.
应用程序接口(API)3.
2.
3.
hw_timer_set_func3.
2.
4.
硬件定时器示例#defineREG_READ(_r)volatileuint32*)(_r))#defineWDEV_NOW()REG_READ(0x3ff20c00)uint32tick_now2=0;voidhw_test_timer_cb(void){staticuint16j=0;j++;if((WDEV_NOW()-tick_now2)>=1000000){staticu32idx=1;tick_now2=WDEV_NOW();os_printf("b%u:%d\n",idx++,j);j=0;}}voidICACHE_FLASH_ATTRuser_init(void){hw_timer_init(FRC1_SOURCE,1);hw_timer_set_func(hw_test_timer_cb);hw_timer_arm(100);}3.
3.
系统接口系统接口位于/ESP8266_NONOS_SDK/include/user_interface.
h.
os_XXX系列接口位于/ESP8266_NONOS_SDK/include/osapi.
h.
3.
3.
1.
system_get_sdk_version功能设置定时器回调函数.
使用定时器,必须设置回调函数.
注意回调函数前不能添加ICACHE_FLASH_ATTR宏定义,中断响应不能存放在Flash中.
函数定义voidhw_timer_set_func(void(*user_hw_timer_cb_set)(void))参数void(*user_hw_timer_cb_set)(void):定时器回调函数,函数定义时请勿添加ICACHE_FLASH_ATTR宏.
返回无功能查询SDK版本信息函数定义constchar*system_get_sdk_version(void)参数无Espressif!
/!
2020.
0910151!
3.
应用程序接口(API)3.
3.
2.
system_restore3.
3.
3.
system_restart3.
3.
4.
system_init_done_cb3.
3.
5.
system_get_chip_id返回SDK版本信息示例printf("SDKversion:%s\n",system_get_sdk_version());功能恢复出厂设置.
本接口将清除以下接口的设置,恢复默认值:wifi_station_set_auto_connect、wifi_set_phy_mode、wifi_softap_set_config相关,wifi_station_set_config相关,wifi_set_opmode以及#defineAP_CACHE记录的AP信息.
注意恢复出厂设置后,请务必重新启动system_restart,再正常使用.
函数定义voidsystem_restore(void)参数无返回无功能系统重启注意调用本接口后,ESP8266模块并不会立刻重启,请勿在本接口之后调用其他功能接口.
函数定义voidsystem_restart(void)参数无返回无功能在user_init中调用,注册系统初始化完成的回调函数.
注意接口wifi_station_scan必须在系统初始化完成后,并且Station模式使能的情况下调用.
函数定义voidsystem_init_done_cb(init_done_cb_tcb)参数init_done_cb_tcb:系统初始化完成的回调函数返回无示例voidto_scan(void){wifi_station_scan(NULL,scan_done);}voiduser_init(void){wifi_set_opmode(STATION_MODE);system_init_done_cb(to_scan);}功能查询芯片ID函数定义uint32system_get_chip_id(void)参数无Espressif!
/!
2020.
0911151!
3.
应用程序接口(API)3.
3.
6.
system_get_vdd333.
3.
7.
system_adc_read返回芯片ID功能测量VDD3P3管脚3和4的电压值,单位:1/1024V注意system_get_vdd33必须在TOUT管脚悬空的情况下使用.
TOUT管脚悬空的情况下,esp_init_data_default.
bin(0~127byte)中的第107byte为vdd33_const,必须设为0xFF,即255.
不同Wi-Fi模式下,例如,Modem-sleep模式或者普通Wi-Fi工作模式时,VDD33的测量值会稍有差异.
函数定义uint16system_get_vdd33(void)参数无返回VDD33电压值.
单位:1/1024V功能测量TOUT管脚6的输入电压,单位:1/1024V注意system_adc_read必须在TOUT管脚接外部电路情况下使用,TOUT管脚输入电压范围限定为0~1.
0V.
TOUT管脚接外部电路的情况下,esp_init_data_default.
bin(0~127byte)中的第107bytevdd33_const,必须设为VDD3P3管脚3和4上真实的电源电压,且必须小于0xFF.
第107bytevdd33_const的单位是0.
1V,有效取值范围是[18,36];当vdd33_const处于无效范围[0,18)或者(36,255)时,使用默认值3.
3V来优化RF电路工作状态.
不同Wi-Fi模式下,例如,Modem-sleep模式或者普通Wi-Fi工作模式时,ADC的测量值会稍有差异.
若需要高精度的ADC,请使用system_adc_read_fast接口.
函数定义uint16system_adc_read(void)参数无返回TOUT管脚6的输入电压,单位:1/1024VEspressif!
/!
2020.
0912151!
3.
应用程序接口(API)3.
3.
8.
system_adc_read_fast功能快速高精度的ADC采样.
注意本接口必须在关闭Wi-Fi的状态下使用.
如需进行连续测量ADC,则还需要在关闭所有中断的状态下使用.
因此,调用system_adc_read_fast时,不能使用PWM或者NMI类型的硬件定时器.
本接口必须在TOUT管脚接外部电路情况下使用,TOUT管脚输入电压范围限定为0~1.
0V.
TOUT管脚接外部电路作为ADC输入时,esp_init_data_default.
bin(0~127byte)中的[107]bytevdd33_const必须小于0xFF.
[107]bytevdd33_const的具体用法如下:-[107]byte=0XFF时,内部测量VDD33,TOUT管脚不能作为外部ADC输入;-[107]byte有效取值范围是[18,36]时,单位是0.
1V,设置为实际的VDD33电源电压,优化RF电路工作状态,TOUT管脚可以作为外部ADC输入;-[107]byte有效取值范围是[0,18)或者(36,255)时,使用默认值3.
3V作为电源电压来优化RF电路工作状态,TOUT管脚可以作为外部ADC输入.
函数定义voidsystem_adc_read_fast(uint16*adc_addr,uint16adc_num,uint8adc_clk_div)参数uint16*adc_addr:ADC连续采样输出的地址指针.
uint16adc_num:ADC连续采样的点数,输入范围[1,65535].
uint8adc_clk_div:ADC工作时钟=80M/adc_clk_div,输入范围[8,32],推荐值为8.
返回无Espressif!
/!
2020.
0913151!
3.
应用程序接口(API)3.
3.
9.
system_deep_sleep示例externvoidsystem_adc_read_fast(uint16*adc_addr,uint16adc_num,uint8adc_clk_div);os_timer_ttimer;voidICACHE_FLASH_ATTRADC_TEST(void*p){wifi_set_opmode(NULL_MODE);ets_intr_lock();//closeinterruptuint16adc_addr[10];uint16adc_num=10;uint8adc_clk_div=8;uint32i;system_adc_read_fast(adc_addr,adc_num,adc_clk_div);for(i=0;isig){caseSIG_RX:os_printf(sig_rx%c/n,(char)e->par);break;default:break;}}voidtask_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);}功能向任务发送消息函数定义boolsystem_os_post(uint8prio,os_signal_tsig,os_param_tpar)参数uint8prio:任务优先级,与建立时的任务优先级对应.
os_signal_tsig:消息类型os_param_tpar:消息参数返回true:成功false:失败结合上一节的示例voidtask_post(void){system_os_post(USER_TASK_PRIO_0,SIG_RX,'a');}打印输出sig_rxa功能查询系统时间,单位:μs函数定义uint32system_get_time(void)参数无返回系统时间,单位:μs.
Espressif!
/!
2020.
0918151!
3.
应用程序接口(API)3.
3.
21.
system_get_rtc_time3.
3.
22.
system_rtc_clock_cali_proc3.
3.
23.
system_rtc_mem_write功能查询RTC时间,单位:RTC时钟周期示例例如system_get_rtc_time返回10(表示10个RTC周期),system_rtc_clock_cali_proc返回5.
75(表示1个RTC周期为5.
75μs),则实际时间为10x5.
75=57.
5μs.
注意system_restart时,系统时间归零,但是RTC时间仍然继续.
但是如果外部硬件通过EXT_RST脚或者CHIP_EN脚,将芯片复位后(包括Deep-sleep定时唤醒的情况),RTC时钟会复位.
具体如下:外部复位EXT_RST:RTCmemory不变,RTCtimer寄存器从零计数看门狗复位:RTCmemory不变,RTCtimer寄存器不变system_restart:RTCmemory不变,RTCtimer寄存器不变电源上电:RTCmemory随机值,RTCtimer寄存器从零计数CHIP_EN复位:RTCmemory随机值,RTCtimer寄存器从零计数函数定义uint32system_get_rtc_time(void)参数无返回RTC时间功能查询RTC时钟周期注意RTC时钟周期含有小数部分.
RTC时钟周期会随温度或电源电压变化发生偏移,因此RTC时钟适用于在精度可接受的范围内进行计时,建议最多每分钟调用一次即可.
函数定义uint32system_rtc_clock_cali_proc(void)参数无返回RTC时钟周期,单位:μs,bit11~bit0为小数部分示例os_printf("clkcal:%d\r\n",system_rtc_clock_cali_proc()>>12);详细RTC示例请见附录.
功能由于Deep-sleep时,仅RTC仍在工作,用户如有需要,可将数据存入RTCmemory中.
提供如下图中的userdata段共512bytes供用户存储数据.
systemdata-userdata-256bytes512bytes注意RTCmemory只能4字节整存整取,函数中参数des_addr为blocknumber,每block4字节,因此若写入上图userdata区起始位置,des_addr为256/4=64,save_size为存入数据的字节数.
Espressif!
/!
2020.
0919151!
3.
应用程序接口(API)3.
3.
24.
system_rtc_mem_read3.
3.
25.
system_uart_swap3.
3.
26.
system_uart_de_swap函数定义boolsystem_rtc_mem_write(uint32des_addr,void*src_addr,uint32save_size)参数uint32des_addr:写入rtcmemory的位置,des_addr>=64void*src_addr:数据指针uint32save_size:数据长度,单位:字节返回true:成功false:失败功能读取RTCmemory中的数据,提供如下图中userdata段共512bytes给用户存储数据.
systemdata-userdata-256bytes512bytes注意RTCmemory只能4字节整存整取,函数中参数des_addr为blocknumber,每block4字节,因此若写入上图userdata区起始位置,des_addr为256/4=64,save_size为存入数据的字节数.
函数定义boolsystem_rtc_mem_read(uint32src_addr,void*des_addr,uint32save_size)参数uint32des_addr:写入rtcmemory的位置,des_addr>=64void*src_addr:数据指针uint32save_size:数据长度,单位:字节返回true:成功false:失败功能UART0转换.
将MTCK作为UART0RX,MTDO作为UART0TX.
硬件上也从MTDO(U0RTS)和MTCK(U0CTS)连出UART0,从而避免上电时从UART0打印出ROMlog.
函数定义voidsystem_uart_swap(void)参数无返回无功能取消UART0转换,仍然使用原有UART0,而不是将MTCK、MTDO作为UART0.
函数定义voidsystem_uart_de_swap(void)Espressif!
/!
2020.
0920151!
3.
应用程序接口(API)3.
3.
27.
system_get_boot_version3.
3.
28.
system_get_userbin_addr3.
3.
29.
system_get_boot_mode3.
3.
30.
system_restart_enhance参数无返回无功能读取boot版本信息函数定义uint8system_get_boot_version(void)参数无返回boot版本信息注意如果boot版本号>=3时,支持boot增强模式,详见system_restart_enhance.
功能读取当前正在运行的userbin(user1.
bin或者user2.
bin)的存放地址.
函数定义uint32system_get_userbin_addr(void)参数无返回正在运行的userbin的存放地址功能查询boot模式函数定义uint8system_get_boot_mode(void)参数无返回#defineSYS_BOOT_ENHANCE_MODE0#defineSYS_BOOT_NORMAL_MODE1注意boot增强模式:支持跳转到任意位置运行程序;boot普通模式:仅能跳转到固定的user1.
bin(或user2.
bin)位置运行.
功能重启系统,进入boot增强模式.
函数定义boolsystem_restart_enhance(uint8bin_type,uint32bin_addr)参数uint8bin_type:bin类型-#defineSYS_BOOT_NORMAL_BIN0//user1.
bin或者user2.
bin-#defineSYS_BOOT_TEST_BIN1//向乐鑫申请的testbinuint32bin_addr:bin的起始地址返回true:成功false:失败Espressif!
/!
2020.
0921151!
3.
应用程序接口(API)3.
3.
31.
system_update_cpu_req3.
3.
32.
system_get_cpu_freq3.
3.
33.
system_get_ash_size_map注意SYS_BOOT_TEST_BIN用于量产测试,用户可以向乐鑫申请获得.
功能设置CPU频率.
默认为80MHz注意系统总线时钟频率始终为80MHz,不受CPU频率切换的影响.
UART、SPI等外设频率由系统总线时钟分频而来,因此也不受CPU频率切换的影响.
函数定义boolsystem_update_cpu_freq(uint8freq)参数uint8freq:CPU频率#defineSYS_CPU_80MHz80#defineSYS_CPU_160MHz160返回true:成功false:失败功能查询CPU频率函数定义uint8system_get_cpu_freq(void)参数无返回CPU频率,单位:MHz功能查询当前的Flashsize和FlashmapFlashmap对应编译时的选项,详细介绍请参考ESP8266SDK入门指南.
结构体enumflash_size_map{FLASH_SIZE_4M_MAP_256_256=0,FLASH_SIZE_2M,FLASH_SIZE_8M_MAP_512_512,FLASH_SIZE_16M_MAP_512_512,FLASH_SIZE_32M_MAP_512_512,FLASH_SIZE_16M_MAP_1024_1024,FLASH_SIZE_32M_MAP_1024_1024,FLASH_SIZE_64M_MAP_1024_1024,FLASH_SIZE_128M_MAP_1024_1024,};函数定义enumflash_size_mapsystem_get_flash_size_map(void)参数无返回ashmapEspressif!
/!
2020.
0922151!
3.
应用程序接口(API)3.
3.
34.
system_get_rst_info3.
3.
35.
system_soft_wdt_stop3.
3.
36.
system_soft_wdt_restart功能查询当前启动的信息结构体enumrst_reason{REANSON_DEFAULT_RST=0,//normalstartupbypoweronREANSON_WDT_RST1,//hardwarewatchdogreset//exceptionreset,GPIOstatuswon'tchangeREANSON_EXCEPTION_RST=2,//softwarewatchdogreset,GPIOstatuswon'tchangeREANSON_SOFT_WDT_RST=3,//softwarerestart,system_restart,GPIOstatuswon'tchangeREANSON_SOFT_RESTART=4,REANSON_DEEP_SLEEP_AWAKE=5,//wakeupfromdeep-sleepREANSON_EXT_SYS_RST=6,//externalsystemreset};structrst_info{uint32reason;//enumrst_reasonuint32exccause;uint32epc1;theaddressthaterroroccurreduint32epc2;uint32epc3;uint32excvaddr;uint32depc;};函数定义structrst_info*system_get_rst_info(void)参数无返回启动的信息功能关闭软件看门狗注意请勿将软件看门狗关闭太长时间(小于5s),否则将触发硬件看门狗复位函数定义voidsystem_soft_wdt_stop(void)参数无返回无功能重启软件看门狗注意仅支持在软件看门狗关闭system_soft_wdt_stop的情况下,调用本接口Espressif!
/!
2020.
0923151!
3.
应用程序接口(API)3.
3.
37.
system_soft_wdt_feed3.
3.
38.
system_show_malloc3.
3.
39.
os_memset函数定义voidsystem_soft_wdt_restart(void)参数无返回无功能喂软件看门狗注意仅支持在软件看门狗开启的情况下,调用本接口函数定义voidsystem_soft_wdt_feed(void)参数无返回无功能打印目前所分配的堆空间所有内存块,包括分配该内存块的文件名、行号和分配大小.
在怀疑有内存泄露时,可以调用本接口查看当前内存状态.
注意在user_config.
h定义#defineMEMLEAK_DEBUG.
参考ESP8266_NONOS_SDK\included\mem.
h开始位置的注释使用.
泄露的内存一般在打印结果中,但打印结果中的内存不保证一定是泄露的内存.
本接口仅用于调试,无法确保使用本接口后,程序能继续正常执行,因此请勿在正常运行情况下,调用本接口.
函数定义voidsystem_show_malloc(void)参数无返回无功能封装C语言函数,在一段内存块中填充某个给定值.
函数定义os_memset(void*s,intch,size_tn)参数void*s:内存块指针intch:填充值size_tn:填充大小返回无示例uint8buffer[32];os_memset(buffer,0,sizeof(buffer));Espressif!
/!
2020.
0924151!
3.
应用程序接口(API)3.
3.
40.
os_memcpy3.
3.
41.
os_strlen3.
3.
42.
os_printf3.
3.
43.
os_bzero功能封装C语言函数,内存拷贝.
函数定义os_memcpy(void*des,void*src,size_tn)参数void*des:目标内存块指针void*src:源内存块指针size_tn:拷贝内存大小返回无示例uint8buffer[4]={0};os_memcpy(buffer,"abcd",4);功能封装C语言函数,计算字符串长度.
函数定义os_strlen(char*s)参数char*s:字符串返回字符串长度示例char*ssid="ESP8266";os_memcpy(softAP_config.
ssid,ssid,os_strlen(ssid));功能格式化输出,打印字符串.
注意本接口默认从UART0打印.
IOT_Demo中的uart_init可以设置波特率,将os_printf改为从UART1打印:os_install_putc1((void*)uart1_write_char);请勿调用本接口打印超过125字节的数据,或者频繁连续调用本接口打印,否则可能会丢失部分待打印数据.
函数定义voidos_printf(constchar*s)参数constchar*s:字符串返回无示例os_printf("SDKversion:%s\n",system_get_sdk_version());功能置字符串p的前n个字节为零且包含\0函数定义voidos_bzero(void*p,size_tn)参数void*p:要置零的数据的起始地址size_tn:要置零的数据字节数Espressif!
/!
2020.
0925151!
3.
应用程序接口(API)3.
3.
44.
os_delay_us3.
3.
45.
os_install_putc13.
3.
46.
os_random3.
3.
47.
os_get_random3.
3.
48.
user_rf_cal_sector_set返回无功能延时函数.
最大值65535μs函数定义voidos_delay_us(uint16us)参数uint16us:延时时间返回无功能注册打印接口函数函数定义voidos_install_putc1(void(*p)(charc))参数void(*p)(charc):打印接口函数指针返回无示例参考UART.
c,uart_init中的os_install_putc1((void*)uart1_write_char)将os_printf改为从UART1打印.
否则,os_printf默认从UART0打印.
功能获取随机数函数定义unsignedlongos_random(void)参数无返回随机数功能获取指定长度的随机数函数定义intos_get_random(unsignedchar*buf,size_tlen)参数unsignedchar*buf:获得的随机数size_tlen:随机数的字节长度返回true:成功false:失败示例intret=os_get_random((unsignedchar*)temp,7);os_printf("ret%d,value0x%08x%08x\n\r",ret,temp[1],temp[0]);功能用户自定义RF_CAL参数存放在Flash的扇区号Espressif!
/!
2020.
0926151!
3.
应用程序接口(API)注意用户必须在程序中实现此函数,否则编译链接时会报错.
但用户程序无需调用此函数,SDK底层会调用它,将RF_CAL参数保存在用户指定的Flash扇区里,这将占用用户参数区的一个扇区.
SDK预留的4个扇区的系统参数区已经使用,因此RF_CAL参数需要占用到用户参数区的空间,由用户通过此函数设置一个可用扇区供SDK底层使用.
建议整个系统需要初始化时,或需要重新进行RF_CAL时,烧录blank.
bin初始化RF_CAL参数区,并烧录esp_init_data.
bin.
注意,esp_init_data.
bin至少需要烧录一次.
函数定义uint32user_rf_cal_sector_set(void)参数无返回存储RF_CAL参数的Flash扇区号示例将RF参数设置存放在Flash倒数第5个扇区uint32user_rf_cal_sector_set(void){enumflash_size_mapsize_map=system_get_flash_size_map();uint32rf_cal_sec=0;switch(size_map){caseFLASH_SIZE_4M_MAP_256_256:rf_cal_sec=128-5;break;caseFLASH_SIZE_8M_MAP_512_512:rf_cal_sec=256-5;break;caseFLASH_SIZE_16M_MAP_512_512:caseFLASH_SIZE_16M_MAP_1024_1024:rf_cal_sec=512-5;break;caseFLASH_SIZE_32M_MAP_512_512:caseFLASH_SIZE_32M_MAP_1024_1024:rf_cal_sec=512-5;break;caseFLASH_SIZE_64M_MAP_1024_1024:rf_cal_sec=2048-5;break;caseFLASH_SIZE_128M_MAP_1024_1024:rf_cal_sec=4096-5;break;default:rf_cal_sec=0;break;}returnrf_cal_sec;}Espressif!
/!
2020.
0927151!
3.
应用程序接口(API)3.
3.
49.
system_deep_sleep_instant3.
3.
50.
system_partition_table_regist3.
3.
51.
system_partition_get_ota_partition_size功能设置芯片立刻进入Deep-sleep模式,休眠设定时间后自动唤醒,唤醒后程序从user_init重新运行.
注意硬件需要将XPD_DCDC通过0Ω电阻连接到EXT_RSTB,用作Deep-sleep唤醒.
system_deep_sleep_instant(0)未设置唤醒定时器,可通过外部GPIO拉低RST脚唤醒.
本接口设置后,芯片立刻进入Deep-sleep休眠,不会等待Wi-Fi底层功能安全关闭.
如需等待Wi-Fi安全关闭,可使用接口system_deep_sleep.
函数定义boolsystem_deep_sleep_instant(uint64time_in_us)参数uint64time_in_us:休眠时间,单位:μs参数time_in_us的理论最大值可由公式(time_in_us/cali)bssid),IP2STR(&station->ip));next_station=STAILQ_NEXT(station,next);os_free(station)Freeitdirectlystation=next_station;}示例2structstation_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(Freeitbycallingfunctions功能开启ESP8266SoftAPDHCPserver注意DHCP默认开启.
DHCP与静态IP功能wifi_set_ip_info互相影响,以最后设置的为准:DHCP开启,则静态IP失效;设置静态IP,则关闭DHCP.
函数定义boolwifi_softap_dhcps_start(void)Espressif!
/!
2020.
0944151!
3.
应用程序接口(API)3.
5.
40.
wi_softap_dhcps_stop3.
5.
41.
wi_softap_set_dhcps_lease参数无返回true:成功false:失败功能关闭ESP8266SoftAPDHCPserver.
默认开启DHCP.
函数定义boolwifi_softap_dhcps_stop(void)参数无返回true:成功false:失败功能设置ESP8266SoftAPDHCPserver分配IP地址的范围注意设置的IP分配范围必须与ESP8266SoftAPIP在同一网段.
本接口必须在ESP8266SoftAPDHCPserver关闭wifi_softap_dhcps_stop的情况下设置.
本设置仅对下一次使能的DHCPserver生效wifi_softap_dhcps_start,如果DHCPserver再次被关闭,则需要重新调用本接口设置IP范围;否则之后DHCPserver重新使能,会使用默认的IP地址分配范围.
函数定义boolwifi_softap_set_dhcps_lease(structdhcps_lease*please)参数structdhcps_lease{structip_addrstart_ip;structip_addrend_ip;};返回true:成功false:失败Espressif!
/!
2020.
0945151!
3.
应用程序接口(API)3.
5.
42.
wi_softap_get_dhcps_lease3.
5.
43.
wi_softap_set_dhcps_lease_time示例voiddhcps_lease_test(void){structdhcps_leasedhcp_lease;constchar*start_ip="192.
168.
5.
100";constchar*end_ip="192.
168.
5.
105";dhcp_lease.
start_ip.
addr=ipaddr_addr(start_ip);dhcp_lease.
end_ip.
addr=ipaddr_addr(end_ip);wifi_softap_set_dhcps_lease(&dhcp_lease);}或者voiddhcps_lease_test(void){structdhcps_leasedhcp_lease;IP4_ADDR(&dhcp_lease.
start_ip,192,168,5,100);IP4_ADDR(&dhcp_lease.
end_ip,192,168,5,105);wifi_softap_set_dhcps_lease(&dhcp_lease);}voiduser_init(void){structip_infoinfo;wifi_set_opmode(STATIONAP_MODE);//SetsoftAP+stationmodewifi_softap_dhcps_stop();IP4_ADDR(&info.
ip,192,168,5,1);IP4_ADDR(&info.
gw,192,168,5,1);IP4_ADDR(&info.
netmask,255,255,255,0);wifi_set_ip_info(SOFTAP_IF,&info);dhcps_lease_test();wifi_softap_dhcps_start();}功能查询ESP8266SoftAPDHCPserver分配IP地址的范围注意本接口仅支持在ESP8266SoftAPDHCPserver使能的情况下查询.
函数定义boolwifi_softap_get_dhcps_lease(structdhcps_lease*please)返回true:成功false:失败功能设置ESP8266SoftAPDHCPserver的租约时间.
默认为120分钟.
注意本接口仅支持在ESP8266SoftAPDHCPserver使能的情况下查询.
函数定义boolwifi_softap_set_dhcps_lease_time(uint32minute)Espressif!
/!
2020.
0946151!
3.
应用程序接口(API)3.
5.
44.
wi_softap_get_dhcps_lease_time3.
5.
45.
wi_softap_reset_dhcps_lease_time3.
5.
46.
wi_softap_dhcps_status3.
5.
47.
wi_softap_set_dhcps_offer_option参数uint32minute:租约时间,单位:分钟,取值范围:[1,2880]返回true:成功false:失败功能查询ESP8266SoftAPDHCPserver的租约时间.
注意本接口仅支持在ESP8266SoftAPDHCPserver使能的情况下查询.
函数定义uint32wifi_softap_get_dhcps_lease_time(void)返回租约时间,单位:分钟功能复位ESP8266SoftAPDHCPserver的租约时间.
恢复到120分钟.
注意本接口仅支持在ESP8266SoftAPDHCPserver使能的情况下查询.
函数定义boolwifi_softap_reset_dhcps_lease_time(void)返回true:成功false:失败功能获取ESP8266SoftAPDHCPserver状态函数定义enumdhcp_statuswifi_softap_dhcps_status(void)参数无返回enumdhcp_status{DHCP_STOPPED,DHCP_STARTED};功能设置ESP8266SoftAPDHCPserver属性结构体enumdhcps_offer_option{OFFER_START=0x00,OFFER_ROUTER=0x01,OFFER_END};函数定义boolwifi_softap_set_dhcps_offer_option(uint8level,void*optarg)Espressif!
/!
2020.
0947151!
3.
应用程序接口(API)3.
5.
48.
wi_set_phy_mode3.
5.
49.
wi_get_phy_mode3.
5.
50.
wi_get_ip_info参数uint8level:OFFER_ROUTER,设置router信息void*optarg:bit0,0禁用router信息;bit0,1启用router信息;默认为1返回true:成功false:失败示例uint8mode=0;wifi_softap_set_dhcps_offer_option(OFFER_ROUTER,&mode);功能设置ESP8266物理层模式(802.
11b/g/n)函数定义boolwifi_set_phy_mode(enumphy_modemode)参数enumphy_modemode:物理层模式enumphy_mode{PHY_MODE_11B=1,PHY_MODE_11G=2,PHY_MODE_11N=3};返回true:成功false:失败功能查询ESP8266物理层模式(802.
11b/g/n)函数定义enumphy_modewifi_get_phy_mode(void)参数无返回enumphy_mode{PHY_MODE_11B=1,PHY_MODE_11G=2,PHY_MODE_11N=3};功能查询Wi-FiStation接口或者SoftAP接口的IP地址注意在user_init中,由于初始化尚未完成,无法通过本接口查询到有效IP地址.
函数定义boolwifi_get_ip_info(uint8if_index,structip_info*info)参数uint8if_index:获取Station或者SoftAP接口的信息#defineSTATION_IF0x00#defineSOFTAP_IF0x01structip_info*info:获取到的IP信息Espressif!
/!
2020.
0948151!
3.
应用程序接口(API)3.
5.
51.
wi_set_ip_info3.
5.
52.
wi_set_macaddr返回true:成功false:失败功能设置Wi-FiStation或者SoftAP的IP地址注意本接口设置静态IP,请先关闭对应DHCP功能wifi_station_dhcpc_stop或者wifi_softap_dhcps_stop设置静态IP,则关闭DHCP;DHCP开启,则静态IP失效.
函数定义boolwifi_set_ip_info(uint8if_index,structip_info*info)参数uint8if_index:设置Station或者SoftAP接口#defineSTATION_IF0x00#defineSOFTAP_IF0x01structip_info*info:获取到的IP信息返回true:成功false:失败示例wifi_set_opmode(STATIONAP_MODE);//SetsoftAP+stationmodestructip_infoinfo;wifi_station_dhcpc_stop();wifi_softap_dhcps_stop();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);wifi_softap_dhcps_start();功能设置MAC地址注意本接口必须在user_init中调用ESP8266SoftAP和StationMAC地址不同,请勿将两者设置为同一MAC地址ESP8266MAC地址第一个字节的bit0不能为1.
例如,MAC地址可以设置为1a:XX:XX:XX:XX:XX,但不能设置为15:XX:XX:XX:XX:XX.
函数定义boolwifi_set_macaddr(uint8if_index,uint8*macaddr)Espressif!
/!
2020.
0949151!
3.
应用程序接口(API)3.
5.
53.
wi_get_macaddr3.
5.
54.
wi_set_sleep_type3.
5.
55.
wi_get_sleep_type参数uint8if_index:设置Station或者SoftAP接口#defineSTATION_IF0x00#defineSOFTAP_IF0x01uint8*macaddr:MAC地址返回true:成功false:失败示例wifi_set_opmode(STATIONAP_MODE);charsofap_mac[6]={0x16,0x34,0x56,0x78,0x90,0xab};charsta_mac[6]={0x12,0x34,0x56,0x78,0x90,0xab};wifi_set_macaddr(SOFTAP_IF,sofap_mac);wifi_set_macaddr(STATION_IF,sta_mac);功能查询MAC地址函数定义boolwifi_get_macaddr(uint8if_index,uint8*macaddr)参数uint8if_index:查询Station或者SoftAP接口#defineSTATION_IF0x00#defineSOFTAP_IF0x01uint8*macaddr:MAC地址返回true:成功false:失败功能设置省电模式.
设置为NONE_SLEEP_T,则关闭省电模式.
注意默认为Modem-sleep模式.
LightSleep为了降低功耗,将TCPtimertick由原本的250ms改为了3s,这将导致TCPtimer超时时间相应增加;如果用户对TCPtimer的准确度有要求,请使用modemsleep或者deepsleep模式.
函数定义boolwifi_set_sleep_type(enumsleep_typetype)参数enumsleep_typetype:省电模式返回true:成功false:失败功能查询省电模式.
函数定义enumsleep_typewifi_get_sleep_type(void)Espressif!
/!
2020.
0950151!
3.
应用程序接口(API)3.
5.
56.
wi_status_led_install3.
5.
57.
wi_status_led_uninstall3.
5.
58.
wi_set_broadcast_if参数无返回enumsleep_type{NONE_SLEEP_T=0;LIGHT_SLEEP_T,MODEM_SLEEP_T};功能注册Wi-Fi状态LED.
函数定义voidwifi_status_led_install(uint8gpio_id,uint32gpio_name,uint8gpio_func)参数uint8gpio_id:GPIOIDuint8gpio_name:GPIOMUX名称uint8gpio_func:GPIO功能返回无示例使用GPIO0作为Wi-Fi状态LED#defineHUMITURE_WIFI_LED_IO_MUXPERIPHS_IO_MUX_GPIO0_U#defineHUMITURE_WIFI_LED_IO_NUM0#defineHUMITURE_WIFI_LED_IO_FUNCFUNC_GPIO0wifi_status_led_install(HUMITURE_WIFI_LED_IO_NUM,HUMITURE_WIFI_LED_IO_MUX,HUMITURE_WIFI_LED_IO_FUNC)功能注销Wi-Fi状态LED函数定义voidwifi_status_led_uninstall()参数无返回无功能设置ESP8266发送UDP广播包时,从Station接口还是SoftAP接口发送.
默认从SoftAP接口发送.
注意如果设置仅从Station接口发UDP广播包,会影响ESP8266SoftAP的功能,DHCPserver无法使用.
需要使能SoftAP的广播包功能,才可正常使用ESP8266SoftAP.
函数定义boolwifi_set_broadcast_if(uint8interface)参数uint8interface1:station2:SoftAP3:Station和SoftAP接口均发送Espressif!
/!
2020.
0951151!
3.
应用程序接口(API)3.
5.
59.
wi_get_broadcast_if3.
5.
60.
wi_set_event_handler_cb返回true:成功false:失败功能查询ESP8266发送UDP广播包时,从Station接口还是SoftAP接口发送.
函数定义uint8wifi_get_broadcast_if(void)参数无返回1:Station2:SoftAP3:Station和SoftAP接口均发送功能注册Wi-Fievent处理回调函数定义voidwifi_set_event_handler_cb(wifi_event_handler_cb_tcb)参数wifi_event_handler_cb_tcb:回调函数返回无Espressif!
/!
2020.
0952151!
3.
应用程序接口(API)3.
5.
61.
wi_wps_enable示例voidwifi_handle_event_cb(System_Event_t*evt){os_printf("event%x\n",evt->event);switch(evt->event){caseEVENT_STAMODE_CONNECTED:os_printf("connecttossid%s,channel%d\n",evt->event_info.
connected.
ssid,evt->event_info.
connected.
channel);break;caseEVENT_STAMODE_DISCONNECTED:os_printf("disconnectfromssid%s,reason%d\n",evt->event_info.
disconnected.
ssid,evt->event_info.
disconnected.
reason);break;caseEVENT_STAMODE_AUTHMODE_CHANGE:os_printf("mode:%d->%d\n",evt->event_info.
auth_change.
old_mode,evt->event_info.
auth_change.
new_mode);break;caseEVENT_STAMODE_GOT_IP:os_printf("ip:"IPSTR",mask:"IPSTR",gw:"IPSTR,IP2STR(&evt->event_info.
got_ip.
ip),IP2STR(&evt->event_info.
got_ip.
mask),IP2STR(&evt->event_info.
got_ip.
gw));os_printf("\n");break;caseEVENT_SOFTAPMODE_STACONNECTED:os_printf("station:"MACSTR"join,AID=%d\n",MAC2STR(evt->event_info.
sta_connected.
mac),evt->event_info.
sta_connected.
aid);break;caseEVENT_SOFTAPMODE_STADISCONNECTED:os_printf("station:"MACSTR"leave,AID=%d\n",MAC2STR(evt->event_info.
sta_disconnected.
mac),evt->event_info.
sta_disconnected.
aid);break;default:break;}}voiduser_init(void){//TODO:addyourowncodehere.
.
.
.
wifi_set_event_handler_cb(wifi_handle_event_cb);}功能使能Wi-FiWPS功能注意WPS功能必须在ESP8266Station使能的情况下调用.
Espressif!
/!
2020.
0953151!
3.
应用程序接口(API)3.
5.
62.
wi_wps_disable3.
5.
63.
wi_wps_start3.
5.
64.
wi_set_wps_cb结构体typedefenumwps_type{WPS_TYPE_DISABLE=0,WPS_TYPE_PBC,WPS_TYPE_PIN,WPS_TYPE_DISPLAY,WPS_TYPE_MAX,}WPS_TYPE_t;函数定义boolwifi_wps_enable(WPS_TYPE_twps_type)参数WPS_TYPE_twps_type:WPS的类型,目前仅支持WPS_TYPE_PBC返回true:成功false:失败功能关闭Wi-FiWPS功能,释放占用的资源.
函数定义boolwifi_wps_disable(void)参数无返回true:成功false:失败功能WPS开始进行交互注意WPS功能必须在ESP8266Station使能的情况下调用.
函数定义boolwifi_wps_start(void)参数无返回true:成功开始交互,并不表示WPS成功完成false:失败功能设置WPS回调函数,回调函数中将传入WPS运行状态.
WPS不支持WEP加密方式.
回调及参数结构体typedefvoid(*wps_st_cb_t)(intstatus);enumwps_cb_status{WPS_CB_ST_SUCCESS=0,WPS_CB_ST_FAILED,WPS_CB_ST_TIMEOUT,WPS_CB_ST_WEP,//WPSfailedbecausethatWEPisnotsupported.
WPS_CB_ST_SCAN_ERR,//cannotfindthetargetWPSAP};Espressif!
/!
2020.
0954151!
3.
应用程序接口(API)3.
5.
65.
wi_register_send_pkt_freedom_cb3.
5.
66.
wi_unregister_send_pkt_freedom_cb注意如果回调函数的传入参数状态为WPS_CB_ST_SUCCESS,表示成功获得AP密钥,请调用wifi_wps_disable关闭WPS功能释放资源,并调用wifi_station_connect连接AP.
否则,表示WPS失败,可以创建一个定时器,间隔一段时间后调用wifi_wps_start再次尝试WPS,或者调用wifi_wps_disable关闭WPS并释放资源.
函数定义boolwifi_set_wps_cb(wps_st_cb_tcb)参数wps_st_cb_tcb:回调函数返回true:成功false:失败功能注册freedom发包的回调函数.
freedom发包功能,即支持发送用户自定义802.
11的包.
注意freedom发包必须等前一个包发送完毕,进入发包回调freedom_outside_cb_t之后,才能发下一个包.
设置发送回调函数可以用来判别包是否发送成功(IEEE802.
11MAC底层是否发送成功).
使用发送回调函数请注意如下情况:针对单播包:-回调函数状态显示成功时,对方应用层实际没有收到的状况.
原因:1.
存在流氓设备进行攻击2.
加密密钥设置错误3.
应用层丢包若需要更强地发包保证发包成功率,请在应用层实现发包握手机制.
-回调函数状态显示失败时,对方应用层实际已收到的状况.
原因:1.
信道繁忙,未收到对方ACK.
请注意应用层发包重传,接收方需要检测重传包.
针对组播包(包括广播包):-回调函数状态显示成功,表示组播包已成功发送-回调函数状态显示失败,表示组播包发送失败回调函数定义typedefvoid(*freedom_outside_cb_t)(uint8status);status:0,发包成功;其他值,发包失败.
参数freedom_outside_cb_tcb:回调函数返回0:注册成功-1:注册失败功能注销freedom发包的回调函数.
函数定义voidwifi_unregister_send_pkt_freedom_cb(void)Espressif!
/!
2020.
0955151!
3.
应用程序接口(API)3.
5.
67.
wi_send_pkt_freedom3.
5.
68.
wi_rd_locp_recv_open3.
5.
69.
wi_rd_locp_recv_close参数无返回无功能发包函数.
注意发送包必须是完整的802.
11包,长度不包含FCS.
发包长度必须大于最小802.
11头,即24字节,且不能超过1400字节,否则返回发包失败.
duration域填写无效,由ESP8266底层程序决定,自动填充.
发包速率限制成管理包速率,与系统的发包速率一致.
支持发送:非加密的数据包,非加密的beacon/probereq/proberesp.
不支持发送:所有加密包(即包头中的加密bit必须为0,否则返回发包失败),控制包,除beacon/probereq/proberesp以外的其他管理包.
freedom发包必须等前一个包发送完毕,进入发包回调之后,才能发下一个包.
函数定义intwifi_send_pkt_freedom(uint8*buf,intlen,boolsys_seq)参数uint8*buf:数据包指针intlen:数据包长度boolsys_seq:是否跟随系统的802.
11包sequencenumber,如果跟随系统,将会在每次发包后自加1返回0:成功-1:失败功能开启RFIDLOCP(LocationControlProtocol)功能,用于接收WDS类型的包.
函数定义intwifi_rfid_locp_recv_open(void)参数无返回0:成功其他值:失败功能关闭RFIDLOCP(LocationControlProtocol)功能.
函数定义voidwifi_rfid_locp_recv_close(void)参数无返回无Espressif!
/!
2020.
0956151!
3.
应用程序接口(API)3.
5.
70.
wi_register_rd_locp_recv_cb3.
5.
71.
wi_unregister_rd_locp_recv_cb3.
5.
72.
wi_enable_gpio_wakeup3.
5.
73.
wi_disable_gpio_wakeup功能注册WDS收包回调.
仅在收到的WDS包的第一个MAC地址为组播地址时,才会进入回调函数.
回调函数定义typedefvoid(*rfid_locp_cb_t)(uint8*frm,intlen,intrssi);参数uint8*frm:指向802.
11包头的指针intlen:数据包长度intrssi:信号强度返回0:成功其他值:失败功能注销WDS收包回调.
函数定义voidwifi_unregister_rfid_locp_recv_cb(void)参数无返回无功能使能GPIO唤醒Light-sleep模式的功能.
注意在自动Light-sleep休眠wifi_set_sleep_type(LIGHT_SLEEP_T);的情况下,由GPIO触发ESP8266从Light-sleep唤醒之后,如需再次进入休眠时,将判断唤醒GPIO的状态:如果GPIO仍然处于唤醒状态,则进入Modem-sleep休眠;如果GPIO不处于唤醒状态,则进入Light-sleep休眠.
函数定义voidwifi_enable_gpio_wakeup(uint32i,GPIO_INT_TYPEintr_status)参数uint32i:GPIO号,取值范围:[0,15]GPIO_INT_TYPEintr_status:GPIO触发唤醒的状态返回无示例设置GPIO12低电平时,将ESP8266从Light-sleep模式唤醒.
GPIO_DIS_OUTPUT(12);PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);wifi_enable_gpio_wakeup(12,GPIO_PIN_INTR_LOLEVEL);功能取消GPIO唤醒Light-sleep模式的功能.
Espressif!
/!
2020.
0957151!
3.
应用程序接口(API)3.
5.
74.
wi_set_country3.
5.
75.
wi_get_country函数定义voidwifi_disable_gpio_wakeup(void)参数无返回无功能设置WiFi国家码函数定义boolwifi_set_country(wifi_country_t*country)参数wifi_country_t*country:国家码信息注意默认国家码为{.
cc="CN",.
schan=1,.
nchan=13,policy=WIFI_COUNTRY_POLICY_AUTO}当policy=WIFI_COUNTRY_POLICY_AUTO,ESP8266的国家码会在连上AP后,自动更改为与AP一致;当与AP断开连接后,又回到原设置值.
当policy=WIFI_COUNTRY_POLICY_MANUAL,ESP8266的国家码将始终保持为设置值.
在station+softAP模式下,如果ESP8266station的国家码信息改变,softAP端proberesponse/beacon中的countryIE国家码信息也会同样改变.
国家码信息不保存在ash,重新上电后,需要重新配置.
返回true:成功false:失败功能获取当前WiFi国家码函数定义boolwifi_get_country(wifi_country_t*country)参数wifi_country_t*country:国家码信息返回true:成功false:失败Espressif!
/!
2020.
0958151!
3.
应用程序接口(API)3.
6.
RateControl接口Wi-FiRateControl接口位于/ESP8266_NONOS_SDK/include/user_interface.
h.
1.
wi_set_user_xed_rate2.
wi_get_user_xed_rate功能设置ESP8266Station或SoftAP发数据的固定rate和mask参数定义enumFIXED_RATE{PHY_RATE_480x8,PHY_RATE_240x9,PHY_RATE_120xA,PHY_RATE_60xB,PHY_RATE_540xC,PHY_RATE_360xD,PHY_RATE_180xE,PHY_RATE_90xF,}#defineFIXED_RATE_MASK_NONE(0x00)#defineFIXED_RATE_MASK_STA(0x01)#defineFIXED_RATE_MASK_AP(0x02)#defineFIXED_RATE_MASK_ALL(0x03)注意当enable_mask的对应bit为1,ESP8266Station或SoftAP才会以固定rate发送数据.
如果enable_mask设置成0,则ESP8266Station和SoftAP均不会以固定rate发送数据.
ESP8266Station和SoftAP共享同一个rate,不支持分别设置为不同rate值.
函数定义intwifi_set_user_fixed_rate(uint8enable_mask,uint8rate)参数uint8enable_mask-0x00:禁用固定rate-0x01:固定rate用于ESP8266Station接口-0x02:固定rate用于ESP8266SoftAP接口-0x03:固定rate用于ESP8266Station+SoftAPuint8rate:固定rate值返回0:成功其他:失败功能获取已经设置的固定rate的mask和rate值函数定义intwifi_get_user_fixed_rate(uint8*enable_mask,uint8*rate)参数uint8*enable_mask:mask的指针uint8*rate:rate的指针返回0:成功其他:失败Espressif!
/!
2020.
0959151!
3.
应用程序接口(API)3.
wi_set_user_sup_rate功能设置ESP8266beacon、probereq/resp等包里的supportrate的IE中支持的rate范围.
用于将ESP8266支持的通信速率告知通信对方,以限制对方设备的发包速率.
注意本接口目前仅支持802.
11g模式,后续会增加支持802.
11b.
参数定义enumsupport_rate{RATE_11B5M0,RATE_11B11M1,RATE_11B1M2,RATE_11B2M3,RATE_11G6M4,RATE_11G12M5,RATE_11G24M6,RATE_11G48M7,RATE_11G54M8,RATE_11G9M9,RATE_11G18M10,RATE_11G36M11,};函数定义intwifi_set_user_sup_rate(uint8min,uint8max)参数uint8min:supportrate下限值,仅支持从enumsupport_rate中取值.
uint8max:supportrate上限值,仅支持从enumsupport_rate中取值.
返回0:成功其他:失败示例wifi_set_user_sup_rate(RATE_11G6M,RATE_11G24M);Espressif!
/!
2020.
0960151!
3.
应用程序接口(API)4.
wi_set_user_rate_limit功能设置ESP8266发包的初始速率范围.
重传速率则不受此接口限制.
参数定义enumRATE_11B_ID{RATE_11B_B11M=0,RATE_11B_B5M=1,RATE_11B_B2M=2,RATE_11B_B1M=3,}enumRATE_11G_ID{RATE_11G_G54M=0,RATE_11G_G48M=1,RATE_11G_G36M=2,RATE_11G_G24M=3,RATE_11G_G18M=4,RATE_11G_G12M=5,RATE_11G_G9M=6,RATE_11G_G6M=7RATE_11G_B5M=8,RATE_11G_B2M=9,RATE_11G_B1M=10}enumRATE_11N_ID{RATE_11N_MCS7S=0,RATE_11N_MCS7=1,RATE_11N_MCS6=2,RATE_11N_MCS5=3,RATE_11N_MCS4=4,RATE_11N_MCS3=5,RATE_11N_MCS2=6,RATE_11N_MCS1=7,RATE_11N_MCS0=8,RATE_11N_B5M=9,RATE_11N_B2M=10,RATE_11N_B1M=11}函数定义boolwifi_set_user_rate_limit(uint8mode,uint8ifidx,uint8max,uint8min)参数uint8mode:设置模式#defineRC_LIMIT_11B0#defineRC_LIMIT_11G1#defineRC_LIMIT_11N2uint8ifidx:设置接口0x00-ESP8266station接口0x01-ESP8266soft-AP接口uint8max:速率上限.
请从第一个参数mode对应的速率枚举中取值.
uint8min:速率下限.
请从第一个参数mode对应的速率枚举中取值.
返回true:成功false:失败示例设置11G模式下的ESP8266station接口的速率,限制为最大18M,最小6M.
wifi_set_user_rate_limit(RC_LIMIT_11G,0,RATE_11G_G18M,RATE_11G_G6M);Espressif!
/!
2020.
0961151!
3.
应用程序接口(API)5.
wi_set_user_limit_rate_mask6.
wi_get_user_limit_rate_mask功能设置使能受wifi_set_user_rate_limit限制速率的接口.
参数定义#defineLIMIT_RATE_MASK_NONE(0x00)#defineLIMIT_RATE_MASK_STA(0x01)#defineLIMIT_RATE_MASK_AP(0x02)#defineLIMIT_RATE_MASK_ALL(0x03)函数定义boolwifi_set_user_limit_rate_mask(uint8enable_mask)参数uint8enable_mask0x00:ESP8266Station+SoftAP接口均不受限制0x01:ESP8266Station接口开启限制0x02:ESP8266SoftAP接口开启限制0x03:ESP8266Station+SoftAP接口均开启限制返回true:成功false:失败功能查询当前受wifi_set_user_rate_limit限制速率的接口.
函数定义uint8wifi_get_user_limit_rate_mask(void)参数无返回0x00:ESP8266Station+SoftAP接口均不受限制0x01:ESP8266Station接口开启限制0x02:ESP8266SoftAP接口开启限制0x03:ESP8266Station+SoftAP接口均开启限制Espressif!
/!
2020.
0962151!
3.
应用程序接口(API)3.
7.
强制休眠接口强制休眠接口位于/ESP8266_NONOS_SDK/include/user_interface.
h.
使用强制休眠功能,必须先设置Wi-Fi工作模式为NULL_MODE.
从强制休眠中唤醒ESP8266,或者休眠时间到,进入唤醒回调(由wifi_fpm_set_wakeup_cb注册)后,先关闭强制休眠功能,才能再设置Wi-Fi工作模式为Station、SoftAP或Station+SoftAP的正常工作模式运行,具体可参考本章节后文提供的"示例代码".
注意,定时器会影响进入Light-sleep模式,如需Light-sleep休眠,请先将定时器关闭.
LightSleep为了降低功耗,将TCPtimertick由原本的250ms改为了3s,这将导致TCPtimer超时时间相应增加;如果用户对TCPtimer的准确度有要求,请使用modemsleep或者deepsleep模式.
3.
7.
1.
wi_fpm_open3.
7.
2.
wi_fpm_close3.
7.
3.
wi_fpm_do_wakeup功能开启强制休眠功能函数定义voidwifi_fpm_open(void)默认值强制sleep功能关闭返回无功能关闭强制休眠功能函数定义voidwifi_fpm_close(void)参数无返回无功能唤醒MODEM_SLEEP_T类型的强制休眠注意本接口仅支持在强制休眠功能开启的情况下调用,可在wifi_fpm_open之后调用;在wifi_fpm_close之后,不可以调用.
函数定义voidwifi_fpm_do_wakeup(void)返回无Espressif!
/!
2020.
0963151!
3.
应用程序接口(API)3.
7.
4.
wi_fpm_set_wakeup_cb3.
7.
5.
wi_fpm_do_sleep3.
7.
6.
wi_fpm_set_sleep_type功能设置强制休眠的定时唤醒功能超时,系统醒来后的回调函数注意本接口仅支持在强制休眠功能开启的情况下调用,可在wifi_fpm_open之后调用;在wifi_fpm_close之后,不可以调用.
仅在定时唤醒wifi_fpm_do_sleep且参数不为0xFFFFFFF功能的定时时间到,系统醒来,才会进入唤醒回调fpm_wakeup_cb_func.
MODEM_SLEEP_T类型的强制休眠被wifi_fpm_do_wakeup唤醒,并不会进入唤醒回调.
函数定义voidwifi_fpm_set_wakeup_cb(void(*fpm_wakeup_cb_func)(void))参数void(*fpm_wakeup_cb_func)(void):回调函数返回无功能让系统强制休眠,休眠时间到后,系统将自动醒来.
注意本接口仅支持在强制休眠功能开启的情况下调用,可在wifi_fpm_open之后调用;在wifi_fpm_close之后,不可以调用.
本接口返回0表示休眠设置成功,但并不表示立即进入休眠状态.
系统会在进入底层相关任务处理时,进行休眠.
请勿在调用本接口后,立即调用其他Wi-Fi相关操作.
函数定义int8wifi_fpm_do_sleep(uint32sleep_time_in_us)参数uint32sleep_time_in_us:休眠时间,单位:us,取值范围:10000~268435455(0xFFFFFFF)如果参数设置为0xFFFFFFF,则系统将一直休眠,直至:若wifi_fpm_set_sleep_type设置为LIGHT_SLEEP_T,可被GPIO唤醒.
若wifi_fpm_set_sleep_type设置为MODEM_SLEEP_T,可被wifi_fpm_do_wakeup唤醒.
返回0:休眠设置成功-1:强制休眠的状态错误,休眠失败-2:强制休眠功能未开启,休眠失败功能设置系统强制休眠的休眠类型.
注意如需调用本接口,请在wifi_fpm_open之前调用.
函数定义voidwifi_fpm_set_sleep_type(enumsleep_typetype)Espressif!
/!
2020.
0964151!
3.
应用程序接口(API)3.
7.
7.
wi_fpm_get_sleep_type3.
7.
8.
wi_fpm_auto_sleep_set_in_null_mode3.
7.
9.
示例代码调用强制休眠接口,在需要的情况下强制关闭RF电路以降低功耗.
示例一:Modem-sleep模式强制进入Modem-sleep模式,即强制关闭RF.
参数enumsleep_type{NONE_SLEEP_T=0,LIGHT_SLEEP_T,MODEM_SLEEP_T,};返回无功能查询系统强制休眠的休眠类型.
函数定义enumsleep_typewifi_fpm_get_sleep_type(void)参数无返回enumsleep_type{NONE_SLEEP_T=0,LIGHT_SLEEP_T,MODEM_SLEEP_T,};功能设置在关闭Wi-Fi模式wifi_set_opmode(NULL_MODE)的情况下,是否自动进入Modem-sleep模式.
函数定义voidwifi_fpm_auto_sleep_set_in_null_mode(uint8req)参数uint8req0:关闭Wi-Fi模式后,不自动进入Modem-sleep模式1:关闭Wi-Fi模式后,自动进入Modem-sleep模式.
返回无注意:强制休眠接口调用后,并不会立即休眠,而是等到系统idletask执行时才进入休眠.
请参考下述示例使用.
Espressif!
/!
2020.
0965151!
3.
应用程序接口(API)#defineFPM_SLEEP_MAX_TIME0xFFFFFFFvoidfpm_wakup_cb_func1(void){wifi_fpm_close(disableforcesleepfunctionwifi_set_opmode(STATION_MODE)setstationmodewifi_station_connect(connecttoAP}voiduser_func(.
.
.
){wifi_station_disconnect();wifi_set_opmode(NULL_MODE)setWiFimodetonullmode.
wifi_fpm_set_sleep_type(MODEM_SLEEP_T)modemsleepwifi_fpm_open(enableforcesleep#ifdefSLEEP_MAX/*Formodemsleep,FPM_SLEEP_MAX_TIMEcanonlybewakenedbycallingwifi_fpm_do_wakeup.
*/wifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME);#else//wakeupautomaticallywhentimeout.
wifi_fpm_set_wakeup_cb(fpm_wakup_cb_func1);//Setwakeupcallbackwifi_fpm_do_sleep(50*1000);#endif}#ifdefSLEEP_MAXvoidfunc1(void){wifi_fpm_do_wakeup();wifi_fpm_close(disableforcesleepfunctionwifi_set_opmode(STATION_MODE)setstationmodewifi_station_connect(connecttoAP}#endif示例二:Light-sleep模式强制进入Light-sleep模式,即强制关闭RF和CPU,需要设置一个回调函数,以便唤醒后程序继续运行.
注意,定时器会影响进入Light-sleep模式,如需休眠,请先将定时器关闭.
#defineFPM_SLEEP_MAX_TIME0xFFFFFFFvoidfpm_wakup_cb_func1(void){wifi_fpm_close(disableforcesleepfunctionwifi_set_opmode(STATION_MODE)setstationmodewifi_station_connect(connecttoAP}Espressif!
/!
2020.
0966151!
3.
应用程序接口(API)#ifndefSLEEP_MAX//Wakeuptilltimeout.
voiduser_func(.
.
.
){wifi_station_disconnect();wifi_set_opmode(NULL_MODE)setWiFimodetonullmode.
wifi_fpm_set_sleep_type(LIGHT_SLEEP_T)lightsleepwifi_fpm_open(enableforcesleepwifi_fpm_set_wakeup_cb(fpm_wakup_cb_func1);//Setwakeupcallbackwifi_fpm_do_sleep(50*1000)}#else//OrwakeupbyGPIOvoiduser_func(.
.
.
){wifi_station_disconnect();wifi_set_opmode(NULL_MODE)setWiFimodetonullmode.
wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);//lightsleepwifi_fpm_open(enableforcesleepPIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);wifi_enable_gpio_wakeup(12,GPIO_PIN_INTR_LOLEVEL);wifi_fpm_set_wakeup_cb(fpm_wakup_cb_func1);//Setwakeupcallbackwifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME).
.
.
}#endifEspressif!
/!
2020.
0967151!
3.
应用程序接口(API)3.
8.
ESP-NOW接口ESP-NOW接口位于/ESP8266_NONOS_SDK/include/espnow.
h.
ESP-NOW详细介绍请参考文档ESP-NOW用户指南,软件接口使用时的注意事项如下:ESP-NOW目前不支持组播包;ESP8266_NONOS_SDK_V2.
1及之后版本,ESP-NOW支持发送广播包,但请注意,仅支持不加密的广播包;建议slave和combo角色对应ESP8266SoftAP模式或者SoftAP+Station共存模式;controller角色对应Station模式;当ESP8266处于SoftAP+Station共存模式时,若作为slave或combo角色,将从SoftAP接口通信;若作为controller角色,将从Station接口通信;ESP-NOW不实现休眠唤醒功能,因此如果通信对方的ESP8266Station正处于休眠状态,ESP-NOW发包将会失败;ESP8266Station模式下,最多可设置10个加密的ESP-NOWpeer,加上不加密的设备,总数不超过20个;ESP8266SoftAP模式或者SoftAP+station模式下,最多设置6个加密的ESP-NOWpeer,加上不加密的设备,总数不超过20个.
3.
8.
1.
结构体enumesp_now_role{ESP_NOW_ROLE_IDLE=0,ESP_NOW_ROLE_CONTROLLER,ESP_NOW_ROLE_SLAVE,ESP_NOW_ROLE_COMBO,//bothslaveandcontrollerESP_NOW_ROLE_MAX,};3.
8.
2.
esp_now_init功能初始化ESP-NOW功能函数定义initesp_now_init(void)参数无返回0:成功其它:失败Espressif!
/!
2020.
0968151!
3.
应用程序接口(API)3.
8.
3.
esp_now_deinit3.
8.
4.
esp_now_register_recv_cb3.
8.
5.
esp_now_unregister_recv_cb功能卸载ESP-NOW功能函数定义intesp_now_deinit(void)参数无返回0:成功其它:失败功能注册ESP-NOW收包的回调函数注意当收到ESP-NOW的数据包,进入收包回调函数typedefvoid(*esp_now_recv_cb_t)(u8*mac_addr,u8*data,u8len)回调函数的3个参数分别为:u8*mac_add:发包方的MAC地址u8*data:收到的数据u8len:数据长度函数定义intesp_now_register_recv_cb(esp_now_recv_cb_tcb)参数esp_now_recv_cb_tcb:回调函数返回0:成功其它:失败功能注销ESP-NOW收包的回调函数函数定义intesp_now_unregister_recv_cb(void)参数无返回0:成功其它:失败Espressif!
/!
2020.
0969151!
3.
应用程序接口(API)3.
8.
6.
esp_now_register_send_cb3.
8.
7.
esp_now_unregister_send_cb功能设置ESP-NOW发包回调函数注意当发送了ESP-NOW的数据包,进入收包回调函数voidesp_now_send_cb_t(u8*mac_addr,u8status)回调函数的2个参数分别为:-u8*mac_addr:发包对方的目标MAC地址-u8status:发包状态;0,成功;否则,失败.
对应结构体:mt_tx_status{MT_TX_STATUS_OK=0,MT_TX_STATUS_FAILED,}发包回调函数不判断密钥是否匹配,如果使用密钥加密,请自行确保密钥正确.
设置发送回调函数可以用来判别包是否发送成功(IEEE802.
11MAC底层是否发送成功).
使用发送回调函数请注意如下情况:针对单播包:-回调函数状态显示成功时,对方应用层实际没有收到的状况.
原因:1.
存在流氓设备进行攻击2.
加密密钥设置错误3.
应用层丢包若需要更强地发包保证发包成功率,请在应用层实现发包握手机制.
-回调函数状态显示失败时,对方应用层实际已收到的状况.
原因:1.
信道繁忙,未收到对方ACK.
请注意应用层发包重传,接收方需要检测重传包.
针对组播包(包括广播包):-回调函数状态显示成功,表示组播包已成功发送-回调函数状态显示失败,表示组播包发送失败函数定义u8esp_now_register_send_cb(esp_now_send_cb_tcb)参数esp_now_send_cb_tcb:回调函数返回0:成功其它:失败功能注销ESP-NOW发包的回调函数,不再报告发包状态.
函数定义intesp_now_unregister_send_cb(void)参数无返回0:成功其它:失败Espressif!
/!
2020.
0970151!
3.
应用程序接口(API)3.
8.
8.
esp_now_send3.
8.
9.
esp_now_add_peer3.
8.
10.
esp_now_del_peer3.
8.
11.
esp_now_set_self_role功能发送ESP-NOW数据包函数定义intesp_now_send(u8*da,u8*data,intlen)参数u8*da:目的MAC地址;如果为NULL,则遍历ESP-NOW维护的所有MAC地址进行发送,否则,向指定MAC地址发送u8*data:要发送的数据intlen:数据长度返回0:成功其它:失败功能增加ESP-NOW匹配设备,将设备MAC地址存入ESP-NOW维护的列表.
函数定义intesp_now_add_peer(u8*mac_addr,u8role,u8channel,u8*key,u8key_len)参数u8*mac_addr:匹配设备的MAC地址u8channel:匹配设备的信道值u8*key:与该匹配设备通信时,需使用的密钥,目前仅支持16字节的密钥u8key_len:密钥长度,目前长度仅支持16字节返回0:成功其它:失败功能删除ESP-NOW匹配设备,将设备MAC地址从ESP-NOW维护的列表中删除.
函数定义intesp_now_del_peer(u8*mac_addr)参数u8*mac_addr:要删除设备的MAC地址返回0:成功其它:失败功能设置自身ESP-NOW的角色函数定义intesp_now_set_self_role(u8role)参数u8role:角色类型,详见esp_now_role返回0:成功其它:失败Espressif!
/!
2020.
0971151!
3.
应用程序接口(API)3.
8.
12.
esp_now_get_self_role3.
8.
13.
esp_now_set_peer_role3.
8.
14.
esp_now_get_peer_role3.
8.
15.
esp_now_set_peer_key功能查询自身ESP-NOW的角色函数定义u8esp_now_get_self_role(void)参数无返回角色类型功能设置指定匹配设备的ESP-NOW角色.
如果重复设置,新设置会覆盖原有设置.
函数定义intesp_now_set_peer_role(u8*mac_addr,u8role)参数u8*mac_addr:指定设备的MAC地址u8role:角色类型,详见esp_now_role返回0:成功其它:失败功能查询指定匹配设备的ESP-NOW角色函数定义intesp_now_get_peer_role(u8*mac_addr)参数u8*mac_addr:指定设备的MAC地址返回角色类型,详见esp_now_role否则,失败功能设置指定匹配设备的ESP-NOW密钥.
如果重复设置,新设置会覆盖原有设置.
函数定义intesp_now_set_peer_key(u8*mac_addr,u8*key,u8key_len)参数u8*mac_addr:指定设备的MAC地址u8*key:密钥指针,目前仅支持16字节的密钥;如果传NULL,则清除当前密钥u8key_len:密钥长度,目前长度仅支持16字节返回0:成功其它:失败Espressif!
/!
2020.
0972151!
3.
应用程序接口(API)3.
8.
16.
esp_now_get_peer_key3.
8.
17.
esp_now_set_peer_channel3.
8.
18.
esp_now_get_peer_channel3.
8.
19.
esp_now_is_peer_exist功能查询指定匹配设备的ESP-NOW密钥函数定义intesp_now_set_peer_key(u8*mac_addr,u8*key,u8*key_len)参数u8*mac_addr:指定设备的MAC地址u8*key:查询到的密钥指针,请使用16字节的buffer保存密钥u8key_len:查询到的密钥长度返回0:成功>0:找到目标设备,但未获得key0:出错,查询失败=0:成功=0:成功sec=CURRENT_TIME;//Usersetcurrenttime.
return0;}//SetCallbackwpa2_enterprise_set_user_get_time(sys_get_current_time);//EnableTimecheckwifi_station_set_enterprise_disable_time_check(false);Espressif!
/!
2020.
0994151!
4.
TCP/UDP接口4.
TCP/UDP接口位于ESP8266_NONOS_SDK/include/espconn.
h.
网络相关接口可分为以下几类:通用接口:TCP和UDP均可以调用的接口.
TCPAPIs:仅建立TCP连接时,使用的接口.
UDPAPIs:仅收发UDP包时,使用的接口.
mDNSAPIs:mDNS相关接口.
4.
1.
通用接口4.
1.
1.
espconn_delete4.
1.
2.
espconn_gethostbyname功能删除传输连接.
注意对应创建传输的接口如下:TCP:espconn_acceptUDP:espconn_create函数定义sint8espconn_delete(structespconn*espconn)参数structespconn*espconn:对应网络传输的结构体返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的网络传输ESPCONN_INPROGRESS:参数espconn对应的网络连接仍未断开,请先调用espconn_disconnect断开连接,再进行删除.
功能DNS功能函数定义err_tespconn_gethostbyname(structespconn*pespconn,constchar*hostname,ip_addr_t*addr,dns_found_callbackfound)Espressif!
/!
2020.
0995151!
4.
TCP/UDP接口4.
1.
3.
espconn_port4.
1.
4.
espconn_regist_sentcb参数structespconn*espconn:对应网络传输的结构体constchar*hostname:域名字符串的指针ip_addr_t*addr:IP地址dns_found_callbackfound:DNS回调函数返回err_tESPCONN_OK:成功ESPCONN_ISCONN:失败,错误码含义:已经连接ESPCONN_ARG:失败,错误码含义:未找到参数espconn对应的网络传输示例请参考IoT_Demo:ip_addr_tesp_server_ip;LOCALvoidICACHE_FLASH_ATTRuser_esp_platform_dns_found(constchar*name,ip_addr_t*ipaddr,void*arg){structespconn*pespconn=(structespconn*)arg;if(ipaddr!
=NULL)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));}voiddns_test(void){espconn_gethostbyname(pespconn,"iot.
espressif.
cn",&esp_server_ip,user_esp_platform_dns_found);}功能获取ESP8266可用的端口函数定义uint32espconn_port(void)参数无返回端口号功能注册网络数据发送成功的回调函数函数定义sint8espconn_regist_sentcb(structespconn*espconn,espconn_sent_callbacksent_cb)参数structespconn*espconn:对应网络传输的结构体espconn_connect_callbackconnect_cb:成功接收网络数据的回调函数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的网络传输Espressif!
/!
2020.
0996151!
4.
TCP/UDP接口4.
1.
5.
espconn_regist_recvcb4.
1.
6.
espconn_sent_callback4.
1.
7.
espconn_recv_callback4.
1.
8.
espconn_get_connection_info功能注册成功接收网络数据的回调函数函数定义sint8espconn_regist_recvcb(structespconn*espconn,espconn_recv_callbackrecv_cb)参数structespconn*espconn:对应网络传输的结构体espconn_connect_callbackconnect_cb:成功接收网络数据的回调函数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的网络传输功能网络数据发送成功的回调函数,由espconn_regist_sentcb注册函数定义voidespconn_sent_callback(void*arg)参数void*arg:回调函数的参数,网络传输的结构体espconn指针.
注意,本指针为底层维护的指针,不同回调传入的指针地址可能不一样,请勿依此判断网络连接.
可根据espconn结构体中的remote_ip,remote_port判断多连接中的不同网络传输.
返回无功能成功接收网络数据的回调函数,由espconn_regist_recvcb注册函数定义voidespconn_recv_callback(void*arg,char*pdata,unsignedshortlen)参数void*arg:回调函数的参数,网络传输结构体espconn指针.
注意,本指针为底层维护的指针,不同回调传入的指针地址可能不一样,请勿依此判断网络连接.
可根据espconn结构体中的remote_ip、remote_port判断多连接中的不同网络传输.
char*pdata:接收到的数据unsignedshortlen:接收到的数据长度返回无功能查询某个TCP连接或者UDP传输的远端信息.
一般在espconn_recv_callback中调用.
函数定义sint8espconn_get_connection_info(structespconn*espconn,remot_info**pcon_info,uint8typeflags)Espressif!
/!
2020.
0997151!
4.
TCP/UDP接口4.
1.
9.
espconn_send参数structespconn*espconn:对应网络连接的结构体remot_info**pcon_info:连接client信息uint8typeflags-0:正常server-1:SSLserver返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接示例voiduser_udp_recv_cb(void*arg,char*pusrdata,unsignedshortlength){structespconn*pesp_conn=arg;remot_info*premot=NULL;if(espconn_get_connection_info(pesp_conn,&premot,0)==ESPCONN_OK){pesp_conn->proto.
tcp->remote_port=premot->remote_port;pesp_conn->proto.
tcp->remote_ip[0]=premot->remote_ip[0];pesp_conn->proto.
tcp->remote_ip[1]=premot->remote_ip[1];pesp_conn->proto.
tcp->remote_ip[2]=premot->remote_ip[2];pesp_conn->proto.
tcp->remote_ip[3]=premot->remote_ip[3];espconn_sent(pesp_conn,pusrdata,os_strlen(pusrdata));}}功能通过WiFi发送数据注意一般情况,请在前一包数据发送成功,进入espconn_sent_callback后,再调用espconn_send发送下一包数据.
如果是UDP传输,请在每次调用espconn_send前,设置espconn->proto.
udp->remote_ip和remote_port参数,因为UDP无连接,远端信息可能被更改.
函数定义sint8espconn_send(structespconn*espconn,uint8*psent,uint16length)参数structespconn*espconn:对应网络传输的结构体uint8*psent:发送的数据uint16length:发送的数据长度Espressif!
/!
2020.
0998151!
4.
TCP/UDP接口4.
1.
10.
espconn_sent[@deprecated]本接口不建议使用,建议使用espconn_send代替.
返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的网络传输ESPCONN_MEM:空间不足ESPCONN_MAXNUM:底层发包缓存已满,发包失败ESPCONN_IF:UDP发包失败功能通过WiFi发送数据注意一般情况,请在前一包数据发送成功,进入espconn_sent_callback后,再调用espconn_send发送下一包数据.
如果是UDP传输,请在每次调用espconn_send前,设置espconn->proto.
udp->remote_ip和remote_port参数,因为UDP无连接,远端信息可能被更改.
函数定义sint8espconn_sent(structespconn*espconn,uint8*psent,uint16length)参数structespconn*espconn:对应网络传输的结构体uint8*psent:发送的数据uint16length:发送的数据长度返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的网络传输ESPCONN_MEM:空间不足ESPCONN_MAXNUM:底层发包缓存已满,发包失败ESPCONN_IF:UDP发包失败Espressif!
/!
2020.
0999151!
4.
TCP/UDP接口4.
2.
TCP接口TCP接口仅用于TCP连接,请勿用于UDP传输.
4.
2.
1.
espconn_accept4.
2.
2.
espconn_regist_time4.
2.
3.
espconn_connect功能创建TCPserver,建立侦听函数定义sint8espconn_accept(structespconn*espconn)参数structespconn*espconn:对应网络连接的结构体返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接ESPCONN_MEM:空间不足ESPCONN_ISCONN:连接已经建立功能注册ESP8266TCPserver超时时间,时间值仅作参考,并不精确.
注意请在espconn_accept之后,连接未建立之前,调用本接口.
本接口不能用于SSL连接.
如果超时时间设置为0,ESP8266TCPserver将始终不会断开已经不与它通信的TCPclient,不建议这样使用.
函数定义sint8espconn_regist_time(structespconn*espconn,uint32interval,uint8type_flag)参数structespconn*espconn:对应网络连接的结构体uint32interval:超时时间,单位:秒,最大值:7200秒uint8type_flag-0:对所有TCP连接生效-1:仅对某一TCP连接生效返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能连接TCPserver(ESP8266作为TCPclient).
注意如果espconn_connect失败,返回非零值,连接未建立,不会进入任何espconncallback.
建议使用espconn_port接口,设置一个可用的端口号.
函数定义sint8espconn_connect(structespconn*espconn)参数structespconn*espconn:对应网络连接的结构体Espressif!
/!
2020.
09100151!
4.
TCP/UDP接口4.
2.
4.
espconn_regist_connectcb4.
2.
5.
espconn_connect_callback4.
2.
6.
espconn_set_opt返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接ESPCONN_MEM:空间不足ESPCONN_ISCONN:连接已经建立ESPCONN_RTE:路由异常功能注册TCP连接成功建立后的回调函数.
函数定义sint8espconn_regist_connectcb(structespconn*espconn,espconn_connect_callbackconnect_cb)参数structespconn*espconn:对应网络连接的结构体espconn_connect_callbackconnect_cb:成功建立TCP连接后的回调函数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能成功建立TCP连接的回调函数,由espconn_regist_connectcb注册.
ESP8266作为TCPserver侦听到TCPclient连入;或者ESP8266作为TCPclient成功与TCPserver建立连接.
函数定义voidespconn_connect_callback(void*arg)参数void*arg:回调函数的参数,对应网络连接的结构体espconn指针.
注意,本指针为底层维护的指针,不同回调传入的指针地址可能不一样,请勿依此判断网络连接.
可根据espconn结构体中的remote_ip,remote_port判断多连接中的不同网络传输.
返回无功能设置TCP连接的相关配置,对应清除配置标志位的接口为espconn_clear_opt注意SSL连接不支持使用本接口一般情况下,无需调用本接口;如需设置espconn_set_opt请在espconn_connect_callback中调用函数定义sint8espconn_set_opt(structespconn*espconn,uint8opt)Espressif!
/!
2020.
09101151!
4.
TCP/UDP接口4.
2.
7.
espconn_clear_opt4.
2.
8.
espconn_set_keepalive参数structespconn*espconn:对应网络连接的结构体uint8opt:TCP连接的相关配置,参考espconn_option-bit0:1,TCP连接断开时,及时释放内存,无需等待2分钟才释放占用内存;-bit1:1,关闭TCP数据传输时的nalge算法;-bit2:1,使能writenishcallback,进入此回调表示espconn_send要发送的数据已经写入2920字节的writebuffer等待发送或已经发送;-bit3:1,使能keepalive;返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能清除TCP连接的相关配置函数定义sint8espconn_clear_opt(structespconn*espconn,uint8opt)结构体enumespconn_option{ESPCONN_START=0x00,ESPCONN_REUSEADDR=0x01,ESPCONN_NODELAY=0x02,ESPCONN_COPY=0x04,ESPCONN_KEEPALIVE=0x08,ESPCONN_END}参数structespconn*espconn:对应网络连接的结构体uint8opt:清除TCP连接的相关配置,参考espconn_option返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能设置TCPkeepalive的参数注意一般情况下,不需要调用本接口如果设置,请在espconn_connect_callback中调用,并先设置espconn_set_opt使能keepalive函数定义sint8espconn_set_keepalive(structespconn*espconn,uint8level,void*optarg)Espressif!
/!
2020.
09102151!
4.
TCP/UDP接口4.
2.
9.
espconn_get_keepalive4.
2.
10.
espconn_reconnect_callback结构体enumespconn_level{ESPCONN_KEEPIDLE,ESPCONN_KEEPINTVL,ESPCONN_KEEPCNT}参数structespconn*espconn:对应网络连接的结构体uint8level:默认设置为每隔ESPCONN_KEEPIDLE时长进行一次keepalive探查,如果报文无响应,则每隔ESPCONN_KEEPINTVL时长探查一次,最多探查ESPCONN_KEEPCNT次;若始终无响应,则认为网络连接断开,释放本地连接相关资源,进入espconn_reconnect_callback.
注意,时间间隔设置并不可靠精准,仅供参考,受其他高优先级任务执行的影响.
参数说明如下:-ESPCONN_KEEPIDLE:设置进行keepalive探查的时间间隔,单位:秒-ESPCONN_KEEPINTVL:keepalive探查过程中,报文的时间间隔,单位:秒-ESPCONN_KEEPCNT:每次keepalive探查,发送报文的最大次数void*optarg:设置参数值返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能查询TCPkeepalive的参数函数定义sint8espconn_set_keepalive(structespconn*espconn,uint8level,void*optarg)结构体enumespconn_level{ESPCONN_KEEPIDLE,ESPCONN_KEEPINTVL,ESPCONN_KEEPCNT}参数structespconn*espconn:对应网络连接的结构体uint8level-ESPCONN_KEEPIDLE:设置进行keepalive探查的时间间隔,单位:秒-ESPCONN_KEEPINTVL:keepalive探查过程中,报文的时间间隔,单位:秒-ESPCONN_KEEPCNT:每次keepalive探查,发送报文的最大次数void*optarg:设置参数值返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能TCP连接异常断开时的回调函数,相当于出错处理回调,由espconn_regist_reconcb注册.
函数定义voidespconn_reconnect_callback(void*arg,sint8err)Espressif!
/!
2020.
09103151!
4.
TCP/UDP接口4.
2.
11.
espconn_regist_reconcb4.
2.
12.
espconn_disconnect参数void*arg:回调函数的参数,对应网络连接的结构体espconn指针.
注意,本指针为底层维护的指针,不同回调传入的指针地址可能不一样,请勿依此判断网络连接.
可根据espconn结构体中的remote_ip、remote_port判断多连接中的不同网络传输.
sint8err:异常断开的错误码.
-ESCONN_TIMEOUT:超时出错断开-ESPCONN_ABRT:TCP连接异常断开-ESPCONN_RST:TCP连接复位断开-ESPCONN_CLSD:TCP连接在断开过程中出错,异常断开-ESPCONN_CONN:TCP未连接成功-ESPCONN_HANDSHAKE:TCPSSL握手失败-ESPCONN_PROTO_MSG:SSL应用数据处理异常返回无功能注册TCP连接发生异常断开时的回调函数,可以在回调函数中进行重连.
注意espconn_reconnect_callback功能类似于出错处理回调,任何阶段出错时,均会进入此回调.
例如,espconn_sent失败,则认为网络连接异常,也会进入espconn_reconnect_callback;用户可在espconn_reconnect_callback中自行定义出错处理.
函数定义sint8espconn_regist_reconcb(structespconn*espconn,espconn_reconnect_callbackrecon_cb)参数structespconn*espconn:对应网络连接的结构体espconn_reconnect_callbackrecon_cb:回调函数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能断开TCP连接注意请勿在espconn的任何callback中调用本接口断开连接.
如有需要,可以在callback中使用任务触发调用本接口断开连接.
函数定义sint8espconn_disconnect(structespconn*espconn)参数structespconn*espconn:对应网络连接的结构体返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接Espressif!
/!
2020.
09104151!
4.
TCP/UDP接口4.
2.
13.
espconn_regist_disconcb4.
2.
14.
espconn_abort4.
2.
15.
espconn_regist_write_nish功能注册TCP连接正常断开成功的回调函数函数定义sint8espconn_regist_disconcb(structespconn*espconn,espconn_connect_callbackdiscon_cb)参数structespconn*espconn:对应网络连接的结构体espconn_connect_callbackconnect_cb:回调函数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能强制断开TCP连接注意请勿在espconn的任何callback中调用本接口断开连接.
如有需要,可以在callback中使用任务触发调用本接口断开连接.
函数定义sint8espconn_abort(structespconn*espconn)参数structespconn*espconn:对应网络连接的结构体返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能注册所有需发送的数据均成功写入writebuffer后的回调函数.
请先调用espconn_set_opt使能writebuffer.
注意本接口不能用于SSL连接.
writebuffer用于缓存espconn_send将发送的数据,最多缓存8包数据,writebuffer的容量为2920字节.
由espconn_set_opt设置使能write_finish_callback回调.
对发送速度有要求时,可以在write_finish_callback中调用espconn_send发送下一包,无需等到espconn_sent_callback函数定义sint8espconn_regist_write_finish(structespconn*espconn,espconn_connect_callbackwrite_finish_fn)参数structespconn*espconn:对应网络连接的结构体espconn_connect_callbackwrite_finish_fn:回调函数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接Espressif!
/!
2020.
09105151!
4.
TCP/UDP接口4.
2.
16.
espconn_tcp_get_max_con4.
2.
17.
espconn_tcp_set_max_con4.
2.
18.
espconn_tcp_get_max_con_allow4.
2.
19.
espconn_tcp_set_max_con_allow4.
2.
20.
espconn_recv_hold功能查询允许的TCP最大连接数.
函数定义uint8espconn_tcp_get_max_con(void)参数无返回允许的TCP最大连接数功能设置允许的TCP最大连接数.
在内存足够的情况下,建议不超过10.
默认值为5.
函数定义sint8espconn_tcp_set_max_con(uint8num)参数uint8num:允许的TCP最大连接数返回0:成功其它:失败,返回错误码ESPCONN_ARG:未找到参数espconn对应的TCP连接功能查询ESP8266某个TCPserver最多允许连接的TCPclient数目函数定义sint8espconn_tcp_get_max_con_allow(structespconn*espconn)参数structespconn*espconn:对应TCPserver的结构体返回>0:最多允许连接的TCPclient数目host_name="espressif";info->ipAddr=ipconfig.
ip.
addr;//ESP8266stationIPinfo->server_name="iot";info->server_port=8080;info->txt_data[0]="version=now";info->txt_data[1]="user1=data1";info->txt_data[2]="user2=data2";espconn_mdns_init(&info);}功能去能mDNS,对应使能API:espconn_mdns_enable函数定义voidespconn_mdns_disable(void)参数无返回无功能使能mDNS函数定义voidespconn_mdns_enable(void)参数无返回无Espressif!
/!
2020.
09117151!
5.
应用相关接口5.
应用相关接口5.
1.
AT接口AT接口位于/ESP8266_NONOS_SDK/include/at_custom.
h.
AT接口的使用示例,请参考ESP8266_NONOS_SDK/examples/at/user/user_main.
c.
5.
1.
1.
at_response_ok5.
1.
2.
at_response_error5.
1.
3.
at_cmd_array_regist功能AT串口(UART0)输出OK函数定义voidat_response_ok(void)参数无返回无功能AT串口(UART0)输出ERROR函数定义voidat_response_error(void)参数无返回无功能注册用户自定义的AT指令.
请仅调用一次,将所有用户自定义AT指令一并注册.
函数定义voidat_cmd_array_regist(at_function*custom_at_cmd_arrar,uint32cmd_num)参数at_function*custom_at_cmd_arrar:用户自定义的AT指令数组uint32cmd_num:用户自定义的AT指令数目返回无示例请参考ESP8266_NONOS_SDK/examples/at/user/user_main.
cEspressif!
/!
2020.
09118151!
5.
应用相关接口5.
1.
4.
at_get_next_int_dec5.
1.
5.
at_data_str_copy5.
1.
6.
at_init功能从AT指令行中解析int型数字函数定义boolat_get_next_int_dec(char**p_src,int*result,int*err)参数char**p_src:参数*p_src为接收到的AT指令字符串int*result:从AT指令中解析出的int型数字int*err:解析处理时的错误码-1:数字省略时,返回错误码1-3:只发现'-'时,返回错误码3返回true:正常解析到数字(数字省略时,仍然返回true,但错误码会为1);false:解析异常,返回错误码;异常可能:数字超过10bytes,遇到\r结束符,只发现-字符.
示例请参考ESP8266_NONOS_SDK/examples/at/user/user_main.
c功能从AT指令行中解析字符串函数定义int32at_data_str_copy(char*p_dest,char**p_src,int32max_len)参数char*p_dest:从AT指令行中解析到的字符串char**p_src:参数*p_src为接收到的AT指令字符串int32max_len:允许的最大字符串长度返回解析到的字符串长度:>=0:成功,则返回解析到的字符串长度>12)/1000,((cal1*1000)>>12)%1000);os_printf("cal2:%d.
%d\r\n",((cal2*1000)>>12)/1000,((cal2*1000)>>12)%1000);os_printf(r\n\r\n");rtc_time.
time_accuint64)(rtc_t2-rtc_time.
time_base)uint64)((cal2*1000)>>12)));os_printf("rtctimeacc:%lld\r\n",rtc_time.
time_acc);os_printf("powerontime:%lldus\r\n",rtc_time.
time_acc/1000);os_printf("powerontime:%lld.
%02lldS\r\n",(rtc_time.
time_acc/10000000)/100,(rtc_time.
time_acc/10000000)%100);rtc_time.
time_base=rtc_t2;Espressif!
/!
2020.
09147151!
附录Asystem_rtc_mem_write(64,&rtc_time,sizeof(rtc_time));os_printf(r\n");if(5==(cnt++)){os_printf("systemrestart\r\n");system_restart();}else{os_printf("continue.
.
.
\r\n");}}voiduser_init(void){rtc_count();os_printf("SDKversion:%s\n",system_get_sdk_version());os_timer_disarm(&rtc_test_t);os_timer_setfn(&rtc_test_t,rtc_count,NULL);os_timer_arm(&rtc_test_t,10000,1);}A.
3.
Sniffer说明关于sniffer的详细说明,请参考ESP8266技术参考.
A.
4.
ESP8266SoftAP和Station信道定义虽然ESP8266支持SoftAP+Station共存模式,但是ESP8266实际只有一个硬件信道.
因此在SoftAP+Station模式时,ESP8266SoftAP会动态调整信道值与ESP8266Station一致.
这个限制会导致ESP8266SoftAP+Station模式时一些行为上的不便,用户请注意.
例如:情况一1.
如果ESP8266Station连接到一个路由(假设路由信道号为6)2.
通过接口wifi_softap_set_config设置ESP8266SoftAP3.
若设置值合法有效,该API将返回true,但信道号仍然会自动调节成与ESP8266Station接口一致,在这个例子里也就是信道号为6.
因为ESP8266在硬件上只有一个信道,由ESP8266Station与SoftAP接口共用.
情况二1.
调用接口wifi_softap_set_config设置ESP8266SoftAP(例如信道号为5)2.
其他Station连接到ESP8266SoftAPEspressif!
/!
2020.
09148151!
附录A3.
将ESP8266Station连接到路由(假设路由信道号为6)4.
ESP8266SoftAP将自动调整信道号与ESP8266Station一致(信道6)5.
由于信道改变,之前连接到ESP8266SoftAP的Station的Wi-Fi连接断开.
情况三1.
其他Station与ESP8266SoftAP建立连接2.
如果ESP8266Station一直尝试扫描或连接某路由,可能导致ESP8266SoftAP端的连接断开.
3.
因为ESP8266Station会遍历各个信道查找目标路由,意味着ESP8266其实在不停切换信道,ESP8266SoftAP的信道也因此在不停更改.
这可能导致ESP8266SoftAP端的原有连接断开.
4.
这种情况,用户可以通过设置定时器,超时后调用wifi_station_disconnect停止ESP8266Station不断连接路由的尝试;或者在初始配置时,调用wifi_station_set_reconnect_policy和wifi_station_set_auto_connect禁止ESP8266Station尝试重连路由.
A.
5.
ESP8266启动信息说明ESP8266启动时,将从UART0以波特率74880打印如下启动信息:!
其中可供用户参考的启动信息说明如下:启动信息说明rstcause1:上电2:外部复位启动信息Espressif!
/!
2020.
09149151!
附录AA.
6.
ESP8266信令测试使用说明ESP8266_NonOS_SDK_V3.
0增加了信令测试功能,该功能默认关闭.
在user_interface.
h定义了函数wi_enable_signaling_measurement()和wi_disable_signaling_measurement()可用于开启/关闭信令测试功能.
建议使用罗德施瓦茨公司的CMW500信令测试仪进行测试.
具体使用步骤如下:(1)在系统启动后,调用wi_set_opmode使能sta模式,调用wi_enable_signaling_measurement开启信令测试模式;(2)如果需要测试11n或者11b,可以调用wi_set_phy_mode将模式设置为11n或者11b;如果无需测试,则无需调用,ESP8266默认在11g模式;(3)调用wi_station_connect连接测试仪.
4:硬件看门狗复位bootmode第一个参数1:ESP8266处于UART-down模式,可通过UART下载固件3:ESP8266处于Flash-boot模式,从Flash启动运行chksumchksum与csum值相等,表示启动过程中Flash读取正确说明启动信息Espressif!
/!
2020.
09150151免责申明和版权公告本文中的信息,包括供参考的URL地址,如有变更,恕不另行通知.
文档"按现状"提供,不负任何担保责任,包括对适销性、适用于特定用途或非侵权性的任何担保,和任何提案、规格或样品在他处提到的任何担保.
本文档不负任何责任,包括使用本文档内信息产生的侵犯任何专利权行为的责任.
本文档在此未以禁止反言或其他方式授予任何知识产权使用许可,不管是明示许可还是暗示许可.
Wi-Fi联盟成员标志归Wi-Fi联盟所有.
蓝牙标志是BluetoothSIG的注册商标.
文中提到的所有商标名称、商标和注册商标均属其各自所有者的财产,特此声明.
版权归2020乐鑫所有.
保留所有权利.
乐鑫IOT团队www.
espressif.
com

georgedatacenter:美国VPS可选洛杉矶/芝加哥/纽约/达拉斯机房,$20/年;洛杉矶独立服务器39美元/月

georgedatacenter怎么样?georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,大家可以根据自己的需要入手。georgedatacenter是一家成立于2019年的美国vps商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacen...

LOCVPS-2021年6月香港便宜vps宽带升级,充值就送代金券,其它八折优惠!

LOCVPS怎么样?LOCVPS是一家成立于2011年的稳定老牌国人商家,目前提供中国香港、韩国、美国、日本、新加坡、德国、荷兰等区域VPS服务器,所有机房Ping延迟低,国内速度优秀,非常适合建站和远程办公,所有机房Ping延迟低,国内速度优秀,非常适合做站。XEN架构产品的特点是小带宽无限流量、不超售!KVM架构是目前比较流行的虚拟化技术,大带宽,生态发展比较全面!所有大家可以根据自己业务需求...

极光KVM(限时16元),洛杉矶三网CN2,cera机房,香港cn2

极光KVM创立于2018年,主要经营美国洛杉矶CN2机房、CeRaNetworks机房、中国香港CeraNetworks机房、香港CMI机房等产品。其中,洛杉矶提供CN2 GIA、CN2 GT以及常规BGP直连线路接入。从名字也可以看到,VPS产品全部是基于KVM架构的。极光KVM也有明确的更换IP政策,下单时选择“IP保险计划”多支付10块钱,可以在服务周期内免费更换一次IP,当然也可以不选择,...

ip在线查询为你推荐
access数据库ACCESS数据库有什么用原代码源代码是什么意思啊陈嘉垣陈浩民、马德钟强吻女星陈嘉桓,求大家一个说法。长尾关键词挖掘工具怎么挖掘长尾关键词,可以批量操作的那种www.yahoo.com.hk香港有什么有名的娱乐门户网站吗?www.299pp.com免费PP电影哪个网站可以看啊www.se222se.comhttp://www.qqvip222.com/www.789.com.cn有什么网站可以玩游戏的.kb123.net连网方式:wap和net到底有什么不一样的baqizi.cc和空姐一起的日子电视剧在线观看 和空姐一起的日子全集在线观看
免费国内空间 域名信息查询 .cn域名注册 安徽双线服务器租用 本网站服务器在美国维护 qq云存储 站群服务器 精品网 国外服务器 realvnc evssl证书 好看的桌面背景图片 租空间 七夕快乐英文 admit的用法 asp免费空间申请 爱奇艺vip免费试用7天 台湾google atom处理器 好看的空间 更多