Sinilink XY-WFMS ESP8266 MOSFET Board Pool Heating

Sinilink

I originally did a simple writeup about this cheap board back in July 2020 without actually having a use for it. I have a couple of cheap Sinilink 30mm by 46mm boards based on ESP-12 modules which take variable voltage ranging 5v-36v DC and can supply several amps out. The boards are a few Euros/dollars (July 2023 price around 5 Euros all-in to Spain) from AliExpress.

Now if you are wondering what a “Sinilink” board is – I urge you to take a look at this earlier (Feb 2020) blog entry. The subject of this blog entry is not cased and is very cheap.

The Original Sinilink Article

See on the right image below, the 6-hole connector on the underside, if hole 1 was at the bottom, 2 is tx, 3 is rx, 4 is GPIO0 – i.e. the programming pin. That and power from 5v or more (max 36v) is all you need to program the board with Tasmota. I was about to stick 3 pins in there along with power and ground when I decided I could do the lot with Tuya-convert and no wiring. Investing an Orange-Pi-Zero and Wemos-D1 in a Tuya-convert setup was one of my smarter moves of 2020 and has programmed many boards. In 2023, Tuya-convert is long gone.

Sinilink XY-WFMS

There is of course a Sinilink APP for Apple and a link for an Android app… but do we really want to go down that route? Good to start the ball rolling I guess… I grabbed the VERY-slow-to-download Android APP. The English was attrocious and I could not get the device to pair despite it “flashing 4 times then a gap and repeat” as per instructions. All the app would say is “in the request” repeatedly. After several attempts it connected – shortening the name I gave it which was “michael”, to “Micha”. At this point the blue light on the device was flashing regularly. So, I power cycled the device…. no further forward.

So, power up and the board auto entered pairing mode – I powered up my Tuya-convert unit and within seconds I should have had a Tasmota-compatible XY-WFMS but that would not work either.

Finally I went for the old standby – flashing. After several attempts there was no sign of the device flashing then eventually it did – but the outcome of that should have been a new SSID on the device itself at which point the normal procedure would be to get the mobile phone to use that SSID and find a web page at 192.168.4.1 – and inform THAT page about my WIFI ssid and password along with MQTT credentials and other optional information such as Alexa name etc but the unit did not create a local SSID.

By now I was beginning to suspect my wiring. In the end I think I had a duff board as the second board programmed perfectly by simply soldering to the ESP-12 sub-module, supplying tx, tx, gpio0, ground and 3v3 from my normal FTDI.

The template here for Tasmota works perfectly and of course, if needed it would be easy to add a temperature sensor or change that RELAY1 output to PWM if needed.

Blakadder template for the Sinilink

So ultimately, I was happy, I’m just glad these were cheap as the first one went straight in the bin. It IS rather handy needing just one power supply for both the ESP and the load.. shame they’d not fitted 3 MOSFETS – would have been handy for 12v RGB strip but I guess 2 more connectors and some more heatsinking would have jacked up the price.

June 2023 Update – Solar Pool Heating Control

I’ve not touched one of these controllers for AGES, then at the weekend I was struggling with the thought of adding a pair of DS18B20 temperature sensors and 12v power supply to an ESP board – the idea being to compare incoming solar-pipe-heated to and return water from our pool so as to turn on the pump only when there is sun heating up my water pipes… anyway the pump would needs a 12v supply – which I happen to have in our pergola – but that also meant putting a 12v-5v convertor on the ESP-12 board and finding a suitably large plastic box (external)… I was well into that when I spotted this Sinilink ESP-12 / MOSFET board lying around.

Sinilink as pool controller

The last time the Tasmota firmware was updated on this board was back in 2020 at version 8.3 so I thought I’d have a go at updating it even though a version that old is not officially supported for OTA.

I did my usual OTA (flashing to minimal using a recent Tasmota minimal file, then flashing to full (the whole operation is simple and takes a couple of minutes – I do this just out of habit as I’ve lost more than one light bulb in the past thanks to running the full one-stop OTA Flash on it) – anyway – it worked first time, flashing to Tasmota 13.0.0.1.

It quickly hit me that I could use this MOSFET output to turn my 12v 30w pool pump on and off as needed. The two DS18B20 sensors are soldered in parallel to 0v, 3v3 and GPIO2 (I’ve used no pullups and they’re working fine – stainless steel jobs with 1m cable on each). GPIO2 is not on a board connector, I had to solder the two DS18B20 sense wires to the ESP8266 chip – not that difficult. Then I simply set GPIO2 in the template as DS18B20. Getting a status object out of Tasmota is easy. I called the board “mosfet” and by waiting for a TELE input to turn on the motor initially of ambient over 25c, then after 10 seconds of pump action, injecting cmnd/mosfet/STATUS into the topic and 10 into the payload I could read out stat/mosfet/STATUS10 and get the ID and temperature for both sensors to compare flow and return.

Sinilink as pool controller

Herein lies the problem – how do you get out individual temperature values from the MQTT? You might THINK that all you have to do is PARSE the object – using the JSON.parse node to extract topic DS18B20-1 (or 2) – that’s what I thought.

Well, NO. You can’t extract “DS18B20-1″ because it gets treated like an expression – and you can’t put quotes around that either. There are two ways around this – SETOPTION64 1 (SO64 1) changes DS18B20-1 for example into a useable DS18B20_1 – or by wrapping the name – [DS”18B20”] – I chose the former method.

I ended up with some simple Node-RED code using a TELE command to read the incoming temperature and if the pipe is over 25c, I turn on the pump, wait several seconds and if the warm pipe is significantly warmer than the return pipe, I leave the pump on until the next incoming TELE – default 5 minutes (otherwise turn it off). Sadly I can’t judge if the warm pipe is warmer than the return pipe without actually having the pump on… but there you go.

Temperature checking

It’s working and in place, using a pair of those DS18B20 sensors that comes with a stainless end and a metre or so of black cable. The MOSFET is driving the pump directly – all working a treat.

For the record – the two functions…

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
let a = msg.payload.StatusSNS.DS18B20_1.Temperature;
let b = msg.payload.StatusSNS.DS18B20_2.Temperature;
if ((a>25) && (a>(b+1)))
{
node.status({ fill: "blue", shape: "dot", text: a + "C/" + b + "C so leave pump on" + global.get("handyDate") });
msg.topic = "cmnd/mosfet/power1";
msg.payload = 1;
return msg;
}
else
{
node.status({ fill: "blue", shape: "dot", text: a + "C/" + b + "C so turn pump off" + global.get("handyDate") });
msg.topic = "cmnd/mosfet/power1";
msg.payload = 0;
return msg;
}
let a = msg.payload.StatusSNS.DS18B20_1.Temperature; let b = msg.payload.StatusSNS.DS18B20_2.Temperature; if ((a>25) && (a>(b+1))) { node.status({ fill: "blue", shape: "dot", text: a + "C/" + b + "C so leave pump on" + global.get("handyDate") }); msg.topic = "cmnd/mosfet/power1"; msg.payload = 1; return msg; } else { node.status({ fill: "blue", shape: "dot", text: a + "C/" + b + "C so turn pump off" + global.get("handyDate") }); msg.topic = "cmnd/mosfet/power1"; msg.payload = 0; return msg; }
let a = msg.payload.StatusSNS.DS18B20_1.Temperature;
let b = msg.payload.StatusSNS.DS18B20_2.Temperature;

if ((a>25)  && (a>(b+1)))
{
    node.status({ fill: "blue", shape: "dot", text: a + "C/" + b + "C so leave pump on" + global.get("handyDate") });
    msg.topic = "cmnd/mosfet/power1";
    msg.payload = 1;
    return msg;
}
else
{
    node.status({ fill: "blue", shape: "dot", text: a + "C/" + b + "C so turn pump off" + global.get("handyDate") });
    msg.topic = "cmnd/mosfet/power1";
    msg.payload = 0;
    return msg;
}

and.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
let a = msg.payload.DS18B20_1.Temperature;
if (a > 25) {
node.status({ fill: "blue", shape: "dot", text: "Initial Tele - temp=" + a +"C" + global.get("handyDate") });
msg.topic = "cmnd/mosfet/power1";
msg.payload = 1;
node.send ([msg,null]);
msg.topic = "cmnd/mosfet/STATUS";
msg.payload = 10;
node.send([null,msg]);
}
else
{
node.status({ fill: "blue", shape: "dot", text: "Initial Tele - temp too cool at " + a + "C" + global.get("handyDate") });
msg.topic = "cmnd/mosfet/power1";
msg.payload = 0;
node.send([msg, null]);
}
let a = msg.payload.DS18B20_1.Temperature; if (a > 25) { node.status({ fill: "blue", shape: "dot", text: "Initial Tele - temp=" + a +"C" + global.get("handyDate") }); msg.topic = "cmnd/mosfet/power1"; msg.payload = 1; node.send ([msg,null]); msg.topic = "cmnd/mosfet/STATUS"; msg.payload = 10; node.send([null,msg]); } else { node.status({ fill: "blue", shape: "dot", text: "Initial Tele - temp too cool at " + a + "C" + global.get("handyDate") }); msg.topic = "cmnd/mosfet/power1"; msg.payload = 0; node.send([msg, null]); }
let a = msg.payload.DS18B20_1.Temperature;

if (a > 25) {
    node.status({ fill: "blue", shape: "dot", text: "Initial Tele - temp=" + a +"C" + global.get("handyDate") });
    msg.topic = "cmnd/mosfet/power1";
    msg.payload = 1;
    node.send ([msg,null]);

    msg.topic = "cmnd/mosfet/STATUS";
    msg.payload = 10;
    node.send([null,msg]);
}
else
{
    node.status({ fill: "blue", shape: "dot", text: "Initial Tele - temp too cool at " + a + "C" + global.get("handyDate") });
    msg.topic = "cmnd/mosfet/power1";
    msg.payload = 0;
    node.send([msg, null]);
}

10 thoughts on “Sinilink XY-WFMS ESP8266 MOSFET Board Pool Heating

    1. I’m kind of guessing around 5A but that all depends on ambient temperature and the voltage you feed it. I looked up the BA9U2D MOSFET without success and of course, the AliExpress site doesn’t help. Additional reference on the top of the MOSFET says D4184 – POSSIBLY the AOD4184A MOSFET but don’t count on it. See the image here for the latter but bear in mind that even IF that is the correct MOSFET, that spec assumes a decent heatsink, not a bit of PCB.

      1. I only now saw Steve’s post and your reply – when I get a moment I’ll dig out the board and have a play…. speed controller – I like that… as for the case – when steve wrote this I had no 3D printer.. I do now – great!!

        Thanks for this feedback guys… now all I have to do is find the board…..

        But thinking about it I have already written elsewhere about the cheap H802 units – once Tasmota’d – 5 channels of powerful PWM… in a box… https://tech.scargill.net/h801-led-rgbww-strip-controller-and-banggood-4-relay-board/

        Mmm.

Leave a Reply

Your email address will not be published. Required fields are marked *

Leave the field below empty!


The maximum upload file size: 512 MB. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, code, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here