#PD Stepper - USB PD powered stepper driver

252 messages ยท Page 1 of 1 (latest)

slender prawn
sour elm
#

When exactly would one use a single/standalone USB powered stepper?

#

Ok, I watched the whole video, thats pretty cool

dusty otter
slender prawn
fossil geyser
fossil geyser
#

Can you keep track of continous motion with the as5600? I thought something like as5601 would be more suitable

slender prawn
hard marten
#

what's the pricetag on that beauty ?

peak folio
#

65 / 80 NZD = 36 / 44 EUR

hard marten
#

do you have a store link as well ?

peak folio
#

I would like to see CAN and have it powered via XT30(2+2) connector, but this device is not for such cases. Ideal device when you need only one stepper - like for blinds, lock / door (chicken coop door? :D), or just for having fun with a stepper ๐Ÿ˜„

hard marten
#

maybe in the PRO version ๐Ÿ˜‰

sour elm
#

lol, I didnt even realise @slender prawn was in NZ ๐Ÿ™ˆ

fossil geyser
slender prawn
shut gazelle
#

I don't have an immediate use for them, but I think I need one of these and a PoE version immediately ๐Ÿ˜…

fossil geyser
slender prawn
fossil geyser
shut gazelle
slender prawn
fresh zealot
#

nice ๐Ÿ˜‰

fresh zealot
#

oh yea u do

peak folio
#

good...then you don't need to fight with customs ๐Ÿ˜„

fallow storm
#

When do you think you will start shipping?

fossil geyser
leaden cedar
#

Great design!! What PD chip are you using?

fossil geyser
fallow storm
#

So what have all done using this PD stepper? or what are the plans:D ?

tulip yoke
#

Just received mine in the mail. I am looking at starting with a set of motorized window shades. If it all works well, will be purchasing a few more to get all the windows in house set up

slender prawn
#

All pre-orders have been fulfilled (ended up being a lot more than I expected so thanks!) and kits are now in stock

dreamy terrace
gloomy pewter
dreamy terrace
dreamy terrace
#

I printed a mount and gear for turning blinds.

#

With motor inset into the wall, and motor cables fairly hidden at the bottom. Didn't like having the USB power cable on the top so I fed power to the Vbus/GND pads on the back of the board.

#

Those S1761-42R spring terminals are a real PITA to deal with.

#

Putting them on veroboard was painful too (but gives a mechanically better result for the actual contacts).

#

Might have to learn how to design SMT boards and get them manufactured in China, just to get a handful of those 5mm x 25mm boards with two lanes on, but with the spring terminals soldered on competently ๐Ÿ™‚

#

But if the original PD stepper board had a 6-pin PH header which did motor and power, in place of the existing one, that would be amazing ๐Ÿ™‚

shut gazelle
#

Nice! Did you have to gear it down? Or works directly?

dreamy terrace
#

Well... I went through three iterations of "need a bigger stepper motor" before I got my 3D printer, when I was using a gear cannibalised from the previous blind mechanism. But now I have a 3D printer I can "gear it down" by just printing a small gear which needs less torque. So I've dropped from 12 tooth to 10 tooth and it's working nicely.

#

Most of that is mine; I imported Josh's STL for the cover, to add hollow columns for light guides for the red and blue LEDs (2mm clear acrylic goes in those).

#

And a very much not hollow column to sit on top of the bright green power LED and hopefully hide it. Otherwise it shines out the heatsink hole.

dreamy terrace
#

Bah, I was being dim and thought I could use the QWIIC connector at the bottom (out of sight) because I wasn't using i2c for anything. Of course if I want to use the as5600 encoder I am using i2c. Guess I'll have to plug a wire in at the top after all. Unless I can find a GPIO pin on the back too... or use an i2c GPIO expander for the reed switch that detects the blind being fully open

fossil geyser
#

Can you make a hard stop at the top and use stallguard to home the position?

dreamy terrace
#

There is a hard stop at the top, but I'd like to quietly stop when the reed switch triggers rather than have all that clicking.

#

I'm also going to teach the esphome setup that if the encoder goes up above what it thought was the top.... then that clearly wasn't the top, and to adjust the sensored_home_pos accordingly.

#

Right now there's something wrong with the run lengths. I tell it to close, and it does, but although it calculated the right number of steps, the encoder says it's only about 66% closed. Then when I tell it to open, it only opens about half way. Consistently. Going to redo all those calculations and debug...

#

There's also power weirdness. Pull on the blind cord fast, and even when the board is unpowered, its green LED lights up. Which is OK. But if you do that when it's powered, it crashes. Which is less OK but still maybe "don't do that then". But I think I've also seen it reset when the motor stops, which is definitely not helpful. And then it doesn't know whether it's open or closed (but the reed switch will help that)

shut gazelle
#

Sounds like some flyback diodes might be needed?

dreamy terrace
#

Yeah.

fossil geyser
#

If you tune the run parameters there shouldn't be any clicking - only a single clack ๐Ÿ˜‰ Also, the distance issue sounds like you might use another microstepping and need to adjust the ratio between encoder and stepper. Could that be the case?

dreamy terrace
#

[09:19:26][W][component:237]: Component as5600.sensor took a long time for an operation (4184 ms).
[09:19:26][W][component:238]: Components should block for at most 30 ms.
#

That probably doesn't help. If it's off in the weeds for 4 seconds, it's going to miss turns as it counts the encoder wraps

#

I've removed the encoder ratio variable and just calculate directly in the cover lambdas, 400 * %{microsteps} / 4096

#

It isn't that.

shut gazelle
#

Is it definitely connecting to the sensor? That seems like it's probably trying to repeatedly read and failing. Whatever it's doing, it should be broken up instead of blocking for 4s

dreamy terrace
#

Oh... I may have just destroyed a laptop. Was experimenting with it connected to serial so I could see results better than over MQTT. Moved the blind manually and now the laptop is dead

#

Wonder how many volts it got fed on its USB port.

#

Definitely need a diode there.

#

And I need a new laptop

#

The sensor was generally working, FWIW. But just occasionally skipping, I think

#

But it's going to be a while before I get to play with that again

dreamy terrace
#

OK... laptop isn't dead! Leaving it for a while and then using a pin to press the reset button for a whole minute seems to have worked. I'd tried shorter presses.

#

Thank $DEITY for that ๐Ÿ™‚

dreamy terrace
#

I think I finally have it all working.

upbeat hemlock
#

It is not ESPHome. but i just got my PDStepper working:

dreamy terrace
#

Nice. What is it?

peak folio
dreamy terrace
#

ooh, shiny. I may look into that once I've finished with the blinds ๐Ÿ™‚

#

I'm toying with the idea of doing my own version of the PD Stepper board. There are some improvements that maybe I could try to persuade @slender prawn to make, like switching to an AS5601 for more reliable measurement, adding a diode or two for back EMF protection. But I also want to bring an AUX GPIO to the bottom of the board where it's less visible (a fifth pin on the existing QWIIC connector would do it, but then it wouldn't be a 4-pin QWIIC connector. Maybe it could be a separate i2c bus from the one used for the AS560[01] so it's usable as GPIO or I2C. And although I have worked out the spring terminal thing to apply power directly to the back of the board , it'd be nicer to have a connector on the board. If I were tweaking it myself I'd just put a single 7-pin connector where the motor connector is, and drop the 1.0mm connectors. I'd also move the green power LED. Even with a black case designed to block that, it still shines out the heatsink gap.l

#

I think with AS5601, maybe an added diode to protect USB, and separate GPIO pins for the QWIIC connector so that it can be either i2c or something else, that would suffice.

#

My current solution for getting at the GPIO is to have a single wire to the 3-pin AUX connector which comes straight back under the board and make my power connector (using the spring terminals as shown above) into 3 pins

#

That's so obviously going to break if I put it in production though.

#

That's the prototype version (motor underneath just out of sight, will be inset into the window frame).

#

The light guides for the blue/red LEDs are working nicely, and the black cover mostly hides the bright green ones

upbeat hemlock
#

@dreamy terrace its my attempt at a tube cutter (feeder for now)

upbeat hemlock
peak folio
#

now it makes sense why it is so complicated... anyway, I like the pneumatic cutter.

dreamy terrace
#

There are two GPIOs already. Just on the wrong side of the board for me ๐Ÿ™‚

#

I'd settle for a solder bridge that can choose which to bring out to the QWIIC connector: those or the standard I2c (if there aren't enough extra GPIOs on the ESP32)

upbeat hemlock
#

So you used some pogopins or something similar?

dreamy terrace
#

But I'm hoping not to have to learn how to do this. If I can entice Josh into doing something like that, and switching to an AS5601, then I'll just buy three more of those (bringing me to seven in total) ๐Ÿ™‚

#

Spring contacts for the power, shown in photos above

#

GPIO is on the aux connector next to the USB-C

dreamy terrace
#

Aha, I can use another spring terminal to touch the pad for the NTC!

#

So I can do power and the single GPIO port I need, all on the back of the board.

#

But I'm all done soldering those awful spring terminals by hand. Designed a board with a 3-way PH connector on the underside, and three spring terminals in the right places, which can be inset into the 3d-printed mount I showed above.

dreamy terrace
#

I tried importing Josh's board into kicad but it's a little above my pay grade for now. I'm going to start with getting something really simple made, and maybe I can graduate to something more complex like a variant of the pd-stepper with an as5601.

#

I think I'd mostly tamed the ESPHome MQTT code so it doesn't just disappear off into the weeds for 20 seconds at a time. Just have to see how many months it is before that gets merged ๐Ÿ™‚

dreamy terrace
#

Mockup to see how the spring-terminal PCB will line up with the board itself.

#

The real PCB will actually have copper ๐Ÿ™‚

#

But I do think I'm going to abuse a "top" plugging through-board connector like the one shown, soldering it on a right angle like it is there. A proper side-plugging SMT socket on the back of the board would be much larger.

shut gazelle
#

I don't think the right angle socket is that much thicker, and would be a lot sturdier

dreamy terrace
#

The right-angle SMT socket is 5.5mm, plus the 1.6mm of the PCB itself. And it's 9.95mm wide for the 3-pin version.

#

The top-plugging through hole one that I'm planning to abuse is 4.7mm deep (no PCB now) and only 7.9mm wide.

#

It's the depth I care about really. I don't have 7.1mm available in that part unless I expand it just to make room; it's just the cord guide which goes around the gear that drives the blind cord.

#

And I'm not too worried about it being sturdier because it's entirely enclosed in the 3d-printed part

#

But I've ordered both versions and will play

vagrant ice
#

Ok. This has piqued my interest. How does one go about spec'ing a specific stepper motor for a roller blind? is 42N.cm (60oz.in) enough torque? Do I need a gearbox? Where can I source a 24V USB-C power brick? Seems like most on Amazon are 5V for phones.

#

Ok, I found one that does 45w at 20V. I'm thinking that this stepper I found that draws 2A and wants 12-24V (24V recommended) will work with the power brick I found. The torque question still remains.

dreamy terrace
#

@vagrant ice I suspect I have a wrong answer... I tied a bag to the blind cord and added weights until it moved, and then measured the radius of the wheel at the top... ๐Ÿ™‚

#

It gave me a number in Nm...

#

I then tried different motors, with 'gears' from the previous blinds glued to a cog that would push onto the motor shaft. Hooked up in a crappy way to a Sparkfun 'big easy' stepper motor driver, pulsing a serial port's CTS line to step it.

#

And then I got bigger and bigger motors because I needed more torque, ending up with 42N.cm.

#

And then the project sat unfinished for years until I discovered the PD Stepper board, at which I started to play again. And it turns out that my 42N.cm motor with a theoretical max current of 1.5A... actually drives the blinds just fine with 100mA, and actually I think even 20mA ๐Ÿ™‚

#

Not sure about 24V but the ones I listed in https://www.google.com/search?client=ubuntu&channel=fs&q=big+easy+sparkfun are all doing 12V or 15V, which is sufficient for me (modulo occasionally cutting out, which seems not to be specific to any charger; I'm hoping that issue goes away when I just feed 12V directly to the VBUS/GND pads on the back and ignore the USB-PD).

#

I didn't use a gearbox, but I did reduce the diameter of the blind gear so it's only got 10 'teeth' (for the balls on the cord) instead of 12. Which reduces the required torque accordingly.

#

My 42N.cm motors take 1.5A at 2.4V.

dreamy terrace
#

I will publish all my 3d models when I'm done playing (or if anyone asks beforehand)

slender prawn
# dreamy terrace

You may also want to bump up your track widths a fair bit more for VBUS and GND (and maybe an extra via or 2) . You have plenty of room and doesn't cost anything!

dreamy terrace
#

Thanks. Yeah, I think I already bumped them up to 0.75mm or so for the boards that are arriving this week

#

Those will have the spring terminals preassembled for me. I built a prototype last weekend with them soldered by hand, which is less pretty, but working. So I have the GPIO for the reed switch entering at the bottom with the power and the connection to the motor

#

Can still see that green LED; going to have to add some more to the cover to try to hide it more ๐Ÿ™‚

dreamy terrace
# dreamy terrace

I have columns with holes to run 2mm acrylic as light guides for the red and blue LEDs. And solid black for the green one ๐Ÿ™‚

shut gazelle
dreamy terrace
#

Yeah. Or an extra 0.5mm on the column which doesn't quite reach it

#

At least powering it like this I don't have to worry about the USB power good LED ๐Ÿ™‚

dreamy terrace
#

The boards on their way from JLCPCB are only one via and 0.6mm.

#

But do at least have precise dimensions for the locations of the pads that the spring terminals are contacting, having loaded the PD Stepper board into kicad to find them.

#

And they are precise, with dimensions like 155.1051 x 114.5286 for the midpoint of the VBUS pad, for example.

#

Not quite sure if that's a weirdness of importing into kicad.

dreamy terrace
#

Heh, my first preassembled boards arrived and the VBUS/GND leg is just a tiny bit too short (1mm or so).

#

Not sure why, as I picked the dimensions off the PD Stepper design files. Which are precise (if not accurate) to 0.0005 mm ๐Ÿ™‚

#

Perhaps it's the asymmetry of the spring terminals themselves; the contact part isn't entirely in the centre of the underlying pad on the PCB. Although I had allowed for the according to the dimensions in the datasheet. It looks a bit more off-centre than the datasheet says, though.

#

So new boards ordered with a extra mm (and more vias and 0.75mm tracks)

slender prawn
#

here are the dimensions relative to the edge of the PCB if that helps.

dreamy terrace
#

Thanks. Those match what I got by loading your files into KiCad I think (the 27.754 rings a bell, certainly)

dreamy terrace
#

But the pad of the spring terminal which makes contact with that isn't centred on the solder pad on my board. And isn't 0.5nm off-centre as suggested by the data sheet either; seems to be more. So I need to offset it a bit more than I had

#

Perhaps I should have put all three in the same orientation so I could just shift the whole board.

#

Deliberately made my connector-soldering jig also have cutouts so I could see how it marries up to the PD stepper board, and have exactly the same thickness underneath as the aluminium spacer

mystic storm
dreamy terrace
mystic storm
#

It imports into KiCad beautifully.

dreamy terrace
#

I could see that it was beautiful. I couldn't tell if it would work. ๐Ÿ™‚

I think I saw it say there were 14 disconnected nets?

dreamy terrace
#

Vbus pad placement looking much better on the new boards.

#

Less sure about NTC now (although I didn't intentionally move it). But that's just a signal pin and isn't critical

dreamy terrace
#

FWIW the overall blind operation is working nicely now. I deal with the random power cycles from all my PD power supplies, by making the first 'open' operation after a reset, actually a 'home' operation which goes all the way until it stalls (or the reed switch triggers).

dreamy terrace
#

Finally built all three. Now just need permission to cut into the walls to install them ๐Ÿ™‚

#

Will also write it up and publish the STL + FreeCAD files.

dreamy terrace
shut gazelle
#

Up to you, but personally I would have a single on sunset automation in HA that triggers the three of these to move, vs having each determine when sunset is and triggering themselves. You could also potentially use ESP-NOW to keep them tightly in sync

#

Do the blinds end up reliably falling behind your housing like this on their own?

dreamy terrace
#

They are all configured with the same NTP server and lat/long despite actually being a few metres north/south of each other. So they agree on what time sunset is.

#

The WiFi reception hasn't been great there, so I didn't want to rely on external control for that.

#

And no, it doesn't always manage. And now the power is fed from behind, I'm thinking of making them a little pointy hat /\ that rests on top and kind of plugs into or around the USB socket.

shut gazelle
#

Yeah a hat seems like a good idea

#

I don't think the sunrise/sunset triggers were really designed to be "trigger in lock step with (sub)second accuracy" and that "within a minute of sunrise/sunset" is generally enough for most people, but that can probably be reevaluated

dreamy terrace
#

I worked around it by using an on_time trigger every minute which basically does the same thing as on_sunset does in its loop(). "Did it change yet?" "Did it change yet?"

#

But the on_time triggers do trigger on the zeroth second, each minute. Not at some random time in each minute, according to when the device last started up.

#

I know my on_time trigger for 07:30 to open the blinds (when sunset was earlier, and I don't allow them to open that early) will not trigger at 07:30:01 on one of them, 07:30:20 on the next, and 07:30:54 on the third.

#

It's a beautiful sight when they go up/down in perfect step, which they do as they're stepper motors.

#

I've been telling Alexa to open and close them just so I can watch ๐Ÿ™‚

upbeat anchor
#

Next step is to print them in a similar colour to the wood, so they don't stand out as much ๐Ÿ™‚

#

But very nice work!

shut gazelle
#

or get a matching veneer

dreamy terrace
#

I don't think plastic pretending to be wood is ever that good. Maybe I could actually do a veneer though ๐Ÿ™‚

#

But nah, with them inset and low profile I'm happy with them in the black PETG

dreamy terrace
#

And more to the point, The Boss is happy. Even if she made that face when I started cutting into the window frames and drilling into the walls and poking around with the endoscope

#

(that photo not part of the montage)

upbeat anchor
#

Perhaps the same colour as the paintwork? You can add the triangular hat to make sure the blinds slide past the motor at the same time ๐Ÿ™‚

peak folio
#

under the stool is a sill and under that is nothing - so just two holes and it could be fully hidden. sure, it would be a big rework as the stool would act as an access panel

#

now the only option is to hide it with a wooden box

bold bobcat
#

Why an ESP32-S3 instead of an ESP32-C3? somehting I'm missing?

shut gazelle
#

Because the price difference is minuscule and it gives you overhead to run other things on it? People always seem to want to pack a million different things into one ESP

dreamy terrace
#

even the s3 had difficulty keeping up with the rotary encoder when I started playing with it

shut gazelle
#

Yeah I was thinking another benefit of the S3 is you could dedicate a core to just the encoder/stepper work, although ESPHome doesn't really expose a good way to do that (currently)

acoustic hull
#

encoders should be fine. Steppers are more difficult.

bold bobcat
#

local webserver fits on here

#

ESP32-C3 H4

#

my challenge was to make a low cost feture rich ESP32-C3 board that can either control two dual coil latching relays and handle uart for a bl0939 or install wled on it for a RGBCW light strip. For now I can get away with using i2C I/O multiplexers for everything.

one hurdle was that if the ESP32 decided to boot loop or kick the bucket, the mosfet would stay on and burn the relay coils.

fossil geyser
#

Trinamic also produces closed loop drivers with access to the encoder over uart/spi

shut gazelle
dreamy terrace
# acoustic hull encoders should be fine. Steppers are more difficult.

This board literally has a stepper driver chip, so that part is fine. For the rotary encoding, the ESP gets a lot less help. There are better encoder chips, but this board doesn't use them because the AS5600 ought to have been enough. And after I go and beat on ESPHome's MQTT code not to disappear off into the weeds for ten seconds (yes, not a typo) at a time in its loop() it mostly does work. cf. https://github.com/joshr120/PD-Stepper/discussions/36

upbeat anchor
dreamy terrace
#

No, I'm using this with Domoticz not HA.

#

I just fixed MQTT instead.

upbeat anchor
#

ah, makes sense

bold bobcat
fossil geyser
#

@dreamy terrace Out of curiosity, do you use the component I created for the tmc2209?

dreamy terrace
#

I think so.

#

The one in Josh's documentation.

#

The one that changes direction abruptly if you ask it to change direction while it's moving, instead of stopping and then reaccelerating from a standstill ๐Ÿ™‚

#

Just switches direction and keep going as the same steps/sec.

#

Keep meaning to report that ๐Ÿ™‚

fossil geyser
#

Yep, it uses the existing stepper implementation for ramping which doesn't gradually slow down and accelerate when changing direction. I have thought of doing an overhaul of my and the stepper implementation ๐Ÿ˜„

dreamy terrace
#

Oh, that's a core esphome issue?

shut gazelle
#

IIRC the current stepper implementation(s?) are rather basic, but acceleration wouldn't be too hard to add

dreamy terrace
#

I have temporarily forgotten again how frustrating it is to wait for ESPHome PRs to be merged, so maybe I can line that up again before I am reminded...

shut gazelle
#

I'm also not sure how best to approach it (possibly RMT?) but I have noticed that it can sort of "hiccup" if the other loop() tasks take longer ๐Ÿค”

dreamy terrace
#

The motor does? I've definitely seen that with the encoder

#

I thought the point in the driver chip was that the motor would continue doing the number of turns we told it to, even if the ESP actually resets (as long as it doesn't then reset the driver chip)

acoustic hull
#

I think @shut gazelle is referring to the regular stepper driver in esphome which is software pulsed.

shut gazelle
#

Ah yeah. I'm talking about the basic drivers either via h-bridge, or the direction/step plused one. It looks like you can control these TMC2209 drivers that way, but there are more advanced ways to as well.

fossil geyser
fossil geyser
#

RMT or MCPWM could be a way to implement hardware based step generation. The tmc2209 has a built-in pulse generator that can be controlled over uart

shut gazelle
#

Can it do things like easing and acceleration curves though?

fossil geyser
#

No, only velocity tho. Ramping has to come from the microcontroller

#

tmc2240 should be able to do an 8-point ramping profile IIRC

#

and it has direct encoder input, so IMO superior to tmc2209 for closed loop controllers

shut gazelle
#

Which encoders does it support? I feel like those come in quite a few varieties with different signals/protocols/etc.

fossil geyser
#

ABN quadrature encoders

dreamy terrace
dreamy terrace
dreamy terrace
dreamy terrace
#

oh crap, and I also used your cover STL.

#

So please may I use CC BY-SA 4.0 for that too?
I reimplemented the cover, as importing STL annoyed me anyway. Request stands for the config.

willow schooner
#

Just ordered! Iโ€™ve been eying this up for a while and finally gave in ๐Ÿ˜†

slender prawn
dreamy terrace
#

Thank you.

#

Tidied up that write-up, I'm quite happy with it now.

#

I printed and built a fourth one, just to make sure I got it right ๐Ÿ™‚

slender prawn
dreamy terrace
#

We really ought to have helpers for that kind of thing.

shut gazelle
dreamy terrace
#

No, for the general case of "is the time in an ESPTime object after 7:30AM" and similar comparisons. I have similar horridness in e.g. https://git.infradead.org/?p=users/dwmw2/esp32-pool.git;a=blob;f=pool.yaml#l188

 188             // Turn pump on if it's warm enough, between 7:30am and 10am (when it comes on anyway).
 189             if (((t.hour == 7 && t.minute >= 30) || t.hour >= 8) &&
 190                 t.hour < 10 && outtemp >= 20.0 && intemp > 5.0 && !id(pool_pump).state &&
peak folio
#

this is why automation in ha is handy than hardcoded ๐Ÿ™‚ but yea, it must be in sync - like warning lights on wind turbines or traffic lights when blinking

dreamy terrace
#

I don't want to automate it elsewhere. That isn't how this stuff should work. Those blinds should go up and down at the right time as long as the battery that feeds them exists. I'll tolerate them slowly losing NTP sync if an apocalypse takes out all of human civilisation and there's nothing for them to sync to. But as long as the front wall of my house exists and the battery has charge, they should be autonomous ๐Ÿ™‚

shell cairn
#

Hi Joshr, Love what you've done here that's some admirable craftmanship right there.
Did you end up getting an external component working on the driver?
.
I've been playing with nema 23 motors in esphome. The wiring got ugly pretty quick with the external driver requiring 5v signal. The configuration ended up being esp A5984 component, step and direction pins to ULN5984, going to DM5042 driver running the Nema23. This worked but wasn't getting full potential with limitations of the A5948 not meeting full potential of the external driver.
Since then I got an MKS SERVO57D and getting good results with rs485 on UART with an external component that chat GPT put together for me.
Running this with ESP32-S3-Touch-LCD-4.3 that has inbuilt rs485 resulted in a pretty neat set-up with a LVGL compatible HID.
It's working but not fully functioning, I still need to sniff more of the uart commands and I'm not sure I'll have enough memory for lvgl on top.
Just thought i'd share my experiment result in case you might get some ideas and inspiration on expanding your design to incorporate a master slave mks on steroids in esphome kinda thing.