2017-04-04 298 views
0

我有一个Arduino Uno和一个WiFi屏蔽;项目的目标是从传感器获取数据并将其发送到通过WiFi在PC上运行的处理草图。Arduino - WiFi屏蔽连接到WiFi网络,但不能互动:ERR_CONNECTION_REFUSED

从各种官方示例中获取大部分代码,我设法使WiFi屏蔽成功连接到WiFi(WPA)网络(根据主板和托管网络的智能手机)。

但是,当我尝试从电路板发送/接收数据时,我总是遇到错误,我不知道它来自哪里。

我怀疑错误来自我的代码,因为它几乎只复制和粘贴,但这里有相关部分以防万一:

动初始化:

char ssid[] = "MiniStepper"; // Network name 
char pass[] = "Test1234"; // Network code 
int keyIndex = 0; // Network key 
int statut = WL_IDLE_STATUS; 
WiFiServer server(80); 

设置:

void beginWiFi(){ // called in setup() 
    // Connection to the network (working, so omitted) 
    //... 

    server.begin(); 
} 

应对要求:

void connexionRead(){ // called in loop() 

    WiFiClient client = server.available(); 
    if(!client) return; 

    Serial.println("New connexion !"); // This never prints, so I'm sure the problem is earlier 

    // ...code sending back a HTML file with the HTTP protocol 
} 

我正在使用Chrome访问(我试过火狐没有结果也一样),使用WiFi.localIP()(托管网络的智能手机提供相同)给出的IP地址:

http://192.168.43.200/

它给出了“ERR_CONNECTION_REFUSED”。

我对物联网真的很陌生,我猜这可能是一个配置问题(防火墙,...);我的电脑运行的是Ubuntu 15.10(Willy Werewolf)(我试过用Windows 7的PC也有同样的结果), 这个网络是由WPA加密的,由XPeria U托管(我尝试过用其他智能手机托管的WPA网络同样的结果), Arduino WiFi盾与Uno板(购买不到3个月前,所以我猜这是最新版本)。

我对Arduino论坛的研究或者只是让结果像“不能在Arduino 1.0.5中工作,回到Arduino 1.0.3”,但是现在的版本是1.8.2,所以我没有真的很确定如果回去这么多会有帮助。

有什么我错过了吗?

编辑。 这里是平:

/home/ubuntu>ping 192.168.43.200 
PING 192.168.43.200 (192.168.43.200) 56(84) bytes of data. 
64 bytes from 192.168.43.200: icmp_seq=1 ttl=255 time=9.54 ms 
64 bytes from 192.168.43.200: icmp_seq=2 ttl=255 time=6.01 ms 
64 bytes from 192.168.43.200: icmp_seq=3 ttl=255 time=6.15 ms 
64 bytes from 192.168.43.200: icmp_seq=4 ttl=255 time=7.23 ms 
64 bytes from 192.168.43.200: icmp_seq=5 ttl=255 time=7.03 ms 
<and more> 
--- 192.168.43.200 ping statistics --- 
31 packets transmitted, 31 received, 0% packet loss, time 30048ms 
rtt min/avg/max/mdev = 4.112/6.415/11.377/1.706 ms 
+0

我假定你在你的PC上运行浏览器,192.168.43.200是你的Arduino的IP地址。你应该开始分析问题。 3个问题:1 - ping到192.168.43.200工作? 2 - 如果您登录AP,您能看到Arduino连接吗? 3 - Arduino是从AP的DHCP接收IP地址还是静态配置的? – rodolk

+0

你的假设是正确的; 2:是的,3:不同网络的测试给出了不同的IP地址,所以它不是静态配置的。 – CLOVIS

+0

虽然我不知道问题1 ... – CLOVIS

回答

0

经过一些研究,我了解到,构造函数显然构建了带有过时固件的WiFi Shields。这个问题是通过新的升级解决的(2012年之前发布的,这就是为什么我从来没有想到它会是这种情况)。

// Use this line in the Arduino code : 
Serial.println(WiFi.firmwareVersion()); 
// If it doesn't print 1.1.0, you're outdated. 

例如,这里有升级linux下的无线屏蔽的步骤(万一有人需要它,这是因为official page大致相同):

首先,安装包dfu-programmer

sudo apt-get install dfu-programmer 

(没有在上面链接官方的一个错字)

sudo aptitude install dfu-programmer 

现在断开您的WiFi屏蔽与Arduino板(我的情况为Uno),并连接J3跳线:picture of the J3 jumper, called 'DFU programming jumper' here

使用mini-USB电缆(仍然没有主板)直接将WiFi护罩连接到电脑,请按'重置'按钮。

假设您的Arduino IDE下载早于2012年(否则请按照官方页面上的步骤下载文件),请转到安装它的位置,然后harware/arduino/avr/firmwares/wifishield/scripts,您应该会看到一个名为ArduinoWifiShield_upgrade.sh的脚本。就在此文件夹中打开一个终端:

sudo ./ArduinoWifiShield_upgrade.sh -a <the path where you installed Arduino, that contains the harware folder> -f all 

重试几次,如果它不能正常工作,它的第四或第五的时间,我工作后。

当它工作时,拔下迷你USB电缆,拔掉J3跳线。下次尝试将一些代码上传到WiFi屏蔽时,IDE中可能会出现错误,如果是这样,请按下屏蔽上的“重置”按钮。

这些步骤解决了我的问题。

0

如果错误ERR_CONNECTION_REFUSED它是最有可能是因为你没有足够的端口Arduino的开做。所以你应该检查应用程序是否正在监听端口,或者如果Arduino正在运行防火墙来阻止连接(我怀疑是这种情况)。

同样,这是假定Arduino是地址192.168.43.200。 要调试此问题,您可以使用Wireshark,在您的PC中运行它来嗅探流量到192.168.43.200。您应该看到传出的TCP消息到192.168.43.200:80,然后返回TCP RST消息。

相关问题