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

基礎設定

開放對外連線

  1. 尋找 httpd-xampp.conf
     (Path : xampp/apache/conf/extra/httpd-xampp.conf)
  2. 拉到最底層,會看到 # New XAMPP security concept
  3. 把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