看过波波之前博客的朋友都知道之前写的项目是直接将WIFI的信道和密码写入Arduino内部的,这样做虽然对于个人项目并没有什么影响,但是如果涉及到项目商业化则明显不行。所以波波也一直在探索如何让用户更加便捷的配置开发板上网。功夫不负有心人,在简书上看到乐鑫提供了一个SmartConfig的方案感觉很不错,所以分享一下。
所谓的smartconfig就是手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密 出WIFI 用户名 密码,然后智能硬件 配置受到的WIFI 用户名 密码到指定的WIFI AP 上。
这种方式尤其适合对没有屏幕的外设进行相关配置。
配置步骤:
- ESP8266 端调用 WiFi.beginSmartConfig() 等待手机端发出的用户名与密码。
- 手机端填写当前网络的密码发送到UDP端口。
- ESP8266 自动收到连接信息并调用 WiFi.smartConfigDone() 退出等待。
是不是很简单呢?
附: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 )
参考文档:https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_cn#wifistartsmart
手机端
上述固件烧录完毕后,在手机上只需启动乐鑫提供的ESP-Touch应用输入WIFI信道和密码即可配置让开发板联网了。
视频教程:http://www.electrodragon.com/smartconfig-nodemcu/