文章目錄
- 1、前言
- 1.1 配網原理
- 2、具體實作
- 2.1 ESP8266端代碼(直接燒進去)
- 2.2 小程式端
- 2.3 具體步驟(主要是小程式端)
授人以魚不如授人以漁,目的不是為了教會你具體專案開發,而是學會學習的能力,希望大家分享給你周邊需要的朋友或者同學,說不定大神成長之路有博哥的奠基石,,,
快速導航
單片機菜鳥的博客快速索引(快速找到你要的)
重點說一下,麻煩三連點贊,你的點贊是博主創作的前進動力,
1、前言
趁著2021,來擼新年的第一帖,
還記得前端時間,博哥研究了微信小程式的smartconfig,那么這次我們來繼續深造一下,研究一下基于UDP服務的AP配網小程式(具體原理可以參考AP Web配網),
理論知識必備:
- ESP8266開發之旅 網路篇② ESP8266 作業模式與ESP8266WiFi庫
- ESP8266開發之旅 網路篇⑩ UDP服務
- 深入學習ArduinoJson庫 V5版本
1.1 配網原理
這里分為兩個端,小程式端以及esp8266設備端,
- 設備端8266處于
AP-STA方式,開啟UDP服務,服務IP默認為192.168.4.1,埠號為8266 - 小程式端通過UDP請求把SSID和PWD發送到ESP8266,8266決議到引數之后連接到路由器,
2、具體實作
2.1 ESP8266端代碼(直接燒進去)
此代碼僅僅作為demo使用,僅供學習
/**
* Demo:
* 演示小程式UDP配網,需要結合配網小程式
* @author 單片機菜鳥
* @date 2021/01/02
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>
char *ssid; //wifi名稱
char *password = ""; //wifi密碼
WiFiUDP Udp;
unsigned int localUdpPort = 8266; // 本地埠號
char incomingPacket[255]; // 接識訓沖區
#define AP_SSID "UDP_8266" //這里改成你的AP名字
#define AP_PSW "12345678" //這里改成你的AP密碼 8位以上
//以下三個定義為除錯定義
#define DebugBegin(baud_rate) Serial.begin(baud_rate)
#define DebugPrintln(message) Serial.println(message)
#define DebugPrint(message) Serial.print(message)
IPAddress local_IP(192,168,4,1);
IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);
void setup()
{
//以下為基本功能初始化,初始化串口和網路和LED
pinMode(LED_BUILTIN, OUTPUT);
//設定串口波特率,以便列印資訊
DebugBegin(115200);
//延時2s 為了演示效果
delay(2000);
DebugPrint("Setting soft-AP configuration ... ");
//配置AP資訊
WiFi.mode(WIFI_AP_STA);
DebugPrintln(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
//啟動AP模式,并設定賬號和密碼
DebugPrint("Setting soft-AP ... ");
boolean result = WiFi.softAP(AP_SSID, AP_PSW);
if(result){
DebugPrintln("Ready");
//輸出 soft-ap ip地址
DebugPrintln(String("Soft-AP IP address = ") + WiFi.softAPIP().toString());
//輸出 soft-ap mac地址
DebugPrintln(String("MAC address = ") + WiFi.softAPmacAddress().c_str());
}else{
DebugPrintln("Failed!");
}
DebugPrintln("Setup End");
//以下開啟UDP監聽并列印輸出資訊
Udp.begin(localUdpPort);
Serial.printf("Now listening UDP port %d\n", localUdpPort);
}
void loop()
{
int packetSize = Udp.parsePacket(); //獲取當前隊首資料包長度
if (packetSize) // 有資料可用
{
Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
int len = Udp.read(incomingPacket, 255); // 讀取資料到incomingPacket
if (len > 0) // 如果正確讀取
{
sendCallBack("{\"code\":0}"); //設備成功收到資訊
delay(2000);
incomingPacket[len] = 0; //末尾補0結束字串
Serial.printf("UDP packet contents: %s\n", incomingPacket);
DebugPrintln(F("parseMqttResponse"));
StaticJsonBuffer<100> jsonBuffer;
// StaticJsonBuffer 在堆疊區分配記憶體 它也可以被 DynamicJsonBuffer(記憶體在堆區分配) 代替
// DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(incomingPacket);
if(!root.success()){
DebugPrintln(F("parse failed"));
return;
}else{
#ifdef DEBUG
// 格式化列印json
root.prettyPrintTo(Serial);
#endif
DebugPrintln(F("parse success"));
sendCallBack("{\"code\":1}");
delay(500);
String ssid = root["ssid"];
unsigned int port = root["port"];
String pwd = root["password"];
//啟動STA模式,并連接到wifi網路
DebugPrint(F("ssid:"));
DebugPrintln(ssid);
DebugPrint(F("pwd:"));
DebugPrintln(pwd);
WiFi.begin(ssid, pwd);
DebugPrint(String("Connecting to ")+ssid);
//判斷網路狀態是否連接上,沒連接上就延時1s,并且打出一個點,模擬連接程序
unsigned int retry = 0;
while (WiFi.status() != WL_CONNECTED){
delay(1000);
DebugPrint(".");
retry++;
if (retry == 60) {
// basically die and wait for WDT to reset me
sendCallBack("{\"code\":3}");
while(1);
}
ESP.wdtFeed();
yield();
}
sendCallBack("{\"code\":2}");
DebugPrintln("");
DebugPrint("Connected, IP address: ");
//輸出station IP地址,這里的IP地址由DHCP分配
DebugPrintln(WiFi.localIP());
}
}
}
}
/**
* 發送回應資訊
*/
void sendCallBack(const char *buffer){
DebugPrint(F("send rsp:"));
DebugPrintln(buffer);
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(buffer); //回復內容
Udp.endPacket();
}
這里需要注意幾個點:
- 必須是STA-AP模式,AP模式下固定了IP地址
- UDP服務的埠 8266
2.2 小程式端
博主這里直接提供原始碼(群檔案也有),麻煩給個start,謝謝,

Github原始碼地址 https://gitee.com/wubo1/wx-apconfig
直接把原始碼匯入小程式開發者工具即可使用,,,
2.3 具體步驟(主要是小程式端)
-
先來一個注意簡介

-
輸入你想8266要連接的wifi熱點

-
輸入8266開啟的熱點,也就是設備端代碼AP熱點


-
等待配網結果

這里涉及到小程式與8266設備端的互動,需要回傳一些code給到小程式來更新行程,這些code包括:
{\"code\":0} 表示 8266收到了UDP連接資訊
{\"code\":1} 表示 8266決議到SSID和PWD
{\"code\":2} 表示連接路由成功
{\"code\":3} 表示連接路由失敗
如果沒有任何意外,理論上可以看到8266串口列印具體除錯資訊:

完美,,,,,,,,,,,,,,
CSDN認證博客專家
Java
ESP8266
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243919.html
標籤:其他
