极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22283|回复: 21

question of udp communication between arduino and PC via UDP

[复制链接]
发表于 2015-9-22 18:44:38 | 显示全部楼层 |阅读模式
本帖最后由 himawaliss 于 2015-9-22 18:46 编辑

大家好!

我现在在用ethernat shield 通过UDP 和电脑通信,关于UDP通信我有些问题。
1, 路由器是必要的吗?可以把ethernet shield直接用R45连载电脑上么?
2, mac address 可以自己随机设计一个吗?
3, IP地址是固定的吗? 是以太网的ipv4 还是局域网的ipv4?
4 ,  localhost和localport有啥区别?

谢谢各位大神了!!!
回复

使用道具 举报

发表于 2015-9-22 19:15:53 | 显示全部楼层
1.理论上可以直连,但是直连的话不清楚是不是线序也要变(其实有个交叉的问题,但是很多网卡可以自动交叉)
2.可以随机给,但是有些板卡有限制,比如最前的第一位必须是0之类的
3.看 dhcp 给的ip,或者你直接给的静态ip.  以太网和局域网不是一个意思么
4.locaolhost 一般是本机, localport不知道什么意思,有上下文么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-22 19:34:55 | 显示全部楼层
zoologist 发表于 2015-9-22 19:15
1.理论上可以直连,但是直连的话不清楚是不是线序也要变(其实有个交叉的问题,但是很多网卡可以自动交叉) ...

关于第三问是因为在command里面输入ipconfig然后出来的有Ethernet IP 和LAN IP是不一样。
第四问是因为我在arduino的code里面看到的是设置localport
  1. IPAddress ip(192, 168,0 ,29);
  2. unsigned int localPort = 5000;     
复制代码
,但是我同学说他在电脑里面是将数据传到localhost,所以我不清楚这两个是不是同一个东西。
然后我想问一下,路由器的功能是否是让PC和arduino在一个局域网内,然后分配一个IP 给arduino?

我将数据传送到PC的localhost,然后用arduino从localhost读出数据。localhost和IP是用一个还是用两个不一样?
回复 支持 反对

使用道具 举报

发表于 2015-9-22 21:03:15 | 显示全部楼层
ipconfig 看到的是你本机的 IP  啊,和设备的IP肯定是不同的。

如果你想在本机看设备的ip,可以试试 arp -a

localport应该是 tcp/ip 通讯中的端口,比如:http://192.168.0.1:80 后面就是端口号(http协议走80 port)

路由器的功能是否是让PC和arduino在一个局域网内,然后分配一个IP 给arduino, 就是这样的

localhost说的是你自己的电脑

你要将数据传到 arduino的 ip:port 上,然后arduino可以把数据收取下来
回复 支持 反对

使用道具 举报

发表于 2015-9-23 04:30:39 | 显示全部楼层
1:不是必要的,但是一般情况下连接电脑需要交叉网线;
2:可以自己设计;
3:不是固定的,只是一般推荐局域网中使用C类地址;
4:根据字面意思,host是指主机,port是指端口.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 07:04:32 | 显示全部楼层
zoologist 发表于 2015-9-22 21:03
ipconfig 看到的是你本机的 IP  啊,和设备的IP肯定是不同的。

如果你想在本机看设备的ip,可以试试 arp ...

还有就是我将arduino接到路由器上的时候,我需要将电脑也接到路由器上么?
回复 支持 反对

使用道具 举报

发表于 2015-9-23 07:57:39 | 显示全部楼层
himawaliss 发表于 2015-9-23 07:04
还有就是我将arduino接到路由器上的时候,我需要将电脑也接到路由器上么?

当然了啊,必须的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 11:35:38 | 显示全部楼层
liuxue4503 发表于 2015-9-23 04:30
1:不是必要的,但是一般情况下连接电脑需要交叉网线;
2:可以自己设计;
3:不是固定的,只是一般推荐局域网 ...

我的网线的两端是一样的颜色顺序,这个应该不是交叉网线吧。
请问局域网的c类地址在哪里看?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 13:04:26 | 显示全部楼层
zoologist 发表于 2015-9-22 21:03
ipconfig 看到的是你本机的 IP  啊,和设备的IP肯定是不同的。

如果你想在本机看设备的ip,可以试试 arp ...

你好,我还有一个问题关于通信的端口问题的,这个端口我是直接设置一个比如你说的80或者8888?还是我写个程序让信号自己去找那个未被占用的端口?
还有就是我的信号放置端口和arduino信号接收的端口是同一个端口,对么?
回复 支持 反对

使用道具 举报

发表于 2015-9-23 14:06:11 | 显示全部楼层
himawaliss 发表于 2015-9-23 13:04
你好,我还有一个问题关于通信的端口问题的,这个端口我是直接设置一个比如你说的80或者8888?还是我写个 ...

直接设置一个Port就好。

arduino 设置的这个 port和你程序的要一致
回复 支持 反对

使用道具 举报

发表于 2015-9-23 17:03:33 | 显示全部楼层
himawaliss 发表于 2015-9-23 11:35
我的网线的两端是一样的颜色顺序,这个应该不是交叉网线吧。
请问局域网的c类地址在哪里看?

两端一样颜色的不是交叉线,交叉线两边线不一样,分别是12对调,36对调。C类最典型就是192.168开头的这些。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 17:18:49 | 显示全部楼层
zoologist 发表于 2015-9-23 14:06
直接设置一个Port就好。

arduino 设置的这个 port和你程序的要一致

大神,太感谢你了。我现在可以从UDP接收信号了。
现在接收的信号有很多而且有的是没有用的信号。我想筛选一下信号,比如说我只要其中一行“signal(0,0) 2.3456”。在c++中是用regex,但是arduino里面好像没有这个代码。
还有就是我接收这行字符串后我想只保留数字的字符串并把它转换成数值。我有用atol,但是这个代码只能将数字型的字符串变成数值,不能将字母型的字符串去掉。
大神,请给我一些代码提示,万分的感谢!
回复 支持 反对

使用道具 举报

发表于 2015-9-23 22:28:44 | 显示全部楼层
himawaliss 发表于 2015-9-23 17:18
大神,太感谢你了。我现在可以从UDP接收信号了。
现在接收的信号有很多而且有的是没有用的信号。我想筛选 ...

arduino没有正则表达式库,因为太费空间了
你看看和上位机协调一下,直接发送有用的呗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-24 08:30:45 | 显示全部楼层
zoologist 发表于 2015-9-23 22:28
arduino没有正则表达式库,因为太费空间了
你看看和上位机协调一下,直接发送有用的呗

你说空间是存储空间么?意思是如果我要实现的话就要用很长的一段代码去实现,会占用空间?让arduino处理数据的速度慢下来?
回复 支持 反对

使用道具 举报

发表于 2015-9-24 09:36:47 | 显示全部楼层
himawaliss 发表于 2015-9-24 08:30
你说空间是存储空间么?意思是如果我要实现的话就要用很长的一段代码去实现,会占用空间?让arduino处理数 ...

arduino 板载空间很小的意思,上下位机都是你自己写,就不要搞那么多冗余数据了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-18 01:58 , Processed in 0.037363 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表