Dringend, Servo über Alexa steuern

Glaube habe ich hinbekommen ? aber nun ja es ist ein NodeMCU Lolin V3

Jetzt hängt es an der Servo lib glaube ich, vermutlich weil kein ESP32 ist

#include <Servo.h>

#include <ArduinoWiFiServer.h>
#include <BearSSLHelpers.h>
#include <CertStoreBearSSL.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiGratuitous.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiClientSecureBearSSL.h>
#include <WiFiServer.h>
#include <WiFiServerSecure.h>
#include <WiFiServerSecureBearSSL.h>
#include <WiFiUdp.h>

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"

// edit it according to your router configuration
#define WIFI_SSID "xxxx"
#define WIFI_PASS "xxx"

fauxmoESP fauxmo;

#include <ESP3266Servo.h>
constexpr byte servoPin = D4;
constexpr int  servoPosLinks  = 0;
constexpr int  servoPosRechts = 90;

Servo servo;

// -----------------------------------------------------------------------------

#define SERIAL_BAUDRATE     115200

#define ID_RITTER_RECHTS         "Ritter rechts"
#define ID_RITTER_LINKS          "Ritter links"

// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------

void wifiSetup() {

  // Set WIFI module to STA mode
  WiFi.mode(WIFI_STA);

  // Connect
  Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASS);

  // Wait
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }
  Serial.println();

  // Connected!
  Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());

}

void setup() {

  // Init serial port and clean garbage
  Serial.begin(SERIAL_BAUDRATE);
  Serial.println();
  Serial.println();

  // Hier den Servo einbinden
  servo.attach(servoPin);

  // Wifi
  wifiSetup();

  // By default, fauxmoESP creates it's own webserver on the defined port
  // The TCP port must be 80 for gen3 devices (default is 1901)
  // This has to be done before the call to enable()
  fauxmo.createServer(true); // not needed, this is the default value
  fauxmo.setPort(80); // This is required for gen3 devices

  // You have to call enable(true) once you have a WiFi connection
  // You can enable or disable the library at any moment
  // Disabling it will prevent the devices from being discovered and switched
  fauxmo.enable(true);

  // You can use different ways to invoke alexa to modify the devices state:
  // "Alexa, Ritter rechts"
  // "Alexa, Ritter links"

  // Add virtual devices
  fauxmo.addDevice(ID_RITTER_RECHTS);
  fauxmo.addDevice(ID_RITTER_LINKS);

  fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {

    // Callback when a command from Alexa is received.
    // You can use device_id or device_name to choose the element to perform an action onto (relay, LED,...)
    // State is a boolean (ON/OFF) and value a number from 0 to 255 (if you say "set kitchen light to 50%" you will receive a 128 here).
    // Just remember not to delay too much here, this is a callback, exit as soon as possible.
    // If you have to do something more involved here set a flag and process it in your main loop.

    Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id, device_name, state ? "ON" : "OFF", value);

    // Checking for device_id is simpler if you are certain about the order they are loaded and it does not change.
    // Otherwise comparing the device_name is safer.

    if (strcmp(device_name, ID_RITTER_RECHTS) == 0) {
      servo.write(servoPosRechts);
    }
    if (strcmp(device_name, ID_RITTER_LINKS) == 0) {
      servo.write(servoPosLinks);
    }
  });

}

void loop() {
  fauxmo.handle();
}

Fehlermeldung
C:\Users\Dave\Documents\Arduino\sketch_dec21bServo123\sketch_dec21bServo123.ino:32:10: fatal error: ESP3266Servo.h: No such file or directory
32 | #include <ESP3266Servo.h>
| ^~~~~~~~~~~~~~~~
compilation terminated.
Mehrere Bibliotheken wurden für "Servo.h" gefunden
Benutzt: C:\Users\Dave\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\Servo
Nicht benutzt: C:\Users\Dave\AppData\Local\Arduino15\libraries\Servo
exit status 1

Compilation error: ESP3266Servo.h: No such file or directory

Danke für deine Hilfe :hugs:

Das soll sicher

#include <ESP8266Servo.h>

heißen...

und die ganzen defines hier

#include <Servo.h>

#include <ArduinoWiFiServer.h>
#include <BearSSLHelpers.h>
#include <CertStoreBearSSL.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiGratuitous.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiClientSecureBearSSL.h>
#include <WiFiServer.h>
#include <WiFiServerSecure.h>
#include <WiFiServerSecureBearSSL.h>
#include <WiFiUdp.h>

würde ich mal auskommentieren....

Sorry ja

Das soll sicher

#include <ESP8266Servo.h>

heißen...

Hmm habe ich so gemacht aber wohl nicht will

C:\Users\Dave\Documents\Arduino\sketch_dec21bServo123\sketch_dec21bServo123.ino:32:10: fatal error: ESP8266Servo.h: No such file or directory
32 | #include <ESP8266Servo.h>
| ^~~~~~~~~~~~~~~~
compilation terminated.
Mehrere Bibliotheken wurden für "Servo.h" gefunden
Benutzt: C:\Users\Dave\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\Servo
Nicht benutzt: C:\Users\Dave\AppData\Local\Arduino15\libraries\Servo
exit status 1

Compilation error: ESP8266Servo.h: No such file or directory

Bei der Node MCU tut es wohl die normale Servo-Lib

https://funduino.de/nr-13-servo-ansteuern

also das raus

#include <ESP8266Servo.h>

und das rein

#include <Servo.h>

Toll :sweat_smile: so war es ja auch vorher aber da war dass selbe Problem ?

Na ja jetzt geht es

Ich versuch gleich noch draufzulanden mal Schauen was Passiert

Also Alex weis bescheid aber der Arme macht gerade aber nur Link Bewegung einmal

ok also vermutlich müsste Sie noch Ritter rechts finden aber nichts zu sehen

ich stelle auch fest dass der Servo zuckelt sag ich mal

Ich schicke mal denn Sketch der so eigentlich passen würde

#include <Servo.h> 

Servo Test;

void setup()
{
Test.attach(D4);
Test.detach();   // noch zum Testen wie Stop ?
}
void loop() {
  Test.attach(D4);
  Test.write(0);
  delay(250);
  Test.attach(D4);
  Test.write(180);
  delay(250);
}

wenn der Sketch anstatt Link und Rechts so integrierbar wäre :hugs:

oh was da noch Finn912 gesagt hat ist auch vermutlich noch ein Problem

Dass er nach X Sekunden wieder auf hören soll und am besten der Servo Gelb abgeschaltet wird

Ich habe da schon was gesehen aber in Kombination mit Sekunden ob dass klappt ?

Das mit detach() ist nicht sinnvoll. Der Servo stoppt von alleine, wenn er den vorgegebenen Winkel erreicht. Du musst ihm aber auch Zeit genug dafür geben (250 ms für 180 Grad ist vermutlich nicht ausreichend).

#include <Servo.h> 

const byte servoPin = 5;
Servo Test;

void setup()
{
  Test.attach(servoPin);
}
void loop() {
  Test.write(0);
  delay(1000);
  Test.write(180);
  delay(1000);
}

Siehe hier: https://wokwi.com/projects/384763846178376705

Das war es ... ich habe morgen einiges vor und kann Dir leider nicht mehr weiterhelfen.

Viel Glück!

Eigentlich sind hier die Stellen zum Ändern:

if (strcmp(device_name, ID_RITTER_RECHTS) == 0) {
      servo.write(servoPosRechts);
    }
    if (strcmp(device_name, ID_RITTER_LINKS) == 0) {
      servo.write(servoPosLinks);
    }

Da wo z.B. servo.write(servoPosRechts) und das gleiche bei servoPosLinks steht stattdessen das jeweils einfügen

 for (int i=0;i<5;i++){
  servo.write(servoPosLinks);
  delay(800);
  servo.write(servoPosRechts);
  delay(800);
}

Nicht getestet, am Smartphone getippt...

Und Tschüss...

ja verstehe ich

Ich bin auch am Ende jetzt zu Müde

Ja der Sketch passt aber, er 2x 90Grad warum auch immer

Naja Schaden

Ich Wünsch dir aber schöne Feiertage

Evtl. hast du noch mal Übermorgen Zeit

Ich werde Updates


bringen bis dahin

Alles Gute

Dave und der Ritter

Die for Schleife muss eigentlich 5x links/rechts bewegen.

Hast Du sie bei beiden Stellen reinkopiert?

if (strcmp(device_name, ID_RITTER_RECHTS) == 0) {
      for (int i=0;i<5;i++){
         servo.write(servoPosLinks);
         delay(800);
         servo.write(servoPosRechts);
        delay(800);
      }
    }
    if (strcmp(device_name, ID_RITTER_LINKS) == 0) {
      for (int i=0;i<5;i++){
         servo.write(servoPosLinks);
         delay(800);
         servo.write(servoPosRechts);
        delay(800);
      };
    }

:rofl: aber Danke für denn Hinweis :melting_face:

Ich muss Schluss machen, mache nur noch Quatsch bin zu müde

Mache ich aber Morgen

Leider kann ich kein Video Schicken aber er soll ganz tolle hin und her Wackeln so Aggro massig

Ich Wünsch dir was evtl. hören wir ja noch mal vor Weinachten

Vielen dank nochmal für alles

Schon Abend

Achja es gibt schon eine bunte Vielfalt an Arduino Anwendern

Was soll dass jetzt aussagen ???

Die wirkliche Bedeutung :speak_no_evil:
Das soll aussagen, dass ich :speak_no_evil: :zipper_mouth_face:
Also frag Alexa. Die weiß auf alles eine Antwort und sei es nur "42"

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.