leo102 发表于 2013-10-28 19:23:09

跨网控制Arduino (用ENC28J60)

本帖最后由 leo102 于 2013-10-28 19:24 编辑

硬件 Arduino UNO Pro 3, 以太网控制器 ENC28J60用网线连接到路由器, LED灯,连接在Arduino的第七个引脚。
代码来自 zcbzjx 翻译的教程:http://www.geek-workshop.com/thread-3438-1-1.html#include <EtherCard.h>
#define RELAY_PIN      7

static byte mymac[]= {
0x74,0x69,0x69,0x2D,0x30,0x31};
static byte myip[]   = {
192,168,0,105};
byte Ethernet::buffer;定义MAC地址和ip地址。void setup () {
Serial.begin(57600);
Serial.println("WebRelay Demo");

if(!ether.begin(sizeof Ethernet::buffer, mymac, 10))
    Serial.println( "Failed to access Ethernet controller");
else
    Serial.println("Ethernet controller initialized");


ether.hisport = 8081; // 侦听端口:8081
if(!ether.staticSetup(myip))
    Serial.println("Failed to set IP address");

pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
relayStatus = false;
relayLabel = off;
linkLabel = on;
}初始化。设置Arduino的侦听端口为8081.

路由器设置如附件1所示。

用与Arduino同一局域网的电脑可以控制:浏览器里输入地址:http://192.168.0.105:8081,可以访问并控制Arduino。如附件2所示。

记录当前Arduino所连路由器的外网ip地址:122.XX.157.7,如附件3所示。

使用不在同一个网段的电脑访问:http://122.XX.157.7:8081,无法连接到Arduino。如附件4所示。


看了不少教程,大多都是用这个方法,应该是可行的。可是不知道为什么,我就是无法实现。求高手不吝指教。

Yeelink不在讨论范围之内。


ChunYong 发表于 2013-10-29 08:03:21

外网如果没有服务器 是需要公网IP的!

xiaoesky 发表于 2013-10-29 09:12:25

他用的是公网的IP,我也遇上这个问题,还没想到解决的办法,我想应该是没有做IP指向与解析造成无法实现外网控制吧。

szpapas 发表于 2013-10-29 09:25:06

两点:

1. Arduino的网关没有设置,不然出外网就没有路由了。
2. 在路由器上设置端口映射,或者虚拟主机。

Damn_intuition 发表于 2013-10-29 15:00:45

检测一下是不是公网IP,访问ip168等来客IP检测网站,看看是不是和自己的一样。

jjkason 发表于 2013-10-30 10:19:47

路由的主界面有个动态vpn服务,在里面登陆你的花生壳账户然后在设置虚拟服务就可以外网访问了,不过arduino我没有试过,在自己电脑上发布的网页到是可以访问的。

小松 发表于 2013-11-7 17:48:12

先映射下到某电脑确定外网到内网是正常再接你的设备更好, 电脑装个绿色版 的nginx就可以了

isilcala 发表于 2013-11-8 02:51:35

路由器里要设置端口转发 把8081端口转发到arduino所在的内网ip

Simon 发表于 2013-11-8 08:59:55

路由器的端口映射要设置好,只想arduino设备的地址跟端口,否则是不能访问的。
页: [1]
查看完整版本: 跨网控制Arduino (用ENC28J60)