Wemos D1+ MQTT pwm fan speed


I need a help.
I would liek to control 2 fan with PWM output, but it doesnt work. When i was create the MQTT version of code, then all virtual channel added automaticly, but the the slider doesnt. I want to create PWM Output widget, but it cant put to the project, just the old Arudino device.
I try to put slider,i can add it, but it doesn work.
Here is my code: link

HI, try to change value of the Slide from 0 to 1023 (instead of 0->255)
Sometime you must change channel of the virtual pin to working good.

try this code. add a custom slider widget with channel 1 selected.

// This example shows how to connect to Cayenne using an ESP8266 and send/receive sample data.
// Make sure you install the ESP8266 Board Package via the Arduino IDE Board Manager and select the correct ESP8266 board before compiling. 

#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>

// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifiPassword";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "MQTT_USERNAME";
char password[] = "MQTT_PASSWORD";
char clientID[] = "CLIENT_ID";

unsigned long lastMillis = 0;
 #define PWM_DIGITAL_PIN1 D6 

void setup() {
	Cayenne.begin(username, password, clientID, ssid, wifiPassword);

void loop() {

	//Publish data every 10 seconds (10000 milliseconds). Change this value to publish at a different interval.
	if (millis() - lastMillis > 10000) {
		lastMillis = millis();
		//Write data to Cayenne here. This example just sends the current uptime in milliseconds.
		Cayenne.virtualWrite(0, lastMillis);

//Default function for processing actuator commands from the Cayenne Dashboard.
//You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
  int x = getValue.asInt();
 analogWrite(PWM_DIGITAL_PIN1,  x);

If i change, then how can i manage the slider from0% (off) to 100% speed?

Thanks, i will try it

in this need just a chanel number or VIRTUAL_PIN10?

yes only channel number.


do you want only two set points(stop and full speed) ??

No, i want use it between 0-100% like as a dimmer

In the code, dont need to set the dutty cycle or others?

change the slider setting and make slider minimum value to 0 and maximum to 100 and then use a map function.

int x = getValue.asInt();
x= map(x, 0, 100, 0, 255);
analogWrite(PWM_DIGITAL_PIN1, x);

1 Like

okay, i will try it

Can i rename the “x”? in my code this is value or currentvalue both of 2 slider

yes you can to whatever you want. its just that i love “x”:stuck_out_tongue_winking_eye:


It doesnt need?

it doesnt work :frowning:
Maybe the phisical connection wrong?

have you test this ? 0-> 1023 in your cayenne Slide widget

in the code