跨网控制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不在讨论范围之内。
外网如果没有服务器 是需要公网IP的! 他用的是公网的IP,我也遇上这个问题,还没想到解决的办法,我想应该是没有做IP指向与解析造成无法实现外网控制吧。 两点:
1. Arduino的网关没有设置,不然出外网就没有路由了。
2. 在路由器上设置端口映射,或者虚拟主机。 检测一下是不是公网IP,访问ip168等来客IP检测网站,看看是不是和自己的一样。 路由的主界面有个动态vpn服务,在里面登陆你的花生壳账户然后在设置虚拟服务就可以外网访问了,不过arduino我没有试过,在自己电脑上发布的网页到是可以访问的。 先映射下到某电脑确定外网到内网是正常再接你的设备更好, 电脑装个绿色版 的nginx就可以了 路由器里要设置端口转发 把8081端口转发到arduino所在的内网ip 路由器的端口映射要设置好,只想arduino设备的地址跟端口,否则是不能访问的。
页:
[1]