├── .gitignore ├── LICENSE ├── README.md ├── case ├── Makefile ├── README.md ├── bottom-with-lid.stl ├── bottom.stl ├── case.scad ├── grid.scad ├── top-with-lid.stl └── top.stl ├── client.rb ├── firmware ├── .gitignore ├── Gemfile ├── Gemfile.lock ├── Makefile ├── README.md ├── data │ ├── app.js │ ├── config.json │ └── index.html ├── platformio.ini ├── src │ ├── firmware.ino │ ├── measurement.cpp │ ├── measurement.h │ ├── tp6703.cpp │ └── tp6703.h └── utils │ ├── esp_client.rb │ ├── i2c-client.rb │ ├── mqtt-to-influx.rb │ ├── prog.rb │ └── serial-client.rb ├── pcb ├── README.md ├── artwork.pretty │ ├── gorby.kicad_mod │ └── rubysan.kicad_mod ├── fp-lib-table ├── gerbers-smd.zip ├── gerbers.zip ├── pcb-smd-cache.lib ├── pcb-smd.kicad_pcb ├── pcb-smd.pro ├── pcb-smd.sch ├── pm_25-cache.lib ├── pm_25-rescue.dcm ├── pm_25-rescue.lib ├── pm_25.dcm ├── pm_25.kicad_pcb ├── pm_25.lib ├── pm_25.net2 ├── pm_25.pretty │ ├── SI7021Breakout.kicad_mod │ └── USBBreakout.kicad_mod ├── pm_25.pro ├── pm_25.sch └── sym-lib-table └── pics ├── grafana.png ├── project-small.jpeg └── project.jpeg /.gitignore: -------------------------------------------------------------------------------- 1 | # Reports 2 | *.rpt 3 | 4 | # CPL data generated from PCB 5 | *.pos 6 | 7 | # KiCAD backup 8 | *.bak 9 | *.bck 10 | *.kicad_pcb-bak 11 | *.sch-bak 12 | _saved_* 13 | 14 | # Netlists 15 | *.net 16 | 17 | # BOM plugin output 18 | *.csv.tmp 19 | *.csv 20 | *.xml 21 | 22 | # Gerbers 23 | *.gbr 24 | 25 | # Drill files 26 | *.drl 27 | 28 | # Footprint info cache 29 | fp-info-cache 30 | 31 | # Autosave files 32 | _autosave-* 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | ## PCB Artwork: 2 | 3 | PCB Artwork is Copyright 2021, Hiroko Ebisawa. 4 | 5 | ## Everything else in this repository: 6 | 7 | This is free and unencumbered software released into the public domain. 8 | 9 | Anyone is free to copy, modify, publish, use, compile, sell, or 10 | distribute this software, either in source code form or as a compiled 11 | binary, for any purpose, commercial or non-commercial, and by any 12 | means. 13 | 14 | In jurisdictions that recognize copyright laws, the author or authors 15 | of this software dedicate any and all copyright interest in the 16 | software to the public domain. We make this dedication for the benefit 17 | of the public at large and to the detriment of our heirs and 18 | successors. We intend this dedication to be an overt act of 19 | relinquishment in perpetuity of all present and future rights to this 20 | software under copyright law. 21 | 22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 25 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 26 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 27 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 28 | OTHER DEALINGS IN THE SOFTWARE. 29 | 30 | For more information, please refer to 31 | 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # My ESP8266 + Plantower AQ sensor project 2 | 3 | This project is an ESP8266 combined with an AQ sensor and temp / humidity 4 | sensor. I have these set up around my house so I can monitor air quality and 5 | temp. The sensor publishes data to an MQTT server, then I have a listener that 6 | connects to the MQTT server and writes all of the AQ data to an Influx 7 | database. I'm using Grafana to graph the data in the InfluxDB. 8 | 9 | ## Overview 10 | 11 | Here is a photo of the completed project: 12 | 13 | ![Photo of Project](pics/project-small.jpeg) 14 | 15 | The sensor gets power over USB. When you power the sensor up, it will create 16 | an ad-hoc wifi network. You can connect to that network then configure the 17 | sensor with the network you want it to connect to. 18 | 19 | ## Hardware 20 | 21 | The PCB is found in the [pcb](pcb) directory. It's just a Kicad project. The 22 | [README](pcb/README.md) in that folder has more information about the hardware 23 | side of this project (including parts, etc). 24 | 25 | ## Firmware 26 | 27 | The firmware is found in the [firmware](firmware) directory. The 28 | [README](firmware/README.md) file in that folder has more information about the 29 | firmware side of this project. 30 | 31 | ## Grafana 32 | 33 | Here is a sample graph of the data: 34 | 35 | ![Grafana screenshot](pics/grafana.png) 36 | -------------------------------------------------------------------------------- /case/Makefile: -------------------------------------------------------------------------------- 1 | OPENSCAD = /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD 2 | 3 | %.stl: case.scad 4 | $(OPENSCAD) -D'rendering="$(basename $@)"' $< -o $@ 5 | 6 | all: top.stl bottom.stl top-with-lid.stl bottom-with-lid.stl 7 | 8 | clean: 9 | rm -f *.stl 10 | -------------------------------------------------------------------------------- /case/README.md: -------------------------------------------------------------------------------- 1 | # My ESP8266 + Plantower AQ Sensor Project 3D printed case 2 | 3 | This is the 3D printed case for the project. I checked in all of the STL files 4 | for the case, so you should be able to just print them directly. I made two 5 | versions of the case, one with most of the electronics exposed (because I think 6 | it looks neat), and one where the electronics are covered but there are some 7 | holes to let air flow. The one with holes is more targeted toward outdoor 8 | installations, but obviously it's not totally weatherproof. 9 | 10 | Both cases come in two parts, `top.stl` and `bottom.stl` are the files for the 11 | "electronics exposed" version. `top-with-lid.stl` and `bottom-with-lid.stl` 12 | are for the other version. 13 | 14 | These STL files are generated using OpenSCAD and the source file is 15 | `case.scad`. Feel free to mess around with it and customize the case! For 16 | example maybe try changing "TendAir" to some other text. lol 17 | -------------------------------------------------------------------------------- /case/bottom.stl: -------------------------------------------------------------------------------- 1 | solid OpenSCAD_Model 2 | facet normal 0 1 -0 3 | outer loop 4 | vertex 21.75 -22.9 1.5 5 | vertex 16 -22.9 7.25 6 | vertex 21.75 -22.9 7.25 7 | endloop 8 | endfacet 9 | facet normal 0 1 0 10 | outer loop 11 | vertex 16 -22.9 7.25 12 | vertex 21.75 -22.9 1.5 13 | vertex 16 -22.9 1.5 14 | endloop 15 | endfacet 16 | facet normal 0 1 -0 17 | outer loop 18 | vertex 54.4 -22.9 1.5 19 | vertex 48.65 -22.9 7.25 20 | vertex 54.4 -22.9 7.25 21 | endloop 22 | endfacet 23 | facet normal 0 1 0 24 | outer loop 25 | vertex 48.65 -22.9 7.25 26 | vertex 54.4 -22.9 1.5 27 | vertex 48.65 -22.9 1.5 28 | endloop 29 | endfacet 30 | facet normal 1 -0 0 31 | outer loop 32 | vertex 21.75 -24.9 7.25 33 | vertex 21.75 -22.9 1.5 34 | vertex 21.75 -22.9 7.25 35 | endloop 36 | endfacet 37 | facet normal 1 0 0 38 | outer loop 39 | vertex 21.75 -22.9 1.5 40 | vertex 21.75 -24.9 7.25 41 | vertex 21.75 -24.9 1.5 42 | endloop 43 | endfacet 44 | facet normal 1 -0 0 45 | outer loop 46 | vertex 21.75 -28.2 7.25 47 | vertex 21.75 -26.7 1.5 48 | vertex 21.75 -26.7 7.25 49 | endloop 50 | endfacet 51 | facet normal 1 0 0 52 | outer loop 53 | vertex 21.75 -28.2 0 54 | vertex 21.75 -26.7 1.5 55 | vertex 21.75 -28.2 7.25 56 | endloop 57 | endfacet 58 | facet normal 1 0 0 59 | outer loop 60 | vertex 21.75 -26.7 1.5 61 | vertex 21.75 -28.2 0 62 | vertex 21.75 -26.7 0 63 | endloop 64 | endfacet 65 | facet normal 0 -1 0 66 | outer loop 67 | vertex 14.5 -28.2 0 68 | vertex 21.75 -28.2 7.25 69 | vertex 14.5 -28.2 7.25 70 | endloop 71 | endfacet 72 | facet normal 0 -1 -0 73 | outer loop 74 | vertex 21.75 -28.2 7.25 75 | vertex 14.5 -28.2 0 76 | vertex 21.75 -28.2 0 77 | endloop 78 | endfacet 79 | facet normal 0 -1 0 80 | outer loop 81 | vertex 48.65 -28.2 0 82 | vertex 55.9 -28.2 7.25 83 | vertex 48.65 -28.2 7.25 84 | endloop 85 | endfacet 86 | facet normal 0 -1 -0 87 | outer loop 88 | vertex 55.9 -28.2 7.25 89 | vertex 48.65 -28.2 0 90 | vertex 55.9 -28.2 0 91 | endloop 92 | endfacet 93 | facet normal -1 0 0 94 | outer loop 95 | vertex 48.65 -24.9 1.5 96 | vertex 48.65 -22.9 7.25 97 | vertex 48.65 -22.9 1.5 98 | endloop 99 | endfacet 100 | facet normal -1 -0 0 101 | outer loop 102 | vertex 48.65 -22.9 7.25 103 | vertex 48.65 -24.9 1.5 104 | vertex 48.65 -24.9 7.25 105 | endloop 106 | endfacet 107 | facet normal -1 0 0 108 | outer loop 109 | vertex 48.65 -28.2 0 110 | vertex 48.65 -26.7 1.5 111 | vertex 48.65 -26.7 0 112 | endloop 113 | endfacet 114 | facet normal -1 0 0 115 | outer loop 116 | vertex 48.65 -28.2 7.25 117 | vertex 48.65 -26.7 1.5 118 | vertex 48.65 -28.2 0 119 | endloop 120 | endfacet 121 | facet normal -1 0 0 122 | outer loop 123 | vertex 48.65 -26.7 1.5 124 | vertex 48.65 -28.2 7.25 125 | vertex 48.65 -26.7 7.25 126 | endloop 127 | endfacet 128 | facet normal 0 0 1 129 | outer loop 130 | vertex 54.4 -1.5 1.5 131 | vertex 48.65 -22.9 1.5 132 | vertex 54.4 -22.9 1.5 133 | endloop 134 | endfacet 135 | facet normal 0 0 1 136 | outer loop 137 | vertex 21.75 -24.9 1.5 138 | vertex 48.65 -24.9 1.5 139 | vertex 48.65 -22.9 1.5 140 | endloop 141 | endfacet 142 | facet normal 0 0 1 143 | outer loop 144 | vertex 21.75 -24.9 1.5 145 | vertex 48.65 -22.9 1.5 146 | vertex 21.75 -22.9 1.5 147 | endloop 148 | endfacet 149 | facet normal 0 0 1 150 | outer loop 151 | vertex 54.4 -1.5 1.5 152 | vertex 21.75 -22.9 1.5 153 | vertex 48.65 -22.9 1.5 154 | endloop 155 | endfacet 156 | facet normal -0 0 1 157 | outer loop 158 | vertex 16 -1.5 1.5 159 | vertex 21.75 -22.9 1.5 160 | vertex 54.4 -1.5 1.5 161 | endloop 162 | endfacet 163 | facet normal 0 0 1 164 | outer loop 165 | vertex 21.75 -22.9 1.5 166 | vertex 16 -1.5 1.5 167 | vertex 16 -22.9 1.5 168 | endloop 169 | endfacet 170 | facet normal -0 0 1 171 | outer loop 172 | vertex 48.65 -24.9 1.5 173 | vertex 54.4 -26.7 1.5 174 | vertex 54.4 -24.9 1.5 175 | endloop 176 | endfacet 177 | facet normal 0 0 1 178 | outer loop 179 | vertex 54.4 -26.7 1.5 180 | vertex 48.65 -24.9 1.5 181 | vertex 48.65 -26.7 1.5 182 | endloop 183 | endfacet 184 | facet normal 0 0 1 185 | outer loop 186 | vertex 48.65 -24.9 1.5 187 | vertex 21.75 -24.9 1.5 188 | vertex 48.65 -26.7 1.5 189 | endloop 190 | endfacet 191 | facet normal 0 0 1 192 | outer loop 193 | vertex 21.75 -24.9 1.5 194 | vertex 21.75 -26.7 1.5 195 | vertex 48.65 -26.7 1.5 196 | endloop 197 | endfacet 198 | facet normal -0 0 1 199 | outer loop 200 | vertex 16 -24.9 1.5 201 | vertex 21.75 -26.7 1.5 202 | vertex 21.75 -24.9 1.5 203 | endloop 204 | endfacet 205 | facet normal 0 0 1 206 | outer loop 207 | vertex 21.75 -26.7 1.5 208 | vertex 16 -24.9 1.5 209 | vertex 16 -26.7 1.5 210 | endloop 211 | endfacet 212 | facet normal 0 -1 0 213 | outer loop 214 | vertex 21.75 -26.7 0 215 | vertex 48.65 -26.7 1.5 216 | vertex 21.75 -26.7 1.5 217 | endloop 218 | endfacet 219 | facet normal 0 -1 -0 220 | outer loop 221 | vertex 48.65 -26.7 1.5 222 | vertex 21.75 -26.7 0 223 | vertex 48.65 -26.7 0 224 | endloop 225 | endfacet 226 | facet normal 0 0 -1 227 | outer loop 228 | vertex 21.75 -28.2 0 229 | vertex 14.5 -28.2 0 230 | vertex 21.75 -26.7 0 231 | endloop 232 | endfacet 233 | facet normal 0 0 -1 234 | outer loop 235 | vertex 48.65 -26.7 0 236 | vertex 55.9 -28.2 0 237 | vertex 48.65 -28.2 0 238 | endloop 239 | endfacet 240 | facet normal 0 0 -1 241 | outer loop 242 | vertex 55.9 -28.2 0 243 | vertex 48.65 -26.7 0 244 | vertex 55.9 0 0 245 | endloop 246 | endfacet 247 | facet normal 0 0 -1 248 | outer loop 249 | vertex 21.75 -26.7 0 250 | vertex 55.9 0 0 251 | vertex 48.65 -26.7 0 252 | endloop 253 | endfacet 254 | facet normal 0 0 -1 255 | outer loop 256 | vertex 14.5 -26.7 0 257 | vertex 21.75 -26.7 0 258 | vertex 14.5 -28.2 0 259 | endloop 260 | endfacet 261 | facet normal 0 0 -1 262 | outer loop 263 | vertex 0 0 0 264 | vertex 21.75 -26.7 0 265 | vertex 14.5 -26.7 0 266 | endloop 267 | endfacet 268 | facet normal 0 0 -1 269 | outer loop 270 | vertex 0 0 0 271 | vertex 14.5 -26.7 0 272 | vertex 0 -26.7 0 273 | endloop 274 | endfacet 275 | facet normal 0 0 -1 276 | outer loop 277 | vertex 21.75 -26.7 0 278 | vertex 0 0 0 279 | vertex 55.9 0 0 280 | endloop 281 | endfacet 282 | facet normal 1 -0 0 283 | outer loop 284 | vertex 16 -22.9 7.25 285 | vertex 16 -1.5 1.5 286 | vertex 16 -1.5 7.25 287 | endloop 288 | endfacet 289 | facet normal 1 0 0 290 | outer loop 291 | vertex 16 -1.5 1.5 292 | vertex 16 -22.9 7.25 293 | vertex 16 -22.9 1.5 294 | endloop 295 | endfacet 296 | facet normal 1 0 0 297 | outer loop 298 | vertex 16 -22.9 10.8 299 | vertex 16 -24.9 7.25 300 | vertex 16 -22.9 7.25 301 | endloop 302 | endfacet 303 | facet normal 1 -0 0 304 | outer loop 305 | vertex 16 -26.7 10.8 306 | vertex 16 -24.9 7.25 307 | vertex 16 -22.9 10.8 308 | endloop 309 | endfacet 310 | facet normal 1 0 0 311 | outer loop 312 | vertex 16 -26.7 7.25 313 | vertex 16 -24.9 7.25 314 | vertex 16 -26.7 10.8 315 | endloop 316 | endfacet 317 | facet normal 1 0 0 318 | outer loop 319 | vertex 16 -24.9 7.25 320 | vertex 16 -26.7 7.25 321 | vertex 16 -24.9 1.5 322 | endloop 323 | endfacet 324 | facet normal 1 0 0 325 | outer loop 326 | vertex 16 -24.9 1.5 327 | vertex 16 -26.7 7.25 328 | vertex 16 -26.7 1.5 329 | endloop 330 | endfacet 331 | facet normal -1 0 0 332 | outer loop 333 | vertex 54.4 -24.9 1.5 334 | vertex 54.4 -26.7 1.5 335 | vertex 54.4 -24.9 7.25 336 | endloop 337 | endfacet 338 | facet normal -1 0 0 339 | outer loop 340 | vertex 54.4 -1.5 1.5 341 | vertex 54.4 -18.7 6.275 342 | vertex 54.4 -1.5 21.8 343 | endloop 344 | endfacet 345 | facet normal -1 0 0 346 | outer loop 347 | vertex 54.4 -22.9 1.5 348 | vertex 54.4 -18.7 6.275 349 | vertex 54.4 -1.5 1.5 350 | endloop 351 | endfacet 352 | facet normal -1 0 0 353 | outer loop 354 | vertex 54.4 -22.9 7.25 355 | vertex 54.4 -21.15 6.275 356 | vertex 54.4 -22.9 1.5 357 | endloop 358 | endfacet 359 | facet normal -1 -0 0 360 | outer loop 361 | vertex 54.4 -18.7 6.275 362 | vertex 54.4 -22.9 1.5 363 | vertex 54.4 -21.15 6.275 364 | endloop 365 | endfacet 366 | facet normal -1 0 0 367 | outer loop 368 | vertex 54.4 -18.7 20.725 369 | vertex 54.4 -1.5 21.8 370 | vertex 54.4 -18.7 6.275 371 | endloop 372 | endfacet 373 | facet normal -1 0 0 374 | outer loop 375 | vertex 54.4 -26.7 21.8 376 | vertex 54.4 -18.7 20.725 377 | vertex 54.4 -21.15 20.725 378 | endloop 379 | endfacet 380 | facet normal -1 0 0 381 | outer loop 382 | vertex 54.4 -21.15 6.275 383 | vertex 54.4 -22.9 7.25 384 | vertex 54.4 -21.15 20.725 385 | endloop 386 | endfacet 387 | facet normal -1 0 0 388 | outer loop 389 | vertex 54.4 -24.9 7.25 390 | vertex 54.4 -21.15 20.725 391 | vertex 54.4 -22.9 7.25 392 | endloop 393 | endfacet 394 | facet normal -1 0 0 395 | outer loop 396 | vertex 54.4 -26.7 7.25 397 | vertex 54.4 -24.9 7.25 398 | vertex 54.4 -26.7 1.5 399 | endloop 400 | endfacet 401 | facet normal -1 0 0 402 | outer loop 403 | vertex 54.4 -26.7 21.8 404 | vertex 54.4 -24.9 7.25 405 | vertex 54.4 -26.7 7.25 406 | endloop 407 | endfacet 408 | facet normal -1 0 0 409 | outer loop 410 | vertex 54.4 -18.7 20.725 411 | vertex 54.4 -26.7 21.8 412 | vertex 54.4 -1.5 21.8 413 | endloop 414 | endfacet 415 | facet normal -1 0 0 416 | outer loop 417 | vertex 54.4 -24.9 7.25 418 | vertex 54.4 -26.7 21.8 419 | vertex 54.4 -21.15 20.725 420 | endloop 421 | endfacet 422 | facet normal -0 0 1 423 | outer loop 424 | vertex 54.4 -26.7 7.25 425 | vertex 55.9 -28.2 7.25 426 | vertex 55.9 -26.7 7.25 427 | endloop 428 | endfacet 429 | facet normal 0 0 1 430 | outer loop 431 | vertex 48.65 -28.2 7.25 432 | vertex 54.4 -26.7 7.25 433 | vertex 48.65 -26.7 7.25 434 | endloop 435 | endfacet 436 | facet normal 0 0 1 437 | outer loop 438 | vertex 54.4 -26.7 7.25 439 | vertex 48.65 -28.2 7.25 440 | vertex 55.9 -28.2 7.25 441 | endloop 442 | endfacet 443 | facet normal -0 0 1 444 | outer loop 445 | vertex 16 -26.7 7.25 446 | vertex 21.75 -28.2 7.25 447 | vertex 21.75 -26.7 7.25 448 | endloop 449 | endfacet 450 | facet normal 0 0 1 451 | outer loop 452 | vertex 14.5 -28.2 7.25 453 | vertex 16 -26.7 7.25 454 | vertex 14.5 -26.7 7.25 455 | endloop 456 | endfacet 457 | facet normal 0 0 1 458 | outer loop 459 | vertex 16 -26.7 7.25 460 | vertex 14.5 -28.2 7.25 461 | vertex 21.75 -28.2 7.25 462 | endloop 463 | endfacet 464 | facet normal -0 0 1 465 | outer loop 466 | vertex 48.65 -22.9 7.25 467 | vertex 54.4 -24.9 7.25 468 | vertex 54.4 -22.9 7.25 469 | endloop 470 | endfacet 471 | facet normal 0 0 1 472 | outer loop 473 | vertex 54.4 -24.9 7.25 474 | vertex 48.65 -22.9 7.25 475 | vertex 48.65 -24.9 7.25 476 | endloop 477 | endfacet 478 | facet normal -0 0 1 479 | outer loop 480 | vertex 16 -22.9 7.25 481 | vertex 21.75 -24.9 7.25 482 | vertex 21.75 -22.9 7.25 483 | endloop 484 | endfacet 485 | facet normal 0 0 1 486 | outer loop 487 | vertex 21.75 -24.9 7.25 488 | vertex 16 -22.9 7.25 489 | vertex 16 -24.9 7.25 490 | endloop 491 | endfacet 492 | facet normal 0 -1 0 493 | outer loop 494 | vertex 54.4 -26.7 7.25 495 | vertex 55.9 -26.7 21.8 496 | vertex 54.4 -26.7 21.8 497 | endloop 498 | endfacet 499 | facet normal 0 -1 -0 500 | outer loop 501 | vertex 55.9 -26.7 21.8 502 | vertex 54.4 -26.7 7.25 503 | vertex 55.9 -26.7 7.25 504 | endloop 505 | endfacet 506 | facet normal 0 -1 0 507 | outer loop 508 | vertex 14.5 -26.7 7.25 509 | vertex 16 -26.7 10.8 510 | vertex 14.5 -26.7 10.8 511 | endloop 512 | endfacet 513 | facet normal 0 -1 -0 514 | outer loop 515 | vertex 16 -26.7 10.8 516 | vertex 14.5 -26.7 7.25 517 | vertex 16 -26.7 7.25 518 | endloop 519 | endfacet 520 | facet normal 0 1 -0 521 | outer loop 522 | vertex 21.75 -26.7 1.5 523 | vertex 16 -26.7 7.25 524 | vertex 21.75 -26.7 7.25 525 | endloop 526 | endfacet 527 | facet normal 0 1 0 528 | outer loop 529 | vertex 16 -26.7 7.25 530 | vertex 21.75 -26.7 1.5 531 | vertex 16 -26.7 1.5 532 | endloop 533 | endfacet 534 | facet normal 0 1 -0 535 | outer loop 536 | vertex 54.4 -26.7 1.5 537 | vertex 48.65 -26.7 7.25 538 | vertex 54.4 -26.7 7.25 539 | endloop 540 | endfacet 541 | facet normal 0 1 0 542 | outer loop 543 | vertex 48.65 -26.7 7.25 544 | vertex 54.4 -26.7 1.5 545 | vertex 48.65 -26.7 1.5 546 | endloop 547 | endfacet 548 | facet normal -1 0 0 549 | outer loop 550 | vertex 14.5 -28.2 0 551 | vertex 14.5 -26.7 7.25 552 | vertex 14.5 -26.7 0 553 | endloop 554 | endfacet 555 | facet normal -1 -0 0 556 | outer loop 557 | vertex 14.5 -26.7 7.25 558 | vertex 14.5 -28.2 0 559 | vertex 14.5 -28.2 7.25 560 | endloop 561 | endfacet 562 | facet normal -1 0 0 563 | outer loop 564 | vertex 14.5 -1.5 1.5 565 | vertex 14.5 -22.9 7.25 566 | vertex 14.5 -1.5 7.25 567 | endloop 568 | endfacet 569 | facet normal -1 0 0 570 | outer loop 571 | vertex 14.5 -25.2 1.5 572 | vertex 14.5 -22.9 7.25 573 | vertex 14.5 -1.5 1.5 574 | endloop 575 | endfacet 576 | facet normal -1 0 0 577 | outer loop 578 | vertex 14.5 -25.2 10.8 579 | vertex 14.5 -22.9 7.25 580 | vertex 14.5 -25.2 1.5 581 | endloop 582 | endfacet 583 | facet normal -1 0 0 584 | outer loop 585 | vertex 14.5 -22.9 7.25 586 | vertex 14.5 -25.2 10.8 587 | vertex 14.5 -22.9 10.8 588 | endloop 589 | endfacet 590 | facet normal 1 0 0 591 | outer loop 592 | vertex 55.9 -18.7 6.275 593 | vertex 55.9 0 21.8 594 | vertex 55.9 -18.7 20.725 595 | endloop 596 | endfacet 597 | facet normal 1 -0 0 598 | outer loop 599 | vertex 55.9 -26.7 21.8 600 | vertex 55.9 -18.7 20.725 601 | vertex 55.9 0 21.8 602 | endloop 603 | endfacet 604 | facet normal 1 0 0 605 | outer loop 606 | vertex 55.9 -26.7 7.25 607 | vertex 55.9 -21.15 20.725 608 | vertex 55.9 -26.7 21.8 609 | endloop 610 | endfacet 611 | facet normal 1 0 0 612 | outer loop 613 | vertex 55.9 -18.7 20.725 614 | vertex 55.9 -26.7 21.8 615 | vertex 55.9 -21.15 20.725 616 | endloop 617 | endfacet 618 | facet normal 1 0 0 619 | outer loop 620 | vertex 55.9 0 21.8 621 | vertex 55.9 -18.7 6.275 622 | vertex 55.9 0 0 623 | endloop 624 | endfacet 625 | facet normal 1 0 0 626 | outer loop 627 | vertex 55.9 -28.2 0 628 | vertex 55.9 -18.7 6.275 629 | vertex 55.9 -21.15 6.275 630 | endloop 631 | endfacet 632 | facet normal 1 0 0 633 | outer loop 634 | vertex 55.9 -21.15 20.725 635 | vertex 55.9 -26.7 7.25 636 | vertex 55.9 -21.15 6.275 637 | endloop 638 | endfacet 639 | facet normal 1 0 0 640 | outer loop 641 | vertex 55.9 -28.2 0 642 | vertex 55.9 -21.15 6.275 643 | vertex 55.9 -26.7 7.25 644 | endloop 645 | endfacet 646 | facet normal 1 0 0 647 | outer loop 648 | vertex 55.9 -28.2 0 649 | vertex 55.9 -26.7 7.25 650 | vertex 55.9 -28.2 7.25 651 | endloop 652 | endfacet 653 | facet normal 1 0 0 654 | outer loop 655 | vertex 55.9 -18.7 6.275 656 | vertex 55.9 -28.2 0 657 | vertex 55.9 0 0 658 | endloop 659 | endfacet 660 | facet normal 0 -1 0 661 | outer loop 662 | vertex 48.65 -24.9 1.5 663 | vertex 54.4 -24.9 7.25 664 | vertex 48.65 -24.9 7.25 665 | endloop 666 | endfacet 667 | facet normal 0 -1 -0 668 | outer loop 669 | vertex 54.4 -24.9 7.25 670 | vertex 48.65 -24.9 1.5 671 | vertex 54.4 -24.9 1.5 672 | endloop 673 | endfacet 674 | facet normal 0 -1 0 675 | outer loop 676 | vertex 16 -24.9 1.5 677 | vertex 21.75 -24.9 7.25 678 | vertex 16 -24.9 7.25 679 | endloop 680 | endfacet 681 | facet normal 0 -1 -0 682 | outer loop 683 | vertex 21.75 -24.9 7.25 684 | vertex 16 -24.9 1.5 685 | vertex 21.75 -24.9 1.5 686 | endloop 687 | endfacet 688 | facet normal 0 -1 0 689 | outer loop 690 | vertex 16 -1.5 7.25 691 | vertex 1.5 -1.5 21.8 692 | vertex 14.5 -1.5 7.25 693 | endloop 694 | endfacet 695 | facet normal 0 -1 0 696 | outer loop 697 | vertex 1.5 -1.5 1.5 698 | vertex 14.5 -1.5 7.25 699 | vertex 1.5 -1.5 21.8 700 | endloop 701 | endfacet 702 | facet normal 0 -1 -0 703 | outer loop 704 | vertex 14.5 -1.5 7.25 705 | vertex 1.5 -1.5 1.5 706 | vertex 14.5 -1.5 1.5 707 | endloop 708 | endfacet 709 | facet normal 0 -1 0 710 | outer loop 711 | vertex 1.5 -1.5 21.8 712 | vertex 16 -1.5 7.25 713 | vertex 54.4 -1.5 21.8 714 | endloop 715 | endfacet 716 | facet normal 0 -1 0 717 | outer loop 718 | vertex 54.4 -1.5 1.5 719 | vertex 16 -1.5 7.25 720 | vertex 16 -1.5 1.5 721 | endloop 722 | endfacet 723 | facet normal 0 -1 0 724 | outer loop 725 | vertex 16 -1.5 7.25 726 | vertex 54.4 -1.5 1.5 727 | vertex 54.4 -1.5 21.8 728 | endloop 729 | endfacet 730 | facet normal 0 1 -0 731 | outer loop 732 | vertex 16 -22.9 7.25 733 | vertex 14.5 -22.9 10.8 734 | vertex 16 -22.9 10.8 735 | endloop 736 | endfacet 737 | facet normal 0 1 0 738 | outer loop 739 | vertex 14.5 -22.9 10.8 740 | vertex 16 -22.9 7.25 741 | vertex 14.5 -22.9 7.25 742 | endloop 743 | endfacet 744 | facet normal -0 0 1 745 | outer loop 746 | vertex 14.5 -1.5 7.25 747 | vertex 16 -22.9 7.25 748 | vertex 16 -1.5 7.25 749 | endloop 750 | endfacet 751 | facet normal 0 0 1 752 | outer loop 753 | vertex 16 -22.9 7.25 754 | vertex 14.5 -1.5 7.25 755 | vertex 14.5 -22.9 7.25 756 | endloop 757 | endfacet 758 | facet normal 0 0 1 759 | outer loop 760 | vertex 55.9 0 21.8 761 | vertex 54.4 -1.5 21.8 762 | vertex 55.9 -26.7 21.8 763 | endloop 764 | endfacet 765 | facet normal 0 0 1 766 | outer loop 767 | vertex 55.9 0 21.8 768 | vertex 1.5 -1.5 21.8 769 | vertex 54.4 -1.5 21.8 770 | endloop 771 | endfacet 772 | facet normal 0 0 1 773 | outer loop 774 | vertex 1.5 -1.5 21.8 775 | vertex 0 0 21.8 776 | vertex 1.5 -25.2 21.8 777 | endloop 778 | endfacet 779 | facet normal -0 0 1 780 | outer loop 781 | vertex 0 0 21.8 782 | vertex 1.5 -1.5 21.8 783 | vertex 55.9 0 21.8 784 | endloop 785 | endfacet 786 | facet normal 0 0 1 787 | outer loop 788 | vertex 55.9 -26.7 21.8 789 | vertex 54.4 -1.5 21.8 790 | vertex 54.4 -26.7 21.8 791 | endloop 792 | endfacet 793 | facet normal -0 0 1 794 | outer loop 795 | vertex 1.5 -25.2 21.8 796 | vertex 12.5 -26.7 21.8 797 | vertex 12.5 -25.2 21.8 798 | endloop 799 | endfacet 800 | facet normal 0 0 1 801 | outer loop 802 | vertex 1.5 -25.2 21.8 803 | vertex 0 -26.7 21.8 804 | vertex 12.5 -26.7 21.8 805 | endloop 806 | endfacet 807 | facet normal 0 0 1 808 | outer loop 809 | vertex 0 -26.7 21.8 810 | vertex 1.5 -25.2 21.8 811 | vertex 0 0 21.8 812 | endloop 813 | endfacet 814 | facet normal 0 0 1 815 | outer loop 816 | vertex 14.5 -25.2 10.8 817 | vertex 16 -22.9 10.8 818 | vertex 14.5 -22.9 10.8 819 | endloop 820 | endfacet 821 | facet normal 0 0 1 822 | outer loop 823 | vertex 16 -22.9 10.8 824 | vertex 14.5 -25.2 10.8 825 | vertex 16 -26.7 10.8 826 | endloop 827 | endfacet 828 | facet normal 0 0 1 829 | outer loop 830 | vertex 14.5 -25.2 10.8 831 | vertex 14.5 -26.7 10.8 832 | vertex 16 -26.7 10.8 833 | endloop 834 | endfacet 835 | facet normal -0 0 1 836 | outer loop 837 | vertex 12.5 -25.2 10.8 838 | vertex 14.5 -26.7 10.8 839 | vertex 14.5 -25.2 10.8 840 | endloop 841 | endfacet 842 | facet normal 0 0 1 843 | outer loop 844 | vertex 14.5 -26.7 10.8 845 | vertex 12.5 -25.2 10.8 846 | vertex 12.5 -26.7 10.8 847 | endloop 848 | endfacet 849 | facet normal 0 1 -0 850 | outer loop 851 | vertex 55.9 0 0 852 | vertex 0 0 21.8 853 | vertex 55.9 0 21.8 854 | endloop 855 | endfacet 856 | facet normal 0 1 0 857 | outer loop 858 | vertex 0 0 21.8 859 | vertex 55.9 0 0 860 | vertex 0 0 0 861 | endloop 862 | endfacet 863 | facet normal 0 1 -0 864 | outer loop 865 | vertex 55.9 -21.15 6.275 866 | vertex 54.4 -21.15 20.725 867 | vertex 55.9 -21.15 20.725 868 | endloop 869 | endfacet 870 | facet normal 0 1 0 871 | outer loop 872 | vertex 54.4 -21.15 20.725 873 | vertex 55.9 -21.15 6.275 874 | vertex 54.4 -21.15 6.275 875 | endloop 876 | endfacet 877 | facet normal 0 0 -1 878 | outer loop 879 | vertex 54.4 -21.15 20.725 880 | vertex 55.9 -18.7 20.725 881 | vertex 55.9 -21.15 20.725 882 | endloop 883 | endfacet 884 | facet normal -0 0 -1 885 | outer loop 886 | vertex 55.9 -18.7 20.725 887 | vertex 54.4 -21.15 20.725 888 | vertex 54.4 -18.7 20.725 889 | endloop 890 | endfacet 891 | facet normal 0 -1 0 892 | outer loop 893 | vertex 54.4 -18.7 6.275 894 | vertex 55.9 -18.7 20.725 895 | vertex 54.4 -18.7 20.725 896 | endloop 897 | endfacet 898 | facet normal 0 -1 -0 899 | outer loop 900 | vertex 55.9 -18.7 20.725 901 | vertex 54.4 -18.7 6.275 902 | vertex 55.9 -18.7 6.275 903 | endloop 904 | endfacet 905 | facet normal -0 0 1 906 | outer loop 907 | vertex 54.4 -18.7 6.275 908 | vertex 55.9 -21.15 6.275 909 | vertex 55.9 -18.7 6.275 910 | endloop 911 | endfacet 912 | facet normal 0 0 1 913 | outer loop 914 | vertex 55.9 -21.15 6.275 915 | vertex 54.4 -18.7 6.275 916 | vertex 54.4 -21.15 6.275 917 | endloop 918 | endfacet 919 | facet normal 1 -0 0 920 | outer loop 921 | vertex 1.5 -25.2 21.8 922 | vertex 1.5 -1.5 1.5 923 | vertex 1.5 -1.5 21.8 924 | endloop 925 | endfacet 926 | facet normal 1 0 0 927 | outer loop 928 | vertex 1.5 -1.5 1.5 929 | vertex 1.5 -25.2 21.8 930 | vertex 1.5 -25.2 1.5 931 | endloop 932 | endfacet 933 | facet normal 0 1 0 934 | outer loop 935 | vertex 14.5 -25.2 10.8 936 | vertex 14.5 -25.2 1.5 937 | vertex 12.5 -25.2 10.8 938 | endloop 939 | endfacet 940 | facet normal 0 1 -0 941 | outer loop 942 | vertex 12.5 -25.2 10.8 943 | vertex 1.5 -25.2 21.8 944 | vertex 12.5 -25.2 21.8 945 | endloop 946 | endfacet 947 | facet normal 0 1 0 948 | outer loop 949 | vertex 1.5 -25.2 1.5 950 | vertex 12.5 -25.2 10.8 951 | vertex 14.5 -25.2 1.5 952 | endloop 953 | endfacet 954 | facet normal 0 1 0 955 | outer loop 956 | vertex 12.5 -25.2 10.8 957 | vertex 1.5 -25.2 1.5 958 | vertex 1.5 -25.2 21.8 959 | endloop 960 | endfacet 961 | facet normal -0 0 1 962 | outer loop 963 | vertex 1.5 -1.5 1.5 964 | vertex 14.5 -25.2 1.5 965 | vertex 14.5 -1.5 1.5 966 | endloop 967 | endfacet 968 | facet normal 0 0 1 969 | outer loop 970 | vertex 14.5 -25.2 1.5 971 | vertex 1.5 -1.5 1.5 972 | vertex 1.5 -25.2 1.5 973 | endloop 974 | endfacet 975 | facet normal 1 -0 0 976 | outer loop 977 | vertex 12.5 -26.7 21.8 978 | vertex 12.5 -25.2 10.8 979 | vertex 12.5 -25.2 21.8 980 | endloop 981 | endfacet 982 | facet normal 1 0 0 983 | outer loop 984 | vertex 12.5 -25.2 10.8 985 | vertex 12.5 -26.7 21.8 986 | vertex 12.5 -26.7 10.8 987 | endloop 988 | endfacet 989 | facet normal 0 -1 0 990 | outer loop 991 | vertex 0 -26.7 21.8 992 | vertex 12.5 -26.7 10.8 993 | vertex 12.5 -26.7 21.8 994 | endloop 995 | endfacet 996 | facet normal 0 -1 0 997 | outer loop 998 | vertex 12.5 -26.7 10.8 999 | vertex 14.5 -26.7 7.25 1000 | vertex 14.5 -26.7 10.8 1001 | endloop 1002 | endfacet 1003 | facet normal 0 -1 0 1004 | outer loop 1005 | vertex 0 -26.7 0 1006 | vertex 12.5 -26.7 10.8 1007 | vertex 0 -26.7 21.8 1008 | endloop 1009 | endfacet 1010 | facet normal 0 -1 -0 1011 | outer loop 1012 | vertex 12.5 -26.7 10.8 1013 | vertex 0 -26.7 0 1014 | vertex 14.5 -26.7 7.25 1015 | endloop 1016 | endfacet 1017 | facet normal 0 -1 -0 1018 | outer loop 1019 | vertex 14.5 -26.7 7.25 1020 | vertex 0 -26.7 0 1021 | vertex 14.5 -26.7 0 1022 | endloop 1023 | endfacet 1024 | facet normal -1 0 0 1025 | outer loop 1026 | vertex 0 -26.7 0 1027 | vertex 0 0 21.8 1028 | vertex 0 0 0 1029 | endloop 1030 | endfacet 1031 | facet normal -1 -0 0 1032 | outer loop 1033 | vertex 0 0 21.8 1034 | vertex 0 -26.7 0 1035 | vertex 0 -26.7 21.8 1036 | endloop 1037 | endfacet 1038 | endsolid OpenSCAD_Model 1039 | -------------------------------------------------------------------------------- /case/case.scad: -------------------------------------------------------------------------------- 1 | include ; 2 | 3 | PM25_X = 38.4; 4 | PM25_Y = 50.2; 5 | PM25_Z = 21.4; 6 | WALL_SIZE = 1.5; 7 | TAB_X = 5.75; 8 | TAB_Y = 5.75; 9 | PCB_SPACER = 2; 10 | PCB_THICKNESS = 1.8; 11 | BRIM = TAB_X; 12 | CABLE_BOX_X = 13; 13 | CABLE_BOX_Y = PM25_Y; 14 | CABLE_BOX_Z = PM25_Z + PCB_SPACER + PCB_THICKNESS - WALL_SIZE; 15 | BIG_VENT_CENTER = 35.9; 16 | 17 | // JST cable cutout 18 | JST_DISTANCE_FROM_EDGE = 9.3; 19 | JST_WIDTH = 11; 20 | CABLE_SPACE = 2; 21 | 22 | WS2 = WALL_SIZE * 2; 23 | 24 | // Space required above the PCB 25 | ABOVE_PCB = 15; 26 | 27 | BME_BREAKOUT_X = 14; 28 | BME_BREAKOUT_Y = 11; 29 | 30 | USB_X = 9; 31 | USB_Z = 5.6 - PCB_THICKNESS; 32 | 33 | LID_X = CABLE_BOX_X + PM25_X + WALL_SIZE; 34 | LID_Y = PM25_Y; 35 | LID_Z = ABOVE_PCB; 36 | 37 | module leftCutout() { 38 | translate([-WALL_SIZE, BRIM, 0]) 39 | linear_extrude(PM25_Z) 40 | square(size = [WALL_SIZE, PM25_Y - (2 * BRIM)]); 41 | 42 | translate([-WALL_SIZE, JST_DISTANCE_FROM_EDGE, 0]) 43 | linear_extrude(PM25_Z + PCB_THICKNESS + PCB_SPACER) 44 | square(size = [WALL_SIZE, JST_WIDTH]); 45 | } 46 | 47 | module pcbCutout() { 48 | translate([TAB_X, 0, PM25_Z]) 49 | linear_extrude(PCB_SPACER + PCB_THICKNESS + WALL_SIZE) 50 | square(size = [PM25_X - (TAB_X * 2), PM25_Y]); 51 | 52 | translate([TAB_X, -WALL_SIZE, PM25_Z + PCB_SPACER + PCB_THICKNESS]) 53 | linear_extrude(WALL_SIZE) 54 | square(size = [PM25_X - (TAB_X * 2), PM25_Y + WS2]); 55 | 56 | translate([0, TAB_Y, PM25_Z]) 57 | linear_extrude(PCB_SPACER + PCB_THICKNESS + WALL_SIZE) 58 | square(size = [PM25_X, PM25_Y - (TAB_Y * 2)]); 59 | 60 | translate([-WALL_SIZE, TAB_Y, PM25_Z + PCB_SPACER + PCB_THICKNESS]) 61 | linear_extrude(WALL_SIZE) 62 | square(size = [PM25_X + WS2, PM25_Y - (TAB_Y * 2)]); 63 | 64 | translate([0, 0, PM25_Z + PCB_SPACER]) 65 | linear_extrude(PCB_THICKNESS) 66 | square(size = [PM25_X, PM25_Y]); 67 | } 68 | 69 | module fanCutOut() { 70 | fan_outer_radius = 9; 71 | fan_inner_radius = 6; 72 | epsilon = 1; 73 | 74 | translate([PM25_X - epsilon, BIG_VENT_CENTER, PM25_Z / 2]) 75 | rotate([0, 90, 0]) 76 | difference() { 77 | $fn = 90; 78 | linear_extrude(WALL_SIZE + epsilon) 79 | circle(r = fan_outer_radius); 80 | 81 | linear_extrude(WALL_SIZE + epsilon) 82 | circle(r = fan_inner_radius); 83 | 84 | linear_extrude(WALL_SIZE + epsilon) 85 | square(size = [3.1, fan_outer_radius * 2], center = true); 86 | 87 | linear_extrude(WALL_SIZE + epsilon) 88 | square(size = [fan_outer_radius * 2, 1.6], center = true); 89 | } 90 | } 91 | 92 | module portCutOut() { 93 | port_d = 2.45; 94 | 95 | translate([PM25_X, 6 - (port_d / 2), PM25_Z - (4.2 - port_d)]) 96 | rotate([0, 90, 0]) 97 | linear_extrude(WALL_SIZE) 98 | square(size = [port_d, 12.0 + port_d]); 99 | } 100 | 101 | module connectorCutOut() { 102 | jst_height = 4.9; 103 | jst_len = 17; 104 | translate([-WALL_SIZE, PM25_Y - jst_len - 5.5, (PM25_Z / 2) + jst_height / 2]) 105 | rotate([0, 90, 0]) 106 | color("blue") 107 | linear_extrude(WALL_SIZE) 108 | square(size = [jst_height, jst_len]); 109 | } 110 | 111 | module pmcutout() { 112 | linear_extrude(PM25_Z) 113 | square(size = [PM25_X, PM25_Y]); 114 | } 115 | 116 | module pmcase(lid = false) { 117 | if (lid) { 118 | translate([0, 0, PM25_Z + PCB_SPACER + PCB_THICKNESS + WALL_SIZE]) 119 | Lid(); 120 | } 121 | translate([CABLE_BOX_X + WALL_SIZE, 0, 0]) { 122 | translate([WALL_SIZE, WALL_SIZE, WALL_SIZE]) 123 | difference() { 124 | translate([-WALL_SIZE, -WALL_SIZE, -WALL_SIZE]) 125 | linear_extrude(PM25_Z + WS2 + PCB_SPACER + PCB_THICKNESS) 126 | square(size = [PM25_X + WS2, PM25_Y + WS2]); 127 | 128 | // These cutouts model the PM 2.5 sensor 129 | pmcutout(); 130 | pcbCutout(); 131 | fanCutOut(); 132 | portCutOut(); 133 | connectorCutOut(); 134 | 135 | // This removes most of the side of the PM 2.5 sensor so we can 136 | // run a cable gutter on the side. 137 | leftCutout(); 138 | } 139 | translate([-(CABLE_BOX_X + WALL_SIZE), 0, 0]) 140 | cablecase(); 141 | } 142 | } 143 | 144 | module cablecaseCutout() { 145 | linear_extrude(CABLE_BOX_Z) 146 | square(size = [CABLE_BOX_X, CABLE_BOX_Y]); 147 | 148 | translate([CABLE_BOX_X - CABLE_SPACE, JST_DISTANCE_FROM_EDGE, CABLE_BOX_Z]) 149 | linear_extrude(WALL_SIZE) 150 | square(size = [CABLE_SPACE, JST_WIDTH]); 151 | } 152 | 153 | module cableCaseText() { 154 | text_depth = 1; 155 | text_size = 10; 156 | translate([(CABLE_BOX_X / 2) + (text_size / 2) - 2, CABLE_BOX_Y / 2, CABLE_BOX_Z + WALL_SIZE]) 157 | rotate([0, 0, 90]) 158 | linear_extrude(text_depth) 159 | text("TendAir", size = text_size, halign="center"); 160 | } 161 | 162 | module cablecase() { 163 | translate([WALL_SIZE, WALL_SIZE, WALL_SIZE]) { 164 | difference() { 165 | translate([-WALL_SIZE, -WALL_SIZE, -WALL_SIZE]) 166 | linear_extrude(PM25_Z + PCB_SPACER + PCB_THICKNESS + WALL_SIZE) 167 | square(size = [CABLE_BOX_X + WALL_SIZE, PM25_Y + WS2]); 168 | 169 | cablecaseCutout(); 170 | } 171 | //cableCaseText(); 172 | } 173 | } 174 | 175 | module BottomSlice() { 176 | text_height = 2; 177 | translate([0, JST_DISTANCE_FROM_EDGE + WALL_SIZE + JST_WIDTH, 0]) 178 | linear_extrude(PM25_Z + PCB_SPACER + PCB_THICKNESS + WS2 + LID_Z + text_height) 179 | square(size = [LID_X + WS2, PM25_Y + WS2]); 180 | } 181 | 182 | module Bottom(case = false) { 183 | difference() { 184 | pmcase(case); 185 | BottomSlice(); 186 | } 187 | } 188 | 189 | module Top(case = false) { 190 | intersection() { 191 | pmcase(case); 192 | BottomSlice(); 193 | } 194 | } 195 | 196 | module BMEVentCutOut() { 197 | header_y = 32.7; 198 | header_x = CABLE_BOX_X + WALL_SIZE + 3.1; 199 | 200 | translate([header_x - BME_BREAKOUT_X, header_y, LID_Z]) 201 | linear_extrude(WALL_SIZE) 202 | Grid(BME_BREAKOUT_X, BME_BREAKOUT_Y, inner_diameter = 2, grid_buffer = 1); 203 | } 204 | 205 | module USBCutOut() { 206 | translate([CABLE_BOX_X + WALL_SIZE + (PM25_X / 2) - (USB_X / 2), 0, 0]) 207 | rotate([90, 0, 0]) 208 | linear_extrude(WALL_SIZE) 209 | square(size = [USB_X, USB_Z]); 210 | } 211 | 212 | module SideVentCutOut() { 213 | rotate([0, -90, 0]) 214 | linear_extrude(WALL_SIZE) 215 | Grid(ABOVE_PCB, PM25_Y, inner_diameter = 2, grid_buffer = 1); 216 | } 217 | 218 | module LidCutOut() { 219 | BMEVentCutOut(); 220 | USBCutOut(); 221 | 222 | // Right side vents 223 | translate([LID_X + WALL_SIZE, 0, 0]) 224 | SideVentCutOut(); 225 | 226 | // Left side vents 227 | SideVentCutOut(); 228 | 229 | rotate([0, -90, 0]) 230 | linear_extrude(WALL_SIZE) 231 | Grid(ABOVE_PCB, PM25_Y, inner_diameter = 2, grid_buffer = 1); 232 | rotate([0, -90, 0]) 233 | linear_extrude(WALL_SIZE) 234 | Grid(ABOVE_PCB, PM25_Y, inner_diameter = 2, grid_buffer = 1); 235 | linear_extrude(LID_Z) 236 | square(size = [LID_X, PM25_Y]); 237 | } 238 | 239 | module LidText() { 240 | translate([(LID_X + WS2) / 2, ((LID_Y + WS2) / 2) + 1, LID_Z + WALL_SIZE]) { 241 | linear_extrude(1) 242 | text(text = "TendAir", valign = "center", halign = "center"); 243 | } 244 | } 245 | 246 | module Lid() { 247 | //LidText(); 248 | 249 | translate([WALL_SIZE, WALL_SIZE, 0]) 250 | difference() { 251 | translate([-WALL_SIZE, -WALL_SIZE, 0]) 252 | linear_extrude(LID_Z + WALL_SIZE) 253 | square(size = [LID_X + WS2, LID_Y + WS2]); 254 | LidCutOut(); 255 | } 256 | 257 | // Heat isolation wall 258 | translate([CABLE_BOX_X + WS2 + 7, WALL_SIZE, 0]) 259 | linear_extrude(LID_Z) 260 | square(size = [WALL_SIZE, PM25_Y]); 261 | } 262 | 263 | rendering = "full"; 264 | lid = "disabled"; 265 | should_lid = lid == "enabled" ? true : false; 266 | 267 | if (rendering == "full") { 268 | pmcase(should_lid); 269 | } 270 | 271 | if (rendering == "top") { 272 | rotate([270, 0, 0]) 273 | Top(false); 274 | } 275 | 276 | if (rendering == "top-with-lid") { 277 | rotate([270, 0, 0]) 278 | Top(true); 279 | } 280 | 281 | if (rendering == "bottom") { 282 | rotate([90, 0, 0]) 283 | Bottom(false); 284 | } 285 | 286 | if (rendering == "bottom-with-lid") { 287 | rotate([90, 0, 0]) 288 | Bottom(true); 289 | } 290 | -------------------------------------------------------------------------------- /case/grid.scad: -------------------------------------------------------------------------------- 1 | function round_down(n) = n - (n % 1); 2 | 3 | module Grid(x, y, inner_diameter = 5, grid_buffer = 2, center = false) { 4 | diameter = inner_diameter + grid_buffer; 5 | radius = diameter / 2; 6 | x_n = round_down(x / diameter); 7 | y_n = round_down(y / diameter); 8 | $fn = 8; 9 | 10 | y_diff = y - (y_n * diameter); 11 | x_diff = x - (x_n * diameter); 12 | 13 | move = center ? 14 | [radius - (diameter * x_n) / 2, radius - (diameter * y_n) / 2, 0] 15 | : 16 | [radius + (x_diff / 2), radius + (y_diff / 2), 0]; 17 | 18 | translate(move) 19 | for (j = [0 : (y_n - 1)]) { 20 | for (i = [0 : (x_n - 1)]) { 21 | translate([i * diameter, j * diameter, 0]) 22 | circle(d = inner_diameter); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /client.rb: -------------------------------------------------------------------------------- 1 | # Sample program for listening to AQ / Temp / RH information. 2 | # 3 | # The server that runs on the ESP8266 broadcasts data via UDP on port 9000. 4 | # This program just listens for that data and decodes it 5 | 6 | require "socket" 7 | require "ipaddr" 8 | require "json" 9 | 10 | MULTICAST_ADDR = "224.0.0.1" 11 | BIND_ADDR = "0.0.0.0" 12 | PORT = 9000 13 | 14 | AQ = Struct.new(:pm1_0_standard, :pm2_5_standard, :pm10_standard, 15 | :pm1_0_env, :pm2_5_env, 16 | :concentration_unit, 17 | 18 | # These fields are "number of particles beyond N um 19 | # per 0.1L of air". These numbers are multiplied by 20 | # 10, so 03um == "number of particles beyond 0.3um 21 | # in 0.1L of air" 22 | :particle_03um, :particle_05um, :particle_10um, 23 | :particle_25um, :particle_50um, :particle_100um) 24 | 25 | TempRH = Struct.new(:temp, :rh) 26 | 27 | class Combined 28 | attr_reader :time, :mac, :record_id, :aq, :temprh 29 | 30 | def initialize time, mac, record_id, aq, temprh 31 | @time = time 32 | @mac = mac 33 | @record_id = record_id 34 | @aq = aq 35 | @temprh = temprh 36 | end 37 | end 38 | 39 | if_addr = Socket.getifaddrs.find { |s| s.addr.ipv4? && !s.addr.ipv4_loopback? } 40 | p if_addr.addr.ip_address 41 | 42 | socket = UDPSocket.new 43 | membership = IPAddr.new(MULTICAST_ADDR).hton + IPAddr.new(BIND_ADDR).hton 44 | 45 | socket.setsockopt(:IPPROTO_IP, :IP_ADD_MEMBERSHIP, membership) 46 | socket.setsockopt(:IPPROTO_IP, :IP_MULTICAST_TTL, 1) 47 | socket.setsockopt(:SOL_SOCKET, :SO_REUSEPORT, 1) 48 | 49 | socket.bind(BIND_ADDR, PORT) 50 | 51 | loop do 52 | m, _ = socket.recvfrom(2000) 53 | record = JSON.load(m) 54 | 55 | data = record["aq"].unpack("m0").first 56 | unpack = data.unpack('CCnn14') 57 | crc = 0x42 + 0x4d + 28 + data.bytes.drop(4).first(26).inject(:+) 58 | unless crc != unpack.last 59 | aq = AQ.new(*unpack.drop(3).first(12)) 60 | temprh = TempRH.new(record["temperature"] / 100.0, record["humidity"] / 100.0) 61 | rec = Combined.new(Time.now.utc, record["mac"], record["record_id"], aq, temprh) 62 | 63 | p rec 64 | end 65 | end 66 | 67 | -------------------------------------------------------------------------------- /firmware/.gitignore: -------------------------------------------------------------------------------- 1 | .pio 2 | -------------------------------------------------------------------------------- /firmware/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "mqtt" 4 | gem "influxdb" 5 | -------------------------------------------------------------------------------- /firmware/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | influxdb (0.8.1) 5 | mqtt (0.5.0) 6 | 7 | PLATFORMS 8 | ruby 9 | 10 | DEPENDENCIES 11 | influxdb 12 | mqtt 13 | -------------------------------------------------------------------------------- /firmware/Makefile: -------------------------------------------------------------------------------- 1 | RUBY = ruby 2 | PLATFORMIO = platformio 3 | 4 | NODE_NAME ?= esp8266aq 5 | MQTT_SERVER ?= "" 6 | MQTT_PORT ?= 1883 7 | MQTT_PREFIX ?= esp8266aq 8 | 9 | CFLAGS="-DNODE_NAME='\"$(NODE_NAME)\"' -DMQTT_SERVER='\"$(MQTT_SERVER)\"' -DMQTT_PORT=$(MQTT_PORT) -DMQTT_PREFIX='\"$(MQTT_PREFIX)\"'" 10 | 11 | 12 | compile: 13 | BUILD_FLAGS=$(CFLAGS) platformio run 14 | 15 | flash: 16 | $(RUBY) utils/prog.rb 17 | BUILD_FLAGS=$(CFLAGS) platformio run -t upload 18 | 19 | uploadfs: 20 | $(RUBY) utils/prog.rb 21 | platformio run -t uploadfs 22 | -------------------------------------------------------------------------------- /firmware/README.md: -------------------------------------------------------------------------------- 1 | # My ESP8266 + Plantower AQ Sensor Project Firmware 2 | 3 | This is the firmware for the project. I wrote an Arduino sketch. I'd rather 4 | have written it in C, but writing an Arduino sketch seemed like the fastest way 5 | to get the project done, and I'd rather be finished than happy (this is a joke, 6 | I am perfectly happy even though it isn't C). 7 | 8 | ## Prerequisites 9 | 10 | This firmware uses [PlatformIO](https://platformio.org). Make sure you install 11 | PlatformIO first! 12 | 13 | ## MQTT 14 | 15 | This firmware uses MQTT to publish data to an MQTT server. That means the 16 | module must be configured with connection information so it knows where to 17 | connect. Setting up an MQTT server is outside the scope of this document, but 18 | I've heard that [Home Assistant](https://www.home-assistant.io) makes it easy. 19 | 20 | When compiling the firmware, you'll need the following information about the 21 | MQTT connection: 22 | 23 | 1. The node name. A unique name given to this module. The name can be anything as long as it's unique. For example, I'm using `office-aq` for the sensor in my office. 24 | 2. The MQTT server hostname. (Make sure it's not an mDNS name) 25 | 3. The MQTT prefix. This is a prefix string that indicates where the sensor is. For my office I'm using `home/office/esp8266aq`. 26 | 27 | ## Compiling and Uploading 28 | 29 | The MQTT configuration can be specified by environment variables. 30 | 31 | I compile and flash my firmware like this: 32 | 33 | ``` 34 | $ MQTT_SERVER=tender.home NODE_NAME=office-aq MQTT_PREFIX=home/office/esp8266aq make flash 35 | ``` 36 | 37 | If this is your first time flashing the chip, make sure to read the next step!! 38 | 39 | ## IMPORTANT: First Time Uploading 40 | 41 | This firmware makes use of a special filesystem that is flashed independently 42 | of the normal runtime firmware. You need to upload the file system 43 | independently of the normal firmware. This step writes all of the file in the 44 | `data` directory to the ESP. 45 | 46 | To upload the file system, do: 47 | 48 | ``` 49 | $ make uploadfs 50 | ``` 51 | 52 | You only need to upload the filesystem whenever things in the `data` directory change. 53 | 54 | 1. `make flash` to compile stuff and upload it to the ESP 55 | 56 | ## First Time Connecting 57 | 58 | The first time the chip boots, by default the ESP8266 59 | will create an ad-hoc network. Connect to that network and configure the chip 60 | with your wifi credentials. After it connects to your network it will start 61 | broadcasting sensor information to your MQTT server. 62 | 63 | ## Development 64 | 65 | My typical development process looks like this: 66 | 67 | 1. Edit code 68 | 2. Run `make flash && ruby utils/serial-client.rb` 69 | -------------------------------------------------------------------------------- /firmware/data/app.js: -------------------------------------------------------------------------------- 1 | const base_url = window.location.hash.substring(1); 2 | const status_url = base_url + "/status.json"; 3 | const config_url = base_url + "/config.json"; 4 | 5 | function applyData(data) { 6 | for (let el of document.querySelectorAll(".js-raw-json")) { 7 | el.innerText = JSON.stringify(data, null, 2); 8 | } 9 | 10 | const class_mapping = { 11 | ".js-temperature": "temperature", 12 | ".js-humidity": "humidity", 13 | ".js-pm25": "pm2_5_standard" 14 | }; 15 | 16 | getMeasurement = (name) => data.measurements.find(m => m.name === name).value; 17 | 18 | for (let selector in class_mapping) { 19 | const name = class_mapping[selector]; 20 | 21 | const measurement = data.measurements.find(m => m.name === name); 22 | const value = measurement.value; 23 | const time_since = data.current_time - measurement.last_measured_at; 24 | 25 | for (let cell_el of document.querySelectorAll(selector)) { 26 | const value_el = cell_el.querySelector(".js-value"); 27 | 28 | cell_el.classList.toggle("connected", time_since < 10000); 29 | value_el.innerText = Math.round(value); 30 | } 31 | } 32 | } 33 | 34 | async function updateData() { 35 | let response = await fetch(status_url); 36 | let data = await response.json(); 37 | 38 | applyData(data); 39 | } 40 | 41 | async function onSubmitSettingsForm(ev) { 42 | ev.preventDefault(); 43 | const form_el = ev.target; 44 | 45 | let config = {} 46 | for (let input_el of form_el.querySelectorAll("*[name]")) { 47 | config[input_el.name] = input_el.value; 48 | } 49 | console.log(config); 50 | 51 | const response = await fetch(config_url, { 52 | method: 'POST', 53 | headers: { 54 | 'Content-Type': 'application/json' 55 | }, 56 | body: JSON.stringify(config) 57 | }); 58 | console.log(response); 59 | await response.json(); 60 | 61 | window.location.reload(); 62 | 63 | return false; 64 | } 65 | 66 | async function setupForm() { 67 | const form_el = document.querySelector("form"); 68 | 69 | form_el.addEventListener("submit", onSubmitSettingsForm); 70 | 71 | let response = await fetch(config_url); 72 | let config = await response.json(); 73 | for (let input_el of form_el.querySelectorAll("*[name]")) { 74 | input_el.value = config[input_el.name] || ""; 75 | } 76 | } 77 | 78 | window.addEventListener('load', (event) => { 79 | setInterval(updateData, 1000); 80 | 81 | setupForm(); 82 | }); 83 | -------------------------------------------------------------------------------- /firmware/data/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /firmware/data/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ESP8266 Air Quality 6 | 7 | 57 | 58 | 59 |
60 |

ESP8266 Air Quality

61 | 62 |
63 |
64 |
🌡️
65 |
Temperature
66 |
°C
67 |
68 |
69 |
🌧️
70 |
Humidity
71 |
%
72 |
73 |
74 |
🌫️
75 |
PM 2.5
76 |
μg/m³
77 |
78 |
79 | 80 |
81 | 82 |

Settings

83 | 84 |
85 |
86 | 87 | 88 |
89 | 90 |
91 | 92 | 93 |
94 | 95 |
96 | 97 | 98 |
99 | 100 |
101 | 102 | 103 |
104 | 105 | 106 |
107 | 108 |
109 | 110 |
111 | Debug JSON 112 |

113 |       
114 |
115 | 116 | 117 | -------------------------------------------------------------------------------- /firmware/platformio.ini: -------------------------------------------------------------------------------- 1 | ; PlatformIO Project Configuration File 2 | ; 3 | ; Build options: build flags, source filter 4 | ; Upload options: custom upload port, speed and extra flags 5 | ; Library options: dependencies, extra library storages 6 | ; Advanced options: extra scripting 7 | ; 8 | ; Please visit documentation for the other options and examples 9 | ; https://docs.platformio.org/page/projectconf.html 10 | 11 | [env] 12 | platform = espressif8266 13 | board = esp01_1m 14 | framework = arduino 15 | board_build.filesystem = littlefs 16 | 17 | lib_deps = 18 | tzapu/WifiManager @ ^0.15.0 19 | knolleary/PubSubClient @ ^2.8 20 | adafruit/Adafruit Unified Sensor @ ^1.1.4 21 | adafruit/Adafruit BME280 Library @ ^2.1.2 22 | bblanchon/ArduinoJson 23 | 24 | build_flags = ${sysenv.BUILD_FLAGS} 25 | 26 | [env:nodemcu] 27 | -------------------------------------------------------------------------------- /firmware/src/firmware.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | #ifndef NODE_NAME 15 | #define NODE_NAME "esp8266aq" 16 | #endif 17 | 18 | #ifndef MQTT_SERVER 19 | #define MQTT_SERVER "" 20 | #endif 21 | 22 | #ifndef MQTT_PORT 23 | #define MQTT_PORT 1833 24 | #endif 25 | 26 | #ifndef MQTT_PREFIX 27 | #define MQTT_PREFIX "esp8266aq" 28 | #endif 29 | 30 | #define LED_PIN 2 31 | #define G2_PIN 14 32 | #define G3_PIN 12 33 | 34 | Adafruit_BME280 bme; 35 | 36 | WiFiClient espClient; 37 | PubSubClient client(espClient); 38 | ESP8266WebServer server(80); 39 | 40 | Config config; 41 | 42 | FloatMeasurement measurement_temperature("temperature", &config); 43 | FloatMeasurement measurement_humidity("humidity", &config); 44 | FloatMeasurement measurement_dewpoint("dewpoint", &config); 45 | 46 | #define NUM_MEASUREMENTS_PMS5003 12 47 | UnsignedIntMeasurement measurements_pms5003[NUM_MEASUREMENTS_PMS5003] = { 48 | UnsignedIntMeasurement("pm1_0_standard", &config), 49 | UnsignedIntMeasurement("pm2_5_standard", &config), 50 | UnsignedIntMeasurement("pm10_standard", &config), 51 | UnsignedIntMeasurement("pm1_0_env", &config), 52 | UnsignedIntMeasurement("pm2_5_env", &config), 53 | UnsignedIntMeasurement("concentration_unit", &config), 54 | UnsignedIntMeasurement("particles_03um", &config), 55 | UnsignedIntMeasurement("particles_05um", &config), 56 | UnsignedIntMeasurement("particles_10um", &config), 57 | UnsignedIntMeasurement("particles_25um", &config), 58 | UnsignedIntMeasurement("particles_50um", &config), 59 | UnsignedIntMeasurement("particles_100um", &config) 60 | }; 61 | 62 | UnsignedIntMeasurement measurement_co2("co2", &config); 63 | 64 | struct PMS5003 { 65 | byte input_string[32]; 66 | int input_idx; 67 | 68 | PMS5003() : input_idx(0) {} 69 | 70 | void process_byte(byte in) { 71 | if(input_idx == 32) { 72 | input_idx = 0; 73 | } 74 | 75 | input_string[input_idx++] = in; 76 | if (input_idx == 1 && input_string[0] != 0x42) { 77 | input_idx = 0; 78 | } else if (input_idx == 2 && input_string[1] != 0x4d) { 79 | input_idx = 0; 80 | } 81 | } 82 | 83 | void reset_input() { 84 | input_idx = 0; 85 | } 86 | 87 | unsigned int get_value(int idx) { 88 | byte high = input_string[4 + idx * 2]; 89 | byte low = input_string[4 + idx * 2 + 1]; 90 | return (high << 8) | low; 91 | } 92 | 93 | /* Are we a full, valid packet */ 94 | bool is_valid_packet() { 95 | if (input_idx != 32) 96 | return false; 97 | 98 | /* TODO: check crc */ 99 | 100 | return true; 101 | } 102 | }; 103 | 104 | PMS5003 pms5003; 105 | 106 | typedef StaticJsonDocument<512> ConfigJsonDocument; 107 | 108 | static void loadConfigurationFromDoc(Config &config, ConfigJsonDocument &doc) { 109 | if (doc["mqtt_server"]) 110 | config.mqtt_server = doc["mqtt_server"].as(); 111 | 112 | if (doc["mqtt_port"]) 113 | config.mqtt_port = doc["mqtt_port"].as().toInt(); 114 | 115 | if (doc["mqtt_prefix"]) 116 | config.mqtt_prefix = doc["mqtt_prefix"].as(); 117 | } 118 | 119 | void loadConfiguration(Config &config) { 120 | /* Load defaults */ 121 | config.name = NODE_NAME; 122 | config.mqtt_server = MQTT_SERVER; 123 | config.mqtt_port = MQTT_PORT; 124 | config.mqtt_prefix = MQTT_PREFIX; 125 | 126 | if (LittleFS.exists("config.json")) { 127 | File file = LittleFS.open("config.json", "r"); 128 | 129 | ConfigJsonDocument doc; 130 | DeserializationError error = deserializeJson(doc, file); 131 | 132 | if (!error) { 133 | loadConfigurationFromDoc(config, doc); 134 | return; 135 | } 136 | 137 | file.close(); 138 | } 139 | 140 | } 141 | 142 | void configModeCallback(WiFiManager *myWiFiManager) { 143 | Serial.println("Entered config mode"); 144 | Serial.println(WiFi.softAPIP()); 145 | Serial.println(myWiFiManager->getConfigPortalSSID()); 146 | } 147 | 148 | String getContentType(String filename) { 149 | if (filename.endsWith(".html")) return "text/html"; 150 | else if (filename.endsWith(".css")) return "text/css"; 151 | else if (filename.endsWith(".js")) return "application/javascript"; 152 | else if (filename.endsWith(".json")) return "application/json"; 153 | else if (filename.endsWith(".ico")) return "image/x-icon"; 154 | return "text/plain"; 155 | } 156 | 157 | bool handleFileRead(String path) { 158 | if (path.endsWith("/")) 159 | path += "index.html"; 160 | 161 | String contentType = getContentType(path); 162 | if (LittleFS.exists(path)) { 163 | File file = LittleFS.open(path, "r"); 164 | server.streamFile(file, contentType); 165 | file.close(); 166 | return true; 167 | } 168 | 169 | return false; 170 | } 171 | 172 | void webHandleStatus() { 173 | String json; 174 | json.reserve(1024); 175 | json += "{\"measurements\": ["; 176 | 177 | measurement_temperature.publish(json); 178 | measurement_humidity.publish(json); 179 | for(int i = 0; i < NUM_MEASUREMENTS_PMS5003; i++) { 180 | measurements_pms5003[i].publish(json); 181 | } 182 | json.remove(json.lastIndexOf(",")); // remove trailing comma 183 | 184 | json += "], \"current_time\": "; 185 | json += millis(); 186 | json += ", \"mqtt\": {\"connected\": "; 187 | json += client.connected() ? "true" : "false"; 188 | json += ", \"server\": \""; 189 | json += config.mqtt_server; 190 | json += "\", \"port\": "; 191 | json += config.mqtt_port; 192 | json += "}, \"esp8266\": {\"heap_free\":"; 193 | json += ESP.getFreeHeap(); 194 | json += ", \"heap_fragmentation\": "; 195 | json += ESP.getHeapFragmentation(); 196 | json += ", \"heap_max_free_block_size\": "; 197 | json += ESP.getMaxFreeBlockSize(); 198 | json += "}}"; 199 | 200 | server.sendHeader("Access-Control-Allow-Origin", "*"); 201 | server.send(200, "application/json", json); 202 | } 203 | 204 | void webHandleUpdateConfig() { 205 | String body = server.arg("plain"); 206 | 207 | File file = LittleFS.open("config.json", "w"); 208 | file.print(body); 209 | file.close(); 210 | 211 | server.send(200, "text/json", "{\"success\":true}" ); 212 | 213 | ESP.restart(); 214 | } 215 | 216 | void webHandleReadConfig() { 217 | String json; 218 | json.reserve(1024); 219 | 220 | json += "{\"name\": \""; 221 | json += config.name; 222 | json += "\", \"mqtt_server\": \""; 223 | json += config.mqtt_server; 224 | json += "\", \"mqtt_port\": \""; 225 | json += config.mqtt_port; 226 | json += "\", \"mqtt_prefix\": \""; 227 | json += config.mqtt_prefix; 228 | json += "\"}"; 229 | 230 | server.sendHeader("Access-Control-Allow-Origin", "*"); 231 | server.send(200, "application/json", json); 232 | } 233 | 234 | void setup() { 235 | WiFiManager wifiManager; 236 | 237 | pinMode(G2_PIN, INPUT); 238 | pinMode(G3_PIN, INPUT); 239 | pinMode(LED_PIN, OUTPUT); 240 | digitalWrite(2, HIGH); 241 | 242 | Serial.begin(9600); 243 | wifiManager.setAPCallback(configModeCallback); 244 | wifiManager.autoConnect(); 245 | 246 | randomSeed(micros()); 247 | 248 | while (WiFi.status() != WL_CONNECTED) { 249 | delay(500); 250 | } 251 | 252 | if (!bme.begin(0x76)) { 253 | Serial.println("Couldn't find BME280 sensor"); 254 | delay(50); 255 | } 256 | LittleFS.begin(); 257 | loadConfiguration(config); 258 | Serial.print("Node name: "); 259 | Serial.println(config.name); 260 | Serial.print("MQTT Server: "); 261 | Serial.println(config.mqtt_server); 262 | Serial.print("MQTT Port: "); 263 | Serial.println(config.mqtt_port); 264 | Serial.print("MQTT Prefix: "); 265 | Serial.println(config.mqtt_prefix); 266 | Serial.print("GPIO: "); 267 | Serial.print(digitalRead(G2_PIN)); 268 | Serial.println(digitalRead(G3_PIN)); 269 | 270 | MDNS.begin(config.name); 271 | 272 | ArduinoOTA.begin(); 273 | 274 | Serial.flush(); 275 | Serial.swap(); // Switch to sensor 276 | 277 | server.on("/config.json", HTTP_POST, webHandleUpdateConfig); 278 | server.on("/config.json", HTTP_GET, webHandleReadConfig); 279 | server.on("/status.json", HTTP_GET, webHandleStatus); 280 | server.onNotFound([]() { 281 | if (!handleFileRead(server.uri())) 282 | server.send(404, "text/plain", "404: Not Found"); 283 | }); 284 | 285 | server.begin(); 286 | } 287 | 288 | void mqtt_reconnect() { 289 | static unsigned long last_attempt = 0; 290 | if (millis() - last_attempt < 5000) { 291 | return; 292 | } 293 | 294 | last_attempt = millis(); 295 | Serial.swap(); 296 | if (config.mqtt_server.length() && config.mqtt_port) { 297 | if (WiFi.hostByName(config.mqtt_server.c_str(), config.address)) { 298 | client.setServer(config.address, config.mqtt_port); 299 | String clientId = config.name; 300 | if(client.connect(clientId.c_str())) { 301 | Serial.println("Connected\n"); 302 | } else { 303 | Serial.println(clientId); 304 | Serial.println(config.address); 305 | Serial.print("failed, rc="); 306 | Serial.println(client.state()); 307 | } 308 | } else { 309 | Serial.print("Couldn't find address: "); 310 | Serial.println(config.mqtt_server); 311 | } 312 | 313 | } 314 | Serial.flush(); 315 | Serial.swap(); 316 | } 317 | 318 | void readI2CSensors(void) { 319 | static unsigned long last_time_measurement = 0; 320 | 321 | if(millis() - last_time_measurement > 1000){ 322 | last_time_measurement = millis(); 323 | 324 | float temp = bme.readTemperature(); 325 | float rh = bme.readHumidity(); 326 | 327 | // https://bmcnoldy.rsmas.miami.edu/humidity_conversions.pdf 328 | float x = (17.625 * temp) / (243.04 + temp); 329 | float l = log(rh / 100.0); 330 | float dewpoint = 243.04 * (l + x) / (17.625 - l - x); 331 | 332 | measurement_temperature.record(temp); 333 | measurement_humidity.record(rh); 334 | measurement_dewpoint.record(dewpoint); 335 | 336 | measurement_temperature.publish(&client); 337 | measurement_humidity.publish(&client); 338 | measurement_dewpoint.publish(&client); 339 | 340 | int co2 = readCO2(); 341 | if (co2 > 0) { 342 | measurement_co2.record(co2); 343 | measurement_co2.publish(&client); 344 | } 345 | 346 | // Publish to the serial client if G2 pin is HIGH 347 | if (digitalRead(G2_PIN) == HIGH) { 348 | Serial.flush(); 349 | Serial.swap(); 350 | measurement_temperature.publish(&Serial); 351 | measurement_humidity.publish(&Serial); 352 | measurement_dewpoint.publish(&Serial); 353 | if (co2 > 0) { 354 | measurement_co2.publish(&Serial); 355 | } 356 | Serial.flush(); 357 | Serial.swap(); 358 | } 359 | } 360 | } 361 | 362 | void loop() { 363 | if (client.connected()) { 364 | client.loop(); 365 | } else { 366 | mqtt_reconnect(); 367 | } 368 | 369 | if (client.connected()) { 370 | digitalWrite(LED_PIN, LOW); // LOW == ON 371 | } else { 372 | digitalWrite(LED_PIN, HIGH); 373 | } 374 | 375 | server.handleClient(); 376 | ArduinoOTA.handle(); 377 | 378 | /* If there is more than one packet in the buffer we only want the most recent */ 379 | while (Serial.available() > 32) { 380 | Serial.read(); 381 | pms5003.reset_input(); 382 | } 383 | 384 | while (Serial.available()) { 385 | pms5003.process_byte(Serial.read()); 386 | 387 | if (pms5003.is_valid_packet()) { 388 | if (!client.connected()) { 389 | Serial.swap(); 390 | Serial.println("MQTT client is not connected"); 391 | Serial.flush(); 392 | Serial.swap(); 393 | } 394 | 395 | for(int i = 0; i < NUM_MEASUREMENTS_PMS5003; i++) { 396 | unsigned int value = pms5003.get_value(i); 397 | 398 | measurements_pms5003[i].record(value); 399 | measurements_pms5003[i].publish(&client); 400 | } 401 | 402 | // Publish to the serial client if G2 pin is HIGH 403 | if (digitalRead(G2_PIN) == HIGH) { 404 | Serial.flush(); 405 | Serial.swap(); 406 | for(int i = 0; i < NUM_MEASUREMENTS_PMS5003; i++) { 407 | measurements_pms5003[i].publish(&Serial); 408 | } 409 | Serial.flush(); 410 | Serial.swap(); 411 | } 412 | } 413 | } 414 | 415 | readI2CSensors(); 416 | } 417 | -------------------------------------------------------------------------------- /firmware/src/measurement.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | const char * Measurement::topic(void) { 7 | const char * prefix = cfg->mqtt_prefix.c_str(); 8 | if (last_prefix != prefix) { 9 | last_prefix = prefix; 10 | memset(full_topic, 0, 256); 11 | sprintf(full_topic, "%s/%s", last_prefix, name); 12 | } 13 | 14 | return full_topic; 15 | } 16 | 17 | void Measurement::broadcast(PubSubClient * client, char * formatted_value) { 18 | client->publish(topic(), formatted_value); 19 | } 20 | 21 | void Measurement::broadcast(HardwareSerial * serial, char * formatted_value) { 22 | serial->print(topic()); 23 | serial->print(": "); 24 | serial->println(formatted_value); 25 | } 26 | 27 | void FloatMeasurement::record(float value) { 28 | last_float = value; 29 | last_measured_at = millis(); 30 | } 31 | 32 | void FloatMeasurement::publish(PubSubClient * client) { 33 | char formatted_value[256]; 34 | sprintf(formatted_value, "%.2f", last_float); 35 | broadcast(client, formatted_value); 36 | } 37 | 38 | void FloatMeasurement::publish(HardwareSerial * serial) { 39 | char formatted_value[256]; 40 | sprintf(formatted_value, "%.2f", last_float); 41 | broadcast(serial, formatted_value); 42 | } 43 | 44 | void FloatMeasurement::publish(String &json) { 45 | json += "{\"name\": \""; 46 | json += name; 47 | json += "\", \"value\": "; 48 | json += last_float; 49 | json += ", \"last_measured_at\": "; 50 | json += last_measured_at; 51 | json += "}, "; 52 | } 53 | 54 | void UnsignedIntMeasurement::record(unsigned int value) { 55 | last_value = value; 56 | last_measured_at = millis(); 57 | } 58 | 59 | void UnsignedIntMeasurement::publish(PubSubClient * client) { 60 | char formatted_value[256]; 61 | sprintf(formatted_value, "%u", last_value); 62 | broadcast(client, formatted_value); 63 | } 64 | 65 | void UnsignedIntMeasurement::publish(HardwareSerial * serial) { 66 | char formatted_value[256]; 67 | sprintf(formatted_value, "%u", last_value); 68 | broadcast(serial, formatted_value); 69 | } 70 | 71 | void UnsignedIntMeasurement::publish(String &json) { 72 | json += "{\"name\": \""; 73 | json += name; 74 | json += "\", \"value\": "; 75 | json += last_value; 76 | json += ", \"last_measured_at\": "; 77 | json += last_measured_at; 78 | json += "}, "; 79 | } 80 | -------------------------------------------------------------------------------- /firmware/src/measurement.h: -------------------------------------------------------------------------------- 1 | struct Config { 2 | String name; 3 | 4 | String mqtt_server; 5 | unsigned int mqtt_port; 6 | String mqtt_prefix; 7 | IPAddress address; 8 | }; 9 | 10 | struct Measurement { 11 | const char *name; 12 | Config * cfg; 13 | 14 | unsigned long last_measured_at; 15 | const char * last_prefix; 16 | char full_topic[256]; 17 | 18 | Measurement(const char *name, Config * cfg): 19 | name(name), 20 | cfg(cfg), 21 | last_measured_at(0), 22 | last_prefix(NULL) 23 | {}; 24 | 25 | const char * topic(void); 26 | void broadcast(PubSubClient * client, char * formatted_value); 27 | void broadcast(HardwareSerial * serial, char * formatted_value); 28 | }; 29 | 30 | struct FloatMeasurement : Measurement { 31 | float last_float; 32 | 33 | FloatMeasurement(const char *name, Config * cfg): 34 | Measurement(name, cfg), 35 | last_float(0.0) 36 | { }; 37 | 38 | void record(float value); 39 | void publish(PubSubClient * client); 40 | void publish(HardwareSerial * serial); 41 | void publish(String &json); 42 | }; 43 | 44 | struct UnsignedIntMeasurement : Measurement { 45 | unsigned int last_value; 46 | 47 | UnsignedIntMeasurement(const char *name, Config * cfg): 48 | Measurement(name, cfg), 49 | last_value(0) 50 | { }; 51 | 52 | void record(unsigned int value); 53 | void publish(PubSubClient * client); 54 | void publish(HardwareSerial * serial); 55 | void publish(String &json); 56 | }; 57 | -------------------------------------------------------------------------------- /firmware/src/tp6703.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #define ADDR_6713 0x15 5 | 6 | int readCO2(void) 7 | { 8 | int data[4]; 9 | Wire.beginTransmission(ADDR_6713); 10 | Wire.write(0x04); 11 | Wire.write(0x13); 12 | Wire.write(0x8B); 13 | Wire.write(0x00); 14 | Wire.write(0x01); 15 | 16 | // end transmission 17 | Wire.endTransmission(); 18 | // read report of current gas measurement in ppm 19 | delay(10); 20 | Wire.requestFrom(ADDR_6713, 4); 21 | if (Wire.available() == 4) { 22 | data[0] = Wire.read(); 23 | data[1] = Wire.read(); 24 | data[2] = Wire.read(); 25 | data[3] = Wire.read(); 26 | } else { 27 | return -1; 28 | } 29 | 30 | return ((data[2] * 0xFF ) + data[3]); 31 | } 32 | -------------------------------------------------------------------------------- /firmware/src/tp6703.h: -------------------------------------------------------------------------------- 1 | int readCO2(void); 2 | -------------------------------------------------------------------------------- /firmware/utils/esp_client.rb: -------------------------------------------------------------------------------- 1 | begin 2 | require "uchip/mcp2221" 3 | rescue LoadError 4 | warn "UChip gem insn't installed, installing now" 5 | Gem.install "uchip" 6 | retry 7 | end 8 | 9 | class ESPClient 10 | FLASH_PIN = 0 11 | RST_PIN = 1 12 | ESP_PIN14 = 2 13 | ESP_PIN12 = 3 14 | 15 | def self.open 16 | # Find the first connected chip 17 | chip = UChip::MCP2221.first 18 | return unless chip 19 | client = new chip 20 | client.ensure_pin_settings 21 | client 22 | end 23 | 24 | attr_reader :chip 25 | 26 | def initialize chip 27 | @chip = chip 28 | end 29 | 30 | def i2c_on address 31 | @chip.i2c_on address 32 | end 33 | 34 | # Make sure the power-up settings for the MCP are correct 35 | def ensure_pin_settings 36 | new_settings = check_gp_settings @chip.gp_settings 37 | if new_settings 38 | @chip.gp_settings = new_settings 39 | end 40 | 41 | 4.times do |i| 42 | chip.set_gpio_value i, (PIN_VALUE_BITMASK >> i) & 0x1 43 | end 44 | end 45 | 46 | ## 47 | # Make sure +pin+ is an output pin and the default value is +val+ 48 | def check_pin gp_settings, pin, val 49 | gp_settings.designation_at(pin) == 0 && 50 | gp_settings.direction_at(pin) == 0 && 51 | gp_settings.output_value_at(pin) == val 52 | end 53 | 54 | def set_pin gp_settings, pin, val 55 | gp_settings.set_designation_at(pin, 0) # default to output 56 | gp_settings.set_direction_at(pin, 0) # default to gpio function 57 | gp_settings.set_output_value_at(pin, val) # default output to val 58 | end 59 | 60 | # default pin value bitmask. We want pin 0 and 1 to be HIGH, but 2 and 3 61 | # to be LOW 62 | PIN_VALUE_BITMASK = 0b0011 63 | 64 | def check_gp_settings gp_settings 65 | pin_bitmask = PIN_VALUE_BITMASK 66 | 67 | return false if 4.times.all? do |i| 68 | val = (pin_bitmask >> i) & 0x1 69 | check_pin gp_settings, i, val 70 | end 71 | 72 | 4.times do |i| 73 | val = (pin_bitmask >> i) & 0x1 74 | set_pin gp_settings, i, val 75 | end 76 | 77 | gp_settings 78 | end 79 | 80 | def program! 81 | chip.set_gpio_value RST_PIN, 0 82 | chip.set_gpio_value FLASH_PIN, 0 83 | chip.set_gpio_value RST_PIN, 1 84 | 85 | sleep 0.5 86 | 87 | chip.set_gpio_value FLASH_PIN, 1 88 | end 89 | 90 | def esp_pin14 91 | chip.gpio_value ESP_PIN14 92 | end 93 | 94 | def esp_pin14= v 95 | chip.set_gpio_value ESP_PIN14, v 96 | end 97 | 98 | alias gp2 esp_pin14 99 | alias gp2= esp_pin14= 100 | 101 | def esp_pin12 102 | chip.gpio_value ESP_PIN12 103 | end 104 | 105 | def esp_pin12= v 106 | chip.set_gpio_value ESP_PIN12, v 107 | end 108 | 109 | alias gp3 esp_pin12 110 | alias gp3= esp_pin12= 111 | end 112 | -------------------------------------------------------------------------------- /firmware/utils/i2c-client.rb: -------------------------------------------------------------------------------- 1 | require "esp_client" 2 | 3 | begin 4 | esp = ESPClient.open 5 | esp.gp3 = 1 6 | 7 | #i2c = esp.i2c_on 0x51 8 | #i2c.cancel 9 | #i2c.write 0x2.chr 10 | #p i2c.read 7 11 | 12 | i2c = esp.i2c_on 0x15 13 | i2c.cancel 14 | i2c.write [0x04, 0x13, 0x8B, 0x00, 0x01].pack("C*") 15 | sleep 1 16 | p i2c.read 4 17 | ensure 18 | esp.gp2 = 0 19 | esp.gp3 = 0 20 | end 21 | -------------------------------------------------------------------------------- /firmware/utils/mqtt-to-influx.rb: -------------------------------------------------------------------------------- 1 | # Connects to MQTT, subscribes to the topics published by the esp8266aq sensor, 2 | # then feeds the data in to InfluxDB (which is the data store for Grafana). 3 | 4 | require "uri" 5 | require "mqtt" 6 | require "influxdb" 7 | 8 | HOST = "tender.home" 9 | 10 | class InfluxWrapper 11 | def initialize influx 12 | @influx = influx 13 | end 14 | 15 | def write_co2 location, value, sensor_type 16 | data = msg({ :value => value, :unit => "PPM" }, location, sensor_type) 17 | @influx.write_point("co2_samples", data) 18 | end 19 | 20 | def write_temp location, value, sensor_type 21 | data = msg({ :value => value, :unit => "C" }, location, sensor_type) 22 | @influx.write_point("temperatures", data) 23 | end 24 | 25 | def write_humidity location, value, sensor_type 26 | data = msg({ :value => value, :unit => "%" }, location, sensor_type) 27 | @influx.write_point("humidity_samples", data) 28 | end 29 | 30 | def write_dewpoint location, value, sensor_type 31 | data = msg({ :value => value, :unit => "C" }, location, sensor_type) 32 | @influx.write_point("dewpoint_samples", data) 33 | end 34 | 35 | def write_pm25 location, value, sensor_type 36 | data = msg({ "pm2_5_standard" => value }, location, sensor_type) 37 | @influx.write_point("particle_samples", data) 38 | end 39 | 40 | private 41 | 42 | def msg values, location, sensor_type 43 | { values: values, tags: { location: location, sensor_type: sensor_type } } 44 | end 45 | 46 | def self.connect 47 | InfluxWrapper.new InfluxDB::Client.new("house", host: HOST) 48 | end 49 | end 50 | 51 | influx = InfluxWrapper.connect 52 | 53 | MQTT::Client.connect HOST do |client| 54 | client.subscribe "home/+/esp/+" 55 | client.subscribe "home/+/esp8266aq/+" 56 | client.subscribe "home/+/+/esp8266aq/+" 57 | 58 | loop do 59 | topic, message = client.get 60 | 61 | if topic =~ /^(.*)\/(esp(?:8266aq)?)\/(.*)$/ 62 | location = $1 63 | sensor_type = $2 == "esp" ? "fridge" : "room" 64 | measurement = $3 65 | case measurement 66 | when "humidity" 67 | influx.write_humidity location, message.to_f, sensor_type 68 | when "co2" 69 | influx.write_co2 location, message.to_i, sensor_type 70 | when "temperature" 71 | influx.write_temp location, message.to_f, sensor_type 72 | when "dewpoint" 73 | influx.write_dewpoint location, message.to_f, sensor_type 74 | when "pm2_5_standard" 75 | influx.write_pm25 location, message.to_i, sensor_type 76 | end 77 | end 78 | end 79 | end 80 | -------------------------------------------------------------------------------- /firmware/utils/prog.rb: -------------------------------------------------------------------------------- 1 | # This program tells the MCP2221 to put the ESP in to programming mode. 2 | 3 | require_relative "esp_client" 4 | 5 | chip = ESPClient.open 6 | 7 | unless chip 8 | warn "Couldn't find MCP2221. Is it plugged in?" 9 | exit 1 10 | end 11 | 12 | chip.program! 13 | -------------------------------------------------------------------------------- /firmware/utils/serial-client.rb: -------------------------------------------------------------------------------- 1 | require "uart" 2 | require "io/wait" 3 | require "esp_client" 4 | 5 | begin 6 | esp = ESPClient.open 7 | esp.gp2 = 1 8 | esp.gp3 = 0 9 | 10 | trap "INFO" do 11 | puts "hi" 12 | esp.gp3 ^= 1 13 | esp.gp2 ^= 1 14 | end 15 | 16 | UART.open '/dev/cu.usbmodem1441201' do |serial| 17 | loop do 18 | serial.wait_readable 19 | line = serial.readline 20 | puts line 21 | end 22 | end 23 | 24 | ensure 25 | puts "turning gp2 off" 26 | esp.gp2 = 0 27 | end 28 | -------------------------------------------------------------------------------- /pcb/README.md: -------------------------------------------------------------------------------- 1 | # My ESP8266 + Plantower AQ Sensor Project PCB 2 | 3 | This is the PCB for the project. I've checked in the gerber files in 4 | `gerbers.zip`, so you can just upload that to a PCB manufacturer and get PCBs 5 | made. I like JLCPCB. 6 | 7 | ## Parts List 8 | 9 | Here are the parts I used: 10 | 11 | * [ESP-12F](https://www.digikey.com/en/products/detail/adafruit-industries-llc/2491/5761206) for WiFi [China](https://www.aliexpress.com/item/32339917567.html) 12 | * [BME280](https://www.aliexpress.com/item/32862844557.html) for temp / humidity over I2C 13 | * [PMS5003](https://www.aliexpress.com/item/32834164058.html) for Air Quality 14 | * [MCP1700](https://www.digikey.com/en/products/detail/microchip-technology/MCP1700-3302E-TO/652680) 3.3v regulator 15 | * 100nf capacitor (4.7mm ceramic disc) 16 | * 47nf capacitor (4.7mm ceramic disc) 17 | * 10uf capacitor (4mm radial) 18 | * 2x 10k resistors (THT, 0207) 19 | * 2x 5.1k resistors (THT, 0207) 20 | * [WM7626CT-ND](https://www.digikey.com/product-detail/en/molex/0532610871/WM7626CT-ND/699113) Molex SMD connector for the AQ sensor [Europe](https://www.reichelt.nl/molex-pin-header-smd-picoblade-1x8-polig-stekker-molex-532610871-p186231.html) 21 | * [USB4085-GF-A](https://www.digikey.com/en/products/detail/gct/USB4085-GF-A/9859733) for 5v power supply and serial communication 22 | * [4 pin header](https://www.digikey.com/product-detail/en/sullins-connector-solutions/PPTC041LFBN-RC/S7002-ND/810144) to plug in the BME280 breakout board [Europe](https://www.reichelt.nl/female-header-2-54mm-straight-1x4-bkl-10120946-p266671.html) 23 | * [MCP2221a](https://www.digikey.com/en/products/detail/microchip-technology/MCP2221A-I-P/6009296) for programming the ESP and serial communication 24 | * [2x JST SH 4 pin Vertical Connector](https://www.adafruit.com/product/4328). These are optional, they're just for future extension to the board 25 | * [IC Socket](https://www.digikey.com/en/products/detail/te-connectivity-amp-connectors/1-2199298-3/5022040) for mounting the MCP2221a 26 | 27 | ## Assembly 28 | 29 | Some of these parts are surface mount parts and they can be somewhat tricky to solder. 30 | I recommend using a [flux pen](https://www.amazon.com/gp/product/B074J6R1KQ/) and [fine solder wire](https://www.amazon.com/gp/product/B071G1J3W6/). 31 | 32 | I recommend soldering in the following order: 33 | 34 | * Resistors 35 | * ESP 36 | * Ceramic capacitors 37 | * MCP1700 Voltage regulator 38 | * IC Socket for MCP2221a 39 | * 10uf radial capacitor 40 | * Molex socket 41 | * JST headers (if using) 42 | * Header socket for BME breakout board 43 | * USB connector 44 | 45 | I soldered in that order because I found it easiest to keep the connectors 46 | close to the PCB. 47 | -------------------------------------------------------------------------------- /pcb/artwork.pretty/gorby.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LOGO (layer F.Cu) 2 | (at 0 0) 3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide 4 | (effects (font (thickness 0.3))) 5 | ) 6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide 7 | (effects (font (thickness 0.3))) 8 | ) 9 | (fp_poly (pts (xy 10.346231 -11.190175) (xy 10.596281 -11.134606) (xy 10.803711 -11.020462) (xy 10.945642 -10.888716) (xy 11.186473 -10.564912) (xy 11.352761 -10.205288) (xy 11.447843 -9.800360) (xy 11.475295 -9.382382) 10 | (xy 11.470812 -9.188202) (xy 11.455901 -8.988076) (xy 11.428274 -8.768507) (xy 11.385644 -8.516002) (xy 11.325724 -8.217065) (xy 11.246225 -7.858202) (xy 11.144861 -7.425916) (xy 11.140658 -7.408326) 11 | (xy 11.039860 -6.982024) (xy 10.959449 -6.627385) (xy 10.897128 -6.328237) (xy 10.850601 -6.068410) (xy 10.817572 -5.831733) (xy 10.795744 -5.602036) (xy 10.782821 -5.363148) (xy 10.776507 -5.098898) 12 | (xy 10.774588 -4.830536) (xy 10.774894 -4.515796) (xy 10.778716 -4.273078) (xy 10.787597 -4.083713) (xy 10.803077 -3.929031) (xy 10.826699 -3.790362) (xy 10.860003 -3.649035) (xy 10.877570 -3.583214) 13 | (xy 10.959728 -3.316556) (xy 11.064342 -3.043262) (xy 11.198131 -2.749294) (xy 11.367813 -2.420610) (xy 11.580105 -2.043171) (xy 11.761164 -1.736593) (xy 12.010250 -1.315343) (xy 12.215204 -0.951850) 14 | (xy 12.382685 -0.628709) (xy 12.519352 -0.328512) (xy 12.631860 -0.033855) (xy 12.726869 0.272668) (xy 12.811037 0.608465) (xy 12.891021 0.990941) (xy 12.971927 1.428750) (xy 13.032300 1.857284) 15 | (xy 13.074319 2.342713) (xy 13.096736 2.852845) (xy 13.098304 3.355488) (xy 13.077776 3.818451) (xy 13.068732 3.927634) (xy 12.987739 4.531416) (xy 12.858892 5.076864) (xy 12.676249 5.586098) 16 | (xy 12.549035 5.862127) (xy 12.441982 6.079223) (xy 12.376352 6.231624) (xy 12.354697 6.336602) (xy 12.379572 6.411429) (xy 12.453530 6.473375) (xy 12.579127 6.539711) (xy 12.654643 6.576310) 17 | (xy 12.919011 6.709808) (xy 13.113610 6.822935) (xy 13.253519 6.927405) (xy 13.353821 7.034930) (xy 13.429597 7.157222) (xy 13.446300 7.191104) (xy 13.486638 7.285948) (xy 13.513090 7.380511) 18 | (xy 13.523350 7.483875) (xy 13.515107 7.605121) (xy 13.486053 7.753332) (xy 13.433878 7.937588) (xy 13.356275 8.166972) (xy 13.250933 8.450564) (xy 13.115544 8.797448) (xy 12.947798 9.216704) 19 | (xy 12.903149 9.327417) (xy 12.758741 9.682326) (xy 12.621318 10.014738) (xy 12.495367 10.314199) (xy 12.385373 10.570253) (xy 12.295822 10.772448) (xy 12.231202 10.910328) (xy 12.197806 10.971145) 20 | (xy 12.025432 11.145788) (xy 11.818726 11.245236) (xy 11.571866 11.270432) (xy 11.279031 11.222320) (xy 11.067143 11.154359) (xy 10.872557 11.082129) (xy 10.691078 11.014315) (xy 10.553572 10.962464) 21 | (xy 10.522857 10.950730) (xy 10.389495 10.920110) (xy 10.180087 10.898757) (xy 9.908950 10.887967) (xy 9.819822 10.886994) (xy 9.349229 10.866244) (xy 8.930205 10.810599) (xy 8.862988 10.797197) 22 | (xy 8.605953 10.735458) (xy 8.292585 10.648740) (xy 7.950787 10.545729) (xy 7.608462 10.435111) (xy 7.293513 10.325571) (xy 7.054343 10.234198) (xy 6.788069 10.125866) (xy 6.340891 10.276460) 23 | (xy 5.797378 10.444717) (xy 5.188365 10.607440) (xy 4.539066 10.759095) (xy 3.874695 10.894145) (xy 3.220467 11.007053) (xy 2.653393 11.086109) (xy 2.048698 11.146940) (xy 1.375672 11.192832) 24 | (xy 0.655491 11.223597) (xy -0.090669 11.239047) (xy -0.841632 11.238995) (xy -1.576222 11.223253) (xy -2.273263 11.191633) (xy -2.911580 11.143949) (xy -2.993571 11.136126) (xy -4.221903 10.992278) 25 | (xy -5.376610 10.809414) (xy -6.456276 10.587930) (xy -7.459480 10.328221) (xy -8.384807 10.030685) (xy -9.230836 9.695716) (xy -9.996151 9.323711) (xy -10.473122 9.047690) (xy -11.092276 8.621340) 26 | (xy -11.632246 8.159435) (xy -12.097107 7.656007) (xy -12.490935 7.105092) (xy -12.817805 6.500725) (xy -13.081793 5.836940) (xy -13.286973 5.107771) (xy -13.343704 4.845676) (xy -13.384443 4.626508) 27 | (xy -13.413153 4.423011) (xy -13.431672 4.211168) (xy -13.441837 3.966964) (xy -13.445486 3.666384) (xy -13.445513 3.515179) (xy -13.445359 3.489068) (xy -12.758686 3.489068) (xy -12.728008 3.864980) 28 | (xy -12.706641 4.086939) (xy -12.679359 4.316372) (xy -12.651840 4.505809) (xy -12.650191 4.515537) (xy -12.603052 4.790181) (xy -12.231972 4.934720) (xy -11.534826 5.161451) (xy -10.835873 5.298552) 29 | (xy -10.132295 5.346070) (xy -9.421272 5.304052) (xy -8.699985 5.172543) (xy -8.111960 5.002360) (xy -7.862321 4.923565) (xy -7.685176 4.881259) (xy -7.570092 4.875156) (xy -7.506633 4.904973) 30 | (xy -7.484368 4.970427) (xy -7.483928 4.985290) (xy -7.502656 5.058017) (xy -7.565917 5.125784) (xy -7.684334 5.194569) (xy -7.868527 5.270351) (xy -8.129117 5.359106) (xy -8.172961 5.373117) 31 | (xy -8.701446 5.519754) (xy -9.208117 5.612810) (xy -9.726872 5.656736) (xy -10.291607 5.655986) (xy -10.318750 5.654969) (xy -10.750157 5.629951) (xy -11.123175 5.587872) (xy -11.469382 5.523275) 32 | (xy -11.820357 5.430706) (xy -12.065000 5.353287) (xy -12.237453 5.298252) (xy -12.374298 5.259041) (xy -12.455222 5.241268) (xy -12.468134 5.241892) (xy -12.469278 5.297650) (xy -12.441419 5.419141) 33 | (xy -12.390145 5.588236) (xy -12.321046 5.786809) (xy -12.239711 5.996732) (xy -12.222670 6.038000) (xy -11.942332 6.594018) (xy -11.580688 7.113718) (xy -11.137469 7.597264) (xy -10.612404 8.044818) 34 | (xy -10.005224 8.456542) (xy -9.315658 8.832599) (xy -8.543436 9.173152) (xy -7.688288 9.478365) (xy -6.749943 9.748398) (xy -5.728133 9.983416) (xy -5.646964 9.999869) (xy -4.267424 10.237097) 35 | (xy -2.855444 10.402966) (xy -1.432235 10.495974) (xy -0.019005 10.514616) (xy 1.072201 10.476022) (xy 2.140276 10.392136) (xy 3.147740 10.266182) (xy 4.115939 10.094981) (xy 5.011608 9.889371) 36 | (xy 5.253790 9.826742) (xy 5.463592 9.770887) (xy 5.625913 9.725956) (xy 5.725655 9.696098) (xy 5.750048 9.686499) (xy 5.735870 9.644535) (xy 5.675154 9.568779) (xy 5.668747 9.562017) 37 | (xy 5.513455 9.340234) (xy 5.423829 9.080846) (xy 5.404944 8.809505) (xy 5.461874 8.551859) (xy 5.466599 8.540281) (xy 5.506497 8.432358) (xy 5.503740 8.360955) (xy 5.449886 8.285219) 38 | (xy 5.403641 8.235577) (xy 5.222211 7.984317) (xy 5.123334 7.708953) (xy 5.112178 7.503579) (xy 5.488214 7.503579) (xy 5.531397 7.727553) (xy 5.653917 7.927378) (xy 5.845228 8.091180) 39 | (xy 6.094789 8.207082) (xy 6.119596 8.214714) (xy 6.320084 8.273985) (xy 6.187631 8.328329) (xy 6.007291 8.442293) (xy 5.874146 8.604907) (xy 5.799153 8.793782) (xy 5.793270 8.986528) 40 | (xy 5.820313 9.078878) (xy 5.871091 9.179126) (xy 5.938201 9.266182) (xy 6.033384 9.347312) (xy 6.168384 9.429783) (xy 6.354941 9.520860) (xy 6.604799 9.627812) (xy 6.896291 9.744749) 41 | (xy 7.391028 9.936458) (xy 7.818085 10.093408) (xy 8.191935 10.219300) (xy 8.527055 10.317837) (xy 8.837920 10.392722) (xy 9.139005 10.447655) (xy 9.444786 10.486340) (xy 9.769738 10.512480) 42 | (xy 9.933214 10.521485) (xy 10.205901 10.535754) (xy 10.409392 10.550566) (xy 10.565145 10.569809) (xy 10.694617 10.597372) (xy 10.819264 10.637141) (xy 10.960545 10.693005) (xy 11.021786 10.718725) 43 | (xy 11.294103 10.822312) (xy 11.503904 10.873775) (xy 11.662281 10.874010) (xy 11.780323 10.823915) (xy 11.824640 10.783661) (xy 11.909341 10.677155) (xy 11.963518 10.590893) (xy 12.009610 10.490460) 44 | (xy 12.080822 10.323456) (xy 12.172299 10.102221) (xy 12.279186 9.839092) (xy 12.396628 9.546408) (xy 12.519768 9.236507) (xy 12.643752 8.921729) (xy 12.763723 8.614410) (xy 12.874827 8.326890) 45 | (xy 12.972209 8.071507) (xy 13.051012 7.860599) (xy 13.106381 7.706505) (xy 13.133461 7.621564) (xy 13.135085 7.613762) (xy 13.127826 7.438956) (xy 13.046369 7.284409) (xy 12.885224 7.143449) 46 | (xy 12.638898 7.009404) (xy 12.636709 7.008405) (xy 12.343935 6.854158) (xy 12.121149 6.692015) (xy 11.976573 6.528517) (xy 11.937669 6.452262) (xy 11.905794 6.343174) (xy 11.869419 6.180777) 47 | (xy 11.838654 6.013215) (xy 11.802257 5.817914) (xy 11.757475 5.652410) (xy 11.694558 5.495028) (xy 11.603757 5.324098) (xy 11.475324 5.117947) (xy 11.417406 5.030821) (xy 11.890655 5.030821) 48 | (xy 11.924823 5.101809) (xy 11.939839 5.125973) (xy 11.997305 5.200285) (xy 12.039843 5.197839) (xy 12.080472 5.113313) (xy 12.097182 5.061621) (xy 12.144584 4.907170) (xy 12.014078 4.952665) 49 | (xy 11.916044 4.991291) (xy 11.890655 5.030821) (xy 11.417406 5.030821) (xy 11.353468 4.934641) (xy 11.052288 4.487975) (xy 11.005989 4.030925) (xy 10.982894 3.665308) (xy 10.983048 3.660731) 50 | (xy 11.407322 3.660731) (xy 11.407322 3.973490) (xy 11.414529 4.166342) (xy 11.442552 4.309546) (xy 11.500989 4.443469) (xy 11.532195 4.498675) (xy 11.657068 4.711099) (xy 11.929842 4.618982) 51 | (xy 12.079470 4.558986) (xy 12.194355 4.495570) (xy 12.243717 4.450066) (xy 12.260006 4.385056) (xy 12.281886 4.251914) (xy 12.306676 4.072845) (xy 12.331693 3.870053) (xy 12.354255 3.665742) 52 | (xy 12.371682 3.482117) (xy 12.381292 3.341383) (xy 12.382345 3.302228) (xy 12.345060 3.302706) (xy 12.247526 3.334910) (xy 12.121697 3.387170) (xy 11.934567 3.466739) (xy 11.737811 3.544362) 53 | (xy 11.634107 3.582183) (xy 11.407322 3.660731) (xy 10.983048 3.660731) (xy 10.994475 3.322122) (xy 11.013855 3.136313) (xy 11.046603 2.854789) (xy 11.063951 2.648514) (xy 11.064845 2.503163) 54 | (xy 11.048231 2.404412) (xy 11.013053 2.337937) (xy 10.958259 2.289412) (xy 10.951172 2.284675) (xy 10.816750 2.228955) (xy 10.633127 2.191621) (xy 10.440890 2.178134) (xy 10.280625 2.193956) 55 | (xy 10.279348 2.194274) (xy 10.093005 2.286248) (xy 9.921621 2.459941) (xy 9.768560 2.707100) (xy 9.637188 3.019473) (xy 9.530873 3.388807) (xy 9.452979 3.806851) (xy 9.406872 4.265351) 56 | (xy 9.402574 4.343895) (xy 9.389821 4.578385) (xy 9.376733 4.735765) (xy 9.360782 4.829616) (xy 9.339441 4.873516) (xy 9.310182 4.881044) (xy 9.302914 4.879310) (xy 9.128431 4.830465) 57 | (xy 8.901639 4.769825) (xy 8.636521 4.700846) (xy 8.347061 4.626987) (xy 8.047241 4.551704) (xy 7.751045 4.478456) (xy 7.472456 4.410700) (xy 7.225458 4.351893) (xy 7.024034 4.305493) 58 | (xy 6.882168 4.274958) (xy 6.813842 4.263744) (xy 6.813345 4.263741) (xy 6.646903 4.302242) (xy 6.476699 4.403622) (xy 6.334592 4.547334) (xy 6.304398 4.591996) (xy 6.231978 4.778441) 59 | (xy 6.216689 4.984309) (xy 6.254052 5.183637) (xy 6.339586 5.350461) (xy 6.452523 5.450521) (xy 6.508731 5.486060) (xy 6.503026 5.508497) (xy 6.424139 5.528786) (xy 6.360003 5.540443) 60 | (xy 6.128894 5.618428) (xy 5.950738 5.751411) (xy 5.829250 5.923484) (xy 5.768144 6.118734) (xy 5.771136 6.321252) (xy 5.841942 6.515127) (xy 5.984275 6.684450) (xy 6.077280 6.751232) 61 | (xy 6.168304 6.822181) (xy 6.171704 6.869825) (xy 6.087920 6.892625) (xy 6.036280 6.894455) (xy 5.861265 6.936522) (xy 5.700945 7.048229) (xy 5.574195 7.208597) (xy 5.499889 7.396648) 62 | (xy 5.488214 7.503579) (xy 5.112178 7.503579) (xy 5.107802 7.423041) (xy 5.176407 7.140140) (xy 5.324469 6.880930) (xy 5.407899 6.765893) (xy 5.443521 6.684233) (xy 5.439477 6.597923) 63 | (xy 5.409021 6.486071) (xy 5.370684 6.213077) (xy 5.407046 5.934816) (xy 5.510941 5.676315) (xy 5.675202 5.462600) (xy 5.711383 5.430182) (xy 5.791756 5.354391) (xy 5.827571 5.282241) 64 | (xy 5.830177 5.177895) (xy 5.820573 5.085360) (xy 5.819546 4.792728) (xy 5.894893 4.533508) (xy 6.052448 4.291672) (xy 6.146720 4.189240) (xy 6.295545 4.052030) (xy 6.424658 3.967454) 65 | (xy 6.568069 3.915054) (xy 6.625966 3.900969) (xy 6.709049 3.884065) (xy 6.787075 3.875121) (xy 6.873460 3.876311) (xy 6.981621 3.889809) (xy 7.124975 3.917789) (xy 7.316938 3.962425) 66 | (xy 7.570927 4.025891) (xy 7.869949 4.102531) (xy 8.161212 4.177630) (xy 8.426028 4.246137) (xy 8.650710 4.304492) (xy 8.821570 4.349136) (xy 8.924919 4.376510) (xy 8.946697 4.382519) 67 | (xy 8.992636 4.384307) (xy 9.016606 4.342438) (xy 9.025328 4.238029) (xy 9.026072 4.159480) (xy 9.026072 3.913204) (xy 8.765268 3.882753) (xy 8.595576 3.857593) (xy 8.387730 3.818983) 68 | (xy 8.165089 3.772203) (xy 7.951016 3.722531) (xy 7.768873 3.675245) (xy 7.642021 3.635624) (xy 7.608661 3.621421) (xy 7.540911 3.543544) (xy 7.539513 3.440111) (xy 7.594404 3.358850) 69 | (xy 7.644495 3.338250) (xy 7.731796 3.338516) (xy 7.871858 3.361441) (xy 8.080234 3.408822) (xy 8.127351 3.420371) (xy 8.352602 3.471339) (xy 8.574499 3.513592) (xy 8.760334 3.541244) 70 | (xy 8.837951 3.548236) (xy 9.080724 3.560536) (xy 9.166553 3.243036) (xy 9.212827 3.072083) (xy 9.252483 2.925981) (xy 9.277122 2.835674) (xy 9.277501 2.834294) (xy 9.283190 2.801894) 71 | (xy 9.271796 2.778252) (xy 9.231385 2.762000) (xy 9.150021 2.751771) (xy 9.015771 2.746198) (xy 8.816698 2.743913) (xy 8.540868 2.743549) (xy 8.485696 2.743580) (xy 8.189895 2.742879) 72 | (xy 7.971378 2.739543) (xy 7.816726 2.732381) (xy 7.712518 2.720200) (xy 7.645337 2.701810) (xy 7.601763 2.676016) (xy 7.588458 2.663881) (xy 7.535458 2.585643) (xy 7.556139 2.509263) 73 | (xy 7.558758 2.505131) (xy 7.594336 2.468775) (xy 7.655973 2.446844) (xy 7.761798 2.436967) (xy 7.929941 2.436772) (xy 8.056917 2.439973) (xy 8.312783 2.440551) (xy 8.607578 2.430524) 74 | (xy 8.890401 2.411908) (xy 8.980714 2.403364) (xy 9.193448 2.380013) (xy 9.338896 2.357729) (xy 9.440000 2.328196) (xy 9.519703 2.283097) (xy 9.600946 2.214117) (xy 9.661072 2.156751) 75 | (xy 9.762841 2.076220) (xy 11.336125 2.076220) (xy 11.370032 2.164758) (xy 11.393056 2.211161) (xy 11.446718 2.373357) (xy 11.463299 2.591443) (xy 11.442899 2.875210) (xy 11.402698 3.140982) 76 | (xy 11.388237 3.249521) (xy 11.389487 3.307870) (xy 11.392787 3.311071) (xy 11.442084 3.295600) (xy 11.550993 3.255224) (xy 11.682203 3.204095) (xy 11.871839 3.125166) (xy 12.067933 3.037993) 77 | (xy 12.172203 2.988649) (xy 12.392798 2.880179) (xy 12.363911 2.540000) (xy 12.344253 2.334831) (xy 12.319787 2.117882) (xy 12.293093 1.907840) (xy 12.266754 1.723390) (xy 12.243351 1.583219) 78 | (xy 12.225465 1.506012) (xy 12.219805 1.496786) (xy 12.177700 1.520137) (xy 12.076065 1.583411) (xy 11.930998 1.676432) (xy 11.789166 1.768929) (xy 11.618041 1.879281) (xy 11.474415 1.968134) 79 | (xy 11.375293 2.025204) (xy 11.339211 2.041071) (xy 11.336125 2.076220) (xy 9.762841 2.076220) (xy 9.934853 1.940106) (xy 10.215612 1.812813) (xy 10.507580 1.773552) (xy 10.773288 1.809798) 80 | (xy 10.878381 1.833247) (xy 10.961757 1.836561) (xy 11.048991 1.813220) (xy 11.165657 1.756704) (xy 11.319813 1.670460) (xy 11.518096 1.550670) (xy 11.723589 1.415391) (xy 11.894273 1.292372) 81 | (xy 11.905387 1.283718) (xy 12.008716 1.202168) (xy 12.079133 1.135144) (xy 12.118226 1.065791) (xy 12.127586 0.977257) (xy 12.108802 0.852686) (xy 12.063464 0.675224) (xy 11.993161 0.428018) 82 | (xy 11.987846 0.409417) (xy 11.882604 0.098444) (xy 11.732326 -0.251222) (xy 11.533064 -0.647593) (xy 11.280867 -1.098684) (xy 11.070637 -1.451429) (xy 10.781557 -1.943537) (xy 10.547863 -2.384266) 83 | (xy 10.364471 -2.789854) (xy 10.226297 -3.176540) (xy 10.128257 -3.560565) (xy 10.065267 -3.958167) (xy 10.032242 -4.385586) (xy 10.023929 -4.794687) (xy 10.038973 -5.358911) (xy 10.086933 -5.898588) 84 | (xy 10.172047 -6.449795) (xy 10.278594 -6.962321) (xy 10.332535 -7.198234) (xy 10.398978 -7.488412) (xy 10.470099 -7.798710) (xy 10.538078 -8.094986) (xy 10.548783 -8.141607) (xy 10.648221 -8.613507) 85 | (xy 10.711267 -9.012959) (xy 10.737566 -9.350764) (xy 10.726764 -9.637724) (xy 10.678506 -9.884639) (xy 10.592440 -10.102312) (xy 10.478404 -10.287626) (xy 10.387062 -10.402095) (xy 10.308007 -10.458417) 86 | (xy 10.207324 -10.476507) (xy 10.155067 -10.477500) (xy 9.968696 -10.454617) (xy 9.718983 -10.389278) (xy 9.419919 -10.286448) (xy 9.085494 -10.151093) (xy 8.729699 -9.988177) (xy 8.609616 -9.929029) 87 | (xy 8.042582 -9.663389) (xy 7.478986 -9.439364) (xy 6.902467 -9.252610) (xy 6.296662 -9.098784) (xy 5.645212 -8.973543) (xy 4.931754 -8.872543) (xy 4.422322 -8.817378) (xy 4.250645 -8.802044) 88 | (xy 4.073905 -8.789422) (xy 3.883222 -8.779412) (xy 3.669721 -8.771911) (xy 3.424525 -8.766817) (xy 3.138756 -8.764029) (xy 2.803539 -8.763445) (xy 2.409995 -8.764962) (xy 1.949249 -8.768480) 89 | (xy 1.412423 -8.773897) (xy 1.020536 -8.778363) (xy 0.216402 -8.786324) (xy -0.506514 -8.790200) (xy -1.157622 -8.789933) (xy -1.746329 -8.785462) (xy -2.282043 -8.776729) (xy -2.774172 -8.763674) 90 | (xy -3.084286 -8.752476) (xy -3.509504 -8.736969) (xy -3.971668 -8.722839) (xy -4.444862 -8.710695) (xy -4.903167 -8.701145) (xy -5.320667 -8.694798) (xy -5.646964 -8.692309) (xy -5.966727 -8.692182) 91 | (xy -6.248904 -8.694620) (xy -6.503855 -8.701344) (xy -6.741943 -8.714075) (xy -6.973527 -8.734532) (xy -7.208968 -8.764437) (xy -7.458628 -8.805509) (xy -7.732868 -8.859470) (xy -8.042048 -8.928040) 92 | (xy -8.396530 -9.012939) (xy -8.806674 -9.115889) (xy -9.282841 -9.238609) (xy -9.835393 -9.382821) (xy -9.887857 -9.396555) (xy -10.265545 -9.483499) (xy -10.609987 -9.539388) (xy -10.908875 -9.563298) 93 | (xy -11.149900 -9.554306) (xy -11.320752 -9.511489) (xy -11.333930 -9.505091) (xy -11.468950 -9.393686) (xy -11.566143 -9.217515) (xy -11.625293 -8.974948) (xy -11.646187 -8.664354) (xy -11.628611 -8.284102) 94 | (xy -11.572350 -7.832564) (xy -11.477189 -7.308108) (xy -11.342916 -6.709104) (xy -11.169314 -6.033921) (xy -10.956171 -5.280929) (xy -10.703272 -4.448499) (xy -10.645133 -4.263571) (xy -10.536844 -3.918817) 95 | (xy -10.453975 -3.646562) (xy -10.393872 -3.433042) (xy -10.353881 -3.264495) (xy -10.331349 -3.127159) (xy -10.323622 -3.007270) (xy -10.328047 -2.891067) (xy -10.341971 -2.764786) (xy -10.347803 -2.721429) 96 | (xy -10.368856 -2.580679) (xy -10.393899 -2.446654) (xy -10.426186 -2.311959) (xy -10.468970 -2.169199) (xy -10.525504 -2.010977) (xy -10.599044 -1.829899) (xy -10.692841 -1.618570) (xy -10.810150 -1.369593) 97 | (xy -10.954224 -1.075573) (xy -11.128318 -0.729116) (xy -11.335683 -0.322824) (xy -11.579575 0.150696) (xy -11.792279 0.561853) (xy -12.259463 1.463885) (xy -12.150892 1.551545) (xy -11.959972 1.693441) 98 | (xy -11.718964 1.854958) (xy -11.457324 2.017843) (xy -11.204509 2.163840) (xy -10.989973 2.274695) (xy -10.966504 2.285540) (xy -10.479542 2.488574) (xy -10.020629 2.638601) (xy -9.562658 2.741413) 99 | (xy -9.078524 2.802802) (xy -8.541118 2.828562) (xy -8.418696 2.829989) (xy -8.134220 2.832737) (xy -7.927148 2.837756) (xy -7.784175 2.846406) (xy -7.691996 2.860045) (xy -7.637306 2.880034) 100 | (xy -7.606800 2.907732) (xy -7.603037 2.913345) (xy -7.580304 2.993295) (xy -7.629239 3.067606) (xy -7.682381 3.101957) (xy -7.772470 3.127031) (xy -7.914811 3.145168) (xy -8.124709 3.158711) 101 | (xy -8.263470 3.164632) (xy -8.992444 3.147596) (xy -9.716541 3.042959) (xy -10.425635 2.853684) (xy -11.109597 2.582733) (xy -11.758299 2.233068) (xy -12.009816 2.068955) (xy -12.385524 1.810445) 102 | (xy -12.455871 1.978809) (xy -12.520681 2.162318) (xy -12.588750 2.401197) (xy -12.651422 2.660890) (xy -12.700037 2.906839) (xy -12.717632 3.023614) (xy -12.732027 3.159388) (xy -12.726621 3.225485) 103 | (xy -12.696183 3.241760) (xy -12.661847 3.235383) (xy -12.582915 3.244505) (xy -12.449492 3.288770) (xy -12.286514 3.359503) (xy -12.241258 3.381721) (xy -11.567327 3.671928) (xy -10.875824 3.873532) 104 | (xy -10.170367 3.986133) (xy -9.454570 4.009334) (xy -8.732049 3.942736) (xy -8.172708 3.829839) (xy -7.929995 3.774268) (xy -7.760901 3.750152) (xy -7.653418 3.758994) (xy -7.595538 3.802295) 105 | (xy -7.575253 3.881559) (xy -7.574643 3.904672) (xy -7.586372 3.962115) (xy -7.630785 4.009718) (xy -7.721724 4.054087) (xy -7.873029 4.101828) (xy -8.098542 4.159550) (xy -8.118928 4.164489) 106 | (xy -8.814749 4.290391) (xy -9.522649 4.337833) (xy -10.229692 4.308306) (xy -10.922945 4.203301) (xy -11.589473 4.024309) (xy -12.216341 3.772820) (xy -12.423182 3.668375) (xy -12.758686 3.489068) 107 | (xy -13.445359 3.489068) (xy -13.443715 3.211472) (xy -13.438520 2.978060) (xy -13.427934 2.794534) (xy -13.409964 2.640484) (xy -13.382616 2.495503) (xy -13.343896 2.339181) (xy -13.323234 2.263320) 108 | (xy -13.224808 1.943779) (xy -13.098103 1.598311) (xy -12.938770 1.217055) (xy -12.742465 0.790153) (xy -12.504841 0.307744) (xy -12.221552 -0.240031) (xy -12.210468 -0.261055) (xy -11.948031 -0.761837) 109 | (xy -11.727161 -1.191445) (xy -11.544615 -1.557574) (xy -11.397147 -1.867921) (xy -11.281512 -2.130183) (xy -11.194464 -2.352058) (xy -11.132758 -2.541241) (xy -11.093149 -2.705430) (xy -11.072392 -2.852322) 110 | (xy -11.067143 -2.972710) (xy -11.084710 -3.117888) (xy -11.137041 -3.344502) (xy -11.223576 -3.650431) (xy -11.343758 -4.033556) (xy -11.358010 -4.077270) (xy -11.645515 -4.990634) (xy -11.885376 -5.826999) 111 | (xy -12.077621 -6.586542) (xy -12.222278 -7.269443) (xy -12.319375 -7.875878) (xy -12.368941 -8.406026) (xy -12.371004 -8.860065) (xy -12.325591 -9.238173) (xy -12.232732 -9.540529) (xy -12.226211 -9.555047) 112 | (xy -12.055623 -9.848798) (xy -11.844866 -10.064149) (xy -11.585073 -10.207842) (xy -11.267377 -10.286621) (xy -11.263439 -10.287164) (xy -11.115113 -10.303545) (xy -10.965177 -10.310399) (xy -10.804426 -10.306078) 113 | (xy -10.623661 -10.288930) (xy -10.413677 -10.257306) (xy -10.165273 -10.209555) (xy -9.869247 -10.144029) (xy -9.516397 -10.059077) (xy -9.097520 -9.953048) (xy -8.603415 -9.824293) (xy -8.436428 -9.780273) 114 | (xy -8.124755 -9.699130) (xy -7.854408 -9.632796) (xy -7.611165 -9.579799) (xy -7.380803 -9.538668) (xy -7.149100 -9.507931) (xy -6.901834 -9.486116) (xy -6.624782 -9.471751) (xy -6.303722 -9.463365) 115 | (xy -5.924432 -9.459485) (xy -5.472690 -9.458641) (xy -5.329464 -9.458749) (xy -4.851309 -9.461053) (xy -4.312387 -9.466671) (xy -3.742102 -9.475102) (xy -3.169858 -9.485843) (xy -2.625059 -9.498392) 116 | (xy -2.137110 -9.512247) (xy -2.069941 -9.514430) (xy -1.450879 -9.532446) (xy -0.896958 -9.542783) (xy -0.382934 -9.545477) (xy 0.116441 -9.540564) (xy 0.626409 -9.528080) (xy 0.900952 -9.518728) 117 | (xy 1.800718 -9.493412) (xy 2.620515 -9.487310) (xy 3.369118 -9.500846) (xy 4.055306 -9.534445) (xy 4.687855 -9.588528) (xy 5.275542 -9.663522) (xy 5.805714 -9.755590) (xy 6.224293 -9.843126) 118 | (xy 6.587433 -9.931552) (xy 6.919768 -10.029135) (xy 7.245932 -10.144142) (xy 7.590560 -10.284839) (xy 7.978285 -10.459491) (xy 8.164286 -10.547040) (xy 8.579118 -10.740078) (xy 8.927855 -10.892447) 119 | (xy 9.223149 -11.008511) (xy 9.477650 -11.092638) (xy 9.704009 -11.149193) (xy 9.914877 -11.182543) (xy 10.036028 -11.193034) (xy 10.346231 -11.190175) )(layer F.SilkS) (width 0.010000) 120 | ) 121 | (fp_poly (pts (xy -2.741987 7.515701) (xy -2.609418 7.583615) (xy -2.463342 7.666560) (xy -2.039773 7.877193) (xy -1.565542 8.053830) (xy -1.069583 8.188514) (xy -0.580832 8.273286) (xy -0.158750 8.300357) 122 | (xy 0.344121 8.265032) (xy 0.868465 8.164398) (xy 1.382340 8.006469) (xy 1.853807 7.799258) (xy 1.867818 7.791913) (xy 2.025052 7.720350) (xy 2.140955 7.689631) (xy 2.203387 7.700754) 123 | (xy 2.200210 7.754718) (xy 2.194262 7.765066) (xy 2.132528 7.814792) (xy 2.004028 7.886847) (xy 1.827407 7.972998) (xy 1.621312 8.065010) (xy 1.404387 8.154650) (xy 1.195279 8.233686) 124 | (xy 1.012631 8.293884) (xy 0.968565 8.306298) (xy 0.710260 8.358015) (xy 0.391716 8.395375) (xy 0.040682 8.417505) (xy -0.315088 8.423534) (xy -0.647842 8.412591) (xy -0.929829 8.383803) 125 | (xy -1.015016 8.368604) (xy -1.222619 8.319360) (xy -1.462133 8.253466) (xy -1.672695 8.188100) (xy -1.872614 8.113045) (xy -2.089610 8.018348) (xy -2.307050 7.912906) (xy -2.508305 7.805617) 126 | (xy -2.676745 7.705378) (xy -2.795737 7.621089) (xy -2.848653 7.561646) (xy -2.849486 7.558480) (xy -2.850491 7.506361) (xy -2.818502 7.491026) (xy -2.741987 7.515701) )(layer F.SilkS) (width 0.010000) 127 | ) 128 | (fp_poly (pts (xy -0.257615 0.409821) (xy -0.113205 0.418725) (xy -0.005529 0.441057) (xy 0.092401 0.482943) (xy 0.207571 0.550513) (xy 0.234313 0.567188) (xy 0.420533 0.701425) (xy 0.518128 0.819014) 129 | (xy 0.526655 0.924593) (xy 0.445670 1.022802) (xy 0.274729 1.118279) (xy 0.177821 1.157986) (xy 0.022225 1.221369) (xy -0.097602 1.277512) (xy -0.158269 1.315344) (xy -0.160463 1.318129) 130 | (xy -0.180009 1.383886) (xy -0.201742 1.505906) (xy -0.212012 1.582857) (xy -0.221011 1.709199) (xy -0.207550 1.815248) (xy -0.163150 1.932357) (xy -0.079330 2.091879) (xy -0.069648 2.109236) 131 | (xy 0.124716 2.406299) (xy 0.361366 2.688512) (xy 0.619806 2.935004) (xy 0.879539 3.124905) (xy 0.985131 3.183284) (xy 1.169284 3.282471) (xy 1.274123 3.363312) (xy 1.306829 3.434803) 132 | (xy 1.274582 3.505942) (xy 1.257457 3.524481) (xy 1.145273 3.573384) (xy 0.980191 3.548798) (xy 0.762418 3.450779) (xy 0.597544 3.350878) (xy 0.311376 3.163895) (xy 0.189706 3.278216) 133 | (xy -0.058185 3.464560) (xy -0.310435 3.564435) (xy -0.561724 3.576711) (xy -0.806729 3.500257) (xy -0.820949 3.492910) (xy -0.956574 3.401565) (xy -1.093156 3.280413) (xy -1.125724 3.245450) 134 | (xy -1.212915 3.150705) (xy -1.273955 3.092761) (xy -1.288042 3.084286) (xy -1.334474 3.105796) (xy -1.436846 3.162342) (xy -1.573515 3.241947) (xy -1.581296 3.246577) (xy -1.788449 3.353372) 135 | (xy -1.938424 3.391928) (xy -2.033743 3.362307) (xy -2.076933 3.264566) (xy -2.077729 3.258236) (xy -2.076665 3.193519) (xy -2.045833 3.138889) (xy -1.969668 3.079754) (xy -1.832607 3.001522) 136 | (xy -1.766565 2.966506) (xy -1.522375 2.817111) (xy -1.274472 2.628765) (xy -1.041278 2.418882) (xy -0.841219 2.204872) (xy -0.692718 2.004150) (xy -0.636536 1.898518) (xy -0.570369 1.714667) 137 | (xy -0.557484 1.571693) (xy -0.605681 1.453362) (xy -0.722754 1.343442) (xy -0.916500 1.225700) (xy -0.974487 1.194886) (xy -1.136566 1.106172) (xy -1.264655 1.028505) (xy -1.339473 0.973918) 138 | (xy -1.350605 0.960149) (xy -1.340848 0.874637) (xy -1.284738 0.753942) (xy -1.200393 0.626698) (xy -1.105931 0.521539) (xy -1.045022 0.477185) (xy -0.922415 0.437943) (xy -0.732837 0.415403) 139 | (xy -0.465744 0.408214) (xy -0.257615 0.409821) )(layer F.SilkS) (width 0.010000) 140 | ) 141 | (fp_poly (pts (xy -5.399986 -0.963524) (xy -5.207433 -0.912182) (xy -4.873870 -0.770874) (xy -4.559207 -0.582114) (xy -4.293031 -0.364848) (xy -4.201501 -0.268131) (xy -4.116312 -0.150843) (xy -4.011796 0.020484) 142 | (xy -3.897136 0.227376) (xy -3.781512 0.451358) (xy -3.674106 0.673954) (xy -3.584097 0.876689) (xy -3.520668 1.041088) (xy -3.492999 1.148675) (xy -3.492500 1.158617) (xy -3.504995 1.234459) 143 | (xy -3.560265 1.265156) (xy -3.648689 1.270000) (xy -3.754871 1.283276) (xy -3.842835 1.335654) (xy -3.942702 1.445961) (xy -3.954850 1.461344) (xy -4.065050 1.592647) (xy -4.209156 1.752142) 144 | (xy -4.354286 1.903577) (xy -4.677549 2.166395) (xy -5.050147 2.362320) (xy -5.455452 2.486730) (xy -5.876833 2.535003) (xy -6.297662 2.502518) (xy -6.418036 2.477135) (xy -6.784379 2.342352) 145 | (xy -7.140961 2.119573) (xy -7.438734 1.857416) (xy -7.723139 1.529620) (xy -7.920516 1.204742) (xy -8.034099 0.876648) (xy -8.063618 0.672319) (xy -8.076941 0.523832) (xy -7.513691 0.523832) 146 | (xy -7.502203 0.826655) (xy -7.448315 1.109125) (xy -7.388936 1.270000) (xy -7.189322 1.590246) (xy -6.923261 1.850912) (xy -6.597271 2.046313) (xy -6.418036 2.116380) (xy -6.213196 2.155478) 147 | (xy -5.960381 2.162482) (xy -5.695567 2.139660) (xy -5.454732 2.089283) (xy -5.340398 2.048415) (xy -5.067333 1.884839) (xy -4.819036 1.655010) (xy -4.619826 1.383388) (xy -4.554453 1.257949) 148 | (xy -4.484605 1.088333) (xy -4.445332 0.937254) (xy -4.428765 0.764629) (xy -4.426474 0.606030) (xy -4.431978 0.401424) (xy -4.452813 0.247961) (xy -4.497643 0.106313) (xy -4.572799 -0.058107) 149 | (xy -4.773676 -0.374136) (xy -5.035436 -0.625019) (xy -5.346699 -0.809020) (xy -5.663356 -0.908722) (xy -6.007147 -0.934598) (xy -6.352815 -0.886877) (xy -6.610092 -0.797531) (xy -6.894754 -0.625360) 150 | (xy -7.150019 -0.390924) (xy -7.350213 -0.119582) (xy -7.407532 -0.009853) (xy -7.482295 0.233911) (xy -7.513691 0.523832) (xy -8.076941 0.523832) (xy -8.078532 0.506111) (xy -8.099043 0.408961) 151 | (xy -8.133437 0.359254) (xy -8.190002 0.335374) (xy -8.193107 0.334584) (xy -8.281021 0.298069) (xy -8.286142 0.247921) (xy -8.207530 0.176112) (xy -8.171668 0.151865) (xy -8.081802 0.077545) 152 | (xy -7.958786 -0.044439) (xy -7.825874 -0.190702) (xy -7.795115 -0.226786) (xy -7.644421 -0.388287) (xy -7.476664 -0.541027) (xy -7.325347 -0.654796) (xy -7.309627 -0.664550) (xy -6.975683 -0.823140) 153 | (xy -6.592000 -0.935365) (xy -6.184325 -0.998193) (xy -5.778405 -1.008590) (xy -5.399986 -0.963524) )(layer F.SilkS) (width 0.010000) 154 | ) 155 | (fp_poly (pts (xy 5.838514 -1.070275) (xy 6.274261 -0.970536) (xy 6.653358 -0.809461) (xy 6.969780 -0.589251) (xy 7.089999 -0.471579) (xy 7.244213 -0.306157) (xy 7.411968 -0.130439) (xy 7.540625 0.001024) 156 | (xy 7.649314 0.113383) (xy 7.726744 0.199821) (xy 7.756072 0.241469) (xy 7.717600 0.265956) (xy 7.654018 0.280327) (xy 7.598195 0.298022) (xy 7.563103 0.345338) (xy 7.540118 0.443047) 157 | (xy 7.521936 0.598488) (xy 7.444918 0.945638) (xy 7.282327 1.282847) (xy 7.031995 1.614189) (xy 6.916382 1.736435) (xy 6.593296 2.021551) (xy 6.270377 2.224970) (xy 5.934117 2.354671) 158 | (xy 5.825035 2.381161) (xy 5.537027 2.430018) (xy 5.285804 2.440347) (xy 5.026013 2.412123) (xy 4.865128 2.380610) (xy 4.468385 2.249478) (xy 4.092119 2.037220) (xy 3.749402 1.753121) 159 | (xy 3.453302 1.406467) (xy 3.413532 1.349375) (xy 3.320824 1.223639) (xy 3.245187 1.158686) (xy 3.160281 1.135648) (xy 3.112752 1.133929) (xy 3.011492 1.124354) (xy 2.952126 1.088709) 160 | (xy 2.935312 1.016610) (xy 2.961709 0.897675) (xy 3.031974 0.721520) (xy 3.146766 0.477763) (xy 3.155467 0.459979) (xy 3.172299 0.427379) (xy 4.005067 0.427379) (xy 4.013698 0.799548) 161 | (xy 4.101753 1.145800) (xy 4.264608 1.456942) (xy 4.497639 1.723781) (xy 4.796224 1.937123) (xy 5.102679 2.071055) (xy 5.338964 2.115423) (xy 5.617031 2.115646) (xy 5.901066 2.074571) 162 | (xy 6.155259 1.995049) (xy 6.176496 1.985625) (xy 6.505236 1.789348) (xy 6.765518 1.533815) (xy 6.955577 1.221262) (xy 7.073645 0.853924) (xy 7.074779 0.848399) (xy 7.099380 0.513991) 163 | (xy 7.046517 0.170745) (xy 6.922853 -0.156232) (xy 6.735047 -0.441831) (xy 6.731365 -0.446151) (xy 6.499792 -0.658773) (xy 6.215721 -0.829035) (xy 5.899153 -0.951783) (xy 5.570094 -1.021863) 164 | (xy 5.248545 -1.034122) (xy 4.954511 -0.983406) (xy 4.830536 -0.935893) (xy 4.588541 -0.794943) (xy 4.397474 -0.616450) (xy 4.245236 -0.384697) (xy 4.119728 -0.083968) (xy 4.080482 0.038485) 165 | (xy 4.005067 0.427379) (xy 3.172299 0.427379) (xy 3.338363 0.105761) (xy 3.506229 -0.174938) (xy 3.669258 -0.395738) (xy 3.837645 -0.570256) (xy 4.021583 -0.712111) (xy 4.043624 -0.726578) 166 | (xy 4.407887 -0.926444) (xy 4.773123 -1.049002) (xy 5.167976 -1.102568) (xy 5.352143 -1.106476) (xy 5.838514 -1.070275) )(layer F.SilkS) (width 0.010000) 167 | ) 168 | (fp_poly (pts (xy -10.529677 -8.516022) (xy -10.285218 -8.333516) (xy -9.962497 -8.157912) (xy -9.558863 -7.988178) (xy -9.071666 -7.823285) (xy -8.498257 -7.662203) (xy -8.050893 -7.552726) (xy -7.914821 -7.521110) 169 | (xy -8.096250 -7.427861) (xy -8.429226 -7.208702) (xy -8.748145 -6.900640) (xy -9.053216 -6.503427) (xy -9.344646 -6.016816) (xy -9.435192 -5.841911) (xy -9.535777 -5.636527) (xy -9.619482 -5.457142) 170 | (xy -9.678640 -5.320829) (xy -9.705581 -5.244662) (xy -9.706428 -5.238062) (xy -9.725596 -5.161409) (xy -9.778818 -5.162645) (xy -9.859672 -5.238476) (xy -9.946709 -5.361314) (xy -10.049390 -5.537855) 171 | (xy -10.147523 -5.728027) (xy -10.193251 -5.828393) (xy -10.286532 -6.089483) (xy -10.378629 -6.418658) (xy -10.464762 -6.793361) (xy -10.540150 -7.191034) (xy -10.600012 -7.589119) (xy -10.635450 -7.914821) 172 | (xy -10.654015 -8.118087) (xy -10.674467 -8.323287) (xy -10.689214 -8.458185) (xy -10.715664 -8.684049) (xy -10.529677 -8.516022) )(layer F.SilkS) (width 0.010000) 173 | ) 174 | (fp_poly (pts (xy 9.495994 -9.176030) (xy 9.515605 -9.109182) (xy 9.524533 -8.972404) (xy 9.523508 -8.785763) (xy 9.513258 -8.569323) (xy 9.494513 -8.343149) (xy 9.468004 -8.127305) (xy 9.454893 -8.045495) 175 | (xy 9.364403 -7.638010) (xy 9.233039 -7.196752) (xy 9.073840 -6.760905) (xy 8.899842 -6.369654) (xy 8.892251 -6.354476) (xy 8.809110 -6.192897) (xy 8.740995 -6.067550) (xy 8.697942 -5.996575) 176 | (xy 8.689032 -5.987143) (xy 8.666140 -6.026370) (xy 8.626561 -6.127540) (xy 8.593188 -6.225268) (xy 8.439494 -6.610371) (xy 8.239259 -6.976376) (xy 8.004724 -7.306699) (xy 7.748131 -7.584755) 177 | (xy 7.481718 -7.793958) (xy 7.400237 -7.841604) (xy 7.157794 -7.971399) (xy 7.490951 -8.072326) (xy 8.056185 -8.273421) (xy 8.558267 -8.513791) (xy 8.988294 -8.788765) (xy 9.219789 -8.979111) 178 | (xy 9.342446 -9.084305) (xy 9.439619 -9.154866) (xy 9.492851 -9.177637) (xy 9.495994 -9.176030) )(layer F.SilkS) (width 0.010000) 179 | ) 180 | (fp_poly (pts (xy -5.097020 -0.098456) (xy -5.060651 -0.064886) (xy -5.014274 0.017288) (xy -5.036329 0.093864) (xy -5.110986 0.157590) (xy -5.218239 0.182848) (xy -5.311165 0.160218) (xy -5.321905 0.151190) 181 | (xy -5.352267 0.070459) (xy -5.339844 -0.030356) (xy -5.292465 -0.102276) (xy -5.280397 -0.108540) (xy -5.175985 -0.133386) (xy -5.097020 -0.098456) )(layer F.SilkS) (width 0.010000) 182 | ) 183 | (fp_poly (pts (xy 4.725708 -0.207051) (xy 4.816727 -0.155728) (xy 4.853214 -0.088400) (xy 4.819277 -0.021377) (xy 4.744031 0.049895) (xy 4.667329 0.089140) (xy 4.657207 0.090020) (xy 4.572537 0.066631) 184 | (xy 4.543085 0.050872) (xy 4.494344 -0.023810) (xy 4.504249 -0.118994) (xy 4.562261 -0.196509) (xy 4.617586 -0.218928) (xy 4.725708 -0.207051) )(layer F.SilkS) (width 0.010000) 185 | ) 186 | ) 187 | -------------------------------------------------------------------------------- /pcb/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name pm_25)(type KiCad)(uri ${KIPRJMOD}/pm_25.pretty)(options "")(descr "")) 3 | (lib (name artwork)(type KiCad)(uri ${KIPRJMOD}/artwork.pretty)(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /pcb/gerbers-smd.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenderlove/esp8266aq/5ca31ca405a7e9a1147211a9ad832bb626f9f6b2/pcb/gerbers-smd.zip -------------------------------------------------------------------------------- /pcb/gerbers.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenderlove/esp8266aq/5ca31ca405a7e9a1147211a9ad832bb626f9f6b2/pcb/gerbers.zip -------------------------------------------------------------------------------- /pcb/pcb-smd-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Conn_01x06_Female 5 | # 6 | DEF Connector_Conn_01x06_Female J 0 40 Y N 1 F N 7 | F0 "J" 0 300 50 H V C CNN 8 | F1 "Connector_Conn_01x06_Female" 0 -400 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | Connector*:*_1x??_* 13 | $ENDFPLIST 14 | DRAW 15 | A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320 16 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 17 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 18 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 19 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 20 | A 0 200 20 901 -901 1 1 6 N 0 220 0 180 21 | P 2 1 1 6 -50 -300 -20 -300 N 22 | P 2 1 1 6 -50 -200 -20 -200 N 23 | P 2 1 1 6 -50 -100 -20 -100 N 24 | P 2 1 1 6 -50 0 -20 0 N 25 | P 2 1 1 6 -50 100 -20 100 N 26 | P 2 1 1 6 -50 200 -20 200 N 27 | X Pin_1 1 -200 200 150 R 50 50 1 1 P 28 | X Pin_2 2 -200 100 150 R 50 50 1 1 P 29 | X Pin_3 3 -200 0 150 R 50 50 1 1 P 30 | X Pin_4 4 -200 -100 150 R 50 50 1 1 P 31 | X Pin_5 5 -200 -200 150 R 50 50 1 1 P 32 | X Pin_6 6 -200 -300 150 R 50 50 1 1 P 33 | ENDDRAW 34 | ENDDEF 35 | # 36 | # Connector_Generic_Conn_01x04 37 | # 38 | DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N 39 | F0 "J" 0 200 50 H V C CNN 40 | F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN 41 | F2 "" 0 0 50 H I C CNN 42 | F3 "" 0 0 50 H I C CNN 43 | $FPLIST 44 | Connector*:*_1x??_* 45 | $ENDFPLIST 46 | DRAW 47 | S -50 -195 0 -205 1 1 6 N 48 | S -50 -95 0 -105 1 1 6 N 49 | S -50 5 0 -5 1 1 6 N 50 | S -50 105 0 95 1 1 6 N 51 | S -50 150 50 -250 1 1 10 f 52 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 53 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 54 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 55 | X Pin_4 4 -200 -200 150 R 50 50 1 1 P 56 | ENDDRAW 57 | ENDDEF 58 | # 59 | # Connector_USB_C_Receptacle_USB2.0 60 | # 61 | DEF Connector_USB_C_Receptacle_USB2.0 J 0 40 Y Y 1 F N 62 | F0 "J" -400 750 50 H V L CNN 63 | F1 "Connector_USB_C_Receptacle_USB2.0" 750 750 50 H V R CNN 64 | F2 "" 150 0 50 H I C CNN 65 | F3 "" 150 0 50 H I C CNN 66 | $FPLIST 67 | USB*C*Receptacle* 68 | $ENDFPLIST 69 | DRAW 70 | A -275 -150 75 -1799 -1 0 1 20 N -350 -150 -200 -150 71 | A -275 -150 25 -1799 -1 0 1 10 N -300 -150 -250 -150 72 | A -275 -150 25 -1799 -1 0 1 10 F -300 -150 -250 -150 73 | A -275 150 25 1 1799 0 1 10 F -250 150 -300 150 74 | A -275 150 25 1 1799 0 1 10 N -250 150 -300 150 75 | A -275 150 75 1 1799 0 1 20 N -200 150 -350 150 76 | C -100 45 25 0 1 10 F 77 | C 0 -230 50 0 1 0 F 78 | S -10 -700 10 -660 0 0 0 N 79 | S 400 -590 360 -610 0 0 0 N 80 | S 400 -490 360 -510 0 0 0 N 81 | S 400 -190 360 -210 0 0 0 N 82 | S 400 -90 360 -110 0 0 0 N 83 | S 400 10 360 -10 0 0 0 N 84 | S 400 110 360 90 0 0 0 N 85 | S 400 310 360 290 0 0 0 N 86 | S 400 410 360 390 0 0 0 N 87 | S 400 610 360 590 0 0 0 N 88 | S -400 700 400 -700 0 1 10 f 89 | S -300 -150 -250 150 0 1 10 F 90 | S 75 70 125 120 0 1 10 F 91 | P 2 0 1 20 -350 -150 -350 150 N 92 | P 2 0 1 20 -200 150 -200 -150 N 93 | P 2 0 1 20 0 -230 0 170 N 94 | P 3 0 1 20 0 -130 -100 -30 -100 20 N 95 | P 3 0 1 20 0 -80 100 20 100 70 N 96 | P 4 0 1 10 -50 170 0 270 50 170 -50 170 F 97 | X GND A1 0 -900 200 U 50 50 1 1 W 98 | X GND A12 0 -900 200 U 50 50 1 1 P N 99 | X VBUS A4 600 600 200 L 50 50 1 1 W 100 | X CC1 A5 600 400 200 L 50 50 1 1 B 101 | X D+ A6 600 -100 200 L 50 50 1 1 B 102 | X D- A7 600 100 200 L 50 50 1 1 B 103 | X SBU1 A8 600 -500 200 L 50 50 1 1 B 104 | X VBUS A9 600 600 200 L 50 50 1 1 P N 105 | X GND B1 0 -900 200 U 50 50 1 1 P N 106 | X GND B12 0 -900 200 U 50 50 1 1 P N 107 | X VBUS B4 600 600 200 L 50 50 1 1 P N 108 | X CC2 B5 600 300 200 L 50 50 1 1 B 109 | X D+ B6 600 -200 200 L 50 50 1 1 B 110 | X D- B7 600 0 200 L 50 50 1 1 B 111 | X SBU2 B8 600 -600 200 L 50 50 1 1 B 112 | X VBUS B9 600 600 200 L 50 50 1 1 P N 113 | X SHIELD S1 -300 -900 200 U 50 50 1 1 P 114 | ENDDRAW 115 | ENDDEF 116 | # 117 | # Device_C 118 | # 119 | DEF Device_C C 0 10 N Y 1 F N 120 | F0 "C" 25 100 50 H V L CNN 121 | F1 "Device_C" 25 -100 50 H V L CNN 122 | F2 "" 38 -150 50 H I C CNN 123 | F3 "" 0 0 50 H I C CNN 124 | $FPLIST 125 | C_* 126 | $ENDFPLIST 127 | DRAW 128 | P 2 0 1 20 -80 -30 80 -30 N 129 | P 2 0 1 20 -80 30 80 30 N 130 | X ~ 1 0 150 110 D 50 50 1 1 P 131 | X ~ 2 0 -150 110 U 50 50 1 1 P 132 | ENDDRAW 133 | ENDDEF 134 | # 135 | # Device_CP1 136 | # 137 | DEF Device_CP1 C 0 10 N N 1 F N 138 | F0 "C" 25 100 50 H V L CNN 139 | F1 "Device_CP1" 25 -100 50 H V L CNN 140 | F2 "" 0 0 50 H I C CNN 141 | F3 "" 0 0 50 H I C CNN 142 | $FPLIST 143 | CP_* 144 | $ENDFPLIST 145 | DRAW 146 | A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 147 | P 2 0 1 20 -80 30 80 30 N 148 | P 2 0 1 0 -70 90 -30 90 N 149 | P 2 0 1 0 -50 70 -50 110 N 150 | X ~ 1 0 150 110 D 50 50 1 1 P 151 | X ~ 2 0 -150 130 U 50 50 1 1 P 152 | ENDDRAW 153 | ENDDEF 154 | # 155 | # Device_R 156 | # 157 | DEF Device_R R 0 0 N Y 1 F N 158 | F0 "R" 80 0 50 V V C CNN 159 | F1 "Device_R" 0 0 50 V V C CNN 160 | F2 "" -70 0 50 V I C CNN 161 | F3 "" 0 0 50 H I C CNN 162 | $FPLIST 163 | R_* 164 | $ENDFPLIST 165 | DRAW 166 | S -40 -100 40 100 0 1 10 N 167 | X ~ 1 0 150 50 D 50 50 1 1 P 168 | X ~ 2 0 -150 50 U 50 50 1 1 P 169 | ENDDRAW 170 | ENDDEF 171 | # 172 | # Interface_USB_MCP2221AxST 173 | # 174 | DEF Interface_USB_MCP2221AxST U 0 20 Y Y 1 F N 175 | F0 "U" -300 650 50 H V C CNN 176 | F1 "Interface_USB_MCP2221AxST" 500 650 50 H V C CNN 177 | F2 "Package_SO:TSSOP-14_4.4x5mm_P0.65mm" 0 1000 50 H I C CNN 178 | F3 "" 0 700 50 H I C CNN 179 | $FPLIST 180 | TSSOP*4.4x5mm*P0.65mm* 181 | $ENDFPLIST 182 | DRAW 183 | S -300 600 300 -500 0 1 10 f 184 | X VDD 1 0 700 100 D 50 50 1 1 W 185 | X SCL 10 400 400 100 L 50 50 1 1 B 186 | X VUSB 11 100 700 100 D 50 50 1 1 P 187 | X D- 12 -400 0 100 R 50 50 1 1 B 188 | X D+ 13 -400 100 100 R 50 50 1 1 B 189 | X VSS 14 0 -600 100 U 50 50 1 1 W 190 | X GP0 2 400 -100 100 L 50 50 1 1 B 191 | X GP1 3 400 -200 100 L 50 50 1 1 B 192 | X ~RST 4 -400 500 100 R 50 50 1 1 I 193 | X URx 5 400 200 100 L 50 50 1 1 I 194 | X UTx 6 400 100 100 L 50 50 1 1 O 195 | X GP2 7 400 -300 100 L 50 50 1 1 B 196 | X GP3 8 400 -400 100 L 50 50 1 1 B 197 | X SDA 9 400 500 100 L 50 50 1 1 B 198 | ENDDRAW 199 | ENDDEF 200 | # 201 | # Mechanical_MountingHole 202 | # 203 | DEF Mechanical_MountingHole H 0 40 Y Y 1 F N 204 | F0 "H" 0 200 50 H V C CNN 205 | F1 "Mechanical_MountingHole" 0 125 50 H V C CNN 206 | F2 "" 0 0 50 H I C CNN 207 | F3 "" 0 0 50 H I C CNN 208 | $FPLIST 209 | MountingHole* 210 | $ENDFPLIST 211 | DRAW 212 | C 0 0 50 0 1 50 N 213 | ENDDRAW 214 | ENDDEF 215 | # 216 | # RF_Module_ESP-12F 217 | # 218 | DEF RF_Module_ESP-12F U 0 20 Y Y 1 F N 219 | F0 "U" -500 750 50 H V L CNN 220 | F1 "RF_Module_ESP-12F" 500 750 50 H V R CNN 221 | F2 "RF_Module:ESP-12E" 0 0 50 H I C CNN 222 | F3 "" -350 100 50 H I C CNN 223 | ALIAS ESP-12F 224 | $FPLIST 225 | ESP?12* 226 | $ENDFPLIST 227 | DRAW 228 | S -500 700 500 -600 0 1 10 f 229 | X ~RST 1 -600 600 100 R 50 50 1 1 I 230 | X MISO 10 -600 -100 100 R 50 50 1 1 B 231 | X GPIO9 11 -600 -200 100 R 50 50 1 1 B 232 | X GPIO10 12 -600 -300 100 R 50 50 1 1 B 233 | X MOSI 13 -600 -400 100 R 50 50 1 1 B 234 | X SCLK 14 -600 -500 100 R 50 50 1 1 B 235 | X GND 15 0 -700 100 U 50 50 1 1 W 236 | X GPIO15 16 600 -300 100 L 50 50 1 1 B 237 | X GPIO2 17 600 400 100 L 50 50 1 1 B 238 | X GPIO0 18 600 600 100 L 50 50 1 1 B 239 | X GPIO4 19 600 200 100 L 50 50 1 1 B 240 | X ADC 2 -600 200 100 R 50 50 1 1 I 241 | X GPIO5 20 600 100 100 L 50 50 1 1 B 242 | X GPIO3/RXD 21 600 300 100 L 50 50 1 1 B 243 | X GPIO1/TXD 22 600 500 100 L 50 50 1 1 B 244 | X EN 3 -600 400 100 R 50 50 1 1 I 245 | X GPIO16 4 600 -400 100 L 50 50 1 1 B 246 | X GPIO14 5 600 -200 100 L 50 50 1 1 B 247 | X GPIO12 6 600 0 100 L 50 50 1 1 B 248 | X GPIO13 7 600 -100 100 L 50 50 1 1 B 249 | X VCC 8 0 800 100 D 50 50 1 1 W 250 | X CS0 9 -600 0 100 R 50 50 1 1 I 251 | ENDDRAW 252 | ENDDEF 253 | # 254 | # Regulator_Linear_MCP1700-3302E_SOT89 255 | # 256 | DEF Regulator_Linear_MCP1700-3302E_SOT89 U 0 10 Y Y 1 F N 257 | F0 "U" -150 125 50 H V C CNN 258 | F1 "Regulator_Linear_MCP1700-3302E_SOT89" 0 125 50 H V L CNN 259 | F2 "Package_TO_SOT_SMD:SOT-89-3" 0 200 50 H I C CNN 260 | F3 "" 0 -50 50 H I C CNN 261 | ALIAS MCP1703A-1202_SOT89 MCP1703A-1502_SOT89 MCP1703A-1802_SOT89 MCP1703A-2502_SOT89 MCP1703A-2802_SOT89 MCP1703A-3002_SOT89 MCP1703A-4002_SOT89 MCP1703A-5002_SOT89 MCP1700-3002E_SOT89 MCP1700-1202E_SOT89 MCP1700-1802E_SOT89 MCP1700-2502E_SOT89 MCP1700-2802E_SOT89 MCP1700-3302E_SOT89 MCP1700-5002E_SOT89 AP2127R-3.3 262 | $FPLIST 263 | SOT?89* 264 | $ENDFPLIST 265 | DRAW 266 | S -200 -200 200 75 0 1 10 f 267 | X GND 1 0 -300 100 U 50 50 1 1 W 268 | X VI 2 -300 0 100 R 50 50 1 1 W 269 | X VO 3 300 0 100 L 50 50 1 1 w 270 | ENDDRAW 271 | ENDDEF 272 | # 273 | # pm_25_Plantower-PM2.5 274 | # 275 | DEF pm_25_Plantower-PM2.5 U 0 40 Y Y 1 F N 276 | F0 "U" -200 350 50 H V C CNN 277 | F1 "pm_25_Plantower-PM2.5" 400 -400 50 H V C CNN 278 | F2 "" 0 0 50 H I C CNN 279 | F3 "" 0 0 50 H I C CNN 280 | DRAW 281 | S -250 300 200 -250 0 1 0 N 282 | X NC 1 -350 -200 100 R 50 50 1 1 N 283 | X NC 2 -350 -100 100 R 50 50 1 1 N 284 | X RST 3 -350 100 100 R 50 50 1 1 I 285 | X TX 4 300 -150 100 L 50 50 1 1 I 286 | X RX 5 300 150 100 L 50 50 1 1 I 287 | X SET 6 -350 200 100 R 50 50 1 1 I 288 | X GND 7 0 -350 100 U 50 50 1 1 I 289 | X VCC 8 0 400 100 D 50 50 1 1 I 290 | ENDDRAW 291 | ENDDEF 292 | # 293 | # power_+3.3V 294 | # 295 | DEF power_+3.3V #PWR 0 0 Y Y 1 F P 296 | F0 "#PWR" 0 -150 50 H I C CNN 297 | F1 "power_+3.3V" 0 140 50 H V C CNN 298 | F2 "" 0 0 50 H I C CNN 299 | F3 "" 0 0 50 H I C CNN 300 | ALIAS +3.3V 301 | DRAW 302 | P 2 0 1 0 -30 50 0 100 N 303 | P 2 0 1 0 0 0 0 100 N 304 | P 2 0 1 0 0 100 30 50 N 305 | X +3V3 1 0 0 0 U 50 50 1 1 W N 306 | ENDDRAW 307 | ENDDEF 308 | # 309 | # power_+5V 310 | # 311 | DEF power_+5V #PWR 0 0 Y Y 1 F P 312 | F0 "#PWR" 0 -150 50 H I C CNN 313 | F1 "power_+5V" 0 140 50 H V C CNN 314 | F2 "" 0 0 50 H I C CNN 315 | F3 "" 0 0 50 H I C CNN 316 | DRAW 317 | P 2 0 1 0 -30 50 0 100 N 318 | P 2 0 1 0 0 0 0 100 N 319 | P 2 0 1 0 0 100 30 50 N 320 | X +5V 1 0 0 0 U 50 50 1 1 W N 321 | ENDDRAW 322 | ENDDEF 323 | # 324 | # power_GND 325 | # 326 | DEF power_GND #PWR 0 0 Y Y 1 F P 327 | F0 "#PWR" 0 -250 50 H I C CNN 328 | F1 "power_GND" 0 -150 50 H V C CNN 329 | F2 "" 0 0 50 H I C CNN 330 | F3 "" 0 0 50 H I C CNN 331 | DRAW 332 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 333 | X GND 1 0 0 0 D 50 50 1 1 W N 334 | ENDDRAW 335 | ENDDEF 336 | # 337 | #End Library 338 | -------------------------------------------------------------------------------- /pcb/pcb-smd.pro: -------------------------------------------------------------------------------- 1 | update=Saturday, March 13, 2021 at 04:55:34 PM 2 | version=1 3 | last_client=pcbnew 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [cvpcb] 9 | version=1 10 | NetIExt=net 11 | [eeschema] 12 | version=1 13 | LibDir= 14 | [eeschema/libraries] 15 | [schematic_editor] 16 | version=1 17 | PageLayoutDescrFile= 18 | PlotDirectoryName= 19 | SubpartIdSeparator=0 20 | SubpartFirstId=65 21 | NetFmtName=Pcbnew 22 | SpiceAjustPassiveValues=0 23 | LabSize=50 24 | ERC_TestSimilarLabels=1 25 | [pcbnew] 26 | version=1 27 | PageLayoutDescrFile= 28 | LastNetListRead=pcb-smd.net 29 | CopperLayerCount=2 30 | BoardThickness=1.6 31 | AllowMicroVias=0 32 | AllowBlindVias=0 33 | RequireCourtyardDefinitions=0 34 | ProhibitOverlappingCourtyards=1 35 | MinTrackWidth=0.2 36 | MinViaDiameter=0.4 37 | MinViaDrill=0.3 38 | MinMicroViaDiameter=0.2 39 | MinMicroViaDrill=0.09999999999999999 40 | MinHoleToHole=0.25 41 | TrackWidth1=0.25 42 | TrackWidth2=0.762 43 | ViaDiameter1=0.8 44 | ViaDrill1=0.4 45 | dPairWidth1=0.2 46 | dPairGap1=0.25 47 | dPairViaGap1=0.25 48 | SilkLineWidth=0.12 49 | SilkTextSizeV=1 50 | SilkTextSizeH=1 51 | SilkTextSizeThickness=0.15 52 | SilkTextItalic=0 53 | SilkTextUpright=1 54 | CopperLineWidth=0.2 55 | CopperTextSizeV=1.5 56 | CopperTextSizeH=1.5 57 | CopperTextThickness=0.3 58 | CopperTextItalic=0 59 | CopperTextUpright=1 60 | EdgeCutLineWidth=0.05 61 | CourtyardLineWidth=0.05 62 | OthersLineWidth=0.15 63 | OthersTextSizeV=1 64 | OthersTextSizeH=1 65 | OthersTextSizeThickness=0.15 66 | OthersTextItalic=0 67 | OthersTextUpright=1 68 | SolderMaskClearance=0.051 69 | SolderMaskMinWidth=0.25 70 | SolderPasteClearance=0 71 | SolderPasteRatio=0 72 | [pcbnew/Layer.F.Cu] 73 | Name=F.Cu 74 | Type=0 75 | Enabled=1 76 | [pcbnew/Layer.In1.Cu] 77 | Name=In1.Cu 78 | Type=0 79 | Enabled=0 80 | [pcbnew/Layer.In2.Cu] 81 | Name=In2.Cu 82 | Type=0 83 | Enabled=0 84 | [pcbnew/Layer.In3.Cu] 85 | Name=In3.Cu 86 | Type=0 87 | Enabled=0 88 | [pcbnew/Layer.In4.Cu] 89 | Name=In4.Cu 90 | Type=0 91 | Enabled=0 92 | [pcbnew/Layer.In5.Cu] 93 | Name=In5.Cu 94 | Type=0 95 | Enabled=0 96 | [pcbnew/Layer.In6.Cu] 97 | Name=In6.Cu 98 | Type=0 99 | Enabled=0 100 | [pcbnew/Layer.In7.Cu] 101 | Name=In7.Cu 102 | Type=0 103 | Enabled=0 104 | [pcbnew/Layer.In8.Cu] 105 | Name=In8.Cu 106 | Type=0 107 | Enabled=0 108 | [pcbnew/Layer.In9.Cu] 109 | Name=In9.Cu 110 | Type=0 111 | Enabled=0 112 | [pcbnew/Layer.In10.Cu] 113 | Name=In10.Cu 114 | Type=0 115 | Enabled=0 116 | [pcbnew/Layer.In11.Cu] 117 | Name=In11.Cu 118 | Type=0 119 | Enabled=0 120 | [pcbnew/Layer.In12.Cu] 121 | Name=In12.Cu 122 | Type=0 123 | Enabled=0 124 | [pcbnew/Layer.In13.Cu] 125 | Name=In13.Cu 126 | Type=0 127 | Enabled=0 128 | [pcbnew/Layer.In14.Cu] 129 | Name=In14.Cu 130 | Type=0 131 | Enabled=0 132 | [pcbnew/Layer.In15.Cu] 133 | Name=In15.Cu 134 | Type=0 135 | Enabled=0 136 | [pcbnew/Layer.In16.Cu] 137 | Name=In16.Cu 138 | Type=0 139 | Enabled=0 140 | [pcbnew/Layer.In17.Cu] 141 | Name=In17.Cu 142 | Type=0 143 | Enabled=0 144 | [pcbnew/Layer.In18.Cu] 145 | Name=In18.Cu 146 | Type=0 147 | Enabled=0 148 | [pcbnew/Layer.In19.Cu] 149 | Name=In19.Cu 150 | Type=0 151 | Enabled=0 152 | [pcbnew/Layer.In20.Cu] 153 | Name=In20.Cu 154 | Type=0 155 | Enabled=0 156 | [pcbnew/Layer.In21.Cu] 157 | Name=In21.Cu 158 | Type=0 159 | Enabled=0 160 | [pcbnew/Layer.In22.Cu] 161 | Name=In22.Cu 162 | Type=0 163 | Enabled=0 164 | [pcbnew/Layer.In23.Cu] 165 | Name=In23.Cu 166 | Type=0 167 | Enabled=0 168 | [pcbnew/Layer.In24.Cu] 169 | Name=In24.Cu 170 | Type=0 171 | Enabled=0 172 | [pcbnew/Layer.In25.Cu] 173 | Name=In25.Cu 174 | Type=0 175 | Enabled=0 176 | [pcbnew/Layer.In26.Cu] 177 | Name=In26.Cu 178 | Type=0 179 | Enabled=0 180 | [pcbnew/Layer.In27.Cu] 181 | Name=In27.Cu 182 | Type=0 183 | Enabled=0 184 | [pcbnew/Layer.In28.Cu] 185 | Name=In28.Cu 186 | Type=0 187 | Enabled=0 188 | [pcbnew/Layer.In29.Cu] 189 | Name=In29.Cu 190 | Type=0 191 | Enabled=0 192 | [pcbnew/Layer.In30.Cu] 193 | Name=In30.Cu 194 | Type=0 195 | Enabled=0 196 | [pcbnew/Layer.B.Cu] 197 | Name=B.Cu 198 | Type=0 199 | Enabled=1 200 | [pcbnew/Layer.B.Adhes] 201 | Enabled=1 202 | [pcbnew/Layer.F.Adhes] 203 | Enabled=1 204 | [pcbnew/Layer.B.Paste] 205 | Enabled=1 206 | [pcbnew/Layer.F.Paste] 207 | Enabled=1 208 | [pcbnew/Layer.B.SilkS] 209 | Enabled=1 210 | [pcbnew/Layer.F.SilkS] 211 | Enabled=1 212 | [pcbnew/Layer.B.Mask] 213 | Enabled=1 214 | [pcbnew/Layer.F.Mask] 215 | Enabled=1 216 | [pcbnew/Layer.Dwgs.User] 217 | Enabled=1 218 | [pcbnew/Layer.Cmts.User] 219 | Enabled=1 220 | [pcbnew/Layer.Eco1.User] 221 | Enabled=1 222 | [pcbnew/Layer.Eco2.User] 223 | Enabled=1 224 | [pcbnew/Layer.Edge.Cuts] 225 | Enabled=1 226 | [pcbnew/Layer.Margin] 227 | Enabled=1 228 | [pcbnew/Layer.B.CrtYd] 229 | Enabled=1 230 | [pcbnew/Layer.F.CrtYd] 231 | Enabled=1 232 | [pcbnew/Layer.B.Fab] 233 | Enabled=1 234 | [pcbnew/Layer.F.Fab] 235 | Enabled=1 236 | [pcbnew/Layer.Rescue] 237 | Enabled=0 238 | [pcbnew/Netclasses] 239 | [pcbnew/Netclasses/Default] 240 | Name=Default 241 | Clearance=0.2 242 | TrackWidth=0.25 243 | ViaDiameter=0.8 244 | ViaDrill=0.4 245 | uViaDiameter=0.3 246 | uViaDrill=0.1 247 | dPairWidth=0.2 248 | dPairGap=0.25 249 | dPairViaGap=0.25 250 | -------------------------------------------------------------------------------- /pcb/pcb-smd.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "PM-2.5 / Temp Wifi Sensor" 8 | Date "2021-03-13" 9 | Rev "v04" 10 | Comp "" 11 | Comment1 "SMD Version" 12 | Comment2 "creativecommons.org/licenses/by/4.0" 13 | Comment3 "License: CC BY 4.0" 14 | Comment4 "Author: Aaron Patterson" 15 | $EndDescr 16 | $Comp 17 | L pm_25:Plantower-PM2.5 U4 18 | U 1 1 5E113090 19 | P 7250 2750 20 | F 0 "U4" H 7225 3331 50 0000 C CNN 21 | F 1 "PM2.5" H 7225 3240 50 0000 C CNN 22 | F 2 "Connector_Molex:Molex_PicoBlade_53261-0871_1x08-1MP_P1.25mm_Horizontal" H 7250 2750 50 0001 C CNN 23 | F 3 "" H 7250 2750 50 0001 C CNN 24 | 1 7250 2750 25 | 1 0 0 -1 26 | $EndComp 27 | $Comp 28 | L Device:CP1 C2 29 | U 1 1 5E116234 30 | P 3950 5050 31 | F 0 "C2" H 4065 5096 50 0000 L CNN 32 | F 1 "10uF" H 4065 5005 50 0000 L CNN 33 | F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder" H 3950 5050 50 0001 C CNN 34 | F 3 "~" H 3950 5050 50 0001 C CNN 35 | 1 3950 5050 36 | 1 0 0 -1 37 | $EndComp 38 | $Comp 39 | L Device:C C1 40 | U 1 1 5E11689B 41 | P 3350 5050 42 | F 0 "C1" H 3465 5096 50 0000 L CNN 43 | F 1 "100nF" H 3465 5005 50 0000 L CNN 44 | F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder" H 3388 4900 50 0001 C CNN 45 | F 3 "~" H 3350 5050 50 0001 C CNN 46 | 1 3350 5050 47 | 1 0 0 -1 48 | $EndComp 49 | $Comp 50 | L power:GND #PWR011 51 | U 1 1 5E11C1F5 52 | P 7250 3150 53 | F 0 "#PWR011" H 7250 2900 50 0001 C CNN 54 | F 1 "GND" H 7255 2977 50 0000 C CNN 55 | F 2 "" H 7250 3150 50 0001 C CNN 56 | F 3 "" H 7250 3150 50 0001 C CNN 57 | 1 7250 3150 58 | 1 0 0 -1 59 | $EndComp 60 | $Comp 61 | L power:+5V #PWR010 62 | U 1 1 5E11E2EC 63 | P 7250 2050 64 | F 0 "#PWR010" H 7250 1900 50 0001 C CNN 65 | F 1 "+5V" H 7265 2223 50 0000 C CNN 66 | F 2 "" H 7250 2050 50 0001 C CNN 67 | F 3 "" H 7250 2050 50 0001 C CNN 68 | 1 7250 2050 69 | 1 0 0 -1 70 | $EndComp 71 | Wire Wire Line 72 | 7250 2050 7250 2350 73 | Wire Wire Line 74 | 7250 3100 7250 3150 75 | $Comp 76 | L RF_Module:ESP-12F U3 77 | U 1 1 600365AB 78 | P 8950 4200 79 | F 0 "U3" H 8950 4965 50 0000 C CNN 80 | F 1 "ESP-12F" H 8950 4874 50 0000 C CNN 81 | F 2 "RF_Module:ESP-12E" H 8950 4200 50 0001 C CNN 82 | F 3 "" H 8950 4200 50 0001 C CNN 83 | 1 8950 4200 84 | 1 0 0 -1 85 | $EndComp 86 | $Comp 87 | L Interface_USB:MCP2221AxST U2 88 | U 1 1 60039093 89 | P 5850 4200 90 | F 0 "U2" H 5850 3511 50 0000 C CNN 91 | F 1 "MCP2221AxST" H 5850 3420 50 0000 C CNN 92 | F 2 "Package_SO:TSSOP-14_4.4x5mm_P0.65mm" H 5850 5200 50 0001 C CNN 93 | F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20005565B.pdf" H 5850 4900 50 0001 C CNN 94 | 1 5850 4200 95 | 1 0 0 -1 96 | $EndComp 97 | Wire Wire Line 98 | 6250 4100 7100 4100 99 | Wire Wire Line 100 | 7100 4100 7100 5450 101 | Wire Wire Line 102 | 7100 5450 10150 5450 103 | Wire Wire Line 104 | 10150 5450 10150 4000 105 | Wire Wire Line 106 | 10150 4000 9850 4000 107 | Wire Wire Line 108 | 6250 4000 6900 4000 109 | Wire Wire Line 110 | 6900 4000 6900 5850 111 | Wire Wire Line 112 | 6900 5850 10000 5850 113 | Text Label 8350 3600 2 50 ~ 0 114 | RST 115 | Text Label 6250 4400 0 50 ~ 0 116 | RST 117 | Text Label 6250 4300 0 50 ~ 0 118 | FLASH 119 | Text Label 9550 3600 0 50 ~ 0 120 | FLASH 121 | $Comp 122 | L power:+3.3V #PWR0101 123 | U 1 1 6004A0C6 124 | P 8950 3400 125 | F 0 "#PWR0101" H 8950 3250 50 0001 C CNN 126 | F 1 "+3.3V" H 8965 3573 50 0000 C CNN 127 | F 2 "" H 8950 3400 50 0001 C CNN 128 | F 3 "" H 8950 3400 50 0001 C CNN 129 | 1 8950 3400 130 | 1 0 0 -1 131 | $EndComp 132 | $Comp 133 | L power:GND #PWR0102 134 | U 1 1 6004C47E 135 | P 8950 4900 136 | F 0 "#PWR0102" H 8950 4650 50 0001 C CNN 137 | F 1 "GND" H 8955 4727 50 0000 C CNN 138 | F 2 "" H 8950 4900 50 0001 C CNN 139 | F 3 "" H 8950 4900 50 0001 C CNN 140 | 1 8950 4900 141 | 1 0 0 -1 142 | $EndComp 143 | Text Label 5450 4100 2 50 ~ 0 144 | D+ 145 | Text Label 5450 4200 2 50 ~ 0 146 | D- 147 | $Comp 148 | L power:+5V #PWR0103 149 | U 1 1 60055CF3 150 | P 5850 3250 151 | F 0 "#PWR0103" H 5850 3100 50 0001 C CNN 152 | F 1 "+5V" H 5865 3423 50 0000 C CNN 153 | F 2 "" H 5850 3250 50 0001 C CNN 154 | F 3 "" H 5850 3250 50 0001 C CNN 155 | 1 5850 3250 156 | 1 0 0 -1 157 | $EndComp 158 | Wire Wire Line 159 | 5850 3500 5850 3400 160 | $Comp 161 | L Device:R R1 162 | U 1 1 60059B68 163 | P 5250 3550 164 | F 0 "R1" H 5320 3596 50 0000 L CNN 165 | F 1 "10k" H 5320 3505 50 0000 L CNN 166 | F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 5180 3550 50 0001 C CNN 167 | F 3 "~" H 5250 3550 50 0001 C CNN 168 | 1 5250 3550 169 | 1 0 0 -1 170 | $EndComp 171 | Wire Wire Line 172 | 5450 3700 5250 3700 173 | Wire Wire Line 174 | 5250 3400 5850 3400 175 | Connection ~ 5850 3400 176 | Wire Wire Line 177 | 5850 3400 5850 3250 178 | $Comp 179 | L Device:C C3 180 | U 1 1 6005BC47 181 | P 6100 3400 182 | F 0 "C3" V 5848 3400 50 0000 C CNN 183 | F 1 "47nf" V 5939 3400 50 0000 C CNN 184 | F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder" H 6138 3250 50 0001 C CNN 185 | F 3 "~" H 6100 3400 50 0001 C CNN 186 | 1 6100 3400 187 | 0 1 1 0 188 | $EndComp 189 | Wire Wire Line 190 | 5950 3500 5950 3400 191 | $Comp 192 | L power:GND #PWR0104 193 | U 1 1 6005D7D0 194 | P 6450 3400 195 | F 0 "#PWR0104" H 6450 3150 50 0001 C CNN 196 | F 1 "GND" H 6455 3227 50 0000 C CNN 197 | F 2 "" H 6450 3400 50 0001 C CNN 198 | F 3 "" H 6450 3400 50 0001 C CNN 199 | 1 6450 3400 200 | 1 0 0 -1 201 | $EndComp 202 | Wire Wire Line 203 | 6250 3400 6450 3400 204 | $Comp 205 | L power:GND #PWR0105 206 | U 1 1 6005E546 207 | P 5850 5100 208 | F 0 "#PWR0105" H 5850 4850 50 0001 C CNN 209 | F 1 "GND" H 5855 4927 50 0000 C CNN 210 | F 2 "" H 5850 5100 50 0001 C CNN 211 | F 3 "" H 5850 5100 50 0001 C CNN 212 | 1 5850 5100 213 | 1 0 0 -1 214 | $EndComp 215 | Wire Wire Line 216 | 5850 5100 5850 4800 217 | Wire Wire Line 218 | 10450 4500 10450 2600 219 | Wire Wire Line 220 | 10450 2600 7550 2600 221 | $Comp 222 | L power:+5V #PWR0106 223 | U 1 1 60079FF8 224 | P 3900 2550 225 | F 0 "#PWR0106" H 3900 2400 50 0001 C CNN 226 | F 1 "+5V" H 3915 2723 50 0000 C CNN 227 | F 2 "" H 3900 2550 50 0001 C CNN 228 | F 3 "" H 3900 2550 50 0001 C CNN 229 | 1 3900 2550 230 | 1 0 0 -1 231 | $EndComp 232 | $Comp 233 | L power:+3.3V #PWR0107 234 | U 1 1 6007A610 235 | P 4500 2550 236 | F 0 "#PWR0107" H 4500 2400 50 0001 C CNN 237 | F 1 "+3.3V" H 4515 2723 50 0000 C CNN 238 | F 2 "" H 4500 2550 50 0001 C CNN 239 | F 3 "" H 4500 2550 50 0001 C CNN 240 | 1 4500 2550 241 | 1 0 0 -1 242 | $EndComp 243 | Wire Wire Line 244 | 4500 2900 4500 2550 245 | Wire Wire Line 246 | 3900 2900 3900 2550 247 | $Comp 248 | L power:GND #PWR0108 249 | U 1 1 6007DBDF 250 | P 4200 3350 251 | F 0 "#PWR0108" H 4200 3100 50 0001 C CNN 252 | F 1 "GND" H 4205 3177 50 0000 C CNN 253 | F 2 "" H 4200 3350 50 0001 C CNN 254 | F 3 "" H 4200 3350 50 0001 C CNN 255 | 1 4200 3350 256 | 1 0 0 -1 257 | $EndComp 258 | Wire Wire Line 259 | 4200 3200 4200 3350 260 | $Comp 261 | L power:+3.3V #PWR0109 262 | U 1 1 60084B5A 263 | P 3950 4900 264 | F 0 "#PWR0109" H 3950 4750 50 0001 C CNN 265 | F 1 "+3.3V" H 3965 5073 50 0000 C CNN 266 | F 2 "" H 3950 4900 50 0001 C CNN 267 | F 3 "" H 3950 4900 50 0001 C CNN 268 | 1 3950 4900 269 | 1 0 0 -1 270 | $EndComp 271 | $Comp 272 | L power:+3.3V #PWR0110 273 | U 1 1 6008507F 274 | P 3350 4900 275 | F 0 "#PWR0110" H 3350 4750 50 0001 C CNN 276 | F 1 "+3.3V" H 3365 5073 50 0000 C CNN 277 | F 2 "" H 3350 4900 50 0001 C CNN 278 | F 3 "" H 3350 4900 50 0001 C CNN 279 | 1 3350 4900 280 | 1 0 0 -1 281 | $EndComp 282 | $Comp 283 | L power:GND #PWR0111 284 | U 1 1 600856A1 285 | P 3950 5200 286 | F 0 "#PWR0111" H 3950 4950 50 0001 C CNN 287 | F 1 "GND" H 3955 5027 50 0000 C CNN 288 | F 2 "" H 3950 5200 50 0001 C CNN 289 | F 3 "" H 3950 5200 50 0001 C CNN 290 | 1 3950 5200 291 | 1 0 0 -1 292 | $EndComp 293 | $Comp 294 | L power:GND #PWR0112 295 | U 1 1 60085D70 296 | P 3350 5200 297 | F 0 "#PWR0112" H 3350 4950 50 0001 C CNN 298 | F 1 "GND" H 3355 5027 50 0000 C CNN 299 | F 2 "" H 3350 5200 50 0001 C CNN 300 | F 3 "" H 3350 5200 50 0001 C CNN 301 | 1 3350 5200 302 | 1 0 0 -1 303 | $EndComp 304 | $Comp 305 | L power:GND #PWR0113 306 | U 1 1 6008C9C3 307 | P 5050 6300 308 | F 0 "#PWR0113" H 5050 6050 50 0001 C CNN 309 | F 1 "GND" H 5055 6127 50 0000 C CNN 310 | F 2 "" H 5050 6300 50 0001 C CNN 311 | F 3 "" H 5050 6300 50 0001 C CNN 312 | 1 5050 6300 313 | 1 0 0 -1 314 | $EndComp 315 | $Comp 316 | L power:+3.3V #PWR0114 317 | U 1 1 6008D0A0 318 | P 5300 6300 319 | F 0 "#PWR0114" H 5300 6150 50 0001 C CNN 320 | F 1 "+3.3V" H 5315 6473 50 0000 C CNN 321 | F 2 "" H 5300 6300 50 0001 C CNN 322 | F 3 "" H 5300 6300 50 0001 C CNN 323 | 1 5300 6300 324 | -1 0 0 1 325 | $EndComp 326 | Text Label 5400 6300 3 50 ~ 0 327 | SDA 328 | Text Label 5500 6300 3 50 ~ 0 329 | SCL 330 | Text Label 9550 4000 0 50 ~ 0 331 | SDA 332 | Text Label 9550 4100 0 50 ~ 0 333 | SCL 334 | $Comp 335 | L Connector_Generic:Conn_01x04 J2 336 | U 1 1 60093EF5 337 | P 3700 6150 338 | F 0 "J2" V 3664 5862 50 0000 R CNN 339 | F 1 "header" V 3573 5862 50 0000 R CNN 340 | F 2 "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" H 3700 6150 50 0001 C CNN 341 | F 3 "~" H 3700 6150 50 0001 C CNN 342 | 1 3700 6150 343 | 0 -1 -1 0 344 | $EndComp 345 | $Comp 346 | L power:+3.3V #PWR0115 347 | U 1 1 60097848 348 | P 4050 6450 349 | F 0 "#PWR0115" H 4050 6300 50 0001 C CNN 350 | F 1 "+3.3V" H 4065 6623 50 0000 C CNN 351 | F 2 "" H 4050 6450 50 0001 C CNN 352 | F 3 "" H 4050 6450 50 0001 C CNN 353 | 1 4050 6450 354 | -1 0 0 1 355 | $EndComp 356 | $Comp 357 | L power:GND #PWR0116 358 | U 1 1 60098F93 359 | P 3800 6350 360 | F 0 "#PWR0116" H 3800 6100 50 0001 C CNN 361 | F 1 "GND" H 3805 6177 50 0000 C CNN 362 | F 2 "" H 3800 6350 50 0001 C CNN 363 | F 3 "" H 3800 6350 50 0001 C CNN 364 | 1 3800 6350 365 | 1 0 0 -1 366 | $EndComp 367 | Wire Wire Line 368 | 3900 6350 4050 6350 369 | Wire Wire Line 370 | 4050 6350 4050 6450 371 | Text Label 3700 6350 3 50 ~ 0 372 | SCL 373 | Text Label 3600 6350 3 50 ~ 0 374 | SDA 375 | NoConn ~ 6900 2550 376 | NoConn ~ 6900 2650 377 | NoConn ~ 8350 4000 378 | NoConn ~ 8350 4300 379 | NoConn ~ 8350 4400 380 | NoConn ~ 8350 4500 381 | NoConn ~ 8350 4600 382 | NoConn ~ 8350 4700 383 | NoConn ~ 9550 4600 384 | NoConn ~ 9550 3800 385 | $Comp 386 | L Connector:USB_C_Receptacle_USB2.0 J1 387 | U 1 1 600ACD7F 388 | P 2750 2850 389 | F 0 "J1" H 2857 3717 50 0000 C CNN 390 | F 1 "USB_C_Receptacle_USB2.0" H 2857 3626 50 0000 C CNN 391 | F 2 "Connector_USB:USB_C_Receptacle_GCT_USB4085" H 2900 2850 50 0001 C CNN 392 | F 3 "https://www.usb.org/sites/default/files/documents/usb_type-c.zip" H 2900 2850 50 0001 C CNN 393 | 1 2750 2850 394 | 1 0 0 -1 395 | $EndComp 396 | $Comp 397 | L power:GND #PWR0117 398 | U 1 1 600AF0B5 399 | P 2750 3750 400 | F 0 "#PWR0117" H 2750 3500 50 0001 C CNN 401 | F 1 "GND" H 2755 3577 50 0000 C CNN 402 | F 2 "" H 2750 3750 50 0001 C CNN 403 | F 3 "" H 2750 3750 50 0001 C CNN 404 | 1 2750 3750 405 | 1 0 0 -1 406 | $EndComp 407 | Wire Wire Line 408 | 2450 3750 2750 3750 409 | Connection ~ 2750 3750 410 | Text Label 3350 3050 0 50 ~ 0 411 | D+ 412 | Text Label 3350 2950 0 50 ~ 0 413 | D+ 414 | Text Label 3350 2850 0 50 ~ 0 415 | D- 416 | Text Label 3350 2750 0 50 ~ 0 417 | D- 418 | $Comp 419 | L power:+5V #PWR0118 420 | U 1 1 600B10F4 421 | P 3350 2250 422 | F 0 "#PWR0118" H 3350 2100 50 0001 C CNN 423 | F 1 "+5V" H 3365 2423 50 0000 C CNN 424 | F 2 "" H 3350 2250 50 0001 C CNN 425 | F 3 "" H 3350 2250 50 0001 C CNN 426 | 1 3350 2250 427 | 1 0 0 -1 428 | $EndComp 429 | NoConn ~ 3350 3350 430 | NoConn ~ 3350 3450 431 | $Comp 432 | L Mechanical:MountingHole H1 433 | U 1 1 600B95C9 434 | P 3850 950 435 | F 0 "H1" H 3950 996 50 0000 L CNN 436 | F 1 "MountingHole" H 3950 905 50 0000 L CNN 437 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 3850 950 50 0001 C CNN 438 | F 3 "~" H 3850 950 50 0001 C CNN 439 | 1 3850 950 440 | 1 0 0 -1 441 | $EndComp 442 | $Comp 443 | L Mechanical:MountingHole H2 444 | U 1 1 600B9C28 445 | P 4700 950 446 | F 0 "H2" H 4800 996 50 0000 L CNN 447 | F 1 "MountingHole" H 4800 905 50 0000 L CNN 448 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 4700 950 50 0001 C CNN 449 | F 3 "~" H 4700 950 50 0001 C CNN 450 | 1 4700 950 451 | 1 0 0 -1 452 | $EndComp 453 | $Comp 454 | L Mechanical:MountingHole H3 455 | U 1 1 600BA0A1 456 | P 5450 950 457 | F 0 "H3" H 5550 996 50 0000 L CNN 458 | F 1 "MountingHole" H 5550 905 50 0000 L CNN 459 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 5450 950 50 0001 C CNN 460 | F 3 "~" H 5450 950 50 0001 C CNN 461 | 1 5450 950 462 | 1 0 0 -1 463 | $EndComp 464 | $Comp 465 | L Mechanical:MountingHole H4 466 | U 1 1 600BA5D5 467 | P 6300 950 468 | F 0 "H4" H 6400 996 50 0000 L CNN 469 | F 1 "MountingHole" H 6400 905 50 0000 L CNN 470 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 6300 950 50 0001 C CNN 471 | F 3 "~" H 6300 950 50 0001 C CNN 472 | 1 6300 950 473 | 1 0 0 -1 474 | $EndComp 475 | $Comp 476 | L Device:R R2 477 | U 1 1 600BB1DB 478 | P 10450 4850 479 | F 0 "R2" H 10520 4896 50 0000 L CNN 480 | F 1 "10k" H 10520 4805 50 0000 L CNN 481 | F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 10380 4850 50 0001 C CNN 482 | F 3 "~" H 10450 4850 50 0001 C CNN 483 | 1 10450 4850 484 | 1 0 0 -1 485 | $EndComp 486 | Wire Wire Line 487 | 10450 4700 10450 4500 488 | Connection ~ 10450 4500 489 | $Comp 490 | L power:GND #PWR0119 491 | U 1 1 600BC8F7 492 | P 10450 5000 493 | F 0 "#PWR0119" H 10450 4750 50 0001 C CNN 494 | F 1 "GND" H 10455 4827 50 0000 C CNN 495 | F 2 "" H 10450 5000 50 0001 C CNN 496 | F 3 "" H 10450 5000 50 0001 C CNN 497 | 1 10450 5000 498 | 1 0 0 -1 499 | $EndComp 500 | Wire Wire Line 501 | 5200 6300 5050 6300 502 | NoConn ~ 8350 4200 503 | $Comp 504 | L power:GND #PWR0120 505 | U 1 1 600F9C99 506 | P 5100 6950 507 | F 0 "#PWR0120" H 5100 6700 50 0001 C CNN 508 | F 1 "GND" H 5105 6777 50 0000 C CNN 509 | F 2 "" H 5100 6950 50 0001 C CNN 510 | F 3 "" H 5100 6950 50 0001 C CNN 511 | 1 5100 6950 512 | 1 0 0 -1 513 | $EndComp 514 | Text Label 5450 6950 3 50 ~ 0 515 | SDA 516 | Text Label 5550 6950 3 50 ~ 0 517 | SCL 518 | Wire Wire Line 519 | 5250 6950 5100 6950 520 | $Comp 521 | L Connector_Generic:Conn_01x04 J3 522 | U 1 1 600889C9 523 | P 5300 6100 524 | F 0 "J3" V 5264 5812 50 0000 R CNN 525 | F 1 "I2C 3.3v" V 5173 5812 50 0000 R CNN 526 | F 2 "Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical" H 5300 6100 50 0001 C CNN 527 | F 3 "~" H 5300 6100 50 0001 C CNN 528 | 1 5300 6100 529 | 0 -1 -1 0 530 | $EndComp 531 | $Comp 532 | L Connector_Generic:Conn_01x04 J4 533 | U 1 1 600F9C93 534 | P 5350 6750 535 | F 0 "J4" V 5314 6462 50 0000 R CNN 536 | F 1 "I2C 5v" V 5223 6462 50 0000 R CNN 537 | F 2 "Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical" H 5350 6750 50 0001 C CNN 538 | F 3 "~" H 5350 6750 50 0001 C CNN 539 | 1 5350 6750 540 | 0 -1 -1 0 541 | $EndComp 542 | $Comp 543 | L power:+5V #PWR0121 544 | U 1 1 602F3278 545 | P 5350 6950 546 | F 0 "#PWR0121" H 5350 6800 50 0001 C CNN 547 | F 1 "+5V" H 5365 7123 50 0000 C CNN 548 | F 2 "" H 5350 6950 50 0001 C CNN 549 | F 3 "" H 5350 6950 50 0001 C CNN 550 | 1 5350 6950 551 | -1 0 0 1 552 | $EndComp 553 | Wire Wire Line 554 | 10000 3700 9550 3700 555 | Wire Wire Line 556 | 10000 3700 10000 5850 557 | Wire Wire Line 558 | 9850 4000 9850 3900 559 | Wire Wire Line 560 | 9850 3900 9550 3900 561 | Wire Wire Line 562 | 9550 4200 9750 4200 563 | Wire Wire Line 564 | 9750 4200 9750 5250 565 | Wire Wire Line 566 | 9750 5250 6500 5250 567 | Wire Wire Line 568 | 6500 5250 6500 4600 569 | Wire Wire Line 570 | 6500 4600 6250 4600 571 | Wire Wire Line 572 | 9550 4300 10250 4300 573 | Wire Wire Line 574 | 10250 4300 10250 2900 575 | Wire Wire Line 576 | 7550 2900 10250 2900 577 | Wire Wire Line 578 | 9550 4400 9700 4400 579 | Wire Wire Line 580 | 9700 4400 9700 5000 581 | Wire Wire Line 582 | 9700 5000 6650 5000 583 | Wire Wire Line 584 | 6650 5000 6650 4500 585 | Wire Wire Line 586 | 6650 4500 6250 4500 587 | Wire Wire Line 588 | 9550 4500 10450 4500 589 | Wire Wire Line 590 | 8350 3800 7850 3800 591 | Wire Wire Line 592 | 7850 3800 7850 3400 593 | Wire Wire Line 594 | 7850 3400 8950 3400 595 | Connection ~ 8950 3400 596 | $Comp 597 | L Device:R R3 598 | U 1 1 60483EC3 599 | P 2050 5000 600 | F 0 "R3" H 2120 5046 50 0000 L CNN 601 | F 1 "5.1k" H 2120 4955 50 0000 L CNN 602 | F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 1980 5000 50 0001 C CNN 603 | F 3 "~" H 2050 5000 50 0001 C CNN 604 | 1 2050 5000 605 | 1 0 0 -1 606 | $EndComp 607 | $Comp 608 | L Device:R R4 609 | U 1 1 60484D3B 610 | P 2450 5000 611 | F 0 "R4" H 2520 5046 50 0000 L CNN 612 | F 1 "5.1k" H 2520 4955 50 0000 L CNN 613 | F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 2380 5000 50 0001 C CNN 614 | F 3 "~" H 2450 5000 50 0001 C CNN 615 | 1 2450 5000 616 | 1 0 0 -1 617 | $EndComp 618 | $Comp 619 | L power:GND #PWR0122 620 | U 1 1 604854A3 621 | P 2450 5150 622 | F 0 "#PWR0122" H 2450 4900 50 0001 C CNN 623 | F 1 "GND" H 2455 4977 50 0000 C CNN 624 | F 2 "" H 2450 5150 50 0001 C CNN 625 | F 3 "" H 2450 5150 50 0001 C CNN 626 | 1 2450 5150 627 | 1 0 0 -1 628 | $EndComp 629 | $Comp 630 | L power:GND #PWR0123 631 | U 1 1 604859C1 632 | P 2050 5150 633 | F 0 "#PWR0123" H 2050 4900 50 0001 C CNN 634 | F 1 "GND" H 2055 4977 50 0000 C CNN 635 | F 2 "" H 2050 5150 50 0001 C CNN 636 | F 3 "" H 2050 5150 50 0001 C CNN 637 | 1 2050 5150 638 | 1 0 0 -1 639 | $EndComp 640 | Text Label 3350 2450 0 50 ~ 0 641 | CC1 642 | Text Label 3350 2550 0 50 ~ 0 643 | CC2 644 | Text Label 2050 4850 0 50 ~ 0 645 | CC1 646 | Text Label 2450 4850 0 50 ~ 0 647 | CC2 648 | $Comp 649 | L Device:R R5 650 | U 1 1 604D7974 651 | P 2050 6150 652 | F 0 "R5" H 2120 6196 50 0000 L CNN 653 | F 1 "1.8k" H 2120 6105 50 0000 L CNN 654 | F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 1980 6150 50 0001 C CNN 655 | F 3 "~" H 2050 6150 50 0001 C CNN 656 | 1 2050 6150 657 | 1 0 0 -1 658 | $EndComp 659 | $Comp 660 | L power:+5V #PWR0124 661 | U 1 1 604D83CF 662 | P 2050 6000 663 | F 0 "#PWR0124" H 2050 5850 50 0001 C CNN 664 | F 1 "+5V" H 2065 6173 50 0000 C CNN 665 | F 2 "" H 2050 6000 50 0001 C CNN 666 | F 3 "" H 2050 6000 50 0001 C CNN 667 | 1 2050 6000 668 | 1 0 0 -1 669 | $EndComp 670 | $Comp 671 | L Device:R R6 672 | U 1 1 604D8EAE 673 | P 2600 6150 674 | F 0 "R6" H 2670 6196 50 0000 L CNN 675 | F 1 "1.8k" H 2670 6105 50 0000 L CNN 676 | F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 2530 6150 50 0001 C CNN 677 | F 3 "~" H 2600 6150 50 0001 C CNN 678 | 1 2600 6150 679 | 1 0 0 -1 680 | $EndComp 681 | $Comp 682 | L power:+5V #PWR0125 683 | U 1 1 604D9337 684 | P 2600 6000 685 | F 0 "#PWR0125" H 2600 5850 50 0001 C CNN 686 | F 1 "+5V" H 2615 6173 50 0000 C CNN 687 | F 2 "" H 2600 6000 50 0001 C CNN 688 | F 3 "" H 2600 6000 50 0001 C CNN 689 | 1 2600 6000 690 | 1 0 0 -1 691 | $EndComp 692 | Text Label 2050 6300 3 50 ~ 0 693 | SDA 694 | Text Label 2600 6300 3 50 ~ 0 695 | SCL 696 | Text Notes 2050 6650 0 50 ~ 0 697 | Pullup For T6703 698 | $Comp 699 | L Connector:Conn_01x06_Female J5 700 | U 1 1 604DAFD3 701 | P 2300 6900 702 | F 0 "J5" V 2238 6512 50 0000 R CNN 703 | F 1 "T6703" V 2147 6512 50 0000 R CNN 704 | F 2 "Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical" H 2300 6900 50 0001 C CNN 705 | F 3 "~" H 2300 6900 50 0001 C CNN 706 | 1 2300 6900 707 | 0 -1 -1 0 708 | $EndComp 709 | Text Label 2100 7100 3 50 ~ 0 710 | SDA 711 | Text Label 2200 7100 3 50 ~ 0 712 | SCL 713 | $Comp 714 | L power:+5V #PWR0126 715 | U 1 1 604DDDA2 716 | P 2300 7100 717 | F 0 "#PWR0126" H 2300 6950 50 0001 C CNN 718 | F 1 "+5V" H 2315 7273 50 0000 C CNN 719 | F 2 "" H 2300 7100 50 0001 C CNN 720 | F 3 "" H 2300 7100 50 0001 C CNN 721 | 1 2300 7100 722 | -1 0 0 1 723 | $EndComp 724 | $Comp 725 | L power:GND #PWR0127 726 | U 1 1 604DEA73 727 | P 2400 7350 728 | F 0 "#PWR0127" H 2400 7100 50 0001 C CNN 729 | F 1 "GND" H 2405 7177 50 0000 C CNN 730 | F 2 "" H 2400 7350 50 0001 C CNN 731 | F 3 "" H 2400 7350 50 0001 C CNN 732 | 1 2400 7350 733 | 1 0 0 -1 734 | $EndComp 735 | Wire Wire Line 736 | 2400 7100 2400 7200 737 | NoConn ~ 2500 7100 738 | Wire Wire Line 739 | 2600 7100 2600 7200 740 | Wire Wire Line 741 | 2600 7200 2400 7200 742 | Connection ~ 2400 7200 743 | Wire Wire Line 744 | 2400 7200 2400 7350 745 | $Comp 746 | L Regulator_Linear:MCP1700-3302E_SOT89 U1 747 | U 1 1 604E7D6B 748 | P 4200 2900 749 | F 0 "U1" H 4200 3142 50 0000 C CNN 750 | F 1 "MCP1700-3302E_SOT89" H 4200 3051 50 0000 C CNN 751 | F 2 "Package_TO_SOT_SMD:SOT-89-3" H 4200 3100 50 0001 C CNN 752 | F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20001826D.pdf" H 4200 2850 50 0001 C CNN 753 | 1 4200 2900 754 | 1 0 0 -1 755 | $EndComp 756 | Text Label 6250 3700 0 50 ~ 0 757 | SDA 758 | Text Label 6250 3800 0 50 ~ 0 759 | SCL 760 | $EndSCHEMATC 761 | -------------------------------------------------------------------------------- /pcb/pm_25-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Generic_Conn_01x04 5 | # 6 | DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N 7 | F0 "J" 0 200 50 H V C CNN 8 | F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | Connector*:*_1x??_* 13 | $ENDFPLIST 14 | DRAW 15 | S -50 -195 0 -205 1 1 6 N 16 | S -50 -95 0 -105 1 1 6 N 17 | S -50 5 0 -5 1 1 6 N 18 | S -50 105 0 95 1 1 6 N 19 | S -50 150 50 -250 1 1 10 f 20 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 21 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 22 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 23 | X Pin_4 4 -200 -200 150 R 50 50 1 1 P 24 | ENDDRAW 25 | ENDDEF 26 | # 27 | # Connector_USB_C_Receptacle_USB2.0 28 | # 29 | DEF Connector_USB_C_Receptacle_USB2.0 J 0 40 Y Y 1 F N 30 | F0 "J" -400 750 50 H V L CNN 31 | F1 "Connector_USB_C_Receptacle_USB2.0" 750 750 50 H V R CNN 32 | F2 "" 150 0 50 H I C CNN 33 | F3 "" 150 0 50 H I C CNN 34 | $FPLIST 35 | USB*C*Receptacle* 36 | $ENDFPLIST 37 | DRAW 38 | A -275 -150 75 -1799 -1 0 1 20 N -350 -150 -200 -150 39 | A -275 -150 25 -1799 -1 0 1 10 N -300 -150 -250 -150 40 | A -275 -150 25 -1799 -1 0 1 10 F -300 -150 -250 -150 41 | A -275 150 25 1 1799 0 1 10 F -250 150 -300 150 42 | A -275 150 25 1 1799 0 1 10 N -250 150 -300 150 43 | A -275 150 75 1 1799 0 1 20 N -200 150 -350 150 44 | C -100 45 25 0 1 10 F 45 | C 0 -230 50 0 1 0 F 46 | S -10 -700 10 -660 0 0 0 N 47 | S 400 -590 360 -610 0 0 0 N 48 | S 400 -490 360 -510 0 0 0 N 49 | S 400 -190 360 -210 0 0 0 N 50 | S 400 -90 360 -110 0 0 0 N 51 | S 400 10 360 -10 0 0 0 N 52 | S 400 110 360 90 0 0 0 N 53 | S 400 310 360 290 0 0 0 N 54 | S 400 410 360 390 0 0 0 N 55 | S 400 610 360 590 0 0 0 N 56 | S -400 700 400 -700 0 1 10 f 57 | S -300 -150 -250 150 0 1 10 F 58 | S 75 70 125 120 0 1 10 F 59 | P 2 0 1 20 -350 -150 -350 150 N 60 | P 2 0 1 20 -200 150 -200 -150 N 61 | P 2 0 1 20 0 -230 0 170 N 62 | P 3 0 1 20 0 -130 -100 -30 -100 20 N 63 | P 3 0 1 20 0 -80 100 20 100 70 N 64 | P 4 0 1 10 -50 170 0 270 50 170 -50 170 F 65 | X GND A1 0 -900 200 U 50 50 1 1 W 66 | X GND A12 0 -900 200 U 50 50 1 1 P N 67 | X VBUS A4 600 600 200 L 50 50 1 1 W 68 | X CC1 A5 600 400 200 L 50 50 1 1 B 69 | X D+ A6 600 -100 200 L 50 50 1 1 B 70 | X D- A7 600 100 200 L 50 50 1 1 B 71 | X SBU1 A8 600 -500 200 L 50 50 1 1 B 72 | X VBUS A9 600 600 200 L 50 50 1 1 P N 73 | X GND B1 0 -900 200 U 50 50 1 1 P N 74 | X GND B12 0 -900 200 U 50 50 1 1 P N 75 | X VBUS B4 600 600 200 L 50 50 1 1 P N 76 | X CC2 B5 600 300 200 L 50 50 1 1 B 77 | X D+ B6 600 -200 200 L 50 50 1 1 B 78 | X D- B7 600 0 200 L 50 50 1 1 B 79 | X SBU2 B8 600 -600 200 L 50 50 1 1 B 80 | X VBUS B9 600 600 200 L 50 50 1 1 P N 81 | X SHIELD S1 -300 -900 200 U 50 50 1 1 P 82 | ENDDRAW 83 | ENDDEF 84 | # 85 | # Device_C 86 | # 87 | DEF Device_C C 0 10 N Y 1 F N 88 | F0 "C" 25 100 50 H V L CNN 89 | F1 "Device_C" 25 -100 50 H V L CNN 90 | F2 "" 38 -150 50 H I C CNN 91 | F3 "" 0 0 50 H I C CNN 92 | $FPLIST 93 | C_* 94 | $ENDFPLIST 95 | DRAW 96 | P 2 0 1 20 -80 -30 80 -30 N 97 | P 2 0 1 20 -80 30 80 30 N 98 | X ~ 1 0 150 110 D 50 50 1 1 P 99 | X ~ 2 0 -150 110 U 50 50 1 1 P 100 | ENDDRAW 101 | ENDDEF 102 | # 103 | # Device_CP1 104 | # 105 | DEF Device_CP1 C 0 10 N N 1 F N 106 | F0 "C" 25 100 50 H V L CNN 107 | F1 "Device_CP1" 25 -100 50 H V L CNN 108 | F2 "" 0 0 50 H I C CNN 109 | F3 "" 0 0 50 H I C CNN 110 | $FPLIST 111 | CP_* 112 | $ENDFPLIST 113 | DRAW 114 | A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 115 | P 2 0 1 20 -80 30 80 30 N 116 | P 2 0 1 0 -70 90 -30 90 N 117 | P 2 0 1 0 -50 70 -50 110 N 118 | X ~ 1 0 150 110 D 50 50 1 1 P 119 | X ~ 2 0 -150 130 U 50 50 1 1 P 120 | ENDDRAW 121 | ENDDEF 122 | # 123 | # Device_R 124 | # 125 | DEF Device_R R 0 0 N Y 1 F N 126 | F0 "R" 80 0 50 V V C CNN 127 | F1 "Device_R" 0 0 50 V V C CNN 128 | F2 "" -70 0 50 V I C CNN 129 | F3 "" 0 0 50 H I C CNN 130 | $FPLIST 131 | R_* 132 | $ENDFPLIST 133 | DRAW 134 | S -40 -100 40 100 0 1 10 N 135 | X ~ 1 0 150 50 D 50 50 1 1 P 136 | X ~ 2 0 -150 50 U 50 50 1 1 P 137 | ENDDRAW 138 | ENDDEF 139 | # 140 | # Interface_USB_MCP2221AxP 141 | # 142 | DEF Interface_USB_MCP2221AxP U 0 20 Y Y 1 F N 143 | F0 "U" -300 650 50 H V C CNN 144 | F1 "Interface_USB_MCP2221AxP" 500 650 50 H V C CNN 145 | F2 "Package_DIP:DIP-14_W7.62mm" 0 1000 50 H I C CNN 146 | F3 "" 0 700 50 H I C CNN 147 | $FPLIST 148 | DIP*W7.62mm* 149 | $ENDFPLIST 150 | DRAW 151 | S -300 600 300 -500 0 1 10 f 152 | X VDD 1 0 700 100 D 50 50 1 1 W 153 | X SCL 10 400 400 100 L 50 50 1 1 B 154 | X VUSB 11 100 700 100 D 50 50 1 1 P 155 | X D- 12 -400 0 100 R 50 50 1 1 B 156 | X D+ 13 -400 100 100 R 50 50 1 1 B 157 | X VSS 14 0 -600 100 U 50 50 1 1 W 158 | X GP0 2 400 -100 100 L 50 50 1 1 B 159 | X GP1 3 400 -200 100 L 50 50 1 1 B 160 | X ~RST 4 -400 500 100 R 50 50 1 1 I 161 | X URx 5 400 200 100 L 50 50 1 1 I 162 | X UTx 6 400 100 100 L 50 50 1 1 O 163 | X GP2 7 400 -300 100 L 50 50 1 1 B 164 | X GP3 8 400 -400 100 L 50 50 1 1 B 165 | X SDA 9 400 500 100 L 50 50 1 1 B 166 | ENDDRAW 167 | ENDDEF 168 | # 169 | # Mechanical_MountingHole 170 | # 171 | DEF Mechanical_MountingHole H 0 40 Y Y 1 F N 172 | F0 "H" 0 200 50 H V C CNN 173 | F1 "Mechanical_MountingHole" 0 125 50 H V C CNN 174 | F2 "" 0 0 50 H I C CNN 175 | F3 "" 0 0 50 H I C CNN 176 | $FPLIST 177 | MountingHole* 178 | $ENDFPLIST 179 | DRAW 180 | C 0 0 50 0 1 50 N 181 | ENDDRAW 182 | ENDDEF 183 | # 184 | # RF_Module_ESP-12F 185 | # 186 | DEF RF_Module_ESP-12F U 0 20 Y Y 1 F N 187 | F0 "U" -500 750 50 H V L CNN 188 | F1 "RF_Module_ESP-12F" 500 750 50 H V R CNN 189 | F2 "RF_Module:ESP-12E" 0 0 50 H I C CNN 190 | F3 "" -350 100 50 H I C CNN 191 | ALIAS ESP-12F 192 | $FPLIST 193 | ESP?12* 194 | $ENDFPLIST 195 | DRAW 196 | S -500 700 500 -600 0 1 10 f 197 | X ~RST 1 -600 600 100 R 50 50 1 1 I 198 | X MISO 10 -600 -100 100 R 50 50 1 1 B 199 | X GPIO9 11 -600 -200 100 R 50 50 1 1 B 200 | X GPIO10 12 -600 -300 100 R 50 50 1 1 B 201 | X MOSI 13 -600 -400 100 R 50 50 1 1 B 202 | X SCLK 14 -600 -500 100 R 50 50 1 1 B 203 | X GND 15 0 -700 100 U 50 50 1 1 W 204 | X GPIO15 16 600 -300 100 L 50 50 1 1 B 205 | X GPIO2 17 600 400 100 L 50 50 1 1 B 206 | X GPIO0 18 600 600 100 L 50 50 1 1 B 207 | X GPIO4 19 600 200 100 L 50 50 1 1 B 208 | X ADC 2 -600 200 100 R 50 50 1 1 I 209 | X GPIO5 20 600 100 100 L 50 50 1 1 B 210 | X GPIO3/RXD 21 600 300 100 L 50 50 1 1 B 211 | X GPIO1/TXD 22 600 500 100 L 50 50 1 1 B 212 | X EN 3 -600 400 100 R 50 50 1 1 I 213 | X GPIO16 4 600 -400 100 L 50 50 1 1 B 214 | X GPIO14 5 600 -200 100 L 50 50 1 1 B 215 | X GPIO12 6 600 0 100 L 50 50 1 1 B 216 | X GPIO13 7 600 -100 100 L 50 50 1 1 B 217 | X VCC 8 0 800 100 D 50 50 1 1 W 218 | X CS0 9 -600 0 100 R 50 50 1 1 I 219 | ENDDRAW 220 | ENDDEF 221 | # 222 | # Regulator_Linear_MCP1700-3302E_TO92 223 | # 224 | DEF Regulator_Linear_MCP1700-3302E_TO92 U 0 10 Y Y 1 F N 225 | F0 "U" -150 -125 50 H V C CNN 226 | F1 "Regulator_Linear_MCP1700-3302E_TO92" 0 -125 50 H V L CNN 227 | F2 "Package_TO_SOT_THT:TO-92_Inline" 0 -200 50 H I C CIN 228 | F3 "" 0 0 50 H I C CNN 229 | ALIAS LM79L12_TO92 LM79L15_TO92 L79L05_TO92 L79L08_TO92 L79L12_TO92 L79L15_TO92 MCP1700-3002E_TO92 MCP1700-1202E_TO92 MCP1700-1802E_TO92 MCP1700-2502E_TO92 MCP1700-2802E_TO92 MCP1700-3302E_TO92 MCP1700-5002E_TO92 230 | $FPLIST 231 | TO?92* 232 | $ENDFPLIST 233 | DRAW 234 | S -200 200 200 -75 0 1 10 f 235 | X GND 1 0 300 100 D 50 50 1 1 W 236 | X VI 2 -300 0 100 R 50 50 1 1 W 237 | X VO 3 300 0 100 L 50 50 1 1 w 238 | ENDDRAW 239 | ENDDEF 240 | # 241 | # pm_25_Plantower-PM2.5 242 | # 243 | DEF pm_25_Plantower-PM2.5 U 0 40 Y Y 1 F N 244 | F0 "U" -200 350 50 H V C CNN 245 | F1 "pm_25_Plantower-PM2.5" 400 -400 50 H V C CNN 246 | F2 "" 0 0 50 H I C CNN 247 | F3 "" 0 0 50 H I C CNN 248 | DRAW 249 | S -250 300 200 -250 0 1 0 N 250 | X NC 1 -350 -200 100 R 50 50 1 1 N 251 | X NC 2 -350 -100 100 R 50 50 1 1 N 252 | X RST 3 -350 100 100 R 50 50 1 1 I 253 | X TX 4 300 -150 100 L 50 50 1 1 I 254 | X RX 5 300 150 100 L 50 50 1 1 I 255 | X SET 6 -350 200 100 R 50 50 1 1 I 256 | X GND 7 0 -350 100 U 50 50 1 1 I 257 | X VCC 8 0 400 100 D 50 50 1 1 I 258 | ENDDRAW 259 | ENDDEF 260 | # 261 | # power_+3.3V 262 | # 263 | DEF power_+3.3V #PWR 0 0 Y Y 1 F P 264 | F0 "#PWR" 0 -150 50 H I C CNN 265 | F1 "power_+3.3V" 0 140 50 H V C CNN 266 | F2 "" 0 0 50 H I C CNN 267 | F3 "" 0 0 50 H I C CNN 268 | ALIAS +3.3V 269 | DRAW 270 | P 2 0 1 0 -30 50 0 100 N 271 | P 2 0 1 0 0 0 0 100 N 272 | P 2 0 1 0 0 100 30 50 N 273 | X +3V3 1 0 0 0 U 50 50 1 1 W N 274 | ENDDRAW 275 | ENDDEF 276 | # 277 | # power_+5V 278 | # 279 | DEF power_+5V #PWR 0 0 Y Y 1 F P 280 | F0 "#PWR" 0 -150 50 H I C CNN 281 | F1 "power_+5V" 0 140 50 H V C CNN 282 | F2 "" 0 0 50 H I C CNN 283 | F3 "" 0 0 50 H I C CNN 284 | DRAW 285 | P 2 0 1 0 -30 50 0 100 N 286 | P 2 0 1 0 0 0 0 100 N 287 | P 2 0 1 0 0 100 30 50 N 288 | X +5V 1 0 0 0 U 50 50 1 1 W N 289 | ENDDRAW 290 | ENDDEF 291 | # 292 | # power_GND 293 | # 294 | DEF power_GND #PWR 0 0 Y Y 1 F P 295 | F0 "#PWR" 0 -250 50 H I C CNN 296 | F1 "power_GND" 0 -150 50 H V C CNN 297 | F2 "" 0 0 50 H I C CNN 298 | F3 "" 0 0 50 H I C CNN 299 | DRAW 300 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 301 | X GND 1 0 0 0 D 50 50 1 1 W N 302 | ENDDRAW 303 | ENDDEF 304 | # 305 | #End Library 306 | -------------------------------------------------------------------------------- /pcb/pm_25-rescue.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /pcb/pm_25-rescue.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # ESP-12F-ESP8266 5 | # 6 | DEF ESP-12F-ESP8266 U 0 40 Y Y 1 F N 7 | F0 "U" 0 -100 50 H V C CNN 8 | F1 "ESP-12F-ESP8266" 0 100 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | ESP-12E 13 | ESP-12E_SMD 14 | $ENDFPLIST 15 | DRAW 16 | S -600 -600 600 600 1 0 0 N 17 | X REST 1 -900 300 300 R 50 50 1 1 I 18 | X GPIO15 10 900 -300 300 L 50 50 1 1 B 19 | X GPIO2 11 900 -200 300 L 50 50 1 1 B 20 | X GPIO0 12 900 -100 300 L 50 50 1 1 B 21 | X GPIO4 13 900 0 300 L 50 50 1 1 B 22 | X GPIO5 14 900 100 300 L 50 50 1 1 B 23 | X RXD 15 900 200 300 L 50 50 1 1 I 24 | X TXD 16 900 300 300 L 50 50 1 1 O 25 | X CS0 17 -250 -900 300 U 50 50 1 1 B 26 | X MISO 18 -150 -900 300 U 50 50 1 1 B 27 | X GPIO9 19 -50 -900 300 U 50 50 1 1 B 28 | X ADC 2 -900 200 300 R 50 50 1 1 P 29 | X GPIO10 20 50 -900 300 U 50 50 1 1 B 30 | X MOSI 21 150 -900 300 U 50 50 1 1 B 31 | X SCLK 22 250 -900 300 U 50 50 1 1 B 32 | X CH_PD 3 -900 100 300 R 50 50 1 1 I 33 | X GPIO16 4 -900 0 300 R 50 50 1 1 B 34 | X GPIO14 5 -900 -100 300 R 50 50 1 1 B 35 | X GPIO12 6 -900 -200 300 R 50 50 1 1 B 36 | X GPIO13 7 -900 -300 300 R 50 50 1 1 B 37 | X VCC 8 -900 -400 300 R 50 50 1 1 W 38 | X GND 9 900 -400 300 L 50 50 1 1 W 39 | ENDDRAW 40 | ENDDEF 41 | # 42 | #End Library 43 | -------------------------------------------------------------------------------- /pcb/pm_25.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /pcb/pm_25.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Plantower-PM2.5 5 | # 6 | DEF Plantower-PM2.5 U 0 40 Y Y 1 F N 7 | F0 "U" -200 350 50 H V C CNN 8 | F1 "Plantower-PM2.5" 400 -400 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | DRAW 12 | S -250 300 200 -250 0 1 0 N 13 | X NC 1 -350 -200 100 R 50 50 1 1 N 14 | X NC 2 -350 -100 100 R 50 50 1 1 N 15 | X RST 3 -350 100 100 R 50 50 1 1 I 16 | X TX 4 300 -150 100 L 50 50 1 1 I 17 | X RX 5 300 150 100 L 50 50 1 1 I 18 | X SET 6 -350 200 100 R 50 50 1 1 I 19 | X GND 7 0 -350 100 U 50 50 1 1 I 20 | X VCC 8 0 400 100 D 50 50 1 1 I 21 | ENDDRAW 22 | ENDDEF 23 | # 24 | # SI7021 25 | # 26 | DEF SI7021 U 0 40 Y Y 1 F N 27 | F0 "U" -200 250 50 H V C CNN 28 | F1 "SI7021" 200 -250 50 H V C CNN 29 | F2 "" 0 0 50 H I C CNN 30 | F3 "" 0 0 50 H I C CNN 31 | DRAW 32 | S -250 200 200 -200 0 1 0 N 33 | X CL 1 -350 -100 100 R 50 50 1 1 I 34 | X DA 2 -350 100 100 R 50 50 1 1 I 35 | X + 3 0 300 100 D 50 50 1 1 I 36 | X - 4 0 -300 100 U 50 50 1 1 I 37 | ENDDRAW 38 | ENDDEF 39 | # 40 | # USBPower 41 | # 42 | DEF USBPower PS 0 40 Y Y 1 F N 43 | F0 "PS" -350 350 50 H V C CNN 44 | F1 "USBPower" 250 -450 50 H V C CNN 45 | F2 "" 0 0 50 H I C CNN 46 | F3 "" 0 0 50 H I C CNN 47 | DRAW 48 | S -250 350 250 -350 0 1 0 N 49 | X VCC 1 0 450 100 D 50 50 1 1 w 50 | X D- 2 -350 100 100 R 50 50 1 1 I 51 | X D+ 3 -350 0 100 R 50 50 1 1 I 52 | X ID 4 -350 -100 100 R 50 50 1 1 I 53 | X GND 5 0 -450 100 U 50 50 1 1 w 54 | ENDDRAW 55 | ENDDEF 56 | # 57 | #End Library 58 | -------------------------------------------------------------------------------- /pcb/pm_25.net2: -------------------------------------------------------------------------------- 1 | (export (version D) 2 | (design 3 | (source /Users/aaron/git/esp8266aq/pcb/pm_25.sch) 4 | (date "Wednesday, March 10, 2021 at 07:53:15 AM") 5 | (tool "Eeschema (5.1.5-0-10_14)") 6 | (sheet (number 1) (name /) (tstamps /) 7 | (title_block 8 | (title "PM-2.5 / Temp Wifi Sensor") 9 | (company) 10 | (rev v04) 11 | (date 2021-03-09) 12 | (source pm_25.sch) 13 | (comment (number 1) (value "")) 14 | (comment (number 2) (value creativecommons.org/licenses/by/4.0)) 15 | (comment (number 3) (value "License: CC BY 4.0")) 16 | (comment (number 4) (value "Author: Aaron Patterson"))))) 17 | (components 18 | (comp (ref U4) 19 | (value PM2.5) 20 | (footprint Connector_Molex:Molex_PicoBlade_53261-0871_1x08-1MP_P1.25mm_Horizontal) 21 | (libsource (lib pm_25) (part Plantower-PM2.5) (description "")) 22 | (sheetpath (names /) (tstamps /)) 23 | (tstamp 5E113090)) 24 | (comp (ref C2) 25 | (value 10uF) 26 | (footprint Capacitor_THT:CP_Radial_D4.0mm_P2.00mm) 27 | (datasheet ~) 28 | (libsource (lib Device) (part CP1) (description "Polarized capacitor, US symbol")) 29 | (sheetpath (names /) (tstamps /)) 30 | (tstamp 5E116234)) 31 | (comp (ref C1) 32 | (value 100nF) 33 | (footprint Capacitor_THT:C_Disc_D4.7mm_W2.5mm_P5.00mm) 34 | (datasheet ~) 35 | (libsource (lib Device) (part C) (description "Unpolarized capacitor")) 36 | (sheetpath (names /) (tstamps /)) 37 | (tstamp 5E11689B)) 38 | (comp (ref U3) 39 | (value ESP-12F) 40 | (footprint RF_Module:ESP-12E) 41 | (libsource (lib RF_Module) (part ESP-12F) (description "802.11 b/g/n Wi-Fi Module")) 42 | (sheetpath (names /) (tstamps /)) 43 | (tstamp 600365AB)) 44 | (comp (ref U2) 45 | (value MCP2221AxP) 46 | (footprint Package_DIP:DIP-14_W7.62mm) 47 | (datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/20005565B.pdf) 48 | (libsource (lib Interface_USB) (part MCP2221AxP) (description "USB to I2C/UART Protocol Converter with GPIO, DIP-14")) 49 | (sheetpath (names /) (tstamps /)) 50 | (tstamp 60039093)) 51 | (comp (ref R1) 52 | (value 10k) 53 | (footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal) 54 | (datasheet ~) 55 | (libsource (lib Device) (part R) (description Resistor)) 56 | (sheetpath (names /) (tstamps /)) 57 | (tstamp 60059B68)) 58 | (comp (ref C3) 59 | (value 47nf) 60 | (footprint Capacitor_THT:C_Disc_D4.7mm_W2.5mm_P5.00mm) 61 | (datasheet ~) 62 | (libsource (lib Device) (part C) (description "Unpolarized capacitor")) 63 | (sheetpath (names /) (tstamps /)) 64 | (tstamp 6005BC47)) 65 | (comp (ref U1) 66 | (value MCP1700) 67 | (footprint Package_TO_SOT_THT:TO-92_Inline) 68 | (datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/20001826D.pdf) 69 | (libsource (lib Regulator_Linear) (part MCP1700-3302E_TO92) (description "250mA Low Quiscent Current LDO, 3.3V output, TO-92")) 70 | (sheetpath (names /) (tstamps /)) 71 | (tstamp 60078EC3)) 72 | (comp (ref J2) 73 | (value header) 74 | (footprint Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical) 75 | (datasheet ~) 76 | (libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)")) 77 | (sheetpath (names /) (tstamps /)) 78 | (tstamp 60093EF5)) 79 | (comp (ref J1) 80 | (value USB_C_Receptacle_USB2.0) 81 | (footprint Connector_USB:USB_C_Receptacle_GCT_USB4085) 82 | (datasheet https://www.usb.org/sites/default/files/documents/usb_type-c.zip) 83 | (libsource (lib Connector) (part USB_C_Receptacle_USB2.0) (description "USB 2.0-only Type-C Receptacle connector")) 84 | (sheetpath (names /) (tstamps /)) 85 | (tstamp 600ACD7F)) 86 | (comp (ref H1) 87 | (value MountingHole) 88 | (footprint MountingHole:MountingHole_2.5mm_Pad_Via) 89 | (datasheet ~) 90 | (libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) 91 | (sheetpath (names /) (tstamps /)) 92 | (tstamp 600B95C9)) 93 | (comp (ref H2) 94 | (value MountingHole) 95 | (footprint MountingHole:MountingHole_2.5mm_Pad_Via) 96 | (datasheet ~) 97 | (libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) 98 | (sheetpath (names /) (tstamps /)) 99 | (tstamp 600B9C28)) 100 | (comp (ref H3) 101 | (value MountingHole) 102 | (footprint MountingHole:MountingHole_2.5mm_Pad_Via) 103 | (datasheet ~) 104 | (libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) 105 | (sheetpath (names /) (tstamps /)) 106 | (tstamp 600BA0A1)) 107 | (comp (ref H4) 108 | (value MountingHole) 109 | (footprint MountingHole:MountingHole_2.5mm_Pad_Via) 110 | (datasheet ~) 111 | (libsource (lib Mechanical) (part MountingHole) (description "Mounting Hole without connection")) 112 | (sheetpath (names /) (tstamps /)) 113 | (tstamp 600BA5D5)) 114 | (comp (ref R2) 115 | (value 10k) 116 | (footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal) 117 | (datasheet ~) 118 | (libsource (lib Device) (part R) (description Resistor)) 119 | (sheetpath (names /) (tstamps /)) 120 | (tstamp 600BB1DB)) 121 | (comp (ref J3) 122 | (value "I2C 3.3v") 123 | (footprint Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical) 124 | (datasheet ~) 125 | (libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)")) 126 | (sheetpath (names /) (tstamps /)) 127 | (tstamp 600889C9)) 128 | (comp (ref J4) 129 | (value "I2C 5v") 130 | (footprint Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical) 131 | (datasheet ~) 132 | (libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)")) 133 | (sheetpath (names /) (tstamps /)) 134 | (tstamp 600F9C93)) 135 | (comp (ref R3) 136 | (value 5.1k) 137 | (footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal) 138 | (datasheet ~) 139 | (libsource (lib Device) (part R) (description Resistor)) 140 | (sheetpath (names /) (tstamps /)) 141 | (tstamp 60483EC3)) 142 | (comp (ref R4) 143 | (value 5.1k) 144 | (footprint Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal) 145 | (datasheet ~) 146 | (libsource (lib Device) (part R) (description Resistor)) 147 | (sheetpath (names /) (tstamps /)) 148 | (tstamp 60484D3B))) 149 | (libparts 150 | (libpart (lib Connector) (part USB_C_Receptacle_USB2.0) 151 | (description "USB 2.0-only Type-C Receptacle connector") 152 | (docs https://www.usb.org/sites/default/files/documents/usb_type-c.zip) 153 | (footprints 154 | (fp USB*C*Receptacle*)) 155 | (fields 156 | (field (name Reference) J) 157 | (field (name Value) USB_C_Receptacle_USB2.0)) 158 | (pins 159 | (pin (num A1) (name GND) (type power_in)) 160 | (pin (num A4) (name VBUS) (type power_in)) 161 | (pin (num A5) (name CC1) (type BiDi)) 162 | (pin (num A6) (name D+) (type BiDi)) 163 | (pin (num A7) (name D-) (type BiDi)) 164 | (pin (num A8) (name SBU1) (type BiDi)) 165 | (pin (num A9) (name VBUS) (type passive)) 166 | (pin (num A12) (name GND) (type passive)) 167 | (pin (num B1) (name GND) (type passive)) 168 | (pin (num B4) (name VBUS) (type passive)) 169 | (pin (num B5) (name CC2) (type BiDi)) 170 | (pin (num B6) (name D+) (type BiDi)) 171 | (pin (num B7) (name D-) (type BiDi)) 172 | (pin (num B8) (name SBU2) (type BiDi)) 173 | (pin (num B9) (name VBUS) (type passive)) 174 | (pin (num B12) (name GND) (type passive)) 175 | (pin (num S1) (name SHIELD) (type passive)))) 176 | (libpart (lib Connector_Generic) (part Conn_01x04) 177 | (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)") 178 | (docs ~) 179 | (footprints 180 | (fp Connector*:*_1x??_*)) 181 | (fields 182 | (field (name Reference) J) 183 | (field (name Value) Conn_01x04)) 184 | (pins 185 | (pin (num 1) (name Pin_1) (type passive)) 186 | (pin (num 2) (name Pin_2) (type passive)) 187 | (pin (num 3) (name Pin_3) (type passive)) 188 | (pin (num 4) (name Pin_4) (type passive)))) 189 | (libpart (lib Device) (part C) 190 | (description "Unpolarized capacitor") 191 | (docs ~) 192 | (footprints 193 | (fp C_*)) 194 | (fields 195 | (field (name Reference) C) 196 | (field (name Value) C)) 197 | (pins 198 | (pin (num 1) (name ~) (type passive)) 199 | (pin (num 2) (name ~) (type passive)))) 200 | (libpart (lib Device) (part CP1) 201 | (description "Polarized capacitor, US symbol") 202 | (docs ~) 203 | (footprints 204 | (fp CP_*)) 205 | (fields 206 | (field (name Reference) C) 207 | (field (name Value) CP1)) 208 | (pins 209 | (pin (num 1) (name ~) (type passive)) 210 | (pin (num 2) (name ~) (type passive)))) 211 | (libpart (lib Device) (part R) 212 | (description Resistor) 213 | (docs ~) 214 | (footprints 215 | (fp R_*)) 216 | (fields 217 | (field (name Reference) R) 218 | (field (name Value) R)) 219 | (pins 220 | (pin (num 1) (name ~) (type passive)) 221 | (pin (num 2) (name ~) (type passive)))) 222 | (libpart (lib Interface_USB) (part MCP2221AxP) 223 | (description "USB to I2C/UART Protocol Converter with GPIO, DIP-14") 224 | (docs http://ww1.microchip.com/downloads/en/DeviceDoc/20005565B.pdf) 225 | (footprints 226 | (fp DIP*W7.62mm*)) 227 | (fields 228 | (field (name Reference) U) 229 | (field (name Value) MCP2221AxP) 230 | (field (name Footprint) Package_DIP:DIP-14_W7.62mm)) 231 | (pins 232 | (pin (num 1) (name VDD) (type power_in)) 233 | (pin (num 2) (name GP0) (type BiDi)) 234 | (pin (num 3) (name GP1) (type BiDi)) 235 | (pin (num 4) (name ~RST) (type input)) 236 | (pin (num 5) (name URx) (type input)) 237 | (pin (num 6) (name UTx) (type output)) 238 | (pin (num 7) (name GP2) (type BiDi)) 239 | (pin (num 8) (name GP3) (type BiDi)) 240 | (pin (num 9) (name SDA) (type BiDi)) 241 | (pin (num 10) (name SCL) (type BiDi)) 242 | (pin (num 11) (name VUSB) (type passive)) 243 | (pin (num 12) (name D-) (type BiDi)) 244 | (pin (num 13) (name D+) (type BiDi)) 245 | (pin (num 14) (name VSS) (type power_in)))) 246 | (libpart (lib Mechanical) (part MountingHole) 247 | (description "Mounting Hole without connection") 248 | (docs ~) 249 | (footprints 250 | (fp MountingHole*)) 251 | (fields 252 | (field (name Reference) H) 253 | (field (name Value) MountingHole))) 254 | (libpart (lib RF_Module) (part ESP-12E) 255 | (aliases 256 | (alias ESP-12F)) 257 | (description "802.11 b/g/n Wi-Fi Module") 258 | (docs http://wiki.ai-thinker.com/_media/esp8266/esp8266_series_modules_user_manual_v1.1.pdf) 259 | (footprints 260 | (fp ESP?12*)) 261 | (fields 262 | (field (name Reference) U) 263 | (field (name Value) ESP-12E) 264 | (field (name Footprint) RF_Module:ESP-12E)) 265 | (pins 266 | (pin (num 1) (name ~RST) (type input)) 267 | (pin (num 2) (name ADC) (type input)) 268 | (pin (num 3) (name EN) (type input)) 269 | (pin (num 4) (name GPIO16) (type BiDi)) 270 | (pin (num 5) (name GPIO14) (type BiDi)) 271 | (pin (num 6) (name GPIO12) (type BiDi)) 272 | (pin (num 7) (name GPIO13) (type BiDi)) 273 | (pin (num 8) (name VCC) (type power_in)) 274 | (pin (num 9) (name CS0) (type input)) 275 | (pin (num 10) (name MISO) (type BiDi)) 276 | (pin (num 11) (name GPIO9) (type BiDi)) 277 | (pin (num 12) (name GPIO10) (type BiDi)) 278 | (pin (num 13) (name MOSI) (type BiDi)) 279 | (pin (num 14) (name SCLK) (type BiDi)) 280 | (pin (num 15) (name GND) (type power_in)) 281 | (pin (num 16) (name GPIO15) (type BiDi)) 282 | (pin (num 17) (name GPIO2) (type BiDi)) 283 | (pin (num 18) (name GPIO0) (type BiDi)) 284 | (pin (num 19) (name GPIO4) (type BiDi)) 285 | (pin (num 20) (name GPIO5) (type BiDi)) 286 | (pin (num 21) (name GPIO3/RXD) (type BiDi)) 287 | (pin (num 22) (name GPIO1/TXD) (type BiDi)))) 288 | (libpart (lib Regulator_Linear) (part LM79L05_TO92) 289 | (aliases 290 | (alias LM79L12_TO92) 291 | (alias LM79L15_TO92) 292 | (alias L79L05_TO92) 293 | (alias L79L08_TO92) 294 | (alias L79L12_TO92) 295 | (alias L79L15_TO92) 296 | (alias MCP1700-3002E_TO92) 297 | (alias MCP1700-1202E_TO92) 298 | (alias MCP1700-1802E_TO92) 299 | (alias MCP1700-2502E_TO92) 300 | (alias MCP1700-2802E_TO92) 301 | (alias MCP1700-3302E_TO92) 302 | (alias MCP1700-5002E_TO92)) 303 | (description "3-Terminal Negative Regulator, -5V, TO-92") 304 | (docs http://www.ti.com/lit/ds/symlink/lm79l.pdf) 305 | (footprints 306 | (fp TO?92*)) 307 | (fields 308 | (field (name Reference) U) 309 | (field (name Value) LM79L05_TO92) 310 | (field (name Footprint) Package_TO_SOT_THT:TO-92_Inline)) 311 | (pins 312 | (pin (num 1) (name GND) (type power_in)) 313 | (pin (num 2) (name VI) (type power_in)) 314 | (pin (num 3) (name VO) (type power_out)))) 315 | (libpart (lib pm_25) (part Plantower-PM2.5) 316 | (fields 317 | (field (name Reference) U) 318 | (field (name Value) Plantower-PM2.5)) 319 | (pins 320 | (pin (num 1) (name NC) (type NotConnected)) 321 | (pin (num 2) (name NC) (type NotConnected)) 322 | (pin (num 3) (name RST) (type input)) 323 | (pin (num 4) (name TX) (type input)) 324 | (pin (num 5) (name RX) (type input)) 325 | (pin (num 6) (name SET) (type input)) 326 | (pin (num 7) (name GND) (type input)) 327 | (pin (num 8) (name VCC) (type input))))) 328 | (libraries 329 | (library (logical Connector) 330 | (uri "/Library/Application Support/kicad/library/Connector.lib")) 331 | (library (logical Connector_Generic) 332 | (uri "/Library/Application Support/kicad/library/Connector_Generic.lib")) 333 | (library (logical Device) 334 | (uri "/Library/Application Support/kicad/library/Device.lib")) 335 | (library (logical Interface_USB) 336 | (uri "/Library/Application Support/kicad/library/Interface_USB.lib")) 337 | (library (logical Mechanical) 338 | (uri "/Library/Application Support/kicad/library/Mechanical.lib")) 339 | (library (logical RF_Module) 340 | (uri "/Library/Application Support/kicad/library/RF_Module.lib")) 341 | (library (logical Regulator_Linear) 342 | (uri "/Library/Application Support/kicad/library/Regulator_Linear.lib")) 343 | (library (logical pm_25) 344 | (uri /Users/aaron/git/esp8266aq/pcb/pm_25.lib))) 345 | (nets 346 | (net (code 1) (name "Net-(U4-Pad1)") 347 | (node (ref U4) (pin 1))) 348 | (net (code 2) (name "Net-(U4-Pad2)") 349 | (node (ref U4) (pin 2))) 350 | (net (code 3) (name "Net-(U4-Pad3)") 351 | (node (ref U4) (pin 3))) 352 | (net (code 4) (name "Net-(U4-Pad6)") 353 | (node (ref U4) (pin 6))) 354 | (net (code 5) (name GND) 355 | (node (ref U4) (pin 7)) 356 | (node (ref J4) (pin 1)) 357 | (node (ref C2) (pin 2)) 358 | (node (ref J3) (pin 1)) 359 | (node (ref C1) (pin 2)) 360 | (node (ref R2) (pin 2)) 361 | (node (ref U3) (pin 15)) 362 | (node (ref J1) (pin S1)) 363 | (node (ref J1) (pin B12)) 364 | (node (ref J1) (pin B1)) 365 | (node (ref J1) (pin A12)) 366 | (node (ref J1) (pin A1)) 367 | (node (ref J2) (pin 3)) 368 | (node (ref R3) (pin 2)) 369 | (node (ref R4) (pin 2)) 370 | (node (ref U2) (pin 14)) 371 | (node (ref U1) (pin 1)) 372 | (node (ref C3) (pin 1))) 373 | (net (code 6) (name +5V) 374 | (node (ref U4) (pin 8)) 375 | (node (ref U1) (pin 2)) 376 | (node (ref J1) (pin A4)) 377 | (node (ref J4) (pin 2)) 378 | (node (ref J1) (pin A9)) 379 | (node (ref R1) (pin 1)) 380 | (node (ref J1) (pin B4)) 381 | (node (ref J1) (pin B9)) 382 | (node (ref U2) (pin 1))) 383 | (net (code 7) (name /RST) 384 | (node (ref U3) (pin 1)) 385 | (node (ref U2) (pin 3))) 386 | (net (code 8) (name "Net-(U3-Pad10)") 387 | (node (ref U3) (pin 10))) 388 | (net (code 9) (name "Net-(U3-Pad11)") 389 | (node (ref U3) (pin 11))) 390 | (net (code 10) (name "Net-(U3-Pad12)") 391 | (node (ref U3) (pin 12))) 392 | (net (code 11) (name "Net-(U3-Pad13)") 393 | (node (ref U3) (pin 13))) 394 | (net (code 12) (name "Net-(U3-Pad14)") 395 | (node (ref U3) (pin 14))) 396 | (net (code 13) (name "Net-(U3-Pad17)") 397 | (node (ref U3) (pin 17))) 398 | (net (code 14) (name "Net-(U3-Pad2)") 399 | (node (ref U3) (pin 2))) 400 | (net (code 15) (name "Net-(U2-Pad5)") 401 | (node (ref U2) (pin 5)) 402 | (node (ref U3) (pin 22))) 403 | (net (code 16) (name +3V3) 404 | (node (ref C1) (pin 1)) 405 | (node (ref J3) (pin 2)) 406 | (node (ref U3) (pin 8)) 407 | (node (ref C2) (pin 1)) 408 | (node (ref U1) (pin 3)) 409 | (node (ref J2) (pin 4)) 410 | (node (ref U3) (pin 3))) 411 | (net (code 17) (name "Net-(U3-Pad4)") 412 | (node (ref U3) (pin 4))) 413 | (net (code 18) (name "Net-(U2-Pad7)") 414 | (node (ref U3) (pin 5)) 415 | (node (ref U2) (pin 7))) 416 | (net (code 19) (name "Net-(U2-Pad8)") 417 | (node (ref U3) (pin 6)) 418 | (node (ref U2) (pin 8))) 419 | (net (code 20) (name "Net-(U3-Pad7)") 420 | (node (ref U4) (pin 4)) 421 | (node (ref U3) (pin 7))) 422 | (net (code 21) (name "Net-(U3-Pad9)") 423 | (node (ref U3) (pin 9))) 424 | (net (code 22) (name "Net-(U2-Pad10)") 425 | (node (ref U2) (pin 10))) 426 | (net (code 23) (name /D-) 427 | (node (ref U2) (pin 12)) 428 | (node (ref J1) (pin B7)) 429 | (node (ref J1) (pin A7))) 430 | (net (code 24) (name /D+) 431 | (node (ref U2) (pin 13)) 432 | (node (ref J1) (pin B6)) 433 | (node (ref J1) (pin A6))) 434 | (net (code 25) (name /FLASH) 435 | (node (ref U3) (pin 18)) 436 | (node (ref U2) (pin 2))) 437 | (net (code 26) (name "Net-(U2-Pad6)") 438 | (node (ref U3) (pin 21)) 439 | (node (ref U2) (pin 6))) 440 | (net (code 27) (name "Net-(U2-Pad9)") 441 | (node (ref U2) (pin 9))) 442 | (net (code 28) (name "Net-(R1-Pad2)") 443 | (node (ref U2) (pin 4)) 444 | (node (ref R1) (pin 2))) 445 | (net (code 29) (name "Net-(C3-Pad2)") 446 | (node (ref U2) (pin 11)) 447 | (node (ref C3) (pin 2))) 448 | (net (code 30) (name /CC1) 449 | (node (ref J1) (pin A5)) 450 | (node (ref R3) (pin 1))) 451 | (net (code 31) (name "Net-(J1-PadA8)") 452 | (node (ref J1) (pin A8))) 453 | (net (code 32) (name /CC2) 454 | (node (ref J1) (pin B5)) 455 | (node (ref R4) (pin 1))) 456 | (net (code 33) (name "Net-(J1-PadB8)") 457 | (node (ref J1) (pin B8))) 458 | (net (code 34) (name "Net-(R2-Pad1)") 459 | (node (ref R2) (pin 1)) 460 | (node (ref U4) (pin 5)) 461 | (node (ref U3) (pin 16))) 462 | (net (code 35) (name /SDA) 463 | (node (ref J4) (pin 3)) 464 | (node (ref J3) (pin 3)) 465 | (node (ref J2) (pin 1)) 466 | (node (ref U3) (pin 19))) 467 | (net (code 36) (name /SCL) 468 | (node (ref J3) (pin 4)) 469 | (node (ref J2) (pin 2)) 470 | (node (ref J4) (pin 4)) 471 | (node (ref U3) (pin 20))))) -------------------------------------------------------------------------------- /pcb/pm_25.pretty/SI7021Breakout.kicad_mod: -------------------------------------------------------------------------------- 1 | (module SI7021Breakout (layer F.Cu) (tedit 5E112258) 2 | (descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row") 3 | (tags "Through hole pin header THT 1x04 2.54mm single row") 4 | (fp_text reference REF** (at -6.096 -6.14) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value SI7021Breakout (at -6.096 6.14) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start -6.731 -5.08) (end -4.826 -5.08) (layer F.Fab) (width 0.1)) 11 | (fp_line (start -4.826 -5.08) (end -4.826 5.08) (layer F.Fab) (width 0.1)) 12 | (fp_line (start -4.826 5.08) (end -7.366 5.08) (layer F.Fab) (width 0.1)) 13 | (fp_line (start -7.366 5.08) (end -7.366 -4.445) (layer F.Fab) (width 0.1)) 14 | (fp_line (start -7.366 -4.445) (end -6.731 -5.08) (layer F.Fab) (width 0.1)) 15 | (fp_line (start -7.426 5.14) (end -4.766 5.14) (layer F.SilkS) (width 0.12)) 16 | (fp_line (start -7.426 -2.54) (end -7.426 5.14) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start -4.766 -2.54) (end -4.766 5.14) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start -7.426 -2.54) (end -4.766 -2.54) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start -7.426 -3.81) (end -7.426 -5.14) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start -7.426 -5.14) (end -6.096 -5.14) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -7.896 -5.61) (end -7.896 5.59) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -7.896 5.59) (end -4.296 5.59) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start -4.296 5.59) (end -4.296 -5.61) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start -4.296 -5.61) (end -7.896 -5.61) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at -6.096 0 90) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (fp_line (start 8.255 -8.255) (end 8.255 8.255) (layer F.SilkS) (width 0.12)) 29 | (fp_line (start -8.255 -8.255) (end 8.255 -8.255) (layer F.SilkS) (width 0.12)) 30 | (fp_line (start -8.255 8.255) (end 8.255 8.255) (layer F.SilkS) (width 0.12)) 31 | (fp_line (start -8.255 -8.255) (end -8.255 8.255) (layer F.SilkS) (width 0.12)) 32 | (pad 4 thru_hole rect (at -6.096 -3.81) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 33 | (pad 3 thru_hole oval (at -6.096 -1.27) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 34 | (pad 2 thru_hole oval (at -6.096 1.27) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 35 | (pad 1 thru_hole oval (at -6.096 3.81) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 36 | (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Vertical.wrl 37 | (at (xyz 0 0 0)) 38 | (scale (xyz 1 1 1)) 39 | (rotate (xyz 0 0 0)) 40 | ) 41 | ) 42 | -------------------------------------------------------------------------------- /pcb/pm_25.pretty/USBBreakout.kicad_mod: -------------------------------------------------------------------------------- 1 | (module USBBreakout (layer F.Cu) (tedit 5E1124F6) 2 | (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") 3 | (tags "Through hole pin header THT 1x05 2.54mm single row") 4 | (fp_text reference REF** (at 1.524 -7.366) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value USBBreakout (at 1.778 5.588) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start -5.969 -6.35) (end -4.064 -6.35) (layer F.Fab) (width 0.1)) 11 | (fp_line (start -4.064 -6.35) (end -4.064 6.35) (layer F.Fab) (width 0.1)) 12 | (fp_line (start -4.064 6.35) (end -6.604 6.35) (layer F.Fab) (width 0.1)) 13 | (fp_line (start -6.604 6.35) (end -6.604 -5.715) (layer F.Fab) (width 0.1)) 14 | (fp_line (start -6.604 -5.715) (end -5.969 -6.35) (layer F.Fab) (width 0.1)) 15 | (fp_line (start -6.664 6.41) (end -4.004 6.41) (layer F.SilkS) (width 0.12)) 16 | (fp_line (start -6.664 -3.81) (end -6.664 6.41) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start -4.004 -3.81) (end -4.004 6.41) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start -6.664 -3.81) (end -4.004 -3.81) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start -6.664 -5.08) (end -6.664 -6.41) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start -6.664 -6.41) (end -5.334 -6.41) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -7.134 -6.88) (end -7.134 6.87) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -7.134 6.87) (end -3.534 6.87) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start -3.534 6.87) (end -3.534 -6.88) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start -3.534 -6.88) (end -7.134 -6.88) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at -5.334 0 90) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (fp_line (start -7.112 -6.35) (end 7.112 -6.35) (layer F.SilkS) (width 0.12)) 29 | (fp_line (start -7.112 6.35) (end 7.112 6.35) (layer F.SilkS) (width 0.12)) 30 | (fp_line (start 7.112 -6.35) (end 7.112 6.35) (layer F.SilkS) (width 0.12)) 31 | (pad 5 thru_hole rect (at -5.334 -5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 32 | (pad 4 thru_hole oval (at -5.334 -2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 33 | (pad 3 thru_hole oval (at -5.334 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 34 | (pad 2 thru_hole oval (at -5.334 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 35 | (pad 1 thru_hole oval (at -5.334 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) 36 | (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl 37 | (at (xyz 0 0 0)) 38 | (scale (xyz 1 1 1)) 39 | (rotate (xyz 0 0 0)) 40 | ) 41 | ) 42 | -------------------------------------------------------------------------------- /pcb/pm_25.pro: -------------------------------------------------------------------------------- 1 | update=Saturday, January 04, 2020 at 04:52:46 PM 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [cvpcb] 9 | version=1 10 | NetIExt=net 11 | [eeschema] 12 | version=1 13 | LibDir= 14 | [eeschema/libraries] 15 | [schematic_editor] 16 | version=1 17 | PageLayoutDescrFile= 18 | PlotDirectoryName= 19 | SubpartIdSeparator=0 20 | SubpartFirstId=65 21 | NetFmtName=Pcbnew 22 | SpiceAjustPassiveValues=0 23 | LabSize=50 24 | ERC_TestSimilarLabels=1 25 | [pcbnew] 26 | version=1 27 | PageLayoutDescrFile= 28 | LastNetListRead=pm_25.net 29 | CopperLayerCount=2 30 | BoardThickness=1.6 31 | AllowMicroVias=0 32 | AllowBlindVias=0 33 | RequireCourtyardDefinitions=0 34 | ProhibitOverlappingCourtyards=1 35 | MinTrackWidth=0.2 36 | MinViaDiameter=0.4 37 | MinViaDrill=0.3 38 | MinMicroViaDiameter=0.2 39 | MinMicroViaDrill=0.09999999999999999 40 | MinHoleToHole=0.25 41 | TrackWidth1=0.25 42 | TrackWidth2=0.762 43 | ViaDiameter1=0.8 44 | ViaDrill1=0.4 45 | dPairWidth1=0.2 46 | dPairGap1=0.25 47 | dPairViaGap1=0.25 48 | SilkLineWidth=0.12 49 | SilkTextSizeV=1 50 | SilkTextSizeH=1 51 | SilkTextSizeThickness=0.15 52 | SilkTextItalic=0 53 | SilkTextUpright=1 54 | CopperLineWidth=0.2 55 | CopperTextSizeV=1.5 56 | CopperTextSizeH=1.5 57 | CopperTextThickness=0.3 58 | CopperTextItalic=0 59 | CopperTextUpright=1 60 | EdgeCutLineWidth=0.05 61 | CourtyardLineWidth=0.05 62 | OthersLineWidth=0.15 63 | OthersTextSizeV=1 64 | OthersTextSizeH=1 65 | OthersTextSizeThickness=0.15 66 | OthersTextItalic=0 67 | OthersTextUpright=1 68 | SolderMaskClearance=0.051 69 | SolderMaskMinWidth=0.25 70 | SolderPasteClearance=0 71 | SolderPasteRatio=-0 72 | [pcbnew/Layer.F.Cu] 73 | Name=F.Cu 74 | Type=0 75 | Enabled=1 76 | [pcbnew/Layer.In1.Cu] 77 | Name=In1.Cu 78 | Type=0 79 | Enabled=0 80 | [pcbnew/Layer.In2.Cu] 81 | Name=In2.Cu 82 | Type=0 83 | Enabled=0 84 | [pcbnew/Layer.In3.Cu] 85 | Name=In3.Cu 86 | Type=0 87 | Enabled=0 88 | [pcbnew/Layer.In4.Cu] 89 | Name=In4.Cu 90 | Type=0 91 | Enabled=0 92 | [pcbnew/Layer.In5.Cu] 93 | Name=In5.Cu 94 | Type=0 95 | Enabled=0 96 | [pcbnew/Layer.In6.Cu] 97 | Name=In6.Cu 98 | Type=0 99 | Enabled=0 100 | [pcbnew/Layer.In7.Cu] 101 | Name=In7.Cu 102 | Type=0 103 | Enabled=0 104 | [pcbnew/Layer.In8.Cu] 105 | Name=In8.Cu 106 | Type=0 107 | Enabled=0 108 | [pcbnew/Layer.In9.Cu] 109 | Name=In9.Cu 110 | Type=0 111 | Enabled=0 112 | [pcbnew/Layer.In10.Cu] 113 | Name=In10.Cu 114 | Type=0 115 | Enabled=0 116 | [pcbnew/Layer.In11.Cu] 117 | Name=In11.Cu 118 | Type=0 119 | Enabled=0 120 | [pcbnew/Layer.In12.Cu] 121 | Name=In12.Cu 122 | Type=0 123 | Enabled=0 124 | [pcbnew/Layer.In13.Cu] 125 | Name=In13.Cu 126 | Type=0 127 | Enabled=0 128 | [pcbnew/Layer.In14.Cu] 129 | Name=In14.Cu 130 | Type=0 131 | Enabled=0 132 | [pcbnew/Layer.In15.Cu] 133 | Name=In15.Cu 134 | Type=0 135 | Enabled=0 136 | [pcbnew/Layer.In16.Cu] 137 | Name=In16.Cu 138 | Type=0 139 | Enabled=0 140 | [pcbnew/Layer.In17.Cu] 141 | Name=In17.Cu 142 | Type=0 143 | Enabled=0 144 | [pcbnew/Layer.In18.Cu] 145 | Name=In18.Cu 146 | Type=0 147 | Enabled=0 148 | [pcbnew/Layer.In19.Cu] 149 | Name=In19.Cu 150 | Type=0 151 | Enabled=0 152 | [pcbnew/Layer.In20.Cu] 153 | Name=In20.Cu 154 | Type=0 155 | Enabled=0 156 | [pcbnew/Layer.In21.Cu] 157 | Name=In21.Cu 158 | Type=0 159 | Enabled=0 160 | [pcbnew/Layer.In22.Cu] 161 | Name=In22.Cu 162 | Type=0 163 | Enabled=0 164 | [pcbnew/Layer.In23.Cu] 165 | Name=In23.Cu 166 | Type=0 167 | Enabled=0 168 | [pcbnew/Layer.In24.Cu] 169 | Name=In24.Cu 170 | Type=0 171 | Enabled=0 172 | [pcbnew/Layer.In25.Cu] 173 | Name=In25.Cu 174 | Type=0 175 | Enabled=0 176 | [pcbnew/Layer.In26.Cu] 177 | Name=In26.Cu 178 | Type=0 179 | Enabled=0 180 | [pcbnew/Layer.In27.Cu] 181 | Name=In27.Cu 182 | Type=0 183 | Enabled=0 184 | [pcbnew/Layer.In28.Cu] 185 | Name=In28.Cu 186 | Type=0 187 | Enabled=0 188 | [pcbnew/Layer.In29.Cu] 189 | Name=In29.Cu 190 | Type=0 191 | Enabled=0 192 | [pcbnew/Layer.In30.Cu] 193 | Name=In30.Cu 194 | Type=0 195 | Enabled=0 196 | [pcbnew/Layer.B.Cu] 197 | Name=B.Cu 198 | Type=0 199 | Enabled=1 200 | [pcbnew/Layer.B.Adhes] 201 | Enabled=1 202 | [pcbnew/Layer.F.Adhes] 203 | Enabled=1 204 | [pcbnew/Layer.B.Paste] 205 | Enabled=1 206 | [pcbnew/Layer.F.Paste] 207 | Enabled=1 208 | [pcbnew/Layer.B.SilkS] 209 | Enabled=1 210 | [pcbnew/Layer.F.SilkS] 211 | Enabled=1 212 | [pcbnew/Layer.B.Mask] 213 | Enabled=1 214 | [pcbnew/Layer.F.Mask] 215 | Enabled=1 216 | [pcbnew/Layer.Dwgs.User] 217 | Enabled=1 218 | [pcbnew/Layer.Cmts.User] 219 | Enabled=1 220 | [pcbnew/Layer.Eco1.User] 221 | Enabled=1 222 | [pcbnew/Layer.Eco2.User] 223 | Enabled=1 224 | [pcbnew/Layer.Edge.Cuts] 225 | Enabled=1 226 | [pcbnew/Layer.Margin] 227 | Enabled=1 228 | [pcbnew/Layer.B.CrtYd] 229 | Enabled=1 230 | [pcbnew/Layer.F.CrtYd] 231 | Enabled=1 232 | [pcbnew/Layer.B.Fab] 233 | Enabled=1 234 | [pcbnew/Layer.F.Fab] 235 | Enabled=1 236 | [pcbnew/Layer.Rescue] 237 | Enabled=0 238 | [pcbnew/Netclasses] 239 | [pcbnew/Netclasses/Default] 240 | Name=Default 241 | Clearance=0.2 242 | TrackWidth=0.25 243 | ViaDiameter=0.8 244 | ViaDrill=0.4 245 | uViaDiameter=0.3 246 | uViaDrill=0.1 247 | dPairWidth=0.2 248 | dPairGap=0.25 249 | dPairViaGap=0.25 250 | -------------------------------------------------------------------------------- /pcb/pm_25.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "PM-2.5 / Temp Wifi Sensor" 8 | Date "2021-03-09" 9 | Rev "v04" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "creativecommons.org/licenses/by/4.0" 13 | Comment3 "License: CC BY 4.0" 14 | Comment4 "Author: Aaron Patterson" 15 | $EndDescr 16 | $Comp 17 | L pm_25:Plantower-PM2.5 U4 18 | U 1 1 5E113090 19 | P 7250 2750 20 | F 0 "U4" H 7225 3331 50 0000 C CNN 21 | F 1 "PM2.5" H 7225 3240 50 0000 C CNN 22 | F 2 "Connector_Molex:Molex_PicoBlade_53261-0871_1x08-1MP_P1.25mm_Horizontal" H 7250 2750 50 0001 C CNN 23 | F 3 "" H 7250 2750 50 0001 C CNN 24 | 1 7250 2750 25 | 1 0 0 -1 26 | $EndComp 27 | $Comp 28 | L Device:CP1 C2 29 | U 1 1 5E116234 30 | P 3950 5050 31 | F 0 "C2" H 4065 5096 50 0000 L CNN 32 | F 1 "10uF" H 4065 5005 50 0000 L CNN 33 | F 2 "Capacitor_THT:CP_Radial_D4.0mm_P2.00mm" H 3950 5050 50 0001 C CNN 34 | F 3 "~" H 3950 5050 50 0001 C CNN 35 | 1 3950 5050 36 | 1 0 0 -1 37 | $EndComp 38 | $Comp 39 | L Device:C C1 40 | U 1 1 5E11689B 41 | P 3350 5050 42 | F 0 "C1" H 3465 5096 50 0000 L CNN 43 | F 1 "100nF" H 3465 5005 50 0000 L CNN 44 | F 2 "Capacitor_THT:C_Disc_D4.7mm_W2.5mm_P5.00mm" H 3388 4900 50 0001 C CNN 45 | F 3 "~" H 3350 5050 50 0001 C CNN 46 | 1 3350 5050 47 | 1 0 0 -1 48 | $EndComp 49 | $Comp 50 | L power:GND #PWR011 51 | U 1 1 5E11C1F5 52 | P 7250 3150 53 | F 0 "#PWR011" H 7250 2900 50 0001 C CNN 54 | F 1 "GND" H 7255 2977 50 0000 C CNN 55 | F 2 "" H 7250 3150 50 0001 C CNN 56 | F 3 "" H 7250 3150 50 0001 C CNN 57 | 1 7250 3150 58 | 1 0 0 -1 59 | $EndComp 60 | $Comp 61 | L power:+5V #PWR010 62 | U 1 1 5E11E2EC 63 | P 7250 2050 64 | F 0 "#PWR010" H 7250 1900 50 0001 C CNN 65 | F 1 "+5V" H 7265 2223 50 0000 C CNN 66 | F 2 "" H 7250 2050 50 0001 C CNN 67 | F 3 "" H 7250 2050 50 0001 C CNN 68 | 1 7250 2050 69 | 1 0 0 -1 70 | $EndComp 71 | Wire Wire Line 72 | 7250 2050 7250 2350 73 | Wire Wire Line 74 | 7250 3100 7250 3150 75 | $Comp 76 | L RF_Module:ESP-12F U3 77 | U 1 1 600365AB 78 | P 8950 4200 79 | F 0 "U3" H 8950 4965 50 0000 C CNN 80 | F 1 "ESP-12F" H 8950 4874 50 0000 C CNN 81 | F 2 "RF_Module:ESP-12E" H 8950 4200 50 0001 C CNN 82 | F 3 "" H 8950 4200 50 0001 C CNN 83 | 1 8950 4200 84 | 1 0 0 -1 85 | $EndComp 86 | $Comp 87 | L Interface_USB:MCP2221AxP U2 88 | U 1 1 60039093 89 | P 5850 4200 90 | F 0 "U2" H 5850 3511 50 0000 C CNN 91 | F 1 "MCP2221AxP" H 5850 3420 50 0000 C CNN 92 | F 2 "Package_DIP:DIP-14_W7.62mm" H 5850 5200 50 0001 C CNN 93 | F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20005565B.pdf" H 5850 4900 50 0001 C CNN 94 | 1 5850 4200 95 | 1 0 0 -1 96 | $EndComp 97 | Wire Wire Line 98 | 6250 4100 7100 4100 99 | Wire Wire Line 100 | 7100 4100 7100 5450 101 | Wire Wire Line 102 | 7100 5450 10150 5450 103 | Wire Wire Line 104 | 10150 5450 10150 4000 105 | Wire Wire Line 106 | 10150 4000 9850 4000 107 | Wire Wire Line 108 | 6250 4000 6900 4000 109 | Wire Wire Line 110 | 6900 4000 6900 5850 111 | Wire Wire Line 112 | 6900 5850 10000 5850 113 | Text Label 8350 3600 2 50 ~ 0 114 | RST 115 | Text Label 6250 4400 0 50 ~ 0 116 | RST 117 | Text Label 6250 4300 0 50 ~ 0 118 | FLASH 119 | Text Label 9550 3600 0 50 ~ 0 120 | FLASH 121 | $Comp 122 | L power:+3.3V #PWR0101 123 | U 1 1 6004A0C6 124 | P 8950 3400 125 | F 0 "#PWR0101" H 8950 3250 50 0001 C CNN 126 | F 1 "+3.3V" H 8965 3573 50 0000 C CNN 127 | F 2 "" H 8950 3400 50 0001 C CNN 128 | F 3 "" H 8950 3400 50 0001 C CNN 129 | 1 8950 3400 130 | 1 0 0 -1 131 | $EndComp 132 | $Comp 133 | L power:GND #PWR0102 134 | U 1 1 6004C47E 135 | P 8950 4900 136 | F 0 "#PWR0102" H 8950 4650 50 0001 C CNN 137 | F 1 "GND" H 8955 4727 50 0000 C CNN 138 | F 2 "" H 8950 4900 50 0001 C CNN 139 | F 3 "" H 8950 4900 50 0001 C CNN 140 | 1 8950 4900 141 | 1 0 0 -1 142 | $EndComp 143 | Text Label 5450 4100 2 50 ~ 0 144 | D+ 145 | Text Label 5450 4200 2 50 ~ 0 146 | D- 147 | NoConn ~ 6250 3700 148 | NoConn ~ 6250 3800 149 | $Comp 150 | L power:+5V #PWR0103 151 | U 1 1 60055CF3 152 | P 5850 3250 153 | F 0 "#PWR0103" H 5850 3100 50 0001 C CNN 154 | F 1 "+5V" H 5865 3423 50 0000 C CNN 155 | F 2 "" H 5850 3250 50 0001 C CNN 156 | F 3 "" H 5850 3250 50 0001 C CNN 157 | 1 5850 3250 158 | 1 0 0 -1 159 | $EndComp 160 | Wire Wire Line 161 | 5850 3500 5850 3400 162 | $Comp 163 | L Device:R R1 164 | U 1 1 60059B68 165 | P 5250 3550 166 | F 0 "R1" H 5320 3596 50 0000 L CNN 167 | F 1 "10k" H 5320 3505 50 0000 L CNN 168 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 5180 3550 50 0001 C CNN 169 | F 3 "~" H 5250 3550 50 0001 C CNN 170 | 1 5250 3550 171 | 1 0 0 -1 172 | $EndComp 173 | Wire Wire Line 174 | 5450 3700 5250 3700 175 | Wire Wire Line 176 | 5250 3400 5850 3400 177 | Connection ~ 5850 3400 178 | Wire Wire Line 179 | 5850 3400 5850 3250 180 | $Comp 181 | L Device:C C3 182 | U 1 1 6005BC47 183 | P 6100 3400 184 | F 0 "C3" V 5848 3400 50 0000 C CNN 185 | F 1 "47nf" V 5939 3400 50 0000 C CNN 186 | F 2 "Capacitor_THT:C_Disc_D4.7mm_W2.5mm_P5.00mm" H 6138 3250 50 0001 C CNN 187 | F 3 "~" H 6100 3400 50 0001 C CNN 188 | 1 6100 3400 189 | 0 1 1 0 190 | $EndComp 191 | Wire Wire Line 192 | 5950 3500 5950 3400 193 | $Comp 194 | L power:GND #PWR0104 195 | U 1 1 6005D7D0 196 | P 6450 3400 197 | F 0 "#PWR0104" H 6450 3150 50 0001 C CNN 198 | F 1 "GND" H 6455 3227 50 0000 C CNN 199 | F 2 "" H 6450 3400 50 0001 C CNN 200 | F 3 "" H 6450 3400 50 0001 C CNN 201 | 1 6450 3400 202 | 1 0 0 -1 203 | $EndComp 204 | Wire Wire Line 205 | 6250 3400 6450 3400 206 | $Comp 207 | L power:GND #PWR0105 208 | U 1 1 6005E546 209 | P 5850 5100 210 | F 0 "#PWR0105" H 5850 4850 50 0001 C CNN 211 | F 1 "GND" H 5855 4927 50 0000 C CNN 212 | F 2 "" H 5850 5100 50 0001 C CNN 213 | F 3 "" H 5850 5100 50 0001 C CNN 214 | 1 5850 5100 215 | 1 0 0 -1 216 | $EndComp 217 | Wire Wire Line 218 | 5850 5100 5850 4800 219 | Wire Wire Line 220 | 10450 4500 10450 2600 221 | Wire Wire Line 222 | 10450 2600 7550 2600 223 | $Comp 224 | L Regulator_Linear:MCP1700-3302E_TO92 U1 225 | U 1 1 60078EC3 226 | P 4400 2750 227 | F 0 "U1" H 4400 2508 50 0000 C CNN 228 | F 1 "MCP1700" H 4400 2599 50 0000 C CNN 229 | F 2 "Package_TO_SOT_THT:TO-92_Inline" H 4400 2550 50 0001 C CIN 230 | F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20001826D.pdf" H 4400 2750 50 0001 C CNN 231 | 1 4400 2750 232 | -1 0 0 1 233 | $EndComp 234 | $Comp 235 | L power:+5V #PWR0106 236 | U 1 1 60079FF8 237 | P 4700 2400 238 | F 0 "#PWR0106" H 4700 2250 50 0001 C CNN 239 | F 1 "+5V" H 4715 2573 50 0000 C CNN 240 | F 2 "" H 4700 2400 50 0001 C CNN 241 | F 3 "" H 4700 2400 50 0001 C CNN 242 | 1 4700 2400 243 | 1 0 0 -1 244 | $EndComp 245 | $Comp 246 | L power:+3.3V #PWR0107 247 | U 1 1 6007A610 248 | P 4100 2400 249 | F 0 "#PWR0107" H 4100 2250 50 0001 C CNN 250 | F 1 "+3.3V" H 4115 2573 50 0000 C CNN 251 | F 2 "" H 4100 2400 50 0001 C CNN 252 | F 3 "" H 4100 2400 50 0001 C CNN 253 | 1 4100 2400 254 | 1 0 0 -1 255 | $EndComp 256 | Wire Wire Line 257 | 4100 2750 4100 2400 258 | Wire Wire Line 259 | 4700 2750 4700 2400 260 | $Comp 261 | L power:GND #PWR0108 262 | U 1 1 6007DBDF 263 | P 4400 3200 264 | F 0 "#PWR0108" H 4400 2950 50 0001 C CNN 265 | F 1 "GND" H 4405 3027 50 0000 C CNN 266 | F 2 "" H 4400 3200 50 0001 C CNN 267 | F 3 "" H 4400 3200 50 0001 C CNN 268 | 1 4400 3200 269 | 1 0 0 -1 270 | $EndComp 271 | Wire Wire Line 272 | 4400 3050 4400 3200 273 | $Comp 274 | L power:+3.3V #PWR0109 275 | U 1 1 60084B5A 276 | P 3950 4900 277 | F 0 "#PWR0109" H 3950 4750 50 0001 C CNN 278 | F 1 "+3.3V" H 3965 5073 50 0000 C CNN 279 | F 2 "" H 3950 4900 50 0001 C CNN 280 | F 3 "" H 3950 4900 50 0001 C CNN 281 | 1 3950 4900 282 | 1 0 0 -1 283 | $EndComp 284 | $Comp 285 | L power:+3.3V #PWR0110 286 | U 1 1 6008507F 287 | P 3350 4900 288 | F 0 "#PWR0110" H 3350 4750 50 0001 C CNN 289 | F 1 "+3.3V" H 3365 5073 50 0000 C CNN 290 | F 2 "" H 3350 4900 50 0001 C CNN 291 | F 3 "" H 3350 4900 50 0001 C CNN 292 | 1 3350 4900 293 | 1 0 0 -1 294 | $EndComp 295 | $Comp 296 | L power:GND #PWR0111 297 | U 1 1 600856A1 298 | P 3950 5200 299 | F 0 "#PWR0111" H 3950 4950 50 0001 C CNN 300 | F 1 "GND" H 3955 5027 50 0000 C CNN 301 | F 2 "" H 3950 5200 50 0001 C CNN 302 | F 3 "" H 3950 5200 50 0001 C CNN 303 | 1 3950 5200 304 | 1 0 0 -1 305 | $EndComp 306 | $Comp 307 | L power:GND #PWR0112 308 | U 1 1 60085D70 309 | P 3350 5200 310 | F 0 "#PWR0112" H 3350 4950 50 0001 C CNN 311 | F 1 "GND" H 3355 5027 50 0000 C CNN 312 | F 2 "" H 3350 5200 50 0001 C CNN 313 | F 3 "" H 3350 5200 50 0001 C CNN 314 | 1 3350 5200 315 | 1 0 0 -1 316 | $EndComp 317 | $Comp 318 | L power:GND #PWR0113 319 | U 1 1 6008C9C3 320 | P 5050 6300 321 | F 0 "#PWR0113" H 5050 6050 50 0001 C CNN 322 | F 1 "GND" H 5055 6127 50 0000 C CNN 323 | F 2 "" H 5050 6300 50 0001 C CNN 324 | F 3 "" H 5050 6300 50 0001 C CNN 325 | 1 5050 6300 326 | 1 0 0 -1 327 | $EndComp 328 | $Comp 329 | L power:+3.3V #PWR0114 330 | U 1 1 6008D0A0 331 | P 5300 6300 332 | F 0 "#PWR0114" H 5300 6150 50 0001 C CNN 333 | F 1 "+3.3V" H 5315 6473 50 0000 C CNN 334 | F 2 "" H 5300 6300 50 0001 C CNN 335 | F 3 "" H 5300 6300 50 0001 C CNN 336 | 1 5300 6300 337 | -1 0 0 1 338 | $EndComp 339 | Text Label 5400 6300 3 50 ~ 0 340 | SDA 341 | Text Label 5500 6300 3 50 ~ 0 342 | SCL 343 | Text Label 9550 4000 0 50 ~ 0 344 | SDA 345 | Text Label 9550 4100 0 50 ~ 0 346 | SCL 347 | $Comp 348 | L Connector_Generic:Conn_01x04 J2 349 | U 1 1 60093EF5 350 | P 3700 6150 351 | F 0 "J2" V 3664 5862 50 0000 R CNN 352 | F 1 "header" V 3573 5862 50 0000 R CNN 353 | F 2 "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" H 3700 6150 50 0001 C CNN 354 | F 3 "~" H 3700 6150 50 0001 C CNN 355 | 1 3700 6150 356 | 0 -1 -1 0 357 | $EndComp 358 | $Comp 359 | L power:+3.3V #PWR0115 360 | U 1 1 60097848 361 | P 4050 6450 362 | F 0 "#PWR0115" H 4050 6300 50 0001 C CNN 363 | F 1 "+3.3V" H 4065 6623 50 0000 C CNN 364 | F 2 "" H 4050 6450 50 0001 C CNN 365 | F 3 "" H 4050 6450 50 0001 C CNN 366 | 1 4050 6450 367 | -1 0 0 1 368 | $EndComp 369 | $Comp 370 | L power:GND #PWR0116 371 | U 1 1 60098F93 372 | P 3800 6350 373 | F 0 "#PWR0116" H 3800 6100 50 0001 C CNN 374 | F 1 "GND" H 3805 6177 50 0000 C CNN 375 | F 2 "" H 3800 6350 50 0001 C CNN 376 | F 3 "" H 3800 6350 50 0001 C CNN 377 | 1 3800 6350 378 | 1 0 0 -1 379 | $EndComp 380 | Wire Wire Line 381 | 3900 6350 4050 6350 382 | Wire Wire Line 383 | 4050 6350 4050 6450 384 | Text Label 3700 6350 3 50 ~ 0 385 | SCL 386 | Text Label 3600 6350 3 50 ~ 0 387 | SDA 388 | NoConn ~ 6900 2550 389 | NoConn ~ 6900 2650 390 | NoConn ~ 8350 4000 391 | NoConn ~ 8350 4300 392 | NoConn ~ 8350 4400 393 | NoConn ~ 8350 4500 394 | NoConn ~ 8350 4600 395 | NoConn ~ 8350 4700 396 | NoConn ~ 9550 4600 397 | NoConn ~ 9550 3800 398 | $Comp 399 | L Connector:USB_C_Receptacle_USB2.0 J1 400 | U 1 1 600ACD7F 401 | P 2750 2850 402 | F 0 "J1" H 2857 3717 50 0000 C CNN 403 | F 1 "USB_C_Receptacle_USB2.0" H 2857 3626 50 0000 C CNN 404 | F 2 "Connector_USB:USB_C_Receptacle_GCT_USB4085" H 2900 2850 50 0001 C CNN 405 | F 3 "https://www.usb.org/sites/default/files/documents/usb_type-c.zip" H 2900 2850 50 0001 C CNN 406 | 1 2750 2850 407 | 1 0 0 -1 408 | $EndComp 409 | $Comp 410 | L power:GND #PWR0117 411 | U 1 1 600AF0B5 412 | P 2750 3750 413 | F 0 "#PWR0117" H 2750 3500 50 0001 C CNN 414 | F 1 "GND" H 2755 3577 50 0000 C CNN 415 | F 2 "" H 2750 3750 50 0001 C CNN 416 | F 3 "" H 2750 3750 50 0001 C CNN 417 | 1 2750 3750 418 | 1 0 0 -1 419 | $EndComp 420 | Wire Wire Line 421 | 2450 3750 2750 3750 422 | Connection ~ 2750 3750 423 | Text Label 3350 3050 0 50 ~ 0 424 | D+ 425 | Text Label 3350 2950 0 50 ~ 0 426 | D+ 427 | Text Label 3350 2850 0 50 ~ 0 428 | D- 429 | Text Label 3350 2750 0 50 ~ 0 430 | D- 431 | $Comp 432 | L power:+5V #PWR0118 433 | U 1 1 600B10F4 434 | P 3350 2250 435 | F 0 "#PWR0118" H 3350 2100 50 0001 C CNN 436 | F 1 "+5V" H 3365 2423 50 0000 C CNN 437 | F 2 "" H 3350 2250 50 0001 C CNN 438 | F 3 "" H 3350 2250 50 0001 C CNN 439 | 1 3350 2250 440 | 1 0 0 -1 441 | $EndComp 442 | NoConn ~ 3350 3350 443 | NoConn ~ 3350 3450 444 | $Comp 445 | L Mechanical:MountingHole H1 446 | U 1 1 600B95C9 447 | P 3850 950 448 | F 0 "H1" H 3950 996 50 0000 L CNN 449 | F 1 "MountingHole" H 3950 905 50 0000 L CNN 450 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 3850 950 50 0001 C CNN 451 | F 3 "~" H 3850 950 50 0001 C CNN 452 | 1 3850 950 453 | 1 0 0 -1 454 | $EndComp 455 | $Comp 456 | L Mechanical:MountingHole H2 457 | U 1 1 600B9C28 458 | P 4700 950 459 | F 0 "H2" H 4800 996 50 0000 L CNN 460 | F 1 "MountingHole" H 4800 905 50 0000 L CNN 461 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 4700 950 50 0001 C CNN 462 | F 3 "~" H 4700 950 50 0001 C CNN 463 | 1 4700 950 464 | 1 0 0 -1 465 | $EndComp 466 | $Comp 467 | L Mechanical:MountingHole H3 468 | U 1 1 600BA0A1 469 | P 5450 950 470 | F 0 "H3" H 5550 996 50 0000 L CNN 471 | F 1 "MountingHole" H 5550 905 50 0000 L CNN 472 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 5450 950 50 0001 C CNN 473 | F 3 "~" H 5450 950 50 0001 C CNN 474 | 1 5450 950 475 | 1 0 0 -1 476 | $EndComp 477 | $Comp 478 | L Mechanical:MountingHole H4 479 | U 1 1 600BA5D5 480 | P 6300 950 481 | F 0 "H4" H 6400 996 50 0000 L CNN 482 | F 1 "MountingHole" H 6400 905 50 0000 L CNN 483 | F 2 "MountingHole:MountingHole_2.5mm_Pad_Via" H 6300 950 50 0001 C CNN 484 | F 3 "~" H 6300 950 50 0001 C CNN 485 | 1 6300 950 486 | 1 0 0 -1 487 | $EndComp 488 | $Comp 489 | L Device:R R2 490 | U 1 1 600BB1DB 491 | P 10450 4850 492 | F 0 "R2" H 10520 4896 50 0000 L CNN 493 | F 1 "10k" H 10520 4805 50 0000 L CNN 494 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 10380 4850 50 0001 C CNN 495 | F 3 "~" H 10450 4850 50 0001 C CNN 496 | 1 10450 4850 497 | 1 0 0 -1 498 | $EndComp 499 | Wire Wire Line 500 | 10450 4700 10450 4500 501 | Connection ~ 10450 4500 502 | $Comp 503 | L power:GND #PWR0119 504 | U 1 1 600BC8F7 505 | P 10450 5000 506 | F 0 "#PWR0119" H 10450 4750 50 0001 C CNN 507 | F 1 "GND" H 10455 4827 50 0000 C CNN 508 | F 2 "" H 10450 5000 50 0001 C CNN 509 | F 3 "" H 10450 5000 50 0001 C CNN 510 | 1 10450 5000 511 | 1 0 0 -1 512 | $EndComp 513 | Wire Wire Line 514 | 5200 6300 5050 6300 515 | NoConn ~ 8350 4200 516 | $Comp 517 | L power:GND #PWR0120 518 | U 1 1 600F9C99 519 | P 5100 6950 520 | F 0 "#PWR0120" H 5100 6700 50 0001 C CNN 521 | F 1 "GND" H 5105 6777 50 0000 C CNN 522 | F 2 "" H 5100 6950 50 0001 C CNN 523 | F 3 "" H 5100 6950 50 0001 C CNN 524 | 1 5100 6950 525 | 1 0 0 -1 526 | $EndComp 527 | Text Label 5450 6950 3 50 ~ 0 528 | SDA 529 | Text Label 5550 6950 3 50 ~ 0 530 | SCL 531 | Wire Wire Line 532 | 5250 6950 5100 6950 533 | $Comp 534 | L Connector_Generic:Conn_01x04 J3 535 | U 1 1 600889C9 536 | P 5300 6100 537 | F 0 "J3" V 5264 5812 50 0000 R CNN 538 | F 1 "I2C 3.3v" V 5173 5812 50 0000 R CNN 539 | F 2 "Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical" H 5300 6100 50 0001 C CNN 540 | F 3 "~" H 5300 6100 50 0001 C CNN 541 | 1 5300 6100 542 | 0 -1 -1 0 543 | $EndComp 544 | $Comp 545 | L Connector_Generic:Conn_01x04 J4 546 | U 1 1 600F9C93 547 | P 5350 6750 548 | F 0 "J4" V 5314 6462 50 0000 R CNN 549 | F 1 "I2C 5v" V 5223 6462 50 0000 R CNN 550 | F 2 "Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical" H 5350 6750 50 0001 C CNN 551 | F 3 "~" H 5350 6750 50 0001 C CNN 552 | 1 5350 6750 553 | 0 -1 -1 0 554 | $EndComp 555 | $Comp 556 | L power:+5V #PWR0121 557 | U 1 1 602F3278 558 | P 5350 6950 559 | F 0 "#PWR0121" H 5350 6800 50 0001 C CNN 560 | F 1 "+5V" H 5365 7123 50 0000 C CNN 561 | F 2 "" H 5350 6950 50 0001 C CNN 562 | F 3 "" H 5350 6950 50 0001 C CNN 563 | 1 5350 6950 564 | -1 0 0 1 565 | $EndComp 566 | Wire Wire Line 567 | 10000 3700 9550 3700 568 | Wire Wire Line 569 | 10000 3700 10000 5850 570 | Wire Wire Line 571 | 9850 4000 9850 3900 572 | Wire Wire Line 573 | 9850 3900 9550 3900 574 | Wire Wire Line 575 | 9550 4200 9750 4200 576 | Wire Wire Line 577 | 9750 4200 9750 5250 578 | Wire Wire Line 579 | 9750 5250 6500 5250 580 | Wire Wire Line 581 | 6500 5250 6500 4600 582 | Wire Wire Line 583 | 6500 4600 6250 4600 584 | Wire Wire Line 585 | 9550 4300 10250 4300 586 | Wire Wire Line 587 | 10250 4300 10250 2900 588 | Wire Wire Line 589 | 7550 2900 10250 2900 590 | Wire Wire Line 591 | 9550 4400 9700 4400 592 | Wire Wire Line 593 | 9700 4400 9700 5000 594 | Wire Wire Line 595 | 9700 5000 6650 5000 596 | Wire Wire Line 597 | 6650 5000 6650 4500 598 | Wire Wire Line 599 | 6650 4500 6250 4500 600 | Wire Wire Line 601 | 9550 4500 10450 4500 602 | Wire Wire Line 603 | 8350 3800 7850 3800 604 | Wire Wire Line 605 | 7850 3800 7850 3400 606 | Wire Wire Line 607 | 7850 3400 8950 3400 608 | Connection ~ 8950 3400 609 | $Comp 610 | L Device:R R3 611 | U 1 1 60483EC3 612 | P 2050 5000 613 | F 0 "R3" H 2120 5046 50 0000 L CNN 614 | F 1 "5.1k" H 2120 4955 50 0000 L CNN 615 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 1980 5000 50 0001 C CNN 616 | F 3 "~" H 2050 5000 50 0001 C CNN 617 | 1 2050 5000 618 | 1 0 0 -1 619 | $EndComp 620 | $Comp 621 | L Device:R R4 622 | U 1 1 60484D3B 623 | P 2450 5000 624 | F 0 "R4" H 2520 5046 50 0000 L CNN 625 | F 1 "5.1k" H 2520 4955 50 0000 L CNN 626 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 2380 5000 50 0001 C CNN 627 | F 3 "~" H 2450 5000 50 0001 C CNN 628 | 1 2450 5000 629 | 1 0 0 -1 630 | $EndComp 631 | $Comp 632 | L power:GND #PWR0122 633 | U 1 1 604854A3 634 | P 2450 5150 635 | F 0 "#PWR0122" H 2450 4900 50 0001 C CNN 636 | F 1 "GND" H 2455 4977 50 0000 C CNN 637 | F 2 "" H 2450 5150 50 0001 C CNN 638 | F 3 "" H 2450 5150 50 0001 C CNN 639 | 1 2450 5150 640 | 1 0 0 -1 641 | $EndComp 642 | $Comp 643 | L power:GND #PWR0123 644 | U 1 1 604859C1 645 | P 2050 5150 646 | F 0 "#PWR0123" H 2050 4900 50 0001 C CNN 647 | F 1 "GND" H 2055 4977 50 0000 C CNN 648 | F 2 "" H 2050 5150 50 0001 C CNN 649 | F 3 "" H 2050 5150 50 0001 C CNN 650 | 1 2050 5150 651 | 1 0 0 -1 652 | $EndComp 653 | Text Label 3350 2450 0 50 ~ 0 654 | CC1 655 | Text Label 3350 2550 0 50 ~ 0 656 | CC2 657 | Text Label 2050 4850 0 50 ~ 0 658 | CC1 659 | Text Label 2450 4850 0 50 ~ 0 660 | CC2 661 | $EndSCHEMATC 662 | -------------------------------------------------------------------------------- /pcb/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name pm_25)(type Legacy)(uri ${KIPRJMOD}/pm_25.lib)(options "")(descr "")) 3 | (lib (name pm_25-rescue)(type Legacy)(uri ${KIPRJMOD}/pm_25-rescue.lib)(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /pics/grafana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenderlove/esp8266aq/5ca31ca405a7e9a1147211a9ad832bb626f9f6b2/pics/grafana.png -------------------------------------------------------------------------------- /pics/project-small.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenderlove/esp8266aq/5ca31ca405a7e9a1147211a9ad832bb626f9f6b2/pics/project-small.jpeg -------------------------------------------------------------------------------- /pics/project.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenderlove/esp8266aq/5ca31ca405a7e9a1147211a9ad832bb626f9f6b2/pics/project.jpeg --------------------------------------------------------------------------------