當前位置: 妍妍網 > 碼農

在正式計畫中使用Improv配網及小程式配網工具

2024-02-29碼農

前面我們演示了使用.Net nanoFramework為ESP32進行藍芽配網的簡單演示,這個功能在實際計畫中是非常有用的。當然,使用中我們還需要考慮一些其他的問題,比如如何將這個功能整合到我們的計畫中,本文將詳細介紹如何在正式計畫中使用Improv配網及小程式配網工具。

1. 引言

在前面的文章中我們介紹了如何使用 .Net nanoFramework 連線 wifi,透過 Improv 協定進行藍芽配網。在實際的使用中我們要考慮安全性、使用者體驗、裝置辨識等問題。本文將詳細介紹如何在正式計畫中使用 Improv 配網及小程式配網工具,以幫助大家更好地使用 Improv 配網功能。

2. 正式使用

在正式的計畫中,我們需要考慮很多問題,比如安全性、使用者體驗、裝置辨識等。下面我們將詳細介紹如何在正式計畫中使用 Improv 配網及小程式配網工具。這裏我們也采用了之前文章介紹的 文章中的工作狀態燈的使用,以便更好的展示配網的過程。

2.1 便利性

在演示中,我們為了方便的演示藍芽配網的過程,每次裝置啟動都會進入配網模式。但在實際計畫中,我們需要考慮使用者體驗,使用者不會每次都需要配網,所以我們需要在裝置啟動時判斷是否需要配網,如果需要配網,再進入配網模式。

這裏的實作也非常簡單,我們在啟用 Improv 服務之前,先判斷裝置是否需要配網,如果需要配網,再啟用 Improv 服務。透過檢查 wifi 的配置資訊,我們就可以簡單的判斷裝置是否需要配網。

如下是一個簡單的範例程式碼,我們透過判斷是否存在配置資訊來決定程式碼的執行邏輯:

// 讀取配置檔var configuration = Wireless80211Configuration.GetAllWireless80211Configurations();if (configuration.Length == 0){Console.WriteLine("沒有找到wifi配置檔");// 進入配網模式}else{Console.WriteLine($"SSID: {configuration[0].Ssid}, Password: {configuration[0].Password}");// 執行連線wifi的程式碼}

關於這一部份,更多的相關知識可以看這一篇文章 。

2.2 配網的安全性

接下來,我們來談談配網的安全性。配網過程中,裝置需要進行授權確認,這樣可以防止未經授權的裝置存取。在我們的計畫中,我們透過點選裝置使用者互動按鈕來實作裝置的授權確認。這種方式既簡單又便捷,能夠有效防止未經授權的裝置存取。

以下是一個簡單的範例程式碼,我們透過判斷按鈕的狀態來決定是否進行授權:

/// <summary>/// 使用者按鍵事件/// </summary>privatestaticvoidUserbtn_ValueChanged(object sender, PinValueChangedEventArgs e){// 配網結束或者未開始請求授權,則不處理if (_imp isnull || _imp.CurrentState != Improv.ImprovState.authorizationRequired) {return; }if (e.ChangeType == PinEventTypes.Rising) {Console.WriteLine("User button pressed"); _imp.Authorise(true);// 驗證成功,改變燈光狀態 _led.DeviceStatus = RunStatus.AuthSuccess; }}

關於使用者互動按鈕的使用,更多的相關知識可以看這一篇文章 。

2.3 配置重設功能

在實際計畫中,我們還需要考慮到使用者可能需要重設裝置的網路配置的情況。為了方便使用者重設裝置的配置,我們在計畫中添加了配置重設功能。這樣,使用者就可以方便地重設裝置的配置,重新進行配網。這個功能的實作也非常簡單,我們只需要在使用者互動按鈕按下時,實作按下時長的判斷即可。

以下是一個簡單的範例程式碼,我們透過判斷按鈕的狀態來決定是否進行配置重設:

// 記錄上一次按鍵按下時間staticDateTime lastClickTime = DateTime.UtcNow;/// <summary>/// 使用者按鍵事件/// </summary>privatestaticvoidUserbtn_ValueChanged(object sender, PinValueChangedEventArgs e){// 記錄按鍵按下時間if (e.ChangeType == PinEventTypes.Falling) { lastClickTime = DateTime.UtcNow; }// 按鍵松開if(e.ChangeType == PinEventTypes.Rising) {// 按鍵按下時間大於 5s,重設wifi配置if ((DateTime.UtcNow - lastClickTime).TotalSeconds > 5) {// 重設wifi配置Console.WriteLine("Reset wifi configuration");var wificonfig = newWireless80211Configuration(0); wificonfig.Ssid = ""; wificonfig.Password = ""; wificonfig.SaveConfiguration(); _led.DeviceStatus = RunStatus.ClearConfig; } }}

2.4 添加裝置辨識功能

在存在多個待配網裝置時,特別是名稱還一樣的情況下,裝置辨識就顯得尤為重要。在 Improv 類中有一個 OnIdentify 事件,我們可以透過響應這個辨識事件來實作裝置辨識功能。這樣,使用者就可以方便地辨識出自己需要配網的裝置,大大提高了配網的效率和使用者體驗。

響應的方式可以是透過改變裝置的狀態燈顏色,或者透過針對有喇叭的裝置,播放特定的聲音等。這裏我們透過改變裝置的狀態燈來實作裝置辨識功能。

以下是一個簡單的範例程式碼,我們透過響應 OnIdentify 事件來實作裝置辨識功能:

// 初始化藍芽配網_imp = newImprov();// 被請求辨識_imp.OnIdentify += Imp_OnIdentify;/// <summary>/// 被請求辨識/// </summary>privatestaticvoidImp_OnIdentify(object sender, EventArgs e){Console.WriteLine("Identify requested");if (_imp.CurrentState != Improv.ImprovState.authorizationRequired) {return; } _led.DeviceStatus = RunStatus.OnIdentify;}

2.5 配網成功後返回裝置IP地址

最後,在配網成功後,我們需要會返回裝置的IP地址。這樣,使用者可以直接透過IP地址存取裝置,或者進行網頁端的更詳細的使用配置。這不僅方便了使用者的使用,也為裝置的進一步配置提供了便利。

以下是一個簡單的範例程式碼,我們透過配網成功後的事件來返回裝置的IP資訊:

// 配網成功_imp.OnProvisioningComplete += Imp_OnProvisioningComplete;/// <summary>/// 配網完成/// </summary>privatestaticvoidImp_OnProvisioningComplete(object sender, EventArgs e){ _imp.RedirectUrl = "http://" + _imp.GetCurrentIPAddress() + "/start.htm";}

3. 微信小程式配網工具

為了方便大家使用 Improv 的配網協定,除了可以透過瀏覽器使用官方的網頁工具外,我開發了一個微信小程式的配網工具 「Improv 藍芽配網」。這個小程式使用原生的微信小程式開發,開發起來也很快,主要是藍芽的相關操作,整體計畫一天就搞定了。雖然小程式的備案、稽核和微信認證過程有些許繁瑣,但總的來說,兩三個工作日就可以全部完成,這個工具的開發還是相當順利的。

這個小程式的使用非常簡單,只需要開啟小程式,點選「開始搜尋」按鈕,然後按照提示操作即可。

配網過程

連線成功後會展示裝置的IP地址,方便使用者直接存取裝置,或者進行網頁端的更詳細的使用配置。可以長按復制IP地址,然後在瀏覽器中開啟,就可以直接存取裝置了。

配網成功

4. 結語

透過本文的介紹,我相信你已經對如何在正式計畫中使用 Improv 配網及微信小程式配網工具有了一定的了解。配網是裝置網路化的第一步,也是非常重要的一步。計畫案例已經開源在 ESP32_S3_Samples 計畫:https://github.com/sangyuxiaowu/ESP32_S3_Samples/tree/main/ProjectImprovWifi?wt.mc_id=DT-MVP-5005195 希望,透過這個計畫,能夠幫助你更好的實作在 .Net nanoFramework 計畫進行網路接入,讓配網過程變得更加簡單、快速和安全。