0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于小凌派RK2206开发板wifi-udp通信实验

福州市凌睿智捷电子有限公司 2022-06-01 10:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

开发板与pc通信有很多形式,之前已经介绍过通过tcp通信,不过有些场合使用udp会更合适,因为udp没有了tcp的握手与连接步骤,传输效率会高的多。例如通过wifi传输开发板采集到传感器数据在PC端显示,这些消息是不断被覆盖的,使用udp就高效的多。


一、在使用小凌派开发板wifi进行udp通信的步骤

前面的步骤基本与之前发的tcp实验一致。

1、要确定pc机所连接路由的wifi名称和密码。通过修改代码使小凌派连接到与pc同一网络。

修改文件device/rockchip/rk2206/sdk_liteos/board/src/config_network.c 中的SSID 即wifi名称,和PASSWORD 即wifi密码。

#define SSID "凌智电子"

#define PASSWORD "********"


2、确认小凌派wifi功能是否开启

查看device/rockchip/rk2206/sdk_liteos/board/main.c 文件

是否调用ExternalTaskConfigNetwork();


3、确认小凌派开发板与开发板在同一网段。

在修改以上配置后先编译烧录程序然后查看log确认小凌派开发板获取到的ip地址。

ea9fcc1e-e10b-11ec-b80f-dac502259ad0.png


再确认pc的ip地址,在控制台输入ipconfig

eae9dbd8-e10b-11ec-b80f-dac502259ad0.png

可以看到两个ip地址都是点2网段,说明已经在同一局域网。


4、 修改wifi_udp 例程中服务地址及端口

#define OC_SERVER_IP "192.168.2.49" //需要连接服务端的ip地址

#define SERVER_PORT 6666

这个ip地址即PC的ip地址,修改后重新编译烧录程序。


5、pc上打开两个网络调试工具,一个用于连接小凌派udp客户端,一个用于连接小凌派udp服务端,并设置ip地址和端口号。

ip地址都填本机ip地址,即前一步查询到的IP地址如上图所示。区别在于端口号,用于连接小凌派udp客户端的端口号需要与前一步配置的(SERVER_PORT 6666)一致。

用于连接小凌派udp服务端的端口可以随意填写,不过要注意不要与常见的端口号冲突,如果有冲突就改成其他的。

ip地址:192.168.2.49

用于连接小凌派udp客户端的端口号:6666

用于连接小凌派udp服务端的端口号:8888

eb105966-e10b-11ec-b80f-dac502259ad0.png


6、在pc网络调试助手点击启动

eb5b6668-e10b-11ec-b80f-dac502259ad0.png


7、查看log等待小凌派的udp客户端和服务端任务启动

eb7c524c-e10b-11ec-b80f-dac502259ad0.png


可以看到小凌派udp客户端的ip地址192.168.2.48和端口号65460,因为本次实验客户端没有指定本地端口号这个端口号是自动生成的每次可能都不一样。还有一个远端端口号6666,这个远端端口号就是我们网络调试助手已配置的端口号。这时pc想与小凌派udp客户端通信的关键三个信息都确定了。

小凌派udp服务端的ip地址192.168.2.48和端口号6666,这个类似tcp的服务端,监听6666端口的数据。


8、这时用于连接小凌派udp客户端网络调试工具就已经收到开发板发送的数据如下图

ebad888a-e10b-11ec-b80f-dac502259ad0.png


9、用网络调试工具往小凌派udp客户端发消息如下图,可以看到开发板已经收到数据。

ebd8f204-e10b-11ec-b80f-dac502259ad0.png


需要注意的是网络调试工具发送消息的远程主机需与开发板一致,本地主机端口号与开发板的远端端口一致,否则开发板无法收到消息。如下图

ec0f205e-e10b-11ec-b80f-dac502259ad0.png


10、往小凌派的udp服务端发送消息先填写小凌派开发板的ip与端口号如下图

ec4d1be8-e10b-11ec-b80f-dac502259ad0.png


再点发送消息如下图

ec87b032-e10b-11ec-b80f-dac502259ad0.png

从上图也可以看出小凌派udp 服务端接收到了网络调试工具的消息并且打印了消息来源的ip地址和端口号,可以看出与我们网络调试工具设置一致。


11、小凌派udp服务端监听的端口号是固定的,远程端口号并没限制,通过修改网络调试工具的端口号再与小凌派udp服务端通信。如下图把端口号改成9999再发送消息可以看出小凌派udp服务端接收打印的端口也随之改变。

ecbfa604-e10b-11ec-b80f-dac502259ad0.png


12、发送字符集修改,细心的小伙伴应该早就发现小凌派开发板数据接收显示有些异常,主要原因是发送的字符集没有改成utf-8造成的。在发送窗口右击,字符集编码选择utf-8编码。然后再发送数据。

ecf23272-e10b-11ec-b80f-dac502259ad0.png

ed6b562a-e10b-11ec-b80f-dac502259ad0.png


二、在使用小凌派开发板wifi-udp与虚拟机APP通信的步骤

这部分修改都是虚拟机app部分代码没特别说明以下修改都指修改虚拟机里的app文件

这部分具体代码添加在后面。本人这里使用的虚拟机为deepin社区版20.5,gcc版本为8.3.0


1、查看虚拟机ip是否与小凌派在同一网段,如下图ip为192.168.2.156 与小凌派在同一网段。

eda38c8e-e10b-11ec-b80f-dac502259ad0.png

2、修改 udp_cilent.c中的ip与端口号

#define SERVER_IP "192.168.2.48" //小凌派开发板的ip

#define SERVER_PORT 6666 //小凌派开发板udp服务端绑定的本地端口号


3、打开终端后进入 udp_cilent.c文件夹如下图 我源文件放在主目录下的work文件内。并输入gcc进行编译

edf977ac-e10b-11ec-b80f-dac502259ad0.png


4、查看编译文件ls -l udp_cilent*

ee497892-e10b-11ec-b80f-dac502259ad0.png

可以看到虚拟机里已生成了udp客户端app了


5、因为前面在测试与网络调试助手通信的时候小凌派开发板udp服务端已启动了,所以这里直接在虚拟机终端里运行udp客户端app。

如下图,左边为虚拟机udp客户端log,右边为小凌派log,可以看出虚拟机里的app 已经与小凌派正常通信了。

ee7438ac-e10b-11ec-b80f-dac502259ad0.png

从上图可以看出小凌派udp服务端接收到的消息ip与虚拟机的ip一致。



l虚拟机udp服务端app与客户端类似,这里就不详细说明,就强调一下不同的地方。

udp客户端的端口号是连接时产生的所以需要客户端先往服务端发送消息后,服务端解析出客户端的端口号后才能与之通信。

l小凌派udp客户端发送消息通过send()函数需要先设置远端ip和端口号。虚拟机udp服务端想与小凌派开发板udp客户端通信需要先修改小凌派里服务ip和端口,修改后重新编译烧录。如果想改成根据接收到不同ip的服务端消息,发送对应的响应消息。就需要把小凌派udp客户端远程ip改成htonl(INADDR_ANY),消息处理流程是先调用recvfrom()再调用sendto()。而虚拟机的服务端在bind()之后需要调用connect()设置目标ip地址和端口号。再向目标发送消息。

#define OC_SERVER_IP "192.168.2.156" //服务ip地址这里需要填虚拟机的ip

#define SERVER_PORT 6666

l虚拟机udp服务端先启动,再复位开发板。等待通信log 如下图

eeb6c0d2-e10b-11ec-b80f-dac502259ad0.png  

三、接下来分析一下代码的工作流程。

1、小凌派udp部分代码

首先包含必要的头文件


pYYBAGKV002AQYbsAABBGxqPKPE327.png



这些定义主要是 ip地址和端口号以及缓存大小

poYBAGKV01GAN_JCAAAczJpxz-A252.png


WifiLinkedInfo wifiinfo; //用于保存开发板本地ip



这部分是获取wifi连接信息,通过查询wifi连接信息确认wifi是否连接成功。只有wifi连接成功了才能进行udp通信

pYYBAGKV03uAQ14_AAEPy3v9WOM819.png


这部分是udp服务端接收消息处理

先进入recvfrom()会处于阻塞状态没有数据时一直阻塞

接收到pc客户端的消息后通过sendto()发响应消息给PC客户端。

这里需要注意的是sendto()里的客户端ip和端口信息来自于recvfrom()。

pYYBAGKV062AJkrjAADa8kpAHD4513.png


这部分是udp服务端任务代码

服务端处理流程

socket-->bind--->recvfrom-->sendto-->lwip_close

先通过socket()接口打开一个服务端socket文件

然后设置需要绑定的服务端ip地址及端口号。

最后等待接收消息数据并发送响应消息。

poYBAGKV07OAfNklAAEhWJ1_Yf8585.png


这部分是udp客户端的接收消息处理函数

先连接pc机的服务端,这里连接只是获取socket信息,然后解析出本地端口号。

接着发消息给服务端,这里不管连接与否。

发完消息进入阻塞接收消息。

当接收到pc的消息后进入循环发送状态。

pYYBAGKV1CSAALnvAAEBSWhJbmw528.png


这部分代码是udp客户端代码

客户端处理流程

socket-->connect-->send-->recvfrom-->lwip_close

先通过socket()接口创建客户端的socket文件。

然后设置客户端连接PC服务端的ip地址及端口号。

再进行connect连接。
pYYBAGKV1CqAK6mMAADnhl2xqfE055.png

这部分是udp创建客户端和服务端任务

可以看到在创建客户端和服务端任务前先阻塞判断wifi的连接状态。

只有wifi连接成功后才创建客户端和服务端任务。

poYBAGKV1FCAY_jCAABrQFu7y2U245.png


这部分是创建wifi udp 通信任务主要是为了使用APP_FEATURE_INIT(wifi_udp_example);

这样当OpenHarmony初始化完成后会自动执行此任务。

pYYBAGKV1FWAQQYNAACIb7rLn0U096.png



2、虚拟机udp app代码

这部分代码与开发板的类似就不详细说明了。

2.1、 udp_client.c

poYBAGKV1JuAf2aNAAGSVVCtL4I884.png


2.2、 udp_server.c

pYYBAGKV1KCASL01AAHPFIpyTOo763.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    6129

    浏览量

    113471
  • UDP通信
    +关注

    关注

    0

    文章

    21

    浏览量

    2245
  • RK2206
    +关注

    关注

    0

    文章

    38

    浏览量

    2482
  • 小凌派
    +关注

    关注

    0

    文章

    28

    浏览量

    1554
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3568开发板暗藏32位兼容开关?飞嵌入式带你一键解锁!

    RK3568是一款64位处理器,飞嵌入式为其提供的交叉编译器也是64位的,然而部分用户可能需要在RK3568开发板上运行32位应用。本文将详细阐述如何使用32位交叉编译器,编译出32
    的头像 发表于 07-19 08:49 4193次阅读
    <b class='flag-5'>RK</b>3568<b class='flag-5'>开发板</b>暗藏32位兼容开关?飞<b class='flag-5'>凌</b>嵌入式带你一键解锁!

    睿擎RK3506J开发板开箱记录、初步调试

    睿擎基于RK3506J开发RK3506J是一款三核A7+M0的入门级工业MPU,由于其价位低,性能优异,近期收到热捧,各家都出了很多RK
    的头像 发表于 06-20 20:43 1895次阅读
    睿擎<b class='flag-5'>派</b><b class='flag-5'>RK</b>3506J<b class='flag-5'>开发板</b>开箱记录、初步调试

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制FLASH外设

    1、实验简介 本实验将演示如何在小-RK2206开发板上使用IOT库的FLASH接口,进行F
    发表于 04-22 15:02

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制FLASH外设

    1、实验简介本实验将演示如何在小-RK2206开发板上使用IOT库的FLASH接口,进行FL
    的头像 发表于 04-22 14:49 694次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制FLASH外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制UART外设

    1、实验简介 本实验将演示如何在小-RK2206开发板上使用IOT库的UART接口,进行UA
    发表于 04-22 14:27

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制UART外设

    1、实验简介本实验将演示如何在小-RK2206开发板上使用IOT库的UART接口,进行UAR
    的头像 发表于 04-22 14:22 803次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制UART外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介 本实验将演示如何在小-RK2206开发板上使用IOT库的GPIO中断模式,进行
    发表于 04-21 11:08

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介本实验将演示如何在小-RK2206开发板上使用IOT库的GPIO中断模式,进行G
    的头像 发表于 04-21 10:39 895次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制GPIO中断

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介 本案例主要是如何在小-RK2206开发板上使用IOT库的GPIO接口,进行GPIO编程开发。 例程将创建一个任务,通过配置
    发表于 04-11 15:45

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介本案例主要是如何在小-RK2206开发板上使用IOT库的GPIO接口,进行GPIO编程开发。例程将创建一个任务,通过配置GP
    的头像 发表于 04-11 15:36 1623次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制GPIO外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制ADC外设

    1、案例简介 本案例主要讲解如何在小-RK2206开发板上使用IoT库的ADC接口,进行ADC编程开发。 例程内容为创建一个任务,读取按
    发表于 04-10 16:20

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制ADC外设

    1、案例简介本案例主要讲解如何在小-RK2206开发板上使用IoT库的ADC接口,进行ADC编程开发。例程内容为创建一个任务,读取按键的
    的头像 发表于 04-10 16:00 713次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制ADC外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制PWM外设

    1、案例简介 本案例是在小-RK2206开发板上使用IoT库PWM接口,进行PWM编程开发。 例程将创建一个任务,每隔5秒将PWM0~1
    发表于 04-09 09:37

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制PWM外设

    1、案例简介本案例是在小-RK2206开发板上使用IoT库PWM接口,进行PWM编程开发。例程将创建一个任务,每隔5秒将PWM0~10依
    的头像 发表于 04-09 08:59 2073次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制PWM外设

    RK2206高性能微控制器特性概览

    RK2206是一款集成了高性能CPU、DSP以及丰富存储和接口选项的微控制器,专为满足现代嵌入式系统的多样化需求而设计。 核心性能:RK2206搭载了Cortex-M4F CPU,主频高达
    的头像 发表于 02-12 17:43 1592次阅读