51智能小车编程
最近在做智能小车,需要实现编写上位机控制智能小车行驶方向与运行速度。因此首先需要解决的问题就是需要考虑如何实现计算机与智能小车进行通信。所使用硬件设备主要包括51单片机开发板、ESP8266 WIFI无线模块。
ESP8266 WIFI模块
本文主要介绍上位机端开发,通过使用PC端开发软件实现电脑端创建TCP连接服务器,为下一步ESP8266作为TCP客户端实现客户端与服务器端通信。为测试服务器端与客户端通信,客户端使用网络调试助手模拟客户端测试TCP连接与通信情况。其中网络调试工具如下:
网络调试工具
PC端软件界面设计
本项目开发设计使用PC端实现对智能小车进行控制,主要设计实现功能包括小车实时信息显示,视频数据传输与小车行驶与方向控制,除此之外设置软件TCP连接相关信息。PC端软件界面设计如下所示:
智能小车PC端软件设计
PC端软件界面设计如上图所示,通信状态信息部分主要用于输出显示客户端与服务器端通信情况,服务器设置主要实现TCP服务器端设计,指令操作区主要用于控制小车方向与速度,视频显示区主要接收小车摄像头拍摄信息,小车信息主要用于显示实时小车信息,信息收发区主要实现PC端与小车进行文字信息发送。这篇文章主要介绍服务器设置及TCP连接功能实现。
Socket连接创建与测试
本例使用C#程序设计语言开发服务器端,通过使用Socket类创建TCP连接服务器端,由网络调试助手模拟客户端测试服务器与客户端连接及信息收发。
服务器设置及通信状态显示
信息收发功能区域
本文所介绍需要实现的两个基本功能如上图所示,部分核心代码描述如下:
1、创建通信端口
try
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ip = "127.0.0.1";
port = 8080;
this.listBox1.Items.Insert(listBox1.Items.Count, "创建通信接口成功!!! " DateTime.Now.ToString());
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
点击启动按钮将执行创建通信端口代码,在服务器信息显示端会显示端口创建成功提示信息,如下图所示:
创建通信端口
2、绑定端口并监听端口
private void button10_Click(object sender, EventArgs e)
{
socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port));
this.listBox1.Items.Insert(listBox1.Items.Count, "绑定端口成功,正在监听!!! " DateTime.Now.ToString());
socket.Listen(1);
lThread = new Thread(listenClient);
lThread.Start();
}
private static void listenClient()
{
while (true)
{
client = socket.Accept();
usocket = client;
Thread recvThread = new Thread(recvData);
recvThread.Start(client);
Form1.MainForm.sendMsg(0,"客户端连接成功");
}
}
以上代码实现端口监听,客户端通过使用TCP连接服务器端时会创建listenClient线程处理客户端连接,在listenClient中创建recvData处理数据的发送与接收。
客户端与服务器端连接成功
3、收发数据
private static void recvData(object client)
{
uclient = (Socket)client;
while (true)
{
try
{
int recvCount = uclient.Receive(recv);
if (recvCount == 0)
{
uclient.Shutdown(SocketShutdown.Both);
uclient.Close();
return;
}
string recvData = Encoding.UTF8.GetString(recv, 0, recvCount);
Form1.MainForm.sendMsg(1, recvData);
}
catch(Exception ex)
{
Form1.MainForm.sendMsg(0,ex.Message);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if(usocket!=null)
{
string str = this.sendBox.Text;
string sendStr = str;
byte[] bs = Encoding.UTF8.GetBytes(sendStr);
try
{
usocket.Send(bs, bs.Length, 0);
}
catch (Exception ex)
{
Form1.MainForm.sendMsg(0, ex.Message);
}
}
else
{
Form1.MainForm.sendMsg(0, "无法连接客户端");
}
}
实现数据收发代码描述如上所示,最终显示效果如下图:
服务器端与客户端收发数据
以上给出使用C#编写智能小车服务器端设计思路及TCP服务器端编程实现,下一步就需要考虑ESP8266 WIFI模块与PC端服务器建立TCP连接实现数据与操作指令的收发,单片机获取传递数据之后实现对小车方向及速度控制等。更多内容后期文章将持续发布,欢迎大家关注、评论。
本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可在评论区回复。更多程序设计相关教程及实例分享,期待大家关注与阅读!
,