loulan 发表于 2017-6-27 18:13:16

IoT小能手:SmartConfig 配置入网

原文链接 https://loulan.me/smartconfig

随着物联网技术的发展,越来越多的智能设备接入互联网。在连接网络的过程中,通常依赖家庭的 Wi-Fi 或者是物联网 SIM 卡。在连接 Wi-Fi 上网的时候,智能设备没有配备通常没有用于输入 WiFi 网络名称和密码键盘。所以产生了很多的配置设备入网的技术。

[*]利用 SmartConfig 等技术配置入网。
[*]设备变为热点,手机连接进入网页设置。
[*]设备拥有摄像头等其他特殊方式的配置模式。

SmartConfig 原理
SmartConifg 技术让你的手机直接通过 UDP 以特定的协议广播发送 WiFi 信息密码和手机 IP 数据包给智能硬件,硬件通过监听信道的信息,就可以解析出来无线网络和密码连接到路由器。
市面上有很多的智能设备配网技术,比如 AirKiss、SmartConfig、ESPTouch 各种名称,智能配置上网技术的原理基本上都是一致的,其开山鼻祖应该是 TI SmartConfig。
硬件代码
使用 SmartConfig 硬件 WiFi 要处于 Station 模式。下面列举不同的硬件平台的配网代码示例。1.Arduino IDE 使用 SmartConfig这个稍后再补上2.ESP8266-RTOS-SDK 使用 SmartConfig要注意修改 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
)软件代码苹果平台代码-Swift语言Step1   下载工程EspressifApp封装库代码,拖到工程里。https://coding.net/u/lou-lan/p/PhotosCloud/git/raw/master/SmartConfig/xcode-1.pnghttps://coding.net/u/lou-lan/p/PhotosCloud/git/raw/master/SmartConfig/xcode-2.pngStep2
然后实例化一个 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 上架。
https://coding.net/u/lou-lan/p/PhotosCloud/git/raw/master/SmartConfig/xcode-4.png
安卓平台代码
稍后补充



(论坛帖子保存草稿编辑然后进入了审核模式,我也没搞懂,建议升级为 Markdown 的语法,编辑的速度更快。)
页: [1]
查看完整版本: IoT小能手:SmartConfig 配置入网