Compare commits

...
8 Commits
46 changed files with 96364 additions and 79 deletions
Binary file not shown.
File diff suppressed because it is too large Load Diff
+74
View File
@@ -0,0 +1,74 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,2.109000*%
%ADD11R,1.700000X1.700000*%
%ADD12O,1.700000X1.700000*%
%ADD13R,2.800000X2.800000*%
%ADD14O,2.800000X2.800000*%
G04 APERTURE END LIST*
D10*
%TO.C,U1*%
X167640000Y-73920000D03*
X167640000Y-71380000D03*
X167640000Y-68840000D03*
X167640000Y-66300000D03*
X167640000Y-61220000D03*
X167640000Y-63760000D03*
X152400000Y-56140000D03*
X167640000Y-56140000D03*
X152400000Y-58680000D03*
X152400000Y-61220000D03*
X152400000Y-63760000D03*
X152400000Y-66300000D03*
X152400000Y-68840000D03*
X152400000Y-71380000D03*
X152400000Y-73920000D03*
X167640000Y-58680000D03*
%TD*%
D11*
%TO.C,J3*%
X147320000Y-71120000D03*
D12*
X147320000Y-73660000D03*
X147320000Y-76200000D03*
%TD*%
D11*
%TO.C,J1*%
X175260000Y-66040000D03*
D12*
X175260000Y-68580000D03*
X175260000Y-71120000D03*
X175260000Y-73660000D03*
X175260000Y-76200000D03*
%TD*%
D11*
%TO.C,J4*%
X132080000Y-73660000D03*
D12*
X132080000Y-76200000D03*
%TD*%
D13*
%TO.C,D1*%
X132080000Y-55880000D03*
D14*
X132080000Y-66040000D03*
%TD*%
D11*
%TO.C,J2*%
X142240000Y-71120000D03*
D12*
X142240000Y-73660000D03*
X142240000Y-76200000D03*
%TD*%
M02*
+15
View File
@@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*
@@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*
+26
View File
@@ -0,0 +1,26 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.100000*%
%TD*%
G04 APERTURE END LIST*
D10*
X177800000Y-78740000D02*
X177800000Y-53340000D01*
X129540000Y-78740000D02*
X177800000Y-78740000D01*
X129540000Y-53340000D02*
X129540000Y-78740000D01*
X177800000Y-53340000D02*
X129540000Y-53340000D01*
M02*
+365
View File
@@ -0,0 +1,365 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L1,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%TA.AperFunction,ComponentPad*%
%ADD10C,1.905000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD11R,1.700000X1.700000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD12O,1.700000X1.700000*%
%TD*%
%TA.AperFunction,SMDPad,CuDef*%
%ADD13RoundRect,0.165000X-0.165000X-0.475000X0.165000X-0.475000X0.165000X0.475000X-0.165000X0.475000X0*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD14R,2.800000X2.800000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD15O,2.800000X2.800000*%
%TD*%
%TA.AperFunction,SMDPad,CuDef*%
%ADD16R,0.900000X1.500000*%
%TD*%
%TA.AperFunction,ViaPad*%
%ADD17C,0.800000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD18C,0.250000*%
%TD*%
G04 APERTURE END LIST*
D10*
%TO.P,U1,0,GPIO0*%
%TO.N,Net-(J1-Pad4)*%
X167640000Y-73920000D03*
%TO.P,U1,1,GPIO1*%
%TO.N,Net-(J1-Pad3)*%
X167640000Y-71380000D03*
%TO.P,U1,2,GPIO2*%
%TO.N,Net-(J1-Pad2)*%
X167640000Y-68840000D03*
%TO.P,U1,3,GPIO3*%
%TO.N,unconnected-(U1-Pad3)*%
X167640000Y-66300000D03*
%TO.P,U1,3.3,3V3*%
%TO.N,+3.3V*%
X167640000Y-61220000D03*
%TO.P,U1,4,GPIO4*%
%TO.N,unconnected-(U1-Pad4)*%
X167640000Y-63760000D03*
%TO.P,U1,5,GPIO5*%
%TO.N,GPIO5*%
X152400000Y-56140000D03*
%TO.P,U1,5V,5V*%
%TO.N,+5V*%
X167640000Y-56140000D03*
%TO.P,U1,6,GPIO6*%
%TO.N,GPIO6*%
X152400000Y-58680000D03*
%TO.P,U1,7,GPIO7*%
%TO.N,unconnected-(U1-Pad7)*%
X152400000Y-61220000D03*
%TO.P,U1,8,GPIO8*%
%TO.N,unconnected-(U1-Pad8)*%
X152400000Y-63760000D03*
%TO.P,U1,9,GPIO9*%
%TO.N,unconnected-(U1-Pad9)*%
X152400000Y-66300000D03*
%TO.P,U1,10,GPIO10*%
%TO.N,unconnected-(U1-Pad10)*%
X152400000Y-68840000D03*
%TO.P,U1,20,GPIO20*%
%TO.N,unconnected-(U1-Pad20)*%
X152400000Y-71380000D03*
%TO.P,U1,21,GPIO21*%
%TO.N,unconnected-(U1-Pad21)*%
X152400000Y-73920000D03*
%TO.P,U1,G,GND*%
%TO.N,GND*%
X167640000Y-58680000D03*
%TD*%
D11*
%TO.P,J3,1,Pin_1*%
%TO.N,+5V*%
X147320000Y-71120000D03*
D12*
%TO.P,J3,2,Pin_2*%
X147320000Y-73660000D03*
%TO.P,J3,3,Pin_3*%
X147320000Y-76200000D03*
%TD*%
D11*
%TO.P,J1,1,Pin_1*%
%TO.N,GND*%
X175260000Y-66040000D03*
D12*
%TO.P,J1,2,Pin_2*%
%TO.N,Net-(J1-Pad2)*%
X175260000Y-68580000D03*
%TO.P,J1,3,Pin_3*%
%TO.N,Net-(J1-Pad3)*%
X175260000Y-71120000D03*
%TO.P,J1,4,Pin_4*%
%TO.N,Net-(J1-Pad4)*%
X175260000Y-73660000D03*
%TO.P,J1,5,Pin_5*%
%TO.N,+3.3V*%
X175260000Y-76200000D03*
%TD*%
D13*
%TO.P,C2,2*%
%TO.N,GND*%
X145905000Y-66040000D03*
%TO.P,C2,1*%
%TO.N,+4V*%
X144825000Y-66040000D03*
%TD*%
D11*
%TO.P,J4,1,Pin_1*%
%TO.N,STRIP1*%
X132080000Y-73660000D03*
D12*
%TO.P,J4,2,Pin_2*%
%TO.N,STRIP2*%
X132080000Y-76200000D03*
%TD*%
D14*
%TO.P,D1,1,K*%
%TO.N,+5V*%
X132080000Y-55880000D03*
D15*
%TO.P,D1,2,A*%
%TO.N,+4V*%
X132080000Y-66040000D03*
%TD*%
D13*
%TO.P,C1,2*%
%TO.N,GND*%
X138285000Y-66040000D03*
%TO.P,C1,1*%
%TO.N,+4V*%
X137205000Y-66040000D03*
%TD*%
D16*
%TO.P,D3,4,DIN*%
%TO.N,GPIO6*%
X145130000Y-58510000D03*
%TO.P,D3,3,VSS*%
%TO.N,GND*%
X148430000Y-58510000D03*
%TO.P,D3,2,DOUT*%
%TO.N,STRIP2*%
X148430000Y-63410000D03*
%TO.P,D3,1,VDD*%
%TO.N,+4V*%
X145130000Y-63410000D03*
%TD*%
%TO.P,D2,1,VDD*%
%TO.N,+4V*%
X137510000Y-63410000D03*
%TO.P,D2,2,DOUT*%
%TO.N,STRIP1*%
X140810000Y-63410000D03*
%TO.P,D2,3,VSS*%
%TO.N,GND*%
X140810000Y-58510000D03*
%TO.P,D2,4,DIN*%
%TO.N,GPIO5*%
X137510000Y-58510000D03*
%TD*%
D11*
%TO.P,J2,1,Pin_1*%
%TO.N,GND*%
X142240000Y-71120000D03*
D12*
%TO.P,J2,2,Pin_2*%
X142240000Y-73660000D03*
%TO.P,J2,3,Pin_3*%
X142240000Y-76200000D03*
%TD*%
D17*
%TO.N,GND*%
X146720525Y-63365349D03*
X139115433Y-63424121D03*
X139700000Y-58420000D03*
X147320000Y-58420000D03*
%TD*%
D18*
%TO.N,STRIP2*%
X148430000Y-63410000D02*
X148430000Y-66404125D01*
X148430000Y-66404125D02*
X145935927Y-68898198D01*
X145935927Y-68898198D02*
X139381802Y-68898198D01*
X139381802Y-68898198D02*
X132080000Y-76200000D01*
%TO.N,GND*%
X138285000Y-66040000D02*
X139115433Y-65209567D01*
X139115433Y-65209567D02*
X139115433Y-63424121D01*
X145905000Y-66040000D02*
X146720525Y-65224475D01*
X146720525Y-65224475D02*
X146720525Y-63365349D01*
%TO.N,+4V*%
X144825000Y-66040000D02*
X144825000Y-63715000D01*
X144825000Y-63715000D02*
X145130000Y-63410000D01*
X143510000Y-62230000D02*
X143510000Y-66040000D01*
X137510000Y-63150000D02*
X139700000Y-60960000D01*
X137510000Y-63410000D02*
X137510000Y-63150000D01*
X139700000Y-60960000D02*
X142240000Y-60960000D01*
X142240000Y-60960000D02*
X143510000Y-62230000D01*
X143510000Y-66040000D02*
X144825000Y-66040000D01*
X132080000Y-66040000D02*
X137205000Y-66040000D01*
X137205000Y-66040000D02*
X137205000Y-63715000D01*
X137205000Y-63715000D02*
X137510000Y-63410000D01*
X144825000Y-66040000D02*
X144780000Y-66040000D01*
%TO.N,STRIP1*%
X140810000Y-63410000D02*
X140810000Y-66409340D01*
X140810000Y-66409340D02*
X133559340Y-73660000D01*
X133559340Y-73660000D02*
X132080000Y-73660000D01*
%TO.N,+5V*%
X158702500Y-54562500D02*
X133397500Y-54562500D01*
X162560000Y-58420000D02*
X158702500Y-54562500D01*
X147320000Y-76200000D02*
X152400000Y-76200000D01*
X152400000Y-76200000D02*
X162560000Y-66040000D01*
X162560000Y-66040000D02*
X162560000Y-58420000D01*
X162560000Y-58420000D02*
X164840000Y-56140000D01*
X147320000Y-76200000D02*
X152350922Y-76200000D01*
X152350922Y-76200000D02*
X162510922Y-66040000D01*
X162510922Y-66040000D02*
X162560000Y-66040000D01*
X164840000Y-56140000D02*
X167640000Y-56140000D01*
X133397500Y-54562500D02*
X132080000Y-55880000D01*
%TO.N,GPIO5*%
X152400000Y-56140000D02*
X152100000Y-55840000D01*
X140180000Y-55840000D02*
X137510000Y-58510000D01*
X152100000Y-55840000D02*
X140180000Y-55840000D01*
%TO.N,GND*%
X139790000Y-58510000D02*
X139700000Y-58420000D01*
X140810000Y-58510000D02*
X139790000Y-58510000D01*
X147410000Y-58510000D02*
X147320000Y-58420000D01*
X148430000Y-58510000D02*
X147410000Y-58510000D01*
%TO.N,+3.3V*%
X165360000Y-73920000D02*
X167640000Y-76200000D01*
X165360000Y-63500000D02*
X165360000Y-73920000D01*
X167640000Y-76200000D02*
X175260000Y-76200000D01*
%TO.N,GPIO6*%
X150310000Y-56590000D02*
X152400000Y-58680000D01*
X145130000Y-58210000D02*
X146750000Y-56590000D01*
X146750000Y-56590000D02*
X150310000Y-56590000D01*
X145130000Y-58510000D02*
X145130000Y-58210000D01*
%TO.N,Net-(J1-Pad2)*%
X175000000Y-68840000D02*
X175260000Y-68580000D01*
X167640000Y-68840000D02*
X175000000Y-68840000D01*
%TO.N,Net-(J1-Pad3)*%
X167640000Y-71380000D02*
X175000000Y-71380000D01*
X175000000Y-71380000D02*
X175260000Y-71120000D01*
%TO.N,Net-(J1-Pad4)*%
X175000000Y-73920000D02*
X175260000Y-73660000D01*
X167640000Y-73920000D02*
X175000000Y-73920000D01*
%TO.N,+3.3V*%
X167640000Y-61220000D02*
X165360000Y-63500000D01*
%TD*%
%TA.AperFunction,Conductor*%
%TO.N,+5V*%
G36*
X147516121Y-70886002D02*
G01*
X147562614Y-70939658D01*
X147574000Y-70992000D01*
X147574000Y-76328000D01*
X147553998Y-76396121D01*
X147500342Y-76442614D01*
X147448000Y-76454000D01*
X147192000Y-76454000D01*
X147123879Y-76433998D01*
X147077386Y-76380342D01*
X147066000Y-76328000D01*
X147066000Y-70992000D01*
X147086002Y-70923879D01*
X147139658Y-70877386D01*
X147192000Y-70866000D01*
X147448000Y-70866000D01*
X147516121Y-70886002D01*
G37*
%TD.AperFunction*%
%TD*%
M02*
+117
View File
@@ -0,0 +1,117 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10C,2.109000*%
%ADD11R,1.700000X1.700000*%
%ADD12O,1.700000X1.700000*%
%ADD13RoundRect,0.165000X-0.165000X-0.475000X0.165000X-0.475000X0.165000X0.475000X-0.165000X0.475000X0*%
%ADD14R,2.800000X2.800000*%
%ADD15O,2.800000X2.800000*%
%ADD16R,0.900000X1.500000*%
G04 APERTURE END LIST*
D10*
%TO.C,U1*%
X167640000Y-73920000D03*
X167640000Y-71380000D03*
X167640000Y-68840000D03*
X167640000Y-66300000D03*
X167640000Y-61220000D03*
X167640000Y-63760000D03*
X152400000Y-56140000D03*
X167640000Y-56140000D03*
X152400000Y-58680000D03*
X152400000Y-61220000D03*
X152400000Y-63760000D03*
X152400000Y-66300000D03*
X152400000Y-68840000D03*
X152400000Y-71380000D03*
X152400000Y-73920000D03*
X167640000Y-58680000D03*
%TD*%
D11*
%TO.C,J3*%
X147320000Y-71120000D03*
D12*
X147320000Y-73660000D03*
X147320000Y-76200000D03*
%TD*%
D11*
%TO.C,J1*%
X175260000Y-66040000D03*
D12*
X175260000Y-68580000D03*
X175260000Y-71120000D03*
X175260000Y-73660000D03*
X175260000Y-76200000D03*
%TD*%
D13*
%TO.C,C2*%
X145905000Y-66040000D03*
X144825000Y-66040000D03*
%TD*%
D11*
%TO.C,J4*%
X132080000Y-73660000D03*
D12*
X132080000Y-76200000D03*
%TD*%
D14*
%TO.C,D1*%
X132080000Y-55880000D03*
D15*
X132080000Y-66040000D03*
%TD*%
D13*
%TO.C,C1*%
X138285000Y-66040000D03*
X137205000Y-66040000D03*
%TD*%
D16*
%TO.C,D3*%
X145130000Y-58510000D03*
X148430000Y-58510000D03*
X148430000Y-63410000D03*
X145130000Y-63410000D03*
%TD*%
%TO.C,D2*%
X137510000Y-63410000D03*
X140810000Y-63410000D03*
X140810000Y-58510000D03*
X137510000Y-58510000D03*
%TD*%
D11*
%TO.C,J2*%
X142240000Y-71120000D03*
D12*
X142240000Y-73660000D03*
X142240000Y-76200000D03*
%TD*%
M02*
+57
View File
@@ -0,0 +1,57 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10RoundRect,0.165000X-0.165000X-0.475000X0.165000X-0.475000X0.165000X0.475000X-0.165000X0.475000X0*%
%ADD11R,0.900000X1.500000*%
G04 APERTURE END LIST*
D10*
%TO.C,C2*%
X145905000Y-66040000D03*
X144825000Y-66040000D03*
%TD*%
%TO.C,C1*%
X138285000Y-66040000D03*
X137205000Y-66040000D03*
%TD*%
D11*
%TO.C,D3*%
X145130000Y-58510000D03*
X148430000Y-58510000D03*
X148430000Y-63410000D03*
X145130000Y-63410000D03*
%TD*%
%TO.C,D2*%
X137510000Y-63410000D03*
X140810000Y-63410000D03*
X140810000Y-58510000D03*
X137510000Y-58510000D03*
%TD*%
M02*
+353
View File
@@ -0,0 +1,353 @@
%TF.GenerationSoftware,KiCad,Pcbnew,6.0.11+dfsg-1*%
%TF.CreationDate,2025-01-28T23:33:11+01:00*%
%TF.ProjectId,Hanglamp,48616e67-6c61-46d7-902e-6b696361645f,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 6.0.11+dfsg-1) date 2025-01-28 23:33:11*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11C,0.127000*%
%ADD12C,0.120000*%
G04 APERTURE END LIST*
D10*
%TO.C,U1*%
X153543095Y-51839880D02*
X153543095Y-52649404D01*
X153590714Y-52744642D01*
X153638333Y-52792261D01*
X153733571Y-52839880D01*
X153924047Y-52839880D01*
X154019285Y-52792261D01*
X154066904Y-52744642D01*
X154114523Y-52649404D01*
X154114523Y-51839880D01*
X155114523Y-52839880D02*
X154543095Y-52839880D01*
X154828809Y-52839880D02*
X154828809Y-51839880D01*
X154733571Y-51982738D01*
X154638333Y-52077976D01*
X154543095Y-52125595D01*
%TO.C,J3*%
X146986666Y-68242380D02*
X146986666Y-68956666D01*
X146939047Y-69099523D01*
X146843809Y-69194761D01*
X146700952Y-69242380D01*
X146605714Y-69242380D01*
X147367619Y-68242380D02*
X147986666Y-68242380D01*
X147653333Y-68623333D01*
X147796190Y-68623333D01*
X147891428Y-68670952D01*
X147939047Y-68718571D01*
X147986666Y-68813809D01*
X147986666Y-69051904D01*
X147939047Y-69147142D01*
X147891428Y-69194761D01*
X147796190Y-69242380D01*
X147510476Y-69242380D01*
X147415238Y-69194761D01*
X147367619Y-69147142D01*
%TO.C,J1*%
X174926666Y-63162380D02*
X174926666Y-63876666D01*
X174879047Y-64019523D01*
X174783809Y-64114761D01*
X174640952Y-64162380D01*
X174545714Y-64162380D01*
X175926666Y-64162380D02*
X175355238Y-64162380D01*
X175640952Y-64162380D02*
X175640952Y-63162380D01*
X175545714Y-63305238D01*
X175450476Y-63400476D01*
X175355238Y-63448095D01*
%TO.C,C2*%
X145198333Y-67667142D02*
X145150714Y-67714761D01*
X145007857Y-67762380D01*
X144912619Y-67762380D01*
X144769761Y-67714761D01*
X144674523Y-67619523D01*
X144626904Y-67524285D01*
X144579285Y-67333809D01*
X144579285Y-67190952D01*
X144626904Y-67000476D01*
X144674523Y-66905238D01*
X144769761Y-66810000D01*
X144912619Y-66762380D01*
X145007857Y-66762380D01*
X145150714Y-66810000D01*
X145198333Y-66857619D01*
X145579285Y-66857619D02*
X145626904Y-66810000D01*
X145722142Y-66762380D01*
X145960238Y-66762380D01*
X146055476Y-66810000D01*
X146103095Y-66857619D01*
X146150714Y-66952857D01*
X146150714Y-67048095D01*
X146103095Y-67190952D01*
X145531666Y-67762380D01*
X146150714Y-67762380D01*
%TO.C,J4*%
X131746666Y-70782380D02*
X131746666Y-71496666D01*
X131699047Y-71639523D01*
X131603809Y-71734761D01*
X131460952Y-71782380D01*
X131365714Y-71782380D01*
X132651428Y-71115714D02*
X132651428Y-71782380D01*
X132413333Y-70734761D02*
X132175238Y-71449047D01*
X132794285Y-71449047D01*
%TO.C,D1*%
X135502380Y-61698095D02*
X134502380Y-61698095D01*
X134502380Y-61460000D01*
X134550000Y-61317142D01*
X134645238Y-61221904D01*
X134740476Y-61174285D01*
X134930952Y-61126666D01*
X135073809Y-61126666D01*
X135264285Y-61174285D01*
X135359523Y-61221904D01*
X135454761Y-61317142D01*
X135502380Y-61460000D01*
X135502380Y-61698095D01*
X135502380Y-60174285D02*
X135502380Y-60745714D01*
X135502380Y-60460000D02*
X134502380Y-60460000D01*
X134645238Y-60555238D01*
X134740476Y-60650476D01*
X134788095Y-60745714D01*
X134932380Y-56141904D02*
X133932380Y-56141904D01*
X134932380Y-55570476D02*
X134360952Y-55999047D01*
X133932380Y-55570476D02*
X134503809Y-56141904D01*
%TO.C,C1*%
X137578333Y-67667142D02*
X137530714Y-67714761D01*
X137387857Y-67762380D01*
X137292619Y-67762380D01*
X137149761Y-67714761D01*
X137054523Y-67619523D01*
X137006904Y-67524285D01*
X136959285Y-67333809D01*
X136959285Y-67190952D01*
X137006904Y-67000476D01*
X137054523Y-66905238D01*
X137149761Y-66810000D01*
X137292619Y-66762380D01*
X137387857Y-66762380D01*
X137530714Y-66810000D01*
X137578333Y-66857619D01*
X138530714Y-67762380D02*
X137959285Y-67762380D01*
X138245000Y-67762380D02*
X138245000Y-66762380D01*
X138149761Y-66905238D01*
X138054523Y-67000476D01*
X137959285Y-67048095D01*
%TO.C,D3*%
X145232380Y-56618095D02*
X144232380Y-56618095D01*
X144232380Y-56380000D01*
X144280000Y-56237142D01*
X144375238Y-56141904D01*
X144470476Y-56094285D01*
X144660952Y-56046666D01*
X144803809Y-56046666D01*
X144994285Y-56094285D01*
X145089523Y-56141904D01*
X145184761Y-56237142D01*
X145232380Y-56380000D01*
X145232380Y-56618095D01*
X144232380Y-55713333D02*
X144232380Y-55094285D01*
X144613333Y-55427619D01*
X144613333Y-55284761D01*
X144660952Y-55189523D01*
X144708571Y-55141904D01*
X144803809Y-55094285D01*
X145041904Y-55094285D01*
X145137142Y-55141904D01*
X145184761Y-55189523D01*
X145232380Y-55284761D01*
X145232380Y-55570476D01*
X145184761Y-55665714D01*
X145137142Y-55713333D01*
X146502380Y-60674285D02*
X146502380Y-61245714D01*
X146502380Y-60960000D02*
X145502380Y-60960000D01*
X145645238Y-61055238D01*
X145740476Y-61150476D01*
X145788095Y-61245714D01*
%TO.C,D2*%
X137612380Y-56618095D02*
X136612380Y-56618095D01*
X136612380Y-56380000D01*
X136660000Y-56237142D01*
X136755238Y-56141904D01*
X136850476Y-56094285D01*
X137040952Y-56046666D01*
X137183809Y-56046666D01*
X137374285Y-56094285D01*
X137469523Y-56141904D01*
X137564761Y-56237142D01*
X137612380Y-56380000D01*
X137612380Y-56618095D01*
X136707619Y-55665714D02*
X136660000Y-55618095D01*
X136612380Y-55522857D01*
X136612380Y-55284761D01*
X136660000Y-55189523D01*
X136707619Y-55141904D01*
X136802857Y-55094285D01*
X136898095Y-55094285D01*
X137040952Y-55141904D01*
X137612380Y-55713333D01*
X137612380Y-55094285D01*
X138882380Y-60674285D02*
X138882380Y-61245714D01*
X138882380Y-60960000D02*
X137882380Y-60960000D01*
X138025238Y-61055238D01*
X138120476Y-61150476D01*
X138168095Y-61245714D01*
%TO.C,J2*%
X139366666Y-73112380D02*
X139366666Y-73826666D01*
X139319047Y-73969523D01*
X139223809Y-74064761D01*
X139080952Y-74112380D01*
X138985714Y-74112380D01*
X139795238Y-73207619D02*
X139842857Y-73160000D01*
X139938095Y-73112380D01*
X140176190Y-73112380D01*
X140271428Y-73160000D01*
X140319047Y-73207619D01*
X140366666Y-73302857D01*
X140366666Y-73398095D01*
X140319047Y-73540952D01*
X139747619Y-74112380D01*
X140366666Y-74112380D01*
D11*
%TO.C,U1*%
X169020000Y-54690000D02*
X164520000Y-54690000D01*
X169020000Y-77390000D02*
X169020000Y-54690000D01*
X155520000Y-53390000D02*
X155520000Y-54690000D01*
X164520000Y-53390000D02*
X164520000Y-54690000D01*
X151020000Y-77390000D02*
X151020000Y-54690000D01*
X169020000Y-77390000D02*
X151020000Y-77390000D01*
X164520000Y-53390000D02*
X155520000Y-53390000D01*
X155520000Y-54690000D02*
X151020000Y-54690000D01*
D12*
%TO.C,J3*%
X145990000Y-72390000D02*
X148650000Y-72390000D01*
X145990000Y-72390000D02*
X145990000Y-77530000D01*
X145990000Y-77530000D02*
X148650000Y-77530000D01*
X145990000Y-71120000D02*
X145990000Y-69790000D01*
X148650000Y-72390000D02*
X148650000Y-77530000D01*
X145990000Y-69790000D02*
X147320000Y-69790000D01*
%TO.C,J1*%
X173930000Y-64710000D02*
X175260000Y-64710000D01*
X173930000Y-77530000D02*
X176590000Y-77530000D01*
X173930000Y-67310000D02*
X176590000Y-67310000D01*
X176590000Y-67310000D02*
X176590000Y-77530000D01*
X173930000Y-66040000D02*
X173930000Y-64710000D01*
X173930000Y-67310000D02*
X173930000Y-77530000D01*
%TO.C,J4*%
X130750000Y-74930000D02*
X130750000Y-77530000D01*
X130750000Y-77530000D02*
X133410000Y-77530000D01*
X130750000Y-72330000D02*
X132080000Y-72330000D01*
X130750000Y-74930000D02*
X133410000Y-74930000D01*
X133410000Y-74930000D02*
X133410000Y-77530000D01*
X130750000Y-73660000D02*
X130750000Y-72330000D01*
%TO.C,D1*%
X130440000Y-56390000D02*
X130110000Y-56390000D01*
X133720000Y-56390000D02*
X134050000Y-56390000D01*
X130110000Y-65530000D02*
X130440000Y-65530000D01*
X134050000Y-57965000D02*
X130110000Y-57965000D01*
X134050000Y-57845000D02*
X130110000Y-57845000D01*
X134050000Y-65530000D02*
X133720000Y-65530000D01*
X130110000Y-56390000D02*
X130110000Y-65530000D01*
X134050000Y-56390000D02*
X134050000Y-65530000D01*
X134050000Y-57725000D02*
X130110000Y-57725000D01*
%TO.C,D3*%
X149530000Y-64610000D02*
X149530000Y-57310000D01*
X149530000Y-57310000D02*
X148380000Y-57310000D01*
X144030000Y-64610000D02*
X144030000Y-57310000D01*
%TO.C,D2*%
X141910000Y-57310000D02*
X140760000Y-57310000D01*
X136410000Y-64610000D02*
X136410000Y-57310000D01*
X141910000Y-64610000D02*
X141910000Y-57310000D01*
%TO.C,J2*%
X140910000Y-69790000D02*
X142240000Y-69790000D01*
X140910000Y-72390000D02*
X143570000Y-72390000D01*
X143570000Y-72390000D02*
X143570000Y-77530000D01*
X140910000Y-77530000D02*
X143570000Y-77530000D01*
X140910000Y-72390000D02*
X140910000Y-77530000D01*
X140910000Y-71120000D02*
X140910000Y-69790000D01*
%TD*%
M02*
+13
View File
@@ -0,0 +1,13 @@
M48
; DRILL file {KiCad 6.0.11+dfsg-1} date Tue 28 Jan 2025 11:33:07 PM CET
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2025-01-28T23:33:07+01:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,6.0.11+dfsg-1
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
METRIC
%
G90
G05
T0
M30
+60
View File
@@ -0,0 +1,60 @@
M48
; DRILL file {KiCad 6.0.11+dfsg-1} date Tue 28 Jan 2025 11:33:07 PM CET
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2025-01-28T23:33:07+01:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,6.0.11+dfsg-1
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
METRIC
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C0.400
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T2C1.000
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T3C1.270
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T4C1.400
%
G90
G05
T1
X139.115Y-63.424
X139.7Y-58.42
X146.721Y-63.365
X147.32Y-58.42
T2
X132.08Y-73.66
X132.08Y-76.2
X142.24Y-71.12
X142.24Y-73.66
X142.24Y-76.2
X147.32Y-71.12
X147.32Y-73.66
X147.32Y-76.2
X175.26Y-66.04
X175.26Y-68.58
X175.26Y-71.12
X175.26Y-73.66
X175.26Y-76.2
T3
X152.4Y-56.14
X152.4Y-58.68
X152.4Y-61.22
X152.4Y-63.76
X152.4Y-66.3
X152.4Y-68.84
X152.4Y-71.38
X152.4Y-73.92
X167.64Y-56.14
X167.64Y-58.68
X167.64Y-61.22
X167.64Y-63.76
X167.64Y-66.3
X167.64Y-68.84
X167.64Y-71.38
X167.64Y-73.92
T4
X132.08Y-55.88
X132.08Y-66.04
T0
M30
+127
View File
@@ -0,0 +1,127 @@
{
"Header": {
"GenerationSoftware": {
"Vendor": "KiCad",
"Application": "Pcbnew",
"Version": "6.0.11+dfsg-1"
},
"CreationDate": "2025-01-28T23:33:11+01:00"
},
"GeneralSpecs": {
"ProjectId": {
"Name": "Hanglamp",
"GUID": "48616e67-6c61-46d7-902e-6b696361645f",
"Revision": "rev?"
},
"Size": {
"X": 48.36,
"Y": 25.5
},
"LayerNumber": 2,
"BoardThickness": 1.6,
"Finish": "None"
},
"DesignRules": [
{
"Layers": "Outer",
"PadToPad": 0.2,
"PadToTrack": 0.2,
"TrackToTrack": 0.2,
"MinLineWidth": 0.25,
"TrackToRegion": 0.508,
"RegionToRegion": 0.508
}
],
"FilesAttributes": [
{
"Path": "Hanglamp-F_Cu.gbr",
"FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive"
},
{
"Path": "Hanglamp-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive"
},
{
"Path": "Hanglamp-F_Paste.gbr",
"FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive"
},
{
"Path": "Hanglamp-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive"
},
{
"Path": "Hanglamp-F_Silkscreen.gbr",
"FileFunction": "Legend,Top",
"FilePolarity": "Positive"
},
{
"Path": "Hanglamp-B_Silkscreen.gbr",
"FileFunction": "Legend,Bot",
"FilePolarity": "Positive"
},
{
"Path": "Hanglamp-F_Mask.gbr",
"FileFunction": "SolderMask,Top",
"FilePolarity": "Negative"
},
{
"Path": "Hanglamp-B_Mask.gbr",
"FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative"
},
{
"Path": "Hanglamp-Edge_Cuts.gbr",
"FileFunction": "Profile",
"FilePolarity": "Positive"
}
],
"MaterialStackup": [
{
"Type": "Legend",
"Name": "Top Silk Screen"
},
{
"Type": "SolderPaste",
"Name": "Top Solder Paste"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Top Solder Mask"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "F.Cu"
},
{
"Type": "Dielectric",
"Thickness": 1.51,
"Material": "FR4",
"Name": "F.Cu/B.Cu",
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "B.Cu"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Bottom Solder Mask"
},
{
"Type": "SolderPaste",
"Name": "Bottom Solder Paste"
},
{
"Type": "Legend",
"Name": "Bottom Silk Screen"
}
]
}
File diff suppressed because it is too large Load Diff
+75
View File
@@ -0,0 +1,75 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"ratsnest_display_mode": 0,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"meta": {
"filename": "Hanglamp.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}
+455
View File
@@ -0,0 +1,455 @@
{
"board": {
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.508
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint_type_mismatch": "error",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.39999999999999997,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_silk_clearance": 0.0,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.19999999999999998,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"use_height_for_length_calcs": true
},
"track_widths": [
0.0,
0.25,
0.5
],
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
}
],
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
"layer_presets": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Hanglamp.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12.0,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.4,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Power",
"nets": [
"+5V"
],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6.0
}
],
"meta": {
"version": 2
},
"net_colors": null
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"drawing": {
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "KiCad",
"ngspice": {
"fix_include_paths": true,
"fix_passive_vals": false,
"meta": {
"version": 0
},
"model_mode": 0,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"spice_adjust_passive_values": false,
"spice_external_command": "spice \"%I\"",
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"b1b9fff3-73b3-4638-b03f-be42f313d005",
""
]
],
"text_variables": {}
}
File diff suppressed because it is too large Load Diff
+313
View File
@@ -0,0 +1,313 @@
(export (version "E")
(design
(source "/home/daan/dev/hanglamp/hardware/Hanglamp/Hanglamp.kicad_sch")
(date "Tue 28 Jan 2025 10:55:36 PM CET")
(tool "Eeschema 6.0.11+dfsg-1")
(sheet (number "1") (name "/") (tstamps "/")
(title_block
(title)
(company)
(rev)
(date)
(source "Hanglamp.kicad_sch")
(comment (number "1") (value ""))
(comment (number "2") (value ""))
(comment (number "3") (value ""))
(comment (number "4") (value ""))
(comment (number "5") (value ""))
(comment (number "6") (value ""))
(comment (number "7") (value ""))
(comment (number "8") (value ""))
(comment (number "9") (value "")))))
(components
(comp (ref "C1")
(value "C")
(footprint "Capacitor_SMD:C_0504_1310Metric")
(libsource (lib "Device") (part "C") (description "Unpolarized capacitor"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "26e5fcde-ff24-4eee-b618-b93f87b175cd"))
(comp (ref "C2")
(value "C")
(footprint "Capacitor_SMD:C_0504_1310Metric")
(libsource (lib "Device") (part "C") (description "Unpolarized capacitor"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "0045cad5-fb4e-434f-8df3-361f842e5880"))
(comp (ref "D1")
(value "DIODE")
(footprint "Diode_THT:D_5W_P10.16mm_Horizontal")
(libsource (lib "pspice") (part "DIODE") (description "Diode symbol for simulation only. Pin order incompatible with official kicad footprints"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "ff09fb9d-8ab4-4457-9181-718324fa7db1"))
(comp (ref "D2")
(value "WS2812B")
(footprint "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm")
(datasheet "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf")
(libsource (lib "LED") (part "WS2812B") (description "RGB LED with integrated controller"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "207a6b00-255d-4b32-87a5-ecc1fe23ee5a"))
(comp (ref "D3")
(value "WS2812B")
(footprint "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm")
(datasheet "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf")
(libsource (lib "LED") (part "WS2812B") (description "RGB LED with integrated controller"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "d5737210-ffc2-4478-b164-64202cd21042"))
(comp (ref "J1")
(value "CONN_ROT_ENC")
(footprint "Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical")
(libsource (lib "Connector_Generic") (part "Conn_01x05") (description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "a0c3753c-e3fe-4a33-ac41-016f293f037f"))
(comp (ref "J2")
(value "Conn_01x03")
(footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical")
(libsource (lib "Connector_Generic") (part "Conn_01x03") (description "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "e677dc3d-9f7e-434e-9f30-654dfb6badae"))
(comp (ref "J3")
(value "Conn_01x03")
(footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical")
(libsource (lib "Connector_Generic") (part "Conn_01x03") (description "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "d2b05e5e-0ba6-4f7d-9203-efef3ec5b7f7"))
(comp (ref "J4")
(value "Conn_01x02")
(footprint "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical")
(libsource (lib "Connector_Generic") (part "Conn_01x02") (description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "e7d2da4b-3d2c-4100-8e44-f31bd455bcd2"))
(comp (ref "U1")
(value "ESP32-C3_SUPERMINI_TH")
(footprint "esp32-c3:MODULE_ESP32-C3_SUPERMINI")
(fields
(field (name "Availability") "Not in stock")
(field (name "Check_prices") "https://www.snapeda.com/parts/ESP32-C3%20SuperMini_TH/Espressif+Systems/view-part/?ref=eda")
(field (name "Description") "\n \n Super tiny ESP32-C3 board\n \n")
(field (name "MANUFACTURER") "Espressif")
(field (name "MAXIMUM_PACKAGE_HEIGHT") "4.2mm")
(field (name "MF") "Espressif Systems")
(field (name "MP") "ESP32-C3 SuperMini_TH")
(field (name "Package") "Package")
(field (name "Price") "None")
(field (name "STANDARD") "Manufacturer Recommendations")
(field (name "SnapEDA_Link") "https://www.snapeda.com/parts/ESP32-C3%20SuperMini_TH/Espressif+Systems/view-part/?ref=snap"))
(libsource (lib "ESP32-C3_SUPERMINI_TH") (part "ESP32-C3_SUPERMINI_TH") (description ""))
(property (name "MF") (value "Espressif Systems"))
(property (name "MAXIMUM_PACKAGE_HEIGHT") (value "4.2mm"))
(property (name "Package") (value "Package"))
(property (name "Price") (value "None"))
(property (name "Check_prices") (value "https://www.snapeda.com/parts/ESP32-C3%20SuperMini_TH/Espressif+Systems/view-part/?ref=eda"))
(property (name "STANDARD") (value "Manufacturer Recommendations"))
(property (name "PARTREV") (value ""))
(property (name "SnapEDA_Link") (value "https://www.snapeda.com/parts/ESP32-C3%20SuperMini_TH/Espressif+Systems/view-part/?ref=snap"))
(property (name "MP") (value "ESP32-C3 SuperMini_TH"))
(property (name "Description") (value "\n \n Super tiny ESP32-C3 board\n \n"))
(property (name "Availability") (value "Not in stock"))
(property (name "MANUFACTURER") (value "Espressif"))
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value "Hanglamp.kicad_sch"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "baa94b6d-0132-4b29-ab80-540162a717d7")))
(libparts
(libpart (lib "Connector_Generic") (part "Conn_01x02")
(description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs "~")
(footprints
(fp "Connector*:*_1x??_*"))
(fields
(field (name "Reference") "J")
(field (name "Value") "Conn_01x02")
(field (name "Datasheet") "~"))
(pins
(pin (num "1") (name "Pin_1") (type "passive"))
(pin (num "2") (name "Pin_2") (type "passive"))))
(libpart (lib "Connector_Generic") (part "Conn_01x03")
(description "Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs "~")
(footprints
(fp "Connector*:*_1x??_*"))
(fields
(field (name "Reference") "J")
(field (name "Value") "Conn_01x03")
(field (name "Datasheet") "~"))
(pins
(pin (num "1") (name "Pin_1") (type "passive"))
(pin (num "2") (name "Pin_2") (type "passive"))
(pin (num "3") (name "Pin_3") (type "passive"))))
(libpart (lib "Connector_Generic") (part "Conn_01x05")
(description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs "~")
(footprints
(fp "Connector*:*_1x??_*"))
(fields
(field (name "Reference") "J")
(field (name "Value") "Conn_01x05")
(field (name "Datasheet") "~"))
(pins
(pin (num "1") (name "Pin_1") (type "passive"))
(pin (num "2") (name "Pin_2") (type "passive"))
(pin (num "3") (name "Pin_3") (type "passive"))
(pin (num "4") (name "Pin_4") (type "passive"))
(pin (num "5") (name "Pin_5") (type "passive"))))
(libpart (lib "Device") (part "C")
(description "Unpolarized capacitor")
(docs "~")
(footprints
(fp "C_*"))
(fields
(field (name "Reference") "C")
(field (name "Value") "C")
(field (name "Datasheet") "~"))
(pins
(pin (num "1") (name "") (type "passive"))
(pin (num "2") (name "") (type "passive"))))
(libpart (lib "ESP32-C3_SUPERMINI_TH") (part "ESP32-C3_SUPERMINI_TH")
(fields
(field (name "Reference") "U")
(field (name "Value") "ESP32-C3_SUPERMINI_TH")
(field (name "Footprint") "ESP32-C3_SUPERMINI_TH:MODULE_ESP32-C3_SUPERMINI")
(field (name "MF") "Espressif Systems")
(field (name "MAXIMUM_PACKAGE_HEIGHT") "4.2mm")
(field (name "Package") "Package")
(field (name "Price") "None")
(field (name "Check_prices") "https://www.snapeda.com/parts/ESP32-C3%20SuperMini_TH/Espressif+Systems/view-part/?ref=eda")
(field (name "STANDARD") "Manufacturer Recommendations")
(field (name "SnapEDA_Link") "https://www.snapeda.com/parts/ESP32-C3%20SuperMini_TH/Espressif+Systems/view-part/?ref=snap")
(field (name "MP") "ESP32-C3 SuperMini_TH")
(field (name "Description") "\n \n Super tiny ESP32-C3 board\n \n")
(field (name "Availability") "Not in stock")
(field (name "MANUFACTURER") "Espressif"))
(pins
(pin (num "0") (name "GPIO0") (type "bidirectional"))
(pin (num "1") (name "GPIO1") (type "bidirectional"))
(pin (num "2") (name "GPIO2") (type "bidirectional"))
(pin (num "3") (name "GPIO3") (type "bidirectional"))
(pin (num "3.3") (name "3V3") (type "power_in"))
(pin (num "4") (name "GPIO4") (type "bidirectional"))
(pin (num "5") (name "GPIO5") (type "bidirectional"))
(pin (num "5V") (name "5V") (type "power_in"))
(pin (num "6") (name "GPIO6") (type "bidirectional"))
(pin (num "7") (name "GPIO7") (type "bidirectional"))
(pin (num "8") (name "GPIO8") (type "bidirectional"))
(pin (num "9") (name "GPIO9") (type "bidirectional"))
(pin (num "10") (name "GPIO10") (type "bidirectional"))
(pin (num "20") (name "GPIO20") (type "bidirectional"))
(pin (num "21") (name "GPIO21") (type "bidirectional"))
(pin (num "G") (name "GND") (type "power_in"))))
(libpart (lib "LED") (part "WS2812B")
(description "RGB LED with integrated controller")
(docs "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf")
(footprints
(fp "LED*WS2812*PLCC*5.0x5.0mm*P3.2mm*"))
(fields
(field (name "Reference") "D")
(field (name "Value") "WS2812B")
(field (name "Footprint") "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm")
(field (name "Datasheet") "https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf"))
(pins
(pin (num "1") (name "VDD") (type "power_in"))
(pin (num "2") (name "DOUT") (type "output"))
(pin (num "3") (name "VSS") (type "power_in"))
(pin (num "4") (name "DIN") (type "input"))))
(libpart (lib "pspice") (part "DIODE")
(description "Diode symbol for simulation only. Pin order incompatible with official kicad footprints")
(docs "~")
(fields
(field (name "Reference") "D")
(field (name "Value") "DIODE")
(field (name "Datasheet") "~"))
(pins
(pin (num "1") (name "K") (type "input"))
(pin (num "2") (name "A") (type "input")))))
(libraries
(library (logical "Connector_Generic")
(uri "/usr/share/kicad/symbols//Connector_Generic.kicad_sym"))
(library (logical "Device")
(uri "/usr/share/kicad/symbols//Device.kicad_sym"))
(library (logical "ESP32-C3_SUPERMINI_TH")
(uri "/home/daan/Downloads/esp32-c3/ESP32-C3_SUPERMINI_TH.kicad_sym"))
(library (logical "LED")
(uri "/usr/share/kicad/symbols//LED.kicad_sym"))
(library (logical "pspice")
(uri "/usr/share/kicad/symbols//pspice.kicad_sym")))
(nets
(net (code "1") (name "+3.3V")
(node (ref "J1") (pin "5") (pinfunction "Pin_5") (pintype "passive"))
(node (ref "U1") (pin "3.3") (pinfunction "3V3") (pintype "power_in")))
(net (code "2") (name "+4V")
(node (ref "C1") (pin "1") (pintype "passive"))
(node (ref "C2") (pin "1") (pintype "passive"))
(node (ref "D1") (pin "2") (pinfunction "A") (pintype "input"))
(node (ref "D2") (pin "1") (pinfunction "VDD") (pintype "power_in"))
(node (ref "D3") (pin "1") (pinfunction "VDD") (pintype "power_in")))
(net (code "3") (name "+5V")
(node (ref "D1") (pin "1") (pinfunction "K") (pintype "input"))
(node (ref "J3") (pin "1") (pinfunction "Pin_1") (pintype "passive"))
(node (ref "J3") (pin "2") (pinfunction "Pin_2") (pintype "passive"))
(node (ref "J3") (pin "3") (pinfunction "Pin_3") (pintype "passive"))
(node (ref "U1") (pin "5V") (pinfunction "5V") (pintype "power_in")))
(net (code "4") (name "GND")
(node (ref "C1") (pin "2") (pintype "passive"))
(node (ref "C2") (pin "2") (pintype "passive"))
(node (ref "D2") (pin "3") (pinfunction "VSS") (pintype "power_in"))
(node (ref "D3") (pin "3") (pinfunction "VSS") (pintype "power_in"))
(node (ref "J1") (pin "1") (pinfunction "Pin_1") (pintype "passive"))
(node (ref "J2") (pin "1") (pinfunction "Pin_1") (pintype "passive"))
(node (ref "J2") (pin "2") (pinfunction "Pin_2") (pintype "passive"))
(node (ref "J2") (pin "3") (pinfunction "Pin_3") (pintype "passive"))
(node (ref "U1") (pin "G") (pinfunction "GND") (pintype "power_in")))
(net (code "5") (name "GPIO5")
(node (ref "D2") (pin "4") (pinfunction "DIN") (pintype "input"))
(node (ref "U1") (pin "5") (pinfunction "GPIO5") (pintype "bidirectional")))
(net (code "6") (name "GPIO6")
(node (ref "D3") (pin "4") (pinfunction "DIN") (pintype "input"))
(node (ref "U1") (pin "6") (pinfunction "GPIO6") (pintype "bidirectional")))
(net (code "7") (name "Net-(J1-Pad2)")
(node (ref "J1") (pin "2") (pinfunction "Pin_2") (pintype "passive"))
(node (ref "U1") (pin "2") (pinfunction "GPIO2") (pintype "bidirectional")))
(net (code "8") (name "Net-(J1-Pad3)")
(node (ref "J1") (pin "3") (pinfunction "Pin_3") (pintype "passive"))
(node (ref "U1") (pin "1") (pinfunction "GPIO1") (pintype "bidirectional")))
(net (code "9") (name "Net-(J1-Pad4)")
(node (ref "J1") (pin "4") (pinfunction "Pin_4") (pintype "passive"))
(node (ref "U1") (pin "0") (pinfunction "GPIO0") (pintype "bidirectional")))
(net (code "10") (name "STRIP1")
(node (ref "D2") (pin "2") (pinfunction "DOUT") (pintype "output"))
(node (ref "J4") (pin "1") (pinfunction "Pin_1") (pintype "passive")))
(net (code "11") (name "STRIP2")
(node (ref "D3") (pin "2") (pinfunction "DOUT") (pintype "output"))
(node (ref "J4") (pin "2") (pinfunction "Pin_2") (pintype "passive")))
(net (code "12") (name "unconnected-(U1-Pad3)")
(node (ref "U1") (pin "3") (pinfunction "GPIO3") (pintype "bidirectional")))
(net (code "13") (name "unconnected-(U1-Pad4)")
(node (ref "U1") (pin "4") (pinfunction "GPIO4") (pintype "bidirectional")))
(net (code "14") (name "unconnected-(U1-Pad7)")
(node (ref "U1") (pin "7") (pinfunction "GPIO7") (pintype "bidirectional")))
(net (code "15") (name "unconnected-(U1-Pad8)")
(node (ref "U1") (pin "8") (pinfunction "GPIO8") (pintype "bidirectional")))
(net (code "16") (name "unconnected-(U1-Pad9)")
(node (ref "U1") (pin "9") (pinfunction "GPIO9") (pintype "bidirectional")))
(net (code "17") (name "unconnected-(U1-Pad10)")
(node (ref "U1") (pin "10") (pinfunction "GPIO10") (pintype "bidirectional")))
(net (code "18") (name "unconnected-(U1-Pad20)")
(node (ref "U1") (pin "20") (pinfunction "GPIO20") (pintype "bidirectional")))
(net (code "19") (name "unconnected-(U1-Pad21)")
(node (ref "U1") (pin "21") (pinfunction "GPIO21") (pintype "bidirectional")))))
File diff suppressed because it is too large Load Diff
+10 -1
View File
@@ -41,7 +41,16 @@ board_build.f_cpu = 80000000L
board = dfrobot_beetle_esp32c3
platform = espressif32
framework = arduino
monitor_speed = 460800
monitor_speed = 115200
monitor_filters =
esp32_exception_decoder
time
lib_deps =
fastled/FastLED@^3.7.0
knolleary/PubSubClient@^2.8
[env:esp32c3_supermini_network]
extends = env:esp32c3_supermini
upload_protocol = espota
upload_port = 10.206.0.101
+25 -15
View File
@@ -7,10 +7,16 @@ uint8_t controlPins[] = {
PIN_KEY,
};
uint16_t thresholds[] = {
2048,
1000,
3072,
};
uint16_t prevState[3];
uint8_t controlPinCount = sizeof(controlPins) / sizeof(controlPins[0]);
auto lastChange = micros();
uint8_t pinChanges[128];
uint8_t pinChangeIndex = 0;
@@ -39,28 +45,31 @@ void Controls_loop(void *pvParameters){
lastChange = 0;
while(true){
for(uint8_t a=0; a<sizeof(controlPins); a++){
for(uint8_t a=0; a<controlPinCount; a++){
auto pin = controlPins[a];
auto currentValueAnalog = analogRead(pin);
auto currentValue = currentValueAnalog > 3072;
auto currentValue = currentValueAnalog > thresholds[a];
auto prevValue = prevState[a];
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 200){
Serial.printf("Pin %d: %d->%d (%d)\n", pin, prevValue, currentValue, currentValueAnalog);
}
// if(abs(currentValue - prevValue) > 100){
if(currentValue != prevValue){
if(CONTROLS_DEBUG > 100){
Serial.printf("Change on pin %d: %d -> %d (%d)\n", pin, prevValue, currentValue, currentValueAnalog);
}
if(pin == PIN_KEY){
if(currentValue){
auto duration = micros() - lastKey;
if(duration > KEY_DURATION_MS * 1000){
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 10){
Serial.printf("Key: %d\n", duration);
}
Controls_send_event(Key);
Controls_send_event({Key, (int)duration});
}else{
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 20){
Serial.println("Too short");
}
}
@@ -89,10 +98,10 @@ void Controls_loop(void *pvParameters){
pinChanges[base + 3] == PIN_B
){
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 10){
Serial.println("Dir A");
}
Controls_send_event(Counterclockwise);
Controls_send_event({Counterclockwise, NULL});
}else if(
pinChanges[base + 0] == PIN_B &&
pinChanges[base + 1] == PIN_A &&
@@ -100,13 +109,14 @@ void Controls_loop(void *pvParameters){
pinChanges[base + 3] == PIN_A
){
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 10){
Serial.println("Dir B");
}
Controls_send_event(Clockwise);
Controls_send_event({Clockwise, NULL});
}else{
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 20){
Serial.println("Unknown direction");
Serial.printf("[%d, %d, %d, %d]\n", pinChanges[base + 0], pinChanges[base + 1], pinChanges[base + 2], pinChanges[base + 3]);
}
}
}
@@ -116,14 +126,14 @@ void Controls_loop(void *pvParameters){
if(lastChange){
if(micros() - lastChange > 100 * 1000){
if(CONTROLS_DEBUG){
if(CONTROLS_DEBUG > 100){
Serial.println("changes expired");
}
Controls_direction_reset();
}
}
vTaskDelay(1/portTICK_PERIOD_MS);
vTaskDelay(2/portTICK_PERIOD_MS);
}
}
@@ -136,5 +146,5 @@ void Controls_setup(){
TaskHandle_t taskControls = NULL;
xTaskCreate(Controls_loop, "Controls_loop", 1000, NULL, tskIDLE_PRIORITY, &taskControls);
xTaskCreate(Controls_loop, "Controls_loop", 2048, NULL, tskIDLE_PRIORITY, &taskControls);
}
+14 -6
View File
@@ -1,21 +1,29 @@
#pragma once
#include "config.h"
#include <Arduino.h>
#define PIN_A 2
#define PIN_B 3
#define PIN_KEY 4
#define PIN_A 1
#define PIN_B 0
#define PIN_KEY 2
#define KEY_DURATION_MS 120
#define KEY_DURATION_MS 150
#define CONTROLS_DEBUG false
#define CONTROLS_DEBUG 1
enum ControlEvent {
enum ControlEventType {
Clockwise,
Counterclockwise,
Key
};
struct ControlEvent {
ControlEventType type;
int data;
};
typedef void (* ControlsCallback)( ControlEvent ) ;
void Controls_setup();
+142 -19
View File
@@ -3,16 +3,18 @@
CRGB colorTable[] = {
CRGB(255, 243, 218),
CRGB(255, 250, 237),
CRGB(255, 255, 255),
CRGB(250, 233, 213),
CRGB(255, 142, 32), // "warm wit"
// CRGB(255, 100, 4),
// CRGB(255, 128, 4),
// CRGB(255, 100, 32),
// CRGB(255, 128, 32),
CRGB::White,
CRGB::Red,
CRGB::Blue,
CRGB::Green,
CRGB::Purple,
CRGB::Turquoise,
CRGB::Blue,
CRGB::Yellow,
CRGB::Turquoise,
CRGB::Purple,
};
@@ -20,12 +22,87 @@ Hanglamp::Hanglamp(){
}
void parseHexColor(const String& hexColor, uint8_t& r, uint8_t& g, uint8_t& b) {
String cleanHex = hexColor;
// Remove leading '#' if present
if (cleanHex.startsWith("#")) {
cleanHex = cleanHex.substring(1);
}
// Make sure it's exactly 6 characters
if (cleanHex.length() != 6) {
r = g = b = 0; // default/fallback
return;
}
// Parse the color components
r = strtoul(cleanHex.substring(0, 2).c_str(), NULL, 16);
g = strtoul(cleanHex.substring(2, 4).c_str(), NULL, 16);
b = strtoul(cleanHex.substring(4, 6).c_str(), NULL, 16);
}
void Hanglamp::setup(){
#ifdef ENABLE_MQTT
MQTT_subscribe("hanglamp/CMD/brightness", [&](unsigned char* payload, unsigned int len){
String input = String((const char*)payload).substring(0, len);
int brightness = constrain(input.toInt(), 0, 255);
setBrightness(brightness);
});
MQTT_subscribe("hanglamp/CMD/color", [&](unsigned char* payload, unsigned int len){
String input = String((const char*)payload).substring(0, len);
uint8_t r, g, b;
parseHexColor(input, r, g, b);
Serial.printf("input: %s, r: %d, g: %d, b: %d\n", input, r, g, b);
CRGB color(r, g, b);
setColor(color);
});
MQTT_subscribe("hanglamp/CMD/power", [&](unsigned char* payload, unsigned int len){
String input = String((const char*)payload).substring(0, len);
Serial.printf("Have power command: [%s]\n", input.c_str());
if(input == "true" || input == "1" || input == "on" || input == "ON"){
Serial.printf("Setting power to true\n");
turnOn();
}else{
Serial.printf("Setting power to false\n");
turnOff();
}
});
#endif
setColor(colorTable[this->colorIndex]);
turnOn();
}
void Hanglamp::setColor(CRGB color){
jumpTo(color);
currentColor = color;
jumpTo(currentColor);
changed();
}
void Hanglamp::changed(){
#ifdef ENABLE_MQTT
char buff[128];
snprintf(buff, sizeof(buff),
"{\"color\":\"%02X%02X%02X\",\"brightness\":%d,\"power\":%s}",
currentColor.r,
currentColor.g,
currentColor.b,
brightness,
on ? "true" : "false"
);
MQTT_publish("hanglamp/status", buff);
#endif
}
void Hanglamp::nextColor(){
@@ -39,17 +116,15 @@ void Hanglamp::nextColor(){
}
void Hanglamp::setBrightness(int brightness){
uint8_t newBrightness =
brightness < 0 ? 0 :
brightness > 255 ? 255 :
brightness;
uint8_t newBrightness = constrain(brightness, 0, 255);
if(!isOn()){
turnOn();
}
this->brightness = newBrightness;
Serial.printf("new brightness: %d\n", newBrightness);
FastLED.setBrightness(newBrightness);
FastLED.show();
#ifdef ENABLE_MQTT
MQTT_publish("hanglamp/brightness", String(newBrightness));
#endif
changed();
}
void Hanglamp::adjustBrightness(int add){
@@ -57,8 +132,8 @@ void Hanglamp::adjustBrightness(int add){
}
void Hanglamp::controlsCallback(ControlEvent event){
Serial.printf("ControlEvent: %d\n", event);
switch(event){
Serial.printf("ControlEventType: %d\n", event);
switch(event.type){
case Clockwise:
adjustBrightness(4);
break;
@@ -66,11 +141,59 @@ void Hanglamp::controlsCallback(ControlEvent event){
adjustBrightness(-4);
break;
case Key:
nextColor();
Serial.printf("key press %d\n", event.data);
if(!isOn()){
turnOn();
}else{
auto msDuration = event.data/1000;
Serial.printf("msDuration %d\n", msDuration);
if(msDuration > 800){
turnOff();
}else{
nextColor();
}
}
break;
}
}
void Hanglamp::status(CRGB color){
Led_status(color);
}
}
void Hanglamp::setOn(bool on){
Serial.printf("Hanglamp::setOn(%d -> %d)\n", this->on, on);
this->on = on;
if(currentColor == CRGB::Black){
nextColor();
}
changed();
}
bool Hanglamp::isOn(){
return this->on;
}
void Hanglamp::turnOn(){
if(!this->on){
this->colorIndex = 1;
setColor(colorTable[1]);
FastLED.setBrightness(this->brightness);
FastLED.show();
this->setOn(true);
}
}
void Hanglamp::turnOff(){
if(this->on){
FastLED.setBrightness(0);
FastLED.show();
this->setOn(false);
}
}
+14
View File
@@ -1,9 +1,13 @@
#pragma once
#include "config.h"
#include <FastLED.h>
#include "Led.h"
#include "Controls.h"
#include "MQTT.h"
class Hanglamp {
public:
@@ -16,9 +20,19 @@ class Hanglamp {
void status(CRGB color);
void setColor(CRGB color);
bool isOn();
void turnOn();
void turnOff();
// void receiveBrightnessFromMQTT(uint8_t * payload, unsigned int len);
private:
void changed();
char colorIndex = 0;
CRGB currentColor;
int brightness = 128;
bool on = false;
void setOn(bool on);
};
+4 -2
View File
@@ -123,10 +123,12 @@ void Led_setup(){
// analogWriteRange(255);
#ifdef LED_FASTLED
FastLED.addLeds<WS2812B, PIN_STRIP1, GRB>(strip2, NUM_LEDS);
FastLED.addLeds<WS2812B, PIN_STRIP2, GRB>(strip2, NUM_LEDS);
FastLED.addLeds<WS2812B, PIN_STRIP1, GRB>(strip2, NUM_LEDS).setRgbw(RgbwDefault());
FastLED.addLeds<WS2812B, PIN_STRIP2, GRB>(strip2, NUM_LEDS).setRgbw(RgbwDefault());
strip1[0] = CRGB::Black;
strip2[0] = CRGB::Black;
FastLED.show();
#endif
#ifdef LED_NEOPIXEL_BUS
+3
View File
@@ -1,7 +1,10 @@
#pragma once
#include "stdint.h"
#include <cstdio>
#include "config.h"
#include <Arduino.h>
// #define LED_NEOPIXEL_BUS
+13 -17
View File
@@ -10,7 +10,7 @@ PubSubClient client(espClient);
std::vector<SubscribedChannel> * channels = new std::vector<SubscribedChannel>();
char mqtt_server[40] = "manus";
char mqtt_server[40] = "10.206.0.175";
char mqtt_port[6] = "1883";
@@ -46,20 +46,18 @@ void connect() {
}
void MQTT_publish(const char * topic, String str){
char * buff = new char[str.length() + 1];
str.toCharArray(buff, str.length() + 1);
MQTT_publish(topic, buff);
delete buff;
// char * buff = new char[str.length() + 1];
// str.toCharArray(buff, str.length() + 1);
MQTT_publish(topic, str.c_str());
// delete buff;
}
void MQTT_publish(const char * topic, const char * msg){
Serial.printf("MQTT_publish(%s, %s)\n", topic, msg);
client.publish(topic, msg);
}
void (*pCallback)(uint8_t *, unsigned int) = NULL;
void MQTT_subscribe(char * topic, void (*callback)(uint8_t *, unsigned int)){
void MQTT_subscribe(char * topic, mqtt_callback callback){
Serial.println("MQTT_subscribe");
Serial.printf("Topic: [%s]\n", topic);
@@ -88,7 +86,7 @@ void MQTT_callback(char* topic, uint8_t * payload, unsigned int length){
void MQTT_setup(){
for (int i = 0; i < 17; i = i + 8) {
for (int i = 0; i < 17; i = i + 8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}
@@ -96,14 +94,9 @@ void MQTT_setup(){
client.setServer(mqtt_server, String(mqtt_port).toInt());
client.setCallback(MQTT_callback);
// Serial.println("MQTT_init after callback");
// char buff[256];
// sprintf(buff, "%08x", _pCallback);
// Serial.println(buff);
TaskHandle_t taskMqtt = NULL;
xTaskCreate(MQTT_loop, "Wifi_loop", 10000, NULL, tskIDLE_PRIORITY, &taskMqtt);
xTaskCreate(MQTT_loop, "MQTT_loop", 10000, NULL, tskIDLE_PRIORITY, &taskMqtt);
}
void MQTT_loop(void* params){
@@ -119,7 +112,10 @@ void MQTT_loop(void* params){
connect();
if(client.connected()){
Serial.println("MQTT: succes!");
Serial.println("MQTT: success!");
for (auto channel = channels->begin(); channel != channels->end(); ++channel){
client.subscribe(channel->topic->c_str());
}
break;
}else{
Serial.println("MQTT: connection failed, try again in 5 seconds");
+11 -2
View File
@@ -1,21 +1,30 @@
#pragma once
#include "settings.h"
#include "config.h"
#include "Arduino.h"
#include <WiFi.h>
#include <vector>
using namespace std;
extern char mqtt_server[40];
extern char mqtt_port[6];
typedef std::function<void(unsigned char *, unsigned int)> mqtt_callback;
struct SubscribedChannel {
String * topic;
void (*callback)(uint8_t *, unsigned int);
mqtt_callback callback;
};
void MQTT_subscribe(char * topic, mqtt_callback callback);
void MQTT_publish(const char * topic, String str);
void MQTT_publish(const char * topic, const char * msg);
+44
View File
@@ -0,0 +1,44 @@
#include "OTA.h"
#include <ArduinoOTA.h>
void OTA_setup(){
ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_SPIFFS
type = "filesystem";
}
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
})
.onEnd([]() {
Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
})
.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
}
void OTA_loop(){
ArduinoOTA.handle();
}
+2
View File
@@ -0,0 +1,2 @@
void OTA_loop();
void OTA_setup();
+3
View File
@@ -1,2 +1,5 @@
#include "config.h"
void PinFinder_setup();
void PinFinder_loop();
+4 -1
View File
@@ -30,8 +30,11 @@ void Wifi_loop(void* params){
{
while (WiFi.status() != WL_CONNECTED)
{
vTaskDelay(500 / portTICK_PERIOD_MS);
Serial.println("Wifi waiting...");
vTaskDelay(5000 / portTICK_PERIOD_MS);
if(WiFi.status() != WL_CONNECTED){
WiFi.reconnect();
}
}
Serial.println("");
+1 -1
View File
@@ -1,3 +1,3 @@
#include "config.h"
void Wifi_setup();
+12
View File
@@ -0,0 +1,12 @@
#pragma once
#define INCLUDE_LED
#define ENABLE_MQTT
#define ENABLE_OTA
#define ENABLE_WIFI
// #define ENABLE_FS
// #define ENABLE_PINFINDER
#define ENABLE_COLORS
// #define ENABLE_PIN_SENSING
#define ENABLE_CONTROLS
+9 -8
View File
@@ -1,4 +1,6 @@
#define INCLUDE_LED
#include "config.h"
#ifdef INCLUDE_LED
#include "Led.h"
#endif
@@ -8,18 +10,17 @@
#define _TASK_SLEEP_ON_IDLE_RUN // Enable 1 ms SLEEP_IDLE powerdowns between runs if no callback methods were invoked during the pass
#define _TASK_STATUS_REQUEST // Compile with support for StatusRequest functionality - triggering tasks on status change events in addition to time only
#define ENABLE_MQTT
#define ENABLE_WIFI
// #define ENABLE_FS
// #define ENABLE_PINFINDER
#define ENABLE_COLORS
// #define ENABLE_PIN_SENSING
#define ENABLE_CONTROLS
#ifdef ENABLE_WIFI
#include "Wifi.h"
#endif
#ifdef ENABLE_OTA
#include "OTA.h"
#endif
#ifdef ENABLE_MQTT
#include "MQTT.h"
#endif
-7
View File
@@ -1,7 +0,0 @@
#ifndef SETTINGS_H
#define SETTINGS_H
extern char mqtt_server[40];
extern char mqtt_port[6];
#endif