ESP-12F Arduino TCP Client


l           任務
 Tcp Client這個版本, 連到 我開啟的TcpServer, 我下指令, ESP 回傳測值
l           源由:
我要進行315Mhz 搖控器訊號波形實測,之前是用 cvi + 8051c 做的工具。
現在,想改版為 Python + Esp-01F Arduino 。
esp-01F 我要用 tcp server , 而 電腦 win7+python 做 TcpClient 做數據,波形分析。
但一時, 沒找到 arduino esp tcp server, 倒先找到 arduino esp tcp client, 
那就先做 arduino esp tcp client 。做完, 再回來做 arduino esp server
l           執行細項:
甲、 client.print(s); 要送的是 String , 我的k char 陣列, 或者稱字串, 改為 String 再傳送。
tcp server 沒收到任何訊息,com5 有。
乙、 先取消ex1(); , 並且 loop() , client.print("got it \r\n"); 多送幾次, 重燒, 看到底usr-tcp232 tcp server有沒有收到
1.  有收到, 很正常。
丙、 把傳送短訊息的, 放在 ex1(); , 進行實測
1.  沒有回應。=> 不行,就是不行。client.print() 只能在loop()中呼叫,不能在ex1()內呼叫。
丁、 再進行長字串的實測。=> client.print(s); => String s; s再長都可以正常傳。
戊、 char *ex1(){}loop 程式中, 傳送 client.print(s);
1.  有傳送, 但是, 全是亂碼。static char k[PMAX/8]; => 一切正常, pc tcp server 有收到正確的上千字字串。
己、 : ex1() , 到底能不能正常送出 字串, 透過 tcp
1.   結論是不行。
2.  經實測, 是不行的。ex1() 內呼叫 client.print("......") 並沒有動作。
3.  char *ex1(WiFiClient client) , 這樣看能不能正常。公共不用行, 就傳進函數。
甲、 還是不行。這表示, 只能在loop() 執行 client 的相關呼叫。
庚、 任務: 我就是要在ex1() 內傳送全部訊息。
1.  : 不行, 就是不行, 結案。
辛、 任務: 取消 String s;
1.  不要 client.print(s); 而是 client.print(String(c));
甲、 燒第1, 燒完成, 但執行時, tcp server 送出字串, esp 沒正常送出, COM5 視窗出現錯誤訊息。
乙、 再燒第2, 若能有問題, 就代表, String s; 必須要使用。
                                                                        i.                一直連不到網。
丙、 再燒第3.
                                                                        i.                連上網,連上tcp server. tcp server 送字串給esp, esp 重置。
                                                                    ii.                這証明, 不能簡化 String s
2.  回復原狀。
甲、 也是不行。最後, char k[PMAX+100]; 放在函數外,做公共變數, 才正常。
壬、 任務: 1次傳100, 正常否.=> 正常。

1.  1次傳全部, 正常嗎? =>完全正常。


以下的程式碼是以
基于arduino ide for esp8266 实现tcp client

做為藍本,進行修改,
用 USR-TCP232-Test 來做為 COM5 , TCP Servier ,實測。
也有用  TCP&UDP測試工具 , 開一個 TCP Server 來測試,但這工具,不能發送 \r\n , 不太合用此範例程式。


/* 這是 tcp client, 先連到區域網路ap, 再連到已設定好的 tcp server
 * 手機去告知 區網的密碼, 這支程式就能連上去。每次重置 esp, 都必須去手機設定, 很麻煩。
 */
#include //導入庫

#define uc unsigned char
#define ui unsigned int

//#define LED 2   // 定位針腳 2   為 led 輸出, esp-01
#define LED   16  // 定位針腳 16  為 led 輸出, wsp-12f
const char    *host = "192.168.1.102";//修改為你建立的Server服務端的IP位址
const int     tcpPort = 8080;//修改為你建立的Server服務端的埠號
WiFiClient client;//創建一個用戶端實例
void smartConfig()
{
      WiFi.mode(WIFI_STA);//設置esp的運行模式
      Serial.println("\r\n Wait for Smartconfig");//服務端提示,可以清晰的知道晶片在做什麼
      WiFi.beginSmartConfig();//庫自帶函數,此時通過手機進行wifi密碼設置
      while (1){
            Serial.println("\r\n Wait for phone to config.");//提示需要通過手機端設置
            digitalWrite(LED, 0); delay(300);
            digitalWrite(LED, 1); delay(300);
//閃爍燈光提示
            if (WiFi.smartConfigDone())//如果完成配置,提示連接情況,此時手機也會收到提示
            {
                  Serial.println("SmartConfig Success");
                  Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
                  Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
                  break;
            }
      }
}

void setup()//晶片初始化
{
      Serial.begin(115200);
      Serial.println("Start module");
      pinMode(LED, OUTPUT); digitalWrite(LED, 0);
      smartConfig();
}

#define PMAX 100000
static char k[PMAX/8+1];
char *ex1()
{
    ui i; for(i=0;i}

void loop()
{
      while (!client.connected())//當無法連接上伺服器時
      {
          if (!client.connect(host, tcpPort))//按指定的埠和位址鏈結到到指定的伺服器,如果鏈結不上
          {
                Serial.println("wait connection.to server ......");
                digitalWrite(LED,1);  delay(100);
                digitalWrite(LED,0);  delay(1000);
                //1短燈光提示等待鏈結到伺服器,此時wifi已經鏈結上的
          }
      }
      if(client.connected()) {Serial.printf("connection to %\r\n",host); }
      while (client.connected())//當處於鏈結狀態 時
      {
            if (client.available())//如果緩衝區字串大於0
            {
                String line = client.readStringUntil('\r\n');//獲取字串
                Serial.println(line);//把字串傳給串口
                client.print("loop() : got it \r\n");//向伺服器回饋資訊
                ex1(); String s; s=k; client.print(s);//必須在 loop() 內發送,且要 String sl
            }
      }
}


留言

這個網誌中的熱門文章

無效的努力

股市-華頓S&P黃豆(00693U) 操作法