Библиотека Arduino ESPTelnet.h считывание данных с экрана cmd
Я новичок в Arduino. Я использовал Arduino IDE для загрузки кода в модуль ESP8266. Я написал приложение для банкомата на плате tiva-tm4c123. Я пытаюсь подключиться к приложению из Интернета, используя telnet и ip-адрес. Я загрузил пример кода библиотеки ESPtelnet в модуль ESP8266 и подключил модуль esp wifi к карте tm4c123 с помощью uart. Модуль ESP8266 отправляет данные с карты tiva на экран putty, который я подключаю через telnet. Но это не переносит то, что я пишу с экрана шпатлевки на карту tiva. Я не смог найти такую функцию, как telnet.read(). Есть ли функция telnet, которая будет считывать данные с экрана шпатлевки? Я много искал, но не мог его найти. Если я найду эту функцию, я знаю, что могу отправить считанные данные на карту tiva с помощью Serial.write(telnet.read).RX и TX ESP подключены к карте tiva. Я создал беспроводное соединение с экраном шпатлевки. Когда символ или строка вводятся на экране telnet, он отправляет их на карту tiva с последовательной записью с TX ESP8266.Я хочу написать код, который будет выполняться в следующей логике.
if (telnet.available()) {
Serial.print(telnet.read());
}
Вот пример кода
#include "ESPTelnet.h"
/* ------------------------------------------------- */
#define SERIAL_SPEED 115200
#define WIFI_SSID "****"
#define WIFI_PASSWORD "****"
/* ------------------------------------------------- */
ESPTelnet telnet;
IPAddress ip;
/* ------------------------------------------------- */
void setupSerial(long speed, String msg = "") {
Serial.begin(speed);
while (!Serial) {
}
delay(200);
Serial.println();
Serial.println();
if (msg != "") Serial.println(msg);
}
/* ------------------------------------------------- */
bool isConnected() {
return (WiFi.status() == WL_CONNECTED);
}
/* ------------------------------------------------- */
bool connectToWiFi(const char* ssid, const char* password, int max_tries = 20, int pause = 500) {
int i = 0;
WiFi.mode(WIFI_STA);
#if defined(ARDUINO_ARCH_ESP8266)
WiFi.forceSleepWake();
delay(200);
#endif
WiFi.begin(ssid, password);
do {
delay(pause);
Serial.print(".");
} while (!isConnected() || i++ < max_tries);
WiFi.setAutoReconnect(true);
WiFi.persistent(true);
return isConnected();
}
/* ------------------------------------------------- */
void errorMsg(String error, bool restart = true) {
Serial.println(error);
if (restart) {
Serial.println("Rebooting now...");
delay(2000);
ESP.restart();
delay(2000);
}
}
/* ------------------------------------------------- */
void setupTelnet() {
// passing on functions for various telnet events
telnet.onConnect(onTelnetConnect);
telnet.onConnectionAttempt(onTelnetConnectionAttempt);
telnet.onReconnect(onTelnetReconnect);
telnet.onDisconnect(onTelnetDisconnect);
// passing a lambda function
telnet.onInputReceived([](String str) {
// checks for a certain command
if (str == "ping") {
telnet.println("> pong");
Serial.println("- Telnet: pong");
}
});
Serial.print("- Telnet: ");
if (telnet.begin()) {
Serial.println("running");
} else {
Serial.println("error.");
errorMsg("Will reboot...");
}
}
/* ------------------------------------------------- */
// (optional) callback functions for telnet events
void onTelnetConnect(String ip) {
Serial.print("- Telnet: ");
Serial.print(ip);
Serial.println(" connected");
}
void onTelnetDisconnect(String ip) {
Serial.print("- Telnet: ");
Serial.print(ip);
Serial.println(" disconnected");
}
void onTelnetReconnect(String ip) {
Serial.print("- Telnet: ");
Serial.print(ip);
Serial.println(" reconnected");
}
void onTelnetConnectionAttempt(String ip) {
Serial.print("- Telnet: ");
Serial.print(ip);
Serial.println(" tried to connected");
}
/* ------------------------------------------------- */
void setup() {
setupSerial(SERIAL_SPEED, "Telnet Test");
Serial.print("- Wifi: ");
connectToWiFi(WIFI_SSID, WIFI_PASSWORD);
if (isConnected()) {
ip = WiFi.localIP();
Serial.print(" ");
Serial.println(ip);
setupTelnet();
} else {
Serial.println();
errorMsg("Error connecting to WiFi");
}
}
/* ------------------------------------------------- */
void loop() {
telnet.loop();
// send serial input to telnet as output
// this part read tiva and transmit to ESP
if (Serial.available()) {
telnet.print(Serial.read());
}
}
//* ------------------------------------------------- */
@Kerim Turak, 👍2
Обсуждение1 ответ
Лучший ответ:
Мне кажется, что библиотека была написана для приема ввода, заканчивающегося символом новой строки.
char c = client.read();
if (c != '\n') {
if (c >= 32) {
input += c;
}
// EOL -> send input
} else {
if (on_input != NULL) on_input(input);
input = "";
}
Он будет продолжать добавлять символы во входной буфер до тех пор, пока не будет обнаружен символ новой строки, а затем передавать содержимое полученному обработчику .onInputReceived
.
Если я правильно понимаю, лучшее, что вы можете сделать, не внося изменений в саму библиотеку, - это:-
telnet.onInputReceived([](String str) {
Serial.println(str);
});
Опять же, если я прав, то символ новой строки всегда должен присутствовать для передачи данных.
Надеюсь, это будет полезно.
@Juraj Точно., @voidPointer
так почему же вы пишете об изменении библиотеки, @Juraj
@voidPointer да, когда я использую это, происходит обмен данными, но мне нужно отладить его, чтобы подтвердить правильность. Я еще свяжусь с тобой., @Kerim Turak
извините. теперь я понимаю, что ты имеешь в виду. это лямбда, @Juraj
@Juraj, потому что это не просто вопрос наличия данных. Новая линия также должна присутствовать для доставки, а не для передачи чего-либо полученного. Без этого понимания, возможно, было бы непонятно, почему данные не передаются., @voidPointer
клиенты telnet обычно отправляют новую строку. его можно настроить. автор библиотеки знает об этом, @Juraj
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
я думаю, что вы можете отправлять данные только с клавиатуры ... Шпатлевка не имеет функции чтения с экрана, @jsotola
попробуйте
Serial.write(telnet.read ());". лучше использовать "while", чем "если" здесь: "while (telnet.available())
, @JurajПроблема @Juraj в том, что нет функции telnet.read() или telnet.avaible ()., @Kerim Turak
ОК. извините, я не знаю библиотеку. Я написал более простую библиотеку серверов telnet TelneStream, но на самом деле это всего лишь класс сервера, завернутый в тонкий слой. В Arduino esp8266 3.0 мой сервер ArduinoWiFiServer продемонстрирован на примере telnet-сервера PagerServer, @Juraj