1. 程式人生 > >arduino esp8266透傳程式碼

arduino esp8266透傳程式碼

 //這理用的是2560 的主機板串列埠比較多用的是串列埠1如果是UNO的主機板可以用串列埠0 但是要在刷軟體的時候把串列埠0上的線去掉要不刷不進去!

#include <ESP8266.h>                  //庫檔案

#define SSID        "SSID"            //WIFI 名
#define PASSWORD    "PWD"             //WIFI 密碼
#define HOST_NAME   "192.168.2.9"     //連線伺服器的 IP
#define HOST_PORT   (60000)           //連線伺服器的 埠
ESP8266 wifi(Serial1);               //串列埠1 和ESP8266 對接透傳
int ledPin = 7;                       //小燈1
int ledPin2 = 6;                       //小燈2
void setup(void)                      //程式初始化
{
pinMode(ledPin,OUTPUT);               
pinMode(ledPin2,OUTPUT);
    Serial.begin(9600);             //初始化串列埠0 
    Serial1.begin(9600);             //初始化串列埠1    這個地方 要先在ESP 8266 上設定一下 波特率  設定成 9600  預設 應該是 115200 
    Serial.flush();                   //不知道
    Serial.print("setup begin\r\n");  //列印初始化狀態把?
    Serial.print("FW Version:");      //列印 ESP版本
    Serial.println(wifi.getVersion().c_str());  //不知道 
       if (wifi.setOprToStationSoftAP()) {          //應該是執行模式 這個應該是 clent+AP 模式
        Serial.print("to station + softap ok\r\n");  //設定模式成功
    } else {
        Serial.print("to station + softap err\r\n"); //設定模式失敗
    }
     if (wifi.joinAP(SSID, PASSWORD)) {             //連線無線路由
        Serial.print("Join AP success\r\n");        //加入網路成功
        Serial.print("IP:");                        //顯示IP地址
        Serial.println( wifi.getLocalIP().c_str());       //顯示IP地址
    } else {
        Serial.print("Join AP failure\r\n");         //加入網路失敗
    }
    if (wifi.disableMUX()) {  
        Serial.print("single ok\r\n");
    } else {
        Serial.print("single err\r\n");
    }
    Serial.print("setup end\r\n");
}
void loop(void)
{
    uint8_t buffer[128] = {0};          //初始化 buffer 這個快取
    if (wifi.createTCP(HOST_NAME, HOST_PORT)) {   // 連線WIFI網路
        Serial.print("create tcp ok\r\n");//建立網路是否成功
      } else { 
        Serial.print("create tcp err\r\n");}  //建立網路失敗
     delay(200);
     char *hello = "Hello, this is client!"; //傳送到上位機的資料
    wifi.send((const uint8_t*)hello, strlen(hello)); //傳送到上位機
    uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000); //上位機傳過來的資料
       if (len > 0) {                   //判斷是否有資料到達
       Serial.print("Rec:[");          //輸出一個固定開頭
        char (*inChar) = buffer;        //把快取中的資料存到一個變數中
        Serial.print( inChar);         //列印快取中的內容
       //if ( *inChar == 'H')
       if(strcmp(inChar,"HOME")==0)     //判斷上位機傳過來的資料是否等於 HOME 
        { Serial.print("start");      //如果滿足上面的如果列印這個 start 
         digitalWrite(ledPin, HIGH);   //點亮這個小燈
         }         
       //if ( *inChar == "STOP")
      else if(strcmp(inChar,"STOP")==0)  
       {Serial.print("STOP");
        digitalWrite(ledPin2, HIGH);
        }
        else {Serial.print("NUMBER"); }  //如果上位機傳來的資料 不滿足上面兩個如果 就執行列印 NUMBER 單詞
        
        Serial.print("]\r\n");    //列印一個尾部字元
   }    
    if (wifi.releaseTCP()) {                //關閉網路連線
        Serial.print("release tcp ok\r\n");     //關閉成功 
    } else {
        Serial.print("release tcp err\r\n");    //關閉失敗
    }
    delay(5000);                                //延遲5秒
   digitalWrite(ledPin,LOW);                    //熄滅小燈 1
     digitalWrite(ledPin2,LOW);                  //熄滅小燈2
}