#include <WiFi.h>
const char *ssid = "oudafa";
const char *password = "12345678";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
WiFi.softAP(ssid,password);
Serial.print("Access Point: ");
Serial.println(ssid);
Serial.println(WiFi.softAPIP());
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
delay(1000);
}
这里面使用了WiFi库里面的softAP()函数,两个参数ssid和password分别代表了在使用esp搭建的wifi的名称和密码,而WiFi.softAPIP()则表示esp32的IP地址,
#include <WiFi.h>
const char* ssid = "feng";
const char* password = "123456789";
void setup()
{
Serial.begin(115200);
pinMode(5, OUTPUT); // set the LED pin mode
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop(){
}
同样WiFi.begin()则使用了WIFI库里面的begin()函数可以连接到外部局域wifi网络,两个参数也是代表名称和密码,WiFi.localIP()表示在连接当前局域网中的esp32的IP地址
#include <Arduino.h>
#include "WiFi.h"
void mySmartWifiConfig()
{
WiFi.mode(WIFI_MODE_STA);
Serial.println("开启智能配网:");
WiFi.beginSmartConfig();
while (1)
{
Serial.print(".");
delay(500);
if (WiFi.smartConfigDone())
{
Serial.println("配网成功");
Serial.printf("SSID:%s", WiFi.SSID().c_str());
Serial.printf("PSW:%s", WiFi.psk().c_str());
break;
}
}
}
bool autoConfig()
{
WiFi.disconnect(true,true);
WiFi.begin();
for (size_t i = 0; i < 20; i++)
{
int wifiStatus = WiFi.status();
if (wifiStatus == WL_CONNECTED)
{
Serial.println("自动连接成功!");
return 1;
}
else
{
delay(1000);
Serial.println("等待自动配网中...");
}
}
Serial.println("无法自动配网!");
return 0;
}
void setup()
{
Serial.begin(115200);
delay(5000);
if (!autoConfig())
{
mySmartWifiConfig();
}
}
void loop()
{
if (WiFi.isConnected())
{
Serial.println("网络已连接");
delay(1000);
}
}
代码烧入后就进入智能配网模式, 用手机微信扫描安信可官方二维码
#include "Arduino.h"
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <esp_wifi.h>
const char* AP_SSID = "ESP32_Config"; //热点名称
String wifi_ssid = "";
String wifi_pass = "";
String scanNetworksID = "";//用于储存扫描到的WiFi
#define ROOT_HTML "<!DOCTYPE html><html><head><title>WIFI Config by lwang</title><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><style type=\"text/css\">.input{display: block; margin-top: 10px;}.input span{width: 100px; float: left; float: left; height: 36px; line-height: 36px;}.input input{height: 30px;width: 200px;}.btn{width: 120px; height: 35px; background-color: #000000; border:0px; color:#ffffff; margin-top:15px; margin-left:100px;}</style><body><form method=\"GET\" action=\"connect\"><label class=\"input\"><span>WiFi SSID</span><input type=\"text\" name=\"ssid\"></label><label class=\"input\"><span>WiFi PASS</span><input type=\"text\" name=\"pass\"></label><input class=\"btn\" type=\"submit\" name=\"submit\" value=\"Submie\"> <p><span> Nearby wifi:</P></form>"
WebServer server(80);
#define RESET_PIN 13 //用于删除WiFi信息
bool AutoConfig();
void wifi_Config();
void setup() {
Serial.begin(115200);
pinMode(RESET_PIN, INPUT_PULLUP);
// 连接WiFi
if (!AutoConfig())
{
wifi_Config();
}
//用于删除已存WiFi
if (digitalRead(RESET_PIN) == LOW) {
delay(1000);
esp_wifi_restore();
delay(10);
ESP.restart(); //复位esp32
}
}
void loop() {
server.handleClient();
while (WiFi.status() == WL_CONNECTED) {
//WIFI已连接
}
}
//用于配置WiFi
void wifi_Config()
{
Serial.println("scan start");
// 扫描附近WiFi
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
scanNetworksID = "no networks found";
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
scanNetworksID += "<P>" + WiFi.SSID(i) + "</P>";
delay(10);
}
}
Serial.println("");
WiFi.mode(WIFI_AP);//配置为AP模式
boolean result = WiFi.softAP(AP_SSID, ""); //开启WIFI热点
if (result)
{
IPAddress myIP = WiFi.softAPIP();
//打印相关信息
Serial.println("");
Serial.print("Soft-AP IP address = ");
Serial.println(myIP);
Serial.println(String("MAC address = ") + WiFi.softAPmacAddress().c_str());
Serial.println("waiting ...");
} else { //开启热点失败
Serial.println("WiFiAP Failed");
delay(3000);
ESP.restart(); //复位esp32
}
if (MDNS.begin("esp32")) {
Serial.println("MDNS responder started");
}
//首页
server.on("/", []() {
server.send(200, "text/html", ROOT_HTML + scanNetworksID + "</body></html>");
});
//连接
server.on("/connect", []() {
server.send(200, "text/html", "<html><body><font size=\"10\">successd,wifi connecting...<br />Please close this page manually.</font></body></html>");
WiFi.softAPdisconnect(true);
//获取输入的WIFI账户和密码
wifi_ssid = server.arg("ssid");
wifi_pass = server.arg("pass");
server.close();
WiFi.softAPdisconnect();
Serial.println("WiFi Connect SSID:" + wifi_ssid + " PASS:" + wifi_pass);
//设置为STA模式并连接WIFI
WiFi.mode(WIFI_STA);
WiFi.begin(wifi_ssid.c_str(), wifi_pass.c_str());
uint8_t Connect_time = 0; //用于连接计时,如果长时间连接不成功,复位设备
while (WiFi.status() != WL_CONNECTED) { //等待WIFI连接成功
delay(500);
Serial.print(".");
Connect_time ++;
if (Connect_time > 80) { //长时间连接不上,复位设备
Serial.println("Connection timeout, check input is correct or try again later!");
delay(3000);
ESP.restart();
}
}
Serial.println("");
Serial.println("WIFI Config Success");
Serial.printf("SSID:%s", WiFi.SSID().c_str());
Serial.print(" LocalIP:");
Serial.print(WiFi.localIP());
Serial.println("");
});
server.begin();
}
//用于上电自动连接WiFi
bool AutoConfig()
{
WiFi.begin();
for (int i = 0; i < 20; i++)
{
int wstatus = WiFi.status();
if (wstatus == WL_CONNECTED)
{
Serial.println("WIFI SmartConfig Success");
Serial.printf("SSID:%s", WiFi.SSID().c_str());
Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
Serial.print("LocalIP:");
Serial.print(WiFi.localIP());
Serial.print(" ,GateIP:");
Serial.println(WiFi.gatewayIP());
return true;
}
else
{
Serial.print("WIFI AutoConfig Waiting......");
Serial.println(wstatus);
delay(1000);
}
}
Serial.println("WIFI AutoConfig Faild!" );
return false;
}
PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法。
ESP32的DAC函数可以实现真正的模拟输出。
ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。
本文学习如何使用ESP32开发板来进行多线程的开发。
ESP32有四个SPI外设,分别为SPI0、SPI1、HSPI和VSPI。
ESP32有2个硬件I2C总线接口,接口可以配置为主机或从机模式。