ESP telnet
- Войдите на сайт для отправки комментариев
Пт, 09/11/2018 - 00:06
год не касался программирования, а тут узнал что теперь можно управлять своими устройствами через эпл хом. малину и москито по статьям из интернета настроил. дошло дело до самих самоделок.
Для удобства переделки с ардуины на есп хочу реализовать удаленный "монитор порта". Гугление направило в сторону 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); } } } }
разобрался