使用两个 ESP32 - 从 Thingspeak 读取和写入数据来控制 LIGHT

问题描述

我需要什么 如何使用 ESP32 以正确的方式从 Thingspeak 读取和写入数据。

设置:

  1. 一个 ESP32 用按钮控制 5 个灯
  2. 连接到触摸屏显示的其他 ESP32 远程控制灯光
  3. 从 Thingspeak 云的同一数据源写入/读取数据。

我正在开发一个基于 ESP32 的项目,我正在控制 5 个交流电源灯,每个灯都有自己的按钮。该项目可以使用触摸屏 Nextion 显示器进行远程控制,该显示器再次由另一个 ESP32 控制。灯光状态(开/关)数据存储在 Thingspeak 云上。

问题: 由于可以使用按钮手动控制灯,也可以通过 Thingspeak 远程使用触摸屏控制灯,因此我很难设计读写架构。

目前我正在 ESP32 上使用按钮库 (JC_Button.h) 的去抖动运行代码。按钮状态的每次变化都会触发开关灯的开/关并更新云上的状态。类似地,有一个函数可以从云端接收状态并更新灯的开/关。问题是我无法正确设计系统,我可以清楚地显示无缝管理读写控制。

我不知道如何设计架构,以便当我按下按钮以及有人远程监视和控制设置时,我的读写 LED 状态在灯上正确可见。

代码片段 ...

int deBounceState1 = 0; /* If there is change in push button state,block reading data from cloud -> Update cloud with new status -> 
Read data from cloud and set the light state*/

int state0,state1,state2,state3 = 0; // Variable to store state of lights 
int stateR0,stateR1,stateR2,stateR3 = 0; // Read light state from cloud

...

//Function that reads button state
btn1.read(); // Reads the state of the button
if (btn1.changed()) {
  deBounceState1 = 1;
  digitalWrite(light1,btn1.toggleState());
  //Serial.println("Button 1 pressed............");
  state0=btn1.toggleState();     
  //Serial.println(state0);      
} else {
  deBounceState1 = 0;
  //Serial.println(state0);    
  //Serial.println("Button 1 no change");
}

...

void loop() {
   deBounce();
   if (deBounceState1==1 || deBounceState2==1 || deBounceState3 ==1 || deBounceState4 ==1){
    controlOutput();
    delayLoop();
   } 
}

...

void delayLoop() {
   static long currentMillis;
   static byte statCounter = 0;
   if (millis() - currentMillis >= interval)
   {
      if (statCounter> 10)
      {
       statCounter = 0;
       stateChangeUpdate();
       deBounceState1=0;
       deBounceState2=0;
       deBounceState3=0;
       deBounceState4=0;
       readChannel();
      }
      statCounter++;
      Serial.println(statCounter);
      currentMillis = millis();
   }
}

...

我知道这些信息不足以解释问题,但请随时提出问题。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)