Compare commits
40 Commits
ollo-dev
...
a30dbe0759
| Author | SHA1 | Date | |
|---|---|---|---|
| a30dbe0759 | |||
| 5724088780 | |||
| 4c02b99ea7 | |||
| 1e40e2e3ba | |||
| fd823217aa | |||
| 2541c83ebe | |||
| 58801f870e | |||
| 066b3ec24f | |||
| 303bdd131f | |||
| 5d6871250e | |||
| e43538ec8a | |||
| fb0ad6b1dc | |||
| f0f0e9f27e | |||
| 4a8fffb3cc | |||
| dd949a1be1 | |||
| a9ab4ee99b | |||
| 8bfa27612d | |||
| 55369e46a8 | |||
| b2e5ccccee | |||
| 031e8de99f | |||
| d35b814047 | |||
| 0a0ac6babf | |||
| b268466b89 | |||
| 3c409ea339 | |||
| 825d389a8c | |||
| 17db1b8a45 | |||
| 2092354bc9 | |||
| ae8ff86c1a | |||
| ec67450a0a | |||
| f72135a2b3 | |||
| ba0fa2e732 | |||
| d3d6ad8ffb | |||
| ca74a716b7 | |||
| ba9fc2432b | |||
| fd08921bba | |||
| 33082b7481 | |||
| 8cc9b9d492 | |||
| 928dce949d | |||
| 5f20ec17d0 | |||
| bdd9a17757 |
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1 +1,12 @@
|
||||
*.sch-bak
|
||||
PlantCtrlESP32-backups/
|
||||
board/production/PlantCtrlESP32_2023-11-08_00-45-35/PlantCtrlESP32.zip
|
||||
board/production/PlantCtrlESP32_2023-11-08_00-45-35/netlist.ipc
|
||||
.vscode
|
||||
.embuild/
|
||||
target
|
||||
Cargo.lock
|
||||
node_modules/
|
||||
rust/src/webserver/bundle.js
|
||||
|
||||
rust/image.bin
|
||||
|
||||
46
board/4435.kicad_mod
Normal file
46
board/4435.kicad_mod
Normal file
@@ -0,0 +1,46 @@
|
||||
(footprint "4435" (version 20221018) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(attr smd)
|
||||
(fp_text reference "REF**" (at -3.705 0 90) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 888d4749-ec8d-48e0-b622-265ef152540e)
|
||||
)
|
||||
(fp_text value "4435" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 92782e22-8381-4ed1-a11f-ef69c9601af0)
|
||||
)
|
||||
(fp_line (start -2.705 -1.9) (end 2.705 -1.9)
|
||||
(stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp 3128977c-e0a0-4ca7-8f5b-79eab6c86d44))
|
||||
(fp_line (start -2.705 1.1) (end -2.705 -1.9)
|
||||
(stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp b5339e6e-bef0-40f8-ac0d-5ffe68b262f3))
|
||||
(fp_line (start -1.905 1.9) (end -2.705 1.1)
|
||||
(stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp 267dcc87-49da-46db-86da-4ce81b7d2468))
|
||||
(fp_line (start 2.705 -1.9) (end 2.705 1.9)
|
||||
(stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp 14aaa409-1cdb-4bf6-a811-f0da4dffe73a))
|
||||
(fp_line (start 2.705 1.9) (end -1.905 1.9)
|
||||
(stroke (width 0.12) (type default)) (layer "F.SilkS") (tstamp 1789de97-d192-4375-b67e-3ad05848eee2))
|
||||
(fp_line (start -2.46 -4.85) (end 2.46 -4.85)
|
||||
(stroke (width 0.05) (type default)) (layer "F.CrtYd") (tstamp f4d6fc79-0700-4ee7-b411-e8f033ff66d3))
|
||||
(fp_line (start -2.46 4.85) (end -2.46 -4.85)
|
||||
(stroke (width 0.05) (type default)) (layer "F.CrtYd") (tstamp 3cfe9046-c22e-44b7-8f86-5e90bf2c83b0))
|
||||
(fp_line (start 2.46 -4.85) (end 2.46 4.85)
|
||||
(stroke (width 0.05) (type default)) (layer "F.CrtYd") (tstamp 41eb9d06-d36a-4d1d-a098-b2c48b580c65))
|
||||
(fp_line (start 2.46 4.85) (end -2.46 4.85)
|
||||
(stroke (width 0.05) (type default)) (layer "F.CrtYd") (tstamp 05ce4f60-8c60-4fe2-86da-df65172ffb03))
|
||||
(pad "1" smd rect (at -1.905 -3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp 239f0d43-7a93-43bf-abef-be78a7aed604))
|
||||
(pad "1" smd rect (at -0.635 -3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp a9c370b9-178b-48cd-94a4-ca368fb8484d))
|
||||
(pad "1" smd rect (at 0.635 -3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp 8d506357-8b26-4d9b-b778-52fd40f96071))
|
||||
(pad "1" smd rect (at 1.905 -3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp 4f4e03c6-0964-4327-a6cb-2e71085bfef0))
|
||||
(pad "2" smd rect (at 1.905 3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp 3f6b4cbd-12fd-4380-92b9-d204178e6014))
|
||||
(pad "3" smd rect (at -1.905 3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp bb893791-93a0-4766-9b0e-f175da5df5f4))
|
||||
(pad "3" smd rect (at -0.635 3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp 8487832e-80f2-4019-9519-9da7cbe24a96))
|
||||
(pad "3" smd rect (at 0.635 3.5) (size 0.6 2.2) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(thermal_bridge_angle 45) (tstamp 4ecffbef-d0f1-4d07-af9a-0fb6030dccea))
|
||||
)
|
||||
82
board/CN3306.kicad_sym
Normal file
82
board/CN3306.kicad_sym
Normal file
@@ -0,0 +1,82 @@
|
||||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "CN3306" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at 5.08 -5.08 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "CN3306_1_1"
|
||||
(rectangle (start -2.54 7.62) (end 12.7 -16.51)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(pin input line (at 15.24 -8.89 180) (length 2.54)
|
||||
(name "FB" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 5.08 10.16 270) (length 2.54)
|
||||
(name "COME" (effects (font (size 1.27 1.27))))
|
||||
(number "10" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 15.24 -13.97 180) (length 2.54)
|
||||
(name "VCC" (effects (font (size 1.27 1.27))))
|
||||
(number "11" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 15.24 -11.43 180) (length 2.54)
|
||||
(name "VCC" (effects (font (size 1.27 1.27))))
|
||||
(number "12" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 15.24 5.08 180) (length 2.54)
|
||||
(name "DRV" (effects (font (size 1.27 1.27))))
|
||||
(number "13" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 3.81 -19.05 90) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "14" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 6.35 -19.05 90) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "15" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 15.24 2.54 180) (length 2.54)
|
||||
(name "ISW" (effects (font (size 1.27 1.27))))
|
||||
(number "16" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -5.08 -10.16 0) (length 2.54)
|
||||
(name "COMP" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -5.08 -1.27 0) (length 2.54)
|
||||
(name "MPPT" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -5.08 -7.62 0) (length 2.54)
|
||||
(name "SHDN" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -5.08 3.81 0) (length 2.54)
|
||||
(name "CHRG" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -5.08 1.27 0) (length 2.54)
|
||||
(name "DONE" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 15.24 -3.81 180) (length 2.54)
|
||||
(name "CSP" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 15.24 -6.35 180) (length 2.54)
|
||||
(name "ONE" (effects (font (size 1.27 1.27))))
|
||||
(number "9" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
123
board/CN3795.kicad_sym
Normal file
123
board/CN3795.kicad_sym
Normal file
@@ -0,0 +1,123 @@
|
||||
|
||||
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
|
||||
(symbol "CN3795" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (id 0) (at 5.08 18.542 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom left))
|
||||
)
|
||||
(property "Value" "CN3795" (id 1) (at 5.08 -20.32 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom left))
|
||||
)
|
||||
(property "Footprint" "CN3795:SSOP10" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MF" "Consonance" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Description" "\n4A, Multi-Chemistry Battery Charger\nWith Photovoltaic Cell MPPT Function\n" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Package" "Package" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Price" "None" (id 7) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "SnapEDA_Link" "https://www.snapeda.com/parts/CN3795/Consonance/view-part/?ref=snap" (id 8) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MP" "CN3795" (id 9) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Availability" "Not in stock" (id 10) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Check_prices" "https://www.snapeda.com/parts/CN3795/Consonance/view-part/?ref=eda" (id 11) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(symbol "CN3795_0_0"
|
||||
(rectangle (start -12.7 -17.78) (end 12.7 17.78)
|
||||
(stroke (width 0.254)) (fill (type background))
|
||||
)
|
||||
(pin bidirectional line (at -15.24 7.62 0) (length 2.54)
|
||||
(name "VCC"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "9"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -15.24 -2.54 0) (length 2.54)
|
||||
(name "~{CHRG}"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "3"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -15.24 -7.62 0) (length 2.54)
|
||||
(name "MPPT"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "4"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -2.54 20.32 270.0) (length 2.54)
|
||||
(name "VG"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "1"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 2.54 20.32 270.0) (length 2.54)
|
||||
(name "DRV"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "10"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 15.24 7.62 180.0) (length 2.54)
|
||||
(name "CSP"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "8"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 15.24 2.54 180.0) (length 2.54)
|
||||
(name "BAT"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "7"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 15.24 -2.54 180.0) (length 2.54)
|
||||
(name "FB"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "6"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 15.24 -7.62 180.0) (length 2.54)
|
||||
(name "COM"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "5"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 0.0 -20.32 90.0) (length 2.54)
|
||||
(name "GND"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "2"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"auto_track_width": false,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
@@ -64,10 +64,12 @@
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "fffffff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
"zone_display_mode": 1
|
||||
},
|
||||
"meta": {
|
||||
"filename": "PlantCtrlESP32.kicad_prl",
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
"drill": 0.0,
|
||||
"height": 3.0,
|
||||
"width": 1.6
|
||||
},
|
||||
"silk_line_width": 0.12,
|
||||
"silk_text_italic": false,
|
||||
@@ -45,12 +45,39 @@
|
||||
"silk_text_thickness": 0.15,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"45_degree_only": false,
|
||||
"min_clearance": 0.508
|
||||
"min_clearance": 0.0
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"diff_pair_dimensions": [
|
||||
{
|
||||
"gap": 0.0,
|
||||
"via_gap": 0.0,
|
||||
"width": 0.0
|
||||
}
|
||||
],
|
||||
"drc_exclusions": [
|
||||
"courtyards_overlap|189080001|128865001|67ac55df-4a92-42f8-90ae-0f317d1fcee5|c62213e3-5f38-460c-825e-5567e84c0a13",
|
||||
"courtyards_overlap|199080001|128865001|67ac55df-4a92-42f8-90ae-0f317d1fcee5|cfde0667-9234-45fc-8eda-14a18003cf8d",
|
||||
"courtyards_overlap|209080001|128865001|5ed14a34-184f-41cd-94a0-c9f4df9ff6fd|cfde0667-9234-45fc-8eda-14a18003cf8d",
|
||||
"courtyards_overlap|219080001|128865001|4dcef43e-4bc3-40ed-bbe5-22243d3d487f|5ed14a34-184f-41cd-94a0-c9f4df9ff6fd",
|
||||
"courtyards_overlap|229080001|128865001|1c5c2a00-3616-406b-aedf-bf3a81986791|4dcef43e-4bc3-40ed-bbe5-22243d3d487f",
|
||||
"courtyards_overlap|239080001|128865001|1c5c2a00-3616-406b-aedf-bf3a81986791|1ecf7cd6-6488-4305-b20b-72dbab800538",
|
||||
"courtyards_overlap|249080001|128865001|1ecf7cd6-6488-4305-b20b-72dbab800538|6ccc9c73-6edf-479a-97a6-a01eda77987f",
|
||||
"courtyards_overlap|268679999|80770001|22510631-57e1-46b7-916a-63be4d1f1249|ab413b79-2f68-48c4-8ed3-cedb5f870570",
|
||||
"silk_edge_clearance|170180000|117670000|87e2c53a-11a1-4d9d-89a9-2a5ca6e6f269|058105c1-5307-4874-9401-d1e0612824b0",
|
||||
"silk_edge_clearance|170180000|49705000|87e2c53a-11a1-4d9d-89a9-2a5ca6e6f269|2af3bc4a-e24d-48a4-898d-739774f84bd6",
|
||||
"silk_edge_clearance|170180000|67945000|87e2c53a-11a1-4d9d-89a9-2a5ca6e6f269|d1ed732d-93f0-4bca-ae40-dde82301c749",
|
||||
"silk_edge_clearance|170242295|123498571|87e2c53a-11a1-4d9d-89a9-2a5ca6e6f269|98242ad4-5a51-4508-b392-eeabff738172",
|
||||
"silk_edge_clearance|170242295|127998571|87e2c53a-11a1-4d9d-89a9-2a5ca6e6f269|9dfe510c-725d-437b-9270-62f0fb83346b",
|
||||
"silk_edge_clearance|269240000|110840000|6d070ea4-5732-4974-b15a-6adc25e87507|ab851b96-316a-460d-b1e8-9d3fef419e7b",
|
||||
"silk_edge_clearance|269240000|113440000|6d070ea4-5732-4974-b15a-6adc25e87507|f1ae4a26-c73e-4b69-af96-801c2a8e61d3",
|
||||
"silk_edge_clearance|269240000|115980000|6d070ea4-5732-4974-b15a-6adc25e87507|685b88f7-a226-4ce5-b9a2-70f5eea54d45",
|
||||
"silk_edge_clearance|269240000|118520000|6d070ea4-5732-4974-b15a-6adc25e87507|dfd6db18-258f-4809-8096-700f3184e482",
|
||||
"silk_edge_clearance|269240000|121060000|6d070ea4-5732-4974-b15a-6adc25e87507|df12db4f-f2d6-4bbb-962f-c504c70a12d7",
|
||||
"silk_edge_clearance|269240000|123600000|6d070ea4-5732-4974-b15a-6adc25e87507|0f1bb1cf-595c-42a5-b79f-53ba7db0e565",
|
||||
"silk_edge_clearance|269240000|126140000|6d070ea4-5732-4974-b15a-6adc25e87507|85c77ea0-2469-4305-9635-0c4ccb268a57",
|
||||
"silk_edge_clearance|269240000|128740000|6d070ea4-5732-4974-b15a-6adc25e87507|90543f7d-a988-4bce-a183-20300704c3c1"
|
||||
],
|
||||
"meta": {
|
||||
"filename": "board_design_settings.json",
|
||||
"version": 2
|
||||
@@ -58,32 +85,43 @@
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"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",
|
||||
"footprint": "error",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_near_hole": "error",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "error",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "ignore",
|
||||
"silk_overlap": "ignore",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
@@ -92,33 +130,77 @@
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zone_has_empty_net": "error",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rule_severitieslegacy_courtyards_overlap": true,
|
||||
"rule_severitieslegacy_no_courtyard_defined": false,
|
||||
"rules": {
|
||||
"allow_blind_buried_vias": false,
|
||||
"allow_microvias": false,
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.024999999999999998,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.19999999999999998,
|
||||
"min_microvia_drill": 0.09999999999999999,
|
||||
"min_resolved_spokes": 1,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_text_height": 0.7999999999999999,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.19999999999999998,
|
||||
"min_track_width": 0.19999999999999998,
|
||||
"min_via_annular_width": 0.049999999999999996,
|
||||
"min_via_annular_width": 0.09999999999999999,
|
||||
"min_via_diameter": 0.39999999999999997,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 5,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.2,
|
||||
0.5,
|
||||
1.0
|
||||
1.0,
|
||||
1.5,
|
||||
2.0
|
||||
],
|
||||
"via_dimensions": [
|
||||
{
|
||||
@@ -134,7 +216,7 @@
|
||||
"drill": 3.0
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false,
|
||||
"zones_allow_external_fillets": true,
|
||||
"zones_use_no_outline": true
|
||||
},
|
||||
"layer_presets": [],
|
||||
@@ -329,7 +411,7 @@
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"endpoint_off_grid": "ignore",
|
||||
"extra_units": "error",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
@@ -345,7 +427,7 @@
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"pin_to_pin": "error",
|
||||
"power_pin_not_driven": "error",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
@@ -367,7 +449,7 @@
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"clearance": 0.15,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
@@ -384,62 +466,556 @@
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"clearance": 0.15,
|
||||
"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": "5V",
|
||||
"name": "12V",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 1.4,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 6
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"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": "Mini",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgb(255, 4, 6)",
|
||||
"track_width": 1.0,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 6
|
||||
"wire_width": 12
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"clearance": 0.15,
|
||||
"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",
|
||||
"name": "3V",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 1.7,
|
||||
"schematic_color": "rgb(255, 153, 0)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 6
|
||||
"wire_width": 12
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.15,
|
||||
"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": "BAT+",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgb(81, 255, 3)",
|
||||
"track_width": 1.2,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 12
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.15,
|
||||
"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": "BAT-",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgb(130, 130, 130)",
|
||||
"track_width": 1.2,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 12
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.15,
|
||||
"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": "GND",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgb(0, 0, 0)",
|
||||
"track_width": 0.5,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 12
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
"netclass_assignments": {
|
||||
"Net-(battery1-Pin_1)": "BAT-",
|
||||
"VBAT": "BAT+"
|
||||
},
|
||||
"netclass_patterns": [
|
||||
{
|
||||
"netclass": "3V",
|
||||
"pattern": "3_3V"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "CUSTOM_GPIO12"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "CUSTOM_GPIO2"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "CUSTOM_GPIO34"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "CUSTOM_GPIO35"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "ESP_RX"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "ESP_TX"
|
||||
},
|
||||
{
|
||||
"netclass": "GND",
|
||||
"pattern": "GND"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(12V1-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(12V2-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Boot1-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C10-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C14-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C16-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C17-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C4-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C5-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(C6-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D10-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D11-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D12-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D13-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D14-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D15-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D16-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D4-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D5-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D7-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(D9-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Pumps1-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q1-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q1-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q10-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q11-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q12-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q12-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q13-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q13-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q2-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q2-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q3-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q3-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q4-Pad3)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q5-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q6-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q7-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q8-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q9-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q_PWR1-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q_PWR2-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q_PWR3-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q_PWR4-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q_PWR5-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(Q_PWR6-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R1-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R14-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R18-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R19-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R28-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R54-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R56-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R58-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R60-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R62-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R64-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R66-Pad2)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(R68-Pad1)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U3-Pad6)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad17)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad18)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad19)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad20)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad21)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad22)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U4-Pad32)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U6-Pad6)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Net-(U6-Pad7)"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT0_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT0_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT1_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT1_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT2_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT2_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT3_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT3_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT4_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT4_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT5_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT5_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT6_MOIST"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT6_PUMP"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_0"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_1"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_2"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_3"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_4"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_5"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PLANT_CTRL_PUMP_6"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PUMP_ENABLE"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PUMP_PWR"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PWR_I2C"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PWR_PUMP_CONVERTER"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "PWR_SENSORS"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Rsense+"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "SCL"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "SDA"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "SENSORS_ENABLE"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "SOLAR_IN"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "Temp"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "VCC"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "VCC_BATT"
|
||||
},
|
||||
{
|
||||
"netclass": "Default",
|
||||
"pattern": "VCC_FUSED_ALWAYS"
|
||||
},
|
||||
{
|
||||
"netclass": "12V",
|
||||
"pattern": "12V"
|
||||
},
|
||||
{
|
||||
"netclass": "12V",
|
||||
"pattern": "/12VR"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
24410
board/PlantCtrlESP32.kicad_sch-bak
Normal file
24410
board/PlantCtrlESP32.kicad_sch-bak
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,288 +0,0 @@
|
||||
update=Thu 10 Jun 2021 10:17:33 PM CEST
|
||||
version=1
|
||||
last_client=kicad
|
||||
[general]
|
||||
version=1
|
||||
RootSch=
|
||||
BoardNm=
|
||||
[cvpcb]
|
||||
version=1
|
||||
NetIExt=net
|
||||
[eeschema]
|
||||
version=1
|
||||
LibDir=
|
||||
[eeschema/libraries]
|
||||
[schematic_editor]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
PlotDirectoryName=/tmp/
|
||||
SubpartIdSeparator=0
|
||||
SubpartFirstId=65
|
||||
NetFmtName=Pcbnew
|
||||
SpiceAjustPassiveValues=0
|
||||
LabSize=50
|
||||
ERC_TestSimilarLabels=1
|
||||
[pcbnew]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
LastNetListRead=PlantCtrlESP32.net
|
||||
CopperLayerCount=2
|
||||
BoardThickness=1.6
|
||||
AllowMicroVias=0
|
||||
AllowBlindVias=0
|
||||
RequireCourtyardDefinitions=0
|
||||
ProhibitOverlappingCourtyards=1
|
||||
MinTrackWidth=0.2
|
||||
MinViaDiameter=0.4
|
||||
MinViaDrill=0.3
|
||||
MinMicroViaDiameter=0.2
|
||||
MinMicroViaDrill=0.09999999999999999
|
||||
MinHoleToHole=0.25
|
||||
TrackWidth1=1.2
|
||||
TrackWidth2=0.2
|
||||
TrackWidth3=0.5
|
||||
TrackWidth4=1
|
||||
ViaDiameter1=0.8
|
||||
ViaDrill1=0.4
|
||||
ViaDiameter2=1.2
|
||||
ViaDrill2=0.8
|
||||
ViaDiameter3=4
|
||||
ViaDrill3=3
|
||||
dPairWidth1=0.2
|
||||
dPairGap1=0.25
|
||||
dPairViaGap1=0.25
|
||||
SilkLineWidth=0.12
|
||||
SilkTextSizeV=1
|
||||
SilkTextSizeH=1
|
||||
SilkTextSizeThickness=0.15
|
||||
SilkTextItalic=0
|
||||
SilkTextUpright=1
|
||||
CopperLineWidth=0.2
|
||||
CopperTextSizeV=1.5
|
||||
CopperTextSizeH=1.5
|
||||
CopperTextThickness=0.3
|
||||
CopperTextItalic=0
|
||||
CopperTextUpright=1
|
||||
EdgeCutLineWidth=0.05
|
||||
CourtyardLineWidth=0.05
|
||||
OthersLineWidth=0.15
|
||||
OthersTextSizeV=1
|
||||
OthersTextSizeH=1
|
||||
OthersTextSizeThickness=0.15
|
||||
OthersTextItalic=0
|
||||
OthersTextUpright=1
|
||||
SolderMaskClearance=0.051
|
||||
SolderMaskMinWidth=0.25
|
||||
SolderPasteClearance=0
|
||||
SolderPasteRatio=-0
|
||||
[pcbnew/Layer.F.Cu]
|
||||
Name=F.Cu
|
||||
Type=0
|
||||
Enabled=1
|
||||
[pcbnew/Layer.In1.Cu]
|
||||
Name=In1.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In2.Cu]
|
||||
Name=In2.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In3.Cu]
|
||||
Name=In3.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In4.Cu]
|
||||
Name=In4.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In5.Cu]
|
||||
Name=In5.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In6.Cu]
|
||||
Name=In6.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In7.Cu]
|
||||
Name=In7.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In8.Cu]
|
||||
Name=In8.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In9.Cu]
|
||||
Name=In9.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In10.Cu]
|
||||
Name=In10.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In11.Cu]
|
||||
Name=In11.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In12.Cu]
|
||||
Name=In12.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In13.Cu]
|
||||
Name=In13.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In14.Cu]
|
||||
Name=In14.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In15.Cu]
|
||||
Name=In15.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In16.Cu]
|
||||
Name=In16.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In17.Cu]
|
||||
Name=In17.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In18.Cu]
|
||||
Name=In18.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In19.Cu]
|
||||
Name=In19.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In20.Cu]
|
||||
Name=In20.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In21.Cu]
|
||||
Name=In21.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In22.Cu]
|
||||
Name=In22.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In23.Cu]
|
||||
Name=In23.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In24.Cu]
|
||||
Name=In24.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In25.Cu]
|
||||
Name=In25.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In26.Cu]
|
||||
Name=In26.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In27.Cu]
|
||||
Name=In27.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In28.Cu]
|
||||
Name=In28.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In29.Cu]
|
||||
Name=In29.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In30.Cu]
|
||||
Name=In30.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.B.Cu]
|
||||
Name=B.Cu
|
||||
Type=0
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Adhes]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Adhes]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Paste]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Paste]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.SilkS]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.SilkS]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Mask]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Mask]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Dwgs.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Cmts.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Eco1.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Eco2.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Edge.Cuts]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Margin]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.CrtYd]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.CrtYd]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Fab]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Fab]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Rescue]
|
||||
Enabled=0
|
||||
[pcbnew/Netclasses]
|
||||
[pcbnew/Netclasses/Default]
|
||||
Name=Default
|
||||
Clearance=0.2
|
||||
TrackWidth=1.2
|
||||
ViaDiameter=0.8
|
||||
ViaDrill=0.4
|
||||
uViaDiameter=0.3
|
||||
uViaDrill=0.1
|
||||
dPairWidth=0.2
|
||||
dPairGap=0.25
|
||||
dPairViaGap=0.25
|
||||
[pcbnew/Netclasses/1]
|
||||
Name=5V
|
||||
Clearance=0.2
|
||||
TrackWidth=1.4
|
||||
ViaDiameter=0.8
|
||||
ViaDrill=0.4
|
||||
uViaDiameter=0.3
|
||||
uViaDrill=0.1
|
||||
dPairWidth=0.2
|
||||
dPairGap=0.25
|
||||
dPairViaGap=0.25
|
||||
[pcbnew/Netclasses/2]
|
||||
Name=Mini
|
||||
Clearance=0.2
|
||||
TrackWidth=1
|
||||
ViaDiameter=0.8
|
||||
ViaDrill=0.4
|
||||
uViaDiameter=0.3
|
||||
uViaDrill=0.1
|
||||
dPairWidth=0.2
|
||||
dPairGap=0.25
|
||||
dPairViaGap=0.25
|
||||
[pcbnew/Netclasses/3]
|
||||
Name=Power
|
||||
Clearance=0.2
|
||||
TrackWidth=1.7
|
||||
ViaDiameter=0.8
|
||||
ViaDrill=0.4
|
||||
uViaDiameter=0.3
|
||||
uViaDrill=0.1
|
||||
dPairWidth=0.2
|
||||
dPairGap=0.25
|
||||
dPairViaGap=0.25
|
||||
7
board/PlantCtrlESP32.round-tracks-config
Normal file
7
board/PlantCtrlESP32.round-tracks-config
Normal file
@@ -0,0 +1,7 @@
|
||||
Default False 2.0 3
|
||||
12V True 2.0 3
|
||||
3V True 2.0 3
|
||||
BAT+ True 2.0 3
|
||||
BAT- True 2.0 3
|
||||
GND True 2.0 3
|
||||
False True False
|
||||
63
board/R_Shunt_Vishay_WSK2512_6332Metric_T1.19mm.kicad_mod
Normal file
63
board/R_Shunt_Vishay_WSK2512_6332Metric_T1.19mm.kicad_mod
Normal file
@@ -0,0 +1,63 @@
|
||||
(footprint "R_Shunt_Vishay_WSK2512_6332Metric_T1.19mm" (version 20221018) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(descr "Shunt Resistor SMD 2512 (6332 Metric), 2.6mm thick, Vishay WKS2512, Terminal length (T) 1.19mm, 5 to 200 milli Ohm (http://http://www.vishay.com/docs/30108/wsk.pdf)")
|
||||
(tags "resistor shunt WSK2512")
|
||||
(attr smd)
|
||||
(fp_text reference "REF**" (at 0 -2.65) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp e64357ee-67ea-437d-842c-edd4e9b0e817)
|
||||
)
|
||||
(fp_text value "R_Shunt_Vishay_WSK2512_6332Metric_T1.19mm" (at 0 2.65) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 6d43eee8-d677-4710-a5b6-ed0a393d7e86)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 7af73258-6848-4c90-ada6-9916b21e0d54)
|
||||
)
|
||||
(fp_line (start -2.5 1.7) (end 1.67 1.7)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 686b0a9f-f303-4b9c-97bc-13b268071b2a))
|
||||
(fp_line (start -1.67 -1.7) (end 2.53 -1.7)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8ff3cd0c-2e69-49a7-948e-62e2af1cdeaf))
|
||||
(fp_line (start -4.38 -1.9) (end 4.38 -1.9)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 97453d6f-90a6-4d0b-9533-4b9de0e70d67))
|
||||
(fp_line (start -4.38 1.9) (end -4.38 -1.9)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8d751a64-d963-4d3e-b652-c6367d221a4c))
|
||||
(fp_line (start 4.38 -1.9) (end 4.38 1.9)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5fc8cbbe-390d-45f2-b9e2-001b3b36ad53))
|
||||
(fp_line (start 4.38 1.9) (end -4.38 1.9)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 85ea9322-734e-4f57-b7f4-e08d8559c109))
|
||||
(fp_line (start -3.175 -1.59) (end 3.175 -1.59)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a616017c-8c30-4c24-8988-6ebc65a5a14c))
|
||||
(fp_line (start -3.175 0.32) (end -3.175 -1.59)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 007035a4-df14-4627-b9dd-16c0816e9fc4))
|
||||
(fp_line (start -3.175 0.32) (end -2.795 0.32)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7a92ebc4-86fb-494b-8925-1512bf4598dd))
|
||||
(fp_line (start -3.175 0.94) (end -3.175 1.59)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8d1ed9db-8b9e-4c9a-b026-a147d8ba5a89))
|
||||
(fp_line (start -3.175 0.94) (end -2.795 0.94)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3238b0a3-1bbc-4ecd-9eca-d39a4563f46a))
|
||||
(fp_line (start -2.795 0.94) (end -2.795 0.32)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 56e7214e-7e65-4896-9919-6dfa6ad242a1))
|
||||
(fp_line (start 2.79 -0.94) (end 3.17 -0.94)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp bf2fd8b5-dc07-4d36-93f4-c05d760e4ae8))
|
||||
(fp_line (start 2.79 -0.32) (end 2.79 -0.94)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2732ea3b-0a68-4014-9f1f-147b192cb827))
|
||||
(fp_line (start 2.79 -0.32) (end 3.17 -0.32)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7597632e-0fab-4537-9ef5-3d955ee8fe04))
|
||||
(fp_line (start 3.175 -0.94) (end 3.175 -1.59)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp be78e59b-9296-4843-849b-9aeaddf3ec90))
|
||||
(fp_line (start 3.175 -0.32) (end 3.175 1.59)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp f0529fdf-6a96-4afa-ae66-3987676f8cc1))
|
||||
(fp_line (start 3.175 1.59) (end -3.175 1.59)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5494f1f1-9934-4901-ae11-4f45356840a6))
|
||||
(pad "1" smd roundrect (at -2.985 0.635) (size 2.29 2.03) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.12) (tstamp 7d665233-6376-4fd3-9d23-184556b0630c))
|
||||
(pad "2" smd roundrect (at -3.43 -1.27) (size 1.4 0.76) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.12) (tstamp a060266a-0c38-4364-b2df-6f7cf4c69f0d))
|
||||
(pad "3" smd roundrect (at 3.43 -1.27) (size 1.4 0.76) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp a1e31646-49e8-4836-bd67-1b6bed652414))
|
||||
(pad "4" smd roundrect (at 2.985 0.635) (size 2.29 2.03) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.12) (tstamp 3f532dd2-fd5a-4fe7-9636-aa84f769e3b2))
|
||||
(model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_Shunt_Vishay_WSK2512_6332Metric_T1.19mm.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
4562
board/bom/ibom.html
Normal file
4562
board/bom/ibom.html
Normal file
File diff suppressed because one or more lines are too long
@@ -1,4 +1,7 @@
|
||||
(fp_lib_table
|
||||
(lib (name misc_footprints)(type KiCad)(uri ${KIPRJMOD}/kicad-stuff/misc_footprints-master/misc_footprints.pretty)(options "")(descr ""))
|
||||
(lib (name ESP32)(type KiCad)(uri ${KIPRJMOD}/kicad-stuff/ESP32)(options "")(descr ""))
|
||||
)
|
||||
(fp_lib_table
|
||||
(version 7)
|
||||
(lib (name "misc_footprints")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/misc_footprints-master/misc_footprints.pretty")(options "")(descr ""))
|
||||
(lib (name "ESP32")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/ESP32")(options "")(descr ""))
|
||||
(lib (name "kicad-stuff")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff")(options "")(descr ""))
|
||||
(lib (name "board")(type "KiCad")(uri "${KIPRJMOD}/")(options "")(descr ""))
|
||||
)
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Glue,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
@@ -1,32 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Other,User*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.050000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X237729200Y-51267800D02*
|
||||
X237729200Y-60847800D01*
|
||||
X237729200Y-51267800D02*
|
||||
X242229200Y-51267800D01*
|
||||
X242229200Y-60847800D02*
|
||||
X237729200Y-60847800D01*
|
||||
X242229200Y-60847800D02*
|
||||
X242229200Y-51267800D01*
|
||||
X231560800Y-64114800D02*
|
||||
X223160800Y-64114800D01*
|
||||
X231560800Y-57364800D02*
|
||||
X231560800Y-64114800D01*
|
||||
X223160800Y-57364800D02*
|
||||
X231560800Y-57364800D01*
|
||||
X223160800Y-64114800D02*
|
||||
X223160800Y-57364800D01*
|
||||
M02*
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,425 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Other,Fab,Bot*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.100000*%
|
||||
%ADD11C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X226110800Y-62614800D02*
|
||||
X226735800Y-63614800D01*
|
||||
X225485800Y-63614800D02*
|
||||
X226110800Y-62614800D01*
|
||||
X231060800Y-63614800D02*
|
||||
X223660800Y-63614800D01*
|
||||
X231060800Y-57864800D02*
|
||||
X231060800Y-63614800D01*
|
||||
X223660800Y-57864800D02*
|
||||
X231060800Y-57864800D01*
|
||||
X223660800Y-63614800D02*
|
||||
X223660800Y-57864800D01*
|
||||
D11*
|
||||
X235812057Y-62843514D02*
|
||||
X235764438Y-62891133D01*
|
||||
X235716819Y-63033990D01*
|
||||
X235716819Y-63129228D01*
|
||||
X235764438Y-63272085D01*
|
||||
X235859676Y-63367323D01*
|
||||
X235954914Y-63414942D01*
|
||||
X236145390Y-63462561D01*
|
||||
X236288247Y-63462561D01*
|
||||
X236478723Y-63414942D01*
|
||||
X236573961Y-63367323D01*
|
||||
X236669200Y-63272085D01*
|
||||
X236716819Y-63129228D01*
|
||||
X236716819Y-63033990D01*
|
||||
X236669200Y-62891133D01*
|
||||
X236621580Y-62843514D01*
|
||||
X235716819Y-62272085D02*
|
||||
X235764438Y-62367323D01*
|
||||
X235812057Y-62414942D01*
|
||||
X235907295Y-62462561D01*
|
||||
X236193009Y-62462561D01*
|
||||
X236288247Y-62414942D01*
|
||||
X236335866Y-62367323D01*
|
||||
X236383485Y-62272085D01*
|
||||
X236383485Y-62129228D01*
|
||||
X236335866Y-62033990D01*
|
||||
X236288247Y-61986371D01*
|
||||
X236193009Y-61938752D01*
|
||||
X235907295Y-61938752D01*
|
||||
X235812057Y-61986371D01*
|
||||
X235764438Y-62033990D01*
|
||||
X235716819Y-62129228D01*
|
||||
X235716819Y-62272085D01*
|
||||
X236383485Y-61510180D02*
|
||||
X235716819Y-61510180D01*
|
||||
X236288247Y-61510180D02*
|
||||
X236335866Y-61462561D01*
|
||||
X236383485Y-61367323D01*
|
||||
X236383485Y-61224466D01*
|
||||
X236335866Y-61129228D01*
|
||||
X236240628Y-61081609D01*
|
||||
X235716819Y-61081609D01*
|
||||
X236383485Y-60605419D02*
|
||||
X235716819Y-60605419D01*
|
||||
X236288247Y-60605419D02*
|
||||
X236335866Y-60557800D01*
|
||||
X236383485Y-60462561D01*
|
||||
X236383485Y-60319704D01*
|
||||
X236335866Y-60224466D01*
|
||||
X236240628Y-60176847D01*
|
||||
X235716819Y-60176847D01*
|
||||
X235621580Y-59938752D02*
|
||||
X235621580Y-59176847D01*
|
||||
X236716819Y-58748276D02*
|
||||
X236716819Y-58653038D01*
|
||||
X236669200Y-58557800D01*
|
||||
X236621580Y-58510180D01*
|
||||
X236526342Y-58462561D01*
|
||||
X236335866Y-58414942D01*
|
||||
X236097771Y-58414942D01*
|
||||
X235907295Y-58462561D01*
|
||||
X235812057Y-58510180D01*
|
||||
X235764438Y-58557800D01*
|
||||
X235716819Y-58653038D01*
|
||||
X235716819Y-58748276D01*
|
||||
X235764438Y-58843514D01*
|
||||
X235812057Y-58891133D01*
|
||||
X235907295Y-58938752D01*
|
||||
X236097771Y-58986371D01*
|
||||
X236335866Y-58986371D01*
|
||||
X236526342Y-58938752D01*
|
||||
X236621580Y-58891133D01*
|
||||
X236669200Y-58843514D01*
|
||||
X236716819Y-58748276D01*
|
||||
X235716819Y-57462561D02*
|
||||
X235716819Y-58033990D01*
|
||||
X235716819Y-57748276D02*
|
||||
X236716819Y-57748276D01*
|
||||
X236573961Y-57843514D01*
|
||||
X236478723Y-57938752D01*
|
||||
X236431104Y-58033990D01*
|
||||
X235716819Y-57129228D02*
|
||||
X236383485Y-56605419D01*
|
||||
X236383485Y-57129228D02*
|
||||
X235716819Y-56605419D01*
|
||||
X236716819Y-56033990D02*
|
||||
X236716819Y-55938752D01*
|
||||
X236669200Y-55843514D01*
|
||||
X236621580Y-55795895D01*
|
||||
X236526342Y-55748276D01*
|
||||
X236335866Y-55700657D01*
|
||||
X236097771Y-55700657D01*
|
||||
X235907295Y-55748276D01*
|
||||
X235812057Y-55795895D01*
|
||||
X235764438Y-55843514D01*
|
||||
X235716819Y-55938752D01*
|
||||
X235716819Y-56033990D01*
|
||||
X235764438Y-56129228D01*
|
||||
X235812057Y-56176847D01*
|
||||
X235907295Y-56224466D01*
|
||||
X236097771Y-56272085D01*
|
||||
X236335866Y-56272085D01*
|
||||
X236526342Y-56224466D01*
|
||||
X236621580Y-56176847D01*
|
||||
X236669200Y-56129228D01*
|
||||
X236716819Y-56033990D01*
|
||||
X236621580Y-55319704D02*
|
||||
X236669200Y-55272085D01*
|
||||
X236716819Y-55176847D01*
|
||||
X236716819Y-54938752D01*
|
||||
X236669200Y-54843514D01*
|
||||
X236621580Y-54795895D01*
|
||||
X236526342Y-54748276D01*
|
||||
X236431104Y-54748276D01*
|
||||
X236288247Y-54795895D01*
|
||||
X235716819Y-55367323D01*
|
||||
X235716819Y-54748276D01*
|
||||
X235621580Y-54557800D02*
|
||||
X235621580Y-53795895D01*
|
||||
X236240628Y-53224466D02*
|
||||
X236240628Y-53557800D01*
|
||||
X235716819Y-53557800D02*
|
||||
X236716819Y-53557800D01*
|
||||
X236716819Y-53081609D01*
|
||||
X235764438Y-52319704D02*
|
||||
X235716819Y-52414942D01*
|
||||
X235716819Y-52605419D01*
|
||||
X235764438Y-52700657D01*
|
||||
X235859676Y-52748276D01*
|
||||
X236240628Y-52748276D01*
|
||||
X236335866Y-52700657D01*
|
||||
X236383485Y-52605419D01*
|
||||
X236383485Y-52414942D01*
|
||||
X236335866Y-52319704D01*
|
||||
X236240628Y-52272085D01*
|
||||
X236145390Y-52272085D01*
|
||||
X236050152Y-52748276D01*
|
||||
X235716819Y-51843514D02*
|
||||
X236383485Y-51843514D01*
|
||||
X236288247Y-51843514D02*
|
||||
X236335866Y-51795895D01*
|
||||
X236383485Y-51700657D01*
|
||||
X236383485Y-51557800D01*
|
||||
X236335866Y-51462561D01*
|
||||
X236240628Y-51414942D01*
|
||||
X235716819Y-51414942D01*
|
||||
X236240628Y-51414942D02*
|
||||
X236335866Y-51367323D01*
|
||||
X236383485Y-51272085D01*
|
||||
X236383485Y-51129228D01*
|
||||
X236335866Y-51033990D01*
|
||||
X236240628Y-50986371D01*
|
||||
X235716819Y-50986371D01*
|
||||
X235716819Y-50081609D02*
|
||||
X236240628Y-50081609D01*
|
||||
X236335866Y-50129228D01*
|
||||
X236383485Y-50224466D01*
|
||||
X236383485Y-50414942D01*
|
||||
X236335866Y-50510180D01*
|
||||
X235764438Y-50081609D02*
|
||||
X235716819Y-50176847D01*
|
||||
X235716819Y-50414942D01*
|
||||
X235764438Y-50510180D01*
|
||||
X235859676Y-50557800D01*
|
||||
X235954914Y-50557800D01*
|
||||
X236050152Y-50510180D01*
|
||||
X236097771Y-50414942D01*
|
||||
X236097771Y-50176847D01*
|
||||
X236145390Y-50081609D01*
|
||||
X235716819Y-49462561D02*
|
||||
X235764438Y-49557800D01*
|
||||
X235859676Y-49605419D01*
|
||||
X236716819Y-49605419D01*
|
||||
X235764438Y-48700657D02*
|
||||
X235716819Y-48795895D01*
|
||||
X235716819Y-48986371D01*
|
||||
X235764438Y-49081609D01*
|
||||
X235859676Y-49129228D01*
|
||||
X236240628Y-49129228D01*
|
||||
X236335866Y-49081609D01*
|
||||
X236383485Y-48986371D01*
|
||||
X236383485Y-48795895D01*
|
||||
X236335866Y-48700657D01*
|
||||
X236240628Y-48653038D01*
|
||||
X236145390Y-48653038D01*
|
||||
X236050152Y-49129228D01*
|
||||
X239526819Y-57486371D02*
|
||||
X239526819Y-57962561D01*
|
||||
X240526819Y-57962561D01*
|
||||
X239526819Y-57153038D02*
|
||||
X240526819Y-57153038D01*
|
||||
X239526819Y-56676847D02*
|
||||
X240526819Y-56676847D01*
|
||||
X240526819Y-56295895D01*
|
||||
X240479200Y-56200657D01*
|
||||
X240431580Y-56153038D01*
|
||||
X240336342Y-56105419D01*
|
||||
X240193485Y-56105419D01*
|
||||
X240098247Y-56153038D01*
|
||||
X240050628Y-56200657D01*
|
||||
X240003009Y-56295895D01*
|
||||
X240003009Y-56676847D01*
|
||||
X240526819Y-55486371D02*
|
||||
X240526819Y-55295895D01*
|
||||
X240479200Y-55200657D01*
|
||||
X240383961Y-55105419D01*
|
||||
X240193485Y-55057800D01*
|
||||
X239860152Y-55057800D01*
|
||||
X239669676Y-55105419D01*
|
||||
X239574438Y-55200657D01*
|
||||
X239526819Y-55295895D01*
|
||||
X239526819Y-55486371D01*
|
||||
X239574438Y-55581609D01*
|
||||
X239669676Y-55676847D01*
|
||||
X239860152Y-55724466D01*
|
||||
X240193485Y-55724466D01*
|
||||
X240383961Y-55676847D01*
|
||||
X240479200Y-55581609D01*
|
||||
X240526819Y-55486371D01*
|
||||
X239526819Y-54105419D02*
|
||||
X239526819Y-54676847D01*
|
||||
X239526819Y-54391133D02*
|
||||
X240526819Y-54391133D01*
|
||||
X240383961Y-54486371D01*
|
||||
X240288723Y-54581609D01*
|
||||
X240241104Y-54676847D01*
|
||||
X231098895Y-57021942D02*
|
||||
X231146514Y-57069561D01*
|
||||
X231289371Y-57117180D01*
|
||||
X231384609Y-57117180D01*
|
||||
X231527466Y-57069561D01*
|
||||
X231622704Y-56974323D01*
|
||||
X231670323Y-56879085D01*
|
||||
X231717942Y-56688609D01*
|
||||
X231717942Y-56545752D01*
|
||||
X231670323Y-56355276D01*
|
||||
X231622704Y-56260038D01*
|
||||
X231527466Y-56164800D01*
|
||||
X231384609Y-56117180D01*
|
||||
X231289371Y-56117180D01*
|
||||
X231146514Y-56164800D01*
|
||||
X231098895Y-56212419D01*
|
||||
X230527466Y-57117180D02*
|
||||
X230622704Y-57069561D01*
|
||||
X230670323Y-57021942D01*
|
||||
X230717942Y-56926704D01*
|
||||
X230717942Y-56640990D01*
|
||||
X230670323Y-56545752D01*
|
||||
X230622704Y-56498133D01*
|
||||
X230527466Y-56450514D01*
|
||||
X230384609Y-56450514D01*
|
||||
X230289371Y-56498133D01*
|
||||
X230241752Y-56545752D01*
|
||||
X230194133Y-56640990D01*
|
||||
X230194133Y-56926704D01*
|
||||
X230241752Y-57021942D01*
|
||||
X230289371Y-57069561D01*
|
||||
X230384609Y-57117180D01*
|
||||
X230527466Y-57117180D01*
|
||||
X229765561Y-56450514D02*
|
||||
X229765561Y-57117180D01*
|
||||
X229765561Y-56545752D02*
|
||||
X229717942Y-56498133D01*
|
||||
X229622704Y-56450514D01*
|
||||
X229479847Y-56450514D01*
|
||||
X229384609Y-56498133D01*
|
||||
X229336990Y-56593371D01*
|
||||
X229336990Y-57117180D01*
|
||||
X228860800Y-56450514D02*
|
||||
X228860800Y-57117180D01*
|
||||
X228860800Y-56545752D02*
|
||||
X228813180Y-56498133D01*
|
||||
X228717942Y-56450514D01*
|
||||
X228575085Y-56450514D01*
|
||||
X228479847Y-56498133D01*
|
||||
X228432228Y-56593371D01*
|
||||
X228432228Y-57117180D01*
|
||||
X228194133Y-57212419D02*
|
||||
X227432228Y-57212419D01*
|
||||
X227003657Y-56117180D02*
|
||||
X226908419Y-56117180D01*
|
||||
X226813180Y-56164800D01*
|
||||
X226765561Y-56212419D01*
|
||||
X226717942Y-56307657D01*
|
||||
X226670323Y-56498133D01*
|
||||
X226670323Y-56736228D01*
|
||||
X226717942Y-56926704D01*
|
||||
X226765561Y-57021942D01*
|
||||
X226813180Y-57069561D01*
|
||||
X226908419Y-57117180D01*
|
||||
X227003657Y-57117180D01*
|
||||
X227098895Y-57069561D01*
|
||||
X227146514Y-57021942D01*
|
||||
X227194133Y-56926704D01*
|
||||
X227241752Y-56736228D01*
|
||||
X227241752Y-56498133D01*
|
||||
X227194133Y-56307657D01*
|
||||
X227146514Y-56212419D01*
|
||||
X227098895Y-56164800D01*
|
||||
X227003657Y-56117180D01*
|
||||
X225717942Y-57117180D02*
|
||||
X226289371Y-57117180D01*
|
||||
X226003657Y-57117180D02*
|
||||
X226003657Y-56117180D01*
|
||||
X226098895Y-56260038D01*
|
||||
X226194133Y-56355276D01*
|
||||
X226289371Y-56402895D01*
|
||||
X225384609Y-57117180D02*
|
||||
X224860800Y-56450514D01*
|
||||
X225384609Y-56450514D02*
|
||||
X224860800Y-57117180D01*
|
||||
X224289371Y-56117180D02*
|
||||
X224194133Y-56117180D01*
|
||||
X224098895Y-56164800D01*
|
||||
X224051276Y-56212419D01*
|
||||
X224003657Y-56307657D01*
|
||||
X223956038Y-56498133D01*
|
||||
X223956038Y-56736228D01*
|
||||
X224003657Y-56926704D01*
|
||||
X224051276Y-57021942D01*
|
||||
X224098895Y-57069561D01*
|
||||
X224194133Y-57117180D01*
|
||||
X224289371Y-57117180D01*
|
||||
X224384609Y-57069561D01*
|
||||
X224432228Y-57021942D01*
|
||||
X224479847Y-56926704D01*
|
||||
X224527466Y-56736228D01*
|
||||
X224527466Y-56498133D01*
|
||||
X224479847Y-56307657D01*
|
||||
X224432228Y-56212419D01*
|
||||
X224384609Y-56164800D01*
|
||||
X224289371Y-56117180D01*
|
||||
X223575085Y-56212419D02*
|
||||
X223527466Y-56164800D01*
|
||||
X223432228Y-56117180D01*
|
||||
X223194133Y-56117180D01*
|
||||
X223098895Y-56164800D01*
|
||||
X223051276Y-56212419D01*
|
||||
X223003657Y-56307657D01*
|
||||
X223003657Y-56402895D01*
|
||||
X223051276Y-56545752D01*
|
||||
X223622704Y-57117180D01*
|
||||
X223003657Y-57117180D01*
|
||||
X230860800Y-58493371D02*
|
||||
X230527466Y-58493371D01*
|
||||
X230384609Y-59017180D02*
|
||||
X230860800Y-59017180D01*
|
||||
X230860800Y-58017180D01*
|
||||
X230384609Y-58017180D01*
|
||||
X230051276Y-58017180D02*
|
||||
X229384609Y-59017180D01*
|
||||
X229384609Y-58017180D02*
|
||||
X230051276Y-59017180D01*
|
||||
X229146514Y-58017180D02*
|
||||
X228575085Y-58017180D01*
|
||||
X228860800Y-59017180D02*
|
||||
X228860800Y-58017180D01*
|
||||
X228479847Y-59112419D02*
|
||||
X227717942Y-59112419D01*
|
||||
X227479847Y-59017180D02*
|
||||
X227479847Y-58017180D01*
|
||||
X227098895Y-58017180D01*
|
||||
X227003657Y-58064800D01*
|
||||
X226956038Y-58112419D01*
|
||||
X226908419Y-58207657D01*
|
||||
X226908419Y-58350514D01*
|
||||
X226956038Y-58445752D01*
|
||||
X227003657Y-58493371D01*
|
||||
X227098895Y-58540990D01*
|
||||
X227479847Y-58540990D01*
|
||||
X226575085Y-58017180D02*
|
||||
X226336990Y-59017180D01*
|
||||
X226146514Y-58302895D01*
|
||||
X225956038Y-59017180D01*
|
||||
X225717942Y-58017180D01*
|
||||
X224765561Y-59017180D02*
|
||||
X225098895Y-58540990D01*
|
||||
X225336990Y-59017180D02*
|
||||
X225336990Y-58017180D01*
|
||||
X224956038Y-58017180D01*
|
||||
X224860800Y-58064800D01*
|
||||
X224813180Y-58112419D01*
|
||||
X224765561Y-58207657D01*
|
||||
X224765561Y-58350514D01*
|
||||
X224813180Y-58445752D01*
|
||||
X224860800Y-58493371D01*
|
||||
X224956038Y-58540990D01*
|
||||
X225336990Y-58540990D01*
|
||||
X223813180Y-59017180D02*
|
||||
X224384609Y-59017180D01*
|
||||
X224098895Y-59017180D02*
|
||||
X224098895Y-58017180D01*
|
||||
X224194133Y-58160038D01*
|
||||
X224289371Y-58255276D01*
|
||||
X224384609Y-58302895D01*
|
||||
M02*
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,15 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Paste,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
@@ -1,436 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Legend,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.500000*%
|
||||
%ADD11C,0.120000*%
|
||||
%ADD12C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X237963476Y-80549523D02*
|
||||
X237963476Y-76549523D01*
|
||||
X236439666Y-76549523D01*
|
||||
X236058714Y-76740000D01*
|
||||
X235868238Y-76930476D01*
|
||||
X235677761Y-77311428D01*
|
||||
X235677761Y-77882857D01*
|
||||
X235868238Y-78263809D01*
|
||||
X236058714Y-78454285D01*
|
||||
X236439666Y-78644761D01*
|
||||
X237963476Y-78644761D01*
|
||||
X233392047Y-80549523D02*
|
||||
X233773000Y-80359047D01*
|
||||
X233963476Y-79978095D01*
|
||||
X233963476Y-76549523D01*
|
||||
X230153952Y-80549523D02*
|
||||
X230153952Y-78454285D01*
|
||||
X230344428Y-78073333D01*
|
||||
X230725380Y-77882857D01*
|
||||
X231487285Y-77882857D01*
|
||||
X231868238Y-78073333D01*
|
||||
X230153952Y-80359047D02*
|
||||
X230534904Y-80549523D01*
|
||||
X231487285Y-80549523D01*
|
||||
X231868238Y-80359047D01*
|
||||
X232058714Y-79978095D01*
|
||||
X232058714Y-79597142D01*
|
||||
X231868238Y-79216190D01*
|
||||
X231487285Y-79025714D01*
|
||||
X230534904Y-79025714D01*
|
||||
X230153952Y-78835238D01*
|
||||
X228249190Y-77882857D02*
|
||||
X228249190Y-80549523D01*
|
||||
X228249190Y-78263809D02*
|
||||
X228058714Y-78073333D01*
|
||||
X227677761Y-77882857D01*
|
||||
X227106333Y-77882857D01*
|
||||
X226725380Y-78073333D01*
|
||||
X226534904Y-78454285D01*
|
||||
X226534904Y-80549523D01*
|
||||
X225201571Y-77882857D02*
|
||||
X223677761Y-77882857D01*
|
||||
X224630142Y-76549523D02*
|
||||
X224630142Y-79978095D01*
|
||||
X224439666Y-80359047D01*
|
||||
X224058714Y-80549523D01*
|
||||
X223677761Y-80549523D01*
|
||||
X220058714Y-80168571D02*
|
||||
X220249190Y-80359047D01*
|
||||
X220820619Y-80549523D01*
|
||||
X221201571Y-80549523D01*
|
||||
X221773000Y-80359047D01*
|
||||
X222153952Y-79978095D01*
|
||||
X222344428Y-79597142D01*
|
||||
X222534904Y-78835238D01*
|
||||
X222534904Y-78263809D01*
|
||||
X222344428Y-77501904D01*
|
||||
X222153952Y-77120952D01*
|
||||
X221773000Y-76740000D01*
|
||||
X221201571Y-76549523D01*
|
||||
X220820619Y-76549523D01*
|
||||
X220249190Y-76740000D01*
|
||||
X220058714Y-76930476D01*
|
||||
X218915857Y-77882857D02*
|
||||
X217392047Y-77882857D01*
|
||||
X218344428Y-76549523D02*
|
||||
X218344428Y-79978095D01*
|
||||
X218153952Y-80359047D01*
|
||||
X217773000Y-80549523D01*
|
||||
X217392047Y-80549523D01*
|
||||
X216058714Y-80549523D02*
|
||||
X216058714Y-77882857D01*
|
||||
X216058714Y-78644761D02*
|
||||
X215868238Y-78263809D01*
|
||||
X215677761Y-78073333D01*
|
||||
X215296809Y-77882857D01*
|
||||
X214915857Y-77882857D01*
|
||||
X213011095Y-80549523D02*
|
||||
X213392047Y-80359047D01*
|
||||
X213582523Y-79978095D01*
|
||||
X213582523Y-76549523D01*
|
||||
X209011095Y-76549523D02*
|
||||
X207677761Y-80549523D01*
|
||||
X206344428Y-76549523D01*
|
||||
X204249190Y-76549523D02*
|
||||
X203868238Y-76549523D01*
|
||||
X203487285Y-76740000D01*
|
||||
X203296809Y-76930476D01*
|
||||
X203106333Y-77311428D01*
|
||||
X202915857Y-78073333D01*
|
||||
X202915857Y-79025714D01*
|
||||
X203106333Y-79787619D01*
|
||||
X203296809Y-80168571D01*
|
||||
X203487285Y-80359047D01*
|
||||
X203868238Y-80549523D01*
|
||||
X204249190Y-80549523D01*
|
||||
X204630142Y-80359047D01*
|
||||
X204820619Y-80168571D01*
|
||||
X205011095Y-79787619D01*
|
||||
X205201571Y-79025714D01*
|
||||
X205201571Y-78073333D01*
|
||||
X205011095Y-77311428D01*
|
||||
X204820619Y-76930476D01*
|
||||
X204630142Y-76740000D01*
|
||||
X204249190Y-76549523D01*
|
||||
X201201571Y-80168571D02*
|
||||
X201011095Y-80359047D01*
|
||||
X201201571Y-80549523D01*
|
||||
X201392047Y-80359047D01*
|
||||
X201201571Y-80168571D01*
|
||||
X201201571Y-80549523D01*
|
||||
X197201571Y-80549523D02*
|
||||
X199487285Y-80549523D01*
|
||||
X198344428Y-80549523D02*
|
||||
X198344428Y-76549523D01*
|
||||
X198725380Y-77120952D01*
|
||||
X199106333Y-77501904D01*
|
||||
X199487285Y-77692380D01*
|
||||
X194725380Y-76549523D02*
|
||||
X194344428Y-76549523D01*
|
||||
X193963476Y-76740000D01*
|
||||
X193773000Y-76930476D01*
|
||||
X193582523Y-77311428D01*
|
||||
X193392047Y-78073333D01*
|
||||
X193392047Y-79025714D01*
|
||||
X193582523Y-79787619D01*
|
||||
X193773000Y-80168571D01*
|
||||
X193963476Y-80359047D01*
|
||||
X194344428Y-80549523D01*
|
||||
X194725380Y-80549523D01*
|
||||
X195106333Y-80359047D01*
|
||||
X195296809Y-80168571D01*
|
||||
X195487285Y-79787619D01*
|
||||
X195677761Y-79025714D01*
|
||||
X195677761Y-78073333D01*
|
||||
X195487285Y-77311428D01*
|
||||
X195296809Y-76930476D01*
|
||||
X195106333Y-76740000D01*
|
||||
X194725380Y-76549523D01*
|
||||
D11*
|
||||
X223260800Y-64014800D02*
|
||||
X223260800Y-62764800D01*
|
||||
X224510800Y-64014800D02*
|
||||
X223260800Y-64014800D01*
|
||||
X230410800Y-58514800D02*
|
||||
X227360800Y-58514800D01*
|
||||
X230410800Y-61464800D02*
|
||||
X230410800Y-58514800D01*
|
||||
X231160800Y-61464800D02*
|
||||
X230410800Y-61464800D01*
|
||||
X224310800Y-58514800D02*
|
||||
X227360800Y-58514800D01*
|
||||
X224310800Y-61464800D02*
|
||||
X224310800Y-58514800D01*
|
||||
X223560800Y-61464800D02*
|
||||
X224310800Y-61464800D01*
|
||||
X231160800Y-63714800D02*
|
||||
X229360800Y-63714800D01*
|
||||
X231160800Y-62964800D02*
|
||||
X231160800Y-63714800D01*
|
||||
X229360800Y-62964800D02*
|
||||
X231160800Y-62964800D01*
|
||||
X229360800Y-63714800D02*
|
||||
X229360800Y-62964800D01*
|
||||
X225360800Y-63714800D02*
|
||||
X223560800Y-63714800D01*
|
||||
X225360800Y-62964800D02*
|
||||
X225360800Y-63714800D01*
|
||||
X223560800Y-62964800D02*
|
||||
X225360800Y-62964800D01*
|
||||
X223560800Y-63714800D02*
|
||||
X223560800Y-62964800D01*
|
||||
X227860800Y-63714800D02*
|
||||
X226860800Y-63714800D01*
|
||||
X227860800Y-62964800D02*
|
||||
X227860800Y-63714800D01*
|
||||
X226860800Y-62964800D02*
|
||||
X227860800Y-62964800D01*
|
||||
X226860800Y-63714800D02*
|
||||
X226860800Y-62964800D01*
|
||||
X231170800Y-63724800D02*
|
||||
X223550800Y-63724800D01*
|
||||
X231170800Y-57754800D02*
|
||||
X231170800Y-63724800D01*
|
||||
X223550800Y-57754800D02*
|
||||
X231170800Y-57754800D01*
|
||||
X223550800Y-63724800D02*
|
||||
X223550800Y-57754800D01*
|
||||
D12*
|
||||
X185356285Y-137866380D02*
|
||||
X185689619Y-137390190D01*
|
||||
X185927714Y-137866380D02*
|
||||
X185927714Y-136866380D01*
|
||||
X185546761Y-136866380D01*
|
||||
X185451523Y-136914000D01*
|
||||
X185403904Y-136961619D01*
|
||||
X185356285Y-137056857D01*
|
||||
X185356285Y-137199714D01*
|
||||
X185403904Y-137294952D01*
|
||||
X185451523Y-137342571D01*
|
||||
X185546761Y-137390190D01*
|
||||
X185927714Y-137390190D01*
|
||||
X184546761Y-137818761D02*
|
||||
X184642000Y-137866380D01*
|
||||
X184832476Y-137866380D01*
|
||||
X184927714Y-137818761D01*
|
||||
X184975333Y-137723523D01*
|
||||
X184975333Y-137342571D01*
|
||||
X184927714Y-137247333D01*
|
||||
X184832476Y-137199714D01*
|
||||
X184642000Y-137199714D01*
|
||||
X184546761Y-137247333D01*
|
||||
X184499142Y-137342571D01*
|
||||
X184499142Y-137437809D01*
|
||||
X184975333Y-137533047D01*
|
||||
X184118190Y-137818761D02*
|
||||
X184022952Y-137866380D01*
|
||||
X183832476Y-137866380D01*
|
||||
X183737238Y-137818761D01*
|
||||
X183689619Y-137723523D01*
|
||||
X183689619Y-137675904D01*
|
||||
X183737238Y-137580666D01*
|
||||
X183832476Y-137533047D01*
|
||||
X183975333Y-137533047D01*
|
||||
X184070571Y-137485428D01*
|
||||
X184118190Y-137390190D01*
|
||||
X184118190Y-137342571D01*
|
||||
X184070571Y-137247333D01*
|
||||
X183975333Y-137199714D01*
|
||||
X183832476Y-137199714D01*
|
||||
X183737238Y-137247333D01*
|
||||
X182880095Y-137818761D02*
|
||||
X182975333Y-137866380D01*
|
||||
X183165809Y-137866380D01*
|
||||
X183261047Y-137818761D01*
|
||||
X183308666Y-137723523D01*
|
||||
X183308666Y-137342571D01*
|
||||
X183261047Y-137247333D01*
|
||||
X183165809Y-137199714D01*
|
||||
X182975333Y-137199714D01*
|
||||
X182880095Y-137247333D01*
|
||||
X182832476Y-137342571D01*
|
||||
X182832476Y-137437809D01*
|
||||
X183308666Y-137533047D01*
|
||||
X182546761Y-137199714D02*
|
||||
X182165809Y-137199714D01*
|
||||
X182403904Y-136866380D02*
|
||||
X182403904Y-137723523D01*
|
||||
X182356285Y-137818761D01*
|
||||
X182261047Y-137866380D01*
|
||||
X182165809Y-137866380D01*
|
||||
X181308666Y-137866380D02*
|
||||
X181880095Y-137866380D01*
|
||||
X181594380Y-137866380D02*
|
||||
X181594380Y-136866380D01*
|
||||
X181689619Y-137009238D01*
|
||||
X181784857Y-137104476D01*
|
||||
X181880095Y-137152095D01*
|
||||
X197683238Y-137596571D02*
|
||||
X197540380Y-137644190D01*
|
||||
X197492761Y-137691809D01*
|
||||
X197445142Y-137787047D01*
|
||||
X197445142Y-137929904D01*
|
||||
X197492761Y-138025142D01*
|
||||
X197540380Y-138072761D01*
|
||||
X197635619Y-138120380D01*
|
||||
X198016571Y-138120380D01*
|
||||
X198016571Y-137120380D01*
|
||||
X197683238Y-137120380D01*
|
||||
X197588000Y-137168000D01*
|
||||
X197540380Y-137215619D01*
|
||||
X197492761Y-137310857D01*
|
||||
X197492761Y-137406095D01*
|
||||
X197540380Y-137501333D01*
|
||||
X197588000Y-137548952D01*
|
||||
X197683238Y-137596571D01*
|
||||
X198016571Y-137596571D01*
|
||||
X196873714Y-138120380D02*
|
||||
X196968952Y-138072761D01*
|
||||
X197016571Y-138025142D01*
|
||||
X197064190Y-137929904D01*
|
||||
X197064190Y-137644190D01*
|
||||
X197016571Y-137548952D01*
|
||||
X196968952Y-137501333D01*
|
||||
X196873714Y-137453714D01*
|
||||
X196730857Y-137453714D01*
|
||||
X196635619Y-137501333D01*
|
||||
X196588000Y-137548952D01*
|
||||
X196540380Y-137644190D01*
|
||||
X196540380Y-137929904D01*
|
||||
X196588000Y-138025142D01*
|
||||
X196635619Y-138072761D01*
|
||||
X196730857Y-138120380D01*
|
||||
X196873714Y-138120380D01*
|
||||
X195968952Y-138120380D02*
|
||||
X196064190Y-138072761D01*
|
||||
X196111809Y-138025142D01*
|
||||
X196159428Y-137929904D01*
|
||||
X196159428Y-137644190D01*
|
||||
X196111809Y-137548952D01*
|
||||
X196064190Y-137501333D01*
|
||||
X195968952Y-137453714D01*
|
||||
X195826095Y-137453714D01*
|
||||
X195730857Y-137501333D01*
|
||||
X195683238Y-137548952D01*
|
||||
X195635619Y-137644190D01*
|
||||
X195635619Y-137929904D01*
|
||||
X195683238Y-138025142D01*
|
||||
X195730857Y-138072761D01*
|
||||
X195826095Y-138120380D01*
|
||||
X195968952Y-138120380D01*
|
||||
X195349904Y-137453714D02*
|
||||
X194968952Y-137453714D01*
|
||||
X195207047Y-137120380D02*
|
||||
X195207047Y-137977523D01*
|
||||
X195159428Y-138072761D01*
|
||||
X195064190Y-138120380D01*
|
||||
X194968952Y-138120380D01*
|
||||
X194111809Y-138120380D02*
|
||||
X194683238Y-138120380D01*
|
||||
X194397523Y-138120380D02*
|
||||
X194397523Y-137120380D01*
|
||||
X194492761Y-137263238D01*
|
||||
X194588000Y-137358476D01*
|
||||
X194683238Y-137406095D01*
|
||||
X243336819Y-57486371D02*
|
||||
X243336819Y-57962561D01*
|
||||
X244336819Y-57962561D01*
|
||||
X243336819Y-57153038D02*
|
||||
X244336819Y-57153038D01*
|
||||
X243336819Y-56676847D02*
|
||||
X244336819Y-56676847D01*
|
||||
X244336819Y-56295895D01*
|
||||
X244289200Y-56200657D01*
|
||||
X244241580Y-56153038D01*
|
||||
X244146342Y-56105419D01*
|
||||
X244003485Y-56105419D01*
|
||||
X243908247Y-56153038D01*
|
||||
X243860628Y-56200657D01*
|
||||
X243813009Y-56295895D01*
|
||||
X243813009Y-56676847D01*
|
||||
X244336819Y-55486371D02*
|
||||
X244336819Y-55295895D01*
|
||||
X244289200Y-55200657D01*
|
||||
X244193961Y-55105419D01*
|
||||
X244003485Y-55057800D01*
|
||||
X243670152Y-55057800D01*
|
||||
X243479676Y-55105419D01*
|
||||
X243384438Y-55200657D01*
|
||||
X243336819Y-55295895D01*
|
||||
X243336819Y-55486371D01*
|
||||
X243384438Y-55581609D01*
|
||||
X243479676Y-55676847D01*
|
||||
X243670152Y-55724466D01*
|
||||
X244003485Y-55724466D01*
|
||||
X244193961Y-55676847D01*
|
||||
X244289200Y-55581609D01*
|
||||
X244336819Y-55486371D01*
|
||||
X243336819Y-54105419D02*
|
||||
X243336819Y-54676847D01*
|
||||
X243336819Y-54391133D02*
|
||||
X244336819Y-54391133D01*
|
||||
X244193961Y-54486371D01*
|
||||
X244098723Y-54581609D01*
|
||||
X244051104Y-54676847D01*
|
||||
X230860800Y-64743371D02*
|
||||
X230527466Y-64743371D01*
|
||||
X230384609Y-65267180D02*
|
||||
X230860800Y-65267180D01*
|
||||
X230860800Y-64267180D01*
|
||||
X230384609Y-64267180D01*
|
||||
X230051276Y-64267180D02*
|
||||
X229384609Y-65267180D01*
|
||||
X229384609Y-64267180D02*
|
||||
X230051276Y-65267180D01*
|
||||
X229146514Y-64267180D02*
|
||||
X228575085Y-64267180D01*
|
||||
X228860800Y-65267180D02*
|
||||
X228860800Y-64267180D01*
|
||||
X228479847Y-65362419D02*
|
||||
X227717942Y-65362419D01*
|
||||
X227479847Y-65267180D02*
|
||||
X227479847Y-64267180D01*
|
||||
X227098895Y-64267180D01*
|
||||
X227003657Y-64314800D01*
|
||||
X226956038Y-64362419D01*
|
||||
X226908419Y-64457657D01*
|
||||
X226908419Y-64600514D01*
|
||||
X226956038Y-64695752D01*
|
||||
X227003657Y-64743371D01*
|
||||
X227098895Y-64790990D01*
|
||||
X227479847Y-64790990D01*
|
||||
X226575085Y-64267180D02*
|
||||
X226336990Y-65267180D01*
|
||||
X226146514Y-64552895D01*
|
||||
X225956038Y-65267180D01*
|
||||
X225717942Y-64267180D01*
|
||||
X224765561Y-65267180D02*
|
||||
X225098895Y-64790990D01*
|
||||
X225336990Y-65267180D02*
|
||||
X225336990Y-64267180D01*
|
||||
X224956038Y-64267180D01*
|
||||
X224860800Y-64314800D01*
|
||||
X224813180Y-64362419D01*
|
||||
X224765561Y-64457657D01*
|
||||
X224765561Y-64600514D01*
|
||||
X224813180Y-64695752D01*
|
||||
X224860800Y-64743371D01*
|
||||
X224956038Y-64790990D01*
|
||||
X225336990Y-64790990D01*
|
||||
X223813180Y-65267180D02*
|
||||
X224384609Y-65267180D01*
|
||||
X224098895Y-65267180D02*
|
||||
X224098895Y-64267180D01*
|
||||
X224194133Y-64410038D01*
|
||||
X224289371Y-64505276D01*
|
||||
X224384609Y-64552895D01*
|
||||
M02*
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,748 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,OtherDrawing,Comment*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.100000*%
|
||||
%ADD11C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X169862000Y-119918000D02*
|
||||
X159082000Y-119918000D01*
|
||||
X169862000Y-91918000D02*
|
||||
X169862000Y-119918000D01*
|
||||
X169862000Y-91918000D02*
|
||||
X159082000Y-91918000D01*
|
||||
X159082000Y-91918000D02*
|
||||
X159082000Y-119918000D01*
|
||||
X159082000Y-118443000D02*
|
||||
X160172000Y-119918000D01*
|
||||
X159082000Y-116443000D02*
|
||||
X161787000Y-119918000D01*
|
||||
X159082000Y-114443000D02*
|
||||
X163402000Y-119918000D01*
|
||||
X159082000Y-112443000D02*
|
||||
X165017000Y-119918000D01*
|
||||
X159082000Y-110443000D02*
|
||||
X166632000Y-119918000D01*
|
||||
X159082000Y-108443000D02*
|
||||
X168247000Y-119918000D01*
|
||||
X159082000Y-106443000D02*
|
||||
X169862000Y-119918000D01*
|
||||
X159082000Y-104443000D02*
|
||||
X169862000Y-117918000D01*
|
||||
X159082000Y-102443000D02*
|
||||
X169862000Y-115918000D01*
|
||||
X169862000Y-113918000D02*
|
||||
X159082000Y-100443000D01*
|
||||
X159082000Y-98443000D02*
|
||||
X169862000Y-111918000D01*
|
||||
X159082000Y-96443000D02*
|
||||
X169862000Y-109918000D01*
|
||||
X159082000Y-94443000D02*
|
||||
X169862000Y-107918000D01*
|
||||
X159082000Y-92443000D02*
|
||||
X169862000Y-105918000D01*
|
||||
X160172000Y-91918000D02*
|
||||
X169862000Y-103918000D01*
|
||||
X161787000Y-91918000D02*
|
||||
X169862000Y-101918000D01*
|
||||
X163402000Y-91918000D02*
|
||||
X169862000Y-99918000D01*
|
||||
X165017000Y-91918000D02*
|
||||
X169862000Y-97918000D01*
|
||||
X166632000Y-91918000D02*
|
||||
X169862000Y-95918000D01*
|
||||
X168247000Y-91918000D02*
|
||||
X169862000Y-93918000D01*
|
||||
D11*
|
||||
X260475480Y-68863421D02*
|
||||
X260475480Y-68768183D01*
|
||||
X260523100Y-68672945D01*
|
||||
X260570719Y-68625326D01*
|
||||
X260665957Y-68577707D01*
|
||||
X260856433Y-68530088D01*
|
||||
X261094528Y-68530088D01*
|
||||
X261285004Y-68577707D01*
|
||||
X261380242Y-68625326D01*
|
||||
X261427861Y-68672945D01*
|
||||
X261475480Y-68768183D01*
|
||||
X261475480Y-68863421D01*
|
||||
X261427861Y-68958659D01*
|
||||
X261380242Y-69006278D01*
|
||||
X261285004Y-69053897D01*
|
||||
X261094528Y-69101516D01*
|
||||
X260856433Y-69101516D01*
|
||||
X260665957Y-69053897D01*
|
||||
X260570719Y-69006278D01*
|
||||
X260523100Y-68958659D01*
|
||||
X260475480Y-68863421D01*
|
||||
X261380242Y-68101516D02*
|
||||
X261427861Y-68053897D01*
|
||||
X261475480Y-68101516D01*
|
||||
X261427861Y-68149135D01*
|
||||
X261380242Y-68101516D01*
|
||||
X261475480Y-68101516D01*
|
||||
X260475480Y-67434850D02*
|
||||
X260475480Y-67339611D01*
|
||||
X260523100Y-67244373D01*
|
||||
X260570719Y-67196754D01*
|
||||
X260665957Y-67149135D01*
|
||||
X260856433Y-67101516D01*
|
||||
X261094528Y-67101516D01*
|
||||
X261285004Y-67149135D01*
|
||||
X261380242Y-67196754D01*
|
||||
X261427861Y-67244373D01*
|
||||
X261475480Y-67339611D01*
|
||||
X261475480Y-67434850D01*
|
||||
X261427861Y-67530088D01*
|
||||
X261380242Y-67577707D01*
|
||||
X261285004Y-67625326D01*
|
||||
X261094528Y-67672945D01*
|
||||
X260856433Y-67672945D01*
|
||||
X260665957Y-67625326D01*
|
||||
X260570719Y-67577707D01*
|
||||
X260523100Y-67530088D01*
|
||||
X260475480Y-67434850D01*
|
||||
X260475480Y-66196754D02*
|
||||
X260475480Y-66672945D01*
|
||||
X260951671Y-66720564D01*
|
||||
X260904052Y-66672945D01*
|
||||
X260856433Y-66577707D01*
|
||||
X260856433Y-66339611D01*
|
||||
X260904052Y-66244373D01*
|
||||
X260951671Y-66196754D01*
|
||||
X261046909Y-66149135D01*
|
||||
X261285004Y-66149135D01*
|
||||
X261380242Y-66196754D01*
|
||||
X261427861Y-66244373D01*
|
||||
X261475480Y-66339611D01*
|
||||
X261475480Y-66577707D01*
|
||||
X261427861Y-66672945D01*
|
||||
X261380242Y-66720564D01*
|
||||
X260904052Y-65577707D02*
|
||||
X260856433Y-65672945D01*
|
||||
X260808814Y-65720564D01*
|
||||
X260713576Y-65768183D01*
|
||||
X260665957Y-65768183D01*
|
||||
X260570719Y-65720564D01*
|
||||
X260523100Y-65672945D01*
|
||||
X260475480Y-65577707D01*
|
||||
X260475480Y-65387230D01*
|
||||
X260523100Y-65291992D01*
|
||||
X260570719Y-65244373D01*
|
||||
X260665957Y-65196754D01*
|
||||
X260713576Y-65196754D01*
|
||||
X260808814Y-65244373D01*
|
||||
X260856433Y-65291992D01*
|
||||
X260904052Y-65387230D01*
|
||||
X260904052Y-65577707D01*
|
||||
X260951671Y-65672945D01*
|
||||
X260999290Y-65720564D01*
|
||||
X261094528Y-65768183D01*
|
||||
X261285004Y-65768183D01*
|
||||
X261380242Y-65720564D01*
|
||||
X261427861Y-65672945D01*
|
||||
X261475480Y-65577707D01*
|
||||
X261475480Y-65387230D01*
|
||||
X261427861Y-65291992D01*
|
||||
X261380242Y-65244373D01*
|
||||
X261285004Y-65196754D01*
|
||||
X261094528Y-65196754D01*
|
||||
X260999290Y-65244373D01*
|
||||
X260951671Y-65291992D01*
|
||||
X260904052Y-65387230D01*
|
||||
X261475480Y-64768183D02*
|
||||
X260808814Y-64768183D01*
|
||||
X260475480Y-64768183D02*
|
||||
X260523100Y-64815802D01*
|
||||
X260570719Y-64768183D01*
|
||||
X260523100Y-64720564D01*
|
||||
X260475480Y-64768183D01*
|
||||
X260570719Y-64768183D01*
|
||||
X260808814Y-64291992D02*
|
||||
X261475480Y-64291992D01*
|
||||
X260904052Y-64291992D02*
|
||||
X260856433Y-64244373D01*
|
||||
X260808814Y-64149135D01*
|
||||
X260808814Y-64006278D01*
|
||||
X260856433Y-63911040D01*
|
||||
X260951671Y-63863421D01*
|
||||
X261475480Y-63863421D01*
|
||||
X260427861Y-62672945D02*
|
||||
X261713576Y-63530088D01*
|
||||
X261475480Y-61815802D02*
|
||||
X261475480Y-62387230D01*
|
||||
X261475480Y-62101516D02*
|
||||
X260475480Y-62101516D01*
|
||||
X260618338Y-62196754D01*
|
||||
X260713576Y-62291992D01*
|
||||
X260761195Y-62387230D01*
|
||||
X261380242Y-61387230D02*
|
||||
X261427861Y-61339611D01*
|
||||
X261475480Y-61387230D01*
|
||||
X261427861Y-61434850D01*
|
||||
X261380242Y-61387230D01*
|
||||
X261475480Y-61387230D01*
|
||||
X260808814Y-60482469D02*
|
||||
X261475480Y-60482469D01*
|
||||
X260427861Y-60720564D02*
|
||||
X261142147Y-60958659D01*
|
||||
X261142147Y-60339611D01*
|
||||
X260475480Y-59530088D02*
|
||||
X260475480Y-59720564D01*
|
||||
X260523100Y-59815802D01*
|
||||
X260570719Y-59863421D01*
|
||||
X260713576Y-59958659D01*
|
||||
X260904052Y-60006278D01*
|
||||
X261285004Y-60006278D01*
|
||||
X261380242Y-59958659D01*
|
||||
X261427861Y-59911040D01*
|
||||
X261475480Y-59815802D01*
|
||||
X261475480Y-59625326D01*
|
||||
X261427861Y-59530088D01*
|
||||
X261380242Y-59482469D01*
|
||||
X261285004Y-59434850D01*
|
||||
X261046909Y-59434850D01*
|
||||
X260951671Y-59482469D01*
|
||||
X260904052Y-59530088D01*
|
||||
X260856433Y-59625326D01*
|
||||
X260856433Y-59815802D01*
|
||||
X260904052Y-59911040D01*
|
||||
X260951671Y-59958659D01*
|
||||
X261046909Y-60006278D01*
|
||||
X261475480Y-59006278D02*
|
||||
X260808814Y-59006278D01*
|
||||
X260904052Y-59006278D02*
|
||||
X260856433Y-58958659D01*
|
||||
X260808814Y-58863421D01*
|
||||
X260808814Y-58720564D01*
|
||||
X260856433Y-58625326D01*
|
||||
X260951671Y-58577707D01*
|
||||
X261475480Y-58577707D01*
|
||||
X260951671Y-58577707D02*
|
||||
X260856433Y-58530088D01*
|
||||
X260808814Y-58434850D01*
|
||||
X260808814Y-58291992D01*
|
||||
X260856433Y-58196754D01*
|
||||
X260951671Y-58149135D01*
|
||||
X261475480Y-58149135D01*
|
||||
X261475480Y-57672945D02*
|
||||
X260808814Y-57672945D01*
|
||||
X260904052Y-57672945D02*
|
||||
X260856433Y-57625326D01*
|
||||
X260808814Y-57530088D01*
|
||||
X260808814Y-57387230D01*
|
||||
X260856433Y-57291992D01*
|
||||
X260951671Y-57244373D01*
|
||||
X261475480Y-57244373D01*
|
||||
X260951671Y-57244373D02*
|
||||
X260856433Y-57196754D01*
|
||||
X260808814Y-57101516D01*
|
||||
X260808814Y-56958659D01*
|
||||
X260856433Y-56863421D01*
|
||||
X260951671Y-56815802D01*
|
||||
X261475480Y-56815802D01*
|
||||
X270305280Y-72063761D02*
|
||||
X270305280Y-71968523D01*
|
||||
X270352900Y-71873285D01*
|
||||
X270400519Y-71825666D01*
|
||||
X270495757Y-71778047D01*
|
||||
X270686233Y-71730428D01*
|
||||
X270924328Y-71730428D01*
|
||||
X271114804Y-71778047D01*
|
||||
X271210042Y-71825666D01*
|
||||
X271257661Y-71873285D01*
|
||||
X271305280Y-71968523D01*
|
||||
X271305280Y-72063761D01*
|
||||
X271257661Y-72159000D01*
|
||||
X271210042Y-72206619D01*
|
||||
X271114804Y-72254238D01*
|
||||
X270924328Y-72301857D01*
|
||||
X270686233Y-72301857D01*
|
||||
X270495757Y-72254238D01*
|
||||
X270400519Y-72206619D01*
|
||||
X270352900Y-72159000D01*
|
||||
X270305280Y-72063761D01*
|
||||
X271210042Y-71301857D02*
|
||||
X271257661Y-71254238D01*
|
||||
X271305280Y-71301857D01*
|
||||
X271257661Y-71349476D01*
|
||||
X271210042Y-71301857D01*
|
||||
X271305280Y-71301857D01*
|
||||
X270400519Y-70873285D02*
|
||||
X270352900Y-70825666D01*
|
||||
X270305280Y-70730428D01*
|
||||
X270305280Y-70492333D01*
|
||||
X270352900Y-70397095D01*
|
||||
X270400519Y-70349476D01*
|
||||
X270495757Y-70301857D01*
|
||||
X270590995Y-70301857D01*
|
||||
X270733852Y-70349476D01*
|
||||
X271305280Y-70920904D01*
|
||||
X271305280Y-70301857D01*
|
||||
X271305280Y-69349476D02*
|
||||
X271305280Y-69920904D01*
|
||||
X271305280Y-69635190D02*
|
||||
X270305280Y-69635190D01*
|
||||
X270448138Y-69730428D01*
|
||||
X270543376Y-69825666D01*
|
||||
X270590995Y-69920904D01*
|
||||
X270638614Y-68492333D02*
|
||||
X271305280Y-68492333D01*
|
||||
X270257661Y-68730428D02*
|
||||
X270971947Y-68968523D01*
|
||||
X270971947Y-68349476D01*
|
||||
X271305280Y-67968523D02*
|
||||
X270638614Y-67968523D01*
|
||||
X270305280Y-67968523D02*
|
||||
X270352900Y-68016142D01*
|
||||
X270400519Y-67968523D01*
|
||||
X270352900Y-67920904D01*
|
||||
X270305280Y-67968523D01*
|
||||
X270400519Y-67968523D01*
|
||||
X270638614Y-67492333D02*
|
||||
X271305280Y-67492333D01*
|
||||
X270733852Y-67492333D02*
|
||||
X270686233Y-67444714D01*
|
||||
X270638614Y-67349476D01*
|
||||
X270638614Y-67206619D01*
|
||||
X270686233Y-67111380D01*
|
||||
X270781471Y-67063761D01*
|
||||
X271305280Y-67063761D01*
|
||||
X270257661Y-65873285D02*
|
||||
X271543376Y-66730428D01*
|
||||
X270305280Y-65063761D02*
|
||||
X270305280Y-65539952D01*
|
||||
X270781471Y-65587571D01*
|
||||
X270733852Y-65539952D01*
|
||||
X270686233Y-65444714D01*
|
||||
X270686233Y-65206619D01*
|
||||
X270733852Y-65111380D01*
|
||||
X270781471Y-65063761D01*
|
||||
X270876709Y-65016142D01*
|
||||
X271114804Y-65016142D01*
|
||||
X271210042Y-65063761D01*
|
||||
X271257661Y-65111380D01*
|
||||
X271305280Y-65206619D01*
|
||||
X271305280Y-65444714D01*
|
||||
X271257661Y-65539952D01*
|
||||
X271210042Y-65587571D01*
|
||||
X271210042Y-64587571D02*
|
||||
X271257661Y-64539952D01*
|
||||
X271305280Y-64587571D01*
|
||||
X271257661Y-64635190D01*
|
||||
X271210042Y-64587571D01*
|
||||
X271305280Y-64587571D01*
|
||||
X270638614Y-63682809D02*
|
||||
X271305280Y-63682809D01*
|
||||
X270257661Y-63920904D02*
|
||||
X270971947Y-64159000D01*
|
||||
X270971947Y-63539952D01*
|
||||
X270638614Y-62730428D02*
|
||||
X271305280Y-62730428D01*
|
||||
X270257661Y-62968523D02*
|
||||
X270971947Y-63206619D01*
|
||||
X270971947Y-62587571D01*
|
||||
X270733852Y-62063761D02*
|
||||
X270686233Y-62159000D01*
|
||||
X270638614Y-62206619D01*
|
||||
X270543376Y-62254238D01*
|
||||
X270495757Y-62254238D01*
|
||||
X270400519Y-62206619D01*
|
||||
X270352900Y-62159000D01*
|
||||
X270305280Y-62063761D01*
|
||||
X270305280Y-61873285D01*
|
||||
X270352900Y-61778047D01*
|
||||
X270400519Y-61730428D01*
|
||||
X270495757Y-61682809D01*
|
||||
X270543376Y-61682809D01*
|
||||
X270638614Y-61730428D01*
|
||||
X270686233Y-61778047D01*
|
||||
X270733852Y-61873285D01*
|
||||
X270733852Y-62063761D01*
|
||||
X270781471Y-62159000D01*
|
||||
X270829090Y-62206619D01*
|
||||
X270924328Y-62254238D01*
|
||||
X271114804Y-62254238D01*
|
||||
X271210042Y-62206619D01*
|
||||
X271257661Y-62159000D01*
|
||||
X271305280Y-62063761D01*
|
||||
X271305280Y-61873285D01*
|
||||
X271257661Y-61778047D01*
|
||||
X271210042Y-61730428D01*
|
||||
X271114804Y-61682809D01*
|
||||
X270924328Y-61682809D01*
|
||||
X270829090Y-61730428D01*
|
||||
X270781471Y-61778047D01*
|
||||
X270733852Y-61873285D01*
|
||||
X271305280Y-61254238D02*
|
||||
X270638614Y-61254238D01*
|
||||
X270733852Y-61254238D02*
|
||||
X270686233Y-61206619D01*
|
||||
X270638614Y-61111380D01*
|
||||
X270638614Y-60968523D01*
|
||||
X270686233Y-60873285D01*
|
||||
X270781471Y-60825666D01*
|
||||
X271305280Y-60825666D01*
|
||||
X270781471Y-60825666D02*
|
||||
X270686233Y-60778047D01*
|
||||
X270638614Y-60682809D01*
|
||||
X270638614Y-60539952D01*
|
||||
X270686233Y-60444714D01*
|
||||
X270781471Y-60397095D01*
|
||||
X271305280Y-60397095D01*
|
||||
X271305280Y-59920904D02*
|
||||
X270638614Y-59920904D01*
|
||||
X270733852Y-59920904D02*
|
||||
X270686233Y-59873285D01*
|
||||
X270638614Y-59778047D01*
|
||||
X270638614Y-59635190D01*
|
||||
X270686233Y-59539952D01*
|
||||
X270781471Y-59492333D01*
|
||||
X271305280Y-59492333D01*
|
||||
X270781471Y-59492333D02*
|
||||
X270686233Y-59444714D01*
|
||||
X270638614Y-59349476D01*
|
||||
X270638614Y-59206619D01*
|
||||
X270686233Y-59111380D01*
|
||||
X270781471Y-59063761D01*
|
||||
X271305280Y-59063761D01*
|
||||
X267295380Y-77835911D02*
|
||||
X267295380Y-77740673D01*
|
||||
X267343000Y-77645435D01*
|
||||
X267390619Y-77597816D01*
|
||||
X267485857Y-77550197D01*
|
||||
X267676333Y-77502578D01*
|
||||
X267914428Y-77502578D01*
|
||||
X268104904Y-77550197D01*
|
||||
X268200142Y-77597816D01*
|
||||
X268247761Y-77645435D01*
|
||||
X268295380Y-77740673D01*
|
||||
X268295380Y-77835911D01*
|
||||
X268247761Y-77931150D01*
|
||||
X268200142Y-77978769D01*
|
||||
X268104904Y-78026388D01*
|
||||
X267914428Y-78074007D01*
|
||||
X267676333Y-78074007D01*
|
||||
X267485857Y-78026388D01*
|
||||
X267390619Y-77978769D01*
|
||||
X267343000Y-77931150D01*
|
||||
X267295380Y-77835911D01*
|
||||
X268200142Y-77074007D02*
|
||||
X268247761Y-77026388D01*
|
||||
X268295380Y-77074007D01*
|
||||
X268247761Y-77121626D01*
|
||||
X268200142Y-77074007D01*
|
||||
X268295380Y-77074007D01*
|
||||
X267295380Y-76407340D02*
|
||||
X267295380Y-76312102D01*
|
||||
X267343000Y-76216864D01*
|
||||
X267390619Y-76169245D01*
|
||||
X267485857Y-76121626D01*
|
||||
X267676333Y-76074007D01*
|
||||
X267914428Y-76074007D01*
|
||||
X268104904Y-76121626D01*
|
||||
X268200142Y-76169245D01*
|
||||
X268247761Y-76216864D01*
|
||||
X268295380Y-76312102D01*
|
||||
X268295380Y-76407340D01*
|
||||
X268247761Y-76502578D01*
|
||||
X268200142Y-76550197D01*
|
||||
X268104904Y-76597816D01*
|
||||
X267914428Y-76645435D01*
|
||||
X267676333Y-76645435D01*
|
||||
X267485857Y-76597816D01*
|
||||
X267390619Y-76550197D01*
|
||||
X267343000Y-76502578D01*
|
||||
X267295380Y-76407340D01*
|
||||
X267390619Y-75693054D02*
|
||||
X267343000Y-75645435D01*
|
||||
X267295380Y-75550197D01*
|
||||
X267295380Y-75312102D01*
|
||||
X267343000Y-75216864D01*
|
||||
X267390619Y-75169245D01*
|
||||
X267485857Y-75121626D01*
|
||||
X267581095Y-75121626D01*
|
||||
X267723952Y-75169245D01*
|
||||
X268295380Y-75740673D01*
|
||||
X268295380Y-75121626D01*
|
||||
X268295380Y-74169245D02*
|
||||
X268295380Y-74740673D01*
|
||||
X268295380Y-74454959D02*
|
||||
X267295380Y-74454959D01*
|
||||
X267438238Y-74550197D01*
|
||||
X267533476Y-74645435D01*
|
||||
X267581095Y-74740673D01*
|
||||
X268295380Y-73740673D02*
|
||||
X267628714Y-73740673D01*
|
||||
X267295380Y-73740673D02*
|
||||
X267343000Y-73788292D01*
|
||||
X267390619Y-73740673D01*
|
||||
X267343000Y-73693054D01*
|
||||
X267295380Y-73740673D01*
|
||||
X267390619Y-73740673D01*
|
||||
X267628714Y-73264483D02*
|
||||
X268295380Y-73264483D01*
|
||||
X267723952Y-73264483D02*
|
||||
X267676333Y-73216864D01*
|
||||
X267628714Y-73121626D01*
|
||||
X267628714Y-72978769D01*
|
||||
X267676333Y-72883530D01*
|
||||
X267771571Y-72835911D01*
|
||||
X268295380Y-72835911D01*
|
||||
X267247761Y-71645435D02*
|
||||
X268533476Y-72502578D01*
|
||||
X267295380Y-71121626D02*
|
||||
X267295380Y-71026388D01*
|
||||
X267343000Y-70931150D01*
|
||||
X267390619Y-70883530D01*
|
||||
X267485857Y-70835911D01*
|
||||
X267676333Y-70788292D01*
|
||||
X267914428Y-70788292D01*
|
||||
X268104904Y-70835911D01*
|
||||
X268200142Y-70883530D01*
|
||||
X268247761Y-70931150D01*
|
||||
X268295380Y-71026388D01*
|
||||
X268295380Y-71121626D01*
|
||||
X268247761Y-71216864D01*
|
||||
X268200142Y-71264483D01*
|
||||
X268104904Y-71312102D01*
|
||||
X267914428Y-71359721D01*
|
||||
X267676333Y-71359721D01*
|
||||
X267485857Y-71312102D01*
|
||||
X267390619Y-71264483D01*
|
||||
X267343000Y-71216864D01*
|
||||
X267295380Y-71121626D01*
|
||||
X268200142Y-70359721D02*
|
||||
X268247761Y-70312102D01*
|
||||
X268295380Y-70359721D01*
|
||||
X268247761Y-70407340D01*
|
||||
X268200142Y-70359721D01*
|
||||
X268295380Y-70359721D01*
|
||||
X267295380Y-69407340D02*
|
||||
X267295380Y-69883530D01*
|
||||
X267771571Y-69931150D01*
|
||||
X267723952Y-69883530D01*
|
||||
X267676333Y-69788292D01*
|
||||
X267676333Y-69550197D01*
|
||||
X267723952Y-69454959D01*
|
||||
X267771571Y-69407340D01*
|
||||
X267866809Y-69359721D01*
|
||||
X268104904Y-69359721D01*
|
||||
X268200142Y-69407340D01*
|
||||
X268247761Y-69454959D01*
|
||||
X268295380Y-69550197D01*
|
||||
X268295380Y-69788292D01*
|
||||
X268247761Y-69883530D01*
|
||||
X268200142Y-69931150D01*
|
||||
X267295380Y-69026388D02*
|
||||
X267295380Y-68407340D01*
|
||||
X267676333Y-68740673D01*
|
||||
X267676333Y-68597816D01*
|
||||
X267723952Y-68502578D01*
|
||||
X267771571Y-68454959D01*
|
||||
X267866809Y-68407340D01*
|
||||
X268104904Y-68407340D01*
|
||||
X268200142Y-68454959D01*
|
||||
X268247761Y-68502578D01*
|
||||
X268295380Y-68597816D01*
|
||||
X268295380Y-68883530D01*
|
||||
X268247761Y-68978769D01*
|
||||
X268200142Y-69026388D01*
|
||||
X267295380Y-68074007D02*
|
||||
X267295380Y-67454959D01*
|
||||
X267676333Y-67788292D01*
|
||||
X267676333Y-67645435D01*
|
||||
X267723952Y-67550197D01*
|
||||
X267771571Y-67502578D01*
|
||||
X267866809Y-67454959D01*
|
||||
X268104904Y-67454959D01*
|
||||
X268200142Y-67502578D01*
|
||||
X268247761Y-67550197D01*
|
||||
X268295380Y-67645435D01*
|
||||
X268295380Y-67931150D01*
|
||||
X268247761Y-68026388D01*
|
||||
X268200142Y-68074007D01*
|
||||
X268295380Y-67026388D02*
|
||||
X267628714Y-67026388D01*
|
||||
X267723952Y-67026388D02*
|
||||
X267676333Y-66978769D01*
|
||||
X267628714Y-66883530D01*
|
||||
X267628714Y-66740673D01*
|
||||
X267676333Y-66645435D01*
|
||||
X267771571Y-66597816D01*
|
||||
X268295380Y-66597816D01*
|
||||
X267771571Y-66597816D02*
|
||||
X267676333Y-66550197D01*
|
||||
X267628714Y-66454959D01*
|
||||
X267628714Y-66312102D01*
|
||||
X267676333Y-66216864D01*
|
||||
X267771571Y-66169245D01*
|
||||
X268295380Y-66169245D01*
|
||||
X268295380Y-65693054D02*
|
||||
X267628714Y-65693054D01*
|
||||
X267723952Y-65693054D02*
|
||||
X267676333Y-65645435D01*
|
||||
X267628714Y-65550197D01*
|
||||
X267628714Y-65407340D01*
|
||||
X267676333Y-65312102D01*
|
||||
X267771571Y-65264483D01*
|
||||
X268295380Y-65264483D01*
|
||||
X267771571Y-65264483D02*
|
||||
X267676333Y-65216864D01*
|
||||
X267628714Y-65121626D01*
|
||||
X267628714Y-64978769D01*
|
||||
X267676333Y-64883530D01*
|
||||
X267771571Y-64835911D01*
|
||||
X268295380Y-64835911D01*
|
||||
X266660380Y-65339230D02*
|
||||
X266660380Y-65243992D01*
|
||||
X266708000Y-65148754D01*
|
||||
X266755619Y-65101135D01*
|
||||
X266850857Y-65053516D01*
|
||||
X267041333Y-65005897D01*
|
||||
X267279428Y-65005897D01*
|
||||
X267469904Y-65053516D01*
|
||||
X267565142Y-65101135D01*
|
||||
X267612761Y-65148754D01*
|
||||
X267660380Y-65243992D01*
|
||||
X267660380Y-65339230D01*
|
||||
X267612761Y-65434469D01*
|
||||
X267565142Y-65482088D01*
|
||||
X267469904Y-65529707D01*
|
||||
X267279428Y-65577326D01*
|
||||
X267041333Y-65577326D01*
|
||||
X266850857Y-65529707D01*
|
||||
X266755619Y-65482088D01*
|
||||
X266708000Y-65434469D01*
|
||||
X266660380Y-65339230D01*
|
||||
X267565142Y-64577326D02*
|
||||
X267612761Y-64529707D01*
|
||||
X267660380Y-64577326D01*
|
||||
X267612761Y-64624945D01*
|
||||
X267565142Y-64577326D01*
|
||||
X267660380Y-64577326D01*
|
||||
X266660380Y-63910659D02*
|
||||
X266660380Y-63815421D01*
|
||||
X266708000Y-63720183D01*
|
||||
X266755619Y-63672564D01*
|
||||
X266850857Y-63624945D01*
|
||||
X267041333Y-63577326D01*
|
||||
X267279428Y-63577326D01*
|
||||
X267469904Y-63624945D01*
|
||||
X267565142Y-63672564D01*
|
||||
X267612761Y-63720183D01*
|
||||
X267660380Y-63815421D01*
|
||||
X267660380Y-63910659D01*
|
||||
X267612761Y-64005897D01*
|
||||
X267565142Y-64053516D01*
|
||||
X267469904Y-64101135D01*
|
||||
X267279428Y-64148754D01*
|
||||
X267041333Y-64148754D01*
|
||||
X266850857Y-64101135D01*
|
||||
X266755619Y-64053516D01*
|
||||
X266708000Y-64005897D01*
|
||||
X266660380Y-63910659D01*
|
||||
X266660380Y-62672564D02*
|
||||
X266660380Y-63148754D01*
|
||||
X267136571Y-63196373D01*
|
||||
X267088952Y-63148754D01*
|
||||
X267041333Y-63053516D01*
|
||||
X267041333Y-62815421D01*
|
||||
X267088952Y-62720183D01*
|
||||
X267136571Y-62672564D01*
|
||||
X267231809Y-62624945D01*
|
||||
X267469904Y-62624945D01*
|
||||
X267565142Y-62672564D01*
|
||||
X267612761Y-62720183D01*
|
||||
X267660380Y-62815421D01*
|
||||
X267660380Y-63053516D01*
|
||||
X267612761Y-63148754D01*
|
||||
X267565142Y-63196373D01*
|
||||
X267660380Y-62196373D02*
|
||||
X266993714Y-62196373D01*
|
||||
X266660380Y-62196373D02*
|
||||
X266708000Y-62243992D01*
|
||||
X266755619Y-62196373D01*
|
||||
X266708000Y-62148754D01*
|
||||
X266660380Y-62196373D01*
|
||||
X266755619Y-62196373D01*
|
||||
X266993714Y-61720183D02*
|
||||
X267660380Y-61720183D01*
|
||||
X267088952Y-61720183D02*
|
||||
X267041333Y-61672564D01*
|
||||
X266993714Y-61577326D01*
|
||||
X266993714Y-61434469D01*
|
||||
X267041333Y-61339230D01*
|
||||
X267136571Y-61291611D01*
|
||||
X267660380Y-61291611D01*
|
||||
X266612761Y-60101135D02*
|
||||
X267898476Y-60958278D01*
|
||||
X267660380Y-59243992D02*
|
||||
X267660380Y-59815421D01*
|
||||
X267660380Y-59529707D02*
|
||||
X266660380Y-59529707D01*
|
||||
X266803238Y-59624945D01*
|
||||
X266898476Y-59720183D01*
|
||||
X266946095Y-59815421D01*
|
||||
X267565142Y-58815421D02*
|
||||
X267612761Y-58767802D01*
|
||||
X267660380Y-58815421D01*
|
||||
X267612761Y-58863040D01*
|
||||
X267565142Y-58815421D01*
|
||||
X267660380Y-58815421D01*
|
||||
X266755619Y-58386850D02*
|
||||
X266708000Y-58339230D01*
|
||||
X266660380Y-58243992D01*
|
||||
X266660380Y-58005897D01*
|
||||
X266708000Y-57910659D01*
|
||||
X266755619Y-57863040D01*
|
||||
X266850857Y-57815421D01*
|
||||
X266946095Y-57815421D01*
|
||||
X267088952Y-57863040D01*
|
||||
X267660380Y-58434469D01*
|
||||
X267660380Y-57815421D01*
|
||||
X266660380Y-57482088D02*
|
||||
X266660380Y-56815421D01*
|
||||
X267660380Y-57243992D01*
|
||||
X267660380Y-56434469D02*
|
||||
X266993714Y-56434469D01*
|
||||
X267088952Y-56434469D02*
|
||||
X267041333Y-56386850D01*
|
||||
X266993714Y-56291611D01*
|
||||
X266993714Y-56148754D01*
|
||||
X267041333Y-56053516D01*
|
||||
X267136571Y-56005897D01*
|
||||
X267660380Y-56005897D01*
|
||||
X267136571Y-56005897D02*
|
||||
X267041333Y-55958278D01*
|
||||
X266993714Y-55863040D01*
|
||||
X266993714Y-55720183D01*
|
||||
X267041333Y-55624945D01*
|
||||
X267136571Y-55577326D01*
|
||||
X267660380Y-55577326D01*
|
||||
X267660380Y-55101135D02*
|
||||
X266993714Y-55101135D01*
|
||||
X267088952Y-55101135D02*
|
||||
X267041333Y-55053516D01*
|
||||
X266993714Y-54958278D01*
|
||||
X266993714Y-54815421D01*
|
||||
X267041333Y-54720183D01*
|
||||
X267136571Y-54672564D01*
|
||||
X267660380Y-54672564D01*
|
||||
X267136571Y-54672564D02*
|
||||
X267041333Y-54624945D01*
|
||||
X266993714Y-54529707D01*
|
||||
X266993714Y-54386850D01*
|
||||
X267041333Y-54291611D01*
|
||||
X267136571Y-54243992D01*
|
||||
X267660380Y-54243992D01*
|
||||
M02*
|
||||
@@ -1,14 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Other,ECO1*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
@@ -1,14 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Other,ECO2*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
@@ -1,28 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Profile,NP*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 #@! TA.AperFunction,Profile*
|
||||
%ADD10C,0.050000*%
|
||||
G04 #@! TD*
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X170180000Y-40640000D02*
|
||||
X269240000Y-40640000D01*
|
||||
X170180000Y-43180000D02*
|
||||
X170180000Y-40640000D01*
|
||||
X170180000Y-139700000D02*
|
||||
X170180000Y-43180000D01*
|
||||
X269240000Y-139700000D02*
|
||||
X269240000Y-40640000D01*
|
||||
X170180000Y-139700000D02*
|
||||
X269240000Y-139700000D01*
|
||||
M02*
|
||||
@@ -1,32 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Glue,Top*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.380000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X211413132Y-73660000D02*
|
||||
G75*
|
||||
G03*
|
||||
X211413132Y-73660000I-212132J0D01*
|
||||
G01*
|
||||
X211751000Y-73660000D02*
|
||||
G75*
|
||||
G03*
|
||||
X211751000Y-73660000I-550000J0D01*
|
||||
G01*
|
||||
X212101000Y-73660000D02*
|
||||
G75*
|
||||
G03*
|
||||
X212101000Y-73660000I-900000J0D01*
|
||||
G01*
|
||||
M02*
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,14 +0,0 @@
|
||||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*
|
||||
G04 #@! TF.CreationDate,2021-06-10T23:09:58+02:00*
|
||||
G04 #@! TF.ProjectId,PlantCtrlESP32,506c616e-7443-4747-926c-45535033322e,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Other,User*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-06-10 23:09:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
@@ -1,20 +0,0 @@
|
||||
M48
|
||||
; DRILL file {KiCad 5.1.10} date Thu Jun 10 23:11:37 2021
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2021-06-10T23:11:37+02:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,5.1.10
|
||||
; #@! TF.FileFunction,NonPlated,1,2,NPTH
|
||||
FMAT,2
|
||||
INCH
|
||||
T1C0.0941
|
||||
T2C0.1358
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X9.8951Y-2.461
|
||||
T2
|
||||
X7.394Y-2.461
|
||||
X9.5672Y-1.831
|
||||
T0
|
||||
M30
|
||||
@@ -1,304 +0,0 @@
|
||||
M48
|
||||
; DRILL file {KiCad 5.1.10} date Thu Jun 10 23:11:37 2021
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2021-06-10T23:11:37+02:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,5.1.10
|
||||
; #@! TF.FileFunction,Plated,1,2,PTH
|
||||
FMAT,2
|
||||
INCH
|
||||
T1C0.0157
|
||||
T2C0.0295
|
||||
T3C0.0315
|
||||
T4C0.0374
|
||||
T5C0.0394
|
||||
T6C0.0591
|
||||
T7C0.0591
|
||||
T8C0.0787
|
||||
T9C0.1181
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X6.7418Y-4.8632
|
||||
X6.755Y-4.285
|
||||
X6.8055Y-4.415
|
||||
X6.825Y-3.525
|
||||
X6.845Y-3.93
|
||||
X6.8754Y-4.7304
|
||||
X6.8757Y-4.3343
|
||||
X6.905Y-4.58
|
||||
X6.96Y-4.585
|
||||
X6.98Y-3.19
|
||||
X6.985Y-3.91
|
||||
X7.005Y-4.37
|
||||
X7.025Y-2.385
|
||||
X7.025Y-4.75
|
||||
X7.04Y-4.6
|
||||
X7.045Y-5.035
|
||||
X7.05Y-3.48
|
||||
X7.055Y-4.38
|
||||
X7.055Y-4.89
|
||||
X7.08Y-2.99
|
||||
X7.11Y-5.025
|
||||
X7.13Y-2.45
|
||||
X7.13Y-4.96
|
||||
X7.14Y-4.77
|
||||
X7.15Y-2.92
|
||||
X7.1528Y-5.1602
|
||||
X7.17Y-5.43
|
||||
X7.21Y-4.3
|
||||
X7.22Y-4.77
|
||||
X7.225Y-4.35
|
||||
X7.225Y-4.35
|
||||
X7.2274Y-4.2647
|
||||
X7.23Y-3.06
|
||||
X7.25Y-5.16
|
||||
X7.255Y-4.41
|
||||
X7.2866Y-5.2154
|
||||
X7.29Y-3.41
|
||||
X7.3Y-4.41
|
||||
X7.315Y-2.385
|
||||
X7.32Y-4.77
|
||||
X7.3282Y-3.95
|
||||
X7.34Y-4.075
|
||||
X7.35Y-3.73
|
||||
X7.3621Y-4.3489
|
||||
X7.37Y-3.67
|
||||
X7.37Y-4.12
|
||||
X7.42Y-4.77
|
||||
X7.4275Y-5.0525
|
||||
X7.43Y-4.92
|
||||
X7.43Y-4.96
|
||||
X7.45Y-3.15
|
||||
X7.5Y-3.78
|
||||
X7.52Y-4.77
|
||||
X7.5434Y-4.5416
|
||||
X7.55Y-4.35
|
||||
X7.58Y-4.58
|
||||
X7.59Y-4.15
|
||||
X7.59Y-5.29
|
||||
X7.5965Y-4.9528
|
||||
X7.62Y-4.77
|
||||
X7.64Y-4.18
|
||||
X7.66Y-2.095
|
||||
X7.665Y-1.99
|
||||
X7.69Y-5.41
|
||||
X7.7Y-2.36
|
||||
X7.72Y-4.77
|
||||
X7.78Y-2.525
|
||||
X7.78Y-5.37
|
||||
X7.825Y-3.25
|
||||
X7.875Y-3.45
|
||||
X7.975Y-3.45
|
||||
X7.975Y-4.45
|
||||
X8.025Y-1.97
|
||||
X8.0625Y-2.8075
|
||||
X8.07Y-2.09
|
||||
X8.072Y-4.652
|
||||
X8.09Y-5.2
|
||||
X8.125Y-3.4
|
||||
X8.145Y-2.32
|
||||
X8.15Y-5.09
|
||||
X8.18Y-4.44
|
||||
X8.22Y-3.92
|
||||
X8.24Y-4.72
|
||||
X8.2779Y-3.7421
|
||||
X8.2779Y-3.9179
|
||||
X8.2779Y-4.1879
|
||||
X8.29Y-5.44
|
||||
X8.3Y-5.26
|
||||
X8.31Y-3.275
|
||||
X8.31Y-3.645
|
||||
X8.3299Y-3.8453
|
||||
X8.33Y-4.58
|
||||
X8.35Y-4.645
|
||||
X8.375Y-3.66
|
||||
X8.38Y-5.37
|
||||
X8.4Y-1.72
|
||||
X8.43Y-4.7
|
||||
X8.48Y-4.595
|
||||
X8.49Y-1.815
|
||||
X8.54Y-3.85
|
||||
X8.57Y-1.78
|
||||
X8.615Y-4.375
|
||||
X8.637Y-4.8689
|
||||
X8.6726Y-3.6326
|
||||
X8.695Y-4.59
|
||||
X8.695Y-4.7
|
||||
X8.8Y-3.15
|
||||
X8.83Y-3.85
|
||||
X8.841Y-1.761
|
||||
X8.847Y-1.646
|
||||
X8.915Y-4.38
|
||||
X8.9526Y-3.6326
|
||||
X8.955Y-4.705
|
||||
X8.9559Y-4.861
|
||||
X8.96Y-4.58
|
||||
X9.06Y-2.97
|
||||
X9.11Y-2.1
|
||||
X9.11Y-2.34
|
||||
X9.13Y-3.85
|
||||
X9.2Y-3.34
|
||||
X9.22Y-4.37
|
||||
X9.2526Y-3.6326
|
||||
X9.2551Y-4.8335
|
||||
X9.27Y-4.585
|
||||
X9.27Y-4.705
|
||||
X9.28Y-3.21
|
||||
X9.319Y-1.656
|
||||
X9.32Y-3.46
|
||||
X9.325Y-1.764
|
||||
X9.35Y-2.48
|
||||
X9.44Y-3.85
|
||||
X9.45Y-3.21
|
||||
X9.47Y-2.59
|
||||
X9.515Y-3.375
|
||||
X9.52Y-4.38
|
||||
X9.525Y-3.46
|
||||
X9.525Y-4.585
|
||||
X9.53Y-4.7
|
||||
X9.5374Y-3.6326
|
||||
X9.5588Y-3.2462
|
||||
X9.58Y-4.85
|
||||
X9.59Y-4.955
|
||||
X9.715Y-2.025
|
||||
X9.74Y-3.85
|
||||
X9.75Y-4.7
|
||||
X9.79Y-3.465
|
||||
X9.84Y-4.385
|
||||
X9.84Y-4.85
|
||||
X9.845Y-1.835
|
||||
X9.851Y-1.657
|
||||
X9.854Y-1.744
|
||||
X9.8774Y-3.6326
|
||||
X9.885Y-4.955
|
||||
X9.925Y-4.58
|
||||
X10.03Y-3.27
|
||||
X10.03Y-3.41
|
||||
X10.05Y-3.85
|
||||
X10.12Y-4.375
|
||||
X10.125Y-4.22
|
||||
X10.14Y-4.01
|
||||
X10.17Y-4.85
|
||||
X10.185Y-4.525
|
||||
X10.185Y-4.955
|
||||
X10.21Y-3.265
|
||||
X10.315Y-4.715
|
||||
X10.328Y-2.639
|
||||
X10.3328Y-2.1392
|
||||
X10.3378Y-3.8453
|
||||
X10.34Y-3.41
|
||||
X10.345Y-4.275
|
||||
X10.355Y-3.585
|
||||
X10.36Y-4.485
|
||||
X10.365Y-2.6
|
||||
X10.375Y-3.29
|
||||
X10.4Y-3.945
|
||||
X10.4028Y-3.85
|
||||
X10.42Y-3.405
|
||||
X10.475Y-3.63
|
||||
X10.48Y-3.015
|
||||
X10.505Y-4.41
|
||||
X10.5051Y-3.5849
|
||||
X10.51Y-3.195
|
||||
X10.57Y-3.559
|
||||
X10.572Y-2.412
|
||||
T2
|
||||
X8.47Y-1.645
|
||||
X8.52Y-1.645
|
||||
X8.57Y-1.645
|
||||
T3
|
||||
X8.655Y-3.03
|
||||
X10.145Y-3.47
|
||||
X10.1474Y-3.6326
|
||||
T4
|
||||
X6.861Y-2.737
|
||||
X6.861Y-2.8354
|
||||
X6.861Y-2.9339
|
||||
X7.5247Y-5.07
|
||||
X7.6231Y-5.07
|
||||
X7.7216Y-5.07
|
||||
X7.82Y-5.07
|
||||
X8.45Y-4.9031
|
||||
X8.45Y-5.0016
|
||||
X8.45Y-5.1
|
||||
X8.75Y-4.9031
|
||||
X8.75Y-5.0016
|
||||
X8.75Y-5.1
|
||||
X9.05Y-4.9031
|
||||
X9.05Y-5.0016
|
||||
X9.05Y-5.1
|
||||
X9.35Y-4.9031
|
||||
X9.35Y-5.0016
|
||||
X9.35Y-5.1
|
||||
X9.65Y-4.9031
|
||||
X9.65Y-5.0016
|
||||
X9.65Y-5.1
|
||||
X9.95Y-4.9031
|
||||
X9.95Y-5.0016
|
||||
X9.95Y-5.1
|
||||
X10.25Y-4.9031
|
||||
X10.25Y-5.0016
|
||||
X10.25Y-5.1
|
||||
T5
|
||||
X6.95Y-3.4
|
||||
X7.1381Y-2.805
|
||||
X7.1469Y-3.4
|
||||
X7.335Y-2.805
|
||||
X7.5781Y-2.795
|
||||
X7.775Y-2.795
|
||||
X7.825Y-3.775
|
||||
X7.825Y-3.875
|
||||
X7.9Y-4.55
|
||||
X7.925Y-3.775
|
||||
X7.925Y-3.875
|
||||
X8.0Y-4.55
|
||||
X8.025Y-3.775
|
||||
X8.025Y-3.875
|
||||
X8.1Y-4.55
|
||||
X8.125Y-3.775
|
||||
X8.125Y-3.875
|
||||
X8.39Y-3.4
|
||||
X8.45Y-4.3516
|
||||
X8.45Y-4.45
|
||||
X8.5869Y-3.4
|
||||
X8.707Y-2.665
|
||||
X8.75Y-4.3516
|
||||
X8.75Y-4.45
|
||||
X8.807Y-2.665
|
||||
X8.85Y-3.4
|
||||
X8.902Y-2.412
|
||||
X8.907Y-2.665
|
||||
X9.0004Y-2.412
|
||||
X9.007Y-2.665
|
||||
X9.0469Y-3.4
|
||||
X9.05Y-4.3516
|
||||
X9.05Y-4.45
|
||||
X9.35Y-4.3516
|
||||
X9.35Y-4.45
|
||||
X9.65Y-4.3516
|
||||
X9.65Y-4.45
|
||||
X9.95Y-4.3516
|
||||
X9.95Y-4.45
|
||||
X10.225Y-2.815
|
||||
X10.225Y-2.915
|
||||
X10.225Y-3.015
|
||||
X10.225Y-3.115
|
||||
X10.25Y-4.3516
|
||||
X10.25Y-4.45
|
||||
T6
|
||||
X9.1502Y-2.8
|
||||
X10.04Y-2.8
|
||||
T7
|
||||
X9.448Y-2.107
|
||||
X9.448Y-2.307
|
||||
T8
|
||||
X6.9321Y-2.146
|
||||
X10.029Y-2.146
|
||||
T9
|
||||
X6.85Y-1.75
|
||||
X6.85Y-5.34
|
||||
X10.45Y-1.75
|
||||
X10.45Y-5.34
|
||||
T0
|
||||
M30
|
||||
Binary file not shown.
158
board/kicad-stuff/BQ34Z100PWR-G1.kicad_sym
Normal file
158
board/kicad-stuff/BQ34Z100PWR-G1.kicad_sym
Normal file
@@ -0,0 +1,158 @@
|
||||
|
||||
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
|
||||
(symbol "BQ34Z100PWR-G1" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (id 0) (at -12.7 26.4 0.0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom left))
|
||||
)
|
||||
(property "Value" "BQ34Z100PWR-G1" (id 1) (at -12.7 -29.4 0.0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom left))
|
||||
)
|
||||
(property "Footprint" "BQ34Z100PWR-G1:SOP65P640X120-14N" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MF" "Texas Instruments" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Description" "\nMulti-chemistry Impedance Track™ standalone fuel gauge | battery gas gauge\n" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Package" "TSSOP-14 Texas Instruments" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Price" "None" (id 7) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "SnapEDA_Link" "https://www.snapeda.com/parts/BQ34Z100PWR-G1/Texas+Instruments/view-part/?ref=snap" (id 8) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MP" "BQ34Z100PWR-G1" (id 9) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Purchase-URL" "https://www.snapeda.com/api/url_track_click_mouser/?unipart_id=327977&manufacturer=Texas Instruments&part_name=BQ34Z100PWR-G1&search_term=None" (id 10) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Availability" "In Stock" (id 11) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Check_prices" "https://www.snapeda.com/parts/BQ34Z100PWR-G1/Texas+Instruments/view-part/?ref=eda" (id 12) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(symbol "BQ34Z100PWR-G1_0_0"
|
||||
(rectangle (start -12.7 -25.4) (end 12.7 25.4)
|
||||
(stroke (width 0.41)) (fill (type background))
|
||||
)
|
||||
(pin input line (at -17.78 22.86 0) (length 5.08)
|
||||
(name "REGIN"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "6"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 17.78 0) (length 5.08)
|
||||
(name "BAT"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "4"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 12.7 0) (length 5.08)
|
||||
(name "CE"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "5"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 7.62 0) (length 5.08)
|
||||
(name "P1"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "3"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 5.08 0) (length 5.08)
|
||||
(name "P2"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "1"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 2.54 0) (length 5.08)
|
||||
(name "P3/SDA"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "14"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 -2.54 0) (length 5.08)
|
||||
(name "REG25"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "7"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 -7.62 0) (length 5.08)
|
||||
(name "SRN"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "10"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 -12.7 0) (length 5.08)
|
||||
(name "SRP"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "9"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at -17.78 -17.78 0) (length 5.08)
|
||||
(name "VEN"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "2"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 17.78 5.08 180.0) (length 5.08)
|
||||
(name "P4/SCL"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "13"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 17.78 2.54 180.0) (length 5.08)
|
||||
(name "P5/HDQ"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "12"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin bidirectional line (at 17.78 1.77636e-15 180.0) (length 5.08)
|
||||
(name "P6/TS"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "11"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin power_in line (at 17.78 -20.32 180.0) (length 5.08)
|
||||
(name "VSS"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "8"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
7027
board/kicad-stuff/BQ34Z100PWR-G1.step
Normal file
7027
board/kicad-stuff/BQ34Z100PWR-G1.step
Normal file
File diff suppressed because it is too large
Load Diff
186
board/kicad-stuff/DW01.kicad_sym
Normal file
186
board/kicad-stuff/DW01.kicad_sym
Normal file
@@ -0,0 +1,186 @@
|
||||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "CN61CN33" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at 2.54 12.7 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "CN61CN33" (at 5.08 10.16 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-23" (at 7.62 2.54 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm809.pdf" (at 7.62 2.54 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "reset supervisor" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Microprocessor Reset (active-low) Circuit, SOT-23" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "SOT?23*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "CN61CN33_0_1"
|
||||
(rectangle (start 5.08 7.62) (end -5.08 -7.62)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type background))
|
||||
)
|
||||
)
|
||||
(symbol "CN61CN33_1_1"
|
||||
(pin output line (at 0 -10.16 90) (length 2.54)
|
||||
(name "RESET" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 7.62 0 180) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 0 10.16 270) (length 2.54)
|
||||
(name "VCC" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "DS2438" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "DS2438" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "DS2438_0_1"
|
||||
(rectangle (start -11.43 -2.54) (end 12.7 -30.48)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type background))
|
||||
)
|
||||
)
|
||||
(symbol "DS2438_1_1"
|
||||
(pin power_in line (at -13.97 -6.35 0) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at -13.97 -12.7 0) (length 2.54)
|
||||
(name "Vsens+" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at -13.97 -19.05 0) (length 2.54)
|
||||
(name "Vsense-" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -13.97 -25.4 0) (length 2.54)
|
||||
(name "Vad" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 15.24 -25.4 180) (length 2.54)
|
||||
(name "Vdd" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 15.24 -19.05 180) (length 2.54)
|
||||
(name "NC" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 15.24 -12.7 180) (length 2.54)
|
||||
(name "NC" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin bidirectional line (at 15.24 -6.35 180) (length 2.54)
|
||||
(name "DQ" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "DW01" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "IC" (at 21.59 7.62 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Value" "DW01" (at 21.59 5.08 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Footprint" "SOT95P280X135-6N" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "HEIGHT" "1.35mm" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "DESCRIPTION" "ic" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "MANUFACTURER_PART_NUMBER" "DW01" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "MANUFACTURER_NAME" "Slkor" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "ki_locked" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "DW01_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 5.08 2.54)
|
||||
(xy 5.08 -7.62)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 5.08 2.54)
|
||||
(xy 20.32 2.54)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 20.32 -7.62)
|
||||
(xy 5.08 -7.62)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 20.32 -7.62)
|
||||
(xy 20.32 2.54)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin bidirectional line (at 0 0 0) (length 5.08)
|
||||
(name "OD" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 0 -2.54 0) (length 5.08)
|
||||
(name "CSI" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 0 -5.08 0) (length 5.08)
|
||||
(name "OC" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 25.4 -5.08 180) (length 5.08)
|
||||
(name "TD" (effects (font (size 1.016 1.016))))
|
||||
(number "4" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 25.4 -2.54 180) (length 5.08)
|
||||
(name "VDD" (effects (font (size 1.016 1.016))))
|
||||
(number "5" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 25.4 0 180) (length 5.08)
|
||||
(name "VSS" (effects (font (size 1.016 1.016))))
|
||||
(number "6" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
454
board/kicad-stuff/ESP32/ESP32-DEVKITC-32D.kicad_sym
Normal file
454
board/kicad-stuff/ESP32/ESP32-DEVKITC-32D.kicad_sym
Normal file
@@ -0,0 +1,454 @@
|
||||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "ESP32-DEVKITC-32D" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at -15.2654 26.0604 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Value" "ESP32-DEVKITC-32D" (at -15.2654 -27.9654 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Footprint" "MODULE_ESP32-DEVKITC-32D" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Datasheet" "4" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Field4" "Espressif Systems" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "ki_locked" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "ESP32-DEVKITC-32D_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -15.24 -25.4)
|
||||
(xy -15.24 25.4)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -15.24 25.4)
|
||||
(xy 15.24 25.4)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 15.24 -25.4)
|
||||
(xy -15.24 -25.4)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 15.24 25.4)
|
||||
(xy 15.24 -25.4)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin power_in line (at -20.32 22.86 0) (length 5.08)
|
||||
(name "3V3" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 0 0) (length 5.08)
|
||||
(name "IO26" (effects (font (size 1.016 1.016))))
|
||||
(number "10" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -2.54 0) (length 5.08)
|
||||
(name "IO27" (effects (font (size 1.016 1.016))))
|
||||
(number "11" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -5.08 0) (length 5.08)
|
||||
(name "IO14" (effects (font (size 1.016 1.016))))
|
||||
(number "12" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -7.62 0) (length 5.08)
|
||||
(name "IO12" (effects (font (size 1.016 1.016))))
|
||||
(number "13" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at -20.32 -10.16 0) (length 5.08)
|
||||
(name "GND1" (effects (font (size 1.016 1.016))))
|
||||
(number "14" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -12.7 0) (length 5.08)
|
||||
(name "IO13" (effects (font (size 1.016 1.016))))
|
||||
(number "15" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -15.24 0) (length 5.08)
|
||||
(name "SD2" (effects (font (size 1.016 1.016))))
|
||||
(number "16" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -17.78 0) (length 5.08)
|
||||
(name "SD3" (effects (font (size 1.016 1.016))))
|
||||
(number "17" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 -20.32 0) (length 5.08)
|
||||
(name "CMD" (effects (font (size 1.016 1.016))))
|
||||
(number "18" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at -20.32 -22.86 0) (length 5.08)
|
||||
(name "EXT_5V" (effects (font (size 1.016 1.016))))
|
||||
(number "19" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -20.32 20.32 0) (length 5.08)
|
||||
(name "EN" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 20.32 22.86 180) (length 5.08)
|
||||
(name "GND3" (effects (font (size 1.016 1.016))))
|
||||
(number "20" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 20.32 180) (length 5.08)
|
||||
(name "IO23" (effects (font (size 1.016 1.016))))
|
||||
(number "21" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 17.78 180) (length 5.08)
|
||||
(name "IO22" (effects (font (size 1.016 1.016))))
|
||||
(number "22" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin output line (at 20.32 15.24 180) (length 5.08)
|
||||
(name "TXD0" (effects (font (size 1.016 1.016))))
|
||||
(number "23" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at 20.32 12.7 180) (length 5.08)
|
||||
(name "RXD0" (effects (font (size 1.016 1.016))))
|
||||
(number "24" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 10.16 180) (length 5.08)
|
||||
(name "IO21" (effects (font (size 1.016 1.016))))
|
||||
(number "25" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 20.32 7.62 180) (length 5.08)
|
||||
(name "GND2" (effects (font (size 1.016 1.016))))
|
||||
(number "26" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 5.08 180) (length 5.08)
|
||||
(name "IO19" (effects (font (size 1.016 1.016))))
|
||||
(number "27" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 2.54 180) (length 5.08)
|
||||
(name "IO18" (effects (font (size 1.016 1.016))))
|
||||
(number "28" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 0 180) (length 5.08)
|
||||
(name "IO5" (effects (font (size 1.016 1.016))))
|
||||
(number "29" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -20.32 17.78 0) (length 5.08)
|
||||
(name "SENSOR_VP" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -2.54 180) (length 5.08)
|
||||
(name "IO17" (effects (font (size 1.016 1.016))))
|
||||
(number "30" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -5.08 180) (length 5.08)
|
||||
(name "IO16" (effects (font (size 1.016 1.016))))
|
||||
(number "31" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -7.62 180) (length 5.08)
|
||||
(name "IO4" (effects (font (size 1.016 1.016))))
|
||||
(number "32" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -10.16 180) (length 5.08)
|
||||
(name "IO0" (effects (font (size 1.016 1.016))))
|
||||
(number "33" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -12.7 180) (length 5.08)
|
||||
(name "IO2" (effects (font (size 1.016 1.016))))
|
||||
(number "34" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -15.24 180) (length 5.08)
|
||||
(name "IO15" (effects (font (size 1.016 1.016))))
|
||||
(number "35" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -17.78 180) (length 5.08)
|
||||
(name "SD1" (effects (font (size 1.016 1.016))))
|
||||
(number "36" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 20.32 -20.32 180) (length 5.08)
|
||||
(name "SD0" (effects (font (size 1.016 1.016))))
|
||||
(number "37" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input clock (at 20.32 -22.86 180) (length 5.08)
|
||||
(name "CLK" (effects (font (size 1.016 1.016))))
|
||||
(number "38" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -20.32 15.24 0) (length 5.08)
|
||||
(name "SENSOR_VN" (effects (font (size 1.016 1.016))))
|
||||
(number "4" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 12.7 0) (length 5.08)
|
||||
(name "IO34" (effects (font (size 1.016 1.016))))
|
||||
(number "5" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 10.16 0) (length 5.08)
|
||||
(name "IO35" (effects (font (size 1.016 1.016))))
|
||||
(number "6" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 7.62 0) (length 5.08)
|
||||
(name "IO32" (effects (font (size 1.016 1.016))))
|
||||
(number "7" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 5.08 0) (length 5.08)
|
||||
(name "IO33" (effects (font (size 1.016 1.016))))
|
||||
(number "8" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -20.32 2.54 0) (length 5.08)
|
||||
(name "IO25" (effects (font (size 1.016 1.016))))
|
||||
(number "9" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "SL2300" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "Q" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "SL2300" (at 7.62 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "SL2300_1_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.016 0)
|
||||
(xy -3.81 0)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.016 1.905)
|
||||
(xy -1.016 -1.905)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.508 -1.27)
|
||||
(xy -0.508 -2.286)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.508 0.508)
|
||||
(xy -0.508 -0.508)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.508 2.286)
|
||||
(xy -0.508 1.27)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 2.54)
|
||||
(xy 1.27 1.778)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -2.54)
|
||||
(xy 1.27 0)
|
||||
(xy -0.508 0)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.508 -1.778)
|
||||
(xy 2.032 -1.778)
|
||||
(xy 2.032 1.778)
|
||||
(xy -0.508 1.778)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.254 0)
|
||||
(xy 0.762 0.381)
|
||||
(xy 0.762 -0.381)
|
||||
(xy -0.254 0)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type outline))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.524 0.508)
|
||||
(xy 1.651 0.381)
|
||||
(xy 2.413 0.381)
|
||||
(xy 2.54 0.254)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.032 0.381)
|
||||
(xy 1.651 -0.254)
|
||||
(xy 2.413 -0.254)
|
||||
(xy 2.032 0.381)
|
||||
)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle (center 0.381 0) (radius 2.794)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(circle (center 1.27 -1.778) (radius 0.254)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type outline))
|
||||
)
|
||||
(circle (center 1.27 1.778) (radius 0.254)
|
||||
(stroke (width 0) (type solid))
|
||||
(fill (type outline))
|
||||
)
|
||||
(pin input line (at -6.35 0 0) (length 2.54)
|
||||
(name "G" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 1.27 -5.08 90) (length 2.54)
|
||||
(name "S" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 1.27 5.08 270) (length 2.54)
|
||||
(name "D" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "SR04M-2" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "H" (at 6.35 27.94 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "SR04M-2" (at 7.62 -21.59 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "SR04M-2_0_1"
|
||||
(rectangle (start -22.86 26.67) (end 41.91 -20.32)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "SR04M-2-HeaderConn_01x04_Female" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "J" (at 0 5.08 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "SR04M-2-HeaderConn_01x04_Female" (at 0 -7.62 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "ESP32:SR04M-2PinHeader_1x04_P2.54mm_Vertical" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "connector" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "SR04M-2-HeaderConn_01x04_Female_1_1"
|
||||
(arc (start 0 -4.572) (mid -0.5058 -5.08) (end 0 -5.588)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(arc (start 0 -2.032) (mid -0.5058 -2.54) (end 0 -3.048)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 -5.08)
|
||||
(xy -0.508 -5.08)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 -2.54)
|
||||
(xy -0.508 -2.54)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 0)
|
||||
(xy -0.508 0)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 2.54)
|
||||
(xy -0.508 2.54)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(arc (start 0 0.508) (mid -0.5058 0) (end 0 -0.508)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(arc (start 0 3.048) (mid -0.5058 2.54) (end 0 2.032)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin power_in line (at -5.08 2.54 0) (length 3.81)
|
||||
(name "VCC" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -5.08 0 0) (length 3.81)
|
||||
(name "RX" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin output line (at -5.08 -2.54 0) (length 3.81)
|
||||
(name "TX" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at -5.08 -5.08 0) (length 3.81)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
74
board/kicad-stuff/LP38690DT-3.3.kicad_sym
Normal file
74
board/kicad-stuff/LP38690DT-3.3.kicad_sym
Normal file
@@ -0,0 +1,74 @@
|
||||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "LP38690DT-3.3" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at -10.16 5.08 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Value" "LP38690DT-3.3" (at -10.16 -7.62 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Footprint" "DPAK457P991X255-3N" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Datasheet" "IPC-7351B" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Field4" "Texas Instruments" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Field5" "M" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Field6" "2.55mm" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "ki_locked" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "LP38690DT-3.3_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -10.16 -5.08)
|
||||
(xy 10.16 -5.08)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -10.16 5.08)
|
||||
(xy -10.16 -5.08)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 10.16 -5.08)
|
||||
(xy 10.16 5.08)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 10.16 5.08)
|
||||
(xy -10.16 5.08)
|
||||
)
|
||||
(stroke (width 0.1524) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin output line (at 15.24 2.54 180) (length 5.08)
|
||||
(name "OUT" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -15.24 2.54 0) (length 5.08)
|
||||
(name "IN" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 15.24 -2.54 180) (length 5.08)
|
||||
(name "GND" (effects (font (size 1.016 1.016))))
|
||||
(number "4" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
37
board/kicad-stuff/SOP65P640X120-14N.kicad_mod
Normal file
37
board/kicad-stuff/SOP65P640X120-14N.kicad_mod
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
(footprint SOP65P640X120-14N (layer F.Cu) (tedit 65346025)
|
||||
(descr "")
|
||||
(attr smd)
|
||||
(fp_text reference REF** (at -0.595 -3.435 0) (layer F.SilkS)
|
||||
(effects (font (size 1.0 1.0) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value SOP65P640X120-14N (at 7.025 3.435 0) (layer F.Fab)
|
||||
(effects (font (size 1.0 1.0) (thickness 0.15)))
|
||||
)
|
||||
(pad 1 smd roundrect (roundrect_rratio 0.05) (at -2.87 -1.95) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 2 smd roundrect (roundrect_rratio 0.05) (at -2.87 -1.3) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 3 smd roundrect (roundrect_rratio 0.05) (at -2.87 -0.65) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 4 smd roundrect (roundrect_rratio 0.05) (at -2.87 0.0) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 5 smd roundrect (roundrect_rratio 0.05) (at -2.87 0.65) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 6 smd roundrect (roundrect_rratio 0.05) (at -2.87 1.3) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 7 smd roundrect (roundrect_rratio 0.05) (at -2.87 1.95) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 8 smd roundrect (roundrect_rratio 0.05) (at 2.87 1.95) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 9 smd roundrect (roundrect_rratio 0.05) (at 2.87 1.3) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 10 smd roundrect (roundrect_rratio 0.05) (at 2.87 0.65) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 11 smd roundrect (roundrect_rratio 0.05) (at 2.87 0.0) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 12 smd roundrect (roundrect_rratio 0.05) (at 2.87 -0.65) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 13 smd roundrect (roundrect_rratio 0.05) (at 2.87 -1.3) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 14 smd roundrect (roundrect_rratio 0.05) (at 2.87 -1.95) (size 1.57 0.41) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(fp_circle (center -4.24 -2.26) (end -4.14 -2.26) (layer F.SilkS) (width 0.2))
|
||||
(fp_circle (center -4.24 -2.26) (end -4.14 -2.26) (layer F.Fab) (width 0.2))
|
||||
(fp_line (start -2.2 -2.5) (end 2.2 -2.5) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -2.2 2.5) (end 2.2 2.5) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -2.2 -2.5) (end 2.2 -2.5) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -2.2 2.5) (end 2.2 2.5) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -2.2 -2.5) (end -2.2 2.5) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start 2.2 -2.5) (end 2.2 2.5) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -3.905 -2.75) (end 3.905 -2.75) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -3.905 2.75) (end 3.905 2.75) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -3.905 -2.75) (end -3.905 2.75) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 3.905 -2.75) (end 3.905 2.75) (layer F.CrtYd) (width 0.05))
|
||||
)
|
||||
29
board/kicad-stuff/SSOP10.kicad_mod
Normal file
29
board/kicad-stuff/SSOP10.kicad_mod
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
(footprint SSOP10 (layer F.Cu) (tedit 652971AF)
|
||||
(descr "")
|
||||
(attr smd)
|
||||
(fp_text reference REF** (at -3.2004 0.0 900) (layer F.SilkS)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value SSOP10 (at 3.1496 -0.4064 900) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(pad 2 smd rect (at -1.0 2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 9 smd rect (at -1.0 -2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 1 smd rect (at -2.0 2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 3 smd rect (at 0.0 2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 4 smd rect (at 1.0 2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 10 smd rect (at -2.0 -2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 8 smd rect (at 0.0 -2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 7 smd rect (at 1.0 -2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 5 smd rect (at 2.0 2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 6 smd rect (at 2.0 -2.8) (size 0.6 1.75) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(fp_line (start 2.527 -1.9) (end 2.527 1.4) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start 2.527 1.4) (end 2.527 1.9) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start 2.527 1.9) (end -2.527 1.9) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start -2.527 1.9) (end -2.527 1.4) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start -2.527 1.4) (end -2.527 -1.9) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start -2.527 -1.9) (end 2.527 -1.9) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start 2.527 1.4) (end -2.527 1.4) (layer F.Fab) (width 0.2032))
|
||||
(fp_line (start -1.905 1.016) (end -1.905 -1.016) (layer F.SilkS) (width 0.3048))
|
||||
)
|
||||
104
board/kicad-stuff/SX1308.kicad_sym
Normal file
104
board/kicad-stuff/SX1308.kicad_sym
Normal file
@@ -0,0 +1,104 @@
|
||||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "SX1308" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at -17.78 20.32 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Value" "SX1308" (at -17.8054 17.8054 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||
)
|
||||
(property "Footprint" "SOT-23-6" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left bottom) hide)
|
||||
)
|
||||
(property "ki_locked" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "SX1308_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -17.78 -7.62)
|
||||
(xy -17.78 15.24)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -17.78 15.24)
|
||||
(xy 0 15.24)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -13.7922 0.1778)
|
||||
(xy -11.2522 0.1778)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -11.303 1.6764)
|
||||
(xy -8.763 1.6764)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -11.2522 0.1778)
|
||||
(xy -11.303 1.6764)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 -7.62)
|
||||
(xy -17.78 -7.62)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 15.24)
|
||||
(xy 0 -7.62)
|
||||
)
|
||||
(stroke (width 0.254) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(text "ON/OFF" (at -10.8712 -0.0508 0)
|
||||
(effects (font (size 0.8128 0.8128)) (justify left bottom))
|
||||
)
|
||||
(pin bidirectional line (at 5.08 12.7 180) (length 5.08)
|
||||
(name "SW" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -22.86 -5.08 0) (length 5.08)
|
||||
(name "GND" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 5.08 -2.54 180) (length 5.08)
|
||||
(name "FB" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -22.86 2.54 0) (length 5.08)
|
||||
(name "EN" (effects (font (size 1.016 1.016))))
|
||||
(number "4" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -22.86 12.7 0) (length 5.08)
|
||||
(name "IN" (effects (font (size 1.016 1.016))))
|
||||
(number "5" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at 5.08 5.08 180) (length 5.08)
|
||||
(name "N/C" (effects (font (size 1.016 1.016))))
|
||||
(number "6" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
168
board/kicad-stuff/ds2438.kicad_sym
Normal file
168
board/kicad-stuff/ds2438.kicad_sym
Normal file
@@ -0,0 +1,168 @@
|
||||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "ds2438az+" (pin_names (offset 0.254)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (at 30.48 10.16 0)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
(property "Value" "ds2438az+" (at 30.48 7.62 0)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
(property "Footprint" "21-0041B_8_MXM" (at 30.48 6.096 0)
|
||||
(effects (font (size 1.524 1.524)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
(property "ki_locked" "" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "ki_fp_filters" "21-0041B_8_MXM 21-0041B_8_MXM-M 21-0041B_8_MXM-L" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "ds2438az+_1_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.112 -7.62)
|
||||
(xy 6.0452 -8.128)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.112 -7.62)
|
||||
(xy 6.0452 -7.112)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.112 -5.08)
|
||||
(xy 6.0452 -5.588)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.112 -5.08)
|
||||
(xy 6.0452 -4.572)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.112 -2.54)
|
||||
(xy 6.0452 -3.048)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.112 -2.54)
|
||||
(xy 6.0452 -2.032)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.62 -12.7)
|
||||
(xy 53.34 -12.7)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.62 5.08)
|
||||
(xy 7.62 -12.7)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 53.34 -12.7)
|
||||
(xy 53.34 5.08)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 53.34 5.08)
|
||||
(xy 7.62 5.08)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 53.848 0)
|
||||
(xy 54.9148 -0.508)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 53.848 0)
|
||||
(xy 54.9148 0.508)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 55.4228 -0.508)
|
||||
(xy 56.4642 0)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 55.4228 0.508)
|
||||
(xy 56.4642 0)
|
||||
)
|
||||
(stroke (width 0.127) (type solid))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin power_in line (at 0 0 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.4986 1.4986))))
|
||||
(number "1" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin input line (at 0 -2.54 0) (length 7.62)
|
||||
(name "VSENS+" (effects (font (size 1.4986 1.4986))))
|
||||
(number "2" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin input line (at 0 -5.08 0) (length 7.62)
|
||||
(name "VSENS-" (effects (font (size 1.4986 1.4986))))
|
||||
(number "3" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin input line (at 0 -7.62 0) (length 7.62)
|
||||
(name "VAD" (effects (font (size 1.4986 1.4986))))
|
||||
(number "4" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin power_in line (at 60.96 -7.62 180) (length 7.62)
|
||||
(name "VDD" (effects (font (size 1.4986 1.4986))))
|
||||
(number "5" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin no_connect line (at 60.96 -5.08 180) (length 7.62)
|
||||
(name "NC" (effects (font (size 1.4986 1.4986))))
|
||||
(number "6" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin no_connect line (at 60.96 -2.54 180) (length 7.62)
|
||||
(name "NC" (effects (font (size 1.4986 1.4986))))
|
||||
(number "7" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
(pin bidirectional line (at 60.96 0 180) (length 7.62)
|
||||
(name "DQ" (effects (font (size 1.4986 1.4986))))
|
||||
(number "8" (effects (font (size 1.4986 1.4986))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
Binary file not shown.
1704
board/production/PlantCtrlESP32_2023-10-26_23-11-30/netlist.ipc
Normal file
1704
board/production/PlantCtrlESP32_2023-10-26_23-11-30/netlist.ipc
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,11 @@
|
||||
(sym_lib_table
|
||||
(lib (name "LP38690DT-3.3")(type "Legacy")(uri "${KIPRJMOD}/kicad-stuff/LP38690DT-3.3.lib")(options "")(descr ""))
|
||||
(lib (name "ESP32-DEVKITC-32D")(type "Legacy")(uri "${KIPRJMOD}/kicad-stuff/ESP32/ESP32-DEVKITC-32D.lib")(options "")(descr ""))
|
||||
(lib (name "DW01")(type "Legacy")(uri "${KIPRJMOD}/kicad-stuff/DW01.lib")(options "")(descr ""))
|
||||
(lib (name "SX1308")(type "Legacy")(uri "${KIPRJMOD}/kicad-stuff/SX1308.lib")(options "")(descr ""))
|
||||
(lib (name "ds2438")(type "Legacy")(uri "${KIPRJMOD}/kicad-stuff/ds2438.lib")(options "")(descr ""))
|
||||
(lib (name "PlantCtrlESP32-rescue")(type "Legacy")(uri "${KIPRJMOD}/PlantCtrlESP32-rescue.lib")(options "")(descr ""))
|
||||
)
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "LP38690DT-3.3")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/LP38690DT-3.3.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "ESP32-DEVKITC-32D")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/ESP32/ESP32-DEVKITC-32D.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "DW01")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/DW01.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "SX1308")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/SX1308.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "ds2438")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/ds2438.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "CN3306")(type "KiCad")(uri "${KIPRJMOD}/CN3306.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "CN3795")(type "KiCad")(uri "${KIPRJMOD}/CN3795.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "BQ34Z100PWR-G1")(type "KiCad")(uri "${KIPRJMOD}/kicad-stuff/BQ34Z100PWR-G1.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
|
||||
@@ -1,41 +1,16 @@
|
||||
; PlatformIO Project Configuration File
|
||||
;
|
||||
; Build options: build flags, source filter
|
||||
; Upload options: custom upload port, speed and extra flags
|
||||
; Library options: dependencies, extra library storages
|
||||
; Advanced options: extra scripting
|
||||
;
|
||||
; Please visit documentation for the other options and examples
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[env:esp32doit-devkit-v1]
|
||||
platform = espressif32@6.3.2
|
||||
platform = espressif32
|
||||
board = esp32doit-devkit-v1
|
||||
framework = arduino
|
||||
build_flags = -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||
-DPLANT0_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DPLANT1_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DPLANT2_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DPLANT3_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DPLANT4_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DPLANT5_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DPLANT6_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DTIMED_LIGHT_PIN=CUSTOM1_PIN5
|
||||
-DFLOWMETER_PIN=CUSTOM1_PIN1
|
||||
-DANALOG_WATER=GPIO_NUM_34
|
||||
|
||||
board_build.partitions = defaultWithSmallerSpiffs.csv
|
||||
|
||||
;#https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html
|
||||
|
||||
|
||||
; the latest development brankitchen-lightch (convention V3.0.x)
|
||||
lib_deps = bblanchon/ArduinoJson@^6.20.1
|
||||
paulstoffregen/OneWire@^2.3.6
|
||||
milesburton/DallasTemperature@^3.11.0
|
||||
pololu/VL53L0X@^1.3.1
|
||||
lib_deps = ArduinoJson@6.16.1
|
||||
OneWire
|
||||
DallasTemperature
|
||||
pololu/VL53L0X
|
||||
https://github.com/homieiot/homie-esp8266.git#develop
|
||||
|
||||
[platformio]
|
||||
|
||||
extra_configs = custom_platformio.ini
|
||||
; add additional parameter, like the upload port
|
||||
upload_port=/dev/ttyUSB1
|
||||
|
||||
@@ -17,8 +17,6 @@ if [ ! -f $firmwareFile ]; then
|
||||
echo "the script $0 must be started in host/ sub directory"
|
||||
exit 2
|
||||
fi
|
||||
echo "Firmware changed:"
|
||||
ls -l $firmwareFile
|
||||
|
||||
mosquitto_pub -h $mqttHost -t "${mqttPrefix}${homieId}/stay/alive/set" -m "1" -r
|
||||
echo "Waiting ..."
|
||||
|
||||
@@ -54,15 +54,6 @@
|
||||
#define SENSOR_PLANT5 GPIO_NUM_39 /**< SENSOR_VIN */
|
||||
#define SENSOR_PLANT6 GPIO_NUM_36 /**< SENSOR_VP */
|
||||
|
||||
#ifdef HWREVISION07
|
||||
#define OUTPUT_PUMP0 GPIO_NUM_17 /**< GPIO 17 */
|
||||
#define OUTPUT_PUMP1 GPIO_NUM_5 /**< GPIO 5 */
|
||||
#define OUTPUT_PUMP2 GPIO_NUM_18 /**< GPIO 18 */
|
||||
#define OUTPUT_PUMP3 GPIO_NUM_19 /**< GPIO 19 */
|
||||
#define OUTPUT_PUMP4 GPIO_NUM_21 /**< GPIO 21 */
|
||||
#define OUTPUT_PUMP5 GPIO_NUM_22 /**< GPIO 22 */
|
||||
#define OUTPUT_PUMP6 GPIO_NUM_23 /**< GPIO 23 */
|
||||
#else
|
||||
#define OUTPUT_PUMP0 GPIO_NUM_15 /**< GPIO 15 */
|
||||
#define OUTPUT_PUMP1 GPIO_NUM_5 /**< GPIO 5 */
|
||||
#define OUTPUT_PUMP2 GPIO_NUM_18 /**< GPIO 18 */
|
||||
@@ -70,35 +61,18 @@
|
||||
#define OUTPUT_PUMP4 GPIO_NUM_21 /**< GPIO 21 */
|
||||
#define OUTPUT_PUMP5 GPIO_NUM_22 /**< GPIO 22 */
|
||||
#define OUTPUT_PUMP6 GPIO_NUM_23 /**< GPIO 23 */
|
||||
#endif
|
||||
|
||||
#define OUTPUT_ENABLE_PUMP GPIO_NUM_13 /**< GPIO 13 - Enable Pumps */
|
||||
#ifdef HWREVISION07
|
||||
#define OUTPUT_ENABLE_SENSOR GPIO_NUM_16 /**< GPIO 16 - Enable Sensors */
|
||||
#define SENSOR_ONEWIRE GPIO_NUM_2 /** GPIO 02 - Temperatur sensor, Battery and other cool onewire stuff */
|
||||
#else
|
||||
#define OUTPUT_ENABLE_SENSOR GPIO_NUM_14 /**< GPIO 14 - Enable Sensors */
|
||||
#define SENSOR_ONEWIRE GPIO_NUM_4 /**< GPIO 12 - Temperatur sensor, Battery and other cool onewire stuff */
|
||||
#endif
|
||||
#ifdef ANALOG_WATER
|
||||
#define SENSOR_TANK_ANALOG ANALOG_WATER /**< GPIO 34 - analog water sensor (GPIO_NUM_34) */
|
||||
#else
|
||||
#ifdef HWREVISION07
|
||||
#define OUTPUT_ENABLE_PUMP GPIO_NUM_13 /**< GPIO 13 - Enable Pumps */
|
||||
|
||||
#else
|
||||
#define SENSOR_ONEWIRE GPIO_NUM_4 /**< GPIO 12 - Temperatur sensor, Battery and other cool onewire stuff */
|
||||
#define SENSOR_TANK_SDA GPIO_NUM_17 /**< GPIO 17 - water sensor SDA */
|
||||
#define SENSOR_TANK_SCL GPIO_NUM_16 /**< GPIO 16 - water sensor SCL */
|
||||
#endif
|
||||
#endif
|
||||
#define BUTTON GPIO_NUM_0 /**< GPIO 0 - Fix button of NodeMCU */
|
||||
|
||||
#define CUSTOM1_PIN1 GPIO_NUM_34 /** direct gpio */
|
||||
#define CUSTOM1_PIN3 GPIO_NUM_35 /** direct gpio */
|
||||
#ifdef HWREVISION07
|
||||
#define CUSTOM1_PIN5 GPIO_NUM_4 /** mosfet controlled */
|
||||
#else
|
||||
#define CUSTOM1_PIN5 GPIO_NUM_2 /** mosfet controlled */
|
||||
#endif
|
||||
#define CUSTOM1_PIN7 GPIO_NUM_12 /** mosfet controlled */
|
||||
|
||||
/* @} */
|
||||
@@ -111,29 +85,18 @@
|
||||
#define FLOWMETER_PULSES_PER_ML 2.2
|
||||
#define FIRMWARE_FEATURE1 "Flow"
|
||||
#else
|
||||
#ifdef ANALOG_WATER
|
||||
#define FIRMWARE_FEATURE1 "Water"
|
||||
#else
|
||||
#define FIRMWARE_FEATURE1 ""
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef TIMED_LIGHT_PIN
|
||||
#define FIRMWARE_FEATURE2 "Light"
|
||||
#else
|
||||
#define FIRMWARE_FEATURE2 ""
|
||||
#define FIRMWARE_FEATURE2 ""
|
||||
#endif
|
||||
|
||||
|
||||
#define FIRMWARE_BASENAME "PlantControl"
|
||||
#define FIRMWARE_NAME FIRMWARE_BASENAME FIRMWARE_FEATURE1 FIRMWARE_FEATURE2
|
||||
#define FIRMWARE_VERSIONNMUMBER "3.021"
|
||||
|
||||
#ifdef HWREVISION07
|
||||
#define FIRMWARE_VERSION FIRMWARE_VERSIONNMUMBER " HW0.7"
|
||||
#else
|
||||
#define FIRMWARE_VERSION FIRMWARE_VERSIONNMUMBER " HW0.10b"
|
||||
#endif
|
||||
#define FIRMWARE_VERSION "3.01 HW0.10b"
|
||||
|
||||
#define MOIST_SENSOR_MAX_FRQ 5200 // 60kHz (500Hz margin)
|
||||
#define MOIST_SENSOR_MIN_FRQ 500 // 0.5kHz (500Hz margin)
|
||||
@@ -141,36 +104,28 @@
|
||||
#define ANALOG_SENSOR_MAX_MV 1300 //successive approximation of good range
|
||||
#define ANALOG_SENSOR_MIN_MV 100 //successive approximation of good range
|
||||
|
||||
#ifdef HWREVISION07
|
||||
#define SOLAR_VOLT_FACTOR (4.0306f) /**< 100k and 33k voltage dividor */
|
||||
#else
|
||||
#define SOLAR_VOLT_FACTOR (11.0f) /**< Configuratiion before dd3888ba52f51338788820a933c0a6f4bee78ed5 */
|
||||
#endif
|
||||
#define SOLAR_VOLT_FACTOR 11
|
||||
#define BATTSENSOR_INDEX_SOLAR 0
|
||||
#define BATTSENSOR_INDEX_BATTERY 1
|
||||
|
||||
#define MQTT_TIMEOUT (1000 * 60) /**< After 10 seconds, MQTT is expected to be connected */
|
||||
#define ESP_STALE_TIMEOUT (MQTT_TIMEOUT+(700*1000))
|
||||
#define ESP_ADC_MAX 4095
|
||||
|
||||
#define MAX_PLANTS 7
|
||||
#define SOLAR_CHARGE_MIN_VOLTAGE 7 /**< Sun is rising (morning detected) */
|
||||
#define SOLAR_CHARGE_MAX_VOLTAGE 9 /**< Sun is shining (noon) */
|
||||
#define SOLAR_MAX_VOLTAGE_POSSIBLE 100 /**< higher values are treated as not connected sensor */
|
||||
#define VOLT_MAX_BATT 4.2f
|
||||
#define VOLT_SENSORS_BATT 3.6f /**< Minimum battery voltage for sensor (and pump) usage */
|
||||
#define VOLT_MIN_BATT 3.4f /**< Minimum battery voltage for normal operation */
|
||||
#define LOWVOLT_SLEEP_FACTOR 6 /**< Factor for nightsleep delay, if the battery drops below minimum (@see VOLT_MIN_BATT) */
|
||||
#define LOWVOLT_SLEEP_MINIMUM 7200 /**< At low voltage sleep at least for 120 minutes (two hours) */
|
||||
|
||||
#define WATER_LEVEL_MINIMUM 500 /**< Minimum Analog value (1023 is the maximum)*/
|
||||
#define VOLT_MIN_BATT 3.0f /**< Minimum battery voltage for normal operation */
|
||||
#define LOWVOLT_SLEEP_FACTOR 3 /**< Factor for nightsleep delay, if the battery drops below minimum (@see VOLT_MIN_BATT) */
|
||||
#define LOWVOLT_SLEEP_MINIMUM 1800 /**< At low voltage sleep at least for 30 minutes */
|
||||
|
||||
#define MAX_CONFIG_SETTING_ITEMS 100 /**< Parameter, that can be configured in Homie */
|
||||
#define MAX_JSON_CONFIG_FILE_SIZE_CUSTOM 2500
|
||||
|
||||
#define TEMPERATUR_TIMEOUT 5000 /**< 5 Seconds timeout for the temperatures sensors */
|
||||
#define WATERSENSOR_TIMEOUT 1000 /**< 1 Seconds timeout for the water distance sensor */
|
||||
#define WATERSENSOR_CYCLE 10 /**< 10 sensor measurement are performed */
|
||||
#define TEMPERATUR_TIMEOUT 3000 /**< 3 Seconds timeout for the temperatures sensors */
|
||||
#define WATERSENSOR_TIMEOUT 3000 /**< 3 Seconds timeout for the water distance sensor */
|
||||
#define WATERSENSOR_CYCLE 10 /**< 5 sensor measurement are performed */
|
||||
#define DS18B20_RESOLUTION 9 /**< 9bit temperature resolution -> 0.5°C steps */
|
||||
|
||||
#define UTC_OFFSET_DE 3600 /* UTC offset in seconds for Germany */
|
||||
|
||||
@@ -75,6 +75,9 @@ HomieNode stayAlive("stay", "alive", "alive"); /**< Necessary for Mqtt Active C
|
||||
HomieSetting<long> deepSleepTime("sleep", "time in seconds to sleep");
|
||||
HomieSetting<long> deepSleepNightTime("nightsleep", "time in seconds to sleep (0 uses same setting: deepsleep at night, too)");
|
||||
HomieSetting<long> pumpIneffectiveWarning("pumpConsecutiveWarn", "if the pump was triggered this amount directly after each cooldown, without resolving dryness, warn");
|
||||
HomieSetting<long> waterLevelMax("tankmax", "distance (mm) at maximum water level");
|
||||
HomieSetting<long> waterLevelMin("tankmin", "distance (mm) at minimum water level (pumps still covered)");
|
||||
HomieSetting<long> waterLevelWarn("tankwarn", "warn (mm) if below this water level %");
|
||||
HomieSetting<long> waterLevelVol("tankVolume", "(ml) between minimum and maximum");
|
||||
HomieSetting<const char *> lipoSensorAddr("lipoDSAddr", "1wire address for lipo temperature sensor");
|
||||
HomieSetting<const char *> waterSensorAddr("tankDSAddr", "1wire address for water temperature sensor");
|
||||
|
||||
@@ -25,8 +25,7 @@
|
||||
#define LOG_SENSORMODE_UNKNOWN "Unknown sensor mode requested"
|
||||
#define LOG_SENSORMODE_UNKNOWN_CODE -5
|
||||
|
||||
#define LOG_SENSOR_MISSING_ERROR_MESSAGE "1Wire: sensors found"
|
||||
#define LOG_SENSOR_MISSING_ERROR_CODE -6
|
||||
#define LOG_SENSOR_MISSING -6
|
||||
|
||||
#define LOG_PUMP_AND_DOWNLOADMODE "Download mode, ignoring pump request"
|
||||
#define LOG_PUMP_AND_DOWNLOADMODE_CODE 2
|
||||
@@ -47,10 +46,5 @@
|
||||
#define LOG_SLEEP_CYCLE 102
|
||||
#define LOG_MISSING_PUMP -4
|
||||
#define LOG_BOOT_ERROR_DETECTION 10000
|
||||
#define LOG_BOOT_ERROR_IMG_UNDEFINED (LOG_BOOT_ERROR_DETECTION + 1)
|
||||
#define LOG_BOOT_ERROR_IMG_NEW (LOG_BOOT_ERROR_DETECTION + 2)
|
||||
#define LOG_BOOT_ERROR_IMG_INVALID (LOG_BOOT_ERROR_DETECTION + 3)
|
||||
#define LOG_BOOT_ERROR_IMG_VALID (LOG_BOOT_ERROR_DETECTION + 4)
|
||||
#define LOG_BOOT_ERROR_IMG_PENDING_VERIFY (LOG_BOOT_ERROR_DETECTION + 5)
|
||||
#define LOG_SOLAR_CHARGER_MISSING 300
|
||||
#endif
|
||||
|
||||
@@ -22,9 +22,6 @@ build_flags = -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||
-DPLANT6_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||
-DTIMED_LIGHT_PIN=CUSTOM1_PIN5
|
||||
-DFLOWMETER_PIN=CUSTOM1_PIN1
|
||||
-DANALOG_WATER=GPIO_NUM_34
|
||||
; Optional: Compatibilitymode for hardware revision 0.7
|
||||
;-DHWREVISION07=1
|
||||
|
||||
board_build.partitions = defaultWithSmallerSpiffs.csv
|
||||
|
||||
|
||||
@@ -54,10 +54,8 @@ void Plant::init(void)
|
||||
{ return ((candidate >= 0) && (candidate <= 100)); });
|
||||
|
||||
/* Initialize Hardware */
|
||||
pinMode(this->mPinPump, OUTPUT);
|
||||
digitalWrite(this->mPinPump, LOW);
|
||||
ledcSetup(this->mPlantId, PWM_FREQ, PWM_BITS);
|
||||
ledcAttachPin(this->mPinPump, this->mPlantId);
|
||||
ledcAttachPin(mPinPump, this->mPlantId);
|
||||
ledcWrite(this->mPlantId, 0);
|
||||
pinMode(this->mPinSensor, INPUT);
|
||||
}
|
||||
|
||||
@@ -51,10 +51,7 @@ extern "C" bool verifyRollbackLater(){
|
||||
* DEFINES
|
||||
******************************************************************************/
|
||||
#define AMOUNT_SENOR_QUERYS 8
|
||||
#ifdef ANALOG_WATER
|
||||
#else
|
||||
#define MAX_TANK_DEPTH 5000
|
||||
#endif
|
||||
#define REBOOT_LOOP_DETECTION_ERROR 5
|
||||
|
||||
/******************************************************************************
|
||||
@@ -80,9 +77,9 @@ RTC_DATA_ATTR long consecutiveWateringPlant[MAX_PLANTS] = {0};
|
||||
/******************************************************************************
|
||||
* LOCAL VARIABLES
|
||||
******************************************************************************/
|
||||
bool volatile vmDownloadMode = false; /**< Controller must not sleep */
|
||||
bool volatile vmSensorsRead = false; /**< Sensors are read without Wifi or MQTT */
|
||||
int volatile vmPumpToRun = -1; /** pump to run at the end of the cycle */
|
||||
bool volatile mDownloadMode = false; /**< Controller must not sleep */
|
||||
bool volatile mSensorsRead = false; /**< Sensors are read without Wifi or MQTT */
|
||||
int volatile pumpToRun = -1; /** pump to run at the end of the cycle */
|
||||
int volatile selfTestPumpRun = -1; /** pump to run at the end of the cycle */
|
||||
|
||||
bool mConfigured = false;
|
||||
@@ -151,23 +148,23 @@ void finsihedCycleSucessfully()
|
||||
esp_ota_img_states_t ota_state;
|
||||
if (esp_ota_get_state_partition(running, &ota_state) == ESP_OK)
|
||||
{
|
||||
log(LOG_LEVEL_DEBUG, "Get State Partition was Successfull", LOG_BOOT_ERROR_DETECTION);
|
||||
log(LOG_LEVEL_INFO, "Get State Partition was Successfull", LOG_BOOT_ERROR_DETECTION);
|
||||
|
||||
if(ota_state == ESP_OTA_IMG_UNDEFINED){
|
||||
log(LOG_LEVEL_DEBUG, "ESP_OTA_IMG_UNDEFINED should not happen with rollback", LOG_BOOT_ERROR_IMG_UNDEFINED);
|
||||
log(LOG_LEVEL_INFO, "ESP_OTA_IMG_UNDEFINED should not happen with rollback", LOG_BOOT_ERROR_DETECTION);
|
||||
}
|
||||
if(ota_state == ESP_OTA_IMG_NEW){
|
||||
log(LOG_LEVEL_DEBUG, "ESP_OTA_IMG_NEW", LOG_BOOT_ERROR_IMG_NEW);
|
||||
log(LOG_LEVEL_INFO, "ESP_OTA_IMG_NEW", LOG_BOOT_ERROR_DETECTION);
|
||||
}
|
||||
if(ota_state == ESP_OTA_IMG_INVALID){
|
||||
log(LOG_LEVEL_DEBUG, "ESP_OTA_IMG_INVALID", LOG_BOOT_ERROR_IMG_INVALID);
|
||||
log(LOG_LEVEL_INFO, "ESP_OTA_IMG_INVALID", LOG_BOOT_ERROR_DETECTION);
|
||||
}
|
||||
if(ota_state == ESP_OTA_IMG_VALID){
|
||||
log(LOG_LEVEL_DEBUG, "ESP_OTA_IMG_VALID", LOG_BOOT_ERROR_IMG_VALID);
|
||||
log(LOG_LEVEL_INFO, "ESP_OTA_IMG_VALID", LOG_BOOT_ERROR_DETECTION);
|
||||
}
|
||||
if (ota_state == ESP_OTA_IMG_PENDING_VERIFY)
|
||||
{
|
||||
log(LOG_LEVEL_DEBUG, "ESP_OTA_IMG_PENDING_VERIFY Diagnostics completed successfully! Marking as valid", LOG_BOOT_ERROR_IMG_PENDING_VERIFY);
|
||||
log(LOG_LEVEL_INFO, "ESP_OTA_IMG_PENDING_VERIFY Diagnostics completed successfully! Marking as valid", LOG_BOOT_ERROR_DETECTION);
|
||||
esp_ota_mark_app_valid_cancel_rollback();
|
||||
}
|
||||
}
|
||||
@@ -175,11 +172,11 @@ void finsihedCycleSucessfully()
|
||||
|
||||
void espDeepSleep(bool afterPump = false)
|
||||
{
|
||||
/* download mode or normal operation should restore device status*/
|
||||
finsihedCycleSucessfully();
|
||||
if (vmDownloadMode)
|
||||
if (mDownloadMode)
|
||||
{
|
||||
log(LOG_LEVEL_DEBUG, "abort deepsleep, DownloadMode active", LOG_DEBUG_CODE);
|
||||
// if we manage to get to the download mode, the device can be restored
|
||||
finsihedCycleSucessfully();
|
||||
return;
|
||||
}
|
||||
if (aliveWasRead())
|
||||
@@ -204,7 +201,7 @@ void espDeepSleep(bool afterPump = false)
|
||||
|
||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
||||
|
||||
unsigned long secondsToSleep = -1;
|
||||
long secondsToSleep = -1;
|
||||
|
||||
if (afterPump)
|
||||
{
|
||||
@@ -213,8 +210,9 @@ void espDeepSleep(bool afterPump = false)
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ((int) (mBatteryVoltage * 100)) < ((int) (VOLT_MIN_BATT * 100)) )
|
||||
if (mBatteryVoltage < VOLT_MIN_BATT)
|
||||
{
|
||||
log(LOG_LEVEL_INFO, String(String(mBatteryVoltage) + "V! Almost empty -> deepSleepNight " + String(LOWVOLT_SLEEP_FACTOR)) + " times", LOG_SLEEP_LOWVOLTAGE);
|
||||
/* use the largest sleeping duration */
|
||||
if (deepSleepNightTime.get() > deepSleepTime.get()) {
|
||||
secondsToSleep = (deepSleepNightTime.get() * LOWVOLT_SLEEP_FACTOR);
|
||||
@@ -225,7 +223,6 @@ void espDeepSleep(bool afterPump = false)
|
||||
if (secondsToSleep < LOWVOLT_SLEEP_MINIMUM) {
|
||||
secondsToSleep = LOWVOLT_SLEEP_MINIMUM;
|
||||
}
|
||||
log(LOG_LEVEL_INFO, String(String(mBatteryVoltage) + "V! Almost empty -> deepSleepNight " + String(LOWVOLT_SLEEP_FACTOR)) + " times (" + secondsToSleep + "s)", LOG_SLEEP_LOWVOLTAGE);
|
||||
}
|
||||
else if (mSolarVoltage < SOLAR_CHARGE_MIN_VOLTAGE)
|
||||
{
|
||||
@@ -239,14 +236,12 @@ void espDeepSleep(bool afterPump = false)
|
||||
}
|
||||
}
|
||||
|
||||
#define SECOND2USECOND_FACTOR (1000U * 1000U)
|
||||
|
||||
finsihedCycleSucessfully();
|
||||
/* sleep always at least one second */
|
||||
if (secondsToSleep <= 0) {
|
||||
secondsToSleep = (unsigned long) (UINT64_MAX / SECOND2USECOND_FACTOR);
|
||||
if (secondsToSleep < 0) {
|
||||
secondsToSleep = 1;
|
||||
}
|
||||
esp_sleep_enable_timer_wakeup((secondsToSleep * SECOND2USECOND_FACTOR));
|
||||
#undef SECOND2USECOND_FACTOR
|
||||
esp_sleep_enable_timer_wakeup((secondsToSleep * 1000U * 1000U));
|
||||
if (aliveWasRead())
|
||||
{
|
||||
delay(1000);
|
||||
@@ -359,35 +354,68 @@ void readPowerSwitchedSensors()
|
||||
Plant plant = mPlants[i];
|
||||
switch (plant.getSensorMode())
|
||||
{
|
||||
case FREQUENCY_MOD_RESISTANCE_PROBE:
|
||||
case FREQUENCY_MOD_RESISTANCE_PROBE: {
|
||||
Serial << "Plant " << i << " measurement: " << mPlants[i].getCurrentMoistureRaw() << " hz " << mPlants[i].getCurrentMoisturePCT() << "%" << endl;
|
||||
break;
|
||||
case ANALOG_RESISTANCE_PROBE :
|
||||
}
|
||||
case ANALOG_RESISTANCE_PROBE : {
|
||||
Serial << "Plant " << i << " measurement: " << mPlants[i].getCurrentMoistureRaw() << " mV " << mPlants[i].getCurrentMoisturePCT() << "%" << endl;
|
||||
break;
|
||||
default:
|
||||
case NONE:
|
||||
break;
|
||||
}
|
||||
case NONE : {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ANALOG_WATER
|
||||
Serial << "Analog water measurement " << WATERSENSOR_CYCLE << " cycles.." << endl;
|
||||
Serial.flush();
|
||||
|
||||
/* Read analog Water sensor*/
|
||||
for(int i=0; i < WATERSENSOR_CYCLE; i++)
|
||||
Wire.begin(SENSOR_TANK_SDA, SENSOR_TANK_SCL);
|
||||
// Source: https://www.st.com/resource/en/datasheet/vl53l0x.pdf
|
||||
tankSensor.setAddress(0x52);
|
||||
tankSensor.setBus(&Wire);
|
||||
delay(50);
|
||||
Serial << "Distance sensor init" << endl;
|
||||
long start = millis();
|
||||
bool distanceReady = false;
|
||||
while ((start + WATERSENSOR_TIMEOUT) > millis())
|
||||
{
|
||||
int value = analogRead(SENSOR_TANK_ANALOG);
|
||||
Serial << "Round " << i << " measurement: " << value << " mV " << endl;
|
||||
waterRawSensor.add(value);
|
||||
delay(7);
|
||||
if (tankSensor.init())
|
||||
{
|
||||
distanceReady = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
delay(200);
|
||||
}
|
||||
}
|
||||
if (distanceReady)
|
||||
{
|
||||
waterRawSensor.clear();
|
||||
tankSensor.setSignalRateLimit(0.1);
|
||||
// increase laser pulse periods (defaults are 14 and 10 PCLKs)
|
||||
tankSensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
|
||||
tankSensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
|
||||
tankSensor.setMeasurementTimingBudget(200000);
|
||||
Serial << "Distance sensor measuring" << endl;
|
||||
for (int readCnt = 0; readCnt < WATERSENSOR_CYCLE; readCnt++)
|
||||
|
||||
{
|
||||
if (!tankSensor.timeoutOccurred())
|
||||
{
|
||||
uint16_t distance = tankSensor.readRangeSingleMillimeters();
|
||||
if (distance < MAX_TANK_DEPTH)
|
||||
{
|
||||
waterRawSensor.add(distance);
|
||||
}
|
||||
}
|
||||
delay(50);
|
||||
}
|
||||
Serial << "Distance sensor " << waterRawSensor.getMedian() << " mm" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
log(LOG_LEVEL_WARN, LOG_TANKSENSOR_FAIL_DETECT, LOG_TANKSENSOR_FAIL_DETECT_CODE);
|
||||
}
|
||||
Serial << "Analog water measurement done" << endl;
|
||||
#else
|
||||
Serial << "Analog water measurement deactivated" << endl;
|
||||
#endif
|
||||
Serial.flush();
|
||||
|
||||
/* deactivate the sensors */
|
||||
digitalWrite(OUTPUT_ENABLE_SENSOR, LOW);
|
||||
@@ -403,12 +431,12 @@ void onHomieEvent(const HomieEvent &event)
|
||||
case HomieEventType::SENDING_STATISTICS:
|
||||
break;
|
||||
case HomieEventType::MQTT_READY:
|
||||
if (vmSensorsRead)
|
||||
if (mSensorsRead)
|
||||
{
|
||||
Serial.printf("Timeout occured... too late!\r\n");
|
||||
return;
|
||||
}
|
||||
vmSensorsRead = true; // MQTT is working, deactivate timeout logic
|
||||
mSensorsRead = true; // MQTT is working, deactivate timeout logic
|
||||
|
||||
configTime(UTC_OFFSET_DE, UTF_OFFSET_DE_DST, ntpServer.get());
|
||||
startMQTTRoundtripTest();
|
||||
@@ -419,7 +447,7 @@ void onHomieEvent(const HomieEvent &event)
|
||||
mPlants[i].deactivatePump();
|
||||
}
|
||||
otaRunning = true;
|
||||
vmDownloadMode = true;
|
||||
mDownloadMode = true;
|
||||
break;
|
||||
case HomieEventType::OTA_SUCCESSFUL:
|
||||
digitalWrite(OUTPUT_ENABLE_SENSOR, LOW);
|
||||
@@ -436,21 +464,12 @@ int determineNextPump(bool isLowLight)
|
||||
int pumpToUse = -1;
|
||||
for (int i = 0; i < MAX_PLANTS; i++)
|
||||
{
|
||||
Plant plant = mPlants[i];
|
||||
switch (plant.getSensorMode())
|
||||
{
|
||||
case FREQUENCY_MOD_RESISTANCE_PROBE:
|
||||
log(LOG_LEVEL_DEBUG,
|
||||
String("Plant " + String(i) + " measurement: " + String(plant.getCurrentMoistureRaw()) + " hz " + String(plant.getCurrentMoisturePCT()) + "%"),
|
||||
LOG_DEBUG_CODE);
|
||||
break;
|
||||
}
|
||||
|
||||
bool wateralarm = consecutiveWateringPlant[i] >= pumpIneffectiveWarning.get();
|
||||
if (wateralarm)
|
||||
{
|
||||
log(LOG_LEVEL_ERROR, String(String(i) + " Plant still dry after " + String(consecutiveWateringPlant[i]) + " watering attempts"), LOG_PUMP_INEFFECTIVE);
|
||||
}
|
||||
Plant plant = mPlants[i];
|
||||
if (!plant.isPumpTriggerActive())
|
||||
{
|
||||
plant.publishState(PLANTSTATE_NUM_DEACTIVATED, PLANTSTATE_STR_DEACTIVATED);
|
||||
@@ -511,7 +530,7 @@ int determineNextPump(bool isLowLight)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vmDownloadMode)
|
||||
if (mDownloadMode)
|
||||
{
|
||||
plant.publishState(PLANTSTATE_NUM_ACTIVE_SUPESSED, PLANTSTATE_STR_ACTIVE_SUPESSED);
|
||||
}
|
||||
@@ -571,15 +590,15 @@ bool aliveHandler(const HomieRange &range, const String &value)
|
||||
|
||||
if (value.equals("ON") || value.equals("On") || value.equals("1"))
|
||||
{
|
||||
vmDownloadMode = true;
|
||||
mDownloadMode = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vmDownloadMode)
|
||||
if (mDownloadMode)
|
||||
{
|
||||
esp_restart();
|
||||
}
|
||||
vmDownloadMode = false;
|
||||
mDownloadMode = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -656,11 +675,11 @@ void initPumpLogic()
|
||||
pcnt_counter_resume(unit);
|
||||
#endif
|
||||
pumpStartTime = millis();
|
||||
pumpTarget = millis() + (mPlants[vmPumpToRun].getPumpDuration() * 1000);
|
||||
pumpTarget = millis() + (mPlants[pumpToRun].getPumpDuration() * 1000);
|
||||
#ifdef FLOWMETER_PIN
|
||||
log(LOG_LEVEL_INFO, "Starting pump " + String(pumpToRun) + " for " + String(mPlants[pumpToRun].getPumpDuration()) + "s or " + String(pumpTargetMl) + "ml", LOG_PUMP_STARTED_CODE);
|
||||
#else
|
||||
log(LOG_LEVEL_INFO, "Starting pump " + String(vmPumpToRun) + " for " + String(mPlants[vmPumpToRun].getPumpDuration()) + "s", LOG_PUMP_STARTED_CODE);
|
||||
log(LOG_LEVEL_INFO, "Starting pump " + String(pumpToRun) + " for " + String(mPlants[pumpToRun].getPumpDuration()) + "s", LOG_PUMP_STARTED_CODE);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -670,7 +689,7 @@ void initPumpLogic()
|
||||
delay(100);
|
||||
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 1);
|
||||
|
||||
mPlants[vmPumpToRun].activatePump();
|
||||
mPlants[pumpToRun].activatePump();
|
||||
}
|
||||
|
||||
void pumpActiveLoop()
|
||||
@@ -681,7 +700,7 @@ void pumpActiveLoop()
|
||||
{
|
||||
initPumpLogic();
|
||||
pumpStarted = true;
|
||||
rtcLastWateringPlant[vmPumpToRun] = getCurrentTime();
|
||||
rtcLastWateringPlant[pumpToRun] = getCurrentTime();
|
||||
}
|
||||
|
||||
bool mqttUpdateTick = false;
|
||||
@@ -723,12 +742,12 @@ void pumpActiveLoop()
|
||||
|
||||
if (millis() > pumpTarget)
|
||||
{
|
||||
mPlants[vmPumpToRun].setProperty("watertime").send(String(duration));
|
||||
mPlants[pumpToRun].setProperty("watertime").send(String(duration));
|
||||
targetReached = true;
|
||||
}
|
||||
else if (mqttUpdateTick)
|
||||
{
|
||||
mPlants[vmPumpToRun].setProperty("watertime").send(String(duration));
|
||||
mPlants[pumpToRun].setProperty("watertime").send(String(duration));
|
||||
}
|
||||
|
||||
if (targetReached)
|
||||
@@ -736,11 +755,11 @@ void pumpActiveLoop()
|
||||
|
||||
// disable all
|
||||
digitalWrite(OUTPUT_ENABLE_PUMP, LOW);
|
||||
mPlants[vmPumpToRun].deactivatePump();
|
||||
mPlants[pumpToRun].deactivatePump();
|
||||
// disable loop, to prevent multi processing
|
||||
pumpStarted = false;
|
||||
// if runtime is larger than cooldown, else it would run continously
|
||||
rtcLastWateringPlant[vmPumpToRun] = getCurrentTime();
|
||||
rtcLastWateringPlant[pumpToRun] = getCurrentTime();
|
||||
espDeepSleep(true);
|
||||
}
|
||||
}
|
||||
@@ -772,11 +791,6 @@ void safeSetup()
|
||||
digitalWrite(OUTPUT_ENABLE_PUMP, LOW);
|
||||
|
||||
pinMode(OUTPUT_ENABLE_SENSOR, OUTPUT);
|
||||
digitalWrite(OUTPUT_ENABLE_SENSOR, LOW);
|
||||
|
||||
#ifdef ANALOG_WATER
|
||||
pinMode(SENSOR_TANK_ANALOG, INPUT);
|
||||
#endif
|
||||
|
||||
static_assert(HomieInternals::MAX_CONFIG_SETTING_SIZE >= MAX_CONFIG_SETTING_ITEMS, "Limits.hpp not adjusted MAX_CONFIG_SETTING_ITEMS");
|
||||
if (HomieInternals::MAX_CONFIG_SETTING_SIZE < MAX_CONFIG_SETTING_ITEMS)
|
||||
@@ -805,6 +819,9 @@ void safeSetup()
|
||||
deepSleepNightTime.setDefaultValue(600);
|
||||
ntpServer.setDefaultValue("pool.ntp.org");
|
||||
|
||||
/* waterLevelMax 1000 */ /* 100cm in mm */
|
||||
waterLevelMin.setDefaultValue(50); /* 5cm in mm */
|
||||
waterLevelWarn.setDefaultValue(500); /* 50cm in mm */
|
||||
waterLevelVol.setDefaultValue(5000); /* 5l in ml */
|
||||
lipoSensorAddr.setDefaultValue("");
|
||||
waterSensorAddr.setDefaultValue("");
|
||||
@@ -831,39 +848,24 @@ void safeSetup()
|
||||
{
|
||||
mPlants[i].initSensors();
|
||||
}
|
||||
readPowerSwitchedSensors();
|
||||
Serial << "Reading Homie Config..." << endl;
|
||||
Homie.setup();
|
||||
|
||||
|
||||
/************************* Start One-Wire bus ***************/
|
||||
int tempInitStartTime = millis();
|
||||
uint8_t sensorCount = 0U;
|
||||
|
||||
/* Required to read the temperature at least once */
|
||||
for(int i=0;
|
||||
((sensorCount == 0 || !battery.isFound()) && millis() < tempInitStartTime + TEMPERATUR_TIMEOUT);
|
||||
i++)
|
||||
while ((sensorCount == 0 || !battery.isFound()) && millis() < tempInitStartTime + TEMPERATUR_TIMEOUT)
|
||||
{
|
||||
sensors.begin();
|
||||
battery.begin();
|
||||
sensorCount = sensors.getDS18Count();
|
||||
if (i > 1)
|
||||
{
|
||||
Serial << "DS18S20 count: " << sensorCount << ", battery is found: " << battery.isFound() << " ( loop: " << i << " )" << endl;
|
||||
}
|
||||
delay(100);
|
||||
delay(50);
|
||||
}
|
||||
|
||||
readOneWireSensors();
|
||||
mBatteryVoltage = battery.getVoltage(BATTSENSOR_INDEX_BATTERY);
|
||||
|
||||
if ( ((int) (mBatteryVoltage * 100)) >= ((int) (VOLT_SENSORS_BATT * 100)) )
|
||||
{
|
||||
/* read all sensors with additional power source */
|
||||
readPowerSwitchedSensors();
|
||||
}
|
||||
|
||||
/* Start Homie and Wifi */
|
||||
Serial << "Reading Homie Config..." << endl;
|
||||
Homie.setup();
|
||||
|
||||
Serial << "DS18S20 count: " << sensorCount << " found in " << (millis() - tempInitStartTime) << " ms" << endl;
|
||||
Serial.flush();
|
||||
/* Measure temperature TODO idea: move this into setup */
|
||||
@@ -872,23 +874,6 @@ void safeSetup()
|
||||
sensors.setResolution(DS18B20_RESOLUTION);
|
||||
sensors.requestTemperatures();
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial << "NO SENSOR FOUND! " << endl;
|
||||
Serial << " N N OOO SSSS EEEEE N N SSSS OOO RRRR FFFFF OOO U U N N DDDD !" << endl;
|
||||
Serial << " NN N O O S E NN N S O O R R F O O U U NN N D D !" << endl;
|
||||
Serial << " N N N O O SSS EEEE N N N SSS O O RRRR FFFF O O U U N N N D D !" << endl;
|
||||
Serial << " N NN O O S E N NN S O O R R F O O U U N NN D D !" << endl;
|
||||
Serial << " N N OOO SSSS EEEEE N N SSSS OOO R R F OOO UUU N N DDDD !" << endl;
|
||||
|
||||
Serial << "" << endl;
|
||||
Serial << "" << endl;
|
||||
Serial << FIRMWARE_NAME << " " FIRMWARE_VERSIONNMUMBER << endl;
|
||||
Serial << "" << endl;
|
||||
Serial << "Is expected to run on the following board:" << endl;
|
||||
Serial << FIRMWARE_VERSION << endl;
|
||||
Serial.flush();
|
||||
}
|
||||
|
||||
mConfigured = Homie.isConfigured();
|
||||
if (mConfigured)
|
||||
@@ -962,7 +947,7 @@ void safeSetup()
|
||||
delay(100);
|
||||
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 1);
|
||||
Serial.println("Initial Setup. Start Accesspoint...");
|
||||
vmDownloadMode = true;
|
||||
mDownloadMode = true;
|
||||
}
|
||||
stayAlive.advertise("alive").setName("Alive").setDatatype(NUMBER_TYPE).settable(aliveHandler);
|
||||
setupFinishedTimestamp = millis();
|
||||
@@ -998,7 +983,7 @@ void selfTest()
|
||||
|
||||
if (selfTestPumpRun >= 0 && selfTestPumpRun < MAX_PLANTS)
|
||||
{
|
||||
Serial << "self test mode pump deactivate " << vmPumpToRun << endl;
|
||||
Serial << "self test mode pump deactivate " << pumpToRun << endl;
|
||||
Serial.flush();
|
||||
mPlants[selfTestPumpRun].deactivatePump();
|
||||
}
|
||||
@@ -1030,7 +1015,7 @@ void loop()
|
||||
{
|
||||
Homie.loop();
|
||||
/* Toggel Senor LED to visualize mode 3 */
|
||||
if (vmDownloadMode)
|
||||
if (mDownloadMode)
|
||||
{
|
||||
if (nextBlink < millis())
|
||||
{
|
||||
@@ -1055,9 +1040,9 @@ void loop()
|
||||
else
|
||||
{
|
||||
unsigned long timeSinceSetup = millis() - setupFinishedTimestamp;
|
||||
if ((timeSinceSetup > MQTT_TIMEOUT) && (!vmSensorsRead))
|
||||
if ((timeSinceSetup > MQTT_TIMEOUT) && (!mSensorsRead))
|
||||
{
|
||||
vmSensorsRead = true;
|
||||
mSensorsRead = true;
|
||||
/* Disable Wifi and put modem into sleep mode */
|
||||
WiFi.mode(WIFI_OFF);
|
||||
Serial << "Wifi mode set to " << WIFI_OFF << " mqqt was no reached within " << timeSinceSetup << "ms , fallback to offline mode " << endl;
|
||||
@@ -1067,14 +1052,14 @@ void loop()
|
||||
}
|
||||
|
||||
/** Timeout always stopping the ESP -> no endless power consumption */
|
||||
if (millis() > ESP_STALE_TIMEOUT && !vmDownloadMode)
|
||||
if (millis() > ESP_STALE_TIMEOUT && !mDownloadMode)
|
||||
{
|
||||
Serial << (millis() / 1000) << "not terminated watchdog reset" << endl;
|
||||
Serial.flush();
|
||||
esp_restart();
|
||||
}
|
||||
|
||||
if (vmPumpToRun != -1)
|
||||
if (pumpToRun != -1)
|
||||
{
|
||||
pumpActiveLoop();
|
||||
}
|
||||
@@ -1097,8 +1082,9 @@ void plantcontrol()
|
||||
|
||||
readOneWireSensors();
|
||||
|
||||
Serial << "W : " << waterRawSensor.getAverage() << " mm " << endl;
|
||||
Serial << "W : " << waterRawSensor.getAverage() << " mm (" << String(waterLevelMax.get() - waterRawSensor.getAverage()) << " mm left)" << endl;
|
||||
|
||||
mBatteryVoltage = battery.getVoltage(BATTSENSOR_INDEX_BATTERY);
|
||||
float chipTemp = battery.getTemperature();
|
||||
Serial << "Chip Temperatur " << chipTemp << " °C " << endl;
|
||||
|
||||
@@ -1107,58 +1093,34 @@ void plantcontrol()
|
||||
/* Publish water values, if available */
|
||||
if (waterRawSensor.getCount() > 0)
|
||||
{
|
||||
if (!isnan(waterRawSensor.getAverage()))
|
||||
float remaining = (waterLevelMax.get() - waterRawSensor.getAverage());
|
||||
float actualDifference = waterLevelMax.get() - waterLevelMin.get();
|
||||
float ratio = remaining/actualDifference;
|
||||
sensorWater.setProperty("useable").send(String(actualDifference));
|
||||
if (!isnan(remaining))
|
||||
{
|
||||
/* measuring the distance from top -> smaller value means more water: */
|
||||
long averageWater = waterRawSensor.getAverage();
|
||||
if (averageWater < ESP_ADC_MAX) {
|
||||
long percentage = (averageWater * averageWater);
|
||||
percentage = percentage / 570000;
|
||||
/* Add offset */
|
||||
if (percentage > 0)
|
||||
{
|
||||
percentage += 4;
|
||||
}
|
||||
sensorWater.setProperty("remaining").send(String(percentage));
|
||||
} else {
|
||||
sensorWater.setProperty("remaining").send(String("100"));
|
||||
}
|
||||
|
||||
sensorWater.setProperty("raw").send(String(waterRawSensor.getAverage()));
|
||||
sensorWater.setProperty("remaining").send(String(ratio*100));
|
||||
|
||||
}
|
||||
if (!isnan(waterRawSensor.getAverage()))
|
||||
{
|
||||
sensorWater.setProperty("distance").send(String(waterRawSensor.getAverage()));
|
||||
}
|
||||
}
|
||||
|
||||
if ( ((int) (mBatteryVoltage * 100)) < ((int) (VOLT_MIN_BATT * 100)) )
|
||||
{
|
||||
sensorLipo.setProperty("percent").send("0");
|
||||
}
|
||||
else
|
||||
{
|
||||
sensorLipo.setProperty("percent").send(String(100 * (((mBatteryVoltage - VOLT_MIN_BATT) / (VOLT_MAX_BATT - VOLT_MIN_BATT)))));
|
||||
}
|
||||
|
||||
if (battery.isFound()) {
|
||||
sensorLipo.setProperty("volt").send(String(mBatteryVoltage));
|
||||
sensorLipo.setProperty("current").send(String(battery.getCurrent()));
|
||||
sensorLipo.setProperty("Ah").send(String(battery.getAh()));
|
||||
sensorLipo.setProperty("ICA").send(String(battery.getICA()));
|
||||
sensorLipo.setProperty("DCA").send(String(battery.getDCA()));
|
||||
sensorLipo.setProperty("CCA").send(String(battery.getCCA()));
|
||||
if (mSolarVoltage < SOLAR_MAX_VOLTAGE_POSSIBLE) {
|
||||
sensorSolar.setProperty("volt").send(String(mSolarVoltage));
|
||||
} else {
|
||||
log(LOG_LEVEL_INFO, String("Ignore unrealistc sun voltage" + String(mSolarVoltage) +"V"), LOG_SOLAR_CHARGER_MISSING);
|
||||
}
|
||||
sensorTemp.setProperty(TEMPERATUR_SENSOR_CHIP).send(String(chipTemp));
|
||||
sensorLipo.setProperty("percent").send(String(100 * mBatteryVoltage / VOLT_MAX_BATT));
|
||||
sensorLipo.setProperty("volt").send(String(mBatteryVoltage));
|
||||
sensorLipo.setProperty("current").send(String(battery.getCurrent()));
|
||||
sensorLipo.setProperty("Ah").send(String(battery.getAh()));
|
||||
sensorLipo.setProperty("ICA").send(String(battery.getICA()));
|
||||
sensorLipo.setProperty("DCA").send(String(battery.getDCA()));
|
||||
sensorLipo.setProperty("CCA").send(String(battery.getCCA()));
|
||||
if (mSolarVoltage < SOLAR_MAX_VOLTAGE_POSSIBLE) {
|
||||
sensorSolar.setProperty("volt").send(String(mSolarVoltage));
|
||||
} else {
|
||||
log(LOG_LEVEL_ERROR, String("No battery or sun sensor found"), LOG_SOLAR_CHARGER_MISSING);
|
||||
log(LOG_LEVEL_INFO, String("Ignore unrealistc sun voltage" + String(mSolarVoltage) +"V"), LOG_SOLAR_CHARGER_MISSING);
|
||||
}
|
||||
|
||||
/* Publish 1-wire sensor status on failure */
|
||||
if (sensors.getDS18Count() <= 1) {
|
||||
log(LOG_LEVEL_ERROR, String("Found " + String(sensors.getDS18Count()) + " DS18B20 sensors"), LOG_SENSOR_MISSING_ERROR_CODE);
|
||||
}
|
||||
|
||||
sensorTemp.setProperty(TEMPERATUR_SENSOR_CHIP).send(String(chipTemp));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1166,7 +1128,7 @@ void plantcontrol()
|
||||
Serial.flush();
|
||||
}
|
||||
|
||||
bool isLowLight = (mSolarVoltage <= SOLAR_CHARGE_MIN_VOLTAGE);
|
||||
bool isLowLight = (mSolarVoltage <= SOLAR_CHARGE_MAX_VOLTAGE);
|
||||
#if defined(TIMED_LIGHT_PIN)
|
||||
|
||||
bool shouldLight = determineTimedLightState(isLowLight);
|
||||
@@ -1178,30 +1140,30 @@ bool isLowLight = (mSolarVoltage <= SOLAR_CHARGE_MIN_VOLTAGE);
|
||||
|
||||
#endif // TIMED_LIGHT_PIN
|
||||
|
||||
bool isLiquid = (waterTemp > 5.0f);
|
||||
bool isLiquid = waterTemp > 5;
|
||||
bool hasWater = true; // By default activate the pump
|
||||
if (waterRawSensor.getCount() > 0)
|
||||
{
|
||||
//surface of water is still nearer the sensor than required to cover the pumps
|
||||
hasWater = waterRawSensor.getAverage() > WATER_LEVEL_MINIMUM;
|
||||
}
|
||||
|
||||
if (mBatteryVoltage >= VOLT_SENSORS_BATT)
|
||||
{
|
||||
// FIXME no water warning message
|
||||
vmPumpToRun = determineNextPump(isLowLight);
|
||||
hasWater = waterRawSensor.getAverage() < waterLevelMin.get();
|
||||
if (waterRawSensor.getAverage() > waterLevelMax.get()) {
|
||||
log(LOG_LEVEL_ERROR, LOG_PUMP_FULLTANK_MESSAGE, LOG_PUMP_FULLTANK_CODE);
|
||||
hasWater = true;
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME no water warning message
|
||||
pumpToRun = determineNextPump(isLowLight);
|
||||
// early aborts
|
||||
if (vmPumpToRun != -1)
|
||||
if (pumpToRun != -1)
|
||||
{
|
||||
if(isLiquid){
|
||||
if (hasWater)
|
||||
{
|
||||
if (vmDownloadMode)
|
||||
if (mDownloadMode)
|
||||
{
|
||||
log(LOG_LEVEL_INFO, LOG_PUMP_AND_DOWNLOADMODE, LOG_PUMP_AND_DOWNLOADMODE_CODE);
|
||||
vmPumpToRun = -1;
|
||||
pumpToRun = -1;
|
||||
} else {
|
||||
/* Pump can be used :) */
|
||||
}
|
||||
@@ -1209,18 +1171,18 @@ bool isLowLight = (mSolarVoltage <= SOLAR_CHARGE_MIN_VOLTAGE);
|
||||
else
|
||||
{
|
||||
log(LOG_LEVEL_ERROR, LOG_PUMP_BUTNOTANK_MESSAGE, LOG_PUMP_BUTNOTANK_CODE);
|
||||
vmPumpToRun = -1;
|
||||
pumpToRun = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log(LOG_LEVEL_ERROR, LOG_VERY_COLD_WATER, LOG_VERY_COLD_WATER_CODE);
|
||||
vmPumpToRun = -1;
|
||||
pumpToRun = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// go directly to sleep, skipping the pump loop
|
||||
if (vmPumpToRun == -1)
|
||||
if (pumpToRun == -1)
|
||||
{
|
||||
espDeepSleep();
|
||||
}
|
||||
|
||||
Binary file not shown.
18
rust/.cargo/config.toml
Normal file
18
rust/.cargo/config.toml
Normal file
@@ -0,0 +1,18 @@
|
||||
[build]
|
||||
target = "xtensa-esp32-espidf"
|
||||
|
||||
[target.xtensa-esp32-espidf]
|
||||
linker = "ldproxy"
|
||||
runner = "espflash flash --monitor --baud 921600 --partition-table partitions.csv" # Select this runner for espflash v2.x.x
|
||||
#runner = "cargo runner"
|
||||
rustflags = [ "--cfg", "espidf_time64"] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110
|
||||
|
||||
[unstable]
|
||||
build-std = ["std", "panic_abort"]
|
||||
|
||||
[env]
|
||||
MCU="esp32"
|
||||
# Note: this variable is not used by the pio builder (`cargo build --features pio`)
|
||||
ESP_IDF_VERSION = "v5.1.1"
|
||||
CHRONO_TZ_TIMEZONE_FILTER="UTC|Europe/Berlin"
|
||||
CARGO_WORKSPACE_DIR = { value = "", relative = true }
|
||||
8
rust/.idea/.gitignore
generated
vendored
Normal file
8
rust/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
6
rust/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
6
rust/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
8
rust/.idea/modules.xml
generated
Normal file
8
rust/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/plant-ctrl2.iml" filepath="$PROJECT_DIR$/.idea/plant-ctrl2.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
11
rust/.idea/plant-ctrl2.iml
generated
Normal file
11
rust/.idea/plant-ctrl2.iml
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="EMPTY_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
rust/.idea/vcs.xml
generated
Normal file
6
rust/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
84
rust/Cargo.toml
Normal file
84
rust/Cargo.toml
Normal file
@@ -0,0 +1,84 @@
|
||||
[package]
|
||||
name = "plant-ctrl2"
|
||||
version = "0.1.0"
|
||||
authors = ["Empire Phoenix"]
|
||||
edition = "2021"
|
||||
resolver = "2"
|
||||
rust-version = "1.71"
|
||||
|
||||
[profile.release]
|
||||
# Explicitly disable LTO which the Xtensa codegen backend has issues
|
||||
#lto = "thin"
|
||||
opt-level = "s"
|
||||
strip = false
|
||||
#codegen-units = 1
|
||||
debug = true
|
||||
overflow-checks = true
|
||||
panic = "unwind"
|
||||
incremental = true
|
||||
|
||||
[profile.dev]
|
||||
# Explicitly disable LTO which the Xtensa codegen backend has issues
|
||||
#lto = "thin"
|
||||
opt-level = "s"
|
||||
strip = false
|
||||
#codegen-units = 1
|
||||
debug = true
|
||||
overflow-checks = true
|
||||
panic = "unwind"
|
||||
incremental = true
|
||||
|
||||
[package.metadata.cargo_runner]
|
||||
# The string `$TARGET_FILE` will be replaced with the path from cargo.
|
||||
command = [
|
||||
"cargo",
|
||||
"espflash",
|
||||
"save-image",
|
||||
"--chip",
|
||||
"esp32",
|
||||
"image.bin"
|
||||
]
|
||||
|
||||
|
||||
[package.metadata.espflash]
|
||||
partition_table = "partitions.csv"
|
||||
|
||||
[features]
|
||||
default = ["std", "embassy", "esp-idf-svc/native"]
|
||||
|
||||
pio = ["esp-idf-svc/pio"]
|
||||
std = ["alloc", "esp-idf-svc/binstart", "esp-idf-svc/std"]
|
||||
alloc = ["esp-idf-svc/alloc"]
|
||||
nightly = ["esp-idf-svc/nightly"]
|
||||
experimental = ["esp-idf-svc/experimental"]
|
||||
embassy = ["esp-idf-svc/embassy-sync", "esp-idf-svc/critical-section", "esp-idf-svc/embassy-time-driver"]
|
||||
|
||||
[dependencies]
|
||||
log = { version = "0.4", default-features = false }
|
||||
esp-idf-svc = { version = "0.47.3", default-features = false }
|
||||
serde = { version = "1.0.192", features = ["derive"] }
|
||||
average = { version = "0.14.1" , features = ["std"] }
|
||||
#esp32 = "0.28.0"
|
||||
bit_field = "0.10.2"
|
||||
ds18b20 = "0.1.1"
|
||||
embedded-svc = { version = "0.26.4", features = ["experimental"] }
|
||||
esp-idf-hal = "0.42.5"
|
||||
esp-idf-sys = { version = "0.33.7", features = ["binstart", "native"] }
|
||||
esp-ota = "0.2.0"
|
||||
esp_idf_build = "0.1.3"
|
||||
chrono = { version = "0.4.23", default-features = false , features = ["iana-time-zone"] }
|
||||
chrono-tz = {version="0.8.0", default-features = false , features = [ "filter-by-regex" ]}
|
||||
embedded-hal = "0.2.7"
|
||||
#shift-register-driver = "0.1.1"
|
||||
one-wire-bus = "0.1.1"
|
||||
anyhow = { version = "1.0.75", features = ["std", "backtrace"] }
|
||||
schemars = "0.8.16"
|
||||
heapless = { version = "0.7", features = ["serde"] }
|
||||
serde_json = "1.0.108"
|
||||
strum = { version = "0.25.0", features = ["derive"] }
|
||||
once_cell = "1.19.0"
|
||||
#?bq34z100 required
|
||||
|
||||
[build-dependencies]
|
||||
embuild = "0.31.3"
|
||||
vergen = { version = "8.2.6", features = ["build", "git", "gitcl"] }
|
||||
25
rust/build.rs
Normal file
25
rust/build.rs
Normal file
@@ -0,0 +1,25 @@
|
||||
use std::process::Command;
|
||||
|
||||
use vergen::EmitBuilder;
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=./src/src_webpack");
|
||||
Command::new("rm")
|
||||
.arg("./src/webserver/bundle.js")
|
||||
.output()
|
||||
.expect("failed to execute process");
|
||||
|
||||
let output = Command::new("npx")
|
||||
.arg("webpack")
|
||||
.current_dir("./src_webpack")
|
||||
.output()
|
||||
.expect("failed to execute process");
|
||||
|
||||
println!("status: {}", output.status);
|
||||
println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
|
||||
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
|
||||
|
||||
assert!(output.status.success());
|
||||
|
||||
embuild::espidf::sysenv::output();
|
||||
let _ = EmitBuilder::builder().all_git().emit();
|
||||
}
|
||||
6
rust/partitions.csv
Normal file
6
rust/partitions.csv
Normal file
@@ -0,0 +1,6 @@
|
||||
nvs, data, nvs, , 16k,
|
||||
otadata, data, ota, , 8k,
|
||||
phy_init, data, phy, , 4k,
|
||||
ota_0, app, ota_0, , 1792K,
|
||||
ota_1, app, ota_1, , 1792K,
|
||||
storage, data, spiffs, , 400K,
|
||||
|
3
rust/rust-toolchain.toml
Normal file
3
rust/rust-toolchain.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[toolchain]
|
||||
channel = "nightly"
|
||||
|
||||
10
rust/sdkconfig.defaults
Normal file
10
rust/sdkconfig.defaults
Normal file
@@ -0,0 +1,10 @@
|
||||
# Rust often needs a bit of an extra main task stack size compared to C (the default is 3K)
|
||||
CONFIG_ESP_MAIN_TASK_STACK_SIZE=20000
|
||||
|
||||
# Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default).
|
||||
# This allows to use 1 ms granuality for thread sleeps (10 ms by default).
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
|
||||
# Workaround for https://github.com/espressif/esp-idf/issues/7631
|
||||
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n
|
||||
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n
|
||||
18
rust/setup.txt
Normal file
18
rust/setup.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
cargo install cargo-generate
|
||||
cargo install ldproxy
|
||||
cargo install espup
|
||||
cargo install espflash
|
||||
cargo install cargo-espflash
|
||||
|
||||
cargo generate esp-rs/esp-idf-template cargo
|
||||
export PATH="$PATH:$HOME/.cargo/bin"
|
||||
|
||||
espup install
|
||||
rustup toolchain link esp ~/.rustup/toolchains/esp/
|
||||
cargo install ldproxy
|
||||
|
||||
cargo espflash save-image --chip esp32 image.bin
|
||||
|
||||
|
||||
esptool.py --chip ESP32-C3 elf2image --output my-app.bin target/release/my-app
|
||||
$ espflash save-image ESP32-C3 target/release/my-app my-app.bin
|
||||
85
rust/src/config.rs
Normal file
85
rust/src/config.rs
Normal file
@@ -0,0 +1,85 @@
|
||||
use std::fmt;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::PLANT_COUNT;
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
|
||||
pub struct Config {
|
||||
pub mqtt_url: heapless::String<128>,
|
||||
pub base_topic: heapless::String<64>,
|
||||
pub max_consecutive_pump_count: u8,
|
||||
|
||||
pub tank_allow_pumping_if_sensor_error: bool,
|
||||
pub tank_sensor_enabled: bool,
|
||||
pub tank_useable_ml: u32,
|
||||
pub tank_warn_percent: u8,
|
||||
pub tank_empty_mv: f32,
|
||||
pub tank_full_mv: f32,
|
||||
|
||||
pub night_lamp_hour_start: u8,
|
||||
pub night_lamp_hour_end: u8,
|
||||
pub night_lamp_only_when_dark: bool,
|
||||
|
||||
pub plants: [Plant; PLANT_COUNT],
|
||||
}
|
||||
|
||||
impl Default for Config {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
base_topic: "plant/one".into(),
|
||||
mqtt_url: "mqtt://192.168.1.1:1883".into(),
|
||||
tank_allow_pumping_if_sensor_error: true,
|
||||
tank_sensor_enabled: true,
|
||||
tank_warn_percent: 50,
|
||||
night_lamp_hour_start: 21,
|
||||
night_lamp_hour_end: 2,
|
||||
night_lamp_only_when_dark: true,
|
||||
plants: [Plant::default(); PLANT_COUNT],
|
||||
max_consecutive_pump_count: 15,
|
||||
tank_useable_ml: 5000,
|
||||
tank_empty_mv: 0.1,
|
||||
tank_full_mv: 3.3,
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq)]
|
||||
pub enum Mode {
|
||||
OFF,
|
||||
TargetMoisture,
|
||||
TimerOnly,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq)]
|
||||
pub struct Plant {
|
||||
pub mode: Mode,
|
||||
pub target_moisture: u8,
|
||||
pub pump_time_s: u16,
|
||||
pub pump_cooldown_min: u16,
|
||||
pub pump_hour_start: u8,
|
||||
pub pump_hour_end: u8,
|
||||
}
|
||||
impl Default for Plant {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
target_moisture: 40,
|
||||
pump_time_s: 60,
|
||||
pump_cooldown_min: 60,
|
||||
pump_hour_start: 8,
|
||||
pump_hour_end: 20,
|
||||
mode: Mode::OFF,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct WifiConfig {
|
||||
pub ssid: heapless::String<32>,
|
||||
pub password: Option<heapless::String<64>>,
|
||||
}
|
||||
|
||||
impl fmt::Display for WifiConfig {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "({}, ****)", self.ssid)
|
||||
}
|
||||
}
|
||||
4
rust/src/lib.rs
Normal file
4
rust/src/lib.rs
Normal file
@@ -0,0 +1,4 @@
|
||||
#![allow(dead_code)]
|
||||
extern crate embedded_hal as hal;
|
||||
|
||||
pub mod sipo;
|
||||
446
rust/src/main.rs
Normal file
446
rust/src/main.rs
Normal file
@@ -0,0 +1,446 @@
|
||||
use std::{
|
||||
env,
|
||||
sync::{atomic::AtomicBool, Arc, Mutex},
|
||||
};
|
||||
|
||||
use anyhow::Result;
|
||||
use chrono::{Datelike, Duration, NaiveDateTime, Timelike};
|
||||
use chrono_tz::Europe::Berlin;
|
||||
use esp_idf_hal::delay::Delay;
|
||||
use esp_idf_sys::{esp_restart, uxTaskGetStackHighWaterMark, vTaskDelay};
|
||||
use esp_ota::rollback_and_reboot;
|
||||
use log::error;
|
||||
use once_cell::sync::Lazy;
|
||||
use plant_hal::{CreatePlantHal, PlantCtrlBoard, PlantCtrlBoardInteraction, PlantHal, PLANT_COUNT};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
config::{Config, WifiConfig},
|
||||
webserver::webserver::{httpd, httpd_initial},
|
||||
};
|
||||
mod config;
|
||||
pub mod plant_hal;
|
||||
|
||||
const MOIST_SENSOR_MAX_FREQUENCY: u32 = 5200; // 60kHz (500Hz margin)
|
||||
const MOIST_SENSOR_MIN_FREQUENCY: u32 = 500; // 0.5kHz (500Hz margin)
|
||||
|
||||
const FROM: (f32, f32) = (
|
||||
MOIST_SENSOR_MIN_FREQUENCY as f32,
|
||||
MOIST_SENSOR_MAX_FREQUENCY as f32,
|
||||
);
|
||||
const TO: (f32, f32) = (0_f32, 100_f32);
|
||||
|
||||
mod webserver {
|
||||
pub mod webserver;
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq)]
|
||||
enum OnlineMode {
|
||||
Offline,
|
||||
Wifi,
|
||||
SnTp,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq)]
|
||||
enum WaitType {
|
||||
InitialConfig,
|
||||
FlashError,
|
||||
NormalConfig,
|
||||
StayAlive,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq, Default)]
|
||||
struct PlantState {
|
||||
a: u8,
|
||||
b: u8,
|
||||
p: u8,
|
||||
after_p: u8,
|
||||
dry: bool,
|
||||
active: bool,
|
||||
pump_error: bool,
|
||||
not_effective: bool,
|
||||
cooldown: bool,
|
||||
no_water: bool,
|
||||
}
|
||||
|
||||
fn wait_infinity(wait_type: WaitType, reboot_now: Arc<AtomicBool>) -> ! {
|
||||
let delay = match wait_type {
|
||||
WaitType::InitialConfig => 250_u32,
|
||||
WaitType::FlashError => 100_u32,
|
||||
WaitType::NormalConfig => 500_u32,
|
||||
WaitType::StayAlive => 1000_u32,
|
||||
};
|
||||
let led_count = match wait_type {
|
||||
WaitType::InitialConfig => 8,
|
||||
WaitType::FlashError => 8,
|
||||
WaitType::NormalConfig => 4,
|
||||
WaitType::StayAlive => 2,
|
||||
};
|
||||
loop {
|
||||
unsafe {
|
||||
//do not trigger watchdog
|
||||
for i in 0..8 {
|
||||
BOARD_ACCESS.lock().unwrap().fault(i, i < led_count);
|
||||
}
|
||||
BOARD_ACCESS.lock().unwrap().general_fault(true);
|
||||
vTaskDelay(delay);
|
||||
BOARD_ACCESS.lock().unwrap().general_fault(false);
|
||||
for i in 0..8 {
|
||||
BOARD_ACCESS.lock().unwrap().fault(i, false);
|
||||
}
|
||||
vTaskDelay(delay);
|
||||
if wait_type == WaitType::StayAlive
|
||||
&& !STAY_ALIVE.load(std::sync::atomic::Ordering::Relaxed)
|
||||
{}
|
||||
if reboot_now.load(std::sync::atomic::Ordering::Relaxed) {
|
||||
println!("Rebooting");
|
||||
esp_restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub static BOARD_ACCESS: Lazy<Mutex<PlantCtrlBoard>> = Lazy::new(|| PlantHal::create().unwrap());
|
||||
pub static STAY_ALIVE: Lazy<AtomicBool> = Lazy::new(|| AtomicBool::new(false));
|
||||
|
||||
fn map_range(from_range: (f32, f32), to_range: (f32, f32), s: f32) -> f32 {
|
||||
to_range.0 + (s - from_range.0) * (to_range.1 - to_range.0) / (from_range.1 - from_range.0)
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
// It is necessary to call this function once. Otherwise some patches to the runtime
|
||||
// implemented by esp-idf-sys might not link properly. See https://github.com/esp-rs/esp-idf-template/issues/71
|
||||
esp_idf_svc::sys::link_patches();
|
||||
|
||||
// Bind the log crate to the ESP Logging facilities
|
||||
esp_idf_svc::log::EspLogger::initialize_default();
|
||||
|
||||
if esp_idf_sys::CONFIG_MAIN_TASK_STACK_SIZE < 20000 {
|
||||
error!(
|
||||
"stack too small: {} bail!",
|
||||
esp_idf_sys::CONFIG_MAIN_TASK_STACK_SIZE
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
log::info!("Startup Rust");
|
||||
|
||||
let git_hash = env!("VERGEN_GIT_DESCRIBE");
|
||||
println!("Version useing git has {}", git_hash);
|
||||
|
||||
let mut partition_state: embedded_svc::ota::SlotState = embedded_svc::ota::SlotState::Unknown;
|
||||
// match esp_idf_svc::ota::EspOta::new() {
|
||||
// Ok(ota) => {
|
||||
// match ota.get_running_slot(){
|
||||
// Ok(slot) => {
|
||||
// partition_state = slot.state;
|
||||
// println!(
|
||||
// "Booting from {} with state {:?}",
|
||||
// slot.label, partition_state
|
||||
// );
|
||||
// },
|
||||
// Err(err) => {
|
||||
// println!("Error getting running slot {}", err);
|
||||
// },
|
||||
// }
|
||||
// },
|
||||
// Err(err) => {
|
||||
// println!("Error obtaining ota info {}", err);
|
||||
// },
|
||||
// }
|
||||
|
||||
println!("Board hal init");
|
||||
let mut board: std::sync::MutexGuard<'_, PlantCtrlBoard<'_>> = BOARD_ACCESS.lock().unwrap();
|
||||
println!("Mounting filesystem");
|
||||
board.mount_file_system()?;
|
||||
let free_space = board.file_system_size()?;
|
||||
println!(
|
||||
"Mounted, total space {} used {} free {}",
|
||||
free_space.total_size, free_space.used_size, free_space.free_size
|
||||
);
|
||||
|
||||
let time = board.time();
|
||||
let mut cur = match time {
|
||||
Ok(cur) => cur,
|
||||
Err(err) => {
|
||||
log::error!("time error {}", err);
|
||||
NaiveDateTime::from_timestamp_millis(0).unwrap().and_utc()
|
||||
}
|
||||
};
|
||||
//check if we know the time current > 2020
|
||||
if cur.year() < 2020 {
|
||||
if board.is_day() {
|
||||
//assume TZ safe times ;)
|
||||
cur = *cur.with_hour(15).get_or_insert(cur);
|
||||
} else {
|
||||
cur = *cur.with_hour(3).get_or_insert(cur);
|
||||
}
|
||||
}
|
||||
|
||||
println!("cur is {}", cur);
|
||||
|
||||
if board.is_config_reset() {
|
||||
board.general_fault(true);
|
||||
println!("Reset config is pressed, waiting 5s");
|
||||
for i in 0..25 {
|
||||
board.general_fault(true);
|
||||
Delay::new_default().delay_ms(50);
|
||||
board.general_fault(false);
|
||||
Delay::new_default().delay_ms(50);
|
||||
}
|
||||
|
||||
if board.is_config_reset() {
|
||||
println!("Reset config is still pressed, deleting configs and reboot");
|
||||
match board.remove_configs() {
|
||||
Ok(case) => {
|
||||
println!("Succeeded in deleting config {}", case);
|
||||
}
|
||||
Err(err) => {
|
||||
println!("Could not remove config files, system borked {}", err);
|
||||
//terminate main app and freeze
|
||||
|
||||
wait_infinity(WaitType::FlashError, Arc::new(AtomicBool::new(false)));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
board.general_fault(false);
|
||||
}
|
||||
}
|
||||
|
||||
let mut online_mode = OnlineMode::Offline;
|
||||
let wifi_conf = board.get_wifi();
|
||||
let wifi: WifiConfig;
|
||||
match wifi_conf {
|
||||
Ok(conf) => {
|
||||
wifi = conf;
|
||||
}
|
||||
Err(err) => {
|
||||
if board.is_wifi_config_file_existant() {
|
||||
match partition_state {
|
||||
embedded_svc::ota::SlotState::Invalid
|
||||
| embedded_svc::ota::SlotState::Unverified => {
|
||||
println!("Config seem to be unparsable after upgrade, reverting");
|
||||
rollback_and_reboot()?;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
println!("Missing wifi config, entering initial config mode {}", err);
|
||||
board.wifi_ap().unwrap();
|
||||
//config upload will trigger reboot!
|
||||
drop(board);
|
||||
let reboot_now = Arc::new(AtomicBool::new(false));
|
||||
let _webserver = httpd_initial(reboot_now.clone());
|
||||
wait_infinity(WaitType::InitialConfig, reboot_now.clone());
|
||||
}
|
||||
};
|
||||
|
||||
println!("attempting to connect wifi");
|
||||
match board.wifi(&wifi.ssid, wifi.password.as_deref(), 10000) {
|
||||
Ok(_) => {
|
||||
online_mode = OnlineMode::Wifi;
|
||||
}
|
||||
Err(_) => {
|
||||
println!("Offline mode");
|
||||
board.general_fault(true);
|
||||
}
|
||||
}
|
||||
|
||||
if online_mode == OnlineMode::Wifi {
|
||||
match board.sntp(1000 * 120) {
|
||||
Ok(new_time) => {
|
||||
cur = new_time;
|
||||
online_mode = OnlineMode::SnTp;
|
||||
}
|
||||
Err(err) => {
|
||||
println!("sntp error: {}", err);
|
||||
board.general_fault(true);
|
||||
}
|
||||
}
|
||||
println!("Running logic at utc {}", cur);
|
||||
let europe_time = cur.with_timezone(&Berlin);
|
||||
println!("Running logic at europe/berlin {}", europe_time);
|
||||
}
|
||||
|
||||
let config: Config;
|
||||
match board.get_config() {
|
||||
Ok(valid) => {
|
||||
config = valid;
|
||||
}
|
||||
Err(err) => {
|
||||
println!("Missing normal config, entering config mode {}", err);
|
||||
//config upload will trigger reboot!
|
||||
drop(board);
|
||||
let reboot_now = Arc::new(AtomicBool::new(false));
|
||||
let _webserver = httpd(reboot_now.clone());
|
||||
wait_infinity(WaitType::NormalConfig, reboot_now.clone());
|
||||
}
|
||||
}
|
||||
|
||||
//do mqtt before config check, as mqtt might configure
|
||||
if online_mode == OnlineMode::SnTp {
|
||||
match board.mqtt(&config) {
|
||||
Ok(_) => {
|
||||
println!("Mqtt connection ready");
|
||||
}
|
||||
Err(err) => {
|
||||
println!("Could not connect mqtt due to {}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
match board.battery_state() {
|
||||
Ok(_state) => {}
|
||||
Err(err) => {
|
||||
board.general_fault(true);
|
||||
println!("Could not read battery state, assuming low power {}", err);
|
||||
}
|
||||
}
|
||||
|
||||
let mut enough_water = true;
|
||||
if config.tank_sensor_enabled {
|
||||
let tank_value = board.tank_sensor_mv();
|
||||
match tank_value {
|
||||
Ok(tank_raw) => {
|
||||
//FIXME clear
|
||||
let percent = map_range(
|
||||
(config.tank_empty_mv, config.tank_full_mv),
|
||||
(0_f32, 100_f32),
|
||||
tank_raw.into(),
|
||||
);
|
||||
let left_ml = ((percent / 100_f32) * config.tank_useable_ml as f32) as u32;
|
||||
println!(
|
||||
"Tank sensor returned mv {} as {}% leaving {} ml useable",
|
||||
tank_raw, percent as u8, left_ml
|
||||
);
|
||||
if config.tank_warn_percent > percent as u8 {
|
||||
board.general_fault(true);
|
||||
println!(
|
||||
"Low water, current percent is {}, minimum warn level is {}",
|
||||
percent as u8, config.tank_warn_percent
|
||||
);
|
||||
//FIXME warn here
|
||||
}
|
||||
if config.tank_warn_percent <= 0 {
|
||||
enough_water = false;
|
||||
}
|
||||
}
|
||||
Err(_) => {
|
||||
board.general_fault(true);
|
||||
if !config.tank_allow_pumping_if_sensor_error {
|
||||
enough_water = false;
|
||||
}
|
||||
//set tank sensor state to fault
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let plantstate = [PlantState {
|
||||
..Default::default()
|
||||
}; PLANT_COUNT];
|
||||
for plant in 0..PLANT_COUNT {
|
||||
let mut state = plantstate[plant];
|
||||
//return mapf(mMoisture_raw.getMedian(), MOIST_SENSOR_MIN_FRQ, MOIST_SENSOR_MAX_FRQ, 0, 100);
|
||||
state.a = map_range(
|
||||
FROM,
|
||||
TO,
|
||||
board.measure_moisture_hz(plant, plant_hal::Sensor::A)? as f32,
|
||||
) as u8;
|
||||
state.b = map_range(
|
||||
FROM,
|
||||
TO,
|
||||
board.measure_moisture_hz(plant, plant_hal::Sensor::B)? as f32,
|
||||
) as u8;
|
||||
state.p = map_range(
|
||||
FROM,
|
||||
TO,
|
||||
board.measure_moisture_hz(plant, plant_hal::Sensor::PUMP)? as f32,
|
||||
) as u8;
|
||||
let plant_config = config.plants[plant];
|
||||
|
||||
//FIXME how to average analyze whatever?
|
||||
if state.a < plant_config.target_moisture || state.b < plant_config.target_moisture {
|
||||
state.dry = true;
|
||||
if !enough_water {
|
||||
state.no_water = true;
|
||||
}
|
||||
}
|
||||
|
||||
let duration = Duration::minutes((60 * plant_config.pump_cooldown_min).into());
|
||||
if (board.last_pump_time(plant)? + duration) > cur {
|
||||
state.cooldown = true;
|
||||
}
|
||||
|
||||
if state.dry {
|
||||
let consecutive_pump_count = board.consecutive_pump_count(plant) + 1;
|
||||
board.store_consecutive_pump_count(plant, consecutive_pump_count);
|
||||
if consecutive_pump_count > config.max_consecutive_pump_count.into() {
|
||||
state.not_effective = true;
|
||||
board.fault(plant, true);
|
||||
}
|
||||
} else {
|
||||
board.store_consecutive_pump_count(plant, 0);
|
||||
}
|
||||
|
||||
//TODO update mqtt state here!
|
||||
}
|
||||
|
||||
if (STAY_ALIVE.load(std::sync::atomic::Ordering::Relaxed)) {
|
||||
drop(board);
|
||||
let reboot_now = Arc::new(AtomicBool::new(false));
|
||||
let _webserver = httpd(reboot_now.clone());
|
||||
wait_infinity(WaitType::StayAlive, reboot_now.clone());
|
||||
}
|
||||
|
||||
'eachplant: for plant in 0..PLANT_COUNT {
|
||||
let mut state = plantstate[plant];
|
||||
if (state.dry && !state.cooldown) {
|
||||
println!("Trying to pump with pump {} now", plant);
|
||||
let plant_config = config.plants[plant];
|
||||
|
||||
board.any_pump(true)?;
|
||||
board.store_last_pump_time(plant, cur);
|
||||
board.pump(plant, true)?;
|
||||
board.last_pump_time(plant)?;
|
||||
state.active = true;
|
||||
unsafe { vTaskDelay(plant_config.pump_time_s.into()) };
|
||||
state.after_p = map_range(
|
||||
FROM,
|
||||
TO,
|
||||
board.measure_moisture_hz(plant, plant_hal::Sensor::PUMP)? as f32,
|
||||
) as u8;
|
||||
if state.after_p < state.p + 5 {
|
||||
state.pump_error = true;
|
||||
board.fault(plant, true);
|
||||
}
|
||||
break 'eachplant;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
//check if during light time
|
||||
//lightstate += out of worktime
|
||||
//check battery level
|
||||
//lightstate += battery empty
|
||||
//check solar level if config requires
|
||||
//lightstate += stillday
|
||||
//if no preventing lightstate, enable light
|
||||
//lightstate = active
|
||||
|
||||
//keep webserver in scope
|
||||
let webserver = httpd(true);
|
||||
let delay = Delay::new_default();
|
||||
loop {
|
||||
//let freertos do shit
|
||||
delay.delay_ms(1001);
|
||||
}
|
||||
*/
|
||||
//deepsleep here?
|
||||
Ok(())
|
||||
}
|
||||
|
||||
//error codes
|
||||
//error_reading_config_after_upgrade
|
||||
//error_no_config_after_upgrade
|
||||
//error_tank_sensor_fault
|
||||
777
rust/src/plant_hal.rs
Normal file
777
rust/src/plant_hal.rs
Normal file
@@ -0,0 +1,777 @@
|
||||
//mod config;
|
||||
|
||||
use embedded_svc::wifi::{
|
||||
AccessPointConfiguration, AccessPointInfo, AuthMethod, ClientConfiguration, Configuration,
|
||||
};
|
||||
|
||||
use esp_idf_svc::eventloop::EspSystemEventLoop;
|
||||
use esp_idf_svc::mqtt::client::QoS::ExactlyOnce;
|
||||
use esp_idf_svc::mqtt::client::{EspMqttClient, MqttClientConfiguration};
|
||||
use esp_idf_svc::nvs::EspDefaultNvsPartition;
|
||||
use esp_idf_svc::wifi::config::{ScanConfig, ScanType};
|
||||
use esp_idf_svc::wifi::EspWifi;
|
||||
use plant_ctrl2::sipo::ShiftRegister40;
|
||||
|
||||
use anyhow::anyhow;
|
||||
use anyhow::{bail, Ok, Result};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::ffi::CString;
|
||||
use std::fs::File;
|
||||
use std::path::Path;
|
||||
|
||||
use std::sync::atomic::AtomicBool;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::time::Duration;
|
||||
|
||||
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||
use ds18b20::Ds18b20;
|
||||
|
||||
use embedded_hal::digital::v2::OutputPin;
|
||||
use esp_idf_hal::adc::{attenuation, AdcChannelDriver, AdcDriver};
|
||||
use esp_idf_hal::delay::Delay;
|
||||
use esp_idf_hal::gpio::{AnyInputPin, Gpio39, Gpio4, Level, PinDriver};
|
||||
use esp_idf_hal::pcnt::{
|
||||
PcntChannel, PcntChannelConfig, PcntControlMode, PcntCountMode, PcntDriver, PinIndex,
|
||||
};
|
||||
use esp_idf_hal::prelude::Peripherals;
|
||||
use esp_idf_hal::reset::ResetReason;
|
||||
use esp_idf_svc::sntp::{self, SyncStatus};
|
||||
use esp_idf_svc::systime::EspSystemTime;
|
||||
use esp_idf_sys::{vTaskDelay, EspError};
|
||||
use one_wire_bus::OneWire;
|
||||
|
||||
use crate::config::{self, Config, WifiConfig};
|
||||
use crate::STAY_ALIVE;
|
||||
|
||||
pub const PLANT_COUNT: usize = 8;
|
||||
const PINS_PER_PLANT: usize = 5;
|
||||
const PLANT_PUMP_OFFSET: usize = 0;
|
||||
const PLANT_FAULT_OFFSET: usize = 1;
|
||||
const PLANT_MOIST_PUMP_OFFSET: usize = 2;
|
||||
const PLANT_MOIST_B_OFFSET: usize = 3;
|
||||
const PLANT_MOIST_A_OFFSET: usize = 4;
|
||||
|
||||
const SPIFFS_PARTITION_NAME: &str = "storage";
|
||||
const WIFI_CONFIG_FILE: &str = "/spiffs/wifi.cfg";
|
||||
const CONFIG_FILE: &str = "/spiffs/config.cfg";
|
||||
|
||||
#[link_section = ".rtc.data"]
|
||||
static mut LAST_WATERING_TIMESTAMP: [i64; PLANT_COUNT] = [0; PLANT_COUNT];
|
||||
#[link_section = ".rtc.data"]
|
||||
static mut CONSECUTIVE_WATERING_PLANT: [u32; PLANT_COUNT] = [0; PLANT_COUNT];
|
||||
#[link_section = ".rtc.data"]
|
||||
static mut LOW_VOLTAGE_DETECTED: bool = false;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct BatteryState {
|
||||
pub state_charge_percent: u8,
|
||||
max_error_percent: u8,
|
||||
remaining_milli_ampere_hour: u32,
|
||||
max_milli_ampere_hour: u32,
|
||||
design_milli_ampere_hour: u32,
|
||||
voltage_milli_volt: u16,
|
||||
average_current_milli_ampere: u16,
|
||||
temperature_tenth_kelvin: u32,
|
||||
average_time_to_empty_minute: u16,
|
||||
average_time_to_full_minute: u16,
|
||||
average_discharge_power_cycle_milli_watt: u16,
|
||||
cycle_count: u16,
|
||||
state_health_percent: u8,
|
||||
}
|
||||
|
||||
impl Default for BatteryState {
|
||||
fn default() -> Self {
|
||||
BatteryState {
|
||||
state_charge_percent: 50,
|
||||
max_error_percent: 100,
|
||||
remaining_milli_ampere_hour: 100,
|
||||
max_milli_ampere_hour: 200,
|
||||
design_milli_ampere_hour: 200,
|
||||
voltage_milli_volt: 12,
|
||||
average_current_milli_ampere: 50,
|
||||
temperature_tenth_kelvin: 1337,
|
||||
average_time_to_empty_minute: 123,
|
||||
average_time_to_full_minute: 123,
|
||||
average_discharge_power_cycle_milli_watt: 123,
|
||||
cycle_count: 123,
|
||||
state_health_percent: 90,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct FileSystemSizeInfo {
|
||||
pub total_size: usize,
|
||||
pub used_size: usize,
|
||||
pub free_size: usize,
|
||||
}
|
||||
|
||||
#[derive(strum::Display)]
|
||||
pub enum ClearConfigType {
|
||||
WifiConfig,
|
||||
Config,
|
||||
None,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Sensor {
|
||||
A,
|
||||
B,
|
||||
PUMP,
|
||||
}
|
||||
pub trait PlantCtrlBoardInteraction {
|
||||
fn time(&mut self) -> Result<chrono::DateTime<Utc>>;
|
||||
fn wifi(&mut self, ssid: &str, password: Option<&str>, max_wait: u32) -> Result<()>;
|
||||
fn sntp(&mut self, max_wait: u32) -> Result<chrono::DateTime<Utc>>;
|
||||
fn mount_file_system(&mut self) -> Result<()>;
|
||||
fn file_system_size(&mut self) -> Result<FileSystemSizeInfo>;
|
||||
|
||||
fn battery_state(&mut self) -> Result<BatteryState>;
|
||||
|
||||
fn general_fault(&mut self, enable: bool);
|
||||
|
||||
fn is_day(&self) -> bool;
|
||||
fn water_temperature_c(&mut self) -> Result<f32>;
|
||||
fn tank_sensor_mv(&mut self) -> Result<u16>;
|
||||
|
||||
fn set_low_voltage_in_cycle(&mut self);
|
||||
fn clear_low_voltage_in_cycle(&mut self);
|
||||
fn low_voltage_in_cycle(&mut self) -> bool;
|
||||
fn any_pump(&mut self, enabled: bool) -> Result<()>;
|
||||
|
||||
//keep state during deepsleep
|
||||
fn light(&mut self, enable: bool) -> Result<()>;
|
||||
|
||||
fn measure_moisture_hz(&self, plant: usize, sensor: Sensor) -> Result<i32>;
|
||||
fn pump(&self, plant: usize, enable: bool) -> Result<()>;
|
||||
fn last_pump_time(&self, plant: usize) -> Result<chrono::DateTime<Utc>>;
|
||||
fn store_last_pump_time(&mut self, plant: usize, time: chrono::DateTime<Utc>);
|
||||
fn store_consecutive_pump_count(&mut self, plant: usize, count: u32);
|
||||
fn consecutive_pump_count(&mut self, plant: usize) -> u32;
|
||||
|
||||
//keep state during deepsleep
|
||||
fn fault(&self, plant: usize, enable: bool);
|
||||
|
||||
//config
|
||||
fn is_config_reset(&mut self) -> bool;
|
||||
fn remove_configs(&mut self) -> Result<ClearConfigType>;
|
||||
fn get_config(&mut self) -> Result<config::Config>;
|
||||
fn set_config(&mut self, wifi: &Config) -> Result<()>;
|
||||
fn get_wifi(&mut self) -> Result<config::WifiConfig>;
|
||||
fn set_wifi(&mut self, wifi: &WifiConfig) -> Result<()>;
|
||||
fn wifi_ap(&mut self) -> Result<()>;
|
||||
fn wifi_scan(&mut self) -> Result<Vec<AccessPointInfo>>;
|
||||
fn test(&mut self) -> Result<()>;
|
||||
fn is_wifi_config_file_existant(&mut self) -> bool;
|
||||
fn mqtt(&mut self, config: &Config) -> Result<()>;
|
||||
}
|
||||
|
||||
pub trait CreatePlantHal<'a> {
|
||||
fn create() -> Result<Mutex<PlantCtrlBoard<'static>>>;
|
||||
}
|
||||
|
||||
pub struct PlantHal {}
|
||||
|
||||
pub struct PlantCtrlBoard<'a> {
|
||||
shift_register: ShiftRegister40<
|
||||
PinDriver<'a, esp_idf_hal::gpio::Gpio21, esp_idf_hal::gpio::Output>,
|
||||
PinDriver<'a, esp_idf_hal::gpio::Gpio22, esp_idf_hal::gpio::Output>,
|
||||
PinDriver<'a, esp_idf_hal::gpio::Gpio19, esp_idf_hal::gpio::Output>,
|
||||
>,
|
||||
consecutive_watering_plant: Mutex<[u32; PLANT_COUNT]>,
|
||||
last_watering_timestamp: Mutex<[i64; PLANT_COUNT]>,
|
||||
low_voltage_detected: Mutex<bool>,
|
||||
tank_driver: AdcDriver<'a, esp_idf_hal::adc::ADC1>,
|
||||
tank_channel: esp_idf_hal::adc::AdcChannelDriver<'a, { attenuation::DB_11 }, Gpio39>,
|
||||
solar_is_day: PinDriver<'a, esp_idf_hal::gpio::Gpio25, esp_idf_hal::gpio::Input>,
|
||||
boot_button: PinDriver<'a, esp_idf_hal::gpio::Gpio0, esp_idf_hal::gpio::Input>,
|
||||
signal_counter: PcntDriver<'a>,
|
||||
light: PinDriver<'a, esp_idf_hal::gpio::Gpio26, esp_idf_hal::gpio::Output>,
|
||||
main_pump: PinDriver<'a, esp_idf_hal::gpio::Gpio23, esp_idf_hal::gpio::Output>,
|
||||
tank_power: PinDriver<'a, esp_idf_hal::gpio::Gpio27, esp_idf_hal::gpio::Output>,
|
||||
general_fault: PinDriver<'a, esp_idf_hal::gpio::Gpio13, esp_idf_hal::gpio::Output>,
|
||||
pub wifi_driver: EspWifi<'a>,
|
||||
one_wire_bus: OneWire<PinDriver<'a, Gpio4, esp_idf_hal::gpio::InputOutput>>,
|
||||
mqtt_client: Option<EspMqttClient<'a>>,
|
||||
}
|
||||
|
||||
impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
||||
fn battery_state(&mut self) -> Result<BatteryState> {
|
||||
return Ok(BatteryState::default());
|
||||
}
|
||||
|
||||
fn is_day(&self) -> bool {
|
||||
self.solar_is_day.get_level().into()
|
||||
}
|
||||
|
||||
fn water_temperature_c(&mut self) -> Result<f32> {
|
||||
let mut delay = Delay::new_default();
|
||||
|
||||
self.one_wire_bus
|
||||
.reset(&mut delay)
|
||||
.map_err(|err| -> anyhow::Error { anyhow!("Missing attribute: {:?}", err) })?;
|
||||
let first = self.one_wire_bus.devices(false, &mut delay).next();
|
||||
if first.is_none() {
|
||||
bail!("Not found any one wire Ds18b20");
|
||||
}
|
||||
let device_address = first
|
||||
.unwrap()
|
||||
.map_err(|err| -> anyhow::Error { anyhow!("Missing attribute: {:?}", err) })?;
|
||||
|
||||
let water_temp_sensor = Ds18b20::new::<EspError>(device_address)
|
||||
.map_err(|err| -> anyhow::Error { anyhow!("Missing attribute: {:?}", err) })?;
|
||||
|
||||
water_temp_sensor
|
||||
.start_temp_measurement(&mut self.one_wire_bus, &mut delay)
|
||||
.map_err(|err| -> anyhow::Error { anyhow!("Missing attribute: {:?}", err) })?;
|
||||
ds18b20::Resolution::Bits12.delay_for_measurement_time(&mut delay);
|
||||
let sensor_data = water_temp_sensor
|
||||
.read_data(&mut self.one_wire_bus, &mut delay)
|
||||
.map_err(|err| -> anyhow::Error { anyhow!("Missing attribute: {:?}", err) })?;
|
||||
if sensor_data.temperature == 85_f32 {
|
||||
bail!("Ds18b20 dummy temperature returned");
|
||||
}
|
||||
Ok(sensor_data.temperature)
|
||||
}
|
||||
|
||||
fn tank_sensor_mv(&mut self) -> Result<u16> {
|
||||
let delay = Delay::new_default();
|
||||
self.tank_power.set_high()?;
|
||||
//let stabilize
|
||||
delay.delay_ms(100);
|
||||
let value = self.tank_driver.read(&mut self.tank_channel)?;
|
||||
self.tank_power.set_low()?;
|
||||
Ok(value)
|
||||
}
|
||||
|
||||
fn set_low_voltage_in_cycle(&mut self) {
|
||||
*self.low_voltage_detected.get_mut().unwrap() = true;
|
||||
}
|
||||
|
||||
fn clear_low_voltage_in_cycle(&mut self) {
|
||||
*self.low_voltage_detected.get_mut().unwrap() = false;
|
||||
}
|
||||
|
||||
fn light(&mut self, enable: bool) -> Result<()> {
|
||||
self.light.set_state(enable.into())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn pump(&self, plant: usize, enable: bool) -> Result<()> {
|
||||
let index = plant * PINS_PER_PLANT + PLANT_PUMP_OFFSET;
|
||||
//currently infailable error, keep for future as result anyway
|
||||
self.shift_register.decompose()[index]
|
||||
.set_state(enable.into())
|
||||
.unwrap();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn last_pump_time(&self, plant: usize) -> Result<chrono::DateTime<Utc>> {
|
||||
let ts = unsafe { LAST_WATERING_TIMESTAMP }[plant];
|
||||
let timestamp = NaiveDateTime::from_timestamp_millis(ts)
|
||||
.ok_or(anyhow!("could not convert timestamp"))?;
|
||||
Ok(DateTime::<Utc>::from_naive_utc_and_offset(timestamp, Utc))
|
||||
}
|
||||
|
||||
fn store_last_pump_time(&mut self, plant: usize, time: chrono::DateTime<Utc>) {
|
||||
self.last_watering_timestamp.get_mut().unwrap()[plant] = time.timestamp_millis();
|
||||
}
|
||||
|
||||
fn store_consecutive_pump_count(&mut self, plant: usize, count: u32) {
|
||||
self.consecutive_watering_plant.get_mut().unwrap()[plant] = count;
|
||||
}
|
||||
|
||||
fn consecutive_pump_count(&mut self, plant: usize) -> u32 {
|
||||
return self.consecutive_watering_plant.get_mut().unwrap()[plant];
|
||||
}
|
||||
|
||||
fn fault(&self, plant: usize, enable: bool) {
|
||||
let index = plant * PINS_PER_PLANT + PLANT_FAULT_OFFSET;
|
||||
self.shift_register.decompose()[index]
|
||||
.set_state(enable.into())
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn low_voltage_in_cycle(&mut self) -> bool {
|
||||
return *self.low_voltage_detected.get_mut().unwrap();
|
||||
}
|
||||
|
||||
fn any_pump(&mut self, enable: bool) -> Result<()> {
|
||||
{
|
||||
self.main_pump.set_state(enable.into()).unwrap();
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn time(&mut self) -> Result<chrono::DateTime<Utc>> {
|
||||
let time = EspSystemTime {}.now().as_millis();
|
||||
let smaller_time = time as i64;
|
||||
let local_time = NaiveDateTime::from_timestamp_millis(smaller_time)
|
||||
.ok_or(anyhow!("could not convert timestamp"))?;
|
||||
Ok(local_time.and_utc())
|
||||
}
|
||||
|
||||
fn sntp(&mut self, max_wait_ms: u32) -> Result<chrono::DateTime<Utc>> {
|
||||
let sntp = sntp::EspSntp::new_default()?;
|
||||
let mut counter = 0;
|
||||
while sntp.get_sync_status() != SyncStatus::Completed {
|
||||
let delay = Delay::new_default();
|
||||
delay.delay_ms(100);
|
||||
counter += 100;
|
||||
if counter > max_wait_ms {
|
||||
bail!("Reached sntp timeout, aborting")
|
||||
}
|
||||
}
|
||||
|
||||
self.time()
|
||||
}
|
||||
|
||||
fn measure_moisture_hz(&self, plant: usize, sensor: Sensor) -> Result<i32> {
|
||||
self.signal_counter.counter_pause()?;
|
||||
self.signal_counter.counter_clear()?;
|
||||
//
|
||||
let offset = match sensor {
|
||||
Sensor::A => PLANT_MOIST_A_OFFSET,
|
||||
Sensor::B => PLANT_MOIST_B_OFFSET,
|
||||
Sensor::PUMP => PLANT_MOIST_PUMP_OFFSET,
|
||||
};
|
||||
let index = plant * PINS_PER_PLANT + offset;
|
||||
|
||||
let delay = Delay::new_default();
|
||||
let measurement = 100;
|
||||
let factor = 1000 / 100;
|
||||
|
||||
self.shift_register.decompose()[index].set_high().unwrap();
|
||||
//give some time to stabilize
|
||||
delay.delay_ms(10);
|
||||
self.signal_counter.counter_resume()?;
|
||||
delay.delay_ms(measurement);
|
||||
self.signal_counter.counter_pause()?;
|
||||
self.shift_register.decompose()[index].set_low().unwrap();
|
||||
let unscaled = self.signal_counter.get_counter_value()? as i32;
|
||||
let hz = unscaled * factor;
|
||||
println!("Measuring {:?} @ {} with {}", sensor, plant, hz);
|
||||
Ok(hz)
|
||||
}
|
||||
|
||||
fn general_fault(&mut self, enable: bool) {
|
||||
self.general_fault.set_state(enable.into()).unwrap();
|
||||
}
|
||||
|
||||
fn wifi_ap(&mut self) -> Result<()> {
|
||||
let apconfig = AccessPointConfiguration {
|
||||
ssid: "PlantCtrl".into(),
|
||||
auth_method: AuthMethod::None,
|
||||
ssid_hidden: false,
|
||||
..Default::default()
|
||||
};
|
||||
let clientconfig = ClientConfiguration::default();
|
||||
self.wifi_driver
|
||||
.set_configuration(&Configuration::Mixed(clientconfig, apconfig))?;
|
||||
self.wifi_driver.start()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn wifi(&mut self, ssid: &str, password: Option<&str>, max_wait: u32) -> Result<()> {
|
||||
match password {
|
||||
Some(pw) => {
|
||||
//TODO expect error due to invalid pw or similar! //call this during configuration and check if works, revert to config mode if not
|
||||
self.wifi_driver.set_configuration(&Configuration::Client(
|
||||
ClientConfiguration {
|
||||
ssid: ssid.into(),
|
||||
password: pw.into(),
|
||||
..Default::default()
|
||||
},
|
||||
))?;
|
||||
}
|
||||
None => {
|
||||
self.wifi_driver
|
||||
.set_configuration(&Configuration::Client(ClientConfiguration {
|
||||
ssid: ssid.into(),
|
||||
auth_method: AuthMethod::None,
|
||||
..Default::default()
|
||||
}))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
self.wifi_driver.start()?;
|
||||
self.wifi_driver.connect()?;
|
||||
|
||||
let delay = Delay::new_default();
|
||||
let mut counter = 0_u32;
|
||||
while !self.wifi_driver.is_connected()? {
|
||||
println!("Waiting for station connection");
|
||||
//TODO blink status?
|
||||
delay.delay_ms(250);
|
||||
counter += 250;
|
||||
if counter > max_wait {
|
||||
//ignore these errors, wifi will not be used this
|
||||
self.wifi_driver.disconnect().unwrap_or(());
|
||||
self.wifi_driver.stop().unwrap_or(());
|
||||
bail!("Did not manage wifi connection within timeout");
|
||||
}
|
||||
}
|
||||
println!("Should be connected now");
|
||||
|
||||
while !self.wifi_driver.is_up().unwrap() {
|
||||
println!("Waiting for network being up");
|
||||
delay.delay_ms(250);
|
||||
counter += 250;
|
||||
if counter > max_wait {
|
||||
//ignore these errors, wifi will not be used this
|
||||
self.wifi_driver.disconnect().unwrap_or(());
|
||||
self.wifi_driver.stop().unwrap_or(());
|
||||
bail!("Did not manage wifi connection within timeout");
|
||||
}
|
||||
}
|
||||
//update freertos registers ;)
|
||||
let address = self.wifi_driver.sta_netif().get_ip_info().unwrap();
|
||||
println!("IP info: {:?}", address);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn mount_file_system(&mut self) -> Result<()> {
|
||||
let base_path = CString::new("/spiffs")?;
|
||||
let storage = CString::new(SPIFFS_PARTITION_NAME)?;
|
||||
let conf = esp_idf_sys::esp_vfs_spiffs_conf_t {
|
||||
base_path: base_path.as_ptr(),
|
||||
partition_label: storage.as_ptr(),
|
||||
max_files: 2,
|
||||
format_if_mount_failed: true,
|
||||
};
|
||||
|
||||
unsafe {
|
||||
esp_idf_sys::esp!(esp_idf_sys::esp_vfs_spiffs_register(&conf))?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn file_system_size(&mut self) -> Result<FileSystemSizeInfo> {
|
||||
let storage = CString::new(SPIFFS_PARTITION_NAME)?;
|
||||
let mut total_size = 0;
|
||||
let mut used_size = 0;
|
||||
unsafe {
|
||||
esp_idf_sys::esp!(esp_idf_sys::esp_spiffs_info(
|
||||
storage.as_ptr(),
|
||||
&mut total_size,
|
||||
&mut used_size
|
||||
))?;
|
||||
}
|
||||
Ok(FileSystemSizeInfo {
|
||||
total_size,
|
||||
used_size,
|
||||
free_size: total_size - used_size,
|
||||
})
|
||||
}
|
||||
|
||||
fn is_config_reset(&mut self) -> bool {
|
||||
self.boot_button.get_level() == Level::Low
|
||||
}
|
||||
|
||||
fn remove_configs(&mut self) -> Result<ClearConfigType> {
|
||||
let config = Path::new(CONFIG_FILE);
|
||||
if config.exists() {
|
||||
println!("Removing config");
|
||||
std::fs::remove_file(config)?;
|
||||
return Ok(ClearConfigType::Config);
|
||||
}
|
||||
|
||||
let wifi_config = Path::new(WIFI_CONFIG_FILE);
|
||||
if wifi_config.exists() {
|
||||
println!("Removing wifi config");
|
||||
std::fs::remove_file(wifi_config)?;
|
||||
return Ok(ClearConfigType::WifiConfig);
|
||||
}
|
||||
|
||||
Ok(ClearConfigType::None)
|
||||
}
|
||||
|
||||
fn get_wifi(&mut self) -> Result<config::WifiConfig> {
|
||||
let cfg = File::open(WIFI_CONFIG_FILE)?;
|
||||
let config: WifiConfig = serde_json::from_reader(cfg)?;
|
||||
Ok(config)
|
||||
}
|
||||
|
||||
fn set_wifi(&mut self, wifi: &WifiConfig) -> Result<()> {
|
||||
let mut cfg = File::create(WIFI_CONFIG_FILE)?;
|
||||
serde_json::to_writer(&mut cfg, &wifi)?;
|
||||
println!("Wrote wifi config {}", wifi);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_config(&mut self) -> Result<config::Config> {
|
||||
let cfg = File::open(CONFIG_FILE)?;
|
||||
let config: Config = serde_json::from_reader(cfg)?;
|
||||
Ok(config)
|
||||
}
|
||||
|
||||
fn set_config(&mut self, config: &Config) -> Result<()> {
|
||||
let mut cfg = File::create(CONFIG_FILE)?;
|
||||
serde_json::to_writer(&mut cfg, &config)?;
|
||||
println!("Wrote config config {:?}", config);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn wifi_scan(&mut self) -> Result<Vec<AccessPointInfo>> {
|
||||
//remove this parts
|
||||
for i in 1..11 {
|
||||
println!("Scanning channel {}", i);
|
||||
self.wifi_driver.start_scan(
|
||||
&ScanConfig {
|
||||
scan_type: ScanType::Passive(Duration::from_secs(1)),
|
||||
show_hidden: false,
|
||||
channel: Some(i),
|
||||
..Default::default()
|
||||
},
|
||||
true,
|
||||
)?;
|
||||
let sr = self.wifi_driver.get_scan_result()?;
|
||||
for r in sr.iter() {
|
||||
println!("Found wifi {}", r.ssid);
|
||||
}
|
||||
}
|
||||
|
||||
self.wifi_driver.start_scan(
|
||||
&ScanConfig {
|
||||
scan_type: ScanType::Passive(Duration::from_secs(1)),
|
||||
show_hidden: false,
|
||||
..Default::default()
|
||||
},
|
||||
true,
|
||||
)?;
|
||||
Ok(self.wifi_driver.get_scan_result()?)
|
||||
}
|
||||
|
||||
fn test(&mut self) -> Result<()> {
|
||||
self.general_fault(true);
|
||||
unsafe { vTaskDelay(100) };
|
||||
self.general_fault(false);
|
||||
unsafe { vTaskDelay(100) };
|
||||
self.any_pump(true)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
self.any_pump(false)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
self.light(true)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
self.light(false)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
for i in 0..8 {
|
||||
self.fault(i, true);
|
||||
unsafe { vTaskDelay(500) };
|
||||
self.fault(i, false);
|
||||
unsafe { vTaskDelay(500) };
|
||||
}
|
||||
for i in 0..8 {
|
||||
self.pump(i, true)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
self.pump(i, false)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
}
|
||||
for i in 0..8 {
|
||||
self.measure_moisture_hz(i, Sensor::A)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
}
|
||||
for i in 0..8 {
|
||||
self.measure_moisture_hz(i, Sensor::B)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
}
|
||||
for i in 0..8 {
|
||||
self.measure_moisture_hz(i, Sensor::PUMP)?;
|
||||
unsafe { vTaskDelay(500) };
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn is_wifi_config_file_existant(&mut self) -> bool {
|
||||
let config = Path::new(CONFIG_FILE);
|
||||
config.exists()
|
||||
}
|
||||
|
||||
fn mqtt(&mut self, config: &Config) -> Result<()> {
|
||||
//FIXME testament
|
||||
let mqtt_client_config = MqttClientConfiguration {
|
||||
//room for improvement
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let round_trip_ok = Arc::new(AtomicBool::new(false));
|
||||
let round_trip_topic = format!("{}/internal/roundtrip", config.base_topic);
|
||||
let stay_alive_topic = format!("{}/stay_alive", config.base_topic);
|
||||
println!("Round trip topic is {}", round_trip_topic);
|
||||
println!("Stay alive topic is {}", stay_alive_topic);
|
||||
|
||||
let stay_alive_topic_copy = stay_alive_topic.clone();
|
||||
let round_trip_topic_copy = round_trip_topic.clone();
|
||||
let round_trip_ok_copy = round_trip_ok.clone();
|
||||
let mut client =
|
||||
EspMqttClient::new(&config.mqtt_url, &mqtt_client_config, move |handler| {
|
||||
match handler {
|
||||
Err(err) => println!("Ignoring damaged message {}", err),
|
||||
core::result::Result::Ok(event) => {
|
||||
match event {
|
||||
embedded_svc::mqtt::client::Event::Received(msg) => {
|
||||
let data = String::from_utf8_lossy(msg.data());
|
||||
if let Some(topic) = msg.topic() {
|
||||
//todo use enums
|
||||
if topic.eq(round_trip_topic_copy.as_str()) {
|
||||
round_trip_ok_copy
|
||||
.store(true, std::sync::atomic::Ordering::Relaxed);
|
||||
} else if topic.eq(stay_alive_topic_copy.as_str()) {
|
||||
let value = data.eq_ignore_ascii_case("true")
|
||||
|| data.eq_ignore_ascii_case("1");
|
||||
println!("Received stay alive with value {}", value);
|
||||
STAY_ALIVE
|
||||
.store(value, std::sync::atomic::Ordering::Relaxed);
|
||||
} else {
|
||||
println!("Unknown topic recieved {}", topic);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
})?;
|
||||
//subscribe to roundtrip
|
||||
|
||||
client.subscribe(round_trip_topic.as_str(), ExactlyOnce)?;
|
||||
client.subscribe(stay_alive_topic.as_str(), ExactlyOnce)?;
|
||||
//publish to roundtrip
|
||||
client.publish(
|
||||
round_trip_topic.as_str(),
|
||||
ExactlyOnce,
|
||||
false,
|
||||
"online_test".as_bytes(),
|
||||
)?;
|
||||
|
||||
let wait_for_roundtrip = 0;
|
||||
while wait_for_roundtrip < 100 {
|
||||
match round_trip_ok.load(std::sync::atomic::Ordering::Relaxed) {
|
||||
true => {
|
||||
println!("Round trip registered, proceeding");
|
||||
self.mqtt_client = Some(client);
|
||||
return Ok(());
|
||||
}
|
||||
false => {
|
||||
unsafe { vTaskDelay(10) };
|
||||
}
|
||||
}
|
||||
}
|
||||
bail!("Mqtt did not complete roundtrip in time");
|
||||
}
|
||||
}
|
||||
|
||||
impl CreatePlantHal<'_> for PlantHal {
|
||||
fn create() -> Result<Mutex<PlantCtrlBoard<'static>>> {
|
||||
let peripherals = Peripherals::take()?;
|
||||
|
||||
let clock = PinDriver::output(peripherals.pins.gpio21)?;
|
||||
let latch = PinDriver::output(peripherals.pins.gpio22)?;
|
||||
let data = PinDriver::output(peripherals.pins.gpio19)?;
|
||||
|
||||
let one_wire_pin = PinDriver::input_output_od(peripherals.pins.gpio4)?;
|
||||
//TODO make to none if not possible to init
|
||||
|
||||
//init,reset rtc memory depending on cause
|
||||
let reasons = ResetReason::get();
|
||||
let reset_store = match reasons {
|
||||
ResetReason::Software => false,
|
||||
ResetReason::ExternalPin => false,
|
||||
ResetReason::Watchdog => true,
|
||||
ResetReason::Sdio => true,
|
||||
ResetReason::Panic => true,
|
||||
ResetReason::InterruptWatchdog => true,
|
||||
ResetReason::PowerOn => true,
|
||||
ResetReason::Unknown => true,
|
||||
ResetReason::Brownout => true,
|
||||
ResetReason::TaskWatchdog => true,
|
||||
ResetReason::DeepSleep => false,
|
||||
};
|
||||
if reset_store {
|
||||
println!("Clear and reinit RTC store");
|
||||
unsafe {
|
||||
LAST_WATERING_TIMESTAMP = [0; PLANT_COUNT];
|
||||
CONSECUTIVE_WATERING_PLANT = [0; PLANT_COUNT];
|
||||
LOW_VOLTAGE_DETECTED = false;
|
||||
};
|
||||
} else {
|
||||
println!("Keeping RTC store");
|
||||
}
|
||||
|
||||
let mut counter_unit1 = PcntDriver::new(
|
||||
peripherals.pcnt0,
|
||||
Some(peripherals.pins.gpio18),
|
||||
Option::<AnyInputPin>::None,
|
||||
Option::<AnyInputPin>::None,
|
||||
Option::<AnyInputPin>::None,
|
||||
)?;
|
||||
|
||||
println!("Channel config start");
|
||||
|
||||
counter_unit1.channel_config(
|
||||
PcntChannel::Channel0,
|
||||
PinIndex::Pin0,
|
||||
PinIndex::Pin1,
|
||||
&PcntChannelConfig {
|
||||
lctrl_mode: PcntControlMode::Reverse,
|
||||
hctrl_mode: PcntControlMode::Keep,
|
||||
pos_mode: PcntCountMode::Decrement,
|
||||
neg_mode: PcntCountMode::Increment,
|
||||
counter_h_lim: i16::MAX,
|
||||
counter_l_lim: 0,
|
||||
},
|
||||
)?;
|
||||
|
||||
println!("Setup filter");
|
||||
|
||||
//TODO validate filter value! currently max allowed value
|
||||
counter_unit1.set_filter_value(1023)?;
|
||||
counter_unit1.filter_enable()?;
|
||||
|
||||
println!("Wifi start");
|
||||
|
||||
let sys_loop = EspSystemEventLoop::take()?;
|
||||
let nvs = EspDefaultNvsPartition::take()?;
|
||||
let wifi_driver = EspWifi::new(peripherals.modem, sys_loop, Some(nvs))?;
|
||||
|
||||
let shift_register = ShiftRegister40::new(clock, latch, data);
|
||||
let last_watering_timestamp = Mutex::new(unsafe { LAST_WATERING_TIMESTAMP });
|
||||
let consecutive_watering_plant = Mutex::new(unsafe { CONSECUTIVE_WATERING_PLANT });
|
||||
let low_voltage_detected = Mutex::new(unsafe { LOW_VOLTAGE_DETECTED });
|
||||
let tank_driver =
|
||||
AdcDriver::new(peripherals.adc1, &esp_idf_hal::adc::config::Config::new())?;
|
||||
let tank_channel: AdcChannelDriver<'_, { attenuation::DB_11 }, Gpio39> =
|
||||
AdcChannelDriver::new(peripherals.pins.gpio39)?;
|
||||
let solar_is_day = PinDriver::input(peripherals.pins.gpio25)?;
|
||||
let boot_button = PinDriver::input(peripherals.pins.gpio0)?;
|
||||
let light = PinDriver::output(peripherals.pins.gpio26)?;
|
||||
let main_pump = PinDriver::output(peripherals.pins.gpio23)?;
|
||||
let tank_power = PinDriver::output(peripherals.pins.gpio27)?;
|
||||
let general_fault = PinDriver::output(peripherals.pins.gpio13)?;
|
||||
let one_wire_bus = OneWire::new(one_wire_pin)
|
||||
.map_err(|err| -> anyhow::Error { anyhow!("Missing attribute: {:?}", err) })?;
|
||||
|
||||
println!("After stuff");
|
||||
|
||||
let rv = Mutex::new(PlantCtrlBoard {
|
||||
shift_register,
|
||||
last_watering_timestamp,
|
||||
consecutive_watering_plant,
|
||||
low_voltage_detected,
|
||||
tank_driver,
|
||||
tank_channel,
|
||||
solar_is_day,
|
||||
boot_button,
|
||||
light,
|
||||
main_pump,
|
||||
tank_power,
|
||||
general_fault,
|
||||
one_wire_bus,
|
||||
signal_counter: counter_unit1,
|
||||
wifi_driver,
|
||||
mqtt_client: None,
|
||||
});
|
||||
Ok(rv)
|
||||
}
|
||||
}
|
||||
150
rust/src/sipo.rs
Normal file
150
rust/src/sipo.rs
Normal file
@@ -0,0 +1,150 @@
|
||||
//! Serial-in parallel-out shift register
|
||||
|
||||
use core::cell::RefCell;
|
||||
use core::mem::{self, MaybeUninit};
|
||||
|
||||
use crate::hal::digital::v2::OutputPin;
|
||||
|
||||
trait ShiftRegisterInternal {
|
||||
fn update(&self, index: usize, command: bool) -> Result<(), ()>;
|
||||
}
|
||||
|
||||
/// Output pin of the shift register
|
||||
pub struct ShiftRegisterPin<'a> {
|
||||
shift_register: &'a dyn ShiftRegisterInternal,
|
||||
index: usize,
|
||||
}
|
||||
|
||||
impl<'a> ShiftRegisterPin<'a> {
|
||||
fn new(shift_register: &'a dyn ShiftRegisterInternal, index: usize) -> Self {
|
||||
ShiftRegisterPin {
|
||||
shift_register,
|
||||
index,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl OutputPin for ShiftRegisterPin<'_> {
|
||||
type Error = ();
|
||||
|
||||
fn set_low(&mut self) -> Result<(), Self::Error> {
|
||||
self.shift_register.update(self.index, false)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn set_high(&mut self) -> Result<(), Self::Error> {
|
||||
self.shift_register.update(self.index, true)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! ShiftRegisterBuilder {
|
||||
($name: ident, $size: expr) => {
|
||||
/// Serial-in parallel-out shift register
|
||||
pub struct $name<Pin1, Pin2, Pin3>
|
||||
where
|
||||
Pin1: OutputPin,
|
||||
Pin2: OutputPin,
|
||||
Pin3: OutputPin,
|
||||
{
|
||||
clock: RefCell<Pin1>,
|
||||
latch: RefCell<Pin2>,
|
||||
data: RefCell<Pin3>,
|
||||
output_state: RefCell<[bool; $size]>,
|
||||
}
|
||||
|
||||
impl<Pin1, Pin2, Pin3> ShiftRegisterInternal for $name<Pin1, Pin2, Pin3>
|
||||
where
|
||||
Pin1: OutputPin,
|
||||
Pin2: OutputPin,
|
||||
Pin3: OutputPin,
|
||||
{
|
||||
/// Sets the value of the shift register output at `index` to value `command`
|
||||
fn update(&self, index: usize, command: bool) -> Result<(), ()> {
|
||||
self.output_state.borrow_mut()[index] = command;
|
||||
let output_state = self.output_state.borrow();
|
||||
self.latch.borrow_mut().set_low().map_err(|_e| ())?;
|
||||
|
||||
for i in 1..=output_state.len() {
|
||||
if output_state[output_state.len() - i] {
|
||||
self.data.borrow_mut().set_high().map_err(|_e| ())?;
|
||||
} else {
|
||||
self.data.borrow_mut().set_low().map_err(|_e| ())?;
|
||||
}
|
||||
self.clock.borrow_mut().set_high().map_err(|_e| ())?;
|
||||
self.clock.borrow_mut().set_low().map_err(|_e| ())?;
|
||||
}
|
||||
|
||||
self.latch.borrow_mut().set_high().map_err(|_e| ())?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<Pin1, Pin2, Pin3> $name<Pin1, Pin2, Pin3>
|
||||
where
|
||||
Pin1: OutputPin,
|
||||
Pin2: OutputPin,
|
||||
Pin3: OutputPin,
|
||||
{
|
||||
/// Creates a new SIPO shift register from clock, latch, and data output pins
|
||||
pub fn new(clock: Pin1, latch: Pin2, data: Pin3) -> Self {
|
||||
$name {
|
||||
clock: RefCell::new(clock),
|
||||
latch: RefCell::new(latch),
|
||||
data: RefCell::new(data),
|
||||
output_state: RefCell::new([false; $size]),
|
||||
}
|
||||
}
|
||||
|
||||
/// Get embedded-hal output pins to control the shift register outputs
|
||||
pub fn decompose(&self) -> [ShiftRegisterPin; $size] {
|
||||
// Create an uninitialized array of `MaybeUninit`. The `assume_init` is
|
||||
// safe because the type we are claiming to have initialized here is a
|
||||
// bunch of `MaybeUninit`s, which do not require initialization.
|
||||
let mut pins: [MaybeUninit<ShiftRegisterPin>; $size] =
|
||||
unsafe { MaybeUninit::uninit().assume_init() };
|
||||
|
||||
// Dropping a `MaybeUninit` does nothing, so if there is a panic during this loop,
|
||||
// we have a memory leak, but there is no memory safety issue.
|
||||
for (index, elem) in pins.iter_mut().enumerate() {
|
||||
elem.write(ShiftRegisterPin::new(self, index));
|
||||
}
|
||||
|
||||
// Everything is initialized. Transmute the array to the
|
||||
// initialized type.
|
||||
unsafe { mem::transmute::<_, [ShiftRegisterPin; $size]>(pins) }
|
||||
}
|
||||
|
||||
/// Consume the shift register and return the original clock, latch, and data output pins
|
||||
pub fn release(self) -> (Pin1, Pin2, Pin3) {
|
||||
let Self {
|
||||
clock,
|
||||
latch,
|
||||
data,
|
||||
output_state: _,
|
||||
} = self;
|
||||
(clock.into_inner(), latch.into_inner(), data.into_inner())
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ShiftRegisterBuilder!(ShiftRegister8, 8);
|
||||
ShiftRegisterBuilder!(ShiftRegister16, 16);
|
||||
ShiftRegisterBuilder!(ShiftRegister24, 24);
|
||||
ShiftRegisterBuilder!(ShiftRegister32, 32);
|
||||
ShiftRegisterBuilder!(ShiftRegister40, 40);
|
||||
ShiftRegisterBuilder!(ShiftRegister48, 48);
|
||||
ShiftRegisterBuilder!(ShiftRegister56, 56);
|
||||
ShiftRegisterBuilder!(ShiftRegister64, 64);
|
||||
ShiftRegisterBuilder!(ShiftRegister72, 72);
|
||||
ShiftRegisterBuilder!(ShiftRegister80, 80);
|
||||
ShiftRegisterBuilder!(ShiftRegister88, 88);
|
||||
ShiftRegisterBuilder!(ShiftRegister96, 96);
|
||||
ShiftRegisterBuilder!(ShiftRegister104, 104);
|
||||
ShiftRegisterBuilder!(ShiftRegister112, 112);
|
||||
ShiftRegisterBuilder!(ShiftRegister120, 120);
|
||||
ShiftRegisterBuilder!(ShiftRegister128, 128);
|
||||
|
||||
/// 8 output serial-in parallel-out shift register
|
||||
pub type ShiftRegister<Pin1, Pin2, Pin3> = ShiftRegister8<Pin1, Pin2, Pin3>;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user