這一章将通過程式設計實驗的方式來認識ESP8266的功能,并體驗快速而便捷的開發流程
實驗一 連接配接指定Wifi網絡
這一段程式将使得ESP8266連接配接指定名稱和密碼的Wifi熱點,主要流程如下
程式流程:
在Arduino IDE的編輯器界面,開始部分添加頭檔案
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
之後設定兩個宏定義用于填寫Wifi名稱和密碼
#define WIFINAME "******"
#define WIFIPW "****"
點亮一個LED燈用于訓示電源,并設定序列槽波特率用以通信
pinMode(BUILTIN_LED, OUTPUT);
Serial.begin(115200);
設定并連接配接Wifi,如果沒有連接配接上就會一直重試
WiFi.begin(WIFINAME, WIFIPW);
Serial.print("Connecting..");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
整體的代碼如下
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#define WIFINAME "******"
#define WIFIPW "****"
void setup() {
// put your setup code here, to run once:
pinMode(BUILTIN_LED, OUTPUT);
Serial.begin(115200);
Serial.println("");
WiFi.begin(WIFINAME, WIFIPW);
Serial.print("Connecting..");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected,IP Address:");
Serial.println(WiFi.localIP());
}
void loop() {
// put your main code here, to run repeatedly:
}
如果成功連接配接,序列槽将輸出連接配接成功提示,并且可以通過PC端PING通ESP8266(在同一網段)
實驗二 網頁用戶端
ESP8266可以直接作為一個網頁用戶端來使用,封裝的庫中提供函數以快速配置ESP8266為一個網頁用戶端,能夠直接擷取網頁服務端的代碼。例如打開百度首頁,通過序列槽傳回所有html代碼。這裡暫未設定DNS服務是以需要通過IP直接通路。
程式流程:
添加頭檔案
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
以宏定義的形式設定位址,端口和wifi名稱,密碼
#define HTTPIP "14.215.177.37" //baidu的ip
#define HTTPPORT 80
#define WIFINAME "你的wifi名稱"
#define WIFIPW "wifi密碼"
配置序列槽并嘗試連接配接Wifi
Serial.begin(115200);
Serial.println();
Serial.println("Connecting");
WiFiMulti.addAP(WIFINAME,WIFIPW);
while(WiFiMulti.run()!=WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
連接配接指定的網頁伺服器IP,這裡的"/"是指頁面檔案名稱,例如"index.jsp""main.php"等
http.begin(HTTPIP,HTTPPORT,"/");
擷取代碼,如果傳回值為200則表示請求網頁成功,列印頁面
int Code = http.GET();
if(Code)
{
Serial.printf("HTTP Code:%d\n",Code);
if(Code == 200)
{
String payload = http.getString();
Serial.println(payload);
}
else
{
Serial.println("Couldn't link to server");
}
實驗二整體代碼如下
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
ESP8266WiFiMulti WiFiMulti;
#define HTTPIP "14.215.177.37"//baidu
#define HTTPPORT 80
#define WIFINAME "*******"
#define WIFIPW "*****"
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println();
Serial.println("Connecting");
WiFiMulti.addAP(WIFINAME,WIFIPW);
while(WiFiMulti.run()!=WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
}
void loop() {
// put your main code here, to run repeatedly:
HTTPClient http;
Serial.println("Try link to http.");
http.begin(HTTPIP,HTTPPORT,"/");
int Code = http.GET();
if(Code)
{
Serial.printf("HTTP Code:%d\n",Code);
if(Code == 200)
{
String payload = http.getString();
Serial.println(payload);
}
else
{
Serial.println("Couldn't link to server");
}
}
delay(5000);
}
實驗三 設定ESP8266為軟熱點
将ESP8266設定為一個熱點,可供其他裝置連接配接并交換資料,主要使用的函數:WiFi.softAP(ssid, password, channel, hidden)
參數說明:
ssid:Wifi熱點名稱,支援最大63個英文字元
password:密碼設定,可選參數,也就是可以沒有密碼,如果設定為WPA2-PSK
channel:信道設定,可選參數,1-13,沒有填寫則預設為1
hidden:是否隐藏SSID,可選參數,如果設定為true則隐藏
ESP8266開啟的預設IP位址為192.168.4.1,可以使用softAPConfig (local_ip, gateway, subnet) 函數進行修改
參數說明:
local_ip:軟熱點的位址
gateway:網關位址
subnet:子網路遮罩
程式流程:
頭檔案
#include <ESP8266WiFi.h>
聲明各個IP位址
IPAddress local_IP(192,168,4,4);
IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);
配置軟AP參數
WiFi.softAPConfig(local_IP, gateway, subnet);
啟動AP
WiFi.softAP("SoftAP001","999999999");
擷取IP位址
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
下載下傳完成後,在筆記本上Wifi可以搜到設定的AP
實驗三整體代碼如下
#include <ESP8266WiFi.h>
IPAddress local_IP(192, 168, 4, 4);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP("SoftAP001", "999999999");
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
}
void loop() {
// put your main code here, to run repeatedly:
}
參考:
https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/soft-access-point-class.md#softap