Add poweroff function & status LED. Include 3D files for Seeed XIAO

This commit is contained in:
Matt
2025-12-13 17:38:18 +00:00
parent c762e0d632
commit 00c3c85c67
6 changed files with 4258 additions and 118 deletions

661
3D/Base.step Normal file
View File

@@ -0,0 +1,661 @@
ISO-10303-21;
HEADER;
/* Generated by software containing ST-Developer
* from STEP Tools, Inc. (www.steptools.com)
*/
FILE_DESCRIPTION(
/* description */ (''),
/* implementation_level */ '2;1');
FILE_NAME(
/* name */ 'Base.step',
/* time_stamp */ '2025-12-13T15:33:07Z',
/* author */ (''),
/* organization */ (''),
/* preprocessor_version */ 'ST-DEVELOPER v20.1',
/* originating_system */ 'Autodesk Translation Framework v14.21.0.0',
/* authorisation */ '');
FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }'));
ENDSEC;
DATA;
#10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#13),#583);
#11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#590,#12);
#12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#14),#582);
#13=STYLED_ITEM('',(#599),#14);
#14=MANIFOLD_SOLID_BREP('Body3',#355);
#15=PLANE('',#375);
#16=PLANE('',#376);
#17=PLANE('',#377);
#18=PLANE('',#378);
#19=PLANE('',#379);
#20=PLANE('',#380);
#21=PLANE('',#381);
#22=PLANE('',#382);
#23=PLANE('',#383);
#24=PLANE('',#384);
#25=PLANE('',#385);
#26=PLANE('',#386);
#27=PLANE('',#387);
#28=PLANE('',#388);
#29=PLANE('',#389);
#30=PLANE('',#390);
#31=FACE_OUTER_BOUND('',#49,.T.);
#32=FACE_OUTER_BOUND('',#50,.T.);
#33=FACE_OUTER_BOUND('',#51,.T.);
#34=FACE_OUTER_BOUND('',#52,.T.);
#35=FACE_OUTER_BOUND('',#53,.T.);
#36=FACE_OUTER_BOUND('',#54,.T.);
#37=FACE_OUTER_BOUND('',#55,.T.);
#38=FACE_OUTER_BOUND('',#56,.T.);
#39=FACE_OUTER_BOUND('',#57,.T.);
#40=FACE_OUTER_BOUND('',#58,.T.);
#41=FACE_OUTER_BOUND('',#59,.T.);
#42=FACE_OUTER_BOUND('',#60,.T.);
#43=FACE_OUTER_BOUND('',#61,.T.);
#44=FACE_OUTER_BOUND('',#62,.T.);
#45=FACE_OUTER_BOUND('',#63,.T.);
#46=FACE_OUTER_BOUND('',#64,.T.);
#47=FACE_OUTER_BOUND('',#65,.T.);
#48=FACE_OUTER_BOUND('',#66,.T.);
#49=EDGE_LOOP('',(#239,#240,#241,#242));
#50=EDGE_LOOP('',(#243,#244,#245,#246));
#51=EDGE_LOOP('',(#247,#248,#249,#250));
#52=EDGE_LOOP('',(#251,#252,#253,#254,#255,#256,#257,#258));
#53=EDGE_LOOP('',(#259,#260,#261,#262,#263,#264,#265,#266));
#54=EDGE_LOOP('',(#267,#268,#269,#270,#271,#272,#273,#274));
#55=EDGE_LOOP('',(#275,#276,#277,#278));
#56=EDGE_LOOP('',(#279,#280,#281,#282));
#57=EDGE_LOOP('',(#283,#284,#285,#286));
#58=EDGE_LOOP('',(#287,#288,#289,#290,#291,#292,#293,#294));
#59=EDGE_LOOP('',(#295,#296,#297,#298));
#60=EDGE_LOOP('',(#299,#300,#301,#302));
#61=EDGE_LOOP('',(#303,#304,#305,#306,#307,#308,#309,#310));
#62=EDGE_LOOP('',(#311,#312,#313,#314));
#63=EDGE_LOOP('',(#315,#316,#317,#318));
#64=EDGE_LOOP('',(#319,#320,#321,#322));
#65=EDGE_LOOP('',(#323,#324,#325,#326,#327,#328,#329,#330));
#66=EDGE_LOOP('',(#331,#332,#333,#334));
#67=LINE('',#487,#111);
#68=LINE('',#490,#112);
#69=LINE('',#496,#113);
#70=LINE('',#499,#114);
#71=LINE('',#501,#115);
#72=LINE('',#502,#116);
#73=LINE('',#505,#117);
#74=LINE('',#507,#118);
#75=LINE('',#509,#119);
#76=LINE('',#511,#120);
#77=LINE('',#513,#121);
#78=LINE('',#515,#122);
#79=LINE('',#516,#123);
#80=LINE('',#519,#124);
#81=LINE('',#521,#125);
#82=LINE('',#523,#126);
#83=LINE('',#525,#127);
#84=LINE('',#527,#128);
#85=LINE('',#529,#129);
#86=LINE('',#530,#130);
#87=LINE('',#533,#131);
#88=LINE('',#535,#132);
#89=LINE('',#536,#133);
#90=LINE('',#539,#134);
#91=LINE('',#541,#135);
#92=LINE('',#542,#136);
#93=LINE('',#545,#137);
#94=LINE('',#547,#138);
#95=LINE('',#548,#139);
#96=LINE('',#550,#140);
#97=LINE('',#551,#141);
#98=LINE('',#554,#142);
#99=LINE('',#556,#143);
#100=LINE('',#557,#144);
#101=LINE('',#561,#145);
#102=LINE('',#562,#146);
#103=LINE('',#563,#147);
#104=LINE('',#566,#148);
#105=LINE('',#568,#149);
#106=LINE('',#569,#150);
#107=LINE('',#571,#151);
#108=LINE('',#572,#152);
#109=LINE('',#576,#153);
#110=LINE('',#578,#154);
#111=VECTOR('',#397,10.);
#112=VECTOR('',#400,10.);
#113=VECTOR('',#405,10.);
#114=VECTOR('',#408,10.);
#115=VECTOR('',#411,10.);
#116=VECTOR('',#412,10.);
#117=VECTOR('',#415,10.);
#118=VECTOR('',#416,10.);
#119=VECTOR('',#417,10.);
#120=VECTOR('',#418,10.);
#121=VECTOR('',#419,10.);
#122=VECTOR('',#420,10.);
#123=VECTOR('',#421,10.);
#124=VECTOR('',#424,10.);
#125=VECTOR('',#425,10.);
#126=VECTOR('',#426,10.);
#127=VECTOR('',#427,10.);
#128=VECTOR('',#428,10.);
#129=VECTOR('',#429,10.);
#130=VECTOR('',#430,10.);
#131=VECTOR('',#433,10.);
#132=VECTOR('',#434,10.);
#133=VECTOR('',#435,10.);
#134=VECTOR('',#438,10.);
#135=VECTOR('',#439,10.);
#136=VECTOR('',#440,10.);
#137=VECTOR('',#443,10.);
#138=VECTOR('',#444,10.);
#139=VECTOR('',#445,10.);
#140=VECTOR('',#448,10.);
#141=VECTOR('',#449,10.);
#142=VECTOR('',#452,10.);
#143=VECTOR('',#453,10.);
#144=VECTOR('',#454,10.);
#145=VECTOR('',#457,10.);
#146=VECTOR('',#458,10.);
#147=VECTOR('',#459,10.);
#148=VECTOR('',#462,10.);
#149=VECTOR('',#463,10.);
#150=VECTOR('',#464,10.);
#151=VECTOR('',#467,10.);
#152=VECTOR('',#468,10.);
#153=VECTOR('',#475,10.);
#154=VECTOR('',#478,10.);
#155=CIRCLE('',#370,1.45);
#156=CIRCLE('',#371,1.45);
#157=CIRCLE('',#373,1.45);
#158=CIRCLE('',#374,1.45);
#159=VERTEX_POINT('',#483);
#160=VERTEX_POINT('',#484);
#161=VERTEX_POINT('',#486);
#162=VERTEX_POINT('',#488);
#163=VERTEX_POINT('',#492);
#164=VERTEX_POINT('',#493);
#165=VERTEX_POINT('',#495);
#166=VERTEX_POINT('',#497);
#167=VERTEX_POINT('',#504);
#168=VERTEX_POINT('',#506);
#169=VERTEX_POINT('',#508);
#170=VERTEX_POINT('',#510);
#171=VERTEX_POINT('',#512);
#172=VERTEX_POINT('',#514);
#173=VERTEX_POINT('',#518);
#174=VERTEX_POINT('',#520);
#175=VERTEX_POINT('',#522);
#176=VERTEX_POINT('',#524);
#177=VERTEX_POINT('',#526);
#178=VERTEX_POINT('',#528);
#179=VERTEX_POINT('',#532);
#180=VERTEX_POINT('',#534);
#181=VERTEX_POINT('',#538);
#182=VERTEX_POINT('',#540);
#183=VERTEX_POINT('',#544);
#184=VERTEX_POINT('',#546);
#185=VERTEX_POINT('',#553);
#186=VERTEX_POINT('',#555);
#187=VERTEX_POINT('',#559);
#188=VERTEX_POINT('',#560);
#189=VERTEX_POINT('',#565);
#190=VERTEX_POINT('',#567);
#191=EDGE_CURVE('',#159,#160,#155,.T.);
#192=EDGE_CURVE('',#161,#159,#67,.T.);
#193=EDGE_CURVE('',#162,#161,#156,.T.);
#194=EDGE_CURVE('',#160,#162,#68,.T.);
#195=EDGE_CURVE('',#163,#164,#157,.T.);
#196=EDGE_CURVE('',#165,#163,#69,.T.);
#197=EDGE_CURVE('',#166,#165,#158,.T.);
#198=EDGE_CURVE('',#166,#164,#70,.T.);
#199=EDGE_CURVE('',#164,#159,#71,.T.);
#200=EDGE_CURVE('',#161,#166,#72,.T.);
#201=EDGE_CURVE('',#163,#167,#73,.T.);
#202=EDGE_CURVE('',#167,#168,#74,.T.);
#203=EDGE_CURVE('',#168,#169,#75,.T.);
#204=EDGE_CURVE('',#169,#170,#76,.T.);
#205=EDGE_CURVE('',#170,#171,#77,.T.);
#206=EDGE_CURVE('',#171,#172,#78,.T.);
#207=EDGE_CURVE('',#172,#165,#79,.T.);
#208=EDGE_CURVE('',#162,#173,#80,.T.);
#209=EDGE_CURVE('',#173,#174,#81,.T.);
#210=EDGE_CURVE('',#174,#175,#82,.T.);
#211=EDGE_CURVE('',#175,#176,#83,.T.);
#212=EDGE_CURVE('',#176,#177,#84,.T.);
#213=EDGE_CURVE('',#177,#178,#85,.T.);
#214=EDGE_CURVE('',#178,#160,#86,.T.);
#215=EDGE_CURVE('',#172,#179,#87,.T.);
#216=EDGE_CURVE('',#180,#179,#88,.T.);
#217=EDGE_CURVE('',#173,#180,#89,.T.);
#218=EDGE_CURVE('',#170,#181,#90,.T.);
#219=EDGE_CURVE('',#182,#169,#91,.T.);
#220=EDGE_CURVE('',#182,#181,#92,.T.);
#221=EDGE_CURVE('',#181,#183,#93,.T.);
#222=EDGE_CURVE('',#184,#182,#94,.T.);
#223=EDGE_CURVE('',#184,#183,#95,.T.);
#224=EDGE_CURVE('',#183,#175,#96,.T.);
#225=EDGE_CURVE('',#176,#184,#97,.T.);
#226=EDGE_CURVE('',#168,#185,#98,.T.);
#227=EDGE_CURVE('',#186,#185,#99,.T.);
#228=EDGE_CURVE('',#177,#186,#100,.T.);
#229=EDGE_CURVE('',#187,#188,#101,.T.);
#230=EDGE_CURVE('',#188,#186,#102,.T.);
#231=EDGE_CURVE('',#185,#187,#103,.T.);
#232=EDGE_CURVE('',#179,#189,#104,.T.);
#233=EDGE_CURVE('',#189,#190,#105,.T.);
#234=EDGE_CURVE('',#190,#180,#106,.T.);
#235=EDGE_CURVE('',#178,#188,#107,.T.);
#236=EDGE_CURVE('',#167,#187,#108,.T.);
#237=EDGE_CURVE('',#174,#190,#109,.T.);
#238=EDGE_CURVE('',#171,#189,#110,.T.);
#239=ORIENTED_EDGE('',*,*,#191,.F.);
#240=ORIENTED_EDGE('',*,*,#192,.F.);
#241=ORIENTED_EDGE('',*,*,#193,.F.);
#242=ORIENTED_EDGE('',*,*,#194,.F.);
#243=ORIENTED_EDGE('',*,*,#195,.F.);
#244=ORIENTED_EDGE('',*,*,#196,.F.);
#245=ORIENTED_EDGE('',*,*,#197,.F.);
#246=ORIENTED_EDGE('',*,*,#198,.T.);
#247=ORIENTED_EDGE('',*,*,#199,.F.);
#248=ORIENTED_EDGE('',*,*,#198,.F.);
#249=ORIENTED_EDGE('',*,*,#200,.F.);
#250=ORIENTED_EDGE('',*,*,#192,.T.);
#251=ORIENTED_EDGE('',*,*,#196,.T.);
#252=ORIENTED_EDGE('',*,*,#201,.T.);
#253=ORIENTED_EDGE('',*,*,#202,.T.);
#254=ORIENTED_EDGE('',*,*,#203,.T.);
#255=ORIENTED_EDGE('',*,*,#204,.T.);
#256=ORIENTED_EDGE('',*,*,#205,.T.);
#257=ORIENTED_EDGE('',*,*,#206,.T.);
#258=ORIENTED_EDGE('',*,*,#207,.T.);
#259=ORIENTED_EDGE('',*,*,#194,.T.);
#260=ORIENTED_EDGE('',*,*,#208,.T.);
#261=ORIENTED_EDGE('',*,*,#209,.T.);
#262=ORIENTED_EDGE('',*,*,#210,.T.);
#263=ORIENTED_EDGE('',*,*,#211,.T.);
#264=ORIENTED_EDGE('',*,*,#212,.T.);
#265=ORIENTED_EDGE('',*,*,#213,.T.);
#266=ORIENTED_EDGE('',*,*,#214,.T.);
#267=ORIENTED_EDGE('',*,*,#193,.T.);
#268=ORIENTED_EDGE('',*,*,#200,.T.);
#269=ORIENTED_EDGE('',*,*,#197,.T.);
#270=ORIENTED_EDGE('',*,*,#207,.F.);
#271=ORIENTED_EDGE('',*,*,#215,.T.);
#272=ORIENTED_EDGE('',*,*,#216,.F.);
#273=ORIENTED_EDGE('',*,*,#217,.F.);
#274=ORIENTED_EDGE('',*,*,#208,.F.);
#275=ORIENTED_EDGE('',*,*,#218,.F.);
#276=ORIENTED_EDGE('',*,*,#204,.F.);
#277=ORIENTED_EDGE('',*,*,#219,.F.);
#278=ORIENTED_EDGE('',*,*,#220,.T.);
#279=ORIENTED_EDGE('',*,*,#221,.F.);
#280=ORIENTED_EDGE('',*,*,#220,.F.);
#281=ORIENTED_EDGE('',*,*,#222,.F.);
#282=ORIENTED_EDGE('',*,*,#223,.T.);
#283=ORIENTED_EDGE('',*,*,#224,.F.);
#284=ORIENTED_EDGE('',*,*,#223,.F.);
#285=ORIENTED_EDGE('',*,*,#225,.F.);
#286=ORIENTED_EDGE('',*,*,#211,.F.);
#287=ORIENTED_EDGE('',*,*,#225,.T.);
#288=ORIENTED_EDGE('',*,*,#222,.T.);
#289=ORIENTED_EDGE('',*,*,#219,.T.);
#290=ORIENTED_EDGE('',*,*,#203,.F.);
#291=ORIENTED_EDGE('',*,*,#226,.T.);
#292=ORIENTED_EDGE('',*,*,#227,.F.);
#293=ORIENTED_EDGE('',*,*,#228,.F.);
#294=ORIENTED_EDGE('',*,*,#212,.F.);
#295=ORIENTED_EDGE('',*,*,#229,.T.);
#296=ORIENTED_EDGE('',*,*,#230,.T.);
#297=ORIENTED_EDGE('',*,*,#227,.T.);
#298=ORIENTED_EDGE('',*,*,#231,.T.);
#299=ORIENTED_EDGE('',*,*,#232,.T.);
#300=ORIENTED_EDGE('',*,*,#233,.T.);
#301=ORIENTED_EDGE('',*,*,#234,.T.);
#302=ORIENTED_EDGE('',*,*,#216,.T.);
#303=ORIENTED_EDGE('',*,*,#191,.T.);
#304=ORIENTED_EDGE('',*,*,#214,.F.);
#305=ORIENTED_EDGE('',*,*,#235,.T.);
#306=ORIENTED_EDGE('',*,*,#229,.F.);
#307=ORIENTED_EDGE('',*,*,#236,.F.);
#308=ORIENTED_EDGE('',*,*,#201,.F.);
#309=ORIENTED_EDGE('',*,*,#195,.T.);
#310=ORIENTED_EDGE('',*,*,#199,.T.);
#311=ORIENTED_EDGE('',*,*,#202,.F.);
#312=ORIENTED_EDGE('',*,*,#236,.T.);
#313=ORIENTED_EDGE('',*,*,#231,.F.);
#314=ORIENTED_EDGE('',*,*,#226,.F.);
#315=ORIENTED_EDGE('',*,*,#213,.F.);
#316=ORIENTED_EDGE('',*,*,#228,.T.);
#317=ORIENTED_EDGE('',*,*,#230,.F.);
#318=ORIENTED_EDGE('',*,*,#235,.F.);
#319=ORIENTED_EDGE('',*,*,#209,.F.);
#320=ORIENTED_EDGE('',*,*,#217,.T.);
#321=ORIENTED_EDGE('',*,*,#234,.F.);
#322=ORIENTED_EDGE('',*,*,#237,.F.);
#323=ORIENTED_EDGE('',*,*,#224,.T.);
#324=ORIENTED_EDGE('',*,*,#210,.F.);
#325=ORIENTED_EDGE('',*,*,#237,.T.);
#326=ORIENTED_EDGE('',*,*,#233,.F.);
#327=ORIENTED_EDGE('',*,*,#238,.F.);
#328=ORIENTED_EDGE('',*,*,#205,.F.);
#329=ORIENTED_EDGE('',*,*,#218,.T.);
#330=ORIENTED_EDGE('',*,*,#221,.T.);
#331=ORIENTED_EDGE('',*,*,#206,.F.);
#332=ORIENTED_EDGE('',*,*,#238,.T.);
#333=ORIENTED_EDGE('',*,*,#232,.F.);
#334=ORIENTED_EDGE('',*,*,#215,.F.);
#335=CYLINDRICAL_SURFACE('',#369,1.45);
#336=CYLINDRICAL_SURFACE('',#372,1.45);
#337=ADVANCED_FACE('',(#31),#335,.F.);
#338=ADVANCED_FACE('',(#32),#336,.F.);
#339=ADVANCED_FACE('',(#33),#15,.F.);
#340=ADVANCED_FACE('',(#34),#16,.F.);
#341=ADVANCED_FACE('',(#35),#17,.F.);
#342=ADVANCED_FACE('',(#36),#18,.T.);
#343=ADVANCED_FACE('',(#37),#19,.F.);
#344=ADVANCED_FACE('',(#38),#20,.F.);
#345=ADVANCED_FACE('',(#39),#21,.F.);
#346=ADVANCED_FACE('',(#40),#22,.T.);
#347=ADVANCED_FACE('',(#41),#23,.F.);
#348=ADVANCED_FACE('',(#42),#24,.T.);
#349=ADVANCED_FACE('',(#43),#25,.T.);
#350=ADVANCED_FACE('',(#44),#26,.T.);
#351=ADVANCED_FACE('',(#45),#27,.T.);
#352=ADVANCED_FACE('',(#46),#28,.T.);
#353=ADVANCED_FACE('',(#47),#29,.T.);
#354=ADVANCED_FACE('',(#48),#30,.T.);
#355=CLOSED_SHELL('',(#337,#338,#339,#340,#341,#342,#343,#344,#345,#346,
#347,#348,#349,#350,#351,#352,#353,#354));
#356=DERIVED_UNIT_ELEMENT(#358,1.);
#357=DERIVED_UNIT_ELEMENT(#585,-3.);
#358=(
MASS_UNIT()
NAMED_UNIT(*)
SI_UNIT(.KILO.,.GRAM.)
);
#359=DERIVED_UNIT((#356,#357));
#360=MEASURE_REPRESENTATION_ITEM('density measure',
POSITIVE_RATIO_MEASURE(7850.),#359);
#361=PROPERTY_DEFINITION_REPRESENTATION(#366,#363);
#362=PROPERTY_DEFINITION_REPRESENTATION(#367,#364);
#363=REPRESENTATION('material name',(#365),#582);
#364=REPRESENTATION('density',(#360),#582);
#365=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel');
#366=PROPERTY_DEFINITION('material property','material name',#592);
#367=PROPERTY_DEFINITION('material property','density of part',#592);
#368=AXIS2_PLACEMENT_3D('',#481,#391,#392);
#369=AXIS2_PLACEMENT_3D('',#482,#393,#394);
#370=AXIS2_PLACEMENT_3D('',#485,#395,#396);
#371=AXIS2_PLACEMENT_3D('',#489,#398,#399);
#372=AXIS2_PLACEMENT_3D('',#491,#401,#402);
#373=AXIS2_PLACEMENT_3D('',#494,#403,#404);
#374=AXIS2_PLACEMENT_3D('',#498,#406,#407);
#375=AXIS2_PLACEMENT_3D('',#500,#409,#410);
#376=AXIS2_PLACEMENT_3D('',#503,#413,#414);
#377=AXIS2_PLACEMENT_3D('',#517,#422,#423);
#378=AXIS2_PLACEMENT_3D('',#531,#431,#432);
#379=AXIS2_PLACEMENT_3D('',#537,#436,#437);
#380=AXIS2_PLACEMENT_3D('',#543,#441,#442);
#381=AXIS2_PLACEMENT_3D('',#549,#446,#447);
#382=AXIS2_PLACEMENT_3D('',#552,#450,#451);
#383=AXIS2_PLACEMENT_3D('',#558,#455,#456);
#384=AXIS2_PLACEMENT_3D('',#564,#460,#461);
#385=AXIS2_PLACEMENT_3D('',#570,#465,#466);
#386=AXIS2_PLACEMENT_3D('',#573,#469,#470);
#387=AXIS2_PLACEMENT_3D('',#574,#471,#472);
#388=AXIS2_PLACEMENT_3D('',#575,#473,#474);
#389=AXIS2_PLACEMENT_3D('',#577,#476,#477);
#390=AXIS2_PLACEMENT_3D('',#579,#479,#480);
#391=DIRECTION('axis',(0.,0.,1.));
#392=DIRECTION('refdir',(1.,0.,0.));
#393=DIRECTION('center_axis',(-1.,0.,0.));
#394=DIRECTION('ref_axis',(0.,1.,7.65671051465626E-16));
#395=DIRECTION('center_axis',(1.,0.,0.));
#396=DIRECTION('ref_axis',(0.,1.,7.65671051465626E-16));
#397=DIRECTION('',(-1.,0.,0.));
#398=DIRECTION('center_axis',(-1.,0.,5.18795807615523E-17));
#399=DIRECTION('ref_axis',(0.,1.,7.65671051465626E-16));
#400=DIRECTION('',(1.,0.,0.));
#401=DIRECTION('center_axis',(-1.,0.,0.));
#402=DIRECTION('ref_axis',(0.,7.65671051465626E-16,-1.));
#403=DIRECTION('center_axis',(1.,0.,0.));
#404=DIRECTION('ref_axis',(0.,7.65671051465626E-16,-1.));
#405=DIRECTION('',(-1.,0.,0.));
#406=DIRECTION('center_axis',(-1.,0.,5.18795807615523E-17));
#407=DIRECTION('ref_axis',(0.,7.65671051465626E-16,-1.));
#408=DIRECTION('',(-1.,0.,0.));
#409=DIRECTION('center_axis',(0.,1.,1.03436927760108E-15));
#410=DIRECTION('ref_axis',(-1.04646628663102E-32,1.03436927760108E-15,-1.));
#411=DIRECTION('',(0.,-1.03436927760108E-15,1.));
#412=DIRECTION('',(-5.18795807615523E-17,1.03436927760108E-15,-1.));
#413=DIRECTION('center_axis',(0.,1.,0.));
#414=DIRECTION('ref_axis',(0.,0.,1.));
#415=DIRECTION('',(0.,0.,-1.));
#416=DIRECTION('',(-1.,0.,0.));
#417=DIRECTION('',(0.,0.,1.));
#418=DIRECTION('',(-1.,0.,0.));
#419=DIRECTION('',(0.,0.,-1.));
#420=DIRECTION('',(1.,0.,0.));
#421=DIRECTION('',(5.18795807615523E-17,0.,1.));
#422=DIRECTION('center_axis',(0.,1.,0.));
#423=DIRECTION('ref_axis',(0.,0.,1.));
#424=DIRECTION('',(5.18795807615523E-17,0.,1.));
#425=DIRECTION('',(-1.,0.,0.));
#426=DIRECTION('',(0.,0.,-1.));
#427=DIRECTION('',(1.,0.,0.));
#428=DIRECTION('',(0.,0.,1.));
#429=DIRECTION('',(1.,0.,0.));
#430=DIRECTION('',(0.,0.,-1.));
#431=DIRECTION('center_axis',(1.,0.,-5.18795807615523E-17));
#432=DIRECTION('ref_axis',(-5.18795807615523E-17,0.,-1.));
#433=DIRECTION('',(0.,1.,0.));
#434=DIRECTION('',(-5.18795807615523E-17,0.,-1.));
#435=DIRECTION('',(0.,1.,0.));
#436=DIRECTION('center_axis',(0.,0.,-1.));
#437=DIRECTION('ref_axis',(0.,-1.,0.));
#438=DIRECTION('',(0.,1.,0.));
#439=DIRECTION('',(0.,-1.,0.));
#440=DIRECTION('',(-1.,0.,0.));
#441=DIRECTION('center_axis',(0.,1.,0.));
#442=DIRECTION('ref_axis',(0.,0.,-1.));
#443=DIRECTION('',(0.,0.,1.));
#444=DIRECTION('',(0.,0.,-1.));
#445=DIRECTION('',(-1.,0.,0.));
#446=DIRECTION('center_axis',(0.,0.,1.));
#447=DIRECTION('ref_axis',(0.,1.,0.));
#448=DIRECTION('',(0.,-1.,0.));
#449=DIRECTION('',(0.,1.,0.));
#450=DIRECTION('center_axis',(1.,0.,0.));
#451=DIRECTION('ref_axis',(0.,0.,-1.));
#452=DIRECTION('',(0.,1.,0.));
#453=DIRECTION('',(0.,0.,-1.));
#454=DIRECTION('',(0.,1.,0.));
#455=DIRECTION('center_axis',(0.,1.,0.));
#456=DIRECTION('ref_axis',(0.,0.,1.));
#457=DIRECTION('',(0.,0.,1.));
#458=DIRECTION('',(-1.,0.,0.));
#459=DIRECTION('',(1.,0.,0.));
#460=DIRECTION('center_axis',(0.,1.,0.));
#461=DIRECTION('ref_axis',(0.,0.,1.));
#462=DIRECTION('',(-1.,0.,0.));
#463=DIRECTION('',(0.,0.,1.));
#464=DIRECTION('',(1.,0.,0.));
#465=DIRECTION('center_axis',(-1.,0.,0.));
#466=DIRECTION('ref_axis',(0.,0.,1.));
#467=DIRECTION('',(0.,1.,0.));
#468=DIRECTION('',(0.,1.,0.));
#469=DIRECTION('center_axis',(0.,0.,1.));
#470=DIRECTION('ref_axis',(1.,0.,0.));
#471=DIRECTION('center_axis',(0.,0.,-1.));
#472=DIRECTION('ref_axis',(-1.,0.,0.));
#473=DIRECTION('center_axis',(0.,0.,1.));
#474=DIRECTION('ref_axis',(1.,0.,0.));
#475=DIRECTION('',(0.,1.,0.));
#476=DIRECTION('center_axis',(-1.,0.,0.));
#477=DIRECTION('ref_axis',(0.,0.,1.));
#478=DIRECTION('',(0.,1.,0.));
#479=DIRECTION('center_axis',(0.,0.,-1.));
#480=DIRECTION('ref_axis',(-1.,0.,0.));
#481=CARTESIAN_POINT('',(0.,0.,0.));
#482=CARTESIAN_POINT('Origin',(1.69999998882413,2.74999998509883,3.23139995541251));
#483=CARTESIAN_POINT('',(0.499999988824129,4.19999998509883,3.23139995541251));
#484=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,4.67711499086579));
#485=CARTESIAN_POINT('Origin',(0.499999988824129,2.74999998509883,3.23139995541251));
#486=CARTESIAN_POINT('',(1.69999998882413,4.19999998509883,3.23139995541251));
#487=CARTESIAN_POINT('',(1.69999998882413,4.19999998509883,3.23139995541251));
#488=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,4.67711499086579));
#489=CARTESIAN_POINT('Origin',(1.69999998882413,2.74999998509883,3.23139995541251));
#490=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,4.67711499086579));
#491=CARTESIAN_POINT('Origin',(1.69999998882413,2.74999998509884,-3.20860004458749));
#492=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,-4.65431508004078));
#493=CARTESIAN_POINT('',(0.499999988824129,4.19999998509884,-3.20860004458749));
#494=CARTESIAN_POINT('Origin',(0.499999988824129,2.74999998509884,-3.20860004458749));
#495=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,-4.65431508004078));
#496=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,-4.65431508004078));
#497=CARTESIAN_POINT('',(1.69999998882413,4.19999998509884,-3.20860004458749));
#498=CARTESIAN_POINT('Origin',(1.69999998882413,2.74999998509884,-3.20860004458749));
#499=CARTESIAN_POINT('',(1.69999998882413,4.19999998509884,-3.20860004458749));
#500=CARTESIAN_POINT('Origin',(1.69999998882413,4.19999998509883,3.23139995541251));
#501=CARTESIAN_POINT('',(0.499999988824129,4.19999998509884,-3.13429991612297));
#502=CARTESIAN_POINT('',(1.69999998882413,4.19999998509883,6.96570004848677));
#503=CARTESIAN_POINT('Origin',(-29.2500004451722,2.86139135040288,1.76951289176941E-7));
#504=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,-9.49999978765845));
#505=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,-4.74999980535358));
#506=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,-9.49999978765845));
#507=CARTESIAN_POINT('',(-44.1250006621704,2.86139135040288,-9.49999978765845));
#508=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,-3.78104420037607));
#509=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,4.75000015925616));
#510=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,-3.78104420037607));
#511=CARTESIAN_POINT('',(-44.1250006621704,2.86139135040288,-3.78104420037607));
#512=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,-10.6999997876585));
#513=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,-5.34999980535358));
#514=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,-10.6999997876585));
#515=CARTESIAN_POINT('',(-13.775000228174,2.86139135040288,-10.6999997876585));
#516=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,5.35000015925616));
#517=CARTESIAN_POINT('Origin',(-29.2500004451722,2.86139135040288,1.76951289176941E-7));
#518=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,10.700000141561));
#519=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,5.35000015925616));
#520=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,10.700000141561));
#521=CARTESIAN_POINT('',(-44.7250006621704,2.86139135040288,10.700000141561));
#522=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,3.91895579962393));
#523=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,-5.34999980535358));
#524=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,3.91895579962393));
#525=CARTESIAN_POINT('',(-44.1250006621704,2.86139135040288,3.91895579962393));
#526=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,9.50000014156103));
#527=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,4.75000015925616));
#528=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,9.50000014156103));
#529=CARTESIAN_POINT('',(-14.375000228174,2.86139135040288,9.50000014156103));
#530=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,-4.74999980535358));
#531=CARTESIAN_POINT('Origin',(1.69999998882413,2.86139135040288,10.700000141561));
#532=CARTESIAN_POINT('',(1.69999998882413,28.3613913504029,-10.6999997876585));
#533=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,-10.6999997876585));
#534=CARTESIAN_POINT('',(1.69999998882413,28.3613913504029,10.700000141561));
#535=CARTESIAN_POINT('',(1.69999998882413,28.3613913504029,5.35000015925616));
#536=CARTESIAN_POINT('',(1.69999998882413,2.86139135040288,10.700000141561));
#537=CARTESIAN_POINT('Origin',(-59.0000008791685,5.46139135040288,-3.78104420037607));
#538=CARTESIAN_POINT('',(-60.2000008791685,5.46139135040288,-3.78104420037607));
#539=CARTESIAN_POINT('',(-60.2000008791685,4.16139135040288,-3.78104420037607));
#540=CARTESIAN_POINT('',(-59.0000008791685,5.46139135040288,-3.78104420037607));
#541=CARTESIAN_POINT('',(-59.0000008791685,4.16139135040288,-3.78104420037607));
#542=CARTESIAN_POINT('',(-59.0000008791685,5.46139135040288,-3.78104420037607));
#543=CARTESIAN_POINT('Origin',(-59.0000008791685,5.46139135040288,3.91895579962393));
#544=CARTESIAN_POINT('',(-60.2000008791685,5.46139135040288,3.91895579962393));
#545=CARTESIAN_POINT('',(-60.2000008791685,5.46139135040288,-3.39052199401726));
#546=CARTESIAN_POINT('',(-59.0000008791685,5.46139135040288,3.91895579962393));
#547=CARTESIAN_POINT('',(-59.0000008791685,5.46139135040288,6.70947797059248));
#548=CARTESIAN_POINT('',(-59.0000008791685,5.46139135040288,3.91895579962393));
#549=CARTESIAN_POINT('Origin',(-59.0000008791685,2.86139135040288,3.91895579962393));
#550=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,3.91895579962393));
#551=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,3.91895579962393));
#552=CARTESIAN_POINT('Origin',(-59.0000008791685,2.86139135040288,9.50000014156103));
#553=CARTESIAN_POINT('',(-59.0000008791685,26.8613913504029,-9.49999978765845));
#554=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,-9.49999978765845));
#555=CARTESIAN_POINT('',(-59.0000008791685,26.8613913504029,9.50000014156103));
#556=CARTESIAN_POINT('',(-59.0000008791685,26.8613913504029,4.75000015925616));
#557=CARTESIAN_POINT('',(-59.0000008791685,2.86139135040288,9.50000014156103));
#558=CARTESIAN_POINT('Origin',(-29.2500004451722,26.8613913504029,1.76951289176941E-7));
#559=CARTESIAN_POINT('',(0.499999988824129,26.8613913504029,-9.49999978765845));
#560=CARTESIAN_POINT('',(0.499999988824129,26.8613913504029,9.50000014156103));
#561=CARTESIAN_POINT('',(0.499999988824129,26.8613913504029,-4.74999980535358));
#562=CARTESIAN_POINT('',(-14.375000228174,26.8613913504029,9.50000014156103));
#563=CARTESIAN_POINT('',(-44.1250006621704,26.8613913504029,-9.49999978765845));
#564=CARTESIAN_POINT('Origin',(-29.2500004451722,28.3613913504029,1.76951289176941E-7));
#565=CARTESIAN_POINT('',(-60.2000008791685,28.3613913504029,-10.6999997876585));
#566=CARTESIAN_POINT('',(-13.775000228174,28.3613913504029,-10.6999997876585));
#567=CARTESIAN_POINT('',(-60.2000008791685,28.3613913504029,10.700000141561));
#568=CARTESIAN_POINT('',(-60.2000008791685,28.3613913504029,-5.34999980535358));
#569=CARTESIAN_POINT('',(-44.7250006621704,28.3613913504029,10.700000141561));
#570=CARTESIAN_POINT('Origin',(0.499999988824129,2.86139135040288,-9.49999978765845));
#571=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,9.50000014156103));
#572=CARTESIAN_POINT('',(0.499999988824129,2.86139135040288,-9.49999978765845));
#573=CARTESIAN_POINT('Origin',(-59.0000008791685,2.86139135040288,-9.49999978765845));
#574=CARTESIAN_POINT('Origin',(0.499999988824129,2.86139135040288,9.50000014156103));
#575=CARTESIAN_POINT('Origin',(-60.2000008791685,2.86139135040288,10.700000141561));
#576=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,10.700000141561));
#577=CARTESIAN_POINT('Origin',(-60.2000008791685,2.86139135040288,-10.6999997876585));
#578=CARTESIAN_POINT('',(-60.2000008791685,2.86139135040288,-10.6999997876585));
#579=CARTESIAN_POINT('Origin',(1.69999998882413,2.86139135040288,-10.6999997876585));
#580=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#584,
'DISTANCE_ACCURACY_VALUE',
'Maximum model space distance between geometric entities at asserted c
onnectivities');
#581=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#584,
'DISTANCE_ACCURACY_VALUE',
'Maximum model space distance between geometric entities at asserted c
onnectivities');
#582=(
GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#580))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#584,#586,#587))
REPRESENTATION_CONTEXT('','3D')
);
#583=(
GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#581))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#584,#586,#587))
REPRESENTATION_CONTEXT('','3D')
);
#584=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT(.MILLI.,.METRE.)
);
#585=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT($,.METRE.)
);
#586=(
NAMED_UNIT(*)
PLANE_ANGLE_UNIT()
SI_UNIT($,.RADIAN.)
);
#587=(
NAMED_UNIT(*)
SI_UNIT($,.STERADIAN.)
SOLID_ANGLE_UNIT()
);
#588=SHAPE_DEFINITION_REPRESENTATION(#589,#590);
#589=PRODUCT_DEFINITION_SHAPE('',$,#592);
#590=SHAPE_REPRESENTATION('',(#368),#582);
#591=PRODUCT_DEFINITION_CONTEXT('part definition',#596,'design');
#592=PRODUCT_DEFINITION('Base','Base',#593,#591);
#593=PRODUCT_DEFINITION_FORMATION('',$,#598);
#594=PRODUCT_RELATED_PRODUCT_CATEGORY('Base','Base',(#598));
#595=APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2009,#596);
#596=APPLICATION_CONTEXT(
'Core Data for Automotive Mechanical Design Process');
#597=PRODUCT_CONTEXT('part definition',#596,'mechanical');
#598=PRODUCT('Base','Base',$,(#597));
#599=PRESENTATION_STYLE_ASSIGNMENT((#600));
#600=SURFACE_STYLE_USAGE(.BOTH.,#601);
#601=SURFACE_SIDE_STYLE('',(#602));
#602=SURFACE_STYLE_FILL_AREA(#603);
#603=FILL_AREA_STYLE('Steel - Satin',(#604));
#604=FILL_AREA_STYLE_COLOUR('Steel - Satin',#605);
#605=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157);
ENDSEC;
END-ISO-10303-21;

3450
3D/Lid.step Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,20 @@
menu "espScope Configuration" menu "espScope Configuration"
config LED_BUILTIN
int "LED IO Pin"
default 15
help
LED IO pin
config ESP_WIFI_SSID config ESP_WIFI_SSID
string "WiFi SSID" string "WiFi SSID"
default "myssid" default "myssid"
help help
SSID (network name) to connect to. Default SSID (network name) to connect to. You can change this onece connected via the web interface.
config ESP_WIFI_PASSWORD config ESP_WIFI_PASSWORD
string "WiFi Password" string "WiFi Password"
default "mypassword" default "mypassword"
help help
WiFi password. Default SSID password. You can change this onece connected via the web interface.
endmenu endmenu

View File

@@ -111,13 +111,14 @@
direction: rtl; direction: rtl;
} }
#resetBtn { #resetBtn, #powerOff {
background: #222; background: #222;
color: #e66; color: #e66;
border: 1px solid; border: 1px solid;
font-size: 0.8rem; font-size: 0.8rem;
height: 4em; height: 4em;
width: 6em; width: 6em;
vertical-align: middle;
} }
</style> </style>
</head> </head>
@@ -168,7 +169,10 @@
<input type="number" id="testHz" value="100" min="1" max="10000"> <input type="number" id="testHz" value="100" min="1" max="10000">
</div> </div>
</div> </div>
<div>
<button id="resetBtn">Reset</button> <button id="resetBtn">Reset</button>
<button id="powerOff">Power off</button>
</div>
</form> </form>
</div> </div>

View File

@@ -452,6 +452,9 @@ document.getElementById('resetBtn').addEventListener('click', () => {
localStorage.clear(); localStorage.clear();
window.location.reload(); window.location.reload();
}); });
document.getElementById('powerOff').addEventListener('click', () => {
navigator.sendBeacon("/poweroff");
});
setParams(); setParams();
connect(); connect();

View File

@@ -1,3 +1,9 @@
#include <inttypes.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "cJSON.h" #include "cJSON.h"
#include "driver/gpio.h" #include "driver/gpio.h"
#include "driver/ledc.h" #include "driver/ledc.h"
@@ -5,17 +11,13 @@
#include "esp_event.h" #include "esp_event.h"
#include "esp_http_server.h" #include "esp_http_server.h"
#include "esp_log.h" #include "esp_log.h"
#include "esp_sleep.h"
#include "esp_system.h" #include "esp_system.h"
#include "esp_wifi.h" #include "esp_wifi.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h" #include "freertos/event_groups.h"
#include "freertos/task.h" #include "freertos/task.h"
#include "nvs_flash.h" #include "nvs_flash.h"
#include <inttypes.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
// Tag for logging // Tag for logging
static const char* TAG = "ESP-SCOPE"; static const char* TAG = "ESP-SCOPE";
@@ -65,7 +67,6 @@ static httpd_handle_t s_server = NULL;
static adc_continuous_handle_t adc_handle = NULL; static adc_continuous_handle_t adc_handle = NULL;
// Single client support for simplicity, or use a list for multiple // Single client support for simplicity, or use a list for multiple
static int s_ws_client_fd = -1; static int s_ws_client_fd = -1;
@@ -110,8 +111,6 @@ static void adc_read_task(void *arg) {
uint8_t result[ADC_READ_LEN] = {0}; uint8_t result[ADC_READ_LEN] = {0};
memset(result, 0xcc, ADC_READ_LEN); memset(result, 0xcc, ADC_READ_LEN);
// ADC Init (Moved from app_main) // ADC Init (Moved from app_main)
// TODO: Make this configurable or find a good default pin. // TODO: Make this configurable or find a good default pin.
// For ESP32C6 ADC1 Channel 0 is usually GPIO 0. Let's use Channel 0 for now. // For ESP32C6 ADC1 Channel 0 is usually GPIO 0. Let's use Channel 0 for now.
@@ -157,7 +156,6 @@ static void adc_read_task(void *arg) {
if (ret == ESP_OK) { if (ret == ESP_OK) {
// ESP_LOGI(TAG, "ret is %x, ret_num is %"PRIu32" bytes", ret, ret_num); // ESP_LOGI(TAG, "ret is %x, ret_num is %"PRIu32" bytes", ret, ret_num);
// OPTIMIZED BATCH SENDING // OPTIMIZED BATCH SENDING
// We have `ret_num` bytes of data in `result`. // We have `ret_num` bytes of data in `result`.
// It contains `adc_digi_output_data_t` structs (4 bytes each). // It contains `adc_digi_output_data_t` structs (4 bytes each).
@@ -166,7 +164,6 @@ static void adc_read_task(void *arg) {
// So we have 1/2 the size. // So we have 1/2 the size.
if (s_ws_client_fd != -1) { if (s_ws_client_fd != -1) {
// Allocate a small temp buffer on stack or static to avoid malloc in loop // Allocate a small temp buffer on stack or static to avoid malloc in loop
// ret_num is up to ADC_READ_LEN (1024). 1024 / 4 = 256 samples. // ret_num is up to ADC_READ_LEN (1024). 1024 / 4 = 256 samples.
// 256 * 2 bytes = 512 bytes output. Stack safe. // 256 * 2 bytes = 512 bytes output. Stack safe.
@@ -185,8 +182,7 @@ static void adc_read_task(void *arg) {
.fragmented = false, .fragmented = false,
.type = HTTPD_WS_TYPE_BINARY, .type = HTTPD_WS_TYPE_BINARY,
.payload = (uint8_t*)out_buf, .payload = (uint8_t*)out_buf,
.len = out_idx * sizeof(uint16_t) .len = out_idx * sizeof(uint16_t)};
};
// Non-blocking send (best effort) // Non-blocking send (best effort)
esp_err_t ret_ws = httpd_ws_send_frame_async(s_server, s_ws_client_fd, &ws_frame); esp_err_t ret_ws = httpd_ws_send_frame_async(s_server, s_ws_client_fd, &ws_frame);
@@ -213,11 +209,8 @@ static void adc_read_task(void *arg) {
} }
} }
static void continuous_adc_init(adc_channel_t* channel, uint8_t channel_num, static void continuous_adc_init(adc_channel_t* channel, uint8_t channel_num,
adc_continuous_handle_t* out_handle) { adc_continuous_handle_t* out_handle) {
uint32_t frame_size = get_optimal_buffer_size(s_sample_rate); uint32_t frame_size = get_optimal_buffer_size(s_sample_rate);
ESP_LOGI(TAG, "Dynamic Buffer Size: %lu bytes", frame_size); ESP_LOGI(TAG, "Dynamic Buffer Size: %lu bytes", frame_size);
@@ -275,16 +268,14 @@ static void start_test_signal(uint32_t hz) {
.duty_resolution = LEDC_TIMER_14_BIT, .duty_resolution = LEDC_TIMER_14_BIT,
.timer_num = LEDC_TIMER_0, .timer_num = LEDC_TIMER_0,
.freq_hz = hz, .freq_hz = hz,
.clk_cfg = LEDC_AUTO_CLK .clk_cfg = LEDC_AUTO_CLK};
};
ledc_channel_config_t ledc_channel = { ledc_channel_config_t ledc_channel = {
.gpio_num = 1, // GPIO data pin 1 .gpio_num = 1, // GPIO data pin 1
.speed_mode = LEDC_LOW_SPEED_MODE, .speed_mode = LEDC_LOW_SPEED_MODE,
.channel = LEDC_CHANNEL_0, .channel = LEDC_CHANNEL_0,
.timer_sel = LEDC_TIMER_0, .timer_sel = LEDC_TIMER_0,
.duty = 1 << (ledc_timer.duty_resolution - 1), // 512, // 50% duty cycle (1024 / 2 for 10-bit resolution) .duty = 1 << (ledc_timer.duty_resolution - 1), // 512, // 50% duty cycle (1024 / 2 for 10-bit resolution)
.hpoint = 0 .hpoint = 0};
};
// Initialize the PWM // Initialize the PWM
ledc_timer_config(&ledc_timer); ledc_timer_config(&ledc_timer);
@@ -295,6 +286,17 @@ static void start_test_signal(uint32_t hz) {
ledc_inited = true; ledc_inited = true;
} }
static void show_status_led() {
#ifdef CONFIG_LED_BUILTIN
while (true) {
vTaskDelay(pdMS_TO_TICKS(100));
gpio_set_level(CONFIG_LED_BUILTIN, 1);
vTaskDelay(pdMS_TO_TICKS(s_ws_client_fd == -1 ? 900 : 200));
gpio_set_level(CONFIG_LED_BUILTIN, 0);
}
#endif
}
void app_main(void) { void app_main(void) {
// Initialize NVS // Initialize NVS
esp_err_t ret = nvs_flash_init(); esp_err_t ret = nvs_flash_init();
@@ -305,17 +307,27 @@ void app_main(void) {
} }
ESP_ERROR_CHECK(ret); ESP_ERROR_CHECK(ret);
#ifdef CONFIG_LED_BUILTIN
gpio_config_t led_io_conf = {
.pin_bit_mask = (1ULL << CONFIG_LED_BUILTIN),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE};
gpio_config(&led_io_conf);
gpio_set_level(CONFIG_LED_BUILTIN, 0);
#endif
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
/* Board-specific WiFi init (if any) */ /* Board-specific WiFi init (if any) */
// Seeed XIAO ESP32C6: Configure GPIO 3 and GPIO 14 as outputs // Seeed XIAO ESP32C6: Configure GPIO 3 and GPIO 14 as outputs
gpio_config_t io_conf = { gpio_config_t board_io_conf = {
.pin_bit_mask = (1ULL << 3) | (1ULL << 14), .pin_bit_mask = (1ULL << 3) | (1ULL << 14),
.mode = GPIO_MODE_OUTPUT, .mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_DISABLE, .pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE, .pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE .intr_type = GPIO_INTR_DISABLE};
}; gpio_config(&board_io_conf);
gpio_config(&io_conf);
// Set GPIO 3 and GPIO 14 to low // Set GPIO 3 and GPIO 14 to low
gpio_set_level(3, 0); gpio_set_level(3, 0);
@@ -323,10 +335,7 @@ void app_main(void) {
/* end board-specific WiFi init (if any) */ /* end board-specific WiFi init (if any) */
wifi_init_sta(); wifi_init_sta();
start_test_signal(100); start_test_signal(100);
xTaskCreate(adc_read_task, "adc_read_task", 8192 + ADC_READ_LEN, NULL, 5, NULL); xTaskCreate(adc_read_task, "adc_read_task", 8192 + ADC_READ_LEN, NULL, 5, NULL);
// Wait for WiFi connection // Wait for WiFi connection
@@ -337,6 +346,7 @@ void app_main(void) {
if (bits & WIFI_CONNECTED_BIT) { if (bits & WIFI_CONNECTED_BIT) {
ESP_LOGI(TAG, "connected to ap SSID:%s", ESP_WIFI_SSID); ESP_LOGI(TAG, "connected to ap SSID:%s", ESP_WIFI_SSID);
start_webserver(); start_webserver();
show_status_led();
} else if (bits & WIFI_FAIL_BIT) { } else if (bits & WIFI_FAIL_BIT) {
ESP_LOGI(TAG, "Failed to connect to SSID:%s", ESP_WIFI_SSID); ESP_LOGI(TAG, "Failed to connect to SSID:%s", ESP_WIFI_SSID);
} else { } else {
@@ -401,8 +411,6 @@ static void wifi_init_sta(void) {
ESP_LOGI(TAG, "wifi_init_sta finished."); ESP_LOGI(TAG, "wifi_init_sta finished.");
} }
/* /*
* WebSocket Handler * WebSocket Handler
*/ */
@@ -507,8 +515,6 @@ static const httpd_uri_t uri_params = {.uri = "/params",
.handler = params_handler, .handler = params_handler,
.user_ctx = NULL}; .user_ctx = NULL};
/* Handler for serving index.html */ /* Handler for serving index.html */
static esp_err_t index_handler(httpd_req_t* req) { static esp_err_t index_handler(httpd_req_t* req) {
httpd_resp_set_type(req, "text/html"); httpd_resp_set_type(req, "text/html");
@@ -537,6 +543,19 @@ static esp_err_t index_js_handler(httpd_req_t *req) {
static const httpd_uri_t uri_index_js = { static const httpd_uri_t uri_index_js = {
.uri = "/index.js", .method = HTTP_GET, .handler = index_js_handler, .user_ctx = NULL}; .uri = "/index.js", .method = HTTP_GET, .handler = index_js_handler, .user_ctx = NULL};
static esp_err_t power_handler(httpd_req_t* req) {
#ifdef CONFIG_LED_BUILTIN
gpio_set_level(CONFIG_LED_BUILTIN, 0);
#endif
esp_sleep_enable_timer_wakeup(30L * 24L * 60L * 60L * 1000000ULL); // One month
esp_deep_sleep_start();
return ESP_OK;
}
static const httpd_uri_t uri_power = {
.uri = "/poweroff", .method = HTTP_POST, .handler = power_handler, .user_ctx = NULL};
static void start_webserver(void) { static void start_webserver(void) {
httpd_config_t config = HTTPD_DEFAULT_CONFIG(); httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.lru_purge_enable = true; config.lru_purge_enable = true;
@@ -548,9 +567,7 @@ static void start_webserver(void) {
httpd_register_uri_handler(s_server, &uri_index_js); httpd_register_uri_handler(s_server, &uri_index_js);
httpd_register_uri_handler(s_server, &uri_ws); httpd_register_uri_handler(s_server, &uri_ws);
httpd_register_uri_handler(s_server, &uri_params); httpd_register_uri_handler(s_server, &uri_params);
httpd_register_uri_handler(s_server, &uri_power);
} else { } else {
ESP_LOGI(TAG, "Error starting server!"); ESP_LOGI(TAG, "Error starting server!");
} }