Arduino WiFly-特设网络设置

Arduino WiFly-特设网络设置,arduino,Arduino,我目前正在与Arduino合作,试图构建一个设备可以连接并向其发送web请求的自组织网络。我目前遇到的问题是,我只能设置一个连接,然后当该连接终止时(使用client.stop()),服务器不会拾取所有后续连接,甚至一个命令也会停在那里。当我重置服务器时启动的第一个连接工作正常,并且我能够与服务器对话;但是在那之后,Arduino再也找不到新客户了(尽管它正在尝试使用给定的库) 我正在使用SparkFun库来制作WiFly盾牌,还有一个 我当前的代码基于他们的默认示例“WiFly_AdHoc_e

我目前正在与Arduino合作,试图构建一个设备可以连接并向其发送web请求的自组织网络。我目前遇到的问题是,我只能设置一个连接,然后当该连接终止时(使用
client.stop()
),服务器不会拾取所有后续连接,甚至一个命令也会停在那里。当我重置服务器时启动的第一个连接工作正常,并且我能够与服务器对话;但是在那之后,Arduino再也找不到新客户了(尽管它正在尝试使用给定的库)

我正在使用SparkFun库来制作WiFly盾牌,还有一个

我当前的代码基于他们的默认示例“WiFly_AdHoc_example”,但我必须删除一些东西才能启动网络,这可能是导致此问题的原因

这是我正在运行的文件

#包括
#包括
//#包括
//软件序列mySerial(5,4)//未使用示例中的零件(见下文)
WiFlyServer(80)//如果使用telnet进行调试,请改用telnet端口
无效设置()
{
Serial.begin(9600);
//下面的代码来自示例,但当我运行它时,WiFly将挂起
//在Wifly.begin()上。没有它,Wifly就可以正常启动。
//mySerial.begin(9600);
//setUart(&mySerial);//告诉WiFly库我们不是
//使用SPIUart
Serial.println(“****************开始WiFly*******************”);
//启用临时模式
WiFly.begin(真);
println(“WiFly启动,创建网络”);
如果(!WiFly.createAdHocNetwork(“WiFly”))
{
Serial.print(“未能创建临时网络”);
而(1)
{
//坚持失败。
}
}
Serial.println(“创建的网络”);
序列号。打印(“IP:”);
Serial.println(WiFly.ip());
Serial.println(“启动服务器…”);
server.begin();
打印(“服务器已启动,正在等待客户端。”);
}
void循环()
{
延迟(200);
WiFlyClient=server.available();
如果(客户)
{
Serial.println(“找到客户”);
//用于存储接收到的命令的字符串
字符串当前_命令=”;
while(client.connected())
{
if(client.available())
{
//从发送的请求中获取一个字符。
char c=client.read();
if(c='#'| | c=='\n')//外部输出结束
{
当前_命令=”;
}
如果(c!='\n'),则为else
{
当前_命令+=c;
}
如果(当前_命令==“获取”)
{
//输出每个模拟输入引脚的值
对于(int i=0;i<6;i++)
{
客户端打印(“模拟输入”);
客户。打印(i);
客户。打印(“is”);
客户。打印(模拟阅读(i));
client.println(“
”); } } else if(当前_命令==“hello”) { client.println(“你好,我还在这里。”); } else if(当前_命令==“退出”) { client.println(“再见…”); client.stop(); 当前_命令==“”; 打破 } else if(当前_命令==“*打开*”) { 当前_命令==“”; } } } //为web浏览器提供接收数据的时间 延迟(200); //关闭连接 client.stop(); } }
这个脚本只是我为测试而设置的一个迷你协议。一旦连接到wifly模块,您就可以发送诸如“get”、“hello”或“quit”之类的文本,wifly模块应该会做出响应

使用我可以成功连接(第一次)并向发送命令,包括“退出”以终止连接(调用
client.stop()
方法)。但是当我尝试重新连接时,它说连接成功了,但实际上它仍然在循环,认为客户端仍然是错误的。什么

我知道,对了,我从vs那里得到的信息有好有坏。由于仍在循环等待计算结果为true的客户端,因此所有命令都无法正常工作。我将看一看,看能否找出问题所在,因为不知何故,server.available()方法找不到新的客户机

我注意到库代码中有很多待办事项


所以我找到了问题的原因。它是在档案里的。导致重新连接问题的代码实际上是
server.availible()
方法。在方法的顶部,有一个复选框:

//TODO:确保没有活动的非服务器客户端连接。
如果(!WiFly.serverConnectionActive){
activeClient.\u端口=0;
}
由于某种原因,当我把这个评论出来时,我可以很好地连接和重新连接,一切都正常运行。现在我将深入到库中,看看是否可以解决这个问题,我不确定这是在做什么,但当服务器连接不活动并且以某种方式阻止后续连接时,会调用它。此解决方案的问题在于,始终认为已找到一个客户端,因为
client
client.connected()
即使不存在,也会计算为true。即使是
client.available()。即使有了这个缺陷,它仍然会拾取一个
WiFly.begin(true);
Serial.println("WiFly started, creating network.");

if (!WiFly.createAdHocNetwork("wifly")) 
{
    Serial.print("Failed to create ad hoc network.");
    while (1) 
    {
        // Hang on failure.
    }
}