DONOFF – WiFi enabled light dimmer

Part-4 – Building a DONOFF device

In the previous parts I introduced the DONOFF ecosystem.

In this part I will show you how to build a DONOFF device.

Warning: Any circuit that deals with MAINS VOLTAGES is inherently dangerous, and you should NEVER handle mains voltages unless you know exactly what you are doing. The DONOFF circuit is purely theoretical and offers no isolation or any safety features, and therefore, without modification, it does not constitute a safe circuit, or having practical applications outside serving as a proof-of-concept.

DONOFF dimmer PCB
If you still reading this I have one more warning: Whatever you do, do not build this circuit on a broad board!
You can build it on an experiment-board (use a board with pads on both sides) with proper soldering. But the best way by far is to use a dedicated PCB.


The PCB is designed using KiCad 5.0 and is produced by PCBWay. The standard copper layer used by PCBWay is 1 oz/ft2 and according to the Online Trace Width Calculator the track width for the High Power (HP) traces should be about 2mm.

Bill Of Material (BOM)
You need the following parts:

#PartDescriptionPrice €
1DONOFF PCB© by Willem Aandewiel6,00
1IRF 730Q1 – Power-MOSFET N-Ch TO-220AB 400V 5,5 A0,75
1B420C1500 (Round)D1 – Bridge rectifier 1,5A 420VAC0,25
11N4007D2 – Diode 1000 V 1 A0,05
11N 5352BG ONSD3 – Zener diode 017AA 15 V 5 W0,25
14N 35U1 – Optocoupler0,30
12 Watt Metal 150KR4 – Metallic film resistor 2W, 5% 150K-ohm0,15
3Metal 220 ohmR1,R3,R6 – Metallic film resistor 1/2W 220 ohm0,20
1Metal 6k8 ohmR7 – Metallic film resistor 1/4W 6800 ohm0,10
2Metal 10K-ohmR2,R5 – Metallic film resistor 1/4W 10K-ohm0,20
1VDR-0,6 460RV1 – Varistor Rm 7,5mm 0,6W 460VAC = JVR14N751K0,30
1RUBY 100PX47MT78C2 – Elco Radial 47 uF RM 3,5  105*C 2000H 20%0,30
1MMK 220N 400C1 – Film Capacitor 220nF 400V 100*C0,30
2LAKL 1,5 2 5.08J1,J3 – Phoenix Screw terminal 2-poles RM 5,08mm 90*1,25
1LAKL  2 2.54J2 – Phoenix Screw terminal 2-poles RM 2,54mm 90*0,60 
1K TR 1,0AFuse 5x20mm Slow Blow 1,000A0,55
1PL 112000F1 – Fuse holder 5x20mm max 6,3A/250V0,30
1AC to 3.3v DC PS1 – Hi-Link HLK-5M03 or Mean Well IRM-017,40
1ESP-01U2 – ESP8266 module ESP-01 black edition (1MB)5,90

Total cost of all parts (excl. proper casing) less than € 26,-

You can buy a complete kit with the PCB and all the parts here!

Putting it all together

Building a DONOFF device involves a view steps that should be followed in sequence.
Before you begin, make sure you have all the right parts!

Step 1

The High-Power traces on the PCB are only 1.5mm wide. To comply with the rated current of ~1 ampere I have left-out the solder-mask on these traces to make it possible to raise the maximum current by covering them with solder. It is absolutely mandatory that you do that!

Step 2

Solder the lowest parts on the PCB first. These are R1, R2, R5, D1 and U1.

Make sure you place D1 and U1 in the right way, the D1 “+” pin point opposite the markings on the PCB. U1 has a tiny mark (dot) near pin 1 or a small groove. Align pin 1 towards the 1 on the silkscreen.
The resistors have no polarity so it does not matter how you place them.

Step 3

Place R4 but make sure you elevate him a bit above the PCB as this is a component that dissipates a lot of heat and the more air surrounds it, the better it can get rid of this heat.
The temperature of R4 rises about 15°C above the ambient (surrounding) temperature!

Step 4

Now place the diode D2 and the resistors R3, R6 and R7 vertically.

Try to place them in a way where there is the least chance the wires from the resistors can make contact with other parts on the PCB.
The polarity of D2 is important! The white stripe on D2 connect to to the square pad on the PCB.
It’s always a good idea to isolate them with some heat-shrink tube.

Step 5

Solder D3 vertically on the PCB. The polarity is important!

The white stripe on D3 connect to to the square pad on the PCB. And again, some heat-shrink on the exposed wires makes it a little safer!

Step 6

Next place F1 (fuse holder), RV1 (varistor) and C2. Make sure you align the white stripe () on C2 with the white arc on the PCB!

Step 7

Solder Q1. The metal plate of Q1 points to C2. To lower the profile of the DONOFF dimmer you can bend Q1 a little towards C2. And again, some heat-shrink over Q1 reduces the chance for a short circuit and lower the chance you get electrocuted.

Step 8

Solder the 2×4 header for the ESP-01 and the three screw terminals for Mains-In, LED-Out and Ext.Switch.

Step 9

Finally solder C1 and PS1 on the PCB.

Your done!

The DONOFF dimmer hardware is ready for the ESP-01 to be placed on the 2×4 header.

As I stated before, this project is very dangerous due to the high voltages involved and the many exposed parts that carry these high voltages. It is best to place the DONOFF dimmer in a suitable casing before you connect it to mains.

Rapping it all up

I used a mains extension cord and cut it in 1/3 and 2/3. The power plug is connected to the MAINS IN terminal, the power out is connected to the LED OUT terminal.

Adding a foot switch

The external switch is isolated from mains and connected to the low-voltage (3v3) part of DONOFF so you don’t really need to use a mains-power cord to connect the switch. As, in this case, it is a foot operated switch I choose to make it rigged.

This entry was posted in Arduino, DONOFF, ESP8266, Hardware, SONOFF, WiFi and tagged , , , , , , , , , . Bookmark the permalink.

50 Responses to DONOFF – WiFi enabled light dimmer

  1. Rob de Bie says:

    Beste Willem,
    Grandioos, wederom een hele diepe buiging !
    Mooi, zinvol en bruikbaar project.
    Groet,
    Rob

  2. Rob says:

    Hoi Willem,
    na je slimme meter monitor gebouwd te hebben, ga ik dit zeker even volgen.
    Groet, Rob (andere rob dan hierboven!)

    • Hallo Rob,
      Het is zeker een project dat de moeite waard is. Ben nu nog druk in de Research & Development (eerste print-ontwerp heeft een verkeerd formaat Hi-Link 🙁 )
      Verder nog wat punten op I-en zetten. Maar dan krijg je ook wat!

      Ondertussen werkt DONOFF bij mij al vanaf februari 2019 probleemloos met één master, drie DONOFF slaves en een SONOFF switch.

      Je kunt hier een complete kit (zonder project box) kopen.

  3. diy electric bike says:

    Your style is unique in comparison to other folks I have read stuff from.
    Many thanks for posting.
    I will just bookmark this page

  4. K.G. Dik says:

    Willem , ik ben iedere keer weer onder indruk van de mogelijkheden van de huidige electronica, maar dat wist je al!
    Ik ben benieuwd wat je dit jaar allemaal weer fabriekt!
    Kees

  5. Erik Meinders says:

    Willem,

    This is exactly what SONOFF misses; the ability to dimm your lights. Even LED lights, which of course is today’s standard. I can’t wait to see what else you come up with in 2019!?

    Keep up the good work,

    Erik

  6. Roland says:

    Hi Willem,
    I’ve done your smart meter reader project with great pleasure before.
    And now see that you have another nice project; Donoff
    Maybe you have the Donoff pcb for sale separately?
    I will send you my personal data by mail
    Thnx in advance, Roland

    • Willem Aandewiel says:

      Hi Roland,

      Nice you like my projects.
      Send you a PM.

      In the mean time opencircuit.nl is selling DONOFF as a complete kit that you can order here.

  7. Rob says:

    mooi project willem. Nu nog een versie ontwerpen die zoals de zwave en shelly systemen achter een schakelaar in een wcd past.

    • Willem Aandewiel says:

      @Rob,

      I’m not familiar with zwave and shelly but I wonder if they have PWM dimmers that small …. But of course that is the ultimate goal.

  8. Sune Bielefeldt says:

    Dear Willem Aandewiel
    It is a great project you have made here, just what I have missed for a long time.
    I am a great consumer of Sonoff, but have missed this dimmer feature that Donoff offers.

    I want to try to build one or more sets myself.

    Is it possible to buy PCBs from you, or maybe just Gerber files so I can order them myself?

    Best regards from Denmark
    Sune Bielefeldt

  9. Andrew Bennett says:

    Hi Willem, this looks interesting. Could you tell me if you still have PCB’s or files available? Thanks.

  10. Ed says:

    Well done, but just one remark: you also do not “need” a home automation system for the sonoff, can do that with a webserver as well, just as you did with the donoff

  11. Sorin Tudor says:

    Hi Willem,

    Congratulations for this project!
    I would like to reproduce it too, the presentation seems pretty clear to me and I would like to control some LED bulbs …
    My question is the following: what kind of LED bulbs can I use? Dimmable LED bulbs working at 220V AC are OK considering the DC power supply? If not, what kind of bulbs do you recommend?

    Sincerely,
    Sorin from Romania

    • Willem Aandewiel says:

      Sorin,
      Nice you like my project.
      I have tested with Ikea, Philips and a view other brands “dimmable led-bulbs”. Mind you, all ‘mains’ led bulbs work internaly with DC voltage. The Donoff work as well with normal light bulbs.

      You can buy a complete kit here.

      • Sorin Tudor says:

        I’m glad to hear that!
        I hope not to bother with other questions if necessary.
        Thanks for the quick response!

    • Willem Aandewiel says:

      No problem!
      Keep me posted about your findings and progress.

  12. andrew says:

    Hi Willem,
    R1 marked on the board is not on the Bill of Materials. What value is it?

  13. Geert says:

    Hi Willem ,

    Heb je nog een complete set te koop ,
    Hoor graag van je
    Gr Geert

  14. Jorrit says:

    Hoi Willem,

    Is er een mogelijkheid deze dimmer te laten werken met google assistent?
    Met Sonoff kan je deze koppelen dmv de service “Smart We Link”, maar aangezien hier andere firmware op zit, vraag ik me af of hier een oplossing voor is.

    Mvg,
    Jorrit

    • Willem Aandewiel says:

      Hi Jorrit,
      Ik ken Google Assistent niet maar het is vast wel mogelijk om de Assistant de correcte informatie naar de DONOFF te laten sturen om zo lampen te dimmen of uit of aan te zetten.

  15. Roland says:

    I have made an enclosure for DONOFF; https://www.thingiverse.com/thing:3924602

  16. Roland says:

    By the way; the HLK-PM03 still doesn’t fit on PCB V2.1

    • Willem Aandewiel says:

      Strange!
      On my V2.1 PCB they fit both. So, unless the footprint of the HLK-PM03 has changed I would not know why it should not fit ..
      I send you a PM.

      • Roland says:

        Hi Willem, I understand the confusion now, I used the HLK-5M03 (5W) module (according to your BOM list) instead of the HLK-PM03 (3W) module. The dimensions on the PCB correspond to the HLK-PM03.

  17. Chris says:

    Op de een of andere manier krijg ik bij het verifiëren de foutmelding dat WebSocketsServer.h niet aanwezig is. Welke library moet ik downloaden van github om dit te corrigeren?

    • Willem Aandewiel says:

      Hi Chris,

      Je zult echt iets meer informatie moeten geven.
      – Wat heb je gedaan om de code in de Arduino IDE te krijgen?
      – Heb je de documentatie goed gelezen?
      – Welke versie van de DONOFF code probeer je te compileren?
      – Welke libraries heb je geïnstalleerd?
      – Welke versie van de IDE gebruik je?
      – Welke versie van de Arduino/ESP8266 core heb je geïnstalleerd?
      – Kun je een stukje van de compile-output toevoegen (liefst geen plaatjes want die zijn bijna niet te lezen)

      • Chris says:

        Dag Willem,
        Hartelijk dank voor je snelle reactie. Ik ben bang dat ik net door de mand ben gevallen als een absolute beginner…
        Dankzij de instructie is het me gelukt om Arduino IDE te installeren en DONOFF v0.3.6 te downloaden en te openen. Door de links in de code werd precies aangegeven welke library ik nog miste. Dus die heb ik 1 voor 1 toegevoegd. Alleen voor de websocket stond het er niet bij. Door te zoeken op github op WebSocketsServer.h heb ik gevonden dat ik de library van Links2004/arduinoWebSockets moet hebben. Inmiddels heb ik het kunnen compileren. Ik kijk ernaar uit om te gaan solderen 😉
        Heel erg bedankt voor dit mooie laagdrempelige project. Als ik het aan de praat krijg dan gaat er een wereld voor me open!
        Met hartelijke groet,
        Chris

  18. Don Zentmeyer says:

    Are the kits for DONOFF available in the US? Can they be shipped to the US?

    • Willem Aandewiel says:

      Hi Don,

      I don’t know. You better ask opencircuit.nl.
      But mind you, DONOFF is configured for 230v mains.

      • Don Zentmeyer says:

        When I looked at the BOM both of the recommended power modules (IRM-01-3.3 and HLK-PM03) are rated for 110 or 230.
        A little over my head but won’t either convert mains power to 3.3vDC?

    • Willem Aandewiel says:

      Don,

      The power modules are not the problem. It’s the Mosfet Control Circuit that is, with the given dimensions, not suitable for 110volt.

  19. Chris says:

    Dag Willem,

    Het is inmiddels gelukt om te compileren. Ik heb alles van Arduino IDE verwijderd en ben opnieuw begonnen aan de hand van de instructie bij de DSMR-logger (zoals je aangeraden had). Daarna heb ik de DONOFF firmware via een zip gedownload en uitgepakt (de instructie $ git clone https://github.com/mrWheel/DONOFF.git . werkte bij mij niet. Ik deed vast iets verkeerd, maar geen idee wat. ‘git’ is een programma dat niet wordt herkend). Maar via de Arduino IDE kon ik ook de DONOFF.ino starten en daarna dus compileren.

    Bedankt voor de hulp!

    • Willem Aandewiel says:

      Chris,

      Bedankt voor de feedback.

      Git is inderdaad een programma dat je moet installeren (daarover is alles met google te vinden) en waarmee je eenvoudig met github kunt werken.

      Maar het downloaden van het zip file werkt net zo goed.

      Succes verder met DONOFF.

  20. Chris says:

    Goedemorgen Willem,

    Als beginneling ben ik aan het zoeken en kom niet verder. Misschien kan je een hint geven hoe ik het beste verder kan gaan?

    Mijn probleem is als volgt: Ik kan de DONOFF firmware uploaden, maar krijg bij het laden van de icoontjes via ‘ESP8266 Sketch data upload’ de volgende foutmelding (in blauw). Ik gebruik uploader “AVRISP mkll” (zie screenshot).
    Ik ben aan het zoeken maar kom niet verder (ook niet via internet). Wat is de beste stap die ik zou kunnen doen? Moet ik de bibliotheek opnieuw installeren? Of een andere uploader instellen?

    Alvast bedankt voor je hint/hulp,

    Met groet,

    Chris


    ======================================================
    Arduino:1.8.11 (Windows Store 1.8.29.0) (Windows 10), Board:"Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:128KB OTA:~438KB), 1, nonos-sdk 2.2.1+113 (191105), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    [SPIFFS] data : C:\Users\Chris\Documents\Arduino\DONOFF\data
    [SPIFFS] size : 128
    [SPIFFS] page : 256
    [SPIFFS] block : 4096
    /admin.html
    /admin_sm.png
    /index.html
    /lightOff.ico
    /lightOn.ico

    [SPIFFS] upload : C:\Users\Chris\AppData\Local\Temp\arduino_build_193833/DONOFF.spiffs.bin
    [SPIFFS] address : 0xDB000
    [SPIFFS] reset : --before default_reset --after hard_reset
    [SPIFFS] port : COM6
    [SPIFFS] speed : 115200
    [SPIFFS] python : python.exe
    [SPIFFS] uploader : C:\Users\Chris\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.6.2\tools\upload.py

    usage: esptool [-h] [--chip {auto,esp8266,esp32}] [--port PORT] [--baud BAUD]

    [--before {default_reset,no_reset,no_reset_no_sync}]

    [--after {hard_reset,soft_reset,no_reset}] [--no-stub]

    [--trace] [--override-vddsdio [{1.8V,1.9V,OFF}]]

    {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,version}

    ...

    esptool: error: unrecognized arguments: --end

    SPIFFS Upload failed!

    Dit rapport zou meer informatie bevatten met
    "Uitgebreide uitvoer weergeven tijden compilatie"
    optie aan in Bestand -> Voorkeuren.
    ======================================================

    • Willem Aandewiel says:

      Hi Chris,

      Je gebruikt helemaal geen programmer dus daar hoef je ook niets in te vullen.

      FWIW: bij mij is USBasp geselecteerd (waarschijnlijk omdat ik die het laatst gebruikt hebt bij het programmeren van een ATmeg328).

      Na het flashen van de firmware moet je de hele data-map naar SPIFFS flashen. Dat doe je met het “Sketch Data Upload” tool die je eerst zelf moet installeren (hier kun je lezen hoe dat moet).
      Waarschijnlijk gebruik je een versie van het data upload tool die niet compatible is met je Arduino IDE. Op de website van het tool staan verschillende versies hiervan. Meestal is de nieuwste goed in combinatie met de nieuwste Arduino IDE (ik gebruik 1.8.10).

      Eventueel kun je de maintenance page handmatig starten door in de browser, achter http://IPADDRES/ of http://donoff.local/ “maintenance” te tikken (zonder de quotjes!).

      Via de maintenance page kun je met [choose file] één voor één de bestanden uit de data map uploaden.

      Anders moet je deze hint misschien opvolgen:

      Dit rapport zou meer informatie bevatten met
      “Uitgebreide uitvoer weergeven tijden compilatie”
      optie aan in Bestand -> Voorkeuren.

      Ik heb geen verstand van Windows dus specifieker kan ik je niet helpen..

  21. Chris says:

    Hartelijk dank!
    Ik ga het proberen. Ik heb intussen de data map handmatig overgezet en voor het eerst alles aangesloten. En…. het werkt!
    Ik heb er nu al zoveel lol van 🙂

    • Willem Aandewiel says:

      Dat is mooi om te horen.

      Ik heb er zelf verschillende draaien en ben er ook nog steeds verbaast over hoe goed het werkt!!

  22. RobV says:

    Hi Chris en anderen:

    Ik heb ook mn eerste set gebouwd en hij werkt!
    Maar, de lampen (LED Dimable verschillende soorten) branden allemaal niet stabiel. Ze faden, afhankelijk van de PWM-frequentie, regelmatig aan en (deels) uit. Het lijkt of er een klokpuls net uit de pas loopt met de netfrequentie of zo. Misschien een zero-cross probleempje? Kan iemand mij advies geven?

    Groet, RobV

    • Willem Aandewiel says:

      Hi RobV,

      Heb je verschillende PWM frequenties geprobeerd?

      De meeste LED lampen kun je niet tot “0” dimmen. Je moet de minimale waarde zo kiezen dat er geen fading meer optreedt.

      • RobV says:

        Hallo Willem. Dank voor je snelle reactie. En ja, ik ken het effect van LED-lampen op lage lichtsterkte. Ik heb een ander effect ook bij halve lichtsterkte. Om duidelijk te maken wat ik bedoel, heb ik een filmpje gemaakt maar het lukt me niet om dat hier te posten.

        Groet, RobV

        • @RobV
          .. voor mij ook een raadsel!
          Als je er een “gewone” lamp op aansluit, wat gebeurd er dan?

          Kun je de spanning over D3 en C2 meten? Liefst met een oscilloscoop, maar dan moet je wel een differential probe gebruiken anders kun je je scoop opblazen!!! Ik zou haast denken dat de 15 volt spanning fluctueert. Als de frequentie laag is zou je het met een normale multimeter moeten kunnen volgen. Spanning moet zo tussen de 13v en 15v liggen.

          Kan het zijn dat je onderdelen verkeerd gebruikt heb? Ik denk dan bijvoorbeeld aan R3, R4 en R6

Leave a Reply

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


The maximum upload file size: 4 MB.
You can upload: image, other.
Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded.

This site uses Akismet to reduce spam. Learn how your comment data is processed.