本帖最后由 loulan 于 2017-6-27 18:06 编辑
原文链接
随着物联网技术的发展,越来越多的智能设备接入互联网。在连接网络的过程中,通常依赖家庭的 Wi-Fi 或者是物联网 SIM 卡。在连接 Wi-Fi 上网的时候,智能设备没有配备通常没有用于输入 WiFi 网络名称和密码键盘。所以产生了很多的配置设备入网的技术。
- 利用 SmartConfig 等技术配置入网。
- 设备变为热点,手机连接进入网页设置。
- 设备拥有摄像头等其他特殊方式的配置模式。
SmartConfig 原理
SmartConifg 技术让你的手机直接通过 UDP 以特定的协议广播发送 WiFi 信息密码和手机 IP 数据包给智能硬件,硬件通过监听信道的信息,就可以解析出来无线网络和密码连接到路由器。
市面上有很多的智能设备配网技术,比如 AirKiss、SmartConfig、ESPTouch 各种名称,智能配置上网技术的原理基本上都是一致的,其开山鼻祖应该是 TI SmartConfig。
硬件代码
使用 SmartConfig 硬件 WiFi 要处于 Station 模式。下面列举不同的硬件平台的配网代码示例。 这个稍后再补上 要注意修改 Makefile 文件,和引入必要的 .h 文件,然后调用代码就是 user_main.c,其他代码太多复制即可,具体可以看这个 Demo。 - user_init(void)
- {
- printf("SDK version:%s\n", system_get_sdk_version());
- /* need to set opmode before you set config */
- wifi_set_opmode(STATION_MODE);
- xTaskCreate(smartconfig_task, "smartconfig_task", 256, NULL, 2, NULL);
- }
复制代码 修改完成进行构建,生成 bin 文件烧写到 ESP8266 即可。
3.NodeMCU 使用 SmartConfigNodeMCU 使用 SmartConfig 也要注意官方的库默认是关闭对它的支持,你需要在 user_config.h 中取消注释,然后重新编译固件,拷贝下面的代码到你的 init.lua 文件即可实现智能配网 Demo。 - wifi.setmode(wifi.STATION)
- -- 0 is esptouch;
- -- 1 is airkiss;
- wifi.startsmart(0,
- function(ssid, password)
- -- print log
- print(string.format("Success. SSID:%s ; PASSWORD:%s", ssid, password))
- -- write wifi ssid and pass to txt
- file.open("wifi.txt", "w+")
- file.write(ssid)
- file.close()
- file.open("pass.txt", "w+")
- file.write(password)
- file.close()
- end
- )
复制代码 软件代码Step2
然后实例化一个 esptouchTask,将信息传入 ESPTouchTask,设置代理,然后回调结果即可。 - ESPTouchTask(apSsid: SSID, andApBssid: BSSID, andApPwd: PASS)
复制代码 代理部分- class EspTouchDelegateImpl: NSObject, ESPTouchDelegate {
- @objc func dismissAlert(_ alertView: UIAlertView) {
- alertView.dismiss(withClickedButtonIndex: alertView.cancelButtonIndex, animated: true)
- }
- func showAlert(with result: ESPTouchResult) {
- let text = NSLocalizedString("WIFI_CONNECTION", comment: "")
- let message: String = result.bssid + text
- let dismissSeconds: TimeInterval = 3.5
- let alertView = UIAlertView(title: "", message: message, delegate: nil, cancelButtonTitle: nil)
- alertView.show()
- perform(#selector(self.dismissAlert), with: alertView, afterDelay: dismissSeconds)
- }
- func onEsptouchResultAdded(with result: ESPTouchResult) {
- print("EspTouchDelegateImpl onEsptouchResultAddedWithResult bssid: \(result.bssid)")
- // 放到主线程显示
- DispatchQueue.main.async(execute: {() -> Void in
- self.showAlert(with: result)
- })
- }
- }
复制代码 配置函数- <blockquote>func tapConfirmForResult() {
复制代码 配置结果- <blockquote><blockquote>func executeForResult() -> ESPTouchResult {
复制代码 我使用乐鑫官方的 ESPTouch SDK 开发了一个 SmartConfig APP 现在已经在 APP Store 上架。
安卓平台代码
稍后补充
|