AliOS-Things--ESP8266-linkkitapp-配網(一)
阿新 • • 發佈:2018-10-31
linkkitapp例程中,主要有兩個c檔案
- linkkit_entry.c
- linkkit_sample_solo.c
可以這麼理解,整個工程編譯後,程式執行時,linkkit_entry.c中的檔案將會呼叫linkkit_sample_solo.c中的函式。
linkkitapp.mk
linkkit_entry.c
linkkit_sample_solo.c
make.settings
ucube.py
一、修改四元組
在工程下的linkkit_sample_solo.c中修改。具體怎麼獲取,省略。
二、下載程式–配網
1、第一個坑:原以為上電就可以掃碼配網的,原來還要進入配網模式才可以!
把程式下載到ESP8266上面之後,復位開始執行,波特率921600,串列埠除錯助手裡面是這個樣子的:
empty Wifi init success!! mode : softAP(ce:50:e3:04:d4:16) dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1) add if1 bcn 100 trace should have cli to control!!! [000110]<V> aos framework init. [000110]<V> ============free heap size =39528========== Hello liefyuan [000120]<V> IOTX_AWSS_START awss version: smarthome-bd18d6d[37m<DEBUG> [zconfig_init#2115] : awss lib smarthome-bd18d6d [0m bcn 0 del if1 usl sul 0 0 mode : sta(cc:50:e3:04:d4:16) add if0 chan 1 [1] ssid:沉迷於上班無法自拔, mac:488ad29ead62, chn:1, auth:wpa2-psk, aes, aes, rssi:-84, adha:0 [2] ssid:1318, mac:34967240f2d8, chn:1, auth:wpa2-psk, aes, aes, rssi:-65, adha:0 [3] ssid:ChinaNet-VcEF, mac:cc90e83a23b7, chn:1, auth:wpa2-psk, aes, tkip, rssi:-83, adha:0 [4] ssid:iTV-7903, mac:38e595d60f49, chn:1, auth:wpa2-psk, aes, tkip, rssi:-76, adha:0 [5] ssid:ChinaNet-7903, mac:38e595d60f48, chn:1, auth:wpa2-psk, aes, tkip, rssi:-76, adha:0 chan 6 [6] ssid:AFFCOOL, mac:8c2505d70cc0, chn:6, auth:wpa2-psk, aes, aes, rssi:-73, adha:0 [7] ssid:Mellerio, mac:b0958eaf568b, chn:6, auth:wpa2-psk, aes, tkip, rssi:-80, adha:0 [8] ssid:360鍏嶈垂WiFi-BD, mac:00367657ecbd, chn:6, auth:wpa2-psk, aes, aes, rssi:-82, adha:0 [9] ssid:meilele1, mac:dcfe187ecdfe, chn:6, auth:wpa2-psk, aes, aes, rssi:-82, adha:0 [10] ssid:DSJ, mac:d076e75e20dd, chn:7, auth:wpa2-psk, aes, tkip, rssi:-74, adha:0 [11] ssid:CMCC-WEB, mac:5866ba6f6220, chn:6, auth:open, none, none, rssi:-83, adha:0 [12] ssid:joyce0725, mac:b0d59d47cf9d, chn:6, auth:wpa2-psk, aes, aes, rssi:-79, adha:0 chan 11 [13] ssid:ChinaNet-yWMh, mac:f092b41b7929, chn:10, auth:wpa2-psk, aes, tkip, rssi:-56, adha:0 [14] ssid:mei5, mac:282cb2ff49ae, chn:11, auth:wpa2-psk, aes, aes, rssi:-63, adha:0 [15] ssid:DIRECT-KFDESKTOP-E35402EmsMJ, mac:24fd52933a9a, chn:11, auth:wpa2-psk, aes, aes, rssi:-54, adha:0 [16] ssid:BIHEE, mac:0c4b544944b9, chn:11, auth:wpa2-psk, aes, aes, rssi:-81, adha:0 [17] ssid:CMCC, mac:5866ba6f5f11, chn:11, auth:wpa2-8021x, aes, aes, rssi:-84, adha:0 [18] ssid:and-Business, mac:5866ba6f5f12, chn:11, auth:open, none, none, rssi:-82, adha:0 chan 1 chan 2
以上資訊代表模組正處於一種“無所適從的掃描SSID的狀態”掃到最後,什麼結果都沒有。如果嘗試現在給它使用APP掃二維碼、配網,你會發現模組毫無反應,它還是在掃描SSID。
2、進入配網模式才可以掃描配網
在linkkit_entry.c中的int application_start(int argc, char **argv)函式中
有這樣一行:
aos_register_event_filter(EV_KEY, linkkit_key_process, NULL);
從函式名上看,這是一個註冊事件過濾器的,過濾的目標是按鍵點選事件,並處理按鍵點選事件的,“linkket按鍵處理”。
同一個C檔案下有它的定義:
- 需要知道AliOS定義的按鍵對應,自己的板子上的哪個引腳。
- 點選了AliOS配置的VALUE_KEY_CLICK按鍵將進入awss配網模式
- 點選了AliOS配置的VALUE_KEY_LTCLICK按鍵將進行awss復位操作
void linkkit_key_process(input_event_t *eventinfo, void *priv_data)
{
if (eventinfo->type != EV_KEY) { // 事件型別過濾處理按鍵事件:EV_KEY
return;
}
LOG("awss config press %d\n", eventinfo->value); // 傳入引數事件值
if (eventinfo->code == CODE_BOOT) { // 根據傳入引數判斷是否點選了 CODE_BOOT這一個型別的引腳
if (eventinfo->value == VALUE_KEY_CLICK) { // 如果點選了VALUE_KEY_CLICK這個按鍵就進入awss配網模式
do_awss_active();
} else if (eventinfo->value == VALUE_KEY_LTCLICK) { // 否則如果點選了VALUE_KEY_LTCLICK這個按鍵就進入awss復位模式
do_awss_reset();
}
}
}
函式中的第一個傳入引數的定義是這樣的:
typedef struct {
/* The time event is generated, auto filled by aos event system */
uint32_t time;
/* Event type, value < 0x1000 are used by aos system */
uint16_t type;
/* Defined according to type */
uint16_t code;
/* Defined according to type/code */
unsigned long value;
/* Defined according to type/code */
unsigned long extra;
} input_event_t;
從命名上看:輸入事件,在配網的過程中是按鍵輸入事件。
再看看按鍵定義的如何,嗯,很簡潔!
/** General key define */
#define EV_KEY 0x0201
#define CODE_RECORD 1
#define CODE_VOLUME 2 /* Reserve */
#define CODE_VOLUME_INC 3
#define CODE_VOLUME_DEC 4
#define CODE_PLAY_PAUSE 5
#define CODE_MUTE 6
#define CODE_CHANNEL 7
#define CODE_NEXT 8
#define CODE_RECORD_PRE 9
#define CODE_RESET 0x1001
#define CODE_STATUS 11
#define CODE_ELINK 12
#define CODE_BOOT 13
/** General key value */
#define VALUE_KEY_UP 0
#define VALUE_KEY_DOWN 1
#define VALUE_KEY_CLICK 2
#define VALUE_KEY_LTCLICK 3
#define VALUE_KEY_LLTCLICK 4
#define VALUE_KEY_DBCLICK 5
/** General channel value */
#define VALUE_SYS_CHN_CONNECTED 0
#define VALUE_SYS_CHN_CONNECTING 1
#define VALUE_SYS_CHN_DISCONNECTED 2
沒有眉目,那就只能在板子上試了!引腳都試了,除了GPIO14是有反應外其他的都沒反應(復位引腳除外:=)。
所以可以確定了
ESP8266的GPIO14是awss的配置引腳
使用一個跳線,先把GPIO14接GND,再接V3.3,打印出以下資訊:
- 由這段程式碼可以知道:
LOG("awss config press %d\n", eventinfo->value);
- 當我按下連線GPIO14引腳的按鍵是,觸發按鍵事件,並且事件值為:3
- 由定義:
#define VALUE_KEY_LTCLICK 3
和函式void linkkit_key_process(input_event_t *eventinfo, void *priv_data)
可以知道將執行awss復位操作!由列印資訊確實可以確認是執行了復位操作。
chan 3
chan 4
chan 6
chan 7
chan 11
[051960]<V> awss config press 3
[37m<DEBUG> [awss_report_reset_to_cloud#362] : report reset:{"id":"0", "version":"1.0", "method":"thing.reset", "params":{}}
[0m
chan 13
chan 1
chan 6
chan 11
chan 1
chan 2
chan 3
chan 4
chan 5
reboot!
??????????????????????
當我再次在GPIO14上模擬一個按鍵點選操作時,它卻如下所示:
- 再次點選GPIO14,點選事件值變成了:2
- 由定義:
#define VALUE_KEY_CLICK 2
和函式void linkkit_key_process(input_event_t *eventinfo, void *priv_data)
可以知道將執行awss配網操作!由列印資訊確實可以確認
chan 7
chan 8
chan 9
chan 10
chan 11
chan 12
chan 13
[068100]<V> awss config press 2
[068100]<V> do_awss_active 1
enable awss
[068100]<V> IOTX_AWSS_ENABLE
chan 1
chan 2
chan 3
chan 4
chan 6
3、終於配網成功了
chan 8
chan 9
chan 10
chan 11
chan 12
chan 13
chan 1
[008370]<V> awss config press 2
[008370]<V> do_awss_active 0
enable awss
[008370]<V> IOTX_AWSS_ENABLE
chan 2
chan 3
chan 6
[24] ssid:CMCC, mac:5866ba6f6221, chn:6, auth:wpa2-8021x, aes, aes, rssi:-79, adha:0
[25] ssid:and-Business, mac:5866ba6f6222, chn:6, auth:open, none, none, rssi:-77, adha:0
chan 7
chan 10
chan 11
chan 13
chan 1
[010020]<V> ============free heap size =29200==========
[37m<DEBUG> [aes_decrypt_string#109] : security level: 3[0m
[37m<DEBUG> [zconfig_callback_channel_locked#1209] : channel lock @ 1
[0m
[010080]<V> IOTX_AWSS_LOCK_CHAN
[010080]<V> IOTX_AWSS_GOT_SSID_PASSWD
[37m<DEBUG> [aws_main_thread_func#410] : [channel scanning] 10090 ms
[0m
[37m<DEBUG> [aws_main_thread_func#416] : final channel 1
[0m
[37m<DEBUG> [aws_main_thread_func#434] : [channel recving] 10090 ms
[0m
[010130]<V> IOTX_AWSS_CONNECT_ROUTER
scandone
state: 0 -> 2 (b0)
[016010]<V> ============free heap size =35304==========
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 20
pm open phy_2,type:2 0 0
cnt
connected with 1318, channel 1
dhcp client start...
[WiFi] event 1
ip:192.168.0.127,mask:255.255.255.0,gw:192.168.0.1
[WiFi] event 4
[017090]<I> Got ip : 192.168.0.127, gw : 192.168.0.1, mask : 255.255.255.0
[017090]<I> Let's post GOT_IP event.
smart_config_stop 545
[017090]<V> wifi_service_event config.ssid 1318
[017090]<V> ============free heap size =34328==========
linkkit_main|1024 :: start!
linkkit_example|915 :: linkkit start
[dbg] _dm_mgr_search_dev_by_devid(52): Device Not Found, devid: 0
[inf] iotx_cm_init(77): cm verstion 0.3
[inf] iotx_device_info_init(39): device_info created successfully!
[dbg] iotx_device_info_set(49): start to set device info!
[dbg] iotx_device_info_set(63): device_info set successfully!
[inf] guider_print_dev_guider_info(279):