Lav dine egne Zigbee enheder

Jeg synes Zigbee er en fascinerende teknologi, som du nok har oplevet, hvis du har læst min “ultimative Zigbee guide“. Jeg synes der er ved at være så meget support for enhederne, at man nok godt kan begynde at indse, at det godt kunne være fremtiden inden for smarte gadgets.

Jeg har derfor undersøgt hvordan man laver sin egen Zigbee enhed, som kan gøre præcis hvad man har lyst til.

100% gør det selv

En udvikler med navnet ptvo har udviklet et værktøj, der gør det muligt at flashe et helt skræddersyet firmware til sine Zigbee enheder. Hans værktøj burde opfylde stort set alles behov, da du har mulighed for at koble virkelig mange forskellige komponenter til din chip, såsom LEDer (eksempelvis til at vise status), rotary encoders (eksempelvis til volume), små DC motorer, RFID tag readers osv. osv.

Der er desværre en begrænsning for os: Batteridrevne enheder. Hvis du skal køre din Zigbee enhed med et batteri, så skal du betale for deep sleep muligheden, som koster cirka 50 kroner pr. enhed.

Jeg har brugt hans program til at lege lidt med mine egne enheder, men da jeg gerne vil have at de kører på batteri, måtte jeg kigge et andet sted hen, for jeg er pt. ikke klar til at betale for at få deep sleep, selvom en pris på 50 kroner pr. projekt måske ikke er så meget.

FreePad

Jeg faldt over en YouTube video for noget tid siden, der viser hvordan man laver sin egen Zigbee knap, lidt ligesom dem du kan købe af IKEA, Philips Hue, Samsung, Xiaomi osv. Fordelen ved at lave det selv er, at du selv bestemmer størrelsen på den, og at du altid kan udskifte en ødelagt del, da du selv har samlet enheden. For at samle FreePad kræver det de komponenter han har skrevet i beskrivelsen, men det kan du også se i videoen.

FreePad er dog ikke et produkt, men nærmere et firmware. Et open source firmware endda. Du kan tage FreePad firmwaret og flashe det på en enhed, og så kan du egentligt lave den præcis som du har lyst til, som er det jeg har valgt at gøre.

Med FreePad har hver knap mulighed for: Normal tryk (1 tryk), hold nede og slip. MEN, hver knap kan du også trykke på to gange, tre gange, fire gange.. ja, jeg ved faktisk ikke hvor mange gange, men jeg stoppede ved 50 og så “button_1_many_50” i Zigbee2MQTT, så du har essentielt flere muligheder end du har brug for.

Mit projekt

Jeg har valgt at lave en form for tastatur, hvor jeg eksempelvis kan tænde/slukke for ting via Home Assistant og Node-RED. Lige pt. kan den eksempelvis tænde/slukke for lyset på mit kontor og tænde for min PC, hvis jeg ikke gider spørge Google efter det (min PC er nemlig ikke særlig nem at nå). Det er dog kun fantastien der sætter grænser, for når først den er parret til ZHA eller Zigbee2MQTT, så kan du jo stort set gøre hvad du vil.

Komponenter

Listen af komponenter er udelukkende brugt til dette ret overkill projekt. Jeg vil ikke anbefale at bruge alle de komponenter jeg har brugt, men derimod drage inspiration (mere om det senere).

Development board PCB til Zigbee chippen

EBYTE E18 CC2530 chippen bruger et 1.27mm pitch, hvilket betyder der er 1.27 millimeter mellem hver “terminal”. Det er halvt så meget som “normale” 2.54mm komponenter, hvilket er det de fleste komponenter ellers er lavet til. Det er ikke nødvendigt at bestille sådan nogle PCBer, men det gør klart udviklingen lettere, da du ellers er nødt til at lodde komponenter direkte fast på chippen.

Et PCB kan findes inde på denne side, hvor du finder en ZIP fil. Der er desværre en lille fejl i teksten, så der er to styks PIN 05, men det er altså PIN 05 og PIN 06. Download ZIP filen og gå ind på JLCPCB, hvor du kan uploade ZIP filen og egentligt bare vælge det antal du vil have. Jeg bestilte 30 PCBer til under 75 kroner inklusiv fragt. Fragten tog lige under en måned, så det er også rigtig acceptabelt.

Batteri og strøm

Kan du huske, jeg nævnte noget om, at jeg ikke anbefaler de komponenter, jeg har valgt i projektet? Det er udelukkende på grund af batteriet. Jeg har købt et Power Profiler Kit II, som kan læse et rigtig præcis forbrug af enheder. Da hele projektet var samlet færdig, og jeg bare manglede at koble et 18650 batteri til, tog jeg min PPK2 frem, brugte den som et falsk 4.2 volt batteri og målte forbruget:

Det du ser på billedet er et gennemsnitsforbrug på 4.69 mikroamperetimer. Det er 0.0047 milliamperetimer. Det er 0.0000047 amperetimer. Forbruget er så lavt, at hvis vi leger med tanken om, at batterier ikke taber spænding over tid bare ved at ligge stille, så kan et 3000 mAh batteri holde den i live i 57 år.

Hvad anbefaler jeg i stedet for? Den CC2530 chip jeg bruger kan tage mod en spænding på 2 og 3.6 volt. Det vil derfor være oplagt enten at vælge et CR2032 batteri (cirka 300 mAh) eller 2 styks AAA batterier i serie (cirka 750 mAh). Så kan du nemlig også undgå 18650 holderen, LDOen der laver spændingen om til 3.3 volt samt TP4056 batteribeskytter/opladeren, og så vil din CC2530 stadigvæk holde strøm i mange, mange år (7 år ud fra denne beregner).

Sammensæt komponenterne

Diagram

Jeg har fulgt et rigtig fint diagram fra FreePad, som viser hvordan knapperne/switches skal forbindes til chippen:

Button matrix

Diagrammet er egentligt meget simpelt at følge: SW1 (switch nummer 1) skal være forbundet til P0.2 og P1.2 på CC2530 chippen, og så skal du sætte en 10K modstand på mellem GND og ledningen der går til P0.2 (tror dog der er ligegyldigt hvilken side af knappen den sidder på). SW2 forbinder du så til P0.2 og P1.3, og der har du allerede en modstand på fra P0.2. Sådan fortsætter du, indtil du har en række med 4 knapper, og så kan du gå ned til P0.3 hvis du vil have en ekstra kolonne (max 20).

Den type af “layout til knapperne” hedder et button matrix. Det er stort set sådan alle tastaturer er lavet, da du skal trække mindst mængde ledninger/baner på et PCB. Deres diagram er ikke perfekt, og gør at du kun kan trykke på én knap ad gangen, men du kan læse mere på denne side om sådan nogle problemer: https://deskthority.net/wiki/Rollover,_blocking_and_ghosting

Mit (grimme) button matrix

Strøm

FreePad bruger et CR2032 batteri, som de bare forbinder direkte til GND og VCC. Jeg bruger i stedet for et 18650 batteri, en LDO og et par kondensatorer for at formindske mængden af ripple og for at få en stabil udgang. Jeg vil ikke gå i detaljer med hvordan det virker, for jeg anbefaler som sagt ikke min løsning, men en god guide kan findes her, hvis man ser bort fra solcellerne.

Programmering/flash af chippen

Jeg har i mit PCB valgt at tilføje et 5-pin dupont stik, så jeg bare kan koble min CC Debugger til, for at flashe den med et nyt firmware:

Det er dog ikke nødvendigt.

For at programmere CC2530 chippen, skal du bruge en CC Debugger (og nogle breadboard kabler hvis du har sat den på det PCB jeg nævnte før). Når du har fat i de komponenter, skal du koble dem til på følgende måde:

Derefter åbner du dit yndlingsprogram til at flashe sådan nogle chips (jeg bruger Texas Instruments “Flash Programmer” (IKKE NUMMER 2)) og hente .hex filen fra FreePads Github. Jeg bruger den der hedder DIYRuZ_FreePad_PM3.hex, da den har “power management 3”, som der er deres form for deep sleep. Hvis du bruger Flash Programmer som jeg gør, så husk at slå “Retain IEEE….” fra, for ellers vil den nok fejle med at flashe. Se eventuelt YouTube videoen jeg snakkede om før, da han også går igennem at flashe chippen.

Når det er fuldført, så burde det bare være et spørgsmål om at åbne ZHA eller Zigbee2MQTT op og parre med enheden, som automatisk burde være i parringstilstand, hvis den ikke er forbundet. Jeg ved faktisk ikke hvordan man får den til at parre til en anden coordinator, så hvis det bliver et problem, så lav et issue på hans Github, så burde han nok svare tilbage.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *