√ 以ESP8266為Client端,使用Arduino終端機做初始化設定
可搭配Android Server端sample code:[Android] [Studio] Socket Server接收測試程式

 ⌲ 簡單呼叫AT:

void AT() {
  Serial1.print("AT");
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}


 ⌲ 設定模式:(mode1:STA,mode2:AP,mode3:Both)

void SetMode(byte mode) {       //變更模組狀態
  Serial1.print("AT+CWMODE=");  //mode1=STA, mode2=AP, mode3=both
  Serial1.print(mode);
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

⌲ 查詢附近可連線之基地台:

void ShowAP() {     //查詢附近可連線之基地台
  Serial1.print("AT+CWLAP");
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

⌲ 查詢查詢附近可連線之基地台:

void ShowJAP() {    //查詢目前連線之基地台
  Serial1.print("AT+CWJAP?");
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

⌲ 連線基地台:

void ConnectAP(String ssip, String password) {  //連線基地台
  Serial1.print("AT+CWJAP=\"");
  Serial1.print(ssip);
  Serial1.print("\",\"");
  Serial1.print(password);
  Serial1.print("\"");
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

⌲ 離開目前連線之基地台:

void QuitAP() {     //離開目前連線之基地台
  Serial1.print("AT+CWQAP");
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

⌲ 與相同網域之裝置進行TCP/IP連線:

void ConnectTCP(String IP, String port) {       //與裝置進行TCP/IP連線
  Serial1.print("AT+CIPSTART=\"TCP\",\"");
  Serial1.print(IP);
  Serial1.print("\",");
  Serial1.print(port);
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

⌲ 傳送資料:

void SendData(int datalength, String data) {     //傳送資料
  Serial1.print("AT+CIPSEND=");
  Serial1.write(0x0D); 
  Serial1.write(0x0A);
  enter();
  delay(100);
  Serial1.print(data);
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}

 

⌲ 完整範例:

(範例中使用之Timer Library:https://github.com/JChristensen/Timer)

#include "Timer.h"
Timer tcb;

void setup() {
  tcb.every(50, timer50ms);
  Serial.begin(115200);
  Serial1.begin(115200);
}

void loop() {
  tcb.update();
  if (Serial1.available()) {
    Serial.write(Serial1.read());
  }
}
void timer50ms() {
  test();
}
void test() {
  switch (Serial.read()) {
    case 0x31:
      Serial.println("mode1");
      SetMode(1);
      break;
    case 0x32:
      AT();
      break;
    case 0x33:
      ConnectAP("Xin 的 iPhone", "55555555");
      break;
    case 0x34:
      ConnectTCP("192.168.31.230", "9999");
      break;
    case 0x35:
      SendData(5, "hello");
    case 0x36:
      QuitAP();
  }
}
void AT() {
  Serial1.print("AT");
  enter();
}
void SetMode(byte mode) {       //變更模組狀態
  Serial1.print("AT+CWMODE=");  //mode1=STA, mode2=AP, mode3=both
  Serial1.print(mode);
  enter();
}
void ShowAP() {     //查詢附近可連線之基地台
  Serial1.print("AT+CWLAP");
  enter();
}
void ShowJAP() {    //查詢目前連線之基地台
  Serial1.print("AT+CWJAP?");
  enter();
}
void ConnectAP(String ssip, String password) {  //連線基地台
  Serial1.print("AT+CWJAP=\"");
  Serial1.print(ssip);
  Serial1.print("\",\"");
  Serial1.print(password);
  Serial1.print("\"");
  enter();
}
void QuitAP() {     //離開目前連線之基地台
  Serial1.print("AT+CWQAP");
  enter();
}
void ConnectTCP(String IP, String port) {       //與裝置進行TCP/IP連線
  Serial1.print("AT+CIPSTART=\"TCP\",\"");
  Serial1.print(IP);
  Serial1.print("\",");
  Serial1.print(port);
  enter();
}
void SendData(int datalength, String data) {     //傳送資料
  Serial1.print("AT+CIPSEND=");
  Serial1.print(datalength);
  enter();
  delay(100);
  Serial1.print(data);
  enter();
}
void enter() {
  Serial1.write(0x0D);
  Serial1.write(0x0A);
}


執行後終端機之畫面如下:
(ESP8266資料成功送出後,會接收到「OK」,在此沒有多做判斷。)

連線後Server端收到之資料如下:(收到Hello)(使用之測試軟體:iPhone-Socket Tester)

 

文章標籤
創作者介紹
創作者 May 的頭像
May

Walking

May 發表在 痞客邦 留言(0) 人氣()