Jump to content
  • Sign Up
Støtt hjemmeautomasjon.no!
  • Fermate
    Fermate

    ESP32/MQTT Viftestyring (4)

    Her er basis kode for PWM styring av en PC vifte:

     

    Sitat
     // fan PWM
    const int pwmFanPin           = GPIO_NUM_14;
    const int pwmFanFreq          = 25000; // 25kHz for PC vifter
    const int pwmFanChannel       = 0; //PWM Kanal
    const int pwmFanResolution    = 8;
    int iFanSpeed =1; // Init speed

     

    void setup() {

     

      // configure Fan PWM
      ledcSetup(pwmFanChannel, pwmFanFreq, pwmFanResolution);
      // attach the channel to the GPIO to be controlled
      ledcAttachPin(pwmFanPin, pwmFanChannel);
      // Init speed
      ledcWrite(pwmFanChannel, iFanSpeed);
    }

     

    void loop() {
        // Sett ønsket hastighet fra 0 - 255
     
        iFanSpeed= 255;
        ledcWrite(pwmFanChannel, iFanSpeed);
     }

     

    Mange PC vifter kan en styre hastigheten på, men ikke alle. Dersom vifta har 4 kabler (og ikke bare 3) kan den styres. Lederne er:

    • 12V
    • Jord
    • PWM (plus bredde modulasjon) styresignal inn
    • Puls informasjon om hvor fort vifta faktisk går (Tach)

     

    pins - Is the PWM rail of a 4pin pwm Computer fan Positive ...

     

    PC vifter har PWM signal på 25kHz (antakeligvis for at en ikke skal kunne høre den med ørene) og tidligere var det litt klønete å få til med en Arduino, men med en ESP32 går det som en lek.

    Vi bruker en av de 6-16 (avhengig av ESP32 type) innebyggede PWM kanalene i ESP32'en og styrer dette med noen få linjer kode.

     

    Her er koden satt inn for å styre vifta fra MQTT:

     

    Sitat
    #include <EspMQTTClient.h>

     

    // fan PWM

     

    const int pwmFanPin           = GPIO_NUM_14;
    const int pwmFanFreq          = 25000; // 25kHz for PC vifter
    const int pwmFanChannel       = 0; //PWM Kanal
    const int pwmFanResolution    = 8;
    int iFanSpeed =1; // Init speed

     

    //MQTT

     

    EspMQTTClient MQTTclient(
      "ThePromisedLAN", // SSID
      "Hallelujah!", // WiFi Password
      "192.168.1.2",  // MQTT Broker server ip
      "",   // MQTTUsername Can be omitted if not needed
      "",   // MQTTPassword Can be omitted if not needed
      "vifteClient",     // Client name that uniquely identify your device
      1883              // The MQTT port, default to 1883. this line can be omitted
    );

     

    void setup() {

     

      Serial.begin(115200);

     

      // configure Fan PWM

     

      ledcSetup(pwmFanChannel, pwmFanFreq, pwmFanResolution);
      // attach the channel to the GPIO to be controlled
      ledcAttachPin(pwmFanPin, pwmFanChannel);
      // Init speed
      ledcWrite(pwmFanChannel, iFanSpeed);

     

     // MQTTclient.setKeepAlive();

     

     MQTTclient.setKeepAlive(60);

     

    }

     

     

    void loop() {

     

        MQTTclient.loop();
     
      }

     

    void onConnectionEstablished()

     

     {
     Serial.println("onConnectionEstablished");
     MQTTclient.publish("vifteClient/status", "started");   // Denne MÅ ikke være med

     

      MQTTclient.subscribe("vifteClient/fanSpeed", [](const String & payload) {

     

       Serial.print("fanSpeed: ");
       Serial.println(payload);
       iFanSpeed=payload.toInt();
       iFanSpeed= map(iFanSpeed,0,100,0,255); // la den går fra 0 til 100 istedet for 0 til 255
       ledcWrite(pwmFanChannel, iFanSpeed);
      });
      }

     

    Det er også mulig å LESE den REELLE hastigheten på vifta ved å telle pulser fra den siste ledningen fra PC vifta men det må bli en annen gang. 

     

    OBS:

    • Pulsene fra vifta er 12V og vil skade ESP32 om de kobles direkte.
    • Det er ofte 2 eller 4 pulser / rotasjon

    User Feedback

    Recommended Comments

    Kanskje dette er løsningen jeg er på utkikk etter.. Jeg tok litt for mye møllers tran, og kjøpte to Noctura-vifter til nettverksskapet mitt på 3000rpm. Disse bråker mer enn ventilasjonanlegget inne på teknisk rom, og såpass at det ble en del mer sjenerende enn jeg så for meg. Så jeg må finne en enkelst mulig måte å styre hastigheten på disse, men ESP32 og MQTT har jeg aldri vært borti.
     

    Link to comment
    Share on other sites

    OlavT skrev (På 27.1.2024 den 8.37):

    Har du skrevet noe om hvordan dette skal kobles?


    Nei jeg har ikke gjort dette selv så jeg bare nevnte det på slutten. (Jeg trengte ikke dette da jeg hadde prosjektet på gang)

    Jeg har en følelse av at noen vifter sender disse pulsene som 12V og at de må ha en motstand eller to for å ta spenningen ned til 3,3V for ikke å svi av ESP32en.

    Har en vag følelse av at jeg målte 12V med et multimeter.


    Men andre steder står det at pulsene kommer som kobling mot ground og at de trenger en pullup resistor.

    Det siste er jo unødvendig siden sensor pinnen kan defineres med pinMode( X, INPUT_PULLUP )

     

    Si gjerne ifra om du finner ut noe så oppdaterer jeg guiden.

     

    Im_IB skrev (På 27.1.2024 den 1.03):

    Så jeg må finne en enkelst mulig måte å styre hastigheten på disse, men ESP32 og MQTT har jeg aldri vært borti.


    Du trenger jo ikke MQTT for dette da. Bruk et Potensiometer sammen med ESP32en for å regulere hastigheten.
    Goggle så finner du eksempler på dette.

    • Thanks 1
    Link to comment
    Share on other sites



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.