学習日記-ESP 8266をAPモードに設定する方法(2020.7.1)
23642 ワード
一、WIFIインタフェース wifi_station_set_config機能:Wi-Fi Stationインタフェースの構成パラメータを設定し、Flash注意:•ESP 8266 Stationで使用可能な場合は、本インタフェースを呼び出してください.•wifi_station_set_configはuser_にありますInitで呼び出すと、ESP 8266 Stationインタフェースはシステムの初期化が完了すると、wifi_を呼び出す必要がなくなり、AP(ルーティング)に接続します.station_接続•そうでない場合は、wifiを使用する必要があります.station_接続AP(ルーティング).•station_config.bssid_setは1つずつ0に設定され、APのMACアドレスをチェックする必要がある場合(重複APが多い場合)のみ1に設定されます.•この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義: wifi_station_set_config_Current機能:Wi-Fi Stationインタフェースの構成パラメータを設定し、Flash注意:•ESP 8266 Stationで使用可能な場合は、本インタフェースを呼び出してください.• wifi_station_接続機能:ESP 8266 Wi-Fi Stationインタフェース接続AP注意:user_Initで本インタフェースを適用し、ESP 8266 Stationでイネーブルして初期化が完了した後に呼び出してください.ESP 8266がAPに接続されている場合は、まずwifi_を呼び出します.station_disconnectは前の接続を切断します.関数定義: wifi_station_disconnect機能:ESP 8266 Wi-Fi StationインタフェースAPから接続解除注意:user_Initでは本インタフェースを適用し,本インタフェースはシステム初期化が完了し,ESP 8266 Stationインタフェースがイネーブルされた場合に呼び出さなければならない.関数定義: wifi_station_get_connect_status機能:ESP 8266 Wi-Fi Station接続APの状態を問い合わせる.注意: wifi_station_scan機能:APの情報を取得する注意:
パラメータ:•struct scan_config*config:APの構成パラメータをスキャンする config==null:スキャンしてすべての適用可能なAPの情報 を取得する. config.ssidnull && config.bssidnull && config.channel!=null:ESP 8266 Stationインタフェーススキャンは、特定のチャネル上のAP情報を取得する. config.ssid!=null && config.bssidnull && config.channelnull:ESP 8266 Stationインタフェーススキャンは、すべてのチャネル上の特定の名前APの情報を取得します.•scan_done_cb_t cb:スキャンが完了したcallbackはtrueを返します:成功false:失敗 scan_done_cb_t機能: を返す. wifi_station_ap_number_set機能:ESP 8266 Stationが最大で1 APの情報を記録できるように設定する.注意:ESP 8266 Stationが1つのAPに成功した場合、APのSSIDとpasswordレコードを保存できます.この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義: wifi_station_get_ap_info機能:ESP 8266 Stationに保存されているAP情報を取得し、最大5個まで記録する.関数定義: wifi_station_get_current_ap_id機能:現在接続されているAPを取得して記録ID値を保存します.ESP 8266は、各構成接続のAPを記録し、0からカウントを開始することができる.関数定義: wifi_station_get_auto_接続機能:ESP 8266 Stationに接続されているAP(ルーティング)が動作するかどうかを問い合わせる.関数定義:uint 8 wifi_station_get_auto_connect(void)パラメータ:戻りなし:0:非自動接続AP⾮0:自動接続AP wifi_station_set_auto_接続機能:ESP 8266 Stationに記録されているAP(ルーティング)を電源投入するかどうかを設定し、デフォルトでは接続を停止します.注:•このインタフェースがuser_にある場合Initで使用すると、現在今回の電源投入が有効になります.他の場所で使用する場合は、次の1回の電源投入が有効になります.•この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義: 二、ルーチンは、user initにおいて、まず初期化動作 を実行する. ESP 8266_を呼び出すAP_ Init_ JX()関数ESP 8266 APモードを設定する相関パラメータ 注意&AP_ConfigこのパラメータはAPパラメータ構造体ポインタであり,関数の最初の場所でパラメータ構造体を定義する必要がある.
構造体のメンバー:
注意:wifi名とwifiパスワードマクロ定義sizeof(...):戻りパラメータが占める空間のサイズ(バイト単位)os memset(void*s,int ch,size_t n)指定値void*sメモリブロックポインタint chをメモリブロックに入力size_t n.充填サイズchar os_strcpy(char*s 1,const char*s 2)パラメータ2が指す「文字列」をパラメータ1が指すアドレスにコピー AP関連パラメータを設定後、タイミングコールバック関数を実行し、user init関数のタイミングのコールバック関数 を終了する方法
bool wifi_station_set_config (struct station_config *config)
パラメータ:struct station_config *config
:Wi-Fi Station接続設定パラメータポインタ戻り:true:成功false:失敗例:void ICACHE_FLASH_ATTR
user_set_station_config(void)
{
char ssid[32] = SSID;
char password[64] = PASSWORD;
struct station_config stationConf;
stationConf.bssid_set = 0; //need not check MAC address of AP
os_memcpy(&stationConf.ssid, ssid, 32);
os_memcpy(&stationConf.password, password, 64);
wifi_station_set_config(&stationConf);
}
void user_init(void)
{
wifi_set_opmode(STATIONAP_MODE); //Set softAP + station mode
user_set_station_config();
}
wifi_station_set_config
がuser_init
で呼び出されると、ESP 8266 Stationインタフェースは、システムの初期化が完了すると自動的にAP(ルーティング)に接続され、wifi_station_connect
を呼び出す必要がなくなります.そうでなければ、wifi_station_connect
接続AP(ルーティング)を呼び出す必要があります.station_config.bssid_set
は1つに0に設定されており、APのMACアドレスをチェックする必要がある場合(複数の重複APがある場合)のみ1に設定されている.•この設定が元の設定と異なる場合は、Flashシステムパラメータ領域に更新保存されます.関数定義bool wifi_station_set_config_current (struct station_config *config)
パラメータstruct station_config *config
:Wi-Fi Station接続設定パラメータポインタ戻りtrue:成功false:失敗bool wifi_station_connect (void)
パラメータ:戻りなし:true:成功false:失敗bool wifi_station_disconnect (void)
パラメータ:戻りなし:true:成功false:失敗wifi_station_set_reconnect_policy
を呼び出して再接続機能をオフにし、wifi_set_event_handler_cb
を呼び出してWi-Fiイベントコールバックを登録していない場合、本インタフェースは失効し、接続状態を正確に取得できません.関数定義:uint8 wifi_station_get_connect_status (void)
パラメータ:なしenum{
STATION_IDLE = 0,
STATION_CONNECTING,
STATION_WRONG_PASSWORD,
STATION_NO_AP_FOUND,
STATION_CONNECT_FAIL,
STATION_GOT_IP
};
user_init
に本インタフェースを適用しないでください.本インタフェースはシステムの初期化が完了した後、ESP 8266 Stationインタフェースが使用可能になった場合に呼び出さなければなりません.関数定義:bool wifi_station_scan (struct scan_config *config, scan_done_cb_t cb);
構造体:struct scan_config {
uint8 *ssid; // AP’s ssid
uint8 *bssid; // AP’s bssid
uint8 channel; //scan a specific channel
uint8 show_hidden; //scan APs of which ssid is hidden.
wifi_scan_type_t scan_type; // scan type, active or passive
wifi_scan_time_t scan_time; // scan time per channel
};
パラメータ:•struct scan_config*config:APの構成パラメータをスキャンする
wifi_station_scan
のコールバック関数注意:user_init
に本インタフェースを適用しないでください.本インタフェースはシステム初期化が完了した後、ESP 8266 Stationインタフェースが機能している場合に呼び出さなければなりません.関数定義void scan_done_cb_t (void *arg, STATUS status)
パラメータ:•void *arg
:取得したAP情報ポインタをスキャンし、チェーンテーブル形式で格納し、データ構造struct bss_info
•STATUS status
:スキャン結果は例なし:wifi_station_scan(&config, scan_done);
static void ICACHE_FLASH_ATTR scan_done(void *arg, STATUS status) {
if (status == OK) {
struct bss_info *bss_link = (struct bss_info *)arg;
...
}
}
bool wifi_station_ap_number_set (uint8 ap_number)
パラメータ:uint8 ap_number
:AP情報を記録する最大数プロジェクト(最大値5)戻り値:true:成功false:失敗uint8 wifi_station_get_ap_info(struct station_config config[])
パラメータ:struct station_config config[]
:APの情報、配列サイズは5でなければならない:APを記録する数プロジェクトの例: struct station_config config[5];
int i = wifi_station_get_ap_info(config);
uint8 wifi_station_get_current_ap_id ();
パラメータ:戻りなし:現在接続されているAPは、レコードのID値を保存します.bool wifi_station_set_auto_connect(uint8 set)
パラメータuint 8 set:オン/オフ接続AP•0:オフ接続AP•1:オフ接続AP戻りtrue:成功false:失敗// OLED
OLED_ Init();
OLED_ ShowStr ing(0, 0, "ESP8266 = AP") ;
OLED_ ShowString(0, 2, "IP:") ;
void ICACHE_ FLASH_ ATTR ESP8266 AP Init JX()
{
struct softap_ config AP_ Config;// AP
wifi_ set_ opmode (0x02) ;// AP , Flash
// ( : [ / ] )
os_ memset (&AP_ Config, 0,sizeof (struct softap_ config)); // AP = 0
os_ strcpy (AP_ Config. ssid, ESP8266_ AP_ SSID); // SSID ( ssid )
os_ strcpy (AP_ Conf ig. password, ESP8266_ AP_ PASS); // ( passwor d )
AP_ Config. ssid_ len=os_ str len (ESP8266_ AP_ SSID); // ss id ( SS ID )
AP_ Config. channel=1;// 1~13
AP_ Config. authmode=AUTH WPA2_ PSK;// 1~13
AP_ Config. ssid_ bidden=0;// SSID
AP_ Conf ig. max_ cmnnection=4;//
AP_ Conf ig. beacon_ interval=100;// 100~60000 ms
wifi_ softap_ set_ config (&AP_ Config) ;// soft-AP, Flash
}
構造体のメンバー:
struct softap config
{
uint8 ssid[32];// wifi
uint8 password [64] ;//wifi
uint8 ssid_len;//wifi
uint8 channel ;//
AUTH_ MODE authmode ;//
uint8 ssid_ hidden;// wifi
uint8 max_ connection;//
uint16 beacon_ interval ;//
}
注意:wifi名とwifiパスワードマクロ定義sizeof(...):戻りパラメータが占める空間のサイズ(バイト単位)os memset(void*s,int ch,size_t n)指定値void*sメモリブロックポインタint chをメモリブロックに入力size_t n.充填サイズchar os_strcpy(char*s 1,const char*s 2)パラメータ2が指す「文字列」をパラメータ1が指すアドレスにコピー
void ICACHE_ FLASH_ ATTR 0S_ Timer_ 1_ cb(void)
{
struct ip_ info ST_ ESP8266_ IP; // IP
u8 ESP8266_ IP[4]; // IP
// ESP8266
switch (wifi_ get_ _opmode()) //
{
case 0x01: os_ pr intf ("
ESP8266_ Mode = Stat ion
") ;
case 0x02: os_ _pr intf ("
ESP8266_ Mode = SoftAP
") ;
case 0x03: os_ pr intf ("
ESP8266_ Mode = Stat i on+SoftAP
") ; break;
}
// ESP8266_ AP IP
// [AP , DHCP ( ), IP ,ESP8266 IP =192.168.4.1]
wifi_ get_ ip_ info (SOFTAP_ IF, &ST_ ESP8266_ IP); // 2: IP
// ESP8266_ AP_ IP. ip. addr==32 IP , 。
ESP8266_ IP[0] = ST_ ESP8266_ IP. ip. addr ;// IP - - <==> addr
ESP8266_ IP[1] = ST_ ESP8266_ IP. ip. addr>>8;// IP <==> addr
ESP8266_ IP[2] = ST_ ESP8266_ IP. ip. addr>>16;// IP <==> addr
ESP8266_ IP[3] = ST_ ESP8266_ IP. ip. addr>>24;// IP <==> addr
// ESP8266 IP
os_ pr intf ("ESP8266_ IP = %d. %d. %d. %d
", ESP8266_ IP[0], ESP8266_ IP[1], ESP8266_ IP[2], ESP8266_ IP[3]);
OLED_ ShowIP (24, 2, ESP8266_ IP);// ESP8266 IP
// WIFI
os_ pr intf ("Number of devices connected to this WIFI = %d
" ,wifi_ softap_ get_ stat ion_ num()) ;