Arduino + ESP8266
Arduino 透過 WiFi 建立 HTTP Request
ESP8266
- 電壓範圍 : 1.7 V - 3.6 V ,若接上5 V電源會燒壞。
- 電流需求 : 200 mA - 300 mA。
- Arduino 可提供3.3 V 電壓,但最大電流為50mA,無法提供足夠電流。
因此,須使用5V轉3.3V的穩壓器,最大輸出電流為800mA,使esp8266正常運作。
接線配置



ESP-8266
LM-1117

LD-1117
接線圖

ESP8266 韌體版本

此實作的esp8266預設版本為V0.9.5.2,在初始時,請將自訂的 software serial 設定為115200,並且確認Arduino的版本為1.6.5。
AT Command

Arduino Code
WiFi connect
#include <SoftwareSerial.h>
SoftwareSerial esp8266(8,9);
void setup() {
Serial.begin(9600);
esp8266.begin(115200);
}
void loop() {
if (esp8266.available() > 0) {
String data = esp8266.readString();
Serial.println(data);
}
if (Serial.available() > 0) {
String data = Serial.readString();
esp8266.println(data);
}
}
AT-Command
AT : 測試回應
AT+RST : WiFi模組重設
AT+CWMODE? : 模式查詢
AT+CWMODE=1
AT+CWJAP="SID","PWD"
AT+CIPMUX=0
建立WiFi連線
#include <SoftwareSerial.h>
SoftwareSerial esp8266(8,9);
String SID = "AP名稱";
String PWD = "AP密碼";
void setup() {
Serial.begin(9600);
esp8266.begin(115200);
wifi_init();
}
void loop()
{
int Val = int(random(0,1023));
}
void wifi_init(){
sendCommand("AT+RST",2000);
sendCommand("AT+CWMODE=1",1000);
sendCommand("AT+CWJAP=\""+SID+"\",\""+PWD+"\"",3000);
sendCommand("AT+CIPMUX=0",1000);
}
void sendCommand(String command, const int timeout)
{
String response = "";
Serial.println('>'+command);
esp8266.println(command);
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
response = esp8266.readString();
}
}
Serial.println(response);
}
上傳資料
void uploadData(int value)
{
// 建立 TCP 連接
String cmd = "AT+CIPSTART=\"TCP\",\""+IP+"\",80";
esp8266.println(cmd);
Serial.println(cmd);
// 錯誤回傳
if(esp8266.find("Error")){
Serial.println("AT+CIPSTART error");
return;
}
// 準備要GET的字串
// HTTP/1.1
String getstr = "GET /"+Path+String(value)+" HTTP/1.1\r\nHost:"+IP+"\r\n\r\n";
// HTTP/1.0
//String getstr = "GET /"+Path+String(value)+" HTTP/1.0\r\n\r\n\r\n";
// 發送指定長度的數據
cmd = "AT+CIPSEND="+String(getstr.length());
esp8266.println(cmd);
//Serial.println("length: "+cmd);
delay(1000);
// 長度的數據傳送成功,會返回 ">",然後開始傳輸通訊埠數據
if(esp8266.find(">")){
Serial.println("> "+getstr);
}
else{
// 關閉連線
esp8266.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE connection closed!\r\n\r\n");
delay(2000);
return;
}
esp8266.println(getstr);
delay(2000);
}
/*
* EX : http://127.0.0.1/wifiweb/receive.php?value=5
* String IP = "127.0.0.1";
* String Path = "wifiweb/receive.php?value="
*/
String IP = "IP位址";
String Path = "php檔案名稱+GET的參數";
全域變數 :
updata function : (加在上頁程式碼後面)
GET 示意圖

上傳成功、失敗圖示


上傳成功 :
上傳失敗 :
Xampp
基礎設定
開放對外連線
- 尋找 httpd-xampp.conf
(Path : xampp/apache/conf/extra/httpd-xampp.conf) - 拉到最底層,會看到 # New XAMPP security concept
- 把Require local 改成 Require all granted,如下
<LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">
Require all granted
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</LocationMatch>
程式碼
Arduino_ESP-8266
By isamare0304
Arduino_ESP-8266
Arduino ESP-8266
- 1,466