From 5f52e9ad704fd7b06c7bd0c079b1be9f9bd643ab Mon Sep 17 00:00:00 2001 From: Zhang Jun Hao Date: Fri, 13 Jul 2018 11:38:56 +0800 Subject: [PATCH] feat(examples): refactor smartconfig example --- examples/wifi/smart_config/README.md | 50 ++++ examples/wifi/smart_config/airkiss.txt | 8 - .../wifi/smart_config/main/smartconfig_main.c | 125 ++++++++++ examples/wifi/smart_config/main/user_main.c | 215 ------------------ .../smart_config/model two-dimension code.rar | Bin 15386 -> 0 bytes examples/wifi/smart_config/readme.txt | 40 ---- 6 files changed, 175 insertions(+), 263 deletions(-) create mode 100644 examples/wifi/smart_config/README.md delete mode 100644 examples/wifi/smart_config/airkiss.txt create mode 100644 examples/wifi/smart_config/main/smartconfig_main.c delete mode 100644 examples/wifi/smart_config/main/user_main.c delete mode 100644 examples/wifi/smart_config/model two-dimension code.rar delete mode 100644 examples/wifi/smart_config/readme.txt diff --git a/examples/wifi/smart_config/README.md b/examples/wifi/smart_config/README.md new file mode 100644 index 00000000..f9a41059 --- /dev/null +++ b/examples/wifi/smart_config/README.md @@ -0,0 +1,50 @@ +# smartconfig Example + +This example shows how ESP8266 connects to AP with ESPTOUCH. Example does the following steps: + +* Download ESPTOUCH APP from app store. [Android source code](https://github.com/EspressifApp/EsptouchForAndroid) and [iOS source code](https://github.com/EspressifApp/EsptouchForIOS) is available. + +* Compile this example and upload it to an ESP8266. + +* Make sure your phone connect to target AP (2.4GHz). + +* Open ESPTOUCH app and input password. There will be success message after few sec. + +### Example output + +Here is an example of smartconfig console output. +``` +I (162) boot: Loaded app from partition at offset 0x10000 +mode : sta(ec:fa:bc:1d:33:e0) +add if0 +SC version: V2.5.4 +scandone +scandone +I (5) sc: SC_STATUS_FINDING_CHANNEL + +TYPE: ESPTOUCH +T|PHONE MAC: 90 f0 52 0c 16 2d +T|AP MAC : bc 5f f6 1b e8 1c +I (8) sc: SC_STATUS_GETTING_SSID_PSWD +T|pswd: 1234567890 +T|ssid: TEST001 +I (17) sc: SC_STATUS_LINK +I (17) sc: SSID:TEST001 +I (17) sc: PASSWORD:1234567890 +scandone +state: 0 -> 2 (b0) +state: 2 -> 3 (0) +state: 3 -> 5 (10) +add 0 +aid 2 +pm open phy_2,type:2 0 0 +cnt + +connected with TEST001, channel 3 +I (22) event: sta ip: 192.168.0.108, mask: 255.255.255.0, gw: 192.168.0.1 +I (22) sc: WiFi Connected to ap +I (25) sc: SC_STATUS_LINK_OVER +I (25) sc: Phone ip: 192.168.0.108 + +I (25) sc: smartconfig over +``` diff --git a/examples/wifi/smart_config/airkiss.txt b/examples/wifi/smart_config/airkiss.txt deleted file mode 100644 index fed54ec0..00000000 --- a/examples/wifi/smart_config/airkiss.txt +++ /dev/null @@ -1,8 +0,0 @@ -if you want to use AIRKISS2.0 LAN discovery, should include airkiss.h and include libairkiss.a in makefile. - -you can follow the steps below to achieve the function of LAN discovery. -1.scan the two-dimension code in your wechat. -2.running this smartconfig example. -3.wait device connect to AP and LAN discovery. - -More detailed introduction refer to wechat. \ No newline at end of file diff --git a/examples/wifi/smart_config/main/smartconfig_main.c b/examples/wifi/smart_config/main/smartconfig_main.c new file mode 100644 index 00000000..c8035d20 --- /dev/null +++ b/examples/wifi/smart_config/main/smartconfig_main.c @@ -0,0 +1,125 @@ +/* Esptouch example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_wifi.h" +#include "esp_event_loop.h" +#include "esp_log.h" +#include "esp_system.h" +#include "nvs_flash.h" +#include "tcpip_adapter.h" +#include "esp_smartconfig.h" + +/* FreeRTOS event group to signal when we are connected & ready to make a request */ +static EventGroupHandle_t wifi_event_group; + +/* The event group allows multiple bits for each event, + but we only care about one event - are we connected + to the AP with an IP? */ +static const int CONNECTED_BIT = 1<<0; +static const int ESPTOUCH_DONE_BIT = 1<<1; +static const char *TAG = "sc"; + +void smartconfig_example_task(void * parm); + +static esp_err_t event_handler(void *ctx, system_event_t *event) +{ + switch(event->event_id) { + case SYSTEM_EVENT_STA_START: + xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096, NULL, 3, NULL); + break; + case SYSTEM_EVENT_STA_GOT_IP: + xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); + break; + case SYSTEM_EVENT_STA_DISCONNECTED: + esp_wifi_connect(); + xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); + break; + default: + break; + } + return ESP_OK; +} + +static void initialise_wifi(void) +{ + tcpip_adapter_init(); + wifi_event_group = xEventGroupCreate(); + ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + + ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); + ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); + ESP_ERROR_CHECK( esp_wifi_start() ); +} + +static void sc_callback(smartconfig_status_t status, void *pdata) +{ + switch (status) { + case SC_STATUS_WAIT: + ESP_LOGI(TAG, "SC_STATUS_WAIT"); + break; + case SC_STATUS_FIND_CHANNEL: + ESP_LOGI(TAG, "SC_STATUS_FINDING_CHANNEL"); + break; + case SC_STATUS_GETTING_SSID_PSWD: + ESP_LOGI(TAG, "SC_STATUS_GETTING_SSID_PSWD"); + break; + case SC_STATUS_LINK: + ESP_LOGI(TAG, "SC_STATUS_LINK"); + wifi_config_t *wifi_config = pdata; + ESP_LOGI(TAG, "SSID:%s", wifi_config->sta.ssid); + ESP_LOGI(TAG, "PASSWORD:%s", wifi_config->sta.password); + ESP_ERROR_CHECK( esp_wifi_disconnect() ); + ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, wifi_config) ); + ESP_ERROR_CHECK( esp_wifi_connect() ); + break; + case SC_STATUS_LINK_OVER: + ESP_LOGI(TAG, "SC_STATUS_LINK_OVER"); + if (pdata != NULL) { + uint8_t phone_ip[4] = { 0 }; + memcpy(phone_ip, (uint8_t* )pdata, 4); + ESP_LOGI(TAG, "Phone ip: %d.%d.%d.%d\n", phone_ip[0], phone_ip[1], phone_ip[2], phone_ip[3]); + } + xEventGroupSetBits(wifi_event_group, ESPTOUCH_DONE_BIT); + break; + default: + break; + } +} + +void smartconfig_example_task(void * parm) +{ + EventBits_t uxBits; + ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH) ); + ESP_ERROR_CHECK( esp_smartconfig_start(sc_callback) ); + while (1) { + uxBits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY); + if(uxBits & CONNECTED_BIT) { + ESP_LOGI(TAG, "WiFi Connected to ap"); + } + if(uxBits & ESPTOUCH_DONE_BIT) { + ESP_LOGI(TAG, "smartconfig over"); + esp_smartconfig_stop(); + vTaskDelete(NULL); + } + } +} + +void app_main() +{ + ESP_ERROR_CHECK( nvs_flash_init() ); + initialise_wifi(); +} + diff --git a/examples/wifi/smart_config/main/user_main.c b/examples/wifi/smart_config/main/user_main.c deleted file mode 100644 index 1aeed5e4..00000000 --- a/examples/wifi/smart_config/main/user_main.c +++ /dev/null @@ -1,215 +0,0 @@ -/* smartconfig example - - This example code is in the Public Domain (or CC0 licensed, at your option.) - - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" - -#include "lwip/sockets.h" -#include "lwip/dns.h" -#include "lwip/netdb.h" - -#include "airkiss.h" - -#define server_ip "192.168.101.142" -#define server_port 9669 - - -#define DEVICE_TYPE "gh_9e2cff3dfa51" // wechat public number -#define DEVICE_ID "122475" // model ID - -#define DEFAULT_LAN_PORT 12476 - -static esp_udp ssdp_udp; -static struct espconn pssdpudpconn; -static os_timer_t ssdp_time_serv; - -uint8_t lan_buf[200]; -uint16_t lan_buf_len; -uint8_t udp_sent_cnt = 0; - -const airkiss_config_t akconf = { - (airkiss_memset_fn)& memset, - (airkiss_memcpy_fn)& memcpy, - (airkiss_memcmp_fn)& memcmp, - 0, -}; - -static void airkiss_wifilan_time_callback(void) -{ - uint16_t i; - airkiss_lan_ret_t ret; - - if ((udp_sent_cnt++) > 30) { - udp_sent_cnt = 0; - os_timer_disarm(&ssdp_time_serv);//s - //return; - } - - ssdp_udp.remote_port = DEFAULT_LAN_PORT; - ssdp_udp.remote_ip[0] = 255; - ssdp_udp.remote_ip[1] = 255; - ssdp_udp.remote_ip[2] = 255; - ssdp_udp.remote_ip[3] = 255; - lan_buf_len = sizeof(lan_buf); - ret = airkiss_lan_pack(AIRKISS_LAN_SSDP_NOTIFY_CMD, - DEVICE_TYPE, DEVICE_ID, 0, 0, lan_buf, &lan_buf_len, &akconf); - - if (ret != AIRKISS_LAN_PAKE_READY) { - printf("Pack lan packet error!"); - return; - } - - ret = espconn_sendto(&pssdpudpconn, lan_buf, lan_buf_len); - - if (ret != 0) { - printf("UDP send error!"); - } - - printf("Finish send notify!\n"); -} - -static void airkiss_wifilan_recv_callbk(void* arg, char* pdata, unsigned short len) -{ - uint16_t i; - remot_info* pcon_info = NULL; - - airkiss_lan_ret_t ret = airkiss_lan_recv(pdata, len, &akconf); - airkiss_lan_ret_t packret; - - switch (ret) { - case AIRKISS_LAN_SSDP_REQ: - espconn_get_connection_info(&pssdpudpconn, &pcon_info, 0); - printf("remote ip: %d.%d.%d.%d \r\n", pcon_info->remote_ip[0], pcon_info->remote_ip[1], - pcon_info->remote_ip[2], pcon_info->remote_ip[3]); - printf("remote port: %d \r\n", pcon_info->remote_port); - - pssdpudpconn.proto.udp->remote_port = pcon_info->remote_port; - memcpy(pssdpudpconn.proto.udp->remote_ip, pcon_info->remote_ip, 4); - ssdp_udp.remote_port = DEFAULT_LAN_PORT; - - lan_buf_len = sizeof(lan_buf); - packret = airkiss_lan_pack(AIRKISS_LAN_SSDP_RESP_CMD, - DEVICE_TYPE, DEVICE_ID, 0, 0, lan_buf, &lan_buf_len, &akconf); - - if (packret != AIRKISS_LAN_PAKE_READY) { - printf("Pack lan packet error!"); - return; - } - - printf("\r\n\r\n"); - - for (i = 0; i < lan_buf_len; i++) { - printf("%c", lan_buf[i]); - } - - printf("\r\n\r\n"); - - packret = espconn_sendto(&pssdpudpconn, lan_buf, lan_buf_len); - - if (packret != 0) { - printf("LAN UDP Send err!"); - } - - break; - - default: - printf("Pack is not ssdq req!%d\r\n", ret); - break; - } -} - -void airkiss_start_discover(void) -{ - ssdp_udp.local_port = DEFAULT_LAN_PORT; - pssdpudpconn.type = ESPCONN_UDP; - pssdpudpconn.proto.udp = &(ssdp_udp); - espconn_regist_recvcb(&pssdpudpconn, airkiss_wifilan_recv_callbk); - espconn_create(&pssdpudpconn); - - os_timer_disarm(&ssdp_time_serv); - os_timer_setfn(&ssdp_time_serv, (os_timer_func_t*)airkiss_wifilan_time_callback, NULL); - os_timer_arm(&ssdp_time_serv, 1000, 1);//1s -} - - -void smartconfig_done(sc_status status, void* pdata) -{ - switch (status) { - case SC_STATUS_WAIT: - printf("SC_STATUS_WAIT\n"); - break; - - case SC_STATUS_FIND_CHANNEL: - printf("SC_STATUS_FIND_CHANNEL\n"); - break; - - case SC_STATUS_GETTING_SSID_PSWD: - printf("SC_STATUS_GETTING_SSID_PSWD\n"); - sc_type* type = pdata; - - if (*type == SC_TYPE_ESPTOUCH) { - printf("SC_TYPE:SC_TYPE_ESPTOUCH\n"); - } else { - printf("SC_TYPE:SC_TYPE_AIRKISS\n"); - } - - break; - - case SC_STATUS_LINK: - printf("SC_STATUS_LINK\n"); - struct station_config* sta_conf = pdata; - - wifi_station_set_config(sta_conf); - wifi_station_disconnect(); - wifi_station_connect(); - break; - - case SC_STATUS_LINK_OVER: - printf("SC_STATUS_LINK_OVER\n"); - - if (pdata != NULL) { - //SC_TYPE_ESPTOUCH - uint8 phone_ip[4] = {0}; - - memcpy(phone_ip, (uint8*)pdata, 4); - printf("Phone ip: %d.%d.%d.%d\n", phone_ip[0], phone_ip[1], phone_ip[2], phone_ip[3]); - } else { - //SC_TYPE_AIRKISS - support airkiss v2.0 - airkiss_start_discover(); - } - - smartconfig_stop(); - break; - } - -} - -void smartconfig_task(void* pvParameters) -{ - smartconfig_start(smartconfig_done); - - vTaskDelete(NULL); -} - -/****************************************************************************** - * FunctionName : user_init - * Description : entry of user application, init user function here - * Parameters : none - * Returns : none -*******************************************************************************/ -void user_init(void) -{ - printf("SDK version:%s\n", esp_get_idf_version()); - - /* need to set opmode before you set config */ - wifi_set_opmode(STATION_MODE); - - xTaskCreate(smartconfig_task, "smartconfig_task", 1024, NULL, 2, NULL); -} - diff --git a/examples/wifi/smart_config/model two-dimension code.rar b/examples/wifi/smart_config/model two-dimension code.rar deleted file mode 100644 index 2d05fad3c5d4265495fb12f130bd4561bd587b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15386 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 diff --git a/examples/wifi/smart_config/readme.txt b/examples/wifi/smart_config/readme.txt deleted file mode 100644 index 3f636abe..00000000 --- a/examples/wifi/smart_config/readme.txt +++ /dev/null @@ -1,40 +0,0 @@ -1¡¢compile options - -(1) COMPILE - Possible value: xcc - Default value: - If not set, use gcc by default. - -(2) BOOT - Possible value: none/old/new - none: no need boot - old: use boot_v1.1 - new: use boot_v1.2 - Default value: new - -(3) APP - Possible value: 0/1/2 - 0: original mode, generate eagle.app.v6.flash.bin and eagle.app.v6.irom0text.bin - 1: generate user1 - 2: generate user2 - Default value: 0 - -(3) SPI_SPEED - Possible value: 20/26.7/40/80 - Default value: 40 - -(4) SPI_MODE - Possible value: QIO/QOUT/DIO/DOUT - Default value: QIO - -(4) SPI_SIZE_MAP - Possible value: 0/2/3/4/5/6 - Default value: 0 - -For example: - make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=0 - -2¡¢You can also use gen_misc to make and generate specific bin you needed. - Linux: ./gen_misc.sh - Windows: gen_misc.bat - Follow the tips and steps.