0

ESP32 ボードを MOSFET トランジスタを使用して 12V LED に接続し、touchPin を使用して操作します。アイデアは、2つの同一のボードを持つことであり、一方のボードでランプをオンにすると、Wifiを使用してもう一方のボードでも点灯するはずです(ボードは同じ物理的な場所に配置されず、異なるネットワークに接続されるため)。

それ自体は魅力のように機能しますが、GET 要求を介して他のボードのトランジスタ状態を取得しようとすると、意図したとおりに動作しません。つまり、トランジスタの状態が他のボードに渡されないため、LED には影響しません。 . エラーは私の void setup() にあるのではないかと思います。以下を参照してください

void setup() {
  Serial.begin(1155200);
  delay(1000);
  // Initialise the LED Pin as an output
  pinMode(transistor, OUTPUT);

  // Send a GET request to <IP>/led/<number>/state/<0 or 1>
  server.on("^\\/led\\/([0-9]+)\\/state\\/([0-9]+)$", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String ledNumber = request->pathArg(0); // currently unused - we use only a predefined LED number
    String state = request->pathArg(1);

    request->send(200, "text/plain", "LED: " + ledNumber + ", with state: " + state);
  });

または、以下に示すように、void loop() の for ループで:

void loop() {
  while (1) {
    
  touchValue = touchRead(touchPin);

  //Serial.print(touchValue);

  if (millis() - lastTimeButtonStateChanged > debounceDuration) {
  // check if the touchValue is below the threshold
  // if it is, set ledPin to HIGH

    buttonState = (touchValue < threshold) ? HIGH: LOW;

    if (buttonState != lastButtonState) {
      lastTimeButtonStateChanged = millis();
      lastButtonState = buttonState;
      if (buttonState == LOW) {
        transistorState = (transistorState == HIGH) ? LOW: HIGH;
        digitalWrite(transistor, transistorState);
        if(transistorState == LOW){
          transistorStateInt = 0;
        } else{
          transistorState = 1;
        }
      }
    }
  }
  for (auto const &host : Husarnet.listPeers()) {
    IPv6Address peerAddr = host.first;
    if(host.second == "master") {
      ;
    } else {
      AsyncClient* client_tcp = new AsyncClient;
      
      client_tcp->onConnect([](void *arg, AsyncClient *client) {
        String requestURL = "/led/1/state/" + String(transistorStateInt);
        String GETreq = String("GET ") + requestURL + " HTTP/1.1\r\n" + "Host: esp32\r\n" + "Connection: close\r\n\r\n";

        if ( client->canSend() && (client->space() > GETreq.length())){
          client->add(GETreq.c_str(), strlen(GETreq.c_str()));
            client->send();
        } else {
          Serial.printf("\r\nSENDING ERROR!\r\n");
        }
      }, client_tcp);

  }
}
4

0 に答える 0