相关文章推荐
灰常酷的口罩  ·  recursive ...·  2 月前    · 
坏坏的斑马  ·  前端 - vue3+ts ...·  1 年前    · 

要开始IoT项目的第一步是什么?当然不是硬件,而是硬件与硬件的连接!即使有各种各样的通信协议没有好的连接方式绝对不行。那外设上没有的屏幕,没有键盘怎末输入密码怎末选择网络?对,这就是WIFI模块最重要解决的问题。

为了解决这个连接问题乐鑫在其SDK中加入了SmartConfig功能,所谓的smartconfig就是手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密 出WIFI 用户名 密码,然后智能硬件 配置受到的WIFI 用户名 密码到指定的WIFI AP 上。

如果将其原理用简洁点的步骤来解说应该分为以下几步:

  • ESP8266 端调用 WiFi.beginSmartConfig() 等待手机端发出的用户名与密码。
  • 手机端填写当前网络的密码发送到UDP端口。
  • ESP8266 自动收到连接信息并调用 WiFi.smartConfigDone() 退出等待。
  • 就这么简单!

    ESP8266 的固件代码

    Arduino core for ESP8266 的代码示例:

    #include <ESP8266WiFi.h>;
    void setup() {
      Serial.begin(115200);
      delay(10);
      // 必须采用 AP 与 Station 兼容模式
      WiFi.mode(WIFI_AP_STA);
      delay(500);
     // 等待配网
      WiFi.beginSmartConfig();
     // 收到配网信息后ESP8266将自动连接,WiFi.status 状态就会返回:已连接
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
        // 完成连接,退出配网等待。
        Serial.println(WiFi.smartConfigDone());
      Serial.println("");
      Serial.println("WiFi connected");  
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    int value = 0;
    void loop() {
    

    如果使用NodeMCU Lua 的话代码会更简单一些:

    wifi.setmode(wifi.STATION)
    wifi.startsmart(0,
                    function(ssid, password)
                         print(string.format("Success. SSID:%s ; PASSWORD:%s", ssid, password))
                     end )
    

    将以上的代码写入到ESP8266之后,就要在安卓或者iOS上安装一个由乐鑫提供的ESP-Touch的App将当前WIFI中的用户名和密码告知ESP8266以完成SmartConfig连接。

    本文的配网只是用简单代码对原理进行解释,而至于要应用到的实际开发时则需要对App端进行开发。以后还会写一篇在App端的配网方式介绍。

  • nodemcu-devkit NodeMCU的模块说明
  • SmartConfig ESP8266 for NodeMCU and AT-commands 内附视频演示
  • Using Bonjour in Swift
  •