前面我們演示了使用.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 計畫進行網路接入,讓配網過程變得更加簡單、快速和安全。