在循环arduino中接收套接字(用套接字中断while循环)

Posted

技术标签:

【中文标题】在循环arduino中接收套接字(用套接字中断while循环)【英文标题】:Receive socket when in loop arduino (Interupt a while loop with a socket) 【发布时间】:2019-12-03 19:06:08 【问题描述】:

我目前正在做一个 arduino 项目。 arduino 是否通过 Web 套接字与 NodeJS 服务器通信。

套接字连接工作正常,没有问题。但我目前遇到的问题是,我希望能够使用来自 NodeJS 服务器的套接字发出来中断无限循环。

我发现一个页面可以解决这个问题,但只有一个按钮连接到 arduino。

Link to page (Interrupt with button)

这是我希望能够用套接字中断的循环:

bool loopRunning = true;

void rainbow(int wait) 
while(loopRunning == true) 

      for(long firstPixelHue = 0; firstPixelHue < 3*65536; firstPixelHue += 256) 
        for(int i=0; i<strip.numPixels(); i++)  
          int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
          strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
        
        strip.show(); 
        delay(wait);  
      
    

我想在收到套接字发出时将 loopRunning 设置为 false。

任何人有任何想法我可以如何实现这一点?

Page to the socket functionality that I use

【问题讨论】:

【参考方案1】:

看来您需要使用两个主要功能:

SocketIoClient::on(event, callback) - 将事件绑定到函数 SocketIoClient::loop() - 处理 websocket 并获取任何传入事件

我不能轻易测试这个,但根据文档,这样的东西应该可以工作:

bool loopRunning = true;
SocketIoClient webSocket;

void handleEvent(const char* payload, size_t length) 
  loopRunning = false;


void setup() 
  // ...
  // general setup code
  // ...

  webSocket.on("event", handleEvent); // call handleEvent when an event named "event" occurs
  webSocket.begin(/* ... whatever ... */);


void rainbow(int wait) 
  while(loopRunning == true) 
    for(long firstPixelHue = 0; firstPixelHue < 3*65536; firstPixelHue += 256) 
      for(int i=0; i<strip.numPixels(); i++)  
        int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
        strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
      
      strip.show();
      webSocket.loop(); // process any incoming websocket events
      delay(wait);
    
  

【讨论】:

我已经使用了你提到的两个主要功能。问题是当 while 循环被调用时,我无法再接收来自服务器的传入套接字。 @RobinFors,代码的主要补充是while循环中的webSocket.loop(); @RobinFors 如果你的代码已经包含了这些函数的使用(你分享的代码里面没有webSocket.loop())而且还是不行,请分享整个相关代码sn- p 我尝试按照你说的做,但仍然没有运气,当调用循环获取时,我无法再接收套接字。 @MichelleTilley 我们仍然无法从服务器获取任何套接字。

以上是关于在循环arduino中接收套接字(用套接字中断while循环)的主要内容,如果未能解决你的问题,请参考以下文章

vb2010 (vb.net )Socket套接字当网络中断时或服务器意外关机,客户端如何自动重新连接服务端

java TCP套接字消息中断

在服务器应用程序中处理中断信号的最佳方法?

使用用户输入中断while循环(通过arduino和python 2.7控制neopixels)

Arduino如何处理中断?

关于Arduino的串口中断