在 【得捷电子Follow me第4期】基础任务二:在开发板上运行WEB服务控制LED 中,分享了使用WWW服务,来控制LED。
这篇分享,则在开发板上,运行Telnet服务,其他设备通过Telnet服务,来发送控制指令,从而控制LED。
一、安装支持库
要在Arduino上运行Telnet服务,可以安装如下的扩展:
这个库,可以提供基于串口和网络的Shell环境,非常的方便。
二、在开发板上运行Telnet服务
在前面配置静态IP的基础上,我添加如下的代码,来启动Telnet服务。
// LED控制
int ledPin = LED_BUILTIN;
// 网络服务客户端
EthernetClient client;
bool haveClient = false;
// Telnet服务
// Shell
#include <Shell.h>
// Shell
Shell shell;
#define SERVER_PORT 23
// Shell指令
void cmdLed(Shell &shell, int argc, const ShellArguments &argv)
{
if (argc > 1 && !strcmp(argv[1], "on"))
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
}
ShellCommand(led, "Turns the status LED on or off", cmdLed);
// 有线网络服务
EthernetServer server(SERVER_PORT);
void setup() {
// 配置LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// 在联网成功以后,添加如下的代码
// 开启Telnet服务
Serial.println("server_telnet Begin");
server.begin();
}
void loop() {
// 处理客户端连接
if (!haveClient) {
// 检查新连接
client = server.available();
if (client) {
haveClient = true;
shell.begin(client, 5);
}
} else if (!client.connected()) {
// 会话结束,关闭shell
shell.end();
client.stop();
client = EthernetClient();
haveClient = false;
}
// 处理活动连接
shell.loop();
}
上述代码中,使用 EthernetServer 来开启23端口的服务。使用ShellCommand()来注册对应的shell环境命令。
然后在loop()中,检查是否有客户端连接,如果有客户端连接,则shell.begin(client, 5)来接入到shell环境,从而提供Telnet服务。
编译上述代码下载后,运行结果如下:
三、电脑通过Telnet开发板
在电脑上,通过如下命令连接到开发板的Telnet服务:
telnet 192.168.1.188 23
telnet连接后,可以使用的命令如下:
使用led命令时,查看开发板的LED,会按照命令点亮或者熄灭。
四、总结
这篇在 W5500_Evb_Pico 运行 Telnet服务,可以提供一个远程shell环境,用于交互和控制。
很多嵌入式设备,都提供了一个shell环境,以便进行调试和测试。
我们也可以继续扩展,在 W5500_Evb_Pico 提供类似的功能。