面向对象
程序使用ALIENTEK 战舰 V3STM32F1 开发板连接ATK-ESP8266 WIFI 模块,串口无线 AP(COM-WIFI AP)、串口无线 STA(COM-WIFI STA)和串口无线AP+STA(COM-WIFI AP+STA)这 3 个模式的测试,每个模式又包含 TCP服务器、 TCP 客户端和 UDP 这 3 个子模式。
使用matlab的GUI编程,选用模式为 COM-WIFI AP+STA 的TCP服务器模式。
TCPIP
根据帮助文档编写代码,最终实现GUI图像:
建立连接
% --- Executes on button press in OpenServer.
function OpenServer_Callback(hObject, eventdata, handles)
% hObject handle to OpenServer (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
port = get(handles.Text_Port,‘string’);%获得端口
Port = str2num(port);
ipdre1 = get(handles.IP1,‘string’);
ipdre2 = get(handles.IP2,‘string’);
ipdre3 = get(handles.IP3,‘string’);
ipdre4 = get(handles.IP4,‘string’);
fprintf(‘IP分部集合完毕n’);
Ip = strcat(ipdre1+“。”+ipdre2+“。”+ipdre3+“。”+ipdre4);%获得ip地址
fprintf(Ip);
% 构造服务器端tcpip对象
echotcpip(‘on’,Port); %启动一个TCPIP回响服务器
t = tcpip(Ip,Port); %创建一个TCPIP
global tcpiptext
tcpiptext = t;
N = 1024;
set(t,‘InputBufferSize’,8*N); %设置输入缓存大小
set(t,‘OutputBufferSize’,1024); %设置输出缓存大小
% 打开连接对象
fopen(t);
fprintf(‘连接成功n’);
%发送指令
%SendText = get(handles.SendText,‘String’); %获取发送文本内容
fwrite(t,‘sending test successful’,‘int8’) %向host写数据
% 等待接收数据
while(1)
nBytes = get(t,‘BytesAvailable’); %在输入缓存区的值
if nBytes 》 0
break;
end
end
recvRaw = fread(t,nBytes,‘char’); %从host读数据
S = char(recvRaw‘); %转置
%A = fread(t);
% 断开连接
fclose(t);
fprintf(’读取完毕,内容如下:n‘);
set(handles.State2View,’string‘,’连接成功!此时可发送命令至下位机,接收内容如下:‘); %在text文本中显示读取的数据
set(handles.Data2View,’string‘,S); %在text文本中显示读取的数据
disp(S); %在命令行中显示读取的数据
echotcpip(’off‘); %停止TCPIP回响服务器
fprintf(’echo tcpip链接已停止,此时可发送数据到下位机继续n‘);
%guidata(hObject,handles);%保存配置
断开连接
% --- Executes on button press in CloseServer.
function CloseServer_Callback(hObject, eventdata, handles)
% hObject handle to CloseServer (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Disconnect the TCPIP object from the host and stop the echo server.
% 断开连接
global tcpiptext
t = tcpiptext;
% 关闭和删除连接对象
fclose(t);
delete(t);
echotcpip(’off‘);
fprintf(’断开连接,请重新建立连接或退出!n‘);
set(handles.State2View,’string‘,’断开连接,请重新建立连接或退出!‘); %在text文本中显示读取的数据
% --- Executes on button press in quit.
主要问题
1.对matlab编程不熟悉;
2.在tcpip连接时,使用fscanf(),fgets()等函数不能有效读取发送过来的数据,显示报错:无法获得任何tcpip的数据,根据帮助文档以及百度解决问题;
3.初始没有设置输入输出缓存值,读取数据也是ASCII的值,解决方法:
set(t,’InputBufferSize‘,8*N); %设置输入缓存大小
set(t,’OutputBufferSize‘,1024); %设置输出缓存大小
while(1)
nBytes = get(t,’BytesAvailable‘); %在输入缓存区的值
if nBytes 》 0
break;
end
end
recvRaw = fread(t,nBytes,’char‘); %从host读数据
4.从fread读取的数据是一列,使用转置正确读取数据:
recvRaw = fread(t,nBytes,’char‘); %从host读数据
S = char(recvRaw’); %转置
5.使用全局变量global,获得tcpip的链接:
t = tcpip(Ip,Port); %创建一个TCPIP
global tcpiptext
tcpiptext = t;
面向对象
程序使用ALIENTEK 战舰 V3STM32F1 开发板连接ATK-ESP8266 WIFI 模块,串口无线 AP(COM-WIFI AP)、串口无线 STA(COM-WIFI STA)和串口无线AP+STA(COM-WIFI AP+STA)这 3 个模式的测试,每个模式又包含 TCP服务器、 TCP 客户端和 UDP 这 3 个子模式。
使用matlab的GUI编程,选用模式为 COM-WIFI AP+STA 的TCP服务器模式。
TCPIP
根据帮助文档编写代码,最终实现GUI图像:
建立连接
% --- Executes on button press in OpenServer.
function OpenServer_Callback(hObject, eventdata, handles)
% hObject handle to OpenServer (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
port = get(handles.Text_Port,‘string’);%获得端口
Port = str2num(port);
ipdre1 = get(handles.IP1,‘string’);
ipdre2 = get(handles.IP2,‘string’);
ipdre3 = get(handles.IP3,‘string’);
ipdre4 = get(handles.IP4,‘string’);
fprintf(‘IP分部集合完毕n’);
Ip = strcat(ipdre1+“。”+ipdre2+“。”+ipdre3+“。”+ipdre4);%获得ip地址
fprintf(Ip);
% 构造服务器端tcpip对象
echotcpip(‘on’,Port); %启动一个TCPIP回响服务器
t = tcpip(Ip,Port); %创建一个TCPIP
global tcpiptext
tcpiptext = t;
N = 1024;
set(t,‘InputBufferSize’,8*N); %设置输入缓存大小
set(t,‘OutputBufferSize’,1024); %设置输出缓存大小
% 打开连接对象
fopen(t);
fprintf(‘连接成功n’);
%发送指令
%SendText = get(handles.SendText,‘String’); %获取发送文本内容
fwrite(t,‘sending test successful’,‘int8’) %向host写数据
% 等待接收数据
while(1)
nBytes = get(t,‘BytesAvailable’); %在输入缓存区的值
if nBytes 》 0
break;
end
end
recvRaw = fread(t,nBytes,‘char’); %从host读数据
S = char(recvRaw‘); %转置
%A = fread(t);
% 断开连接
fclose(t);
fprintf(’读取完毕,内容如下:n‘);
set(handles.State2View,’string‘,’连接成功!此时可发送命令至下位机,接收内容如下:‘); %在text文本中显示读取的数据
set(handles.Data2View,’string‘,S); %在text文本中显示读取的数据
disp(S); %在命令行中显示读取的数据
echotcpip(’off‘); %停止TCPIP回响服务器
fprintf(’echo tcpip链接已停止,此时可发送数据到下位机继续n‘);
%guidata(hObject,handles);%保存配置
断开连接
% --- Executes on button press in CloseServer.
function CloseServer_Callback(hObject, eventdata, handles)
% hObject handle to CloseServer (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Disconnect the TCPIP object from the host and stop the echo server.
% 断开连接
global tcpiptext
t = tcpiptext;
% 关闭和删除连接对象
fclose(t);
delete(t);
echotcpip(’off‘);
fprintf(’断开连接,请重新建立连接或退出!n‘);
set(handles.State2View,’string‘,’断开连接,请重新建立连接或退出!‘); %在text文本中显示读取的数据
% --- Executes on button press in quit.
主要问题
1.对matlab编程不熟悉;
2.在tcpip连接时,使用fscanf(),fgets()等函数不能有效读取发送过来的数据,显示报错:无法获得任何tcpip的数据,根据帮助文档以及百度解决问题;
3.初始没有设置输入输出缓存值,读取数据也是ASCII的值,解决方法:
set(t,’InputBufferSize‘,8*N); %设置输入缓存大小
set(t,’OutputBufferSize‘,1024); %设置输出缓存大小
while(1)
nBytes = get(t,’BytesAvailable‘); %在输入缓存区的值
if nBytes 》 0
break;
end
end
recvRaw = fread(t,nBytes,’char‘); %从host读数据
4.从fread读取的数据是一列,使用转置正确读取数据:
recvRaw = fread(t,nBytes,’char‘); %从host读数据
S = char(recvRaw’); %转置
5.使用全局变量global,获得tcpip的链接:
t = tcpip(Ip,Port); %创建一个TCPIP
global tcpiptext
tcpiptext = t;
举报