Arduino-WiFi屏蔽连接到WiFi网络,但可以';t交互:错误连接被拒绝

Arduino-WiFi屏蔽连接到WiFi网络,但可以';t交互:错误连接被拒绝,arduino,network-programming,Arduino,Network Programming,我有一个Arduino Uno和一个WiFi屏蔽;该项目的目标是从传感器获取数据,并通过WiFi将其发送到PC上运行的处理草图 从各种官方示例中提取我的大部分代码,我成功地使用WiFi屏蔽连接到WiFi(WPA)网络(根据承载网络的董事会和智能手机) 然而,当我试图从电路板发送/接收数据时,我总是会收到一个错误,我不知道它来自哪里 我怀疑错误来自我的代码,因为它几乎只是复制和粘贴,但以下是相关部分以防万一: 初始化: char ssid[] = "MiniStepper"; // Network

我有一个Arduino Uno和一个WiFi屏蔽;该项目的目标是从传感器获取数据,并通过WiFi将其发送到PC上运行的处理草图

从各种官方示例中提取我的大部分代码,我成功地使用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地址(承载网络的智能手机也提供了相同的IP地址):

这将返回“错误连接被拒绝”

我是物联网新手,我猜这可能是一个配置问题(防火墙,…); 我的电脑运行的是Ubuntu15.10(Willy Werewolf)(我在Windows7电脑上也尝试了同样的结果), 网络由WPA加密,由XPeria U托管(我尝试了其他智能手机托管的WPA网络,结果相同), 带有Uno板的arduino WiFi屏蔽(购买时间不到3个月,所以我猜这是最新版本)

我在Arduino论坛上的研究或这里的研究只让结果像“Arduino 1.0.5不起作用,回到Arduino 1.0.3”,但目前的版本是1.8.2,所以我不确定返回这么多是否有帮助

有什么我错过的吗

编辑。 下面是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
/home/ubuntu>ping 192.168.43.200
PING 192.168.43.200(192.168.43.200)56(84)字节的数据。
192.168.43.200中的64字节:icmp_seq=1 ttl=255时间=9.54毫秒
192.168.43.200中的64字节:icmp_seq=2 ttl=255时间=6.01毫秒
192.168.43.200中的64字节:icmp_seq=3 ttl=255时间=6.15毫秒
192.168.43.200中的64字节:icmp_seq=4 ttl=255时间=7.23毫秒
192.168.43.200中的64字节:icmp_seq=5 ttl=255时间=7.03毫秒
---192.168.43.200平统计---
传输31个数据包,接收31个,0%数据包丢失,时间30048ms
rtt最小值/平均值/最大值/mdev=4.112/6.415/11.377/1.706 ms

如果错误是ERR\u CONNECTION\u被拒绝,很可能是因为您没有在Arduino中打开端口。因此,您应该检查应用程序是否正在侦听该端口,或者Arduino是否正在运行任何防火墙阻止连接(我怀疑情况是否如此)

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

经过更多的研究,我了解到,显然是构造器使用过时的固件构建WiFi屏蔽。这个问题通过新的升级解决了(2012年之前发布,这就是为什么我从未想到会是这样)

例如,以下是在linux下升级WiFi屏蔽的步骤(如果有人需要,这与以下步骤基本相同):

首先,安装软件包dfu编程器:

sudo apt-get install dfu-programmer
(上面链接的官方页面中有打字错误)或

现在断开您的WiFi屏蔽与Arduino板的连接(在我的例子中是Uno),然后连接J3跳线:

使用迷你USB电缆(仍不带主板)将WiFi屏蔽直接连接到计算机,然后按“重置”按钮

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

sudo ./ArduinoWifiShield_upgrade.sh -a <the path where you installed Arduino, that contains the harware folder> -f all
sudo./ArduinoWifiShield\u upgrade.sh-a-f all
如果不起作用,请重试几次,对我来说,在第4次或第5次之后它就起作用了

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


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

我假设您在PC中运行浏览器,192.168.43.200是Arduino的IP地址。你应该开始分部分分析这个问题。3个问题:1-ping到192.168.43.200有效吗?2-如果您登录AP,您能看到Arduino已连接吗?3-Arduino是从AP的DHCP接收IP地址还是静态配置的?您的假设是正确的;2:是的,3:在不同的网络上进行测试会得到不同的IP,所以它不是静态配置的。但我不知道问题1…你能在电脑的命令行中运行命令“ping 192.168.43.200”吗?(假设Arduino的IP仍然是192.168.43.200)并将结果复制到这里(刚刚编辑了文章以添加ping命令),它似乎可以工作。知道是什么引起的吗?
sudo aptitude install dfu-programmer
sudo ./ArduinoWifiShield_upgrade.sh -a <the path where you installed Arduino, that contains the harware folder> -f all