极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15464|回复: 9

关于arduino的程序问题,求解

[复制链接]
发表于 2015-8-21 09:47:24 | 显示全部楼层 |阅读模式
最近在做一个项目
要求:以太网盾作为客户端,我发送一个字符或者命令,以太网能接收并将相应的管脚拉高或拉低
硬件:arduino板,以太网盾(ENC28J60)
问题:我发现我下的ENC28J60的库里都是网页的历程,有没有作为客户端的库历程,还有我要实现上述的功能的话,改程序的思想应该是什么样的?求大神帮助
回复

使用道具 举报

发表于 2015-8-21 10:18:53 | 显示全部楼层
如果这样的话,你需要写一个网络应用程序,直接发数据

个人建议,你还是按照他库中,写成浏览器能访问的形式,这样便于测试

然后应用程序上按照网页的访问用 post 或者 get 传递参数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-21 10:26:55 | 显示全部楼层
zoologist 发表于 2015-8-21 10:18
如果这样的话,你需要写一个网络应用程序,直接发数据

个人建议,你还是按照他库中,写成浏览器能访问的 ...

我的需求是不通过网页,因为我的发送端是一个类似于只能主机的形式,它只要访问我的ip地址,然后就能发送指令
图片是我的调试工具,只用到右边的模块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-8-21 11:12:34 | 显示全部楼层
不知 EthernetUdp 是否可套用在 ENC28J60?
你可以參考 Arduino IDE 的 Examples->Ethernet->UDPSendReceiveString 例子.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-21 11:15:38 | 显示全部楼层
Super169 发表于 2015-8-21 11:12
不知 EthernetUdp 是否可套用在 ENC28J60?
你可以參考 Arduino IDE 的 Examples->Ethernet->UDPSendReceiv ...

这两个库好像是不能通用的吧?
回复 支持 反对

使用道具 举报

发表于 2015-8-21 13:40:11 | 显示全部楼层
其实我没明白到底要实现什么功能。。如果用arduino作客户端同时要实现控制arduino,那么至少你的arduino要先连接到某个服务器端,比如你贴图的那个软件。

至于你不想用网页来控制,说到底就是不去实现http协议的部分,那问题其实更简单了。你先找到你使用的库的一个关于网页的客户端的例程,去掉其中和http有关的部分,剩下的就应该差不多了。

这样改出来其实还是tcp的,如果你想用udp,那就找个udp的来改。使用udp的话无所谓客户或者服务器,也许更能满足你的要求。




回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-21 13:46:08 | 显示全部楼层
nnoobbee 发表于 2015-8-21 13:40
其实我没明白到底要实现什么功能。。如果用arduino作客户端同时要实现控制arduino,那么至少你的arduino要先 ...

我确实有服务端,我的服务端是一个只能主机,我用上面的调试工具就是仿真他的功能。至于你说的网页部分去掉http部分我不是很懂,我也是最近才接触arduino。你能具体的说一下吗?谢谢!
回复 支持 反对

使用道具 举报

发表于 2015-8-21 14:20:06 | 显示全部楼层
本帖最后由 Super169 于 2015-8-21 14:21 编辑
eatpotato 发表于 2015-8-21 11:15
这两个库好像是不能通用的吧?


可以試試 UIPEthernet 的庫

UIPEthernet: A plugin-replacement of the stock Arduino Ethernet library for ENC28J60 shields and breakout boards. Full support for persistent (streaming) TCP-connections and UDP (Client and Server each), ARP, ICMP, DHCP and DNS. Build around Adam Dunkels uIP Stack.

https://github.com/ntruchsess/arduino_uip

Examples 中已包括了 TCP 及 UDP 的例子, 可以作為參考.
回复 支持 反对

使用道具 举报

发表于 2015-8-21 18:36:40 | 显示全部楼层
eatpotato 发表于 2015-8-21 13:46
我确实有服务端,我的服务端是一个只能主机,我用上面的调试工具就是仿真他的功能。至于你说的网页部分去 ...

噢是这样,我本来看你说你用的例子里面都是关于web的,而你不想用web的方式通信。其实web本身在网络的tcp层的基础上又增加了一个http协议层,这个协议层是基于文本的,说白了就是用已经建立好的tcp连接去发送和应答一些约定好的格式的消息。这些消息的内容应该能在你那些关于web的例子里面找到,比如你肯定能看到它发送或者接收了像:"GET / HTTP...", "HTTP/1.0 200 OK"这样类似格式的内容,而这些就是http协议本身要求实现的部分了,那你扔掉它们剩下的就只是tcp了。如果你不是特别了解又很感兴趣,你可以在网上搜一下相关的信息。

我看了看Super169发的那个库的链接,你可以试试,我觉得应该行得通。

另外我多说一句,ENC28J60其实就是提供了SPI接口的以太网MAC+PHY,离应用层还差tcp/ip协议栈要去实现,而那个链接里面的uip就是这样一个协议栈,所以能满足你的要求。在Arduino这样资源有限的平台上,我个人觉得像官方的Ethernet Shield是更好的选择,因为它用硬件方式实现了tcp/ip协议栈,而且库有官方的支持。希望能帮到你。
回复 支持 反对

使用道具 举报

发表于 2015-8-22 07:47:20 | 显示全部楼层
上面有朋友说到  “你先找到你使用的库的一个关于网页的客户端的例程,去掉其中和http有关的部分,剩下的就应该差不多了。”这就是关键了,其实很简单的
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 08:20 , Processed in 0.061118 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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