Arduino - WiFi屏蔽连接到WiFi网络但无法互动:ERR_CONNECTION_REFUSED

时间:2017-04-04 20:51:25

标签: arduino network-programming

我有一个Arduino Uno和一个WiFi盾牌;项目目标是从传感器获取数据并将其发送到通过WiFi在PC上运行的Processing sketch。

从我的各种官方例子中获取大部分代码,我设法使用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进行访问(我尝试使用Firefox但没有结果),使用WiFi.localIP()给出的IP地址(托管网络的智能手机也提供相同的内容):

  

http://192.168.43.200/

返回" ERR_CONNECTION_REFUSED"。

我是物联网的新手,我猜它可能是配置问题(防火墙......); 我的电脑正在运行Ubuntu 15.10(Willy Werewolf)(我尝试使用Windows 7 PC获得相同的结果), 网络由WPA加密,由XPeria U托管(我尝试过与其他智能手机托管的WPA网络相同的结果), 带有Uno板的arduino WiFi屏蔽(不到3个月前购买,所以我猜测它是最新版本)。

我对Arduino论坛的研究或者这里只有#"这样的结果在Arduino 1.0.5中不起作用,请回到Arduino 1.0.3",但当前版本是1.8.2 ,所以我不确定回去这么多会有所帮助。

我错过了什么吗?

EDIT。 这是ping:

/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

2 个答案:

答案 0 :(得分: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消息。

答案 1 :(得分: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下升级WiFi屏蔽的步骤(如果有人需要它,这与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

使用迷你USB线(仍然没有主板)直接将WiFi防护罩连接到计算机,然后按“复位”按钮。

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

ArduinoWifiShield_upgrade.sh

如果它不起作用,请重试几次,对我来说,它在第4或第5次之后有效。

工作时,拔下mini-USB线,拔下J3跳线。下次当您尝试将某些代码上传到WiFi防护罩时,IDE中可能会出现错误,如果您这样做,请按下防护罩上的“重置”按钮。

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