问题描述
背景:
我在外围设备中使用了 raspBerry-pi 3。外围设备最初没有 WIFI 设置。最终用户需要使用自己的 WIFI SSID 和密码进行配置,以便外围设备可以访问网络。这是通过移动应用程序完成的。为此,我使用 .NET Core 5 for ARM 编写了一个服务,该服务使用蓝牙与移动应用程序进行通信。
计划说明
该服务使用蓝牙从移动应用程序接受 WIFI 配置(SSID/密码),然后执行多个 wpa_cli 命令在树莓上设置 WIFI 网络。
我运行以下命令序列在 raspBerry-pi 上配置 WIFI:
wpa_cli -i "wlan0" list_networks
wpa_cli -i "wlan0" remove_network <<id>>
其中 是从解析第一个命令的输出中获得的网络的 id。上述命令工作正常。下一个我跑
wpa_cli -i "wlan0" add_network
输出被解析为新网络的id。也工作正常。
wpa_cli -i "wlan0" set_network <<id>> ssid '"<<ssid of network>>"'
wpa_cli -i "wlan0" set_network <<id>> psk '"<<network password>>"'
wpa_cli -i "wlan0" enable_network <<id>>
wpa_cli -i "wlan0" save_config
wpa_cli -i "wlan0" reconfigure
问题
从 bash 调用这些命令的结果是 OK(save_config
命令除外,它总是导致 FAIL)。
当我从 .NET Core 调用确切命令时,set_network
命令总是导致 FAIL 结果。 C# 代码如下所示:
// Code to validate ssid doesn't contain any weird chars here
var startupInfo = new processstartinfo
{
FileName = "wpa_cli",Arguments = $"-i \"wlan0\" set_network {id} ssid '\"{ssid}\"'",RedirectStandardError = true,RedirectStandardOutput = true,};
using var process = Process.Start(startupInfo);
// Code to parse output here.
我用于测试的 SSID 值只有英文大写字母和数字(没有空格或特殊字符)。
所以从 bash 手动运行命令是有效的。从 .NET 核心程序运行命令会导致 FAIL。 但 WIFI 设置更改已应用且功能有效。只是 wpi_cli 返回误导性的“FAIL”结果而不是“OK”。没有写入 stderr。
我尝试运行 wpa_cli log_level debug
,但没有显示其他信息。 syslog 中也没有任何内容。
目前,我更改了服务代码以忽略返回的“FAIL”。这种工作,但我认为如果代码实际上失败,这可能是未来的问题,我需要告诉用户更新网络设置失败,而不是在移动应用程序中显示成功消息。
提前感谢您的帮助:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)