ESP telnet

rapidshe
Offline
Зарегистрирован: 31.12.2015
год не касался программирования, а тут узнал что теперь можно управлять своими устройствами через эпл хом. малину и москито по статьям из интернета настроил. дошло дело до самих самоделок.
 
Для удобства переделки с ардуины на есп хочу реализовать удаленный "монитор порта". Гугление направило в сторону ssh/telnet. потом на ютубе накнулся на реализацию telnet. Скачал, прошил. Попробовал через putty, подключился.  написал через putty в сторону ESP - пришло.  Потом со стороны есп через монитор порта ардуино иде. В общем работает! 
 
На основе последнего обзаца(  //check UART for data) хочу реализовать отправку своих данных через telnet.
 
помогите чайнику) 
 
эта часть как я думаю не требует вмешательств:
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      if (serverClients[i] && serverClients[i].connected()){
        serverClients[i].write(sbuf, len);
        delay(1);
 
работать надо с началом обзаца:
    size_t len = Serial.available();
    uint8_t sbuf[len];
    Serial.readBytes(sbuf, len);
но тут вроде только цыфрами оперуется... текст то как отправить...
 
 
оригнальный скетч:
#include <ESP8266WiFi.h>

//how many clients should be able to telnet to this ESP8266
#define MAX_SRV_CLIENTS 2
const char* ssid = "2.4Ghz";
const char* password = "Qmu2vobq2@";

WiFiServer server(23); // --> default port for communication usign TELNET protocol | Server Instance
WiFiClient serverClients[MAX_SRV_CLIENTS]; // --> Client Instanse

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  // -->Try to connect to particular host for 20 times, If still not connected then automatically resets.
  Serial.print("\nConnecting to "); Serial.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if(i == 21){
    Serial.print("Could not connect to"); Serial.println(ssid);
    while(1);
  }
  //start UART and the server
  Serial.begin(115200);
  server.begin();
  server.setNoDelay(true); // --> Won't be storing data into buffer and wait for the ack. rather send the next data and in case nack is received, it will resend the whole data
  
  Serial.print("Ready! Use 'telnet ");
  Serial.print(WiFi.localIP());
  Serial.println(" 23' to connect");
}

void loop() {
  uint8_t i;
  //check if there are any new clients
  if (server.hasClient()){
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      //find free/disconnected spot
      if (!serverClients[i] || !serverClients[i].connected()){
        if(serverClients[i]) serverClients[i].stop();
        serverClients[i] = server.available();
        Serial.print("New client: "); Serial.print(i);
        continue;
      }
    }
    //no free/disconnected spot so reject
    WiFiClient serverClient = server.available();
    serverClient.stop();
  }
  //check clients for data
  for(i = 0; i < MAX_SRV_CLIENTS; i++){
    if (serverClients[i] && serverClients[i].connected()){
      if(serverClients[i].available()){
        //get data from the telnet client and push it to the UART
        while(serverClients[i].available()) Serial.write(serverClients[i].read());
      }
    }
  }
  //check UART for data
  if(Serial.available()){
    size_t len = Serial.available();
    uint8_t sbuf[len];
    Serial.readBytes(sbuf, len);
    //push UART data to all connected telnet clients
    for(i = 0; i < MAX_SRV_CLIENTS; i++){
      if (serverClients[i] && serverClients[i].connected()){
        serverClients[i].write(sbuf, len);
        delay(1);
      }
    }
  }
}

 

 

rapidshe
Offline
Зарегистрирован: 31.12.2015

разобрался