From c515bd76c9eaaf8a2d942eac6bbf6d028748d67d Mon Sep 17 00:00:00 2001 From: "Deployment Bot (from Travis CI)" Date: Wed, 7 Nov 2018 21:32:23 +0000 Subject: [PATCH] Deploy upm.mraa.io to github.com/intel-iot-devkit/upm.git:gh-pages --- CNAME | 1 + Dockerfile | 17 + Documentation/buildingupm.html | 1 + Documentation/contributingrules.html | 1 + Documentation/docindex.html | 1 + Documentation/installingUpm.html | 1 + Documentation/moduleNaming.html | 1 + Documentation/mraa.html | 1 + LICENSE | 21 + README.md | 47 + addSensor.html | 1 + assets/content/LunrIndex.json | 1 + assets/content/facets.json | 1 + assets/content/sensorDetail.json | 1 + assets/css/style.css | 5 + assets/images/FPO-Detail.png | Bin 0 -> 3885 bytes assets/images/FPO.png | Bin 0 -> 1454 bytes assets/images/HowItWorks.png | Bin 0 -> 10608 bytes assets/images/carousel1.png | Bin 0 -> 139180 bytes assets/images/client1.png | Bin 0 -> 12132 bytes assets/images/client2.png | Bin 0 -> 13307 bytes assets/images/client3.png | Bin 0 -> 17776 bytes assets/images/client4.png | Bin 0 -> 9763 bytes assets/images/detect.png | Bin 0 -> 831 bytes assets/images/down_arrow.png | Bin 0 -> 140 bytes assets/images/favicon.png | Bin 0 -> 34014 bytes assets/images/filter_arrow.png | Bin 0 -> 190 bytes assets/images/header-bg.png | Bin 0 -> 23962 bytes assets/images/header.png | Bin 0 -> 2508 bytes assets/images/homePage.png | Bin 0 -> 4216 bytes assets/images/logo.png | Bin 0 -> 3921 bytes assets/images/menu1.png | Bin 0 -> 3402 bytes assets/images/right_arrow.png | Bin 0 -> 142 bytes assets/images/sensor-img.png | Bin 0 -> 21900 bytes assets/images/sensorDetailSprite.png | Bin 0 -> 1461 bytes assets/js/common.js | 1 + assets/js/library/bootstrap.min.js | 2 + assets/js/library/elasticlunr.js | 1 + assets/js/library/handlebars.min.js | 3 + assets/js/library/highlight.js | 1 + assets/js/library/jquery-2.2.4.min.js | 3 + assets/js/library/jquery-ui.min.js | 8 + assets/js/library/jquery.pajinate.js | 1 + assets/js/library/lunr.js | 1 + assets/js/library/prism.js | 1 + assets/js/search.js | 1 + assets/js/sensorDetail.js | 1 + docker-compose.yaml | 23 + feed.xml | 1 + findSensor.html | 1 + howitworks.html | 65 + index.html | 1 + package-lock.json | 9867 ++++++++ scripts/check-sensor-data.js | 32 + sensorDetail.html | 1 + upm/CMakeLists.txt | 508 + upm/LICENSE | 21 + upm/README.md | 147 + upm/cmake/Toolchains/oe-sdk_cross.cmake | 25 + upm/cmake/modules/CPackDeb.cmake | 222 + upm/cmake/modules/FindNode.cmake | 99 + upm/cmake/modules/FindNpm.cmake | 71 + upm/cmake/modules/FindSphinx.cmake | 33 + .../modules/FindUpmCordovaGenerator.cmake | 20 + upm/cmake/modules/FindYuidoc.cmake | 25 + .../modules/GetGitRevisionDescription.cmake | 130 + .../GetGitRevisionDescription.cmake.in | 38 + upm/cmake/modules/LICENSE_1_0.txt | 23 + upm/cmake/modules/OpenCVDetectPython.cmake | 160 + upm/cmake/modules/TargetArch.cmake | 136 + upm/cmake/modules/version.hpp.in | 6 + upm/docker-compose.yaml | 138 + upm/docs/apichanges.md | 271 + upm/docs/building.md | 262 + upm/docs/changelog.md | 362 + upm/docs/contributions.md | 151 + upm/docs/creating_java_bindings.md | 302 + upm/docs/documentation.md | 192 + upm/docs/guidelines.md | 348 + upm/docs/icons/c++.png | Bin 0 -> 1833 bytes upm/docs/icons/iss.png | Bin 0 -> 14312 bytes upm/docs/icons/java.png | Bin 0 -> 1519 bytes upm/docs/icons/node.png | Bin 0 -> 3115 bytes upm/docs/icons/python.png | Bin 0 -> 2596 bytes upm/docs/icons/upm_logo.png | Bin 0 -> 13292 bytes upm/docs/images/1wire.png | Bin 0 -> 3560 bytes upm/docs/images/a110x.jpg | Bin 0 -> 22841 bytes upm/docs/images/ad8232.jpg | Bin 0 -> 227285 bytes upm/docs/images/adafruitms1438.jpg | Bin 0 -> 171993 bytes upm/docs/images/adafruitss.jpg | Bin 0 -> 177545 bytes upm/docs/images/adc121c021.jpg | Bin 0 -> 15326 bytes upm/docs/images/ads1015.jpg | Bin 0 -> 5858 bytes upm/docs/images/ads1115.jpg | Bin 0 -> 62374 bytes upm/docs/images/adxl335.jpg | Bin 0 -> 29288 bytes upm/docs/images/adxl345.jpeg | Bin 0 -> 21440 bytes upm/docs/images/adxrs610.jpg | Bin 0 -> 46189 bytes upm/docs/images/am2315.jpeg | Bin 0 -> 19517 bytes upm/docs/images/apa102.jpg | Bin 0 -> 73623 bytes upm/docs/images/apds9002.jpg | Bin 0 -> 22490 bytes upm/docs/images/at42qt1070.jpg | Bin 0 -> 182039 bytes upm/docs/images/biss0001.jpg | Bin 0 -> 31546 bytes upm/docs/images/bma220.jpg | Bin 0 -> 48664 bytes upm/docs/images/bmp085.jpeg | Bin 0 -> 44943 bytes upm/docs/images/button.jpg | Bin 0 -> 168303 bytes upm/docs/images/buzzer.jpg | Bin 0 -> 9948 bytes upm/docs/images/circularled.jpg | Bin 0 -> 53530 bytes upm/docs/images/cjq4435.jpg | Bin 0 -> 112720 bytes upm/docs/images/collision.jpg | Bin 0 -> 27670 bytes upm/docs/images/dfrph.jpg | Bin 0 -> 97984 bytes upm/docs/images/ds1307.jpg | Bin 0 -> 29064 bytes upm/docs/images/eboled.jpg | Bin 0 -> 67821 bytes upm/docs/images/ecs1030.jpg | Bin 0 -> 70514 bytes upm/docs/images/ehr.jpg | Bin 0 -> 84816 bytes upm/docs/images/eldriver.jpg | Bin 0 -> 10529 bytes upm/docs/images/electromagnet.jpg | Bin 0 -> 6788 bytes upm/docs/images/emg.jpg | Bin 0 -> 41677 bytes upm/docs/images/enc03r.jpg | Bin 0 -> 23400 bytes upm/docs/images/es08a.jpg | Bin 0 -> 170440 bytes upm/docs/images/es9257.jpg | Bin 0 -> 25778 bytes upm/docs/images/flex.jpg | Bin 0 -> 12186 bytes upm/docs/images/gp2y0a.jpg | Bin 0 -> 45246 bytes upm/docs/images/gprs.jpg | Bin 0 -> 162383 bytes upm/docs/images/grovebutton.jpg | Bin 0 -> 168303 bytes upm/docs/images/grovecircularled.jpg | Bin 0 -> 53530 bytes upm/docs/images/grovecollision.jpg | Bin 0 -> 27670 bytes upm/docs/images/groveehr.jpg | Bin 0 -> 84816 bytes upm/docs/images/groveeldriver.jpg | Bin 0 -> 10529 bytes upm/docs/images/groveelectromagnet.jpg | Bin 0 -> 6788 bytes upm/docs/images/grovegprs.jpg | Bin 0 -> 162383 bytes upm/docs/images/groveled.jpg | Bin 0 -> 141452 bytes upm/docs/images/grovelight.jpg | Bin 0 -> 22773 bytes upm/docs/images/grovelinefinder.jpg | Bin 0 -> 78791 bytes upm/docs/images/groveloudness.jpg | Bin 0 -> 9630 bytes upm/docs/images/grovemd.jpg | Bin 0 -> 170901 bytes upm/docs/images/grovemoisture.jpg | Bin 0 -> 3378 bytes upm/docs/images/groveo2.jpg | Bin 0 -> 80556 bytes upm/docs/images/groverelay.jpg | Bin 0 -> 18142 bytes upm/docs/images/grovergblcd.jpg | Bin 0 -> 65506 bytes upm/docs/images/groverotary.jpg | Bin 0 -> 20514 bytes upm/docs/images/grovescam.jpg | Bin 0 -> 138409 bytes upm/docs/images/grovespeaker.jpg | Bin 0 -> 99558 bytes upm/docs/images/grovetemp.jpg | Bin 0 -> 21782 bytes upm/docs/images/groveultrasonic.jpg | Bin 0 -> 33605 bytes upm/docs/images/grovevdiv.jpg | Bin 0 -> 107099 bytes upm/docs/images/grovewfs.jpg | Bin 0 -> 92097 bytes upm/docs/images/gsr.jpg | Bin 0 -> 15716 bytes upm/docs/images/guvas12d.jpg | Bin 0 -> 102225 bytes upm/docs/images/h3lis331dl.jpg | Bin 0 -> 28102 bytes upm/docs/images/hm11.jpg | Bin 0 -> 33003 bytes upm/docs/images/hmc5883l.jpeg | Bin 0 -> 42306 bytes upm/docs/images/hmtrp.jpg | Bin 0 -> 13085 bytes upm/docs/images/hp20x.jpg | Bin 0 -> 951020 bytes upm/docs/images/ht9170.jpg | Bin 0 -> 33179 bytes upm/docs/images/htu21d.jpeg | Bin 0 -> 137600 bytes upm/docs/images/hx711.jpeg | Bin 0 -> 42639 bytes upm/docs/images/ili9341.jpg | Bin 0 -> 203739 bytes upm/docs/images/ims.png | Bin 0 -> 72329 bytes upm/docs/images/ina132.jpg | Bin 0 -> 13779 bytes upm/docs/images/isd1820.jpg | Bin 0 -> 10291 bytes upm/docs/images/itg3200.jpeg | Bin 0 -> 37383 bytes upm/docs/images/joystick12.jpg | Bin 0 -> 22830 bytes upm/docs/images/keypadlcd.jpg | Bin 0 -> 85625 bytes upm/docs/images/kxtj3.png | Bin 0 -> 53505 bytes upm/docs/images/l298.jpg | Bin 0 -> 173107 bytes upm/docs/images/lcm1602.jpeg | Bin 0 -> 198795 bytes upm/docs/images/ldt0028.jpg | Bin 0 -> 110401 bytes upm/docs/images/led.jpg | Bin 0 -> 141452 bytes upm/docs/images/lidarlitev3.jpg | Bin 0 -> 159733 bytes upm/docs/images/light.jpg | Bin 0 -> 22773 bytes upm/docs/images/linefinder.jpg | Bin 0 -> 78791 bytes upm/docs/images/lm35.jpg | Bin 0 -> 58546 bytes upm/docs/images/lolshield.jpg | Bin 0 -> 143549 bytes upm/docs/images/loudness.jpg | Bin 0 -> 9630 bytes upm/docs/images/lpd8806.jpg | Bin 0 -> 52788 bytes upm/docs/images/lsm303dlh.jpeg | Bin 0 -> 30131 bytes upm/docs/images/lsm9ds0.jpg | Bin 0 -> 86533 bytes upm/docs/images/m24lr64e.jpg | Bin 0 -> 24928 bytes upm/docs/images/max30100.png | Bin 0 -> 108119 bytes upm/docs/images/max31855.jpg | Bin 0 -> 201221 bytes upm/docs/images/maxsonarez.jpg | Bin 0 -> 61510 bytes upm/docs/images/mcp9808.jpg | Bin 0 -> 50178 bytes upm/docs/images/md.jpg | Bin 0 -> 170901 bytes upm/docs/images/mg811.jpg | Bin 0 -> 81056 bytes upm/docs/images/mhz16.jpg | Bin 0 -> 16677 bytes upm/docs/images/mic.jpg | Bin 0 -> 47512 bytes upm/docs/images/micsv89.jpg | Bin 0 -> 45498 bytes upm/docs/images/mlx90614.jpg | Bin 0 -> 173955 bytes upm/docs/images/mma7455.jpg | Bin 0 -> 68485 bytes upm/docs/images/mma7660.jpg | Bin 0 -> 12515 bytes upm/docs/images/moisture.jpg | Bin 0 -> 3378 bytes upm/docs/images/mpl3115a2.jpg | Bin 0 -> 145029 bytes upm/docs/images/mpr121.jpg | Bin 0 -> 96858 bytes upm/docs/images/mpu60x0.jpg | Bin 0 -> 45058 bytes upm/docs/images/mpu9150.jpg | Bin 0 -> 126781 bytes upm/docs/images/mpu9250.jpg | Bin 0 -> 36575 bytes upm/docs/images/mq2-5.jpeg | Bin 0 -> 33834 bytes upm/docs/images/mq3-9.jpeg | Bin 0 -> 34872 bytes upm/docs/images/mq303a.jpg | Bin 0 -> 189196 bytes upm/docs/images/my9221.jpg | Bin 0 -> 94197 bytes upm/docs/images/nrf24l01.jpg | Bin 0 -> 107122 bytes upm/docs/images/nrf8001.jpg | Bin 0 -> 210742 bytes upm/docs/images/nunchuck.jpg | Bin 0 -> 16754 bytes upm/docs/images/o2.jpg | Bin 0 -> 80556 bytes upm/docs/images/otp538u.jpg | Bin 0 -> 19197 bytes upm/docs/images/p9813.jpg | Bin 0 -> 44496 bytes upm/docs/images/pca9685.jpg | Bin 0 -> 238443 bytes upm/docs/images/pn532.jpg | Bin 0 -> 104557 bytes upm/docs/images/ppd42ns.jpg | Bin 0 -> 168820 bytes upm/docs/images/pulsensor.jpg | Bin 0 -> 134570 bytes upm/docs/images/relay.jpg | Bin 0 -> 18142 bytes upm/docs/images/rf22.jpg | Bin 0 -> 161935 bytes upm/docs/images/rfr359f.jpg | Bin 0 -> 62595 bytes upm/docs/images/rgbringcoder.jpg | Bin 0 -> 89340 bytes upm/docs/images/rotary.jpg | Bin 0 -> 20514 bytes upm/docs/images/rotaryencoder.jpg | Bin 0 -> 139075 bytes upm/docs/images/rpr220.jpg | Bin 0 -> 35658 bytes upm/docs/images/scam.jpg | Bin 0 -> 138409 bytes upm/docs/images/sensortemplate.png | Bin 0 -> 23943 bytes upm/docs/images/si114x.jpg | Bin 0 -> 195431 bytes upm/docs/images/slide.jpg | Bin 0 -> 8936 bytes upm/docs/images/sm130.jpg | Bin 0 -> 116396 bytes upm/docs/images/speaker.jpg | Bin 0 -> 99558 bytes upm/docs/images/ssd1306.jpeg | Bin 0 -> 73623 bytes upm/docs/images/ssd1308.jpeg | Bin 0 -> 19579 bytes upm/docs/images/ssd1327.jpeg | Bin 0 -> 62983 bytes upm/docs/images/ssd1351.jpg | Bin 0 -> 92216 bytes upm/docs/images/st7735.jpg | Bin 0 -> 152757 bytes upm/docs/images/stepmotor.jpg | Bin 0 -> 202646 bytes upm/docs/images/sx6119.jpg | Bin 0 -> 32998 bytes upm/docs/images/ta12200.jpg | Bin 0 -> 19342 bytes upm/docs/images/tca9548a.jpg | Bin 0 -> 630438 bytes upm/docs/images/tcs3414cs.jpg | Bin 0 -> 30124 bytes upm/docs/images/temp.jpg | Bin 0 -> 21782 bytes upm/docs/images/th02.jpg | Bin 0 -> 14977 bytes upm/docs/images/tm1637.jpeg | Bin 0 -> 24423 bytes upm/docs/images/tp401.jpeg | Bin 0 -> 14438 bytes upm/docs/images/tsl2561.jpg | Bin 0 -> 22834 bytes upm/docs/images/ttp223.jpg | Bin 0 -> 11595 bytes upm/docs/images/ublox6.jpg | Bin 0 -> 22990 bytes upm/docs/images/uln200xa.jpg | Bin 0 -> 22136 bytes upm/docs/images/ultrasonic.jpg | Bin 0 -> 33605 bytes upm/docs/images/urm37.jpg | Bin 0 -> 36877 bytes upm/docs/images/vdiv.jpg | Bin 0 -> 107099 bytes upm/docs/images/water.jpg | Bin 0 -> 11049 bytes upm/docs/images/waterlevel.jpg | Bin 0 -> 15279 bytes upm/docs/images/wfs.jpg | Bin 0 -> 92097 bytes upm/docs/images/wheelencoder.jpg | Bin 0 -> 44422 bytes upm/docs/images/wt5001.jpg | Bin 0 -> 37938 bytes upm/docs/images/xbee.jpg | Bin 0 -> 180236 bytes upm/docs/images/yg1006.jpg | Bin 0 -> 97312 bytes upm/docs/images/zfm20.jpg | Bin 0 -> 2788 bytes upm/docs/installing.md | 89 + upm/docs/knownlimitations.md | 106 + upm/docs/max31855.md | 96 + upm/docs/naming.md | 30 + upm/docs/porting.md | 65 + upm/doxy/Doxyfile.in | 2362 ++ upm/doxy/Doxyfile.java.in | 2318 ++ upm/doxy/DoxygenLayout.xml | 198 + upm/doxy/README.cpp.md | 82 + upm/doxy/README.java.md | 81 + upm/doxy/README.npm.md | 59 + upm/doxy/conf.py.in | 352 + upm/doxy/doxygen2jsdoc/COPYING | 20 + upm/doxy/doxygen2jsdoc/LICENSE | 20 + upm/doxy/doxygen2jsdoc/README.md | 22 + upm/doxy/doxygen2jsdoc/docgen.js | 76 + .../doxygen2jsdoc/generators/jsdoc/conf.json | 7 + .../generators/jsdoc/generator.js | 89 + .../generators/ternjs/generator.js | 132 + .../generators/yuidoc/generator.js | 144 + .../generators/yuidoc/tmpl/LICENSE | 27 + .../generators/yuidoc/tmpl/README.md | 1 + .../generators/yuidoc/tmpl/mraa/helper.js | 132 + .../yuidoc/tmpl/mraa/layouts/main.handlebars | 51 + .../tmpl/mraa/partials/classes.handlebars | 212 + .../tmpl/mraa/partials/index.handlebars | 9 + .../tmpl/mraa/partials/method.handlebars | 213 + .../tmpl/mraa/partials/module.handlebars | 99 + .../tmpl/mraa/partials/options.handlebars | 22 + .../tmpl/mraa/partials/props.handlebars | 119 + .../tmpl/mraa/partials/sidebar.handlebars | 20 + .../yuidoc/tmpl/upm/assets/css/main.css | 814 + .../generators/yuidoc/tmpl/upm/helper.js | 193 + .../yuidoc/tmpl/upm/layouts/main.handlebars | 51 + .../tmpl/upm/partials/classes.handlebars | 205 + .../yuidoc/tmpl/upm/partials/index.handlebars | 9 + .../tmpl/upm/partials/method.handlebars | 212 + .../tmpl/upm/partials/module.handlebars | 92 + .../tmpl/upm/partials/options.handlebars | 22 + .../yuidoc/tmpl/upm/partials/props.handlebars | 119 + .../tmpl/upm/partials/sidebar.handlebars | 27 + upm/doxy/doxygen2jsdoc/grammars/xml.peg | 45 + upm/doxy/doxygen2jsdoc/package.json | 44 + .../e2e/001-cli-interface/test-docgen-help.sh | 24 + .../e2e/002-build-upm-doc/test-upm-doc.sh | 31 + .../assets/classes/FILE_IN_UPPER_CASE.html | 0 .../assets/classes/file_in_lowercase.html | 1 + .../assets/modules/FILE_IN_UPPER_CASE.html | 0 .../assets/modules/file_in_lowercase.html | 1 + .../test/e2e/003-tolower/test-tolower.sh | 30 + .../assets/doxygen2jsdoc_custom.json | 77 + .../e2e/004-build-mraa-doc/assets/xml.tar.gz | Bin 0 -> 318822 bytes .../e2e/004-build-mraa-doc/test-mraa-doc.sh | 32 + upm/doxy/doxygen2jsdoc/test/e2e/run-tests.sh | 41 + upm/doxy/doxygen2jsdoc/tolower.js | 130 + upm/doxy/doxygen2jsdoc/xml2js.js | 936 + upm/doxy/doxyport/LICENSE | 20 + upm/doxy/doxyport/Makefile | 45 + upm/doxy/doxyport/README.md | 53 + upm/doxy/doxyport/devenv.txt | 10 + upm/doxy/doxyport/doxyport | 31 + upm/doxy/doxyport/doxyport.py | 607 + upm/doxy/doxyport/requirements.txt | 5 + upm/doxy/index.rst | 85 + upm/doxy/node/generators/yuidoc/conf.json | 8 + upm/doxy/node/generators/yuidoc/helper.js | 194 + upm/doxy/node/generators/yuidoc/tmpl/LICENSE | 27 + .../yuidoc/tmpl/assets/css/main.css | 814 + .../yuidoc/tmpl/layouts/main.handlebars | 53 + .../yuidoc/tmpl/partials/classes.handlebars | 205 + .../yuidoc/tmpl/partials/index.handlebars | 167 + .../yuidoc/tmpl/partials/method.handlebars | 212 + .../yuidoc/tmpl/partials/module.handlebars | 92 + .../yuidoc/tmpl/partials/options.handlebars | 22 + .../yuidoc/tmpl/partials/props.handlebars | 119 + .../yuidoc/tmpl/partials/sidebar.handlebars | 27 + upm/doxy/samples.mapping.txt | 84 + upm/examples/CMakeLists.txt | 132 + upm/examples/c++/CMakeLists.txt | 20 + upm/examples/c++/a110x-intr.cxx | 79 + upm/examples/c++/a110x.cxx | 67 + upm/examples/c++/abp.cxx | 62 + upm/examples/c++/ad8232.cxx | 66 + upm/examples/c++/adafruitms1438-stepper.cxx | 77 + upm/examples/c++/adafruitms1438.cxx | 72 + upm/examples/c++/adafruitss.cxx | 78 + upm/examples/c++/adc121c021.cxx | 65 + upm/examples/c++/adis16448.cxx | 67 + upm/examples/c++/ads1x15-adc-sensor.cxx | 71 + upm/examples/c++/ads1x15-ads1015.cxx | 106 + upm/examples/c++/ads1x15-ads1115.cxx | 109 + upm/examples/c++/ads1x15.cxx | 327 + upm/examples/c++/adxl335.cxx | 79 + upm/examples/c++/adxl345.cxx | 53 + upm/examples/c++/adxrs610.cxx | 72 + upm/examples/c++/am2315.cxx | 70 + upm/examples/c++/apa102.cxx | 47 + upm/examples/c++/apds9002.cxx | 62 + upm/examples/c++/apds9930.cxx | 74 + upm/examples/c++/at42qt1070.cxx | 89 + upm/examples/c++/bh1749.cxx | 71 + upm/examples/c++/bh1750.cxx | 66 + upm/examples/c++/bh1792.cxx | 81 + upm/examples/c++/biss0001.cxx | 68 + upm/examples/c++/bma220.cxx | 69 + upm/examples/c++/bma250e.cxx | 77 + upm/examples/c++/bmg160.cxx | 77 + upm/examples/c++/bmi160.cxx | 78 + upm/examples/c++/bmm150.cxx | 73 + upm/examples/c++/bmp280-bme280.cxx | 75 + upm/examples/c++/bmp280.cxx | 76 + upm/examples/c++/bmpx8x.cxx | 73 + upm/examples/c++/bmx055-bmc150.cxx | 73 + upm/examples/c++/bmx055-bmi055.cxx | 73 + upm/examples/c++/bmx055.cxx | 76 + upm/examples/c++/bno055.cxx | 103 + upm/examples/c++/button.cxx | 49 + upm/examples/c++/buzzer.cxx | 53 + upm/examples/c++/cjq4435.cxx | 75 + upm/examples/c++/collision.cxx | 66 + upm/examples/c++/curieimu.cxx | 74 + upm/examples/c++/cwlsxxa.cxx | 78 + upm/examples/c++/dfrec.cxx | 74 + upm/examples/c++/dfrorp.cxx | 84 + upm/examples/c++/dfrph.cxx | 76 + upm/examples/c++/ds1307.cxx | 75 + upm/examples/c++/ds1808lc.cxx | 41 + upm/examples/c++/ds18b20.cxx | 82 + upm/examples/c++/ds2413.cxx | 58 + upm/examples/c++/e50hx.cxx | 105 + upm/examples/c++/ecezo.cxx | 72 + upm/examples/c++/ecs1030.cxx | 60 + upm/examples/c++/ehr.cxx | 78 + upm/examples/c++/eldriver.cxx | 67 + upm/examples/c++/electromagnet.cxx | 81 + upm/examples/c++/emg.cxx | 61 + upm/examples/c++/enc03r.cxx | 77 + upm/examples/c++/flex.cxx | 67 + upm/examples/c++/gas-mq2.cxx | 77 + upm/examples/c++/gas-mq3.cxx | 77 + upm/examples/c++/gas-mq4.cxx | 78 + upm/examples/c++/gas-mq5.cxx | 72 + upm/examples/c++/gas-mq6.cxx | 78 + upm/examples/c++/gas-mq7.cxx | 78 + upm/examples/c++/gas-mq8.cxx | 78 + upm/examples/c++/gas-mq9.cxx | 72 + upm/examples/c++/gas-tp401.cxx | 77 + upm/examples/c++/gp2y0a.cxx | 73 + upm/examples/c++/gprs.cxx | 102 + upm/examples/c++/grove-grovebutton.cxx | 50 + upm/examples/c++/grove-groveled-multi.cxx | 68 + upm/examples/c++/grove-groveled.cxx | 56 + upm/examples/c++/grove-grovelight.cxx | 50 + upm/examples/c++/grove-groverelay.cxx | 59 + upm/examples/c++/grove-groverotary.cxx | 67 + upm/examples/c++/grove-groveslide.cxx | 52 + upm/examples/c++/grove-grovetemp.cxx | 55 + upm/examples/c++/grovecollision.cxx | 66 + upm/examples/c++/groveehr.cxx | 78 + upm/examples/c++/groveeldriver.cxx | 67 + upm/examples/c++/groveelectromagnet.cxx | 81 + upm/examples/c++/groveemg.cxx | 61 + upm/examples/c++/grovegprs.cxx | 102 + upm/examples/c++/grovegsr.cxx | 64 + upm/examples/c++/grovelinefinder.cxx | 66 + upm/examples/c++/grovemd-stepper.cxx | 65 + upm/examples/c++/grovemd.cxx | 59 + upm/examples/c++/grovemoisture.cxx | 75 + upm/examples/c++/groveo2.cxx | 58 + upm/examples/c++/grovescam.cxx | 73 + upm/examples/c++/grovespeaker.cxx | 48 + upm/examples/c++/groveultrasonic.cxx | 59 + upm/examples/c++/grovevdiv.cxx | 67 + upm/examples/c++/grovewater.cxx | 65 + upm/examples/c++/grovewfs.cxx | 78 + upm/examples/c++/gsr.cxx | 64 + upm/examples/c++/guvas12d.cxx | 71 + upm/examples/c++/h3lis331dl.cxx | 79 + upm/examples/c++/h803x.cxx | 121 + upm/examples/c++/hcsr04.cxx | 60 + upm/examples/c++/hdc1000.cxx | 67 + upm/examples/c++/hdxxvxta.cxx | 76 + upm/examples/c++/hka5.cxx | 73 + upm/examples/c++/hlg150h.cxx | 43 + upm/examples/c++/hm11.cxx | 116 + upm/examples/c++/hmc5883l.cxx | 52 + upm/examples/c++/hmtrp.cxx | 153 + upm/examples/c++/hp20x.cxx | 72 + upm/examples/c++/ht9170.cxx | 71 + upm/examples/c++/htu21d.cxx | 72 + upm/examples/c++/hwxpxx.cxx | 97 + upm/examples/c++/hx711.cxx | 45 + upm/examples/c++/ili9341.cxx | 84 + upm/examples/c++/ims.cxx | 70 + upm/examples/c++/ina132.cxx | 62 + .../c++/interfaces-humiditysensor.cxx | 88 + .../c++/interfaces-lightcontroller.cxx | 98 + upm/examples/c++/interfaces-lightsensor.cxx | 84 + .../c++/interfaces-pressuresensor.cxx | 85 + .../c++/interfaces-temperaturesensor.cxx | 96 + upm/examples/c++/isd1820.cxx | 80 + upm/examples/c++/itg3200.cxx | 53 + upm/examples/c++/jhd1313m1-lcd.cxx | 72 + upm/examples/c++/joystick12.cxx | 63 + upm/examples/c++/kx122.cxx | 65 + upm/examples/c++/kxcjk1013.cxx | 80 + upm/examples/c++/kxtj3.cxx | 73 + upm/examples/c++/l298-stepper.cxx | 61 + upm/examples/c++/l298.cxx | 62 + upm/examples/c++/l3gd20-i2c.cxx | 110 + upm/examples/c++/l3gd20.cxx | 80 + upm/examples/c++/lcd-eboled.cxx | 51 + upm/examples/c++/lcd-ssd1306-oled.cxx | 149 + upm/examples/c++/lcd-ssd1308-oled.cxx | 99 + upm/examples/c++/lcd-ssd1327-oled.cxx | 125 + upm/examples/c++/lcdks.cxx | 71 + upm/examples/c++/lcm1602-i2c.cxx | 47 + upm/examples/c++/lcm1602-parallel.cxx | 56 + upm/examples/c++/ldt0028.cxx | 91 + upm/examples/c++/led.cxx | 55 + upm/examples/c++/lidarlitev3.cxx | 63 + upm/examples/c++/light.cxx | 49 + upm/examples/c++/linefinder.cxx | 66 + upm/examples/c++/lis2ds12.cxx | 77 + upm/examples/c++/lis3dh.cxx | 81 + upm/examples/c++/lm35.cxx | 66 + upm/examples/c++/lol.cxx | 67 + upm/examples/c++/loudness.cxx | 69 + upm/examples/c++/lp8860.cxx | 43 + upm/examples/c++/lpd8806.cxx | 105 + upm/examples/c++/lsm303agr.cxx | 77 + upm/examples/c++/lsm303d.cxx | 77 + upm/examples/c++/lsm303dlh.cxx | 62 + upm/examples/c++/lsm6ds3h.cxx | 80 + upm/examples/c++/lsm6dsl.cxx | 80 + upm/examples/c++/lsm9ds0.cxx | 82 + upm/examples/c++/m24lr64e.cxx | 66 + upm/examples/c++/mag3110.cxx | 76 + upm/examples/c++/max30100.cxx | 99 + upm/examples/c++/max31723.cxx | 60 + upm/examples/c++/max31855.cxx | 39 + upm/examples/c++/max44000.cxx | 40 + upm/examples/c++/max44009.cxx | 44 + upm/examples/c++/max5487.cxx | 64 + upm/examples/c++/maxds3231m.cxx | 74 + upm/examples/c++/maxsonarez.cxx | 72 + upm/examples/c++/mb704x.cxx | 64 + upm/examples/c++/mcp2515-txrx.cxx | 118 + upm/examples/c++/mcp2515.cxx | 76 + upm/examples/c++/mcp9808.cxx | 158 + upm/examples/c++/md-stepper.cxx | 66 + upm/examples/c++/md.cxx | 59 + upm/examples/c++/mg811.cxx | 69 + upm/examples/c++/mhz16.cxx | 84 + upm/examples/c++/mic.cxx | 75 + upm/examples/c++/micsv89.cxx | 79 + upm/examples/c++/mlx90614.cxx | 60 + upm/examples/c++/mma7361.cxx | 82 + upm/examples/c++/mma7455.cxx | 62 + upm/examples/c++/mma7660.cxx | 76 + upm/examples/c++/mma8x5x.cxx | 91 + upm/examples/c++/mmc35240.cxx | 113 + upm/examples/c++/moisture.cxx | 75 + upm/examples/c++/mpl3115a2.cxx | 75 + upm/examples/c++/mpr121.cxx | 88 + upm/examples/c++/mpu9150-ak8975.cxx | 71 + upm/examples/c++/mpu9150-mpu60x0.cxx | 76 + upm/examples/c++/mpu9150-mpu9250.cxx | 80 + upm/examples/c++/mpu9150.cxx | 80 + upm/examples/c++/mq303a.cxx | 77 + upm/examples/c++/ms5611.cxx | 62 + upm/examples/c++/ms5803.cxx | 71 + upm/examples/c++/my9221-grovecircularled.cxx | 65 + upm/examples/c++/my9221-groveledbar.cxx | 75 + upm/examples/c++/nlgpio16.cxx | 51 + upm/examples/c++/nmea_gps-i2c.cxx | 68 + upm/examples/c++/nmea_gps.cxx | 67 + upm/examples/c++/nrf24l01-broadcast.cxx | 87 + upm/examples/c++/nrf24l01-receiver.cxx | 87 + upm/examples/c++/nrf24l01-transmitter.cxx | 94 + upm/examples/c++/nrf8001-broadcast.cxx | 189 + upm/examples/c++/nrf8001-broadcast.hpp | 93 + upm/examples/c++/nrf8001-helloworld.cxx | 407 + upm/examples/c++/nrf8001-helloworld.hpp | 254 + upm/examples/c++/nunchuck.cxx | 67 + upm/examples/c++/o2.cxx | 58 + upm/examples/c++/otp538u.cxx | 80 + upm/examples/c++/ozw-aeotecdsb09104.cxx | 100 + upm/examples/c++/ozw-aeotecdw2e.cxx | 97 + upm/examples/c++/ozw-aeotecsdg2.cxx | 114 + upm/examples/c++/ozw-aeotecss6.cxx | 104 + upm/examples/c++/ozw-ozwdump.cxx | 110 + upm/examples/c++/ozw-tzemt400.cxx | 102 + upm/examples/c++/p9813.cxx | 45 + upm/examples/c++/pca9685.cxx | 77 + upm/examples/c++/pn532-writeurl.cxx | 108 + upm/examples/c++/pn532.cxx | 97 + upm/examples/c++/ppd42ns.cxx | 65 + upm/examples/c++/pulsensor.cxx | 71 + upm/examples/c++/relay.cxx | 58 + upm/examples/c++/rf22-client.cxx | 76 + upm/examples/c++/rf22-server.cxx | 76 + upm/examples/c++/rfr359f.cxx | 67 + upm/examples/c++/rgbringcoder.cxx | 104 + upm/examples/c++/rhusb.cxx | 87 + upm/examples/c++/rn2903-p2p-rx.cxx | 112 + upm/examples/c++/rn2903-p2p-tx.cxx | 120 + upm/examples/c++/rn2903.cxx | 127 + upm/examples/c++/rotary.cxx | 66 + upm/examples/c++/rotaryencoder.cxx | 61 + upm/examples/c++/rpr220-intr.cxx | 80 + upm/examples/c++/rpr220.cxx | 68 + upm/examples/c++/rsc.cxx | 65 + upm/examples/c++/scam.cxx | 73 + upm/examples/c++/sensortemplate.cxx | 53 + upm/examples/c++/servo-es08a.cxx | 58 + upm/examples/c++/sht1x.cxx | 71 + upm/examples/c++/si1132.cxx | 46 + upm/examples/c++/si114x.cxx | 78 + upm/examples/c++/si7005.cxx | 52 + upm/examples/c++/slide.cxx | 51 + upm/examples/c++/sm130.cxx | 66 + upm/examples/c++/smartdrive.cxx | 80 + upm/examples/c++/speaker-pwm.cxx | 54 + upm/examples/c++/speaker.cxx | 48 + upm/examples/c++/ssd1351.cxx | 57 + upm/examples/c++/st7735.cxx | 75 + upm/examples/c++/stepmotor.cxx | 78 + upm/examples/c++/sx1276-fsk.cxx | 110 + upm/examples/c++/sx1276-lora.cxx | 109 + upm/examples/c++/sx6119.cxx | 67 + upm/examples/c++/t3311.cxx | 107 + upm/examples/c++/t6713-co2-sensor.cxx | 66 + upm/examples/c++/t6713.cxx | 47 + upm/examples/c++/t8100.cxx | 108 + upm/examples/c++/ta12200.cxx | 64 + upm/examples/c++/tb7300.cxx | 113 + upm/examples/c++/tca9548a.cxx | 99 + upm/examples/c++/tcs3414cs.cxx | 65 + upm/examples/c++/tcs37727.cxx | 77 + upm/examples/c++/teams.cxx | 82 + upm/examples/c++/temperature.cxx | 56 + upm/examples/c++/tex00.cxx | 83 + upm/examples/c++/th02.cxx | 63 + upm/examples/c++/tm1637.cxx | 78 + upm/examples/c++/tmp006.cxx | 73 + upm/examples/c++/tsl2561.cxx | 52 + upm/examples/c++/ttp223.cxx | 54 + upm/examples/c++/uartat-le910.cxx | 155 + upm/examples/c++/uln200xa.cxx | 62 + upm/examples/c++/ultrasonic.cxx | 58 + upm/examples/c++/urm37-uart.cxx | 68 + upm/examples/c++/urm37.cxx | 66 + upm/examples/c++/vcap.cxx | 69 + upm/examples/c++/vdiv.cxx | 67 + upm/examples/c++/veml6070.cxx | 59 + upm/examples/c++/water.cxx | 65 + upm/examples/c++/waterlevel.cxx | 63 + upm/examples/c++/wfs.cxx | 79 + upm/examples/c++/wheelencoder.cxx | 68 + upm/examples/c++/wt5001.cxx | 129 + upm/examples/c++/xbee.cxx | 134 + upm/examples/c++/yg1006.cxx | 66 + upm/examples/c++/zfm20-register.cxx | 134 + upm/examples/c++/zfm20.cxx | 102 + upm/examples/c/CMakeLists.txt | 11 + upm/examples/c/a110x.c | 25 + upm/examples/c/abp.c | 50 + upm/examples/c/bh1749.c | 73 + upm/examples/c/bh1750.c | 76 + upm/examples/c/bh1792.c | 86 + upm/examples/c/biss0001.c | 70 + upm/examples/c/bma250e.c | 99 + upm/examples/c/bmg160.c | 99 + upm/examples/c/bmi160.c | 94 + upm/examples/c/bmm150.c | 96 + upm/examples/c/bmp280-bme280.c | 89 + upm/examples/c/bmp280.c | 86 + upm/examples/c/bmpx8x.c | 88 + upm/examples/c/bno055.c | 119 + upm/examples/c/button-intr.c | 54 + upm/examples/c/button.c | 59 + upm/examples/c/buzzer.c | 68 + upm/examples/c/cjq4435.c | 82 + upm/examples/c/collision.c | 24 + upm/examples/c/dfrec.c | 77 + upm/examples/c/dfrorp.c | 87 + upm/examples/c/dfrph.c | 75 + upm/examples/c/ds18b20.c | 81 + upm/examples/c/ecezo.c | 85 + upm/examples/c/emg.c | 87 + upm/examples/c/enc03r.c | 90 + upm/examples/c/flex.c | 87 + upm/examples/c/gas-mqx.c | 87 + upm/examples/c/gp2y0a.c | 27 + upm/examples/c/gsr.c | 87 + upm/examples/c/guvas12d.c | 89 + upm/examples/c/hcsr04.c | 48 + upm/examples/c/hka5.c | 79 + upm/examples/c/hmc5883l.c | 82 + upm/examples/c/ims.c | 88 + upm/examples/c/jhd1313m1.c | 84 + upm/examples/c/joystick12.c | 87 + upm/examples/c/kx122.c | 71 + upm/examples/c/kxtj3.c | 75 + upm/examples/c/lcdks.c | 89 + upm/examples/c/lcm1602-i2c.c | 53 + upm/examples/c/lcm1602-parallel.c | 62 + upm/examples/c/ldt0028.c | 96 + upm/examples/c/led.c | 27 + upm/examples/c/light.c | 87 + upm/examples/c/linefinder.c | 72 + upm/examples/c/lis2ds12.c | 100 + upm/examples/c/lis3dh.c | 97 + upm/examples/c/lm35.c | 72 + upm/examples/c/loudness.c | 27 + upm/examples/c/lsm303agr.c | 90 + upm/examples/c/lsm303d.c | 89 + upm/examples/c/lsm6ds3h.c | 104 + upm/examples/c/lsm6dsl.c | 104 + upm/examples/c/m24lr64e.c | 31 + upm/examples/c/max30100.c | 130 + upm/examples/c/mb704x.c | 77 + upm/examples/c/mcp2515-txrx.c | 152 + upm/examples/c/mcp2515.c | 107 + upm/examples/c/md-stepper.c | 69 + upm/examples/c/md.c | 64 + upm/examples/c/mma7361.c | 86 + upm/examples/c/mma7660.c | 83 + upm/examples/c/moisture.c | 26 + upm/examples/c/mpr121.c | 32 + upm/examples/c/mq303a.c | 26 + upm/examples/c/ms5803.c | 79 + upm/examples/c/my9221.c | 89 + upm/examples/c/nmea_gps-i2c.c | 83 + upm/examples/c/nmea_gps.c | 81 + upm/examples/c/nunchuck.c | 84 + upm/examples/c/o2.c | 76 + upm/examples/c/otp538u.c | 81 + upm/examples/c/ppd42ns.c | 66 + upm/examples/c/rn2903-p2p-rx.c | 137 + upm/examples/c/rn2903-p2p-tx.c | 139 + upm/examples/c/rn2903.c | 153 + upm/examples/c/rotaryencoder.c | 69 + upm/examples/c/rpr220-intr.c | 84 + upm/examples/c/rpr220.c | 72 + upm/examples/c/rsc.c | 47 + upm/examples/c/servo.c | 37 + upm/examples/c/sht1x.c | 78 + upm/examples/c/slide.c | 87 + upm/examples/c/speaker-pwm.c | 61 + upm/examples/c/speaker.c | 55 + upm/examples/c/tsl2561.c | 22 + upm/examples/c/ttp223.c | 25 + upm/examples/c/uartat-le910.c | 169 + upm/examples/c/uln200xa.c | 69 + upm/examples/c/urm37-uart.c | 76 + upm/examples/c/urm37.c | 74 + upm/examples/c/vdiv.c | 75 + upm/examples/c/veml6070.c | 49 + upm/examples/c/water.c | 70 + upm/examples/c/wfs.c | 91 + upm/examples/c/yg1006.c | 70 + upm/examples/java/A110X_Example.java | 43 + upm/examples/java/A110X_intr_Example.java | 60 + upm/examples/java/ADC121C021_Example.java | 46 + upm/examples/java/AM2315_Example.java | 66 + upm/examples/java/APA102_Example.java | 44 + upm/examples/java/Ad8232_Example.java | 50 + upm/examples/java/Ads1015_Example.java | 100 + upm/examples/java/Ads1115_Example.java | 103 + upm/examples/java/Adxl345_Example.java | 51 + upm/examples/java/AeotecDSB09104_Example.java | 96 + upm/examples/java/AeotecDW2E_Example.java | 89 + upm/examples/java/AeotecSDG2_Example.java | 100 + upm/examples/java/AeotecSS6_Example.java | 91 + upm/examples/java/Apds9002_Example.java | 47 + upm/examples/java/BH1749_Example.java | 53 + upm/examples/java/BH1750_Example.java | 52 + upm/examples/java/BH1792_Example.java | 69 + upm/examples/java/BISS0001_Example.java | 45 + upm/examples/java/BMA220_Example.java | 46 + upm/examples/java/BMA250E_Example.java | 66 + upm/examples/java/BMC150_Example.java | 65 + upm/examples/java/BME280_Example.java | 69 + .../java/BME280_Interface_Example.java | 71 + upm/examples/java/BMG160_Example.java | 66 + upm/examples/java/BMI055_Example.java | 65 + upm/examples/java/BMI160_Example.java | 78 + upm/examples/java/BMM150_Example.java | 62 + upm/examples/java/BMP280_Example.java | 65 + upm/examples/java/BMPX8X_Example.java | 55 + upm/examples/java/BMX055_Example.java | 72 + upm/examples/java/BNO055_Example.java | 101 + upm/examples/java/Button_Example.java | 40 + upm/examples/java/Button_intr_Example.java | 56 + upm/examples/java/Buzzer_Example.java | 56 + upm/examples/java/CJQ4435_Example.java | 52 + upm/examples/java/CMakeLists.txt | 264 + upm/examples/java/CWLSXXA_Example.java | 62 + upm/examples/java/Collision_Example.java | 48 + upm/examples/java/DFREC_Example.java | 59 + upm/examples/java/DFRORP_Example.java | 68 + upm/examples/java/DFRPH_Example.java | 49 + upm/examples/java/DS1307_Example.java | 74 + upm/examples/java/E50HX_Example.java | 91 + upm/examples/java/ECEZO_Example.java | 60 + upm/examples/java/ECS1030_Example.java | 52 + upm/examples/java/EHR_Example.java | 53 + upm/examples/java/ENC03R_Example.java | 56 + upm/examples/java/ES08A_Example.java | 53 + upm/examples/java/Emg_Example.java | 47 + upm/examples/java/FlexSensor_Example.java | 41 + upm/examples/java/GROVESCAM_Example.java | 66 + upm/examples/java/GUVAS12D_Example.java | 49 + upm/examples/java/Gp2y0a_Example.java | 68 + upm/examples/java/GroveButton_Example.java | 40 + .../java/GroveButton_intr_Example.java | 56 + upm/examples/java/GroveCollision_Example.java | 48 + upm/examples/java/GroveEHR_Example.java | 53 + upm/examples/java/GroveEmg_Example.java | 47 + upm/examples/java/GroveGsr_Example.java | 50 + upm/examples/java/GroveLEDBar_Example.java | 41 + upm/examples/java/GroveLED_Example.java | 39 + upm/examples/java/GroveLed_multi_Example.java | 45 + upm/examples/java/GroveLight_Example.java | 41 + .../java/GroveLineFinder_Example.java | 45 + upm/examples/java/GroveMD_Example.java | 53 + upm/examples/java/GroveMQ3_Example.java | 70 + upm/examples/java/GroveMQ9_Example.java | 70 + upm/examples/java/GroveMoisture_Example.java | 47 + upm/examples/java/GroveO2_Example.java | 46 + upm/examples/java/GroveQTouch_Example.java | 69 + upm/examples/java/GroveRelay_Example.java | 44 + upm/examples/java/GroveRotary_Example.java | 49 + upm/examples/java/GroveSlide_Example.java | 42 + upm/examples/java/GroveSpeaker_Example.java | 40 + upm/examples/java/GroveTemp_Example.java | 43 + .../java/GroveUltraSonic_Example.java | 41 + upm/examples/java/GroveVDiv_Example.java | 50 + upm/examples/java/GroveWFS_Example.java | 44 + upm/examples/java/GroveWater_Example.java | 45 + upm/examples/java/Gsr_Example.java | 50 + upm/examples/java/H3LIS331DL_Example.java | 54 + upm/examples/java/H803X_Example.java | 123 + upm/examples/java/HCSR04_Example.java | 45 + upm/examples/java/HKA5_Example.java | 59 + upm/examples/java/HM11_Example.java | 96 + upm/examples/java/HMTRP_Example.java | 122 + upm/examples/java/HP20x_Example.java | 50 + upm/examples/java/HTU21D_Example.java | 45 + upm/examples/java/Hmc5883l_Example.java | 50 + upm/examples/java/IMS_Example.java | 53 + upm/examples/java/Itg3200_Example.java | 51 + upm/examples/java/Jhd1313m1_Example.java | 42 + upm/examples/java/Jhd1313m1_lcd_Example.java | 43 + upm/examples/java/Joystick12_Example.java | 44 + .../java/Joystick12_example_Example.java | 44 + upm/examples/java/KX122_Example.java | 50 + upm/examples/java/KXTJ3_Example.java | 49 + upm/examples/java/LCD_EBOLED_Example.java | 47 + upm/examples/java/LCD_SSD1306_Example.java | 146 + upm/examples/java/LDT0028_Example.java | 42 + upm/examples/java/LE910_Example.java | 167 + upm/examples/java/LED_Example.java | 39 + upm/examples/java/LIS2DS12_Example.java | 64 + upm/examples/java/LIS3DH_Example.java | 68 + upm/examples/java/LM35_Example.java | 43 + upm/examples/java/LSM303AGR_Example.java | 67 + upm/examples/java/LSM303DLH_Example.java | 59 + upm/examples/java/LSM303D_Example.java | 67 + upm/examples/java/LSM6DS3H_Example.java | 71 + upm/examples/java/LSM6DSL_Example.java | 71 + upm/examples/java/LSM9DS0_Example.java | 59 + upm/examples/java/Lcm1602_i2c_Example.java | 42 + .../java/Lcm1602_parallel_Example.java | 53 + upm/examples/java/Light_Example.java | 41 + upm/examples/java/LineFinder_Example.java | 45 + upm/examples/java/LoL_Example.java | 47 + upm/examples/java/LoL_example_Example.java | 47 + upm/examples/java/Loudness_Example.java | 42 + upm/examples/java/M24LR64E_Example.java | 55 + upm/examples/java/MAX30100_Example.java | 88 + upm/examples/java/MAX31855_Example.java | 56 + upm/examples/java/MAX44000_Example.java | 38 + upm/examples/java/MAX5487_Example.java | 71 + upm/examples/java/MAXds3231m_Example.java | 79 + upm/examples/java/MB704X_Example.java | 48 + upm/examples/java/MCP2515_Example.java | 73 + upm/examples/java/MCP2515_TXRX_Example.java | 94 + upm/examples/java/MCP9808_Example.java | 216 + upm/examples/java/MD_Example.java | 53 + upm/examples/java/MG811_Example.java | 44 + upm/examples/java/MHZ16_Example.java | 50 + upm/examples/java/MMA7361_Example.java | 66 + upm/examples/java/MMA7455_Example.java | 41 + upm/examples/java/MMA7660_Example.java | 61 + upm/examples/java/MPL3115A2_Example.java | 45 + upm/examples/java/MPR121_Example.java | 34 + upm/examples/java/MPU9150_Example.java | 53 + upm/examples/java/MQ2_Example.java | 56 + upm/examples/java/MQ303A_Example.java | 53 + upm/examples/java/MQ4_Example.java | 56 + upm/examples/java/MQ5_Example.java | 55 + upm/examples/java/MQ6_Example.java | 56 + upm/examples/java/MQ7_Example.java | 57 + upm/examples/java/MQ8_Example.java | 56 + upm/examples/java/MS5803_Example.java | 56 + upm/examples/java/Microphone_Example.java | 56 + upm/examples/java/Moisture_Example.java | 47 + upm/examples/java/NLGPIO16_Example.java | 44 + upm/examples/java/NMEAGPS_Example.java | 48 + upm/examples/java/NMEAGPS_I2C_Example.java | 49 + .../java/NRF24L01_receiver_Example.java | 75 + .../java/NRF24L01_transmitter_Example.java | 66 + upm/examples/java/NUNCHUCK_Example.java | 61 + upm/examples/java/O2_Example.java | 46 + upm/examples/java/OTP538U_Example.java | 43 + upm/examples/java/P9813_Example.java | 42 + upm/examples/java/PN532_Example.java | 76 + upm/examples/java/PN532_writeurl_Example.java | 97 + upm/examples/java/PPD42NS_Example.java | 45 + upm/examples/java/Pulsensor_Example.java | 46 + upm/examples/java/RFR359F_Example.java | 44 + upm/examples/java/RHUSB_Example.java | 60 + upm/examples/java/RN2903_Example.java | 138 + upm/examples/java/RN2903_P2P_RX_Example.java | 106 + upm/examples/java/RN2903_P2P_TX_Example.java | 111 + upm/examples/java/RPR220_Example.java | 44 + upm/examples/java/RPR220_intr_Example.java | 57 + upm/examples/java/Relay_Example.java | 44 + upm/examples/java/RotaryEncoder_Example.java | 40 + upm/examples/java/Rotary_Example.java | 49 + upm/examples/java/SCAM_Example.java | 66 + upm/examples/java/SHT1X_Example.java | 55 + upm/examples/java/SM130_Example.java | 69 + upm/examples/java/SSD1308_oled_Example.java | 89 + upm/examples/java/SSD1327_oled_Example.java | 135 + upm/examples/java/ST7735_Example.java | 77 + upm/examples/java/SensorTemplate_Example.java | 41 + upm/examples/java/Slide_Example.java | 42 + upm/examples/java/SpeakerPWM_Example.java | 46 + upm/examples/java/Speaker_Example.java | 40 + upm/examples/java/StepMotor_Example.java | 56 + upm/examples/java/T8100_Example.java | 97 + upm/examples/java/TB7300_Example.java | 99 + upm/examples/java/TEAMS_Example.java | 64 + upm/examples/java/TEX00_Example.java | 71 + upm/examples/java/TM1637_Example.java | 58 + upm/examples/java/TP401_Example.java | 66 + upm/examples/java/TSL2561_Example.java | 40 + upm/examples/java/TTP223_Example.java | 42 + upm/examples/java/TZEMT400_Example.java | 98 + upm/examples/java/Temperature_Example.java | 43 + upm/examples/java/Th02_Example.java | 47 + upm/examples/java/ULN200XA_Example.java | 53 + upm/examples/java/VCAP_Example.java | 60 + upm/examples/java/VDiv_Example.java | 50 + upm/examples/java/VEML6070_Example.java | 48 + upm/examples/java/WFS_Example.java | 47 + upm/examples/java/WT5001_Example.java | 130 + .../java/WaterLevelSensor_Example.java | 52 + upm/examples/java/Water_Example.java | 45 + upm/examples/java/WheelEncoder_Example.java | 45 + upm/examples/java/YG1006_Example.java | 45 + upm/examples/java/ZFM20_Example.java | 88 + upm/examples/javascript/a110x.js | 44 + upm/examples/javascript/abp.js | 43 + upm/examples/javascript/ad8232.js | 49 + .../javascript/adafruitms1438-stepper.js | 90 + upm/examples/javascript/adafruitms1438.js | 87 + upm/examples/javascript/adc121c021.js | 50 + upm/examples/javascript/adis16448.js | 67 + upm/examples/javascript/ads1015.js | 70 + upm/examples/javascript/ads1115.js | 74 + upm/examples/javascript/ads1x15.js | 44 + upm/examples/javascript/adxl335.js | 86 + upm/examples/javascript/adxl345.js | 41 + upm/examples/javascript/adxrs610.js | 54 + upm/examples/javascript/aeotecdsb09104.js | 100 + upm/examples/javascript/aeotecdw2e.js | 92 + upm/examples/javascript/aeotecsdg2.js | 116 + upm/examples/javascript/aeotecss6.js | 107 + upm/examples/javascript/ak8975.js | 61 + upm/examples/javascript/apa102.js | 42 + upm/examples/javascript/apds9002.js | 45 + upm/examples/javascript/at42qt1070.js | 79 + upm/examples/javascript/bh1749.js | 57 + upm/examples/javascript/bh1750.js | 51 + upm/examples/javascript/bh1792.js | 50 + upm/examples/javascript/biss0001.js | 42 + upm/examples/javascript/bma220.js | 56 + upm/examples/javascript/bma250e.js | 65 + upm/examples/javascript/bmc150.js | 66 + upm/examples/javascript/bme280.js | 68 + upm/examples/javascript/bmg160.js | 65 + upm/examples/javascript/bmi055.js | 66 + upm/examples/javascript/bmi160.js | 68 + upm/examples/javascript/bmm150.js | 60 + upm/examples/javascript/bmp280.js | 64 + upm/examples/javascript/bmpx8x.js | 56 + upm/examples/javascript/bmx055.js | 73 + upm/examples/javascript/bno055.js | 106 + upm/examples/javascript/button.js | 35 + upm/examples/javascript/buzzer.js | 60 + upm/examples/javascript/cjq4435.js | 84 + upm/examples/javascript/collision.js | 60 + upm/examples/javascript/curieimu.js | 50 + upm/examples/javascript/cwlsxxa.js | 63 + upm/examples/javascript/dfrec.js | 59 + upm/examples/javascript/dfrorp.js | 70 + upm/examples/javascript/dfrph.js | 56 + upm/examples/javascript/ds1307.js | 65 + upm/examples/javascript/ds18b20.js | 68 + upm/examples/javascript/ds2413.js | 52 + upm/examples/javascript/e50hx.js | 98 + upm/examples/javascript/eboled.js | 147 + upm/examples/javascript/ecezo.js | 59 + upm/examples/javascript/ehr.js | 62 + upm/examples/javascript/eldriver.js | 52 + upm/examples/javascript/electromagnet.js | 55 + upm/examples/javascript/emg.js | 46 + upm/examples/javascript/enc03r.js | 62 + upm/examples/javascript/es08a.js | 66 + upm/examples/javascript/flex.js | 51 + upm/examples/javascript/gp2y0a.js | 58 + upm/examples/javascript/gprs.js | 111 + upm/examples/javascript/grove_mcfled.js | 44 + upm/examples/javascript/grovebutton.js | 35 + upm/examples/javascript/grovecircularled.js | 47 + upm/examples/javascript/grovecollision.js | 60 + upm/examples/javascript/groveehr.js | 62 + upm/examples/javascript/groveeldriver.js | 52 + upm/examples/javascript/groveelectromagnet.js | 55 + upm/examples/javascript/groveemg.js | 46 + upm/examples/javascript/grovegprs.js | 111 + upm/examples/javascript/grovegsr.js | 49 + upm/examples/javascript/groveled.js | 46 + upm/examples/javascript/groveledbar.js | 71 + upm/examples/javascript/grovelight.js | 37 + upm/examples/javascript/grovelinefinder.js | 44 + upm/examples/javascript/grovemd-stepper.js | 92 + upm/examples/javascript/grovemd.js | 91 + upm/examples/javascript/grovemoisture.js | 54 + upm/examples/javascript/groveo2.js | 50 + upm/examples/javascript/groverelay.js | 49 + upm/examples/javascript/groverotary.js | 49 + upm/examples/javascript/grovescam.js | 69 + upm/examples/javascript/groveslide.js | 42 + upm/examples/javascript/grovespeaker.js | 41 + upm/examples/javascript/grovetemp.js | 42 + upm/examples/javascript/groveultrasonic.js | 45 + upm/examples/javascript/grovevdiv.js | 51 + upm/examples/javascript/grovewater.js | 46 + upm/examples/javascript/grovewfs.js | 66 + upm/examples/javascript/gsr.js | 49 + upm/examples/javascript/guvas12d.js | 50 + upm/examples/javascript/h3lis331dl.js | 88 + upm/examples/javascript/h803x.js | 112 + upm/examples/javascript/hcsr04.js | 41 + upm/examples/javascript/hdxxvxta.js | 61 + upm/examples/javascript/hka5.js | 63 + upm/examples/javascript/hm11.js | 133 + upm/examples/javascript/hmc5883l.js | 58 + upm/examples/javascript/hmtrp.js | 158 + upm/examples/javascript/hp20x.js | 52 + upm/examples/javascript/ht9170.js | 52 + upm/examples/javascript/htu21d.js | 45 + upm/examples/javascript/hwxpxx.js | 83 + upm/examples/javascript/hx711.js | 36 + upm/examples/javascript/ili9341.js | 77 + upm/examples/javascript/ims.js | 51 + upm/examples/javascript/ina132.js | 52 + upm/examples/javascript/isd1820.js | 66 + upm/examples/javascript/itg3200.js | 61 + upm/examples/javascript/jhd1313m1-lcd.js | 38 + upm/examples/javascript/joystick12.js | 51 + upm/examples/javascript/kx122.js | 52 + upm/examples/javascript/kxtj3.js | 54 + upm/examples/javascript/l298-stepper.js | 75 + upm/examples/javascript/l298.js | 75 + upm/examples/javascript/lcdks.js | 55 + upm/examples/javascript/ldt0028.js | 82 + upm/examples/javascript/le910.js | 166 + upm/examples/javascript/led.js | 46 + upm/examples/javascript/light.js | 37 + upm/examples/javascript/linefinder.js | 44 + upm/examples/javascript/lis2ds12.js | 65 + upm/examples/javascript/lis3dh.js | 69 + upm/examples/javascript/lm35.js | 48 + upm/examples/javascript/loudness.js | 49 + upm/examples/javascript/lsm303agr.js | 67 + upm/examples/javascript/lsm303d.js | 67 + upm/examples/javascript/lsm303dhl.js | 76 + upm/examples/javascript/lsm6ds3h.js | 72 + upm/examples/javascript/lsm6dsl.js | 72 + upm/examples/javascript/lsm9ds0.js | 74 + upm/examples/javascript/m24lr64e.js | 56 + upm/examples/javascript/max30100.js | 57 + upm/examples/javascript/maxsonarez.js | 57 + upm/examples/javascript/mb704x.js | 47 + upm/examples/javascript/mcp2515-txrx.js | 94 + upm/examples/javascript/mcp2515.js | 66 + upm/examples/javascript/mcp9808.js | 66 + upm/examples/javascript/md-stepper.js | 92 + upm/examples/javascript/md.js | 91 + upm/examples/javascript/mg811.js | 50 + upm/examples/javascript/mhz16.js | 76 + upm/examples/javascript/mic.js | 58 + upm/examples/javascript/micsv89.js | 24 + upm/examples/javascript/mma7361.js | 73 + upm/examples/javascript/mma7660.js | 85 + upm/examples/javascript/moisture.js | 52 + upm/examples/javascript/mpr121.js | 66 + upm/examples/javascript/mpu60x0.js | 68 + upm/examples/javascript/mpu9150.js | 73 + upm/examples/javascript/mpu9250.js | 73 + upm/examples/javascript/mq2.js | 57 + upm/examples/javascript/mq3.js | 57 + upm/examples/javascript/mq303a.js | 75 + upm/examples/javascript/mq4.js | 58 + upm/examples/javascript/mq5.js | 54 + upm/examples/javascript/mq6.js | 58 + upm/examples/javascript/mq7.js | 58 + upm/examples/javascript/mq8.js | 58 + upm/examples/javascript/mq9.js | 54 + upm/examples/javascript/ms5611.js | 47 + upm/examples/javascript/ms5803.js | 53 + upm/examples/javascript/nlgpio16.js | 48 + upm/examples/javascript/nmea_gps.js | 50 + upm/examples/javascript/nmea_gps_i2c.js | 60 + upm/examples/javascript/nunchuck.js | 55 + upm/examples/javascript/o2.js | 50 + upm/examples/javascript/oled_ssd1306.js | 151 + upm/examples/javascript/oled_ssd1308.js | 96 + upm/examples/javascript/oled_ssd1327.js | 191 + upm/examples/javascript/otp538u.js | 61 + upm/examples/javascript/ozwdump.js | 104 + upm/examples/javascript/p9813.js | 40 + upm/examples/javascript/pca9685.js | 83 + upm/examples/javascript/pn532-writeurl.js | 133 + upm/examples/javascript/pn532.js | 99 + upm/examples/javascript/ppd42ns.js | 49 + upm/examples/javascript/relay.js | 48 + upm/examples/javascript/rfr359f.js | 46 + upm/examples/javascript/rgbringcoder.js | 95 + upm/examples/javascript/rhusb.js | 73 + upm/examples/javascript/rn2903-p2p-rx.js | 103 + upm/examples/javascript/rn2903-p2p-tx.js | 108 + upm/examples/javascript/rn2903.js | 131 + upm/examples/javascript/rotary.js | 48 + upm/examples/javascript/rotaryencoder.js | 41 + upm/examples/javascript/rpr220.js | 47 + upm/examples/javascript/rsc.js | 45 + upm/examples/javascript/scam.js | 69 + upm/examples/javascript/sensortemplate.js | 40 + upm/examples/javascript/sht1x.js | 55 + upm/examples/javascript/si114x.js | 63 + upm/examples/javascript/slide.js | 42 + upm/examples/javascript/sm130.js | 67 + upm/examples/javascript/speaker.js | 41 + upm/examples/javascript/speaker_pwm.js | 47 + upm/examples/javascript/st7735.js | 63 + upm/examples/javascript/stepmotor.js | 66 + upm/examples/javascript/sx1276-fsk.js | 109 + upm/examples/javascript/sx1276-lora.js | 107 + upm/examples/javascript/sx6119.js | 51 + upm/examples/javascript/t3311.js | 98 + upm/examples/javascript/t8100.js | 95 + upm/examples/javascript/ta12200.js | 49 + upm/examples/javascript/tb7300.js | 99 + upm/examples/javascript/tca9548.js | 75 + upm/examples/javascript/tcs3414cs.js | 44 + upm/examples/javascript/teams.js | 67 + upm/examples/javascript/temperature.js | 42 + upm/examples/javascript/tex00.js | 74 + upm/examples/javascript/tm1637.js | 66 + upm/examples/javascript/tp401.js | 68 + upm/examples/javascript/tsl2561.js | 41 + upm/examples/javascript/ttp223.js | 40 + upm/examples/javascript/tzemt400.js | 101 + upm/examples/javascript/uln200xa.js | 69 + upm/examples/javascript/ultrasonic.js | 45 + upm/examples/javascript/urm37-uart.js | 49 + upm/examples/javascript/urm37.js | 49 + upm/examples/javascript/vcap.js | 66 + upm/examples/javascript/vdiv.js | 49 + upm/examples/javascript/veml6070.js | 41 + upm/examples/javascript/water.js | 44 + upm/examples/javascript/waterlevel.js | 48 + upm/examples/javascript/wfs.js | 65 + upm/examples/javascript/wheelencoder.js | 51 + upm/examples/javascript/wt5001.js | 127 + upm/examples/javascript/xbee.js | 137 + upm/examples/javascript/yg1006.js | 44 + upm/examples/javascript/zfm20-register.js | 135 + upm/examples/javascript/zfm20.js | 95 + upm/examples/python/a110x.py | 54 + upm/examples/python/abp.py | 54 + upm/examples/python/ad8232.py | 57 + upm/examples/python/adafruitms1438-stepper.py | 89 + upm/examples/python/adafruitms1438.py | 84 + upm/examples/python/adc121c021.py | 58 + upm/examples/python/ads1015.py | 84 + upm/examples/python/ads1115.py | 87 + upm/examples/python/adxl335.py | 81 + upm/examples/python/adxl345.py | 46 + upm/examples/python/adxrs610.py | 60 + upm/examples/python/aeotecdsb09104.py | 74 + upm/examples/python/aeotecdw2e.py | 83 + upm/examples/python/aeotecsdg2.py | 101 + upm/examples/python/aeotecss6.py | 92 + upm/examples/python/ak8975.py | 64 + upm/examples/python/apa102.py | 50 + upm/examples/python/apds9002.py | 53 + upm/examples/python/at42qt1070.py | 80 + upm/examples/python/bh1749.py | 60 + upm/examples/python/bh1750.py | 55 + upm/examples/python/bh1792.py | 58 + upm/examples/python/biss0001.py | 55 + upm/examples/python/bma220.py | 60 + upm/examples/python/bma250e.py | 67 + upm/examples/python/bmc150.py | 70 + upm/examples/python/bme280.py | 65 + upm/examples/python/bmg160.py | 67 + upm/examples/python/bmi055.py | 70 + upm/examples/python/bmi160.py | 71 + upm/examples/python/bmm150.py | 65 + upm/examples/python/bmp280.py | 63 + upm/examples/python/bmpx8x.py | 68 + upm/examples/python/bmx055.py | 76 + upm/examples/python/bno055.py | 113 + upm/examples/python/button.py | 41 + upm/examples/python/buzzer.py | 51 + upm/examples/python/cjq4435.py | 49 + upm/examples/python/collision.py | 60 + upm/examples/python/curieimu.py | 61 + upm/examples/python/cwlsxxa.py | 66 + upm/examples/python/dfrec.py | 61 + upm/examples/python/dfrorp.py | 73 + upm/examples/python/dfrph.py | 61 + upm/examples/python/ds1307.py | 64 + upm/examples/python/ds18b20.py | 70 + upm/examples/python/ds2413.py | 62 + upm/examples/python/e50hx.py | 100 + upm/examples/python/eboled.py | 43 + upm/examples/python/ecezo.py | 66 + upm/examples/python/ehr.py | 70 + upm/examples/python/eldriver.py | 60 + upm/examples/python/electromagnet.py | 63 + upm/examples/python/emg.py | 55 + upm/examples/python/enc03r.py | 66 + upm/examples/python/es08a.py | 52 + upm/examples/python/gp2y0a.py | 65 + upm/examples/python/gprs.py | 89 + upm/examples/python/grovebutton.py | 41 + upm/examples/python/grovecircularled.py | 55 + upm/examples/python/grovecollision.py | 60 + upm/examples/python/groveehr.py | 70 + upm/examples/python/groveeldriver.py | 60 + upm/examples/python/groveelectromagnet.py | 63 + upm/examples/python/groveemg.py | 55 + upm/examples/python/grovegprs.py | 89 + upm/examples/python/grovegsr.py | 56 + upm/examples/python/groveled.py | 47 + upm/examples/python/groveledbar.py | 67 + upm/examples/python/grovelight.py | 43 + upm/examples/python/grovelinefinder.py | 54 + upm/examples/python/grovemd-stepper.py | 55 + upm/examples/python/grovemd.py | 51 + upm/examples/python/grovemoisture.py | 64 + upm/examples/python/groveo2.py | 54 + upm/examples/python/groverelay.py | 50 + upm/examples/python/groverotary.py | 50 + upm/examples/python/grovescam.py | 66 + upm/examples/python/groveslide.py | 44 + upm/examples/python/grovespeaker.py | 38 + upm/examples/python/grovetemp.py | 47 + upm/examples/python/grovevdiv.py | 57 + upm/examples/python/grovewater.py | 54 + upm/examples/python/grovewfs.py | 67 + upm/examples/python/gsr.py | 56 + upm/examples/python/guvas12d.py | 57 + upm/examples/python/h3lis331dl.py | 79 + upm/examples/python/h803x.py | 111 + upm/examples/python/hcsr04.py | 52 + upm/examples/python/hdc1000.py | 57 + upm/examples/python/hdxxvxta.py | 64 + upm/examples/python/hka5.py | 67 + upm/examples/python/hm11.py | 110 + upm/examples/python/hmc5883l.py | 49 + upm/examples/python/hmtrp.py | 144 + upm/examples/python/hp20x.py | 58 + upm/examples/python/ht9170.py | 58 + upm/examples/python/htu21d.py | 44 + upm/examples/python/hwxpxx.py | 84 + upm/examples/python/ili9341.py | 79 + upm/examples/python/ims.py | 44 + upm/examples/python/ina132.py | 53 + upm/examples/python/isd1820.py | 74 + upm/examples/python/itg3200.py | 48 + upm/examples/python/jhd1313m1-lcd.py | 42 + upm/examples/python/joystick12.py | 55 + upm/examples/python/kx122.py | 64 + upm/examples/python/kxtj3.py | 61 + upm/examples/python/l298-stepper.py | 69 + upm/examples/python/l298.py | 67 + upm/examples/python/lcdks.py | 63 + upm/examples/python/ldt0028.py | 72 + upm/examples/python/le910.py | 157 + upm/examples/python/led.py | 44 + upm/examples/python/light.py | 43 + upm/examples/python/linefinder.py | 54 + upm/examples/python/lis2ds12.py | 68 + upm/examples/python/lis3dh.py | 72 + upm/examples/python/lm35.py | 54 + upm/examples/python/loudness.py | 55 + upm/examples/python/lsm303agr.py | 71 + upm/examples/python/lsm303d.py | 71 + upm/examples/python/lsm303dlh.py | 90 + upm/examples/python/lsm6ds3h.py | 74 + upm/examples/python/lsm6dsl.py | 74 + upm/examples/python/lsm9ds0.py | 76 + upm/examples/python/m24lr64e.py | 53 + upm/examples/python/mag3110.py | 62 + upm/examples/python/make_oled_pic.py | 78 + upm/examples/python/max30100.py | 71 + upm/examples/python/maxsonarez.py | 64 + upm/examples/python/mb704x.py | 56 + upm/examples/python/mcp2515-txrx.py | 99 + upm/examples/python/mcp2515.py | 79 + upm/examples/python/md-stepper.py | 55 + upm/examples/python/md.py | 51 + upm/examples/python/mg811.py | 56 + upm/examples/python/mhz16.py | 73 + upm/examples/python/mic.py | 53 + upm/examples/python/mma7361.py | 74 + upm/examples/python/mma7660.py | 73 + upm/examples/python/mma8x5x.py | 62 + upm/examples/python/moisture.py | 64 + upm/examples/python/mpr121.py | 75 + upm/examples/python/mpu60x0.py | 70 + upm/examples/python/mpu9150.py | 75 + upm/examples/python/mpu9250.py | 75 + upm/examples/python/mq2.py | 65 + upm/examples/python/mq3.py | 65 + upm/examples/python/mq303a.py | 78 + upm/examples/python/mq4.py | 65 + upm/examples/python/mq5.py | 65 + upm/examples/python/mq6.py | 65 + upm/examples/python/mq7.py | 65 + upm/examples/python/mq8.py | 65 + upm/examples/python/mq9.py | 65 + upm/examples/python/ms5803.py | 58 + upm/examples/python/nlgpio16.py | 56 + upm/examples/python/nmea_gps.py | 54 + upm/examples/python/nmea_gps_i2c.py | 55 + upm/examples/python/nunchuck.py | 70 + upm/examples/python/o2.py | 54 + upm/examples/python/oled_ssd1308.py | 100 + upm/examples/python/oled_ssd1327.py | 194 + upm/examples/python/otp538u.py | 61 + upm/examples/python/ozwdump.py | 104 + upm/examples/python/p9813.py | 48 + upm/examples/python/pn532-writeurl.py | 109 + upm/examples/python/pn532.py | 88 + upm/examples/python/ppd42ns.py | 59 + upm/examples/python/relay.py | 50 + upm/examples/python/rfr359f.py | 55 + upm/examples/python/rgbringcoder.py | 94 + upm/examples/python/rhusb.py | 74 + upm/examples/python/rn2903-p2p-rx.py | 108 + upm/examples/python/rn2903-p2p-tx.py | 114 + upm/examples/python/rn2903.py | 129 + upm/examples/python/rotary.py | 50 + upm/examples/python/rotaryencoder.py | 52 + upm/examples/python/rpr220.py | 59 + upm/examples/python/rsc.py | 60 + upm/examples/python/scam.py | 66 + upm/examples/python/sensortemplate.py | 40 + upm/examples/python/sht1x.py | 58 + upm/examples/python/si114x.py | 69 + upm/examples/python/slide.py | 44 + upm/examples/python/sm130.py | 68 + upm/examples/python/speaker.py | 38 + upm/examples/python/speaker_pwm.py | 44 + upm/examples/python/stepmotor.py | 68 + upm/examples/python/sx1276-fsk.py | 94 + upm/examples/python/sx1276-lora.py | 93 + upm/examples/python/sx6119.py | 55 + upm/examples/python/t3311.py | 95 + upm/examples/python/t8100.py | 102 + upm/examples/python/ta12200.py | 57 + upm/examples/python/tb7300.py | 101 + upm/examples/python/tcs3414cs.py | 58 + upm/examples/python/tcs37727.py | 63 + upm/examples/python/teams.py | 70 + upm/examples/python/temperature.py | 47 + upm/examples/python/tex00.py | 70 + upm/examples/python/tm1637.py | 60 + upm/examples/python/tmp006.py | 60 + upm/examples/python/tp401.py | 59 + upm/examples/python/tsl2561.py | 51 + upm/examples/python/ttp223.py | 45 + upm/examples/python/tzemt400.py | 87 + upm/examples/python/uln200xa.py | 69 + upm/examples/python/urm37-uart.py | 55 + upm/examples/python/urm37.py | 55 + upm/examples/python/vcap.py | 71 + upm/examples/python/vdiv.py | 57 + upm/examples/python/veml6070.py | 52 + upm/examples/python/water.py | 54 + upm/examples/python/waterlevel.py | 57 + upm/examples/python/wfs.py | 68 + upm/examples/python/wheelencoder.py | 55 + upm/examples/python/wt5001.py | 107 + upm/examples/python/xbee.py | 119 + upm/examples/python/yg1006.py | 55 + upm/examples/python/zfm20-register.py | 132 + upm/examples/python/zfm20.py | 93 + upm/include/external/json/json.hpp | 14874 +++++++++++ upm/include/fti/upm_acceleration.h | 45 + upm/include/fti/upm_angle.h | 42 + upm/include/fti/upm_audio.h | 44 + upm/include/fti/upm_binary.h | 43 + upm/include/fti/upm_buttons.h | 46 + upm/include/fti/upm_compass.h | 43 + upm/include/fti/upm_distance.h | 43 + upm/include/fti/upm_ec.h | 48 + upm/include/fti/upm_gyroscope.h | 42 + upm/include/fti/upm_heart_rate.h | 43 + upm/include/fti/upm_humidity.h | 42 + upm/include/fti/upm_joystick.h | 54 + upm/include/fti/upm_light.h | 48 + upm/include/fti/upm_magnetometer.h | 42 + upm/include/fti/upm_moisture.h | 33 + upm/include/fti/upm_orp.h | 48 + upm/include/fti/upm_ph.h | 48 + upm/include/fti/upm_potentiometer.h | 42 + upm/include/fti/upm_pressure.h | 42 + upm/include/fti/upm_raw.h | 48 + upm/include/fti/upm_rotaryencoder.h | 46 + upm/include/fti/upm_sensor.h | 45 + upm/include/fti/upm_servo.h | 41 + upm/include/fti/upm_stream.h | 45 + upm/include/fti/upm_switch.h | 42 + upm/include/fti/upm_temperature.h | 45 + upm/include/fti/upm_touch.h | 36 + upm/include/fti/upm_vibration.h | 40 + upm/include/fti/upm_voltage.h | 47 + upm/include/upm.h | 44 + upm/include/upm_fti.h | 145 + upm/include/upm_internal.h | 27 + upm/include/upm_math.h | 46 + upm/include/upm_platform.h | 46 + upm/include/upm_types.h | 60 + upm/scripts/build-android.sh | 161 + upm/scripts/build-doc.sh | 35 + upm/scripts/run-cmake.sh | 25 + upm/scripts/sonar-scan.sh | 94 + upm/src/CMakeLists.txt | 947 + upm/src/a110x/CMakeLists.txt | 9 + upm/src/a110x/a110x.c | 82 + upm/src/a110x/a110x.cxx | 75 + upm/src/a110x/a110x.h | 97 + upm/src/a110x/a110x.hpp | 103 + upm/src/a110x/a110x.i | 18 + upm/src/a110x/a110x.json | 72 + upm/src/a110x/a110x_fti.c | 74 + upm/src/abp/CMakeLists.txt | 8 + upm/src/abp/abp.c | 144 + upm/src/abp/abp.cxx | 70 + upm/src/abp/abp.h | 141 + upm/src/abp/abp.hpp | 127 + upm/src/abp/abp.i | 14 + upm/src/abp/abp.json | 69 + upm/src/ad8232/CMakeLists.txt | 9 + upm/src/ad8232/ad8232.c | 83 + upm/src/ad8232/ad8232.cxx | 52 + upm/src/ad8232/ad8232.h | 82 + upm/src/ad8232/ad8232.hpp | 111 + upm/src/ad8232/ad8232.json | 45 + upm/src/ad8232/ad8232_fti.c | 92 + upm/src/adafruitms1438/CMakeLists.txt | 5 + upm/src/adafruitms1438/adafruitms1438.cxx | 310 + upm/src/adafruitms1438/adafruitms1438.hpp | 255 + upm/src/adafruitms1438/adafruitms1438.json | 48 + upm/src/adafruitss/CMakeLists.txt | 5 + upm/src/adafruitss/adafruitss.cxx | 155 + upm/src/adafruitss/adafruitss.hpp | 117 + upm/src/adafruitss/adafruitss.json | 47 + upm/src/adc121c021/CMakeLists.txt | 5 + upm/src/adc121c021/adc121c021.cxx | 269 + upm/src/adc121c021/adc121c021.hpp | 314 + upm/src/adc121c021/adc121c021.i | 20 + upm/src/adc121c021/adc121c021.json | 47 + upm/src/adis16448/CMakeLists.txt | 5 + upm/src/adis16448/adis16448.cxx | 247 + upm/src/adis16448/adis16448.hpp | 173 + upm/src/adis16448/adis16448.json | 45 + upm/src/ads1x15/CMakeLists.txt | 9 + upm/src/ads1x15/ads1015.cxx | 169 + upm/src/ads1x15/ads1015.hpp | 186 + upm/src/ads1x15/ads1115.cxx | 103 + upm/src/ads1x15/ads1115.hpp | 146 + upm/src/ads1x15/ads1x15.cxx | 188 + upm/src/ads1x15/ads1x15.hpp | 424 + upm/src/ads1x15/ads1x15.i | 35 + upm/src/ads1x15/ads1x15.json | 87 + upm/src/adxl335/CMakeLists.txt | 5 + upm/src/adxl335/adxl335.cxx | 121 + upm/src/adxl335/adxl335.hpp | 148 + upm/src/adxl335/adxl335.i | 61 + upm/src/adxl335/adxl335.json | 46 + upm/src/adxl345/CMakeLists.txt | 5 + upm/src/adxl345/adxl345.cxx | 167 + upm/src/adxl345/adxl345.hpp | 111 + upm/src/adxl345/adxl345.i | 73 + upm/src/adxl345/adxl345.json | 46 + upm/src/adxrs610/CMakeLists.txt | 5 + upm/src/adxrs610/adxrs610.cxx | 99 + upm/src/adxrs610/adxrs610.hpp | 175 + upm/src/adxrs610/adxrs610.json | 46 + upm/src/am2315/CMakeLists.txt | 5 + upm/src/am2315/am2315.cpp | 318 + upm/src/am2315/am2315.hpp | 201 + upm/src/am2315/am2315.json | 47 + upm/src/apa102/CMakeLists.txt | 8 + upm/src/apa102/apa102.c | 140 + upm/src/apa102/apa102.cxx | 197 + upm/src/apa102/apa102.h | 133 + upm/src/apa102/apa102.hpp | 175 + upm/src/apa102/apa102.i | 52 + upm/src/apa102/apa102.json | 45 + upm/src/apa102/apa102_fti.c | 67 + upm/src/apds9002/CMakeLists.txt | 5 + upm/src/apds9002/apds9002.cxx | 51 + upm/src/apds9002/apds9002.hpp | 79 + upm/src/apds9002/apds9002.json | 61 + upm/src/apds9930/CMakeLists.txt | 7 + upm/src/apds9930/apds9930.cxx | 84 + upm/src/apds9930/apds9930.hpp | 93 + upm/src/apds9930/apds9930.json | 45 + upm/src/at42qt1070/CMakeLists.txt | 5 + upm/src/at42qt1070/at42qt1070.cxx | 260 + upm/src/at42qt1070/at42qt1070.hpp | 314 + upm/src/at42qt1070/at42qt1070.json | 57 + upm/src/autobox.i | 12 + upm/src/bacnetmstp/CMakeLists.txt | 11 + upm/src/bacnetmstp/bacnetmstp.cxx | 939 + upm/src/bacnetmstp/bacnetmstp.hpp | 754 + upm/src/bacnetmstp/bacnetmstp.i | 16 + upm/src/bacnetmstp/bacnetutil.cxx | 927 + upm/src/bacnetmstp/bacnetutil.hpp | 559 + upm/src/bacnetmstp/device-client.c | 1028 + upm/src/bacnetmstp/device.h | 466 + upm/src/bacnetmstp/timer.h | 65 + upm/src/bh1749/CMakeLists.txt | 8 + upm/src/bh1749/bh1749.c | 702 + upm/src/bh1749/bh1749.cxx | 304 + upm/src/bh1749/bh1749.h | 429 + upm/src/bh1749/bh1749.hpp | 345 + upm/src/bh1749/bh1749.i | 18 + upm/src/bh1749/bh1749.json | 49 + upm/src/bh1749/bh1749_registers.h | 160 + upm/src/bh1750/CMakeLists.txt | 9 + upm/src/bh1750/bh1750.c | 307 + upm/src/bh1750/bh1750.cxx | 99 + upm/src/bh1750/bh1750.h | 145 + upm/src/bh1750/bh1750.hpp | 135 + upm/src/bh1750/bh1750.i | 16 + upm/src/bh1750/bh1750.json | 50 + upm/src/bh1750/bh1750_defs.h | 71 + upm/src/bh1750/bh1750_fti.c | 112 + upm/src/bh1792/CMakeLists.txt | 8 + upm/src/bh1792/bh1792.c | 889 + upm/src/bh1792/bh1792.cxx | 305 + upm/src/bh1792/bh1792.h | 411 + upm/src/bh1792/bh1792.hpp | 324 + upm/src/bh1792/bh1792.i | 28 + upm/src/bh1792/bh1792.json | 62 + upm/src/bh1792/bh1792glc_registers.h | 129 + upm/src/binding.gyp.in | 37 + upm/src/biss0001/CMakeLists.txt | 9 + upm/src/biss0001/biss0001.c | 77 + upm/src/biss0001/biss0001.cxx | 50 + upm/src/biss0001/biss0001.h | 76 + upm/src/biss0001/biss0001.hpp | 99 + upm/src/biss0001/biss0001.json | 73 + upm/src/biss0001/biss0001_fti.c | 82 + upm/src/bma220/CMakeLists.txt | 5 + upm/src/bma220/bma220.cxx | 518 + upm/src/bma220/bma220.hpp | 824 + upm/src/bma220/bma220.i | 54 + upm/src/bma220/bma220.json | 59 + upm/src/bma250e/CMakeLists.txt | 9 + upm/src/bma250e/bma250e.c | 967 + upm/src/bma250e/bma250e.cxx | 350 + upm/src/bma250e/bma250e.h | 635 + upm/src/bma250e/bma250e.hpp | 582 + upm/src/bma250e/bma250e.i | 56 + upm/src/bma250e/bma250e.json | 74 + upm/src/bma250e/bma250e_defs.h | 935 + upm/src/bma250e/bma250e_fti.c | 113 + upm/src/bmg160/CMakeLists.txt | 9 + upm/src/bmg160/bmg160.c | 777 + upm/src/bmg160/bmg160.cxx | 294 + upm/src/bmg160/bmg160.h | 519 + upm/src/bmg160/bmg160.hpp | 480 + upm/src/bmg160/bmg160.i | 56 + upm/src/bmg160/bmg160.json | 61 + upm/src/bmg160/bmg160_defs.h | 793 + upm/src/bmg160/bmg160_fti.c | 106 + upm/src/bmi160/CMakeLists.txt | 9 + upm/src/bmi160/bmi160.c | 588 + upm/src/bmi160/bmi160.cxx | 144 + upm/src/bmi160/bmi160.h | 234 + upm/src/bmi160/bmi160.hpp | 249 + upm/src/bmi160/bmi160.i | 48 + upm/src/bmi160/bmi160.json | 66 + upm/src/bmi160/bmi160_defs.h | 51 + upm/src/bmi160/bosch_bmi160.c | 20468 ++++++++++++++++ upm/src/bmi160/bosch_bmi160.h | 12048 +++++++++ upm/src/bmi160/license.txt | 55 + upm/src/bmm150/CMakeLists.txt | 9 + upm/src/bmm150/bmm150.c | 803 + upm/src/bmm150/bmm150.cxx | 201 + upm/src/bmm150/bmm150.h | 374 + upm/src/bmm150/bmm150.hpp | 345 + upm/src/bmm150/bmm150.i | 57 + upm/src/bmm150/bmm150.json | 46 + upm/src/bmm150/bmm150_defs.h | 272 + upm/src/bmm150/bmm150_fti.c | 106 + upm/src/bmm150/license.txt | 56 + upm/src/bmp280/CMakeLists.txt | 9 + upm/src/bmp280/bme280.cxx | 56 + upm/src/bmp280/bme280.hpp | 126 + upm/src/bmp280/bmp280.c | 780 + upm/src/bmp280/bmp280.cxx | 152 + upm/src/bmp280/bmp280.h | 346 + upm/src/bmp280/bmp280.hpp | 277 + upm/src/bmp280/bmp280.i | 47 + upm/src/bmp280/bmp280.json | 85 + upm/src/bmp280/bmp280_regs.h | 290 + upm/src/bmpx8x/CMakeLists.txt | 10 + upm/src/bmpx8x/bmpx8x.c | 360 + upm/src/bmpx8x/bmpx8x.cxx | 120 + upm/src/bmpx8x/bmpx8x.h | 230 + upm/src/bmpx8x/bmpx8x.hpp | 249 + upm/src/bmpx8x/bmpx8x.i | 28 + upm/src/bmpx8x/bmpx8x.json | 49 + upm/src/bmpx8x/bmpx8x_defs.h | 110 + upm/src/bmpx8x/bmpx8x_fti.c | 137 + upm/src/bmx055/CMakeLists.txt | 5 + upm/src/bmx055/bmc150.cxx | 116 + upm/src/bmx055/bmc150.hpp | 200 + upm/src/bmx055/bmi055.cxx | 118 + upm/src/bmx055/bmi055.hpp | 198 + upm/src/bmx055/bmx055.cxx | 168 + upm/src/bmx055/bmx055.hpp | 254 + upm/src/bmx055/bmx055.i | 65 + upm/src/bmx055/bmx055.json | 49 + upm/src/bno055/CMakeLists.txt | 8 + upm/src/bno055/bno055.c | 1057 + upm/src/bno055/bno055.cxx | 453 + upm/src/bno055/bno055.h | 717 + upm/src/bno055/bno055.hpp | 704 + upm/src/bno055/bno055.i | 53 + upm/src/bno055/bno055.json | 48 + upm/src/bno055/bno055_regs.h | 825 + upm/src/button/CMakeLists.txt | 7 + upm/src/button/button.c | 84 + upm/src/button/button.cxx | 76 + upm/src/button/button.h | 97 + upm/src/button/button.hpp | 103 + upm/src/button/button.i | 18 + upm/src/button/button.json | 32 + upm/src/buzzer/CMakeLists.txt | 9 + upm/src/buzzer/buzzer.c | 141 + upm/src/buzzer/buzzer.cxx | 75 + upm/src/buzzer/buzzer.h | 115 + upm/src/buzzer/buzzer.hpp | 127 + upm/src/buzzer/buzzer.i | 15 + upm/src/buzzer/buzzer.json | 40 + upm/src/buzzer/buzzer_tones.h | 37 + upm/src/carrays_float.i | 8 + upm/src/carrays_int16_t.i | 8 + upm/src/carrays_uint16_t.i | 33 + upm/src/carrays_uint32_t.i | 54 + upm/src/carrays_uint8_t.i | 33 + upm/src/cjq4435/CMakeLists.txt | 8 + upm/src/cjq4435/cjq4435.c | 174 + upm/src/cjq4435/cjq4435.cxx | 91 + upm/src/cjq4435/cjq4435.h | 136 + upm/src/cjq4435/cjq4435.hpp | 129 + upm/src/cjq4435/cjq4435.json | 46 + upm/src/collision/CMakeLists.txt | 9 + upm/src/collision/collision.c | 66 + upm/src/collision/collision.cxx | 53 + upm/src/collision/collision.h | 75 + upm/src/collision/collision.hpp | 73 + upm/src/collision/collision.json | 45 + upm/src/collision/collision_fti.c | 78 + upm/src/common_top.i | 60 + upm/src/curieimu/CMakeLists.txt | 7 + upm/src/curieimu/curieimu.cpp | 457 + upm/src/curieimu/curieimu.hpp | 307 + upm/src/curieimu/curieimu.i | 58 + upm/src/curieimu/curieimu.json | 38 + upm/src/cwlsxxa/CMakeLists.txt | 5 + upm/src/cwlsxxa/cwlsxxa.cxx | 183 + upm/src/cwlsxxa/cwlsxxa.hpp | 194 + upm/src/cwlsxxa/cwlsxxa.i | 14 + upm/src/cwlsxxa/cwlsxxa.json | 59 + upm/src/dfrec/CMakeLists.txt | 14 + upm/src/dfrec/dfrec.c | 286 + upm/src/dfrec/dfrec.cxx | 109 + upm/src/dfrec/dfrec.h | 226 + upm/src/dfrec/dfrec.hpp | 191 + upm/src/dfrec/dfrec.i | 17 + upm/src/dfrec/dfrec.json | 39 + upm/src/dfrec/dfrec_fti.c | 105 + upm/src/dfrorp/CMakeLists.txt | 9 + upm/src/dfrorp/dfrorp.c | 171 + upm/src/dfrorp/dfrorp.cxx | 86 + upm/src/dfrorp/dfrorp.h | 166 + upm/src/dfrorp/dfrorp.hpp | 164 + upm/src/dfrorp/dfrorp.i | 17 + upm/src/dfrorp/dfrorp.json | 39 + upm/src/dfrorp/dfrorp_fti.c | 99 + upm/src/dfrph/CMakeLists.txt | 9 + upm/src/dfrph/dfrph.c | 117 + upm/src/dfrph/dfrph.cxx | 76 + upm/src/dfrph/dfrph.h | 120 + upm/src/dfrph/dfrph.hpp | 145 + upm/src/dfrph/dfrph.json | 40 + upm/src/dfrph/dfrph_fti.c | 118 + upm/src/doxy2swig.py | 457 + upm/src/ds1307/CMakeLists.txt | 5 + upm/src/ds1307/ds1307.cxx | 200 + upm/src/ds1307/ds1307.hpp | 194 + upm/src/ds1307/ds1307.i | 17 + upm/src/ds1307/ds1307.json | 41 + upm/src/ds1808lc/CMakeLists.txt | 5 + upm/src/ds1808lc/ds1808lc.cxx | 133 + upm/src/ds1808lc/ds1808lc.hpp | 80 + upm/src/ds1808lc/ds1808lc.i | 33 + upm/src/ds1808lc/ds1808lc.json | 39 + upm/src/ds1808lc/mraa-utils.cxx | 75 + upm/src/ds1808lc/mraa-utils.hpp | 37 + upm/src/ds18b20/CMakeLists.txt | 11 + upm/src/ds18b20/ds18b20.c | 396 + upm/src/ds18b20/ds18b20.cxx | 120 + upm/src/ds18b20/ds18b20.h | 148 + upm/src/ds18b20/ds18b20.hpp | 219 + upm/src/ds18b20/ds18b20.i | 18 + upm/src/ds18b20/ds18b20.json | 39 + upm/src/ds18b20/ds18b20_defs.h | 63 + upm/src/ds18b20/ds18b20_fti.c | 120 + upm/src/ds2413/CMakeLists.txt | 7 + upm/src/ds2413/ds2413.cxx | 165 + upm/src/ds2413/ds2413.hpp | 175 + upm/src/ds2413/ds2413.i | 16 + upm/src/ds2413/ds2413.json | 39 + upm/src/e50hx/CMakeLists.txt | 8 + upm/src/e50hx/e50hx.cxx | 129 + upm/src/e50hx/e50hx.hpp | 321 + upm/src/e50hx/e50hx.i | 30 + upm/src/e50hx/e50hx.json | 41 + upm/src/ecezo/CMakeLists.txt | 9 + upm/src/ecezo/ecezo.c | 674 + upm/src/ecezo/ecezo.cxx | 146 + upm/src/ecezo/ecezo.h | 267 + upm/src/ecezo/ecezo.hpp | 241 + upm/src/ecezo/ecezo.i | 16 + upm/src/ecezo/ecezo.json | 43 + upm/src/ecezo/ecezo_defs.h | 45 + upm/src/ecezo/ecezo_fti.c | 88 + upm/src/ecs1030/CMakeLists.txt | 5 + upm/src/ecs1030/ecs1030.cxx | 100 + upm/src/ecs1030/ecs1030.hpp | 129 + upm/src/ecs1030/ecs1030.i | 14 + upm/src/ecs1030/ecs1030.json | 39 + upm/src/ehr/CMakeLists.txt | 5 + upm/src/ehr/ehr.cxx | 130 + upm/src/ehr/ehr.hpp | 126 + upm/src/ehr/ehr.i | 16 + upm/src/ehr/ehr.json | 40 + upm/src/eldriver/CMakeLists.txt | 5 + upm/src/eldriver/eldriver.cxx | 62 + upm/src/eldriver/eldriver.hpp | 78 + upm/src/eldriver/eldriver.json | 40 + upm/src/electromagnet/CMakeLists.txt | 5 + upm/src/electromagnet/electromagnet.cxx | 62 + upm/src/electromagnet/electromagnet.hpp | 77 + upm/src/electromagnet/electromagnet.json | 41 + upm/src/emg/CMakeLists.txt | 8 + upm/src/emg/emg.c | 136 + upm/src/emg/emg.cxx | 69 + upm/src/emg/emg.h | 141 + upm/src/emg/emg.hpp | 83 + upm/src/emg/emg.json | 38 + upm/src/emg/emg_fti.c | 119 + upm/src/enc03r/CMakeLists.txt | 9 + upm/src/enc03r/enc03r.c | 159 + upm/src/enc03r/enc03r.cxx | 79 + upm/src/enc03r/enc03r.h | 159 + upm/src/enc03r/enc03r.hpp | 140 + upm/src/enc03r/enc03r.json | 40 + upm/src/enc03r/enc03r_fti.c | 102 + upm/src/flex/CMakeLists.txt | 8 + upm/src/flex/flex.c | 136 + upm/src/flex/flex.cxx | 52 + upm/src/flex/flex.h | 141 + upm/src/flex/flex.hpp | 81 + upm/src/flex/flex.json | 39 + upm/src/flex/flex_fti.c | 119 + upm/src/gas/CMakeLists.txt | 8 + upm/src/gas/README.txt | 8 + upm/src/gas/gas.cxx | 98 + upm/src/gas/gas.hpp | 104 + upm/src/gas/gas.i | 75 + upm/src/gas/gas.json | 275 + upm/src/gas/mq2.cxx | 33 + upm/src/gas/mq2.hpp | 75 + upm/src/gas/mq3.cxx | 33 + upm/src/gas/mq3.hpp | 74 + upm/src/gas/mq4.cxx | 35 + upm/src/gas/mq4.hpp | 76 + upm/src/gas/mq5.cxx | 33 + upm/src/gas/mq5.hpp | 75 + upm/src/gas/mq6.cxx | 35 + upm/src/gas/mq6.hpp | 76 + upm/src/gas/mq7.cxx | 35 + upm/src/gas/mq7.hpp | 76 + upm/src/gas/mq8.cxx | 35 + upm/src/gas/mq8.hpp | 76 + upm/src/gas/mq9.cxx | 33 + upm/src/gas/mq9.hpp | 73 + upm/src/gas/mqx.c | 136 + upm/src/gas/mqx.h | 158 + upm/src/gas/mqx_fti.c | 122 + upm/src/gas/tp401.cxx | 39 + upm/src/gas/tp401.hpp | 90 + upm/src/gp2y0a/CMakeLists.txt | 9 + upm/src/gp2y0a/gp2y0a.c | 80 + upm/src/gp2y0a/gp2y0a.cxx | 69 + upm/src/gp2y0a/gp2y0a.h | 80 + upm/src/gp2y0a/gp2y0a.hpp | 88 + upm/src/gp2y0a/gp2y0a.json | 39 + upm/src/gp2y0a/gp2y0a_fti.c | 80 + upm/src/gprs/CMakeLists.txt | 5 + upm/src/gprs/gprs.cxx | 78 + upm/src/gprs/gprs.hpp | 155 + upm/src/gprs/gprs.i | 16 + upm/src/gprs/gprs.json | 40 + upm/src/groups.md | 455 + upm/src/grove/CMakeLists.txt | 5 + upm/src/grove/grove.cxx | 1 + upm/src/grove/grove.hpp | 34 + upm/src/grove/grove.i | 33 + upm/src/grove/grove.json | 381 + upm/src/grove/grovebase.hpp | 49 + upm/src/grove/grovebutton.cxx | 75 + upm/src/grove/grovebutton.hpp | 100 + upm/src/grove/groveled.cxx | 67 + upm/src/grove/groveled.hpp | 98 + upm/src/grove/grovelight.cxx | 63 + upm/src/grove/grovelight.hpp | 84 + upm/src/grove/groverelay.cxx | 69 + upm/src/grove/groverelay.hpp | 97 + upm/src/grove/groverotary.cxx | 79 + upm/src/grove/groverotary.hpp | 108 + upm/src/grove/groveslide.cxx | 68 + upm/src/grove/groveslide.hpp | 89 + upm/src/grove/grovetemp.cxx | 68 + upm/src/grove/grovetemp.hpp | 94 + upm/src/grovecollision/CMakeLists.txt | 5 + upm/src/grovecollision/grovecollision.cxx | 53 + upm/src/grovecollision/grovecollision.hpp | 74 + upm/src/grovecollision/grovecollision.json | 41 + upm/src/groveehr/CMakeLists.txt | 5 + upm/src/groveehr/groveehr.cxx | 130 + upm/src/groveehr/groveehr.hpp | 128 + upm/src/groveehr/groveehr.i | 16 + upm/src/groveehr/groveehr.json | 40 + upm/src/groveeldriver/CMakeLists.txt | 5 + upm/src/groveeldriver/groveeldriver.cxx | 62 + upm/src/groveeldriver/groveeldriver.hpp | 80 + upm/src/groveeldriver/groveeldriver.json | 40 + upm/src/groveelectromagnet/CMakeLists.txt | 5 + .../groveelectromagnet/groveelectromagnet.cxx | 62 + .../groveelectromagnet/groveelectromagnet.hpp | 79 + .../groveelectromagnet.json | 41 + upm/src/groveemg/CMakeLists.txt | 5 + upm/src/groveemg/groveemg.cxx | 69 + upm/src/groveemg/groveemg.hpp | 84 + upm/src/groveemg/groveemg.json | 37 + upm/src/grovegprs/CMakeLists.txt | 5 + upm/src/grovegprs/grovegprs.cxx | 78 + upm/src/grovegprs/grovegprs.hpp | 156 + upm/src/grovegprs/grovegprs.i | 16 + upm/src/grovegprs/grovegprs.json | 40 + upm/src/grovegsr/CMakeLists.txt | 5 + upm/src/grovegsr/grovegsr.cxx | 70 + upm/src/grovegsr/grovegsr.hpp | 86 + upm/src/grovegsr/grovegsr.json | 38 + upm/src/grovelinefinder/CMakeLists.txt | 5 + upm/src/grovelinefinder/grovelinefinder.cxx | 59 + upm/src/grovelinefinder/grovelinefinder.hpp | 86 + upm/src/grovelinefinder/grovelinefinder.json | 40 + upm/src/grovemd/CMakeLists.txt | 5 + upm/src/grovemd/grovemd.cxx | 244 + upm/src/grovemd/grovemd.hpp | 257 + upm/src/grovemoisture/CMakeLists.txt | 5 + upm/src/grovemoisture/grovemoisture.cxx | 48 + upm/src/grovemoisture/grovemoisture.hpp | 83 + upm/src/grovemoisture/grovemoisture.json | 38 + upm/src/groveo2/CMakeLists.txt | 5 + upm/src/groveo2/groveo2.cxx | 56 + upm/src/groveo2/groveo2.hpp | 75 + upm/src/groveo2/groveo2.json | 39 + upm/src/grovescam/CMakeLists.txt | 5 + upm/src/grovescam/grovescam.cxx | 490 + upm/src/grovescam/grovescam.hpp | 196 + upm/src/grovescam/grovescam.i | 16 + upm/src/grovescam/grovescam.json | 39 + upm/src/grovespeaker/CMakeLists.txt | 5 + upm/src/grovespeaker/grovespeaker.cxx | 150 + upm/src/grovespeaker/grovespeaker.hpp | 105 + upm/src/grovespeaker/grovespeaker.json | 40 + upm/src/groveultrasonic/CMakeLists.txt | 5 + upm/src/groveultrasonic/groveultrasonic.cxx | 102 + upm/src/groveultrasonic/groveultrasonic.hpp | 123 + upm/src/groveultrasonic/groveultrasonic.i | 16 + upm/src/groveultrasonic/groveultrasonic.json | 40 + upm/src/grovevdiv/CMakeLists.txt | 5 + upm/src/grovevdiv/grovevdiv.cxx | 68 + upm/src/grovevdiv/grovevdiv.hpp | 100 + upm/src/grovevdiv/grovevdiv.json | 37 + upm/src/grovewater/CMakeLists.txt | 5 + upm/src/grovewater/grovewater.cxx | 54 + upm/src/grovewater/grovewater.hpp | 76 + upm/src/grovewater/grovewater.json | 39 + upm/src/grovewfs/CMakeLists.txt | 5 + upm/src/grovewfs/grovewfs.cxx | 124 + upm/src/grovewfs/grovewfs.hpp | 142 + upm/src/grovewfs/grovewfs.i | 16 + upm/src/grovewfs/grovewfs.json | 40 + upm/src/gsr/CMakeLists.txt | 8 + upm/src/gsr/gsr.c | 136 + upm/src/gsr/gsr.cxx | 67 + upm/src/gsr/gsr.h | 141 + upm/src/gsr/gsr.hpp | 84 + upm/src/gsr/gsr.json | 39 + upm/src/gsr/gsr_fti.c | 119 + upm/src/guvas12d/CMakeLists.txt | 9 + upm/src/guvas12d/guvas12d.c | 128 + upm/src/guvas12d/guvas12d.cxx | 93 + upm/src/guvas12d/guvas12d.h | 108 + upm/src/guvas12d/guvas12d.hpp | 123 + upm/src/guvas12d/guvas12d.json | 40 + upm/src/guvas12d/guvas12d_fti.c | 119 + upm/src/h3lis331dl/CMakeLists.txt | 5 + upm/src/h3lis331dl/h3lis331dl.cxx | 622 + upm/src/h3lis331dl/h3lis331dl.hpp | 638 + upm/src/h3lis331dl/h3lis331dl.i | 27 + upm/src/h3lis331dl/h3lis331dl.json | 39 + upm/src/h803x/CMakeLists.txt | 10 + upm/src/h803x/h803x.cxx | 356 + upm/src/h803x/h803x.hpp | 547 + upm/src/h803x/h803x.i | 14 + upm/src/h803x/h803x.json | 38 + upm/src/hcsr04/CMakeLists.txt | 8 + upm/src/hcsr04/hcsr04.c | 127 + upm/src/hcsr04/hcsr04.cxx | 51 + upm/src/hcsr04/hcsr04.h | 84 + upm/src/hcsr04/hcsr04.hpp | 78 + upm/src/hcsr04/hcsr04.i | 15 + upm/src/hcsr04/hcsr04.json | 38 + upm/src/hdc1000/CMakeLists.txt | 5 + upm/src/hdc1000/hdc1000.cpp | 135 + upm/src/hdc1000/hdc1000.hpp | 148 + upm/src/hdc1000/hdc1000.json | 38 + upm/src/hdxxvxta/CMakeLists.txt | 5 + upm/src/hdxxvxta/hdxxvxta.cxx | 122 + upm/src/hdxxvxta/hdxxvxta.hpp | 170 + upm/src/hdxxvxta/hdxxvxta.i | 14 + upm/src/hdxxvxta/hdxxvxta.json | 35 + upm/src/hka5/CMakeLists.txt | 9 + upm/src/hka5/hka5.c | 265 + upm/src/hka5/hka5.cxx | 80 + upm/src/hka5/hka5.h | 140 + upm/src/hka5/hka5.hpp | 138 + upm/src/hka5/hka5.i | 14 + upm/src/hka5/hka5.json | 37 + upm/src/hka5/hka5_fti.c | 67 + upm/src/hlg150h/CMakeLists.txt | 5 + upm/src/hlg150h/hlg150h.cxx | 80 + upm/src/hlg150h/hlg150h.hpp | 83 + upm/src/hlg150h/hlg150h.i | 19 + upm/src/hlg150h/hlg150h.json | 42 + upm/src/hlg150h/mraa-utils.cxx | 49 + upm/src/hlg150h/mraa-utils.hpp | 37 + upm/src/hm11/CMakeLists.txt | 5 + upm/src/hm11/hm11.cxx | 166 + upm/src/hm11/hm11.hpp | 144 + upm/src/hm11/hm11.i | 23 + upm/src/hm11/hm11.json | 39 + upm/src/hmc5883l/CMakeLists.txt | 11 + upm/src/hmc5883l/hmc5883l.c | 246 + upm/src/hmc5883l/hmc5883l.cxx | 81 + upm/src/hmc5883l/hmc5883l.h | 132 + upm/src/hmc5883l/hmc5883l.hpp | 114 + upm/src/hmc5883l/hmc5883l.i | 49 + upm/src/hmc5883l/hmc5883l.json | 39 + upm/src/hmc5883l/hmc5883l_fti.c | 87 + upm/src/hmtrp/CMakeLists.txt | 5 + upm/src/hmtrp/hmtrp.cxx | 503 + upm/src/hmtrp/hmtrp.hpp | 270 + upm/src/hmtrp/hmtrp.i | 55 + upm/src/hmtrp/hmtrp.json | 40 + upm/src/hp20x/CMakeLists.txt | 5 + upm/src/hp20x/hp20x.cxx | 287 + upm/src/hp20x/hp20x.hpp | 385 + upm/src/hp20x/hp20x.json | 40 + upm/src/ht9170/CMakeLists.txt | 5 + upm/src/ht9170/ht9170.cxx | 124 + upm/src/ht9170/ht9170.hpp | 97 + upm/src/ht9170/ht9170.json | 39 + upm/src/htu21d/CMakeLists.txt | 5 + upm/src/htu21d/htu21d.cpp | 278 + upm/src/htu21d/htu21d.hpp | 220 + upm/src/htu21d/htu21d.i | 16 + upm/src/htu21d/htu21d.json | 32 + upm/src/hwxpxx/CMakeLists.txt | 10 + upm/src/hwxpxx/hwxpxx.cxx | 379 + upm/src/hwxpxx/hwxpxx.hpp | 283 + upm/src/hwxpxx/hwxpxx.i | 14 + upm/src/hwxpxx/hwxpxx.json | 40 + upm/src/hx711/CMakeLists.txt | 5 + upm/src/hx711/hx711.cxx | 144 + upm/src/hx711/hx711.hpp | 138 + upm/src/hx711/hx711.i | 14 + upm/src/hx711/hx711.json | 37 + upm/src/ili9341/CMakeLists.txt | 5 + upm/src/ili9341/ili9341.cxx | 487 + upm/src/ili9341/ili9341.hpp | 343 + upm/src/ili9341/ili9341.i | 18 + upm/src/ili9341/ili9341.json | 38 + upm/src/ili9341/ili9341_gfx.cxx | 750 + upm/src/ili9341/ili9341_gfx.hpp | 412 + upm/src/ili9341/license.txt | 24 + upm/src/ims/CMakeLists.txt | 9 + upm/src/ims/ims.c | 230 + upm/src/ims/ims.cxx | 111 + upm/src/ims/ims.h | 152 + upm/src/ims/ims.hpp | 147 + upm/src/ims/ims.i | 16 + upm/src/ims/ims.json | 39 + upm/src/ims/ims_defs.h | 64 + upm/src/ims/ims_fti.c | 146 + upm/src/ina132/CMakeLists.txt | 5 + upm/src/ina132/ina132.cxx | 65 + upm/src/ina132/ina132.hpp | 81 + upm/src/ina132/ina132.json | 38 + upm/src/interfaces/CMakeLists.txt | 22 + upm/src/interfaces/iADC.hpp | 47 + upm/src/interfaces/iCO2Sensor.hpp | 43 + upm/src/interfaces/iHumiditySensor.hpp | 42 + upm/src/interfaces/iLightController.hpp | 94 + upm/src/interfaces/iLightSensor.hpp | 61 + upm/src/interfaces/iModuleStatus.hpp | 53 + upm/src/interfaces/iPressureSensor.hpp | 44 + upm/src/interfaces/iTemperatureSensor.hpp | 42 + upm/src/interfaces/interfaces.cxx | 1 + upm/src/interfaces/interfaces.i | 18 + upm/src/interfaces/javaupm_iADC.i | 11 + upm/src/interfaces/javaupm_iCO2Sensor.i | 12 + upm/src/interfaces/javaupm_iHumiditySensor.i | 11 + upm/src/interfaces/javaupm_iLightController.i | 11 + upm/src/interfaces/javaupm_iLightSensor.i | 11 + upm/src/interfaces/javaupm_iModuleStatus.i | 8 + upm/src/interfaces/javaupm_iPressureSensor.i | 11 + .../interfaces/javaupm_iTemperatureSensor.i | 11 + upm/src/isd1820/CMakeLists.txt | 5 + upm/src/isd1820/isd1820.cxx | 91 + upm/src/isd1820/isd1820.hpp | 92 + upm/src/isd1820/isd1820.json | 33 + upm/src/itg3200/CMakeLists.txt | 5 + upm/src/itg3200/itg3200.cxx | 147 + upm/src/itg3200/itg3200.hpp | 118 + upm/src/itg3200/itg3200.i | 72 + upm/src/itg3200/itg3200.json | 39 + upm/src/java_buffer.i | 45 + upm/src/java_exceptions.i | 21 + upm/src/javaswig_blacklist | 0 upm/src/jhd1313m1/CMakeLists.txt | 8 + upm/src/jhd1313m1/jhd1313m1.c | 367 + upm/src/jhd1313m1/jhd1313m1.cxx | 170 + upm/src/jhd1313m1/jhd1313m1.h | 253 + upm/src/jhd1313m1/jhd1313m1.hpp | 259 + upm/src/jhd1313m1/jhd1313m1.i | 29 + upm/src/jhd1313m1/jhd1313m1.json | 37 + upm/src/joystick12/CMakeLists.txt | 8 + upm/src/joystick12/joystick12.c | 214 + upm/src/joystick12/joystick12.cxx | 100 + upm/src/joystick12/joystick12.h | 159 + upm/src/joystick12/joystick12.hpp | 97 + upm/src/joystick12/joystick12.i | 14 + upm/src/joystick12/joystick12.json | 33 + upm/src/joystick12/joystick12_fti.c | 143 + upm/src/kx122/CMakeLists.txt | 8 + upm/src/kx122/kx122.c | 1093 + upm/src/kx122/kx122.cxx | 369 + upm/src/kx122/kx122.h | 675 + upm/src/kx122/kx122.hpp | 513 + upm/src/kx122/kx122.i | 20 + upm/src/kx122/kx122.json | 44 + upm/src/kx122/kx122_registers.h | 539 + upm/src/kxcjk1013/CMakeLists.txt | 7 + upm/src/kxcjk1013/kxcjk1013.cxx | 202 + upm/src/kxcjk1013/kxcjk1013.hpp | 135 + upm/src/kxcjk1013/kxcjk1013.json | 39 + upm/src/kxtj3/CMakeLists.txt | 8 + upm/src/kxtj3/kxtj3.c | 1095 + upm/src/kxtj3/kxtj3.cxx | 315 + upm/src/kxtj3/kxtj3.h | 746 + upm/src/kxtj3/kxtj3.hpp | 565 + upm/src/kxtj3/kxtj3.i | 20 + upm/src/kxtj3/kxtj3.json | 72 + upm/src/kxtj3/kxtj3_registers.h | 204 + upm/src/l298/CMakeLists.txt | 5 + upm/src/l298/l298.cxx | 348 + upm/src/l298/l298.hpp | 194 + upm/src/l298/l298.json | 38 + upm/src/l3gd20/CMakeLists.txt | 7 + upm/src/l3gd20/l3gd20.cxx | 709 + upm/src/l3gd20/l3gd20.hpp | 712 + upm/src/l3gd20/l3gd20.json | 39 + upm/src/lcd/CMakeLists.txt | 5 + upm/src/lcd/eboled.cxx | 567 + upm/src/lcd/eboled.hpp | 375 + upm/src/lcd/hd44780_bits.hpp | 86 + upm/src/lcd/lcd.cxx | 52 + upm/src/lcd/lcd.hpp | 54 + upm/src/lcd/lcd.i | 56 + upm/src/lcd/lcd_private.hpp | 34 + upm/src/lcd/license.txt | 24 + upm/src/lcd/ssd.hpp | 135 + upm/src/lcd/ssd1306.cxx | 312 + upm/src/lcd/ssd1306.hpp | 230 + upm/src/lcd/ssd1308.cxx | 166 + upm/src/lcd/ssd1308.hpp | 116 + upm/src/lcd/ssd1327.cxx | 318 + upm/src/lcd/ssd1327.hpp | 126 + upm/src/lcdks/CMakeLists.txt | 8 + upm/src/lcdks/lcdks.c | 217 + upm/src/lcdks/lcdks.cxx | 160 + upm/src/lcdks/lcdks.h | 235 + upm/src/lcdks/lcdks.hpp | 275 + upm/src/lcdks/lcdks.i | 29 + upm/src/lcdks/lcdks.json | 36 + upm/src/lcm1602/CMakeLists.txt | 8 + upm/src/lcm1602/hd44780_bits.h | 82 + upm/src/lcm1602/lcm1602.c | 640 + upm/src/lcm1602/lcm1602.cxx | 172 + upm/src/lcm1602/lcm1602.h | 278 + upm/src/lcm1602/lcm1602.hpp | 263 + upm/src/lcm1602/lcm1602.i | 29 + upm/src/lcm1602/lcm1602.json | 37 + upm/src/ldt0028/CMakeLists.txt | 8 + upm/src/ldt0028/ldt0028.c | 136 + upm/src/ldt0028/ldt0028.cxx | 54 + upm/src/ldt0028/ldt0028.h | 141 + upm/src/ldt0028/ldt0028.hpp | 88 + upm/src/ldt0028/ldt0028.json | 37 + upm/src/ldt0028/ldt0028_fti.c | 92 + upm/src/led/CMakeLists.txt | 9 + upm/src/led/led.c | 126 + upm/src/led/led.cxx | 75 + upm/src/led/led.h | 104 + upm/src/led/led.hpp | 110 + upm/src/led/led.i | 16 + upm/src/led/led.json | 32 + upm/src/led/led_fti.c | 76 + upm/src/lidarlitev3/CMakeLists.txt | 5 + upm/src/lidarlitev3/lidarlitev3.cxx | 134 + upm/src/lidarlitev3/lidarlitev3.hpp | 162 + upm/src/lidarlitev3/lidarlitev3.i | 14 + upm/src/lidarlitev3/lidarlitev3.json | 38 + upm/src/light/CMakeLists.txt | 10 + upm/src/light/light.c | 140 + upm/src/light/light.cxx | 119 + upm/src/light/light.h | 141 + upm/src/light/light.hpp | 179 + upm/src/light/light.json | 40 + upm/src/light/light_fti.c | 119 + upm/src/linefinder/CMakeLists.txt | 9 + upm/src/linefinder/linefinder.c | 84 + upm/src/linefinder/linefinder.cxx | 55 + upm/src/linefinder/linefinder.h | 77 + upm/src/linefinder/linefinder.hpp | 91 + upm/src/linefinder/linefinder.json | 40 + upm/src/linefinder/linefinder_fti.c | 94 + upm/src/lis2ds12/CMakeLists.txt | 9 + upm/src/lis2ds12/lis2ds12.c | 624 + upm/src/lis2ds12/lis2ds12.cxx | 201 + upm/src/lis2ds12/lis2ds12.h | 323 + upm/src/lis2ds12/lis2ds12.hpp | 312 + upm/src/lis2ds12/lis2ds12.i | 23 + upm/src/lis2ds12/lis2ds12.json | 38 + upm/src/lis2ds12/lis2ds12_defs.h | 561 + upm/src/lis2ds12/lis2ds12_fti.c | 113 + upm/src/lis3dh/CMakeLists.txt | 9 + upm/src/lis3dh/lis3dh.c | 809 + upm/src/lis3dh/lis3dh.cxx | 276 + upm/src/lis3dh/lis3dh.h | 382 + upm/src/lis3dh/lis3dh.hpp | 368 + upm/src/lis3dh/lis3dh.i | 26 + upm/src/lis3dh/lis3dh.json | 38 + upm/src/lis3dh/lis3dh_defs.h | 505 + upm/src/lis3dh/lis3dh_fti.c | 116 + upm/src/lm35/CMakeLists.txt | 9 + upm/src/lm35/lm35.c | 109 + upm/src/lm35/lm35.cxx | 65 + upm/src/lm35/lm35.h | 104 + upm/src/lm35/lm35.hpp | 108 + upm/src/lm35/lm35.json | 38 + upm/src/lm35/lm35_fti.c | 135 + upm/src/lol/CMakeLists.txt | 5 + upm/src/lol/lol.cxx | 186 + upm/src/lol/lol.hpp | 100 + upm/src/lol/lol.i | 29 + upm/src/lol/lol.json | 32 + upm/src/loudness/CMakeLists.txt | 9 + upm/src/loudness/loudness.c | 62 + upm/src/loudness/loudness.cxx | 48 + upm/src/loudness/loudness.h | 75 + upm/src/loudness/loudness.hpp | 96 + upm/src/loudness/loudness.json | 39 + upm/src/loudness/loudness_fti.c | 79 + upm/src/lp8860/CMakeLists.txt | 5 + upm/src/lp8860/lp8860.cxx | 280 + upm/src/lp8860/lp8860.hpp | 86 + upm/src/lp8860/lp8860.i | 17 + upm/src/lp8860/lp8860.json | 42 + upm/src/lp8860/mraa-utils.cxx | 74 + upm/src/lp8860/mraa-utils.hpp | 37 + upm/src/lpd8806/CMakeLists.txt | 5 + upm/src/lpd8806/lpd8806.cxx | 118 + upm/src/lpd8806/lpd8806.hpp | 129 + upm/src/lpd8806/lpd8806.json | 37 + upm/src/lsm303agr/CMakeLists.txt | 9 + upm/src/lsm303agr/lsm303agr.c | 792 + upm/src/lsm303agr/lsm303agr.cxx | 210 + upm/src/lsm303agr/lsm303agr.h | 382 + upm/src/lsm303agr/lsm303agr.hpp | 367 + upm/src/lsm303agr/lsm303agr.i | 53 + upm/src/lsm303agr/lsm303agr.json | 37 + upm/src/lsm303agr/lsm303agr_defs.h | 675 + upm/src/lsm303agr/lsm303agr_fti.c | 137 + upm/src/lsm303d/CMakeLists.txt | 8 + upm/src/lsm303d/lsm303d.c | 417 + upm/src/lsm303d/lsm303d.cxx | 142 + upm/src/lsm303d/lsm303d.h | 238 + upm/src/lsm303d/lsm303d.hpp | 244 + upm/src/lsm303d/lsm303d.i | 48 + upm/src/lsm303d/lsm303d.json | 39 + upm/src/lsm303d/lsm303d_defs.h | 301 + upm/src/lsm303dlh/CMakeLists.txt | 5 + upm/src/lsm303dlh/lsm303dlh.cxx | 229 + upm/src/lsm303dlh/lsm303dlh.hpp | 185 + upm/src/lsm303dlh/lsm303dlh.i | 51 + upm/src/lsm303dlh/lsm303dlh.json | 36 + upm/src/lsm6ds3h/CMakeLists.txt | 9 + upm/src/lsm6ds3h/lsm6ds3h.c | 640 + upm/src/lsm6ds3h/lsm6ds3h.cxx | 208 + upm/src/lsm6ds3h/lsm6ds3h.h | 340 + upm/src/lsm6ds3h/lsm6ds3h.hpp | 325 + upm/src/lsm6ds3h/lsm6ds3h.i | 28 + upm/src/lsm6ds3h/lsm6ds3h.json | 39 + upm/src/lsm6ds3h/lsm6ds3h_defs.h | 644 + upm/src/lsm6ds3h/lsm6ds3h_fti.c | 127 + upm/src/lsm6dsl/CMakeLists.txt | 9 + upm/src/lsm6dsl/lsm6dsl.c | 670 + upm/src/lsm6dsl/lsm6dsl.cxx | 215 + upm/src/lsm6dsl/lsm6dsl.h | 360 + upm/src/lsm6dsl/lsm6dsl.hpp | 341 + upm/src/lsm6dsl/lsm6dsl.i | 28 + upm/src/lsm6dsl/lsm6dsl.json | 39 + upm/src/lsm6dsl/lsm6dsl_defs.h | 685 + upm/src/lsm6dsl/lsm6dsl_fti.c | 127 + upm/src/lsm9ds0/CMakeLists.txt | 5 + upm/src/lsm9ds0/lsm9ds0.cxx | 789 + upm/src/lsm9ds0/lsm9ds0.hpp | 1484 ++ upm/src/lsm9ds0/lsm9ds0.i | 69 + upm/src/lsm9ds0/lsm9ds0.json | 39 + upm/src/m24lr64e/CMakeLists.txt | 9 + upm/src/m24lr64e/m24lr64e.c | 344 + upm/src/m24lr64e/m24lr64e.cxx | 306 + upm/src/m24lr64e/m24lr64e.h | 272 + upm/src/m24lr64e/m24lr64e.hpp | 287 + upm/src/m24lr64e/m24lr64e.i | 32 + upm/src/m24lr64e/m24lr64e.json | 38 + upm/src/m24lr64e/m24lr64e_fti.c | 49 + upm/src/mag3110/CMakeLists.txt | 5 + upm/src/mag3110/mag3110.cpp | 269 + upm/src/mag3110/mag3110.hpp | 296 + upm/src/mag3110/mag3110.json | 38 + upm/src/max30100/CMakeLists.txt | 9 + upm/src/max30100/max30100.c | 536 + upm/src/max30100/max30100.cxx | 213 + upm/src/max30100/max30100.h | 318 + upm/src/max30100/max30100.hpp | 295 + upm/src/max30100/max30100.i | 28 + upm/src/max30100/max30100.json | 37 + upm/src/max30100/max30100_fti.c | 109 + upm/src/max30100/max30100_regs.h | 170 + upm/src/max31723/CMakeLists.txt | 5 + upm/src/max31723/max31723.cxx | 109 + upm/src/max31723/max31723.hpp | 118 + upm/src/max31723/max31723.json | 39 + upm/src/max31855/CMakeLists.txt | 5 + upm/src/max31855/max31855.cxx | 110 + upm/src/max31855/max31855.hpp | 88 + upm/src/max31855/max31855.i | 17 + upm/src/max31855/max31855.json | 38 + upm/src/max44000/CMakeLists.txt | 5 + upm/src/max44000/max44000.cxx | 106 + upm/src/max44000/max44000.hpp | 145 + upm/src/max44000/max44000.i | 14 + upm/src/max44000/max44000.json | 39 + upm/src/max44009/CMakeLists.txt | 5 + upm/src/max44009/max44009.cxx | 93 + upm/src/max44009/max44009.hpp | 148 + upm/src/max44009/max44009.i | 19 + upm/src/max44009/max44009.json | 40 + upm/src/max5487/CMakeLists.txt | 5 + upm/src/max5487/max5487.cxx | 93 + upm/src/max5487/max5487.hpp | 114 + upm/src/max5487/max5487.json | 51 + upm/src/maxds3231m/CMakeLists.txt | 5 + upm/src/maxds3231m/maxds3231m.cxx | 124 + upm/src/maxds3231m/maxds3231m.hpp | 134 + upm/src/maxds3231m/maxds3231m.json | 56 + upm/src/maxsonarez/CMakeLists.txt | 5 + upm/src/maxsonarez/maxsonarez.cxx | 64 + upm/src/maxsonarez/maxsonarez.hpp | 103 + upm/src/maxsonarez/maxsonarez.json | 57 + upm/src/mb704x/CMakeLists.txt | 9 + upm/src/mb704x/mb704x.c | 115 + upm/src/mb704x/mb704x.cxx | 49 + upm/src/mb704x/mb704x.h | 78 + upm/src/mb704x/mb704x.hpp | 97 + upm/src/mb704x/mb704x.i | 14 + upm/src/mb704x/mb704x.json | 58 + upm/src/mb704x/mb704x_fti.c | 113 + upm/src/mcp2515/CMakeLists.txt | 8 + upm/src/mcp2515/license.txt | 51 + upm/src/mcp2515/mcp2515.c | 1107 + upm/src/mcp2515/mcp2515.cxx | 253 + upm/src/mcp2515/mcp2515.h | 525 + upm/src/mcp2515/mcp2515.hpp | 517 + upm/src/mcp2515/mcp2515.i | 25 + upm/src/mcp2515/mcp2515.json | 60 + upm/src/mcp2515/mcp2515_regs.h | 641 + upm/src/mcp9808/CMakeLists.txt | 5 + upm/src/mcp9808/mcp9808.cxx | 191 + upm/src/mcp9808/mcp9808.hpp | 333 + upm/src/mcp9808/mcp9808.json | 62 + upm/src/md/CMakeLists.txt | 8 + upm/src/md/md.c | 265 + upm/src/md/md.cxx | 104 + upm/src/md/md.h | 186 + upm/src/md/md.hpp | 193 + upm/src/md/md.i | 16 + upm/src/md/md.json | 53 + upm/src/md/md_defs.h | 69 + upm/src/mg811/CMakeLists.txt | 5 + upm/src/mg811/mg811.cxx | 94 + upm/src/mg811/mg811.hpp | 147 + upm/src/mg811/mg811.json | 54 + upm/src/mhz16/CMakeLists.txt | 5 + upm/src/mhz16/mhz16.cxx | 262 + upm/src/mhz16/mhz16.hpp | 179 + upm/src/mhz16/mhz16.i | 23 + upm/src/mhz16/mhz16.json | 73 + upm/src/mic/CMakeLists.txt | 8 + upm/src/mic/mic.c | 58 + upm/src/mic/mic.cxx | 106 + upm/src/mic/mic.h | 77 + upm/src/mic/mic.hpp | 108 + upm/src/mic/mic.i | 58 + upm/src/mic/mic.json | 31 + upm/src/mic/mic_fti.c | 91 + upm/src/micsv89/CMakeLists.txt | 5 + upm/src/micsv89/micsv89.cxx | 83 + upm/src/micsv89/micsv89.hpp | 131 + upm/src/micsv89/micsv89.json | 40 + upm/src/mlx90614/CMakeLists.txt | 5 + upm/src/mlx90614/mlx90614.cxx | 81 + upm/src/mlx90614/mlx90614.hpp | 131 + upm/src/mlx90614/mlx90614.json | 66 + upm/src/mma7361/CMakeLists.txt | 9 + upm/src/mma7361/mma7361.c | 402 + upm/src/mma7361/mma7361.cxx | 150 + upm/src/mma7361/mma7361.h | 248 + upm/src/mma7361/mma7361.hpp | 211 + upm/src/mma7361/mma7361.i | 61 + upm/src/mma7361/mma7361.json | 65 + upm/src/mma7361/mma7361_fti.c | 122 + upm/src/mma7455/CMakeLists.txt | 5 + upm/src/mma7455/mma7455.cxx | 170 + upm/src/mma7455/mma7455.hpp | 244 + upm/src/mma7455/mma7455.i | 20 + upm/src/mma7455/mma7455.json | 63 + upm/src/mma7660/CMakeLists.txt | 9 + upm/src/mma7660/mma7660.c | 368 + upm/src/mma7660/mma7660.cxx | 192 + upm/src/mma7660/mma7660.h | 251 + upm/src/mma7660/mma7660.hpp | 250 + upm/src/mma7660/mma7660.i | 31 + upm/src/mma7660/mma7660.json | 56 + upm/src/mma7660/mma7660_fti.c | 98 + upm/src/mma7660/mma7660_regs.h | 104 + upm/src/mma8x5x/CMakeLists.txt | 5 + upm/src/mma8x5x/mma8x5x.cpp | 346 + upm/src/mma8x5x/mma8x5x.hpp | 473 + upm/src/mma8x5x/mma8x5x.json | 281 + upm/src/mmc35240/CMakeLists.txt | 7 + upm/src/mmc35240/mat.h | 406 + upm/src/mmc35240/mmc35240.cxx | 811 + upm/src/mmc35240/mmc35240.hpp | 212 + upm/src/mmc35240/mmc35240.json | 54 + upm/src/mmc35240/traits.h | 118 + upm/src/mmc35240/vec.h | 438 + upm/src/moisture/CMakeLists.txt | 9 + upm/src/moisture/moisture.c | 69 + upm/src/moisture/moisture.cxx | 48 + upm/src/moisture/moisture.h | 82 + upm/src/moisture/moisture.hpp | 82 + upm/src/moisture/moisture.json | 54 + upm/src/moisture/moisture_fti.c | 88 + upm/src/mpl3115a2/CMakeLists.txt | 5 + upm/src/mpl3115a2/mpl3115a2.cpp | 323 + upm/src/mpl3115a2/mpl3115a2.hpp | 256 + upm/src/mpl3115a2/mpl3115a2.json | 69 + upm/src/mpr121/CMakeLists.txt | 9 + upm/src/mpr121/mpr121.c | 208 + upm/src/mpr121/mpr121.cxx | 205 + upm/src/mpr121/mpr121.h | 119 + upm/src/mpr121/mpr121.hpp | 123 + upm/src/mpr121/mpr121.i | 17 + upm/src/mpr121/mpr121.json | 53 + upm/src/mpr121/mpr121_fti.c | 75 + upm/src/mpu9150/CMakeLists.txt | 5 + upm/src/mpu9150/ak8975.cxx | 239 + upm/src/mpu9150/ak8975.hpp | 235 + upm/src/mpu9150/mpu60x0.cxx | 416 + upm/src/mpu9150/mpu60x0.hpp | 943 + upm/src/mpu9150/mpu9150.cxx | 117 + upm/src/mpu9150/mpu9150.hpp | 135 + upm/src/mpu9150/mpu9150.i | 47 + upm/src/mpu9150/mpu9150.json | 59 + upm/src/mpu9150/mpu9250.cxx | 50 + upm/src/mpu9150/mpu9250.hpp | 85 + upm/src/mq303a/CMakeLists.txt | 9 + upm/src/mq303a/mq303a.c | 76 + upm/src/mq303a/mq303a.cxx | 69 + upm/src/mq303a/mq303a.h | 83 + upm/src/mq303a/mq303a.hpp | 94 + upm/src/mq303a/mq303a.json | 67 + upm/src/mq303a/mq303a_fti.c | 79 + upm/src/ms5611/CMakeLists.txt | 5 + upm/src/ms5611/ms5611.cxx | 210 + upm/src/ms5611/ms5611.hpp | 96 + upm/src/ms5611/ms5611.i | 18 + upm/src/ms5611/ms5611.json | 89 + upm/src/ms5803/CMakeLists.txt | 9 + upm/src/ms5803/ms5803.c | 504 + upm/src/ms5803/ms5803.cxx | 118 + upm/src/ms5803/ms5803.h | 205 + upm/src/ms5803/ms5803.hpp | 186 + upm/src/ms5803/ms5803.i | 21 + upm/src/ms5803/ms5803.json | 92 + upm/src/ms5803/ms5803_defs.h | 77 + upm/src/ms5803/ms5803_fti.c | 125 + upm/src/my9221/CMakeLists.txt | 8 + upm/src/my9221/grovecircularled.cxx | 101 + upm/src/my9221/grovecircularled.hpp | 96 + upm/src/my9221/groveledbar.cxx | 91 + upm/src/my9221/groveledbar.hpp | 100 + upm/src/my9221/my9221.c | 274 + upm/src/my9221/my9221.cxx | 90 + upm/src/my9221/my9221.h | 183 + upm/src/my9221/my9221.hpp | 133 + upm/src/my9221/my9221.i | 18 + upm/src/my9221/my9221.json | 148 + upm/src/nlgpio16/CMakeLists.txt | 5 + upm/src/nlgpio16/nlgpio16.cxx | 344 + upm/src/nlgpio16/nlgpio16.hpp | 239 + upm/src/nlgpio16/nlgpio16.i | 16 + upm/src/nlgpio16/nlgpio16.json | 58 + upm/src/nmea_gps/CMakeLists.txt | 9 + upm/src/nmea_gps/nmea_gps.c | 345 + upm/src/nmea_gps/nmea_gps.cxx | 625 + upm/src/nmea_gps/nmea_gps.h | 155 + upm/src/nmea_gps/nmea_gps.hpp | 453 + upm/src/nmea_gps/nmea_gps.i | 28 + upm/src/nmea_gps/nmea_gps.json | 49 + upm/src/nmea_gps/nmea_gps_fti.c | 96 + upm/src/nodeswig_blacklist | 0 upm/src/nrf24l01/CMakeLists.txt | 5 + upm/src/nrf24l01/Callback.hpp | 20 + upm/src/nrf24l01/nrf24l01.cxx | 524 + upm/src/nrf24l01/nrf24l01.hpp | 417 + upm/src/nrf24l01/nrf24l01.i | 35 + upm/src/nrf24l01/nrf24l01.json | 74 + upm/src/nrf8001/CMakeLists.txt | 8 + upm/src/nrf8001/aci.h | 672 + upm/src/nrf8001/aci_cmds.h | 433 + upm/src/nrf8001/aci_evts.h | 397 + upm/src/nrf8001/aci_protocol_defines.h | 192 + upm/src/nrf8001/aci_queue.cpp | 201 + upm/src/nrf8001/aci_queue.h | 76 + upm/src/nrf8001/aci_setup.cpp | 177 + upm/src/nrf8001/aci_setup.h | 53 + upm/src/nrf8001/acilib.cpp | 616 + upm/src/nrf8001/acilib.h | 61 + upm/src/nrf8001/acilib_defs.h | 37 + upm/src/nrf8001/acilib_if.h | 471 + upm/src/nrf8001/acilib_types.h | 33 + upm/src/nrf8001/boards.h | 36 + upm/src/nrf8001/dtm.h | 63 + upm/src/nrf8001/hal_aci_tl.cpp | 460 + upm/src/nrf8001/hal_aci_tl.h | 189 + upm/src/nrf8001/hal_platform.h | 78 + upm/src/nrf8001/lib_aci.cpp | 742 + upm/src/nrf8001/lib_aci.h | 569 + upm/src/nrf8001/nrf8001.cxx | 77 + upm/src/nrf8001/nrf8001.hpp | 62 + upm/src/nrf8001/nrf8001.json | 55 + upm/src/nrf8001/uart_over_ble.h | 79 + upm/src/nunchuck/CMakeLists.txt | 9 + upm/src/nunchuck/nunchuck.c | 207 + upm/src/nunchuck/nunchuck.cxx | 59 + upm/src/nunchuck/nunchuck.h | 123 + upm/src/nunchuck/nunchuck.hpp | 134 + upm/src/nunchuck/nunchuck.i | 16 + upm/src/nunchuck/nunchuck.json | 47 + upm/src/nunchuck/nunchuck_fti.c | 190 + upm/src/o2/CMakeLists.txt | 8 + upm/src/o2/o2.c | 139 + upm/src/o2/o2.cxx | 56 + upm/src/o2/o2.h | 143 + upm/src/o2/o2.hpp | 75 + upm/src/o2/o2.json | 39 + upm/src/o2/o2_fti.c | 116 + upm/src/otp538u/CMakeLists.txt | 9 + upm/src/otp538u/otp538u.c | 374 + upm/src/otp538u/otp538u.cxx | 67 + upm/src/otp538u/otp538u.h | 153 + upm/src/otp538u/otp538u.hpp | 177 + upm/src/otp538u/otp538u.json | 67 + upm/src/otp538u/otp538u_fti.c | 116 + upm/src/otp538u/thermister_rt_table.h | 45 + upm/src/otp538u/thermopile_vt_table.h | 103 + upm/src/ozw/CMakeLists.txt | 16 + upm/src/ozw/aeotecdsb09104.cxx | 87 + upm/src/ozw/aeotecdsb09104.hpp | 147 + upm/src/ozw/aeotecdw2e.cxx | 77 + upm/src/ozw/aeotecdw2e.hpp | 132 + upm/src/ozw/aeotecsdg2.cxx | 95 + upm/src/ozw/aeotecsdg2.hpp | 164 + upm/src/ozw/aeotecss6.cxx | 86 + upm/src/ozw/aeotecss6.hpp | 138 + upm/src/ozw/ozw.cxx | 996 + upm/src/ozw/ozw.hpp | 613 + upm/src/ozw/ozw.i | 34 + upm/src/ozw/ozw.json | 107 + upm/src/ozw/ozwdump.cxx | 42 + upm/src/ozw/ozwdump.hpp | 63 + upm/src/ozw/ozwinterface.cxx | 75 + upm/src/ozw/ozwinterface.hpp | 216 + upm/src/ozw/tzemt400.cxx | 148 + upm/src/ozw/tzemt400.hpp | 159 + upm/src/ozw/zwNode.cxx | 197 + upm/src/ozw/zwNode.hpp | 142 + upm/src/p9813/CMakeLists.txt | 7 + upm/src/p9813/p9813.c | 150 + upm/src/p9813/p9813.cxx | 146 + upm/src/p9813/p9813.h | 106 + upm/src/p9813/p9813.hpp | 135 + upm/src/p9813/p9813.i | 14 + upm/src/p9813/p9813.json | 58 + upm/src/p9813/p9813_fti.c | 67 + upm/src/package.json.in | 23 + upm/src/package.json.npm.in | 20 + upm/src/pca9685/CMakeLists.txt | 5 + upm/src/pca9685/pca9685.cxx | 302 + upm/src/pca9685/pca9685.hpp | 320 + upm/src/pca9685/pca9685.i | 14 + upm/src/pca9685/pca9685.json | 56 + upm/src/pkgconfig.in | 14 + upm/src/pn532/CMakeLists.txt | 5 + upm/src/pn532/license.txt | 26 + upm/src/pn532/pn532.cxx | 1573 ++ upm/src/pn532/pn532.hpp | 505 + upm/src/pn532/pn532.i | 32 + upm/src/pn532/pn532.json | 50 + upm/src/pom.xml.in | 32 + upm/src/ppd42ns/CMakeLists.txt | 9 + upm/src/ppd42ns/ppd42ns.c | 196 + upm/src/ppd42ns/ppd42ns.cxx | 51 + upm/src/ppd42ns/ppd42ns.h | 82 + upm/src/ppd42ns/ppd42ns.hpp | 86 + upm/src/ppd42ns/ppd42ns.i | 15 + upm/src/ppd42ns/ppd42ns.json | 70 + upm/src/ppd42ns/ppd42ns_data.h | 48 + upm/src/pulsensor/CMakeLists.txt | 5 + upm/src/pulsensor/Callback.hpp | 12 + upm/src/pulsensor/pulsensor.cxx | 160 + upm/src/pulsensor/pulsensor.hpp | 106 + upm/src/pulsensor/pulsensor.i | 27 + upm/src/pulsensor/pulsensor.json | 43 + upm/src/pythonswig_blacklist | 0 upm/src/relay/CMakeLists.txt | 8 + upm/src/relay/relay.c | 83 + upm/src/relay/relay.cxx | 68 + upm/src/relay/relay.h | 93 + upm/src/relay/relay.hpp | 102 + upm/src/relay/relay.json | 68 + upm/src/relay/relay_fti.c | 97 + upm/src/rf22/CMakeLists.txt | 5 + upm/src/rf22/rf22.cxx | 756 + upm/src/rf22/rf22.hpp | 987 + upm/src/rf22/rf22.i | 34 + upm/src/rf22/rf22.json | 63 + upm/src/rfr359f/CMakeLists.txt | 5 + upm/src/rfr359f/rfr359f.cxx | 54 + upm/src/rfr359f/rfr359f.hpp | 82 + upm/src/rfr359f/rfr359f.json | 57 + upm/src/rgbringcoder/CMakeLists.txt | 5 + upm/src/rgbringcoder/rgbringcoder.cxx | 187 + upm/src/rgbringcoder/rgbringcoder.hpp | 152 + upm/src/rgbringcoder/rgbringcoder.i | 14 + upm/src/rgbringcoder/rgbringcoder.json | 48 + upm/src/rhusb/CMakeLists.txt | 6 + upm/src/rhusb/rhusb.cxx | 173 + upm/src/rhusb/rhusb.hpp | 118 + upm/src/rhusb/rhusb.i | 16 + upm/src/rhusb/rhusb.json | 60 + upm/src/rn2903/CMakeLists.txt | 8 + upm/src/rn2903/rn2903.c | 1162 + upm/src/rn2903/rn2903.cxx | 334 + upm/src/rn2903/rn2903.h | 718 + upm/src/rn2903/rn2903.hpp | 640 + upm/src/rn2903/rn2903.i | 16 + upm/src/rn2903/rn2903.json | 53 + upm/src/rn2903/rn2903_defs.h | 147 + upm/src/rotary/CMakeLists.txt | 8 + upm/src/rotary/rotary.c | 78 + upm/src/rotary/rotary.cxx | 78 + upm/src/rotary/rotary.h | 88 + upm/src/rotary/rotary.hpp | 115 + upm/src/rotary/rotary.json | 52 + upm/src/rotary/rotary_fti.c | 126 + upm/src/rotaryencoder/CMakeLists.txt | 9 + upm/src/rotaryencoder/rotaryencoder.c | 132 + upm/src/rotaryencoder/rotaryencoder.cxx | 56 + upm/src/rotaryencoder/rotaryencoder.h | 84 + upm/src/rotaryencoder/rotaryencoder.hpp | 99 + upm/src/rotaryencoder/rotaryencoder.i | 16 + upm/src/rotaryencoder/rotaryencoder.json | 58 + upm/src/rotaryencoder/rotaryencoder_fti.c | 106 + upm/src/rpr220/CMakeLists.txt | 9 + upm/src/rpr220/rpr220.c | 107 + upm/src/rpr220/rpr220.cxx | 62 + upm/src/rpr220/rpr220.h | 98 + upm/src/rpr220/rpr220.hpp | 111 + upm/src/rpr220/rpr220.i | 15 + upm/src/rpr220/rpr220.json | 64 + upm/src/rpr220/rpr220_fti.c | 94 + upm/src/rsc/CMakeLists.txt | 8 + upm/src/rsc/rsc.c | 534 + upm/src/rsc/rsc.cxx | 182 + upm/src/rsc/rsc.h | 219 + upm/src/rsc/rsc.hpp | 251 + upm/src/rsc/rsc.json | 84 + upm/src/rsc/rsc_regs.h | 249 + upm/src/scam/CMakeLists.txt | 5 + upm/src/scam/scam.cxx | 490 + upm/src/scam/scam.hpp | 195 + upm/src/scam/scam.i | 16 + upm/src/scam/scam.json | 53 + upm/src/sensortemplate/CMakeLists.txt | 5 + upm/src/sensortemplate/sensortemplate.cxx | 32 + upm/src/sensortemplate/sensortemplate.hpp | 95 + upm/src/sensortemplate/sensortemplate.i | 29 + upm/src/sensortemplate/sensortemplate.json | 251 + upm/src/servo/CMakeLists.txt | 9 + upm/src/servo/es08a.c | 116 + upm/src/servo/es08a.cxx | 41 + upm/src/servo/es08a.h | 122 + upm/src/servo/es08a.hpp | 68 + upm/src/servo/es08a_fti.c | 89 + upm/src/servo/es9257.c | 117 + upm/src/servo/es9257.cxx | 41 + upm/src/servo/es9257.h | 119 + upm/src/servo/es9257.hpp | 65 + upm/src/servo/es9257_fti.c | 89 + upm/src/servo/servo.cxx | 164 + upm/src/servo/servo.hpp | 168 + upm/src/servo/servo.i | 18 + upm/src/servo/servo.json | 137 + upm/src/sht1x/CMakeLists.txt | 9 + upm/src/sht1x/sht1x.c | 394 + upm/src/sht1x/sht1x.cxx | 116 + upm/src/sht1x/sht1x.h | 207 + upm/src/sht1x/sht1x.hpp | 187 + upm/src/sht1x/sht1x.i | 16 + upm/src/sht1x/sht1x.json | 81 + upm/src/sht1x/sht1x_defs.h | 68 + upm/src/sht1x/sht1x_fti.c | 125 + upm/src/si1132/CMakeLists.txt | 5 + upm/src/si1132/si1132.cxx | 223 + upm/src/si1132/si1132.hpp | 101 + upm/src/si1132/si1132.i | 21 + upm/src/si1132/si1132.json | 50 + upm/src/si114x/CMakeLists.txt | 5 + upm/src/si114x/si114x.cxx | 200 + upm/src/si114x/si114x.hpp | 323 + upm/src/si114x/si114x.i | 14 + upm/src/si114x/si114x.json | 69 + upm/src/si7005/CMakeLists.txt | 5 + upm/src/si7005/mraa-utils.cxx | 74 + upm/src/si7005/mraa-utils.hpp | 37 + upm/src/si7005/si7005.cxx | 201 + upm/src/si7005/si7005.hpp | 143 + upm/src/si7005/si7005.i | 21 + upm/src/si7005/si7005.json | 54 + upm/src/slide/CMakeLists.txt | 8 + upm/src/slide/slide.c | 136 + upm/src/slide/slide.cxx | 67 + upm/src/slide/slide.h | 141 + upm/src/slide/slide.hpp | 99 + upm/src/slide/slide.json | 63 + upm/src/slide/slide_fti.c | 119 + upm/src/sm130/CMakeLists.txt | 5 + upm/src/sm130/sm130.cxx | 878 + upm/src/sm130/sm130.hpp | 467 + upm/src/sm130/sm130.json | 43 + upm/src/smartdrive/CMakeLists.txt | 5 + upm/src/smartdrive/smartdrive.cxx | 430 + upm/src/smartdrive/smartdrive.hpp | 302 + upm/src/smartdrive/smartdrive.i | 14 + upm/src/smartdrive/smartdrive.json | 42 + upm/src/speaker/CMakeLists.txt | 9 + upm/src/speaker/speaker.c | 349 + upm/src/speaker/speaker.cxx | 87 + upm/src/speaker/speaker.h | 171 + upm/src/speaker/speaker.hpp | 152 + upm/src/speaker/speaker.json | 53 + upm/src/ssd1351/CMakeLists.txt | 5 + upm/src/ssd1351/license.txt | 24 + upm/src/ssd1351/ssd1351.cxx | 223 + upm/src/ssd1351/ssd1351.hpp | 193 + upm/src/ssd1351/ssd1351.i | 19 + upm/src/ssd1351/ssd1351.json | 49 + upm/src/ssd1351/ssd1351_gfx.cxx | 220 + upm/src/ssd1351/ssd1351_gfx.hpp | 455 + upm/src/st7735/CMakeLists.txt | 5 + upm/src/st7735/license.txt | 24 + upm/src/st7735/st7735.cxx | 270 + upm/src/st7735/st7735.hpp | 639 + upm/src/st7735/st7735.i | 59 + upm/src/st7735/st7735.json | 51 + upm/src/st7735/st7735_gfx.cxx | 233 + upm/src/st7735/st7735_gfx.hpp | 221 + upm/src/stepmotor/CMakeLists.txt | 9 + upm/src/stepmotor/stepmotor.cxx | 182 + upm/src/stepmotor/stepmotor.hpp | 176 + upm/src/stepmotor/stepmotor.i | 14 + upm/src/stepmotor/stepmotor.json | 48 + upm/src/swigme.i.in | 16 + upm/src/sx1276/CMakeLists.txt | 5 + upm/src/sx1276/LICENSE.txt | 25 + upm/src/sx1276/sx1276.cxx | 2160 ++ upm/src/sx1276/sx1276.hpp | 2036 ++ upm/src/sx1276/sx1276.i | 22 + upm/src/sx1276/sx1276.json | 68 + upm/src/sx6119/CMakeLists.txt | 5 + upm/src/sx6119/sx6119.cxx | 80 + upm/src/sx6119/sx6119.hpp | 90 + upm/src/sx6119/sx6119.json | 55 + upm/src/t3311/CMakeLists.txt | 10 + upm/src/t3311/t3311.cxx | 308 + upm/src/t3311/t3311.hpp | 310 + upm/src/t3311/t3311.i | 19 + upm/src/t3311/t3311.json | 60 + upm/src/t6713/CMakeLists.txt | 5 + upm/src/t6713/t6713.cxx | 244 + upm/src/t6713/t6713.hpp | 145 + upm/src/t6713/t6713.i | 25 + upm/src/t6713/t6713.json | 60 + upm/src/t8100/CMakeLists.txt | 8 + upm/src/t8100/t8100.cxx | 254 + upm/src/t8100/t8100.hpp | 379 + upm/src/t8100/t8100.i | 18 + upm/src/t8100/t8100.json | 83 + upm/src/ta12200/CMakeLists.txt | 5 + upm/src/ta12200/ta12200.cxx | 119 + upm/src/ta12200/ta12200.hpp | 112 + upm/src/ta12200/ta12200.json | 59 + upm/src/tb7300/CMakeLists.txt | 8 + upm/src/tb7300/tb7300.cxx | 108 + upm/src/tb7300/tb7300.hpp | 258 + upm/src/tb7300/tb7300.i | 29 + upm/src/tb7300/tb7300.json | 46 + upm/src/tca9548a/CMakeLists.txt | 5 + upm/src/tca9548a/tca9548a.cxx | 138 + upm/src/tca9548a/tca9548a.hpp | 189 + upm/src/tca9548a/tca9548a.json | 56 + upm/src/tcs3414cs/CMakeLists.txt | 5 + upm/src/tcs3414cs/tcs3414cs.cxx | 126 + upm/src/tcs3414cs/tcs3414cs.hpp | 167 + upm/src/tcs3414cs/tcs3414cs.json | 50 + upm/src/tcs37727/CMakeLists.txt | 5 + upm/src/tcs37727/tcs37727.cpp | 349 + upm/src/tcs37727/tcs37727.hpp | 289 + upm/src/tcs37727/tcs37727.json | 40 + upm/src/teams/CMakeLists.txt | 5 + upm/src/teams/teams.cxx | 125 + upm/src/teams/teams.hpp | 174 + upm/src/teams/teams.i | 14 + upm/src/teams/teams.json | 47 + upm/src/temperature/CMakeLists.txt | 8 + upm/src/temperature/temperature.c | 77 + upm/src/temperature/temperature.cxx | 68 + upm/src/temperature/temperature.h | 76 + upm/src/temperature/temperature.hpp | 106 + upm/src/temperature/temperature.json | 39 + upm/src/temperature/temperature_fti.c | 118 + upm/src/tex00/CMakeLists.txt | 5 + upm/src/tex00/tex00.cxx | 693 + upm/src/tex00/tex00.hpp | 216 + upm/src/tex00/tex00.i | 14 + upm/src/tex00/tex00.json | 52 + upm/src/th02/CMakeLists.txt | 5 + upm/src/th02/th02.cxx | 103 + upm/src/th02/th02.hpp | 113 + upm/src/th02/th02.json | 77 + upm/src/tm1637/CMakeLists.txt | 5 + upm/src/tm1637/tm1637.cxx | 200 + upm/src/tm1637/tm1637.hpp | 143 + upm/src/tm1637/tm1637.i | 32 + upm/src/tm1637/tm1637.json | 52 + upm/src/tmp006/CMakeLists.txt | 5 + upm/src/tmp006/tmp006.cpp | 278 + upm/src/tmp006/tmp006.hpp | 214 + upm/src/tmp006/tmp006.json | 50 + upm/src/tsl2561/CMakeLists.txt | 9 + upm/src/tsl2561/tsl2561.c | 245 + upm/src/tsl2561/tsl2561.cxx | 235 + upm/src/tsl2561/tsl2561.h | 164 + upm/src/tsl2561/tsl2561.hpp | 171 + upm/src/tsl2561/tsl2561.json | 64 + upm/src/tsl2561/tsl2561_fti.c | 92 + upm/src/ttp223/CMakeLists.txt | 9 + upm/src/ttp223/ttp223.c | 86 + upm/src/ttp223/ttp223.cxx | 77 + upm/src/ttp223/ttp223.h | 99 + upm/src/ttp223/ttp223.hpp | 112 + upm/src/ttp223/ttp223.i | 20 + upm/src/ttp223/ttp223.json | 58 + upm/src/ttp223/ttp223_fti.c | 93 + upm/src/uartat/CMakeLists.txt | 8 + upm/src/uartat/uartat.c | 410 + upm/src/uartat/uartat.cxx | 173 + upm/src/uartat/uartat.h | 282 + upm/src/uartat/uartat.hpp | 265 + upm/src/uartat/uartat.i | 16 + upm/src/uartat/uartat.json | 25 + upm/src/uartat/uartat_defs.h | 54 + upm/src/uln200xa/CMakeLists.txt | 8 + upm/src/uln200xa/uln200xa.c | 260 + upm/src/uln200xa/uln200xa.cxx | 66 + upm/src/uln200xa/uln200xa.h | 116 + upm/src/uln200xa/uln200xa.hpp | 116 + upm/src/uln200xa/uln200xa.i | 15 + upm/src/uln200xa/uln200xa.json | 53 + upm/src/uln200xa/uln200xa_defs.h | 41 + upm/src/ultrasonic/CMakeLists.txt | 5 + upm/src/ultrasonic/ultrasonic.cxx | 102 + upm/src/ultrasonic/ultrasonic.hpp | 122 + upm/src/ultrasonic/ultrasonic.i | 16 + upm/src/ultrasonic/ultrasonic.json | 61 + upm/src/upm_exception.i | 63 + upm/src/upm_javastdvector.i | 61 + upm/src/upm_vectortypes.i | 14 + upm/src/urm37/CMakeLists.txt | 9 + upm/src/urm37/urm37.c | 393 + upm/src/urm37/urm37.cxx | 98 + upm/src/urm37/urm37.h | 159 + upm/src/urm37/urm37.hpp | 159 + upm/src/urm37/urm37.i | 14 + upm/src/urm37/urm37.json | 50 + upm/src/urm37/urm37_fti.c | 109 + upm/src/utilities/CMakeLists.txt | 7 + upm/src/utilities/upm_utilities.c | 306 + upm/src/utilities/upm_utilities.cxx | 0 upm/src/utilities/upm_utilities.h | 157 + upm/src/utilities/upm_utilities.hpp | 0 upm/src/utilities/utilities.i | 14 + upm/src/vcap/CMakeLists.txt | 10 + upm/src/vcap/vcap.cxx | 524 + upm/src/vcap/vcap.hpp | 215 + upm/src/vcap/vcap.i | 14 + upm/src/vcap/vcap.json | 24 + upm/src/vdiv/CMakeLists.txt | 8 + upm/src/vdiv/vdiv.c | 130 + upm/src/vdiv/vdiv.cxx | 68 + upm/src/vdiv/vdiv.h | 147 + upm/src/vdiv/vdiv.hpp | 99 + upm/src/vdiv/vdiv.json | 70 + upm/src/vdiv/vdiv_fti.c | 118 + upm/src/veml6070/CMakeLists.txt | 8 + upm/src/veml6070/veml6070.c | 108 + upm/src/veml6070/veml6070.cxx | 55 + upm/src/veml6070/veml6070.h | 101 + upm/src/veml6070/veml6070.hpp | 112 + upm/src/veml6070/veml6070.i | 14 + upm/src/veml6070/veml6070.json | 55 + upm/src/water/CMakeLists.txt | 9 + upm/src/water/water.c | 79 + upm/src/water/water.cxx | 50 + upm/src/water/water.h | 70 + upm/src/water/water.hpp | 78 + upm/src/water/water.json | 57 + upm/src/water/water_fti.c | 82 + upm/src/waterlevel/CMakeLists.txt | 5 + upm/src/waterlevel/waterlevel.cxx | 51 + upm/src/waterlevel/waterlevel.hpp | 70 + upm/src/waterlevel/waterlevel.json | 41 + upm/src/wfs/CMakeLists.txt | 8 + upm/src/wfs/wfs.c | 152 + upm/src/wfs/wfs.cxx | 72 + upm/src/wfs/wfs.h | 134 + upm/src/wfs/wfs.hpp | 136 + upm/src/wfs/wfs.i | 16 + upm/src/wfs/wfs.json | 75 + upm/src/wheelencoder/CMakeLists.txt | 5 + upm/src/wheelencoder/wheelencoder.cxx | 106 + upm/src/wheelencoder/wheelencoder.hpp | 132 + upm/src/wheelencoder/wheelencoder.json | 53 + upm/src/wt5001/CMakeLists.txt | 5 + upm/src/wt5001/wt5001.cxx | 632 + upm/src/wt5001/wt5001.hpp | 383 + upm/src/wt5001/wt5001.i | 58 + upm/src/wt5001/wt5001.json | 51 + upm/src/xbee/CMakeLists.txt | 5 + upm/src/xbee/xbee.cxx | 102 + upm/src/xbee/xbee.hpp | 193 + upm/src/xbee/xbee.i | 16 + upm/src/xbee/xbee.json | 61 + upm/src/yg1006/CMakeLists.txt | 9 + upm/src/yg1006/yg1006.c | 77 + upm/src/yg1006/yg1006.cxx | 50 + upm/src/yg1006/yg1006.h | 73 + upm/src/yg1006/yg1006.hpp | 87 + upm/src/yg1006/yg1006.json | 67 + upm/src/yg1006/yg1006_fti.c | 82 + upm/src/zfm20/CMakeLists.txt | 5 + upm/src/zfm20/zfm20.cxx | 458 + upm/src/zfm20/zfm20.hpp | 373 + upm/src/zfm20/zfm20.i | 24 + upm/src/zfm20/zfm20.json | 66 + upm/tests/CMakeLists.txt | 87 + upm/tests/check_autoloadlibrary.py | 54 + upm/tests/check_clean.py | 37 + upm/tests/check_consistency.py | 60 + upm/tests/check_duplicate_headers.py | 28 + upm/tests/check_examplenames.py | 75 + upm/tests/check_file_encoding.py | 54 + upm/tests/check_pythonload.py | 75 + upm/tests/node/jsonlint.js | 61 + upm/tests/node/package.json | 20 + upm/tests/node/test.js | 207 + upm/tests/runjsontest.cmake | 36 + upm/tests/unit/CMakeLists.txt | 35 + upm/tests/unit/json/json_tests.cxx | 104 + upm/tests/unit/nmea_gps/nmea_gps_tests.cxx | 301 + upm/tests/unit/utilities/utilities_tests.cxx | 168 + 2945 files changed, 357940 insertions(+) create mode 100755 CNAME create mode 100644 Dockerfile create mode 100644 Documentation/buildingupm.html create mode 100644 Documentation/contributingrules.html create mode 100644 Documentation/docindex.html create mode 100644 Documentation/installingUpm.html create mode 100644 Documentation/moduleNaming.html create mode 100644 Documentation/mraa.html create mode 100644 LICENSE create mode 100755 README.md create mode 100644 addSensor.html create mode 100644 assets/content/LunrIndex.json create mode 100755 assets/content/facets.json create mode 100644 assets/content/sensorDetail.json create mode 100644 assets/css/style.css create mode 100755 assets/images/FPO-Detail.png create mode 100755 assets/images/FPO.png create mode 100755 assets/images/HowItWorks.png create mode 100755 assets/images/carousel1.png create mode 100755 assets/images/client1.png create mode 100755 assets/images/client2.png create mode 100755 assets/images/client3.png create mode 100755 assets/images/client4.png create mode 100755 assets/images/detect.png create mode 100755 assets/images/down_arrow.png create mode 100755 assets/images/favicon.png create mode 100755 assets/images/filter_arrow.png create mode 100755 assets/images/header-bg.png create mode 100755 assets/images/header.png create mode 100755 assets/images/homePage.png create mode 100755 assets/images/logo.png create mode 100755 assets/images/menu1.png create mode 100755 assets/images/right_arrow.png create mode 100755 assets/images/sensor-img.png create mode 100755 assets/images/sensorDetailSprite.png create mode 100755 assets/js/common.js create mode 100755 assets/js/library/bootstrap.min.js create mode 100755 assets/js/library/elasticlunr.js create mode 100755 assets/js/library/handlebars.min.js create mode 100755 assets/js/library/highlight.js create mode 100755 assets/js/library/jquery-2.2.4.min.js create mode 100755 assets/js/library/jquery-ui.min.js create mode 100755 assets/js/library/jquery.pajinate.js create mode 100755 assets/js/library/lunr.js create mode 100755 assets/js/library/prism.js create mode 100755 assets/js/search.js create mode 100755 assets/js/sensorDetail.js create mode 100644 docker-compose.yaml create mode 100644 feed.xml create mode 100644 findSensor.html create mode 100644 howitworks.html create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 scripts/check-sensor-data.js create mode 100644 sensorDetail.html create mode 100644 upm/CMakeLists.txt create mode 100644 upm/LICENSE create mode 100644 upm/README.md create mode 100644 upm/cmake/Toolchains/oe-sdk_cross.cmake create mode 100644 upm/cmake/modules/CPackDeb.cmake create mode 100644 upm/cmake/modules/FindNode.cmake create mode 100644 upm/cmake/modules/FindNpm.cmake create mode 100644 upm/cmake/modules/FindSphinx.cmake create mode 100644 upm/cmake/modules/FindUpmCordovaGenerator.cmake create mode 100644 upm/cmake/modules/FindYuidoc.cmake create mode 100644 upm/cmake/modules/GetGitRevisionDescription.cmake create mode 100644 upm/cmake/modules/GetGitRevisionDescription.cmake.in create mode 100644 upm/cmake/modules/LICENSE_1_0.txt create mode 100644 upm/cmake/modules/OpenCVDetectPython.cmake create mode 100644 upm/cmake/modules/TargetArch.cmake create mode 100644 upm/cmake/modules/version.hpp.in create mode 100644 upm/docker-compose.yaml create mode 100644 upm/docs/apichanges.md create mode 100644 upm/docs/building.md create mode 100644 upm/docs/changelog.md create mode 100644 upm/docs/contributions.md create mode 100644 upm/docs/creating_java_bindings.md create mode 100644 upm/docs/documentation.md create mode 100644 upm/docs/guidelines.md create mode 100644 upm/docs/icons/c++.png create mode 100644 upm/docs/icons/iss.png create mode 100644 upm/docs/icons/java.png create mode 100644 upm/docs/icons/node.png create mode 100644 upm/docs/icons/python.png create mode 100644 upm/docs/icons/upm_logo.png create mode 100644 upm/docs/images/1wire.png create mode 100644 upm/docs/images/a110x.jpg create mode 100644 upm/docs/images/ad8232.jpg create mode 100644 upm/docs/images/adafruitms1438.jpg create mode 100644 upm/docs/images/adafruitss.jpg create mode 100644 upm/docs/images/adc121c021.jpg create mode 100644 upm/docs/images/ads1015.jpg create mode 100644 upm/docs/images/ads1115.jpg create mode 100644 upm/docs/images/adxl335.jpg create mode 100644 upm/docs/images/adxl345.jpeg create mode 100644 upm/docs/images/adxrs610.jpg create mode 100644 upm/docs/images/am2315.jpeg create mode 100644 upm/docs/images/apa102.jpg create mode 100644 upm/docs/images/apds9002.jpg create mode 100644 upm/docs/images/at42qt1070.jpg create mode 100644 upm/docs/images/biss0001.jpg create mode 100644 upm/docs/images/bma220.jpg create mode 100644 upm/docs/images/bmp085.jpeg create mode 100644 upm/docs/images/button.jpg create mode 100644 upm/docs/images/buzzer.jpg create mode 100644 upm/docs/images/circularled.jpg create mode 100644 upm/docs/images/cjq4435.jpg create mode 100644 upm/docs/images/collision.jpg create mode 100644 upm/docs/images/dfrph.jpg create mode 100644 upm/docs/images/ds1307.jpg create mode 100644 upm/docs/images/eboled.jpg create mode 100644 upm/docs/images/ecs1030.jpg create mode 100644 upm/docs/images/ehr.jpg create mode 100644 upm/docs/images/eldriver.jpg create mode 100644 upm/docs/images/electromagnet.jpg create mode 100644 upm/docs/images/emg.jpg create mode 100644 upm/docs/images/enc03r.jpg create mode 100644 upm/docs/images/es08a.jpg create mode 100644 upm/docs/images/es9257.jpg create mode 100644 upm/docs/images/flex.jpg create mode 100644 upm/docs/images/gp2y0a.jpg create mode 100644 upm/docs/images/gprs.jpg create mode 100644 upm/docs/images/grovebutton.jpg create mode 100644 upm/docs/images/grovecircularled.jpg create mode 100644 upm/docs/images/grovecollision.jpg create mode 100644 upm/docs/images/groveehr.jpg create mode 100644 upm/docs/images/groveeldriver.jpg create mode 100644 upm/docs/images/groveelectromagnet.jpg create mode 100644 upm/docs/images/grovegprs.jpg create mode 100644 upm/docs/images/groveled.jpg create mode 100644 upm/docs/images/grovelight.jpg create mode 100644 upm/docs/images/grovelinefinder.jpg create mode 100644 upm/docs/images/groveloudness.jpg create mode 100644 upm/docs/images/grovemd.jpg create mode 100644 upm/docs/images/grovemoisture.jpg create mode 100644 upm/docs/images/groveo2.jpg create mode 100644 upm/docs/images/groverelay.jpg create mode 100644 upm/docs/images/grovergblcd.jpg create mode 100644 upm/docs/images/groverotary.jpg create mode 100644 upm/docs/images/grovescam.jpg create mode 100644 upm/docs/images/grovespeaker.jpg create mode 100644 upm/docs/images/grovetemp.jpg create mode 100644 upm/docs/images/groveultrasonic.jpg create mode 100644 upm/docs/images/grovevdiv.jpg create mode 100644 upm/docs/images/grovewfs.jpg create mode 100644 upm/docs/images/gsr.jpg create mode 100644 upm/docs/images/guvas12d.jpg create mode 100644 upm/docs/images/h3lis331dl.jpg create mode 100644 upm/docs/images/hm11.jpg create mode 100644 upm/docs/images/hmc5883l.jpeg create mode 100644 upm/docs/images/hmtrp.jpg create mode 100644 upm/docs/images/hp20x.jpg create mode 100644 upm/docs/images/ht9170.jpg create mode 100644 upm/docs/images/htu21d.jpeg create mode 100644 upm/docs/images/hx711.jpeg create mode 100644 upm/docs/images/ili9341.jpg create mode 100644 upm/docs/images/ims.png create mode 100644 upm/docs/images/ina132.jpg create mode 100644 upm/docs/images/isd1820.jpg create mode 100644 upm/docs/images/itg3200.jpeg create mode 100644 upm/docs/images/joystick12.jpg create mode 100644 upm/docs/images/keypadlcd.jpg create mode 100755 upm/docs/images/kxtj3.png create mode 100644 upm/docs/images/l298.jpg create mode 100644 upm/docs/images/lcm1602.jpeg create mode 100644 upm/docs/images/ldt0028.jpg create mode 100644 upm/docs/images/led.jpg create mode 100644 upm/docs/images/lidarlitev3.jpg create mode 100644 upm/docs/images/light.jpg create mode 100644 upm/docs/images/linefinder.jpg create mode 100644 upm/docs/images/lm35.jpg create mode 100644 upm/docs/images/lolshield.jpg create mode 100644 upm/docs/images/loudness.jpg create mode 100644 upm/docs/images/lpd8806.jpg create mode 100644 upm/docs/images/lsm303dlh.jpeg create mode 100644 upm/docs/images/lsm9ds0.jpg create mode 100644 upm/docs/images/m24lr64e.jpg create mode 100644 upm/docs/images/max30100.png create mode 100644 upm/docs/images/max31855.jpg create mode 100644 upm/docs/images/maxsonarez.jpg create mode 100644 upm/docs/images/mcp9808.jpg create mode 100644 upm/docs/images/md.jpg create mode 100644 upm/docs/images/mg811.jpg create mode 100644 upm/docs/images/mhz16.jpg create mode 100644 upm/docs/images/mic.jpg create mode 100644 upm/docs/images/micsv89.jpg create mode 100644 upm/docs/images/mlx90614.jpg create mode 100644 upm/docs/images/mma7455.jpg create mode 100644 upm/docs/images/mma7660.jpg create mode 100644 upm/docs/images/moisture.jpg create mode 100644 upm/docs/images/mpl3115a2.jpg create mode 100644 upm/docs/images/mpr121.jpg create mode 100644 upm/docs/images/mpu60x0.jpg create mode 100644 upm/docs/images/mpu9150.jpg create mode 100644 upm/docs/images/mpu9250.jpg create mode 100644 upm/docs/images/mq2-5.jpeg create mode 100644 upm/docs/images/mq3-9.jpeg create mode 100644 upm/docs/images/mq303a.jpg create mode 100644 upm/docs/images/my9221.jpg create mode 100644 upm/docs/images/nrf24l01.jpg create mode 100644 upm/docs/images/nrf8001.jpg create mode 100644 upm/docs/images/nunchuck.jpg create mode 100644 upm/docs/images/o2.jpg create mode 100644 upm/docs/images/otp538u.jpg create mode 100644 upm/docs/images/p9813.jpg create mode 100644 upm/docs/images/pca9685.jpg create mode 100644 upm/docs/images/pn532.jpg create mode 100644 upm/docs/images/ppd42ns.jpg create mode 100644 upm/docs/images/pulsensor.jpg create mode 100644 upm/docs/images/relay.jpg create mode 100644 upm/docs/images/rf22.jpg create mode 100644 upm/docs/images/rfr359f.jpg create mode 100644 upm/docs/images/rgbringcoder.jpg create mode 100644 upm/docs/images/rotary.jpg create mode 100644 upm/docs/images/rotaryencoder.jpg create mode 100644 upm/docs/images/rpr220.jpg create mode 100644 upm/docs/images/scam.jpg create mode 100644 upm/docs/images/sensortemplate.png create mode 100644 upm/docs/images/si114x.jpg create mode 100644 upm/docs/images/slide.jpg create mode 100644 upm/docs/images/sm130.jpg create mode 100644 upm/docs/images/speaker.jpg create mode 100644 upm/docs/images/ssd1306.jpeg create mode 100644 upm/docs/images/ssd1308.jpeg create mode 100644 upm/docs/images/ssd1327.jpeg create mode 100644 upm/docs/images/ssd1351.jpg create mode 100644 upm/docs/images/st7735.jpg create mode 100644 upm/docs/images/stepmotor.jpg create mode 100644 upm/docs/images/sx6119.jpg create mode 100644 upm/docs/images/ta12200.jpg create mode 100644 upm/docs/images/tca9548a.jpg create mode 100644 upm/docs/images/tcs3414cs.jpg create mode 100644 upm/docs/images/temp.jpg create mode 100644 upm/docs/images/th02.jpg create mode 100644 upm/docs/images/tm1637.jpeg create mode 100644 upm/docs/images/tp401.jpeg create mode 100644 upm/docs/images/tsl2561.jpg create mode 100644 upm/docs/images/ttp223.jpg create mode 100644 upm/docs/images/ublox6.jpg create mode 100644 upm/docs/images/uln200xa.jpg create mode 100644 upm/docs/images/ultrasonic.jpg create mode 100644 upm/docs/images/urm37.jpg create mode 100644 upm/docs/images/vdiv.jpg create mode 100644 upm/docs/images/water.jpg create mode 100644 upm/docs/images/waterlevel.jpg create mode 100644 upm/docs/images/wfs.jpg create mode 100644 upm/docs/images/wheelencoder.jpg create mode 100644 upm/docs/images/wt5001.jpg create mode 100644 upm/docs/images/xbee.jpg create mode 100644 upm/docs/images/yg1006.jpg create mode 100644 upm/docs/images/zfm20.jpg create mode 100644 upm/docs/installing.md create mode 100644 upm/docs/knownlimitations.md create mode 100644 upm/docs/max31855.md create mode 100644 upm/docs/naming.md create mode 100644 upm/docs/porting.md create mode 100644 upm/doxy/Doxyfile.in create mode 100644 upm/doxy/Doxyfile.java.in create mode 100644 upm/doxy/DoxygenLayout.xml create mode 100644 upm/doxy/README.cpp.md create mode 100644 upm/doxy/README.java.md create mode 100644 upm/doxy/README.npm.md create mode 100644 upm/doxy/conf.py.in create mode 100644 upm/doxy/doxygen2jsdoc/COPYING create mode 100644 upm/doxy/doxygen2jsdoc/LICENSE create mode 100644 upm/doxy/doxygen2jsdoc/README.md create mode 100755 upm/doxy/doxygen2jsdoc/docgen.js create mode 100644 upm/doxy/doxygen2jsdoc/generators/jsdoc/conf.json create mode 100644 upm/doxy/doxygen2jsdoc/generators/jsdoc/generator.js create mode 100644 upm/doxy/doxygen2jsdoc/generators/ternjs/generator.js create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/generator.js create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/LICENSE create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/README.md create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/helper.js create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/layouts/main.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/classes.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/index.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/method.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/module.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/options.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/props.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/mraa/partials/sidebar.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/assets/css/main.css create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/helper.js create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/layouts/main.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/classes.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/index.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/method.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/module.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/options.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/props.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/generators/yuidoc/tmpl/upm/partials/sidebar.handlebars create mode 100644 upm/doxy/doxygen2jsdoc/grammars/xml.peg create mode 100644 upm/doxy/doxygen2jsdoc/package.json create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/001-cli-interface/test-docgen-help.sh create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/002-build-upm-doc/test-upm-doc.sh create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/003-tolower/assets/classes/FILE_IN_UPPER_CASE.html create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/003-tolower/assets/classes/file_in_lowercase.html create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/003-tolower/assets/modules/FILE_IN_UPPER_CASE.html create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/003-tolower/assets/modules/file_in_lowercase.html create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/003-tolower/test-tolower.sh create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/004-build-mraa-doc/assets/doxygen2jsdoc_custom.json create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/004-build-mraa-doc/assets/xml.tar.gz create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/004-build-mraa-doc/test-mraa-doc.sh create mode 100644 upm/doxy/doxygen2jsdoc/test/e2e/run-tests.sh create mode 100755 upm/doxy/doxygen2jsdoc/tolower.js create mode 100644 upm/doxy/doxygen2jsdoc/xml2js.js create mode 100644 upm/doxy/doxyport/LICENSE create mode 100644 upm/doxy/doxyport/Makefile create mode 100644 upm/doxy/doxyport/README.md create mode 100644 upm/doxy/doxyport/devenv.txt create mode 100755 upm/doxy/doxyport/doxyport create mode 100644 upm/doxy/doxyport/doxyport.py create mode 100644 upm/doxy/doxyport/requirements.txt create mode 100644 upm/doxy/index.rst create mode 100644 upm/doxy/node/generators/yuidoc/conf.json create mode 100644 upm/doxy/node/generators/yuidoc/helper.js create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/LICENSE create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/assets/css/main.css create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/layouts/main.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/classes.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/index.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/method.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/module.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/options.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/props.handlebars create mode 100644 upm/doxy/node/generators/yuidoc/tmpl/partials/sidebar.handlebars create mode 100644 upm/doxy/samples.mapping.txt create mode 100644 upm/examples/CMakeLists.txt create mode 100644 upm/examples/c++/CMakeLists.txt create mode 100644 upm/examples/c++/a110x-intr.cxx create mode 100644 upm/examples/c++/a110x.cxx create mode 100644 upm/examples/c++/abp.cxx create mode 100644 upm/examples/c++/ad8232.cxx create mode 100644 upm/examples/c++/adafruitms1438-stepper.cxx create mode 100644 upm/examples/c++/adafruitms1438.cxx create mode 100644 upm/examples/c++/adafruitss.cxx create mode 100644 upm/examples/c++/adc121c021.cxx create mode 100644 upm/examples/c++/adis16448.cxx create mode 100644 upm/examples/c++/ads1x15-adc-sensor.cxx create mode 100644 upm/examples/c++/ads1x15-ads1015.cxx create mode 100644 upm/examples/c++/ads1x15-ads1115.cxx create mode 100644 upm/examples/c++/ads1x15.cxx create mode 100644 upm/examples/c++/adxl335.cxx create mode 100644 upm/examples/c++/adxl345.cxx create mode 100644 upm/examples/c++/adxrs610.cxx create mode 100644 upm/examples/c++/am2315.cxx create mode 100644 upm/examples/c++/apa102.cxx create mode 100644 upm/examples/c++/apds9002.cxx create mode 100644 upm/examples/c++/apds9930.cxx create mode 100644 upm/examples/c++/at42qt1070.cxx create mode 100755 upm/examples/c++/bh1749.cxx create mode 100644 upm/examples/c++/bh1750.cxx create mode 100755 upm/examples/c++/bh1792.cxx create mode 100644 upm/examples/c++/biss0001.cxx create mode 100644 upm/examples/c++/bma220.cxx create mode 100644 upm/examples/c++/bma250e.cxx create mode 100644 upm/examples/c++/bmg160.cxx create mode 100644 upm/examples/c++/bmi160.cxx create mode 100644 upm/examples/c++/bmm150.cxx create mode 100644 upm/examples/c++/bmp280-bme280.cxx create mode 100644 upm/examples/c++/bmp280.cxx create mode 100644 upm/examples/c++/bmpx8x.cxx create mode 100644 upm/examples/c++/bmx055-bmc150.cxx create mode 100644 upm/examples/c++/bmx055-bmi055.cxx create mode 100644 upm/examples/c++/bmx055.cxx create mode 100644 upm/examples/c++/bno055.cxx create mode 100644 upm/examples/c++/button.cxx create mode 100644 upm/examples/c++/buzzer.cxx create mode 100644 upm/examples/c++/cjq4435.cxx create mode 100644 upm/examples/c++/collision.cxx create mode 100644 upm/examples/c++/curieimu.cxx create mode 100644 upm/examples/c++/cwlsxxa.cxx create mode 100644 upm/examples/c++/dfrec.cxx create mode 100644 upm/examples/c++/dfrorp.cxx create mode 100644 upm/examples/c++/dfrph.cxx create mode 100644 upm/examples/c++/ds1307.cxx create mode 100644 upm/examples/c++/ds1808lc.cxx create mode 100644 upm/examples/c++/ds18b20.cxx create mode 100644 upm/examples/c++/ds2413.cxx create mode 100644 upm/examples/c++/e50hx.cxx create mode 100644 upm/examples/c++/ecezo.cxx create mode 100644 upm/examples/c++/ecs1030.cxx create mode 100644 upm/examples/c++/ehr.cxx create mode 100644 upm/examples/c++/eldriver.cxx create mode 100644 upm/examples/c++/electromagnet.cxx create mode 100644 upm/examples/c++/emg.cxx create mode 100644 upm/examples/c++/enc03r.cxx create mode 100644 upm/examples/c++/flex.cxx create mode 100644 upm/examples/c++/gas-mq2.cxx create mode 100644 upm/examples/c++/gas-mq3.cxx create mode 100644 upm/examples/c++/gas-mq4.cxx create mode 100644 upm/examples/c++/gas-mq5.cxx create mode 100644 upm/examples/c++/gas-mq6.cxx create mode 100644 upm/examples/c++/gas-mq7.cxx create mode 100644 upm/examples/c++/gas-mq8.cxx create mode 100644 upm/examples/c++/gas-mq9.cxx create mode 100644 upm/examples/c++/gas-tp401.cxx create mode 100644 upm/examples/c++/gp2y0a.cxx create mode 100644 upm/examples/c++/gprs.cxx create mode 100644 upm/examples/c++/grove-grovebutton.cxx create mode 100644 upm/examples/c++/grove-groveled-multi.cxx create mode 100644 upm/examples/c++/grove-groveled.cxx create mode 100644 upm/examples/c++/grove-grovelight.cxx create mode 100644 upm/examples/c++/grove-groverelay.cxx create mode 100644 upm/examples/c++/grove-groverotary.cxx create mode 100644 upm/examples/c++/grove-groveslide.cxx create mode 100644 upm/examples/c++/grove-grovetemp.cxx create mode 100644 upm/examples/c++/grovecollision.cxx create mode 100644 upm/examples/c++/groveehr.cxx create mode 100644 upm/examples/c++/groveeldriver.cxx create mode 100644 upm/examples/c++/groveelectromagnet.cxx create mode 100644 upm/examples/c++/groveemg.cxx create mode 100644 upm/examples/c++/grovegprs.cxx create mode 100644 upm/examples/c++/grovegsr.cxx create mode 100644 upm/examples/c++/grovelinefinder.cxx create mode 100644 upm/examples/c++/grovemd-stepper.cxx create mode 100644 upm/examples/c++/grovemd.cxx create mode 100644 upm/examples/c++/grovemoisture.cxx create mode 100644 upm/examples/c++/groveo2.cxx create mode 100644 upm/examples/c++/grovescam.cxx create mode 100644 upm/examples/c++/grovespeaker.cxx create mode 100644 upm/examples/c++/groveultrasonic.cxx create mode 100644 upm/examples/c++/grovevdiv.cxx create mode 100644 upm/examples/c++/grovewater.cxx create mode 100644 upm/examples/c++/grovewfs.cxx create mode 100644 upm/examples/c++/gsr.cxx create mode 100644 upm/examples/c++/guvas12d.cxx create mode 100644 upm/examples/c++/h3lis331dl.cxx create mode 100644 upm/examples/c++/h803x.cxx create mode 100644 upm/examples/c++/hcsr04.cxx create mode 100644 upm/examples/c++/hdc1000.cxx create mode 100644 upm/examples/c++/hdxxvxta.cxx create mode 100644 upm/examples/c++/hka5.cxx create mode 100644 upm/examples/c++/hlg150h.cxx create mode 100644 upm/examples/c++/hm11.cxx create mode 100644 upm/examples/c++/hmc5883l.cxx create mode 100644 upm/examples/c++/hmtrp.cxx create mode 100644 upm/examples/c++/hp20x.cxx create mode 100644 upm/examples/c++/ht9170.cxx create mode 100644 upm/examples/c++/htu21d.cxx create mode 100644 upm/examples/c++/hwxpxx.cxx create mode 100644 upm/examples/c++/hx711.cxx create mode 100644 upm/examples/c++/ili9341.cxx create mode 100644 upm/examples/c++/ims.cxx create mode 100644 upm/examples/c++/ina132.cxx create mode 100644 upm/examples/c++/interfaces-humiditysensor.cxx create mode 100644 upm/examples/c++/interfaces-lightcontroller.cxx create mode 100644 upm/examples/c++/interfaces-lightsensor.cxx create mode 100644 upm/examples/c++/interfaces-pressuresensor.cxx create mode 100644 upm/examples/c++/interfaces-temperaturesensor.cxx create mode 100644 upm/examples/c++/isd1820.cxx create mode 100644 upm/examples/c++/itg3200.cxx create mode 100644 upm/examples/c++/jhd1313m1-lcd.cxx create mode 100644 upm/examples/c++/joystick12.cxx create mode 100644 upm/examples/c++/kx122.cxx create mode 100644 upm/examples/c++/kxcjk1013.cxx create mode 100755 upm/examples/c++/kxtj3.cxx create mode 100644 upm/examples/c++/l298-stepper.cxx create mode 100644 upm/examples/c++/l298.cxx create mode 100644 upm/examples/c++/l3gd20-i2c.cxx create mode 100644 upm/examples/c++/l3gd20.cxx create mode 100644 upm/examples/c++/lcd-eboled.cxx create mode 100644 upm/examples/c++/lcd-ssd1306-oled.cxx create mode 100644 upm/examples/c++/lcd-ssd1308-oled.cxx create mode 100644 upm/examples/c++/lcd-ssd1327-oled.cxx create mode 100644 upm/examples/c++/lcdks.cxx create mode 100644 upm/examples/c++/lcm1602-i2c.cxx create mode 100644 upm/examples/c++/lcm1602-parallel.cxx create mode 100644 upm/examples/c++/ldt0028.cxx create mode 100644 upm/examples/c++/led.cxx create mode 100644 upm/examples/c++/lidarlitev3.cxx create mode 100644 upm/examples/c++/light.cxx create mode 100644 upm/examples/c++/linefinder.cxx create mode 100644 upm/examples/c++/lis2ds12.cxx create mode 100644 upm/examples/c++/lis3dh.cxx create mode 100644 upm/examples/c++/lm35.cxx create mode 100644 upm/examples/c++/lol.cxx create mode 100644 upm/examples/c++/loudness.cxx create mode 100644 upm/examples/c++/lp8860.cxx create mode 100644 upm/examples/c++/lpd8806.cxx create mode 100644 upm/examples/c++/lsm303agr.cxx create mode 100644 upm/examples/c++/lsm303d.cxx create mode 100644 upm/examples/c++/lsm303dlh.cxx create mode 100644 upm/examples/c++/lsm6ds3h.cxx create mode 100644 upm/examples/c++/lsm6dsl.cxx create mode 100644 upm/examples/c++/lsm9ds0.cxx create mode 100644 upm/examples/c++/m24lr64e.cxx create mode 100644 upm/examples/c++/mag3110.cxx create mode 100644 upm/examples/c++/max30100.cxx create mode 100644 upm/examples/c++/max31723.cxx create mode 100644 upm/examples/c++/max31855.cxx create mode 100644 upm/examples/c++/max44000.cxx create mode 100644 upm/examples/c++/max44009.cxx create mode 100644 upm/examples/c++/max5487.cxx create mode 100644 upm/examples/c++/maxds3231m.cxx create mode 100644 upm/examples/c++/maxsonarez.cxx create mode 100644 upm/examples/c++/mb704x.cxx create mode 100644 upm/examples/c++/mcp2515-txrx.cxx create mode 100644 upm/examples/c++/mcp2515.cxx create mode 100644 upm/examples/c++/mcp9808.cxx create mode 100644 upm/examples/c++/md-stepper.cxx create mode 100644 upm/examples/c++/md.cxx create mode 100644 upm/examples/c++/mg811.cxx create mode 100644 upm/examples/c++/mhz16.cxx create mode 100644 upm/examples/c++/mic.cxx create mode 100644 upm/examples/c++/micsv89.cxx create mode 100644 upm/examples/c++/mlx90614.cxx create mode 100644 upm/examples/c++/mma7361.cxx create mode 100644 upm/examples/c++/mma7455.cxx create mode 100644 upm/examples/c++/mma7660.cxx create mode 100644 upm/examples/c++/mma8x5x.cxx create mode 100644 upm/examples/c++/mmc35240.cxx create mode 100644 upm/examples/c++/moisture.cxx create mode 100644 upm/examples/c++/mpl3115a2.cxx create mode 100644 upm/examples/c++/mpr121.cxx create mode 100644 upm/examples/c++/mpu9150-ak8975.cxx create mode 100644 upm/examples/c++/mpu9150-mpu60x0.cxx create mode 100644 upm/examples/c++/mpu9150-mpu9250.cxx create mode 100644 upm/examples/c++/mpu9150.cxx create mode 100644 upm/examples/c++/mq303a.cxx create mode 100644 upm/examples/c++/ms5611.cxx create mode 100644 upm/examples/c++/ms5803.cxx create mode 100644 upm/examples/c++/my9221-grovecircularled.cxx create mode 100644 upm/examples/c++/my9221-groveledbar.cxx create mode 100644 upm/examples/c++/nlgpio16.cxx create mode 100644 upm/examples/c++/nmea_gps-i2c.cxx create mode 100644 upm/examples/c++/nmea_gps.cxx create mode 100644 upm/examples/c++/nrf24l01-broadcast.cxx create mode 100644 upm/examples/c++/nrf24l01-receiver.cxx create mode 100644 upm/examples/c++/nrf24l01-transmitter.cxx create mode 100644 upm/examples/c++/nrf8001-broadcast.cxx create mode 100644 upm/examples/c++/nrf8001-broadcast.hpp create mode 100644 upm/examples/c++/nrf8001-helloworld.cxx create mode 100644 upm/examples/c++/nrf8001-helloworld.hpp create mode 100644 upm/examples/c++/nunchuck.cxx create mode 100644 upm/examples/c++/o2.cxx create mode 100644 upm/examples/c++/otp538u.cxx create mode 100644 upm/examples/c++/ozw-aeotecdsb09104.cxx create mode 100644 upm/examples/c++/ozw-aeotecdw2e.cxx create mode 100644 upm/examples/c++/ozw-aeotecsdg2.cxx create mode 100644 upm/examples/c++/ozw-aeotecss6.cxx create mode 100644 upm/examples/c++/ozw-ozwdump.cxx create mode 100644 upm/examples/c++/ozw-tzemt400.cxx create mode 100644 upm/examples/c++/p9813.cxx create mode 100644 upm/examples/c++/pca9685.cxx create mode 100644 upm/examples/c++/pn532-writeurl.cxx create mode 100644 upm/examples/c++/pn532.cxx create mode 100644 upm/examples/c++/ppd42ns.cxx create mode 100644 upm/examples/c++/pulsensor.cxx create mode 100644 upm/examples/c++/relay.cxx create mode 100644 upm/examples/c++/rf22-client.cxx create mode 100644 upm/examples/c++/rf22-server.cxx create mode 100644 upm/examples/c++/rfr359f.cxx create mode 100644 upm/examples/c++/rgbringcoder.cxx create mode 100644 upm/examples/c++/rhusb.cxx create mode 100644 upm/examples/c++/rn2903-p2p-rx.cxx create mode 100644 upm/examples/c++/rn2903-p2p-tx.cxx create mode 100644 upm/examples/c++/rn2903.cxx create mode 100644 upm/examples/c++/rotary.cxx create mode 100644 upm/examples/c++/rotaryencoder.cxx create mode 100644 upm/examples/c++/rpr220-intr.cxx create mode 100644 upm/examples/c++/rpr220.cxx create mode 100644 upm/examples/c++/rsc.cxx create mode 100644 upm/examples/c++/scam.cxx create mode 100644 upm/examples/c++/sensortemplate.cxx create mode 100644 upm/examples/c++/servo-es08a.cxx create mode 100644 upm/examples/c++/sht1x.cxx create mode 100644 upm/examples/c++/si1132.cxx create mode 100644 upm/examples/c++/si114x.cxx create mode 100644 upm/examples/c++/si7005.cxx create mode 100644 upm/examples/c++/slide.cxx create mode 100644 upm/examples/c++/sm130.cxx create mode 100644 upm/examples/c++/smartdrive.cxx create mode 100644 upm/examples/c++/speaker-pwm.cxx create mode 100644 upm/examples/c++/speaker.cxx create mode 100644 upm/examples/c++/ssd1351.cxx create mode 100644 upm/examples/c++/st7735.cxx create mode 100644 upm/examples/c++/stepmotor.cxx create mode 100644 upm/examples/c++/sx1276-fsk.cxx create mode 100644 upm/examples/c++/sx1276-lora.cxx create mode 100644 upm/examples/c++/sx6119.cxx create mode 100644 upm/examples/c++/t3311.cxx create mode 100644 upm/examples/c++/t6713-co2-sensor.cxx create mode 100644 upm/examples/c++/t6713.cxx create mode 100644 upm/examples/c++/t8100.cxx create mode 100644 upm/examples/c++/ta12200.cxx create mode 100644 upm/examples/c++/tb7300.cxx create mode 100644 upm/examples/c++/tca9548a.cxx create mode 100644 upm/examples/c++/tcs3414cs.cxx create mode 100644 upm/examples/c++/tcs37727.cxx create mode 100644 upm/examples/c++/teams.cxx create mode 100644 upm/examples/c++/temperature.cxx create mode 100644 upm/examples/c++/tex00.cxx create mode 100644 upm/examples/c++/th02.cxx create mode 100644 upm/examples/c++/tm1637.cxx create mode 100644 upm/examples/c++/tmp006.cxx create mode 100644 upm/examples/c++/tsl2561.cxx create mode 100644 upm/examples/c++/ttp223.cxx create mode 100644 upm/examples/c++/uartat-le910.cxx create mode 100644 upm/examples/c++/uln200xa.cxx create mode 100644 upm/examples/c++/ultrasonic.cxx create mode 100644 upm/examples/c++/urm37-uart.cxx create mode 100644 upm/examples/c++/urm37.cxx create mode 100644 upm/examples/c++/vcap.cxx create mode 100644 upm/examples/c++/vdiv.cxx create mode 100644 upm/examples/c++/veml6070.cxx create mode 100644 upm/examples/c++/water.cxx create mode 100644 upm/examples/c++/waterlevel.cxx create mode 100644 upm/examples/c++/wfs.cxx create mode 100644 upm/examples/c++/wheelencoder.cxx create mode 100644 upm/examples/c++/wt5001.cxx create mode 100644 upm/examples/c++/xbee.cxx create mode 100644 upm/examples/c++/yg1006.cxx create mode 100644 upm/examples/c++/zfm20-register.cxx create mode 100644 upm/examples/c++/zfm20.cxx create mode 100644 upm/examples/c/CMakeLists.txt create mode 100644 upm/examples/c/a110x.c create mode 100644 upm/examples/c/abp.c create mode 100755 upm/examples/c/bh1749.c create mode 100644 upm/examples/c/bh1750.c create mode 100755 upm/examples/c/bh1792.c create mode 100644 upm/examples/c/biss0001.c create mode 100644 upm/examples/c/bma250e.c create mode 100644 upm/examples/c/bmg160.c create mode 100644 upm/examples/c/bmi160.c create mode 100644 upm/examples/c/bmm150.c create mode 100644 upm/examples/c/bmp280-bme280.c create mode 100644 upm/examples/c/bmp280.c create mode 100644 upm/examples/c/bmpx8x.c create mode 100644 upm/examples/c/bno055.c create mode 100644 upm/examples/c/button-intr.c create mode 100644 upm/examples/c/button.c create mode 100644 upm/examples/c/buzzer.c create mode 100644 upm/examples/c/cjq4435.c create mode 100644 upm/examples/c/collision.c create mode 100644 upm/examples/c/dfrec.c create mode 100644 upm/examples/c/dfrorp.c create mode 100644 upm/examples/c/dfrph.c create mode 100644 upm/examples/c/ds18b20.c create mode 100644 upm/examples/c/ecezo.c create mode 100644 upm/examples/c/emg.c create mode 100644 upm/examples/c/enc03r.c create mode 100644 upm/examples/c/flex.c create mode 100644 upm/examples/c/gas-mqx.c create mode 100644 upm/examples/c/gp2y0a.c create mode 100644 upm/examples/c/gsr.c create mode 100644 upm/examples/c/guvas12d.c create mode 100644 upm/examples/c/hcsr04.c create mode 100644 upm/examples/c/hka5.c create mode 100644 upm/examples/c/hmc5883l.c create mode 100644 upm/examples/c/ims.c create mode 100644 upm/examples/c/jhd1313m1.c create mode 100644 upm/examples/c/joystick12.c create mode 100644 upm/examples/c/kx122.c create mode 100755 upm/examples/c/kxtj3.c create mode 100644 upm/examples/c/lcdks.c create mode 100644 upm/examples/c/lcm1602-i2c.c create mode 100644 upm/examples/c/lcm1602-parallel.c create mode 100644 upm/examples/c/ldt0028.c create mode 100644 upm/examples/c/led.c create mode 100644 upm/examples/c/light.c create mode 100644 upm/examples/c/linefinder.c create mode 100644 upm/examples/c/lis2ds12.c create mode 100644 upm/examples/c/lis3dh.c create mode 100644 upm/examples/c/lm35.c create mode 100644 upm/examples/c/loudness.c create mode 100644 upm/examples/c/lsm303agr.c create mode 100644 upm/examples/c/lsm303d.c create mode 100644 upm/examples/c/lsm6ds3h.c create mode 100644 upm/examples/c/lsm6dsl.c create mode 100644 upm/examples/c/m24lr64e.c create mode 100644 upm/examples/c/max30100.c create mode 100644 upm/examples/c/mb704x.c create mode 100644 upm/examples/c/mcp2515-txrx.c create mode 100644 upm/examples/c/mcp2515.c create mode 100644 upm/examples/c/md-stepper.c create mode 100644 upm/examples/c/md.c create mode 100644 upm/examples/c/mma7361.c create mode 100644 upm/examples/c/mma7660.c create mode 100644 upm/examples/c/moisture.c create mode 100644 upm/examples/c/mpr121.c create mode 100644 upm/examples/c/mq303a.c create mode 100644 upm/examples/c/ms5803.c create mode 100644 upm/examples/c/my9221.c create mode 100644 upm/examples/c/nmea_gps-i2c.c create mode 100644 upm/examples/c/nmea_gps.c create mode 100644 upm/examples/c/nunchuck.c create mode 100644 upm/examples/c/o2.c create mode 100644 upm/examples/c/otp538u.c create mode 100644 upm/examples/c/ppd42ns.c create mode 100644 upm/examples/c/rn2903-p2p-rx.c create mode 100644 upm/examples/c/rn2903-p2p-tx.c create mode 100644 upm/examples/c/rn2903.c create mode 100644 upm/examples/c/rotaryencoder.c create mode 100644 upm/examples/c/rpr220-intr.c create mode 100644 upm/examples/c/rpr220.c create mode 100644 upm/examples/c/rsc.c create mode 100644 upm/examples/c/servo.c create mode 100644 upm/examples/c/sht1x.c create mode 100644 upm/examples/c/slide.c create mode 100644 upm/examples/c/speaker-pwm.c create mode 100644 upm/examples/c/speaker.c create mode 100644 upm/examples/c/tsl2561.c create mode 100644 upm/examples/c/ttp223.c create mode 100644 upm/examples/c/uartat-le910.c create mode 100644 upm/examples/c/uln200xa.c create mode 100644 upm/examples/c/urm37-uart.c create mode 100644 upm/examples/c/urm37.c create mode 100644 upm/examples/c/vdiv.c create mode 100644 upm/examples/c/veml6070.c create mode 100644 upm/examples/c/water.c create mode 100644 upm/examples/c/wfs.c create mode 100644 upm/examples/c/yg1006.c create mode 100644 upm/examples/java/A110X_Example.java create mode 100644 upm/examples/java/A110X_intr_Example.java create mode 100644 upm/examples/java/ADC121C021_Example.java create mode 100644 upm/examples/java/AM2315_Example.java create mode 100644 upm/examples/java/APA102_Example.java create mode 100644 upm/examples/java/Ad8232_Example.java create mode 100644 upm/examples/java/Ads1015_Example.java create mode 100644 upm/examples/java/Ads1115_Example.java create mode 100644 upm/examples/java/Adxl345_Example.java create mode 100644 upm/examples/java/AeotecDSB09104_Example.java create mode 100644 upm/examples/java/AeotecDW2E_Example.java create mode 100644 upm/examples/java/AeotecSDG2_Example.java create mode 100644 upm/examples/java/AeotecSS6_Example.java create mode 100644 upm/examples/java/Apds9002_Example.java create mode 100755 upm/examples/java/BH1749_Example.java create mode 100644 upm/examples/java/BH1750_Example.java create mode 100755 upm/examples/java/BH1792_Example.java create mode 100644 upm/examples/java/BISS0001_Example.java create mode 100644 upm/examples/java/BMA220_Example.java create mode 100644 upm/examples/java/BMA250E_Example.java create mode 100644 upm/examples/java/BMC150_Example.java create mode 100644 upm/examples/java/BME280_Example.java create mode 100644 upm/examples/java/BME280_Interface_Example.java create mode 100644 upm/examples/java/BMG160_Example.java create mode 100644 upm/examples/java/BMI055_Example.java create mode 100644 upm/examples/java/BMI160_Example.java create mode 100644 upm/examples/java/BMM150_Example.java create mode 100644 upm/examples/java/BMP280_Example.java create mode 100644 upm/examples/java/BMPX8X_Example.java create mode 100644 upm/examples/java/BMX055_Example.java create mode 100644 upm/examples/java/BNO055_Example.java create mode 100644 upm/examples/java/Button_Example.java create mode 100644 upm/examples/java/Button_intr_Example.java create mode 100644 upm/examples/java/Buzzer_Example.java create mode 100644 upm/examples/java/CJQ4435_Example.java create mode 100644 upm/examples/java/CMakeLists.txt create mode 100644 upm/examples/java/CWLSXXA_Example.java create mode 100644 upm/examples/java/Collision_Example.java create mode 100644 upm/examples/java/DFREC_Example.java create mode 100644 upm/examples/java/DFRORP_Example.java create mode 100644 upm/examples/java/DFRPH_Example.java create mode 100644 upm/examples/java/DS1307_Example.java create mode 100644 upm/examples/java/E50HX_Example.java create mode 100644 upm/examples/java/ECEZO_Example.java create mode 100644 upm/examples/java/ECS1030_Example.java create mode 100644 upm/examples/java/EHR_Example.java create mode 100644 upm/examples/java/ENC03R_Example.java create mode 100644 upm/examples/java/ES08A_Example.java create mode 100644 upm/examples/java/Emg_Example.java create mode 100644 upm/examples/java/FlexSensor_Example.java create mode 100644 upm/examples/java/GROVESCAM_Example.java create mode 100644 upm/examples/java/GUVAS12D_Example.java create mode 100644 upm/examples/java/Gp2y0a_Example.java create mode 100644 upm/examples/java/GroveButton_Example.java create mode 100644 upm/examples/java/GroveButton_intr_Example.java create mode 100644 upm/examples/java/GroveCollision_Example.java create mode 100644 upm/examples/java/GroveEHR_Example.java create mode 100644 upm/examples/java/GroveEmg_Example.java create mode 100644 upm/examples/java/GroveGsr_Example.java create mode 100644 upm/examples/java/GroveLEDBar_Example.java create mode 100644 upm/examples/java/GroveLED_Example.java create mode 100644 upm/examples/java/GroveLed_multi_Example.java create mode 100644 upm/examples/java/GroveLight_Example.java create mode 100644 upm/examples/java/GroveLineFinder_Example.java create mode 100644 upm/examples/java/GroveMD_Example.java create mode 100644 upm/examples/java/GroveMQ3_Example.java create mode 100644 upm/examples/java/GroveMQ9_Example.java create mode 100644 upm/examples/java/GroveMoisture_Example.java create mode 100644 upm/examples/java/GroveO2_Example.java create mode 100644 upm/examples/java/GroveQTouch_Example.java create mode 100644 upm/examples/java/GroveRelay_Example.java create mode 100644 upm/examples/java/GroveRotary_Example.java create mode 100644 upm/examples/java/GroveSlide_Example.java create mode 100644 upm/examples/java/GroveSpeaker_Example.java create mode 100644 upm/examples/java/GroveTemp_Example.java create mode 100644 upm/examples/java/GroveUltraSonic_Example.java create mode 100644 upm/examples/java/GroveVDiv_Example.java create mode 100644 upm/examples/java/GroveWFS_Example.java create mode 100644 upm/examples/java/GroveWater_Example.java create mode 100644 upm/examples/java/Gsr_Example.java create mode 100644 upm/examples/java/H3LIS331DL_Example.java create mode 100644 upm/examples/java/H803X_Example.java create mode 100644 upm/examples/java/HCSR04_Example.java create mode 100644 upm/examples/java/HKA5_Example.java create mode 100644 upm/examples/java/HM11_Example.java create mode 100644 upm/examples/java/HMTRP_Example.java create mode 100644 upm/examples/java/HP20x_Example.java create mode 100644 upm/examples/java/HTU21D_Example.java create mode 100644 upm/examples/java/Hmc5883l_Example.java create mode 100644 upm/examples/java/IMS_Example.java create mode 100644 upm/examples/java/Itg3200_Example.java create mode 100644 upm/examples/java/Jhd1313m1_Example.java create mode 100644 upm/examples/java/Jhd1313m1_lcd_Example.java create mode 100644 upm/examples/java/Joystick12_Example.java create mode 100644 upm/examples/java/Joystick12_example_Example.java create mode 100644 upm/examples/java/KX122_Example.java create mode 100755 upm/examples/java/KXTJ3_Example.java create mode 100644 upm/examples/java/LCD_EBOLED_Example.java create mode 100644 upm/examples/java/LCD_SSD1306_Example.java create mode 100644 upm/examples/java/LDT0028_Example.java create mode 100644 upm/examples/java/LE910_Example.java create mode 100644 upm/examples/java/LED_Example.java create mode 100644 upm/examples/java/LIS2DS12_Example.java create mode 100644 upm/examples/java/LIS3DH_Example.java create mode 100644 upm/examples/java/LM35_Example.java create mode 100644 upm/examples/java/LSM303AGR_Example.java create mode 100644 upm/examples/java/LSM303DLH_Example.java create mode 100644 upm/examples/java/LSM303D_Example.java create mode 100644 upm/examples/java/LSM6DS3H_Example.java create mode 100644 upm/examples/java/LSM6DSL_Example.java create mode 100644 upm/examples/java/LSM9DS0_Example.java create mode 100644 upm/examples/java/Lcm1602_i2c_Example.java create mode 100644 upm/examples/java/Lcm1602_parallel_Example.java create mode 100644 upm/examples/java/Light_Example.java create mode 100644 upm/examples/java/LineFinder_Example.java create mode 100644 upm/examples/java/LoL_Example.java create mode 100644 upm/examples/java/LoL_example_Example.java create mode 100644 upm/examples/java/Loudness_Example.java create mode 100644 upm/examples/java/M24LR64E_Example.java create mode 100644 upm/examples/java/MAX30100_Example.java create mode 100644 upm/examples/java/MAX31855_Example.java create mode 100644 upm/examples/java/MAX44000_Example.java create mode 100644 upm/examples/java/MAX5487_Example.java create mode 100644 upm/examples/java/MAXds3231m_Example.java create mode 100644 upm/examples/java/MB704X_Example.java create mode 100644 upm/examples/java/MCP2515_Example.java create mode 100644 upm/examples/java/MCP2515_TXRX_Example.java create mode 100644 upm/examples/java/MCP9808_Example.java create mode 100644 upm/examples/java/MD_Example.java create mode 100644 upm/examples/java/MG811_Example.java create mode 100644 upm/examples/java/MHZ16_Example.java create mode 100644 upm/examples/java/MMA7361_Example.java create mode 100644 upm/examples/java/MMA7455_Example.java create mode 100644 upm/examples/java/MMA7660_Example.java create mode 100644 upm/examples/java/MPL3115A2_Example.java create mode 100644 upm/examples/java/MPR121_Example.java create mode 100644 upm/examples/java/MPU9150_Example.java create mode 100644 upm/examples/java/MQ2_Example.java create mode 100644 upm/examples/java/MQ303A_Example.java create mode 100644 upm/examples/java/MQ4_Example.java create mode 100644 upm/examples/java/MQ5_Example.java create mode 100644 upm/examples/java/MQ6_Example.java create mode 100644 upm/examples/java/MQ7_Example.java create mode 100644 upm/examples/java/MQ8_Example.java create mode 100644 upm/examples/java/MS5803_Example.java create mode 100644 upm/examples/java/Microphone_Example.java create mode 100644 upm/examples/java/Moisture_Example.java create mode 100644 upm/examples/java/NLGPIO16_Example.java create mode 100644 upm/examples/java/NMEAGPS_Example.java create mode 100644 upm/examples/java/NMEAGPS_I2C_Example.java create mode 100644 upm/examples/java/NRF24L01_receiver_Example.java create mode 100644 upm/examples/java/NRF24L01_transmitter_Example.java create mode 100644 upm/examples/java/NUNCHUCK_Example.java create mode 100644 upm/examples/java/O2_Example.java create mode 100644 upm/examples/java/OTP538U_Example.java create mode 100644 upm/examples/java/P9813_Example.java create mode 100644 upm/examples/java/PN532_Example.java create mode 100644 upm/examples/java/PN532_writeurl_Example.java create mode 100644 upm/examples/java/PPD42NS_Example.java create mode 100644 upm/examples/java/Pulsensor_Example.java create mode 100644 upm/examples/java/RFR359F_Example.java create mode 100644 upm/examples/java/RHUSB_Example.java create mode 100644 upm/examples/java/RN2903_Example.java create mode 100644 upm/examples/java/RN2903_P2P_RX_Example.java create mode 100644 upm/examples/java/RN2903_P2P_TX_Example.java create mode 100644 upm/examples/java/RPR220_Example.java create mode 100644 upm/examples/java/RPR220_intr_Example.java create mode 100644 upm/examples/java/Relay_Example.java create mode 100644 upm/examples/java/RotaryEncoder_Example.java create mode 100644 upm/examples/java/Rotary_Example.java create mode 100644 upm/examples/java/SCAM_Example.java create mode 100644 upm/examples/java/SHT1X_Example.java create mode 100644 upm/examples/java/SM130_Example.java create mode 100644 upm/examples/java/SSD1308_oled_Example.java create mode 100644 upm/examples/java/SSD1327_oled_Example.java create mode 100644 upm/examples/java/ST7735_Example.java create mode 100644 upm/examples/java/SensorTemplate_Example.java create mode 100644 upm/examples/java/Slide_Example.java create mode 100644 upm/examples/java/SpeakerPWM_Example.java create mode 100644 upm/examples/java/Speaker_Example.java create mode 100644 upm/examples/java/StepMotor_Example.java create mode 100644 upm/examples/java/T8100_Example.java create mode 100644 upm/examples/java/TB7300_Example.java create mode 100644 upm/examples/java/TEAMS_Example.java create mode 100644 upm/examples/java/TEX00_Example.java create mode 100644 upm/examples/java/TM1637_Example.java create mode 100644 upm/examples/java/TP401_Example.java create mode 100644 upm/examples/java/TSL2561_Example.java create mode 100644 upm/examples/java/TTP223_Example.java create mode 100644 upm/examples/java/TZEMT400_Example.java create mode 100644 upm/examples/java/Temperature_Example.java create mode 100644 upm/examples/java/Th02_Example.java create mode 100644 upm/examples/java/ULN200XA_Example.java create mode 100644 upm/examples/java/VCAP_Example.java create mode 100644 upm/examples/java/VDiv_Example.java create mode 100644 upm/examples/java/VEML6070_Example.java create mode 100644 upm/examples/java/WFS_Example.java create mode 100644 upm/examples/java/WT5001_Example.java create mode 100644 upm/examples/java/WaterLevelSensor_Example.java create mode 100644 upm/examples/java/Water_Example.java create mode 100644 upm/examples/java/WheelEncoder_Example.java create mode 100644 upm/examples/java/YG1006_Example.java create mode 100644 upm/examples/java/ZFM20_Example.java create mode 100644 upm/examples/javascript/a110x.js create mode 100644 upm/examples/javascript/abp.js create mode 100644 upm/examples/javascript/ad8232.js create mode 100644 upm/examples/javascript/adafruitms1438-stepper.js create mode 100644 upm/examples/javascript/adafruitms1438.js create mode 100644 upm/examples/javascript/adc121c021.js create mode 100644 upm/examples/javascript/adis16448.js create mode 100644 upm/examples/javascript/ads1015.js create mode 100644 upm/examples/javascript/ads1115.js create mode 100644 upm/examples/javascript/ads1x15.js create mode 100644 upm/examples/javascript/adxl335.js create mode 100644 upm/examples/javascript/adxl345.js create mode 100644 upm/examples/javascript/adxrs610.js create mode 100644 upm/examples/javascript/aeotecdsb09104.js create mode 100644 upm/examples/javascript/aeotecdw2e.js create mode 100644 upm/examples/javascript/aeotecsdg2.js create mode 100644 upm/examples/javascript/aeotecss6.js create mode 100644 upm/examples/javascript/ak8975.js create mode 100644 upm/examples/javascript/apa102.js create mode 100644 upm/examples/javascript/apds9002.js create mode 100644 upm/examples/javascript/at42qt1070.js create mode 100755 upm/examples/javascript/bh1749.js create mode 100644 upm/examples/javascript/bh1750.js create mode 100755 upm/examples/javascript/bh1792.js create mode 100644 upm/examples/javascript/biss0001.js create mode 100644 upm/examples/javascript/bma220.js create mode 100644 upm/examples/javascript/bma250e.js create mode 100644 upm/examples/javascript/bmc150.js create mode 100644 upm/examples/javascript/bme280.js create mode 100644 upm/examples/javascript/bmg160.js create mode 100644 upm/examples/javascript/bmi055.js create mode 100644 upm/examples/javascript/bmi160.js create mode 100644 upm/examples/javascript/bmm150.js create mode 100644 upm/examples/javascript/bmp280.js create mode 100644 upm/examples/javascript/bmpx8x.js create mode 100644 upm/examples/javascript/bmx055.js create mode 100644 upm/examples/javascript/bno055.js create mode 100644 upm/examples/javascript/button.js create mode 100644 upm/examples/javascript/buzzer.js create mode 100644 upm/examples/javascript/cjq4435.js create mode 100644 upm/examples/javascript/collision.js create mode 100644 upm/examples/javascript/curieimu.js create mode 100644 upm/examples/javascript/cwlsxxa.js create mode 100644 upm/examples/javascript/dfrec.js create mode 100644 upm/examples/javascript/dfrorp.js create mode 100644 upm/examples/javascript/dfrph.js create mode 100644 upm/examples/javascript/ds1307.js create mode 100644 upm/examples/javascript/ds18b20.js create mode 100644 upm/examples/javascript/ds2413.js create mode 100644 upm/examples/javascript/e50hx.js create mode 100644 upm/examples/javascript/eboled.js create mode 100644 upm/examples/javascript/ecezo.js create mode 100644 upm/examples/javascript/ehr.js create mode 100644 upm/examples/javascript/eldriver.js create mode 100644 upm/examples/javascript/electromagnet.js create mode 100644 upm/examples/javascript/emg.js create mode 100644 upm/examples/javascript/enc03r.js create mode 100644 upm/examples/javascript/es08a.js create mode 100644 upm/examples/javascript/flex.js create mode 100644 upm/examples/javascript/gp2y0a.js create mode 100644 upm/examples/javascript/gprs.js create mode 100644 upm/examples/javascript/grove_mcfled.js create mode 100644 upm/examples/javascript/grovebutton.js create mode 100644 upm/examples/javascript/grovecircularled.js create mode 100644 upm/examples/javascript/grovecollision.js create mode 100644 upm/examples/javascript/groveehr.js create mode 100644 upm/examples/javascript/groveeldriver.js create mode 100644 upm/examples/javascript/groveelectromagnet.js create mode 100644 upm/examples/javascript/groveemg.js create mode 100644 upm/examples/javascript/grovegprs.js create mode 100644 upm/examples/javascript/grovegsr.js create mode 100644 upm/examples/javascript/groveled.js create mode 100644 upm/examples/javascript/groveledbar.js create mode 100644 upm/examples/javascript/grovelight.js create mode 100644 upm/examples/javascript/grovelinefinder.js create mode 100644 upm/examples/javascript/grovemd-stepper.js create mode 100644 upm/examples/javascript/grovemd.js create mode 100644 upm/examples/javascript/grovemoisture.js create mode 100644 upm/examples/javascript/groveo2.js create mode 100644 upm/examples/javascript/groverelay.js create mode 100644 upm/examples/javascript/groverotary.js create mode 100644 upm/examples/javascript/grovescam.js create mode 100644 upm/examples/javascript/groveslide.js create mode 100644 upm/examples/javascript/grovespeaker.js create mode 100644 upm/examples/javascript/grovetemp.js create mode 100644 upm/examples/javascript/groveultrasonic.js create mode 100644 upm/examples/javascript/grovevdiv.js create mode 100644 upm/examples/javascript/grovewater.js create mode 100644 upm/examples/javascript/grovewfs.js create mode 100644 upm/examples/javascript/gsr.js create mode 100644 upm/examples/javascript/guvas12d.js create mode 100644 upm/examples/javascript/h3lis331dl.js create mode 100644 upm/examples/javascript/h803x.js create mode 100644 upm/examples/javascript/hcsr04.js create mode 100644 upm/examples/javascript/hdxxvxta.js create mode 100644 upm/examples/javascript/hka5.js create mode 100644 upm/examples/javascript/hm11.js create mode 100644 upm/examples/javascript/hmc5883l.js create mode 100644 upm/examples/javascript/hmtrp.js create mode 100644 upm/examples/javascript/hp20x.js create mode 100644 upm/examples/javascript/ht9170.js create mode 100644 upm/examples/javascript/htu21d.js create mode 100644 upm/examples/javascript/hwxpxx.js create mode 100644 upm/examples/javascript/hx711.js create mode 100644 upm/examples/javascript/ili9341.js create mode 100644 upm/examples/javascript/ims.js create mode 100644 upm/examples/javascript/ina132.js create mode 100644 upm/examples/javascript/isd1820.js create mode 100644 upm/examples/javascript/itg3200.js create mode 100644 upm/examples/javascript/jhd1313m1-lcd.js create mode 100644 upm/examples/javascript/joystick12.js create mode 100644 upm/examples/javascript/kx122.js create mode 100755 upm/examples/javascript/kxtj3.js create mode 100644 upm/examples/javascript/l298-stepper.js create mode 100644 upm/examples/javascript/l298.js create mode 100644 upm/examples/javascript/lcdks.js create mode 100644 upm/examples/javascript/ldt0028.js create mode 100644 upm/examples/javascript/le910.js create mode 100644 upm/examples/javascript/led.js create mode 100644 upm/examples/javascript/light.js create mode 100644 upm/examples/javascript/linefinder.js create mode 100644 upm/examples/javascript/lis2ds12.js create mode 100644 upm/examples/javascript/lis3dh.js create mode 100644 upm/examples/javascript/lm35.js create mode 100644 upm/examples/javascript/loudness.js create mode 100644 upm/examples/javascript/lsm303agr.js create mode 100644 upm/examples/javascript/lsm303d.js create mode 100644 upm/examples/javascript/lsm303dhl.js create mode 100644 upm/examples/javascript/lsm6ds3h.js create mode 100644 upm/examples/javascript/lsm6dsl.js create mode 100644 upm/examples/javascript/lsm9ds0.js create mode 100644 upm/examples/javascript/m24lr64e.js create mode 100644 upm/examples/javascript/max30100.js create mode 100644 upm/examples/javascript/maxsonarez.js create mode 100644 upm/examples/javascript/mb704x.js create mode 100644 upm/examples/javascript/mcp2515-txrx.js create mode 100644 upm/examples/javascript/mcp2515.js create mode 100644 upm/examples/javascript/mcp9808.js create mode 100644 upm/examples/javascript/md-stepper.js create mode 100644 upm/examples/javascript/md.js create mode 100644 upm/examples/javascript/mg811.js create mode 100644 upm/examples/javascript/mhz16.js create mode 100644 upm/examples/javascript/mic.js create mode 100644 upm/examples/javascript/micsv89.js create mode 100644 upm/examples/javascript/mma7361.js create mode 100644 upm/examples/javascript/mma7660.js create mode 100644 upm/examples/javascript/moisture.js create mode 100644 upm/examples/javascript/mpr121.js create mode 100644 upm/examples/javascript/mpu60x0.js create mode 100644 upm/examples/javascript/mpu9150.js create mode 100644 upm/examples/javascript/mpu9250.js create mode 100644 upm/examples/javascript/mq2.js create mode 100644 upm/examples/javascript/mq3.js create mode 100644 upm/examples/javascript/mq303a.js create mode 100644 upm/examples/javascript/mq4.js create mode 100644 upm/examples/javascript/mq5.js create mode 100644 upm/examples/javascript/mq6.js create mode 100644 upm/examples/javascript/mq7.js create mode 100644 upm/examples/javascript/mq8.js create mode 100644 upm/examples/javascript/mq9.js create mode 100644 upm/examples/javascript/ms5611.js create mode 100644 upm/examples/javascript/ms5803.js create mode 100644 upm/examples/javascript/nlgpio16.js create mode 100644 upm/examples/javascript/nmea_gps.js create mode 100644 upm/examples/javascript/nmea_gps_i2c.js create mode 100644 upm/examples/javascript/nunchuck.js create mode 100644 upm/examples/javascript/o2.js create mode 100644 upm/examples/javascript/oled_ssd1306.js create mode 100644 upm/examples/javascript/oled_ssd1308.js create mode 100644 upm/examples/javascript/oled_ssd1327.js create mode 100644 upm/examples/javascript/otp538u.js create mode 100644 upm/examples/javascript/ozwdump.js create mode 100644 upm/examples/javascript/p9813.js create mode 100644 upm/examples/javascript/pca9685.js create mode 100644 upm/examples/javascript/pn532-writeurl.js create mode 100644 upm/examples/javascript/pn532.js create mode 100644 upm/examples/javascript/ppd42ns.js create mode 100644 upm/examples/javascript/relay.js create mode 100644 upm/examples/javascript/rfr359f.js create mode 100644 upm/examples/javascript/rgbringcoder.js create mode 100644 upm/examples/javascript/rhusb.js create mode 100644 upm/examples/javascript/rn2903-p2p-rx.js create mode 100644 upm/examples/javascript/rn2903-p2p-tx.js create mode 100644 upm/examples/javascript/rn2903.js create mode 100644 upm/examples/javascript/rotary.js create mode 100644 upm/examples/javascript/rotaryencoder.js create mode 100644 upm/examples/javascript/rpr220.js create mode 100644 upm/examples/javascript/rsc.js create mode 100644 upm/examples/javascript/scam.js create mode 100644 upm/examples/javascript/sensortemplate.js create mode 100644 upm/examples/javascript/sht1x.js create mode 100644 upm/examples/javascript/si114x.js create mode 100644 upm/examples/javascript/slide.js create mode 100644 upm/examples/javascript/sm130.js create mode 100644 upm/examples/javascript/speaker.js create mode 100644 upm/examples/javascript/speaker_pwm.js create mode 100644 upm/examples/javascript/st7735.js create mode 100644 upm/examples/javascript/stepmotor.js create mode 100644 upm/examples/javascript/sx1276-fsk.js create mode 100644 upm/examples/javascript/sx1276-lora.js create mode 100644 upm/examples/javascript/sx6119.js create mode 100644 upm/examples/javascript/t3311.js create mode 100644 upm/examples/javascript/t8100.js create mode 100644 upm/examples/javascript/ta12200.js create mode 100644 upm/examples/javascript/tb7300.js create mode 100644 upm/examples/javascript/tca9548.js create mode 100644 upm/examples/javascript/tcs3414cs.js create mode 100644 upm/examples/javascript/teams.js create mode 100644 upm/examples/javascript/temperature.js create mode 100644 upm/examples/javascript/tex00.js create mode 100644 upm/examples/javascript/tm1637.js create mode 100644 upm/examples/javascript/tp401.js create mode 100644 upm/examples/javascript/tsl2561.js create mode 100644 upm/examples/javascript/ttp223.js create mode 100644 upm/examples/javascript/tzemt400.js create mode 100644 upm/examples/javascript/uln200xa.js create mode 100644 upm/examples/javascript/ultrasonic.js create mode 100644 upm/examples/javascript/urm37-uart.js create mode 100644 upm/examples/javascript/urm37.js create mode 100644 upm/examples/javascript/vcap.js create mode 100644 upm/examples/javascript/vdiv.js create mode 100644 upm/examples/javascript/veml6070.js create mode 100644 upm/examples/javascript/water.js create mode 100644 upm/examples/javascript/waterlevel.js create mode 100644 upm/examples/javascript/wfs.js create mode 100644 upm/examples/javascript/wheelencoder.js create mode 100644 upm/examples/javascript/wt5001.js create mode 100644 upm/examples/javascript/xbee.js create mode 100644 upm/examples/javascript/yg1006.js create mode 100644 upm/examples/javascript/zfm20-register.js create mode 100644 upm/examples/javascript/zfm20.js create mode 100755 upm/examples/python/a110x.py create mode 100755 upm/examples/python/abp.py create mode 100755 upm/examples/python/ad8232.py create mode 100755 upm/examples/python/adafruitms1438-stepper.py create mode 100755 upm/examples/python/adafruitms1438.py create mode 100755 upm/examples/python/adc121c021.py create mode 100755 upm/examples/python/ads1015.py create mode 100755 upm/examples/python/ads1115.py create mode 100755 upm/examples/python/adxl335.py create mode 100755 upm/examples/python/adxl345.py create mode 100755 upm/examples/python/adxrs610.py create mode 100755 upm/examples/python/aeotecdsb09104.py create mode 100755 upm/examples/python/aeotecdw2e.py create mode 100755 upm/examples/python/aeotecsdg2.py create mode 100755 upm/examples/python/aeotecss6.py create mode 100755 upm/examples/python/ak8975.py create mode 100755 upm/examples/python/apa102.py create mode 100755 upm/examples/python/apds9002.py create mode 100755 upm/examples/python/at42qt1070.py create mode 100755 upm/examples/python/bh1749.py create mode 100755 upm/examples/python/bh1750.py create mode 100755 upm/examples/python/bh1792.py create mode 100755 upm/examples/python/biss0001.py create mode 100755 upm/examples/python/bma220.py create mode 100755 upm/examples/python/bma250e.py create mode 100755 upm/examples/python/bmc150.py create mode 100755 upm/examples/python/bme280.py create mode 100755 upm/examples/python/bmg160.py create mode 100755 upm/examples/python/bmi055.py create mode 100755 upm/examples/python/bmi160.py create mode 100755 upm/examples/python/bmm150.py create mode 100755 upm/examples/python/bmp280.py create mode 100755 upm/examples/python/bmpx8x.py create mode 100755 upm/examples/python/bmx055.py create mode 100755 upm/examples/python/bno055.py create mode 100755 upm/examples/python/button.py create mode 100755 upm/examples/python/buzzer.py create mode 100755 upm/examples/python/cjq4435.py create mode 100755 upm/examples/python/collision.py create mode 100755 upm/examples/python/curieimu.py create mode 100755 upm/examples/python/cwlsxxa.py create mode 100755 upm/examples/python/dfrec.py create mode 100755 upm/examples/python/dfrorp.py create mode 100755 upm/examples/python/dfrph.py create mode 100755 upm/examples/python/ds1307.py create mode 100755 upm/examples/python/ds18b20.py create mode 100755 upm/examples/python/ds2413.py create mode 100755 upm/examples/python/e50hx.py create mode 100755 upm/examples/python/eboled.py create mode 100755 upm/examples/python/ecezo.py create mode 100755 upm/examples/python/ehr.py create mode 100755 upm/examples/python/eldriver.py create mode 100755 upm/examples/python/electromagnet.py create mode 100755 upm/examples/python/emg.py create mode 100755 upm/examples/python/enc03r.py create mode 100755 upm/examples/python/es08a.py create mode 100755 upm/examples/python/gp2y0a.py create mode 100755 upm/examples/python/gprs.py create mode 100755 upm/examples/python/grovebutton.py create mode 100755 upm/examples/python/grovecircularled.py create mode 100755 upm/examples/python/grovecollision.py create mode 100755 upm/examples/python/groveehr.py create mode 100755 upm/examples/python/groveeldriver.py create mode 100755 upm/examples/python/groveelectromagnet.py create mode 100755 upm/examples/python/groveemg.py create mode 100755 upm/examples/python/grovegprs.py create mode 100755 upm/examples/python/grovegsr.py create mode 100755 upm/examples/python/groveled.py create mode 100755 upm/examples/python/groveledbar.py create mode 100755 upm/examples/python/grovelight.py create mode 100755 upm/examples/python/grovelinefinder.py create mode 100755 upm/examples/python/grovemd-stepper.py create mode 100755 upm/examples/python/grovemd.py create mode 100755 upm/examples/python/grovemoisture.py create mode 100755 upm/examples/python/groveo2.py create mode 100755 upm/examples/python/groverelay.py create mode 100755 upm/examples/python/groverotary.py create mode 100755 upm/examples/python/grovescam.py create mode 100755 upm/examples/python/groveslide.py create mode 100755 upm/examples/python/grovespeaker.py create mode 100755 upm/examples/python/grovetemp.py create mode 100755 upm/examples/python/grovevdiv.py create mode 100755 upm/examples/python/grovewater.py create mode 100755 upm/examples/python/grovewfs.py create mode 100755 upm/examples/python/gsr.py create mode 100755 upm/examples/python/guvas12d.py create mode 100755 upm/examples/python/h3lis331dl.py create mode 100755 upm/examples/python/h803x.py create mode 100755 upm/examples/python/hcsr04.py create mode 100755 upm/examples/python/hdc1000.py create mode 100755 upm/examples/python/hdxxvxta.py create mode 100755 upm/examples/python/hka5.py create mode 100755 upm/examples/python/hm11.py create mode 100755 upm/examples/python/hmc5883l.py create mode 100755 upm/examples/python/hmtrp.py create mode 100755 upm/examples/python/hp20x.py create mode 100755 upm/examples/python/ht9170.py create mode 100755 upm/examples/python/htu21d.py create mode 100755 upm/examples/python/hwxpxx.py create mode 100755 upm/examples/python/ili9341.py create mode 100755 upm/examples/python/ims.py create mode 100755 upm/examples/python/ina132.py create mode 100755 upm/examples/python/isd1820.py create mode 100755 upm/examples/python/itg3200.py create mode 100755 upm/examples/python/jhd1313m1-lcd.py create mode 100755 upm/examples/python/joystick12.py create mode 100755 upm/examples/python/kx122.py create mode 100755 upm/examples/python/kxtj3.py create mode 100755 upm/examples/python/l298-stepper.py create mode 100755 upm/examples/python/l298.py create mode 100755 upm/examples/python/lcdks.py create mode 100755 upm/examples/python/ldt0028.py create mode 100755 upm/examples/python/le910.py create mode 100755 upm/examples/python/led.py create mode 100755 upm/examples/python/light.py create mode 100755 upm/examples/python/linefinder.py create mode 100755 upm/examples/python/lis2ds12.py create mode 100755 upm/examples/python/lis3dh.py create mode 100755 upm/examples/python/lm35.py create mode 100755 upm/examples/python/loudness.py create mode 100755 upm/examples/python/lsm303agr.py create mode 100755 upm/examples/python/lsm303d.py create mode 100755 upm/examples/python/lsm303dlh.py create mode 100755 upm/examples/python/lsm6ds3h.py create mode 100755 upm/examples/python/lsm6dsl.py create mode 100755 upm/examples/python/lsm9ds0.py create mode 100755 upm/examples/python/m24lr64e.py create mode 100755 upm/examples/python/mag3110.py create mode 100755 upm/examples/python/make_oled_pic.py create mode 100755 upm/examples/python/max30100.py create mode 100755 upm/examples/python/maxsonarez.py create mode 100755 upm/examples/python/mb704x.py create mode 100755 upm/examples/python/mcp2515-txrx.py create mode 100755 upm/examples/python/mcp2515.py create mode 100755 upm/examples/python/md-stepper.py create mode 100755 upm/examples/python/md.py create mode 100755 upm/examples/python/mg811.py create mode 100755 upm/examples/python/mhz16.py create mode 100755 upm/examples/python/mic.py create mode 100755 upm/examples/python/mma7361.py create mode 100755 upm/examples/python/mma7660.py create mode 100755 upm/examples/python/mma8x5x.py create mode 100755 upm/examples/python/moisture.py create mode 100755 upm/examples/python/mpr121.py create mode 100755 upm/examples/python/mpu60x0.py create mode 100755 upm/examples/python/mpu9150.py create mode 100755 upm/examples/python/mpu9250.py create mode 100755 upm/examples/python/mq2.py create mode 100755 upm/examples/python/mq3.py create mode 100755 upm/examples/python/mq303a.py create mode 100755 upm/examples/python/mq4.py create mode 100755 upm/examples/python/mq5.py create mode 100755 upm/examples/python/mq6.py create mode 100755 upm/examples/python/mq7.py create mode 100755 upm/examples/python/mq8.py create mode 100755 upm/examples/python/mq9.py create mode 100755 upm/examples/python/ms5803.py create mode 100755 upm/examples/python/nlgpio16.py create mode 100755 upm/examples/python/nmea_gps.py create mode 100755 upm/examples/python/nmea_gps_i2c.py create mode 100755 upm/examples/python/nunchuck.py create mode 100755 upm/examples/python/o2.py create mode 100755 upm/examples/python/oled_ssd1308.py create mode 100755 upm/examples/python/oled_ssd1327.py create mode 100755 upm/examples/python/otp538u.py create mode 100755 upm/examples/python/ozwdump.py create mode 100755 upm/examples/python/p9813.py create mode 100755 upm/examples/python/pn532-writeurl.py create mode 100755 upm/examples/python/pn532.py create mode 100755 upm/examples/python/ppd42ns.py create mode 100755 upm/examples/python/relay.py create mode 100755 upm/examples/python/rfr359f.py create mode 100755 upm/examples/python/rgbringcoder.py create mode 100755 upm/examples/python/rhusb.py create mode 100755 upm/examples/python/rn2903-p2p-rx.py create mode 100755 upm/examples/python/rn2903-p2p-tx.py create mode 100755 upm/examples/python/rn2903.py create mode 100755 upm/examples/python/rotary.py create mode 100755 upm/examples/python/rotaryencoder.py create mode 100755 upm/examples/python/rpr220.py create mode 100755 upm/examples/python/rsc.py create mode 100755 upm/examples/python/scam.py create mode 100755 upm/examples/python/sensortemplate.py create mode 100755 upm/examples/python/sht1x.py create mode 100755 upm/examples/python/si114x.py create mode 100755 upm/examples/python/slide.py create mode 100755 upm/examples/python/sm130.py create mode 100755 upm/examples/python/speaker.py create mode 100755 upm/examples/python/speaker_pwm.py create mode 100755 upm/examples/python/stepmotor.py create mode 100755 upm/examples/python/sx1276-fsk.py create mode 100755 upm/examples/python/sx1276-lora.py create mode 100755 upm/examples/python/sx6119.py create mode 100755 upm/examples/python/t3311.py create mode 100755 upm/examples/python/t8100.py create mode 100755 upm/examples/python/ta12200.py create mode 100755 upm/examples/python/tb7300.py create mode 100755 upm/examples/python/tcs3414cs.py create mode 100755 upm/examples/python/tcs37727.py create mode 100755 upm/examples/python/teams.py create mode 100755 upm/examples/python/temperature.py create mode 100755 upm/examples/python/tex00.py create mode 100755 upm/examples/python/tm1637.py create mode 100755 upm/examples/python/tmp006.py create mode 100755 upm/examples/python/tp401.py create mode 100755 upm/examples/python/tsl2561.py create mode 100755 upm/examples/python/ttp223.py create mode 100755 upm/examples/python/tzemt400.py create mode 100755 upm/examples/python/uln200xa.py create mode 100755 upm/examples/python/urm37-uart.py create mode 100755 upm/examples/python/urm37.py create mode 100755 upm/examples/python/vcap.py create mode 100755 upm/examples/python/vdiv.py create mode 100755 upm/examples/python/veml6070.py create mode 100755 upm/examples/python/water.py create mode 100755 upm/examples/python/waterlevel.py create mode 100755 upm/examples/python/wfs.py create mode 100755 upm/examples/python/wheelencoder.py create mode 100755 upm/examples/python/wt5001.py create mode 100755 upm/examples/python/xbee.py create mode 100755 upm/examples/python/yg1006.py create mode 100755 upm/examples/python/zfm20-register.py create mode 100755 upm/examples/python/zfm20.py create mode 100644 upm/include/external/json/json.hpp create mode 100644 upm/include/fti/upm_acceleration.h create mode 100644 upm/include/fti/upm_angle.h create mode 100644 upm/include/fti/upm_audio.h create mode 100644 upm/include/fti/upm_binary.h create mode 100644 upm/include/fti/upm_buttons.h create mode 100644 upm/include/fti/upm_compass.h create mode 100644 upm/include/fti/upm_distance.h create mode 100644 upm/include/fti/upm_ec.h create mode 100644 upm/include/fti/upm_gyroscope.h create mode 100644 upm/include/fti/upm_heart_rate.h create mode 100644 upm/include/fti/upm_humidity.h create mode 100644 upm/include/fti/upm_joystick.h create mode 100644 upm/include/fti/upm_light.h create mode 100644 upm/include/fti/upm_magnetometer.h create mode 100644 upm/include/fti/upm_moisture.h create mode 100644 upm/include/fti/upm_orp.h create mode 100644 upm/include/fti/upm_ph.h create mode 100644 upm/include/fti/upm_potentiometer.h create mode 100644 upm/include/fti/upm_pressure.h create mode 100644 upm/include/fti/upm_raw.h create mode 100644 upm/include/fti/upm_rotaryencoder.h create mode 100644 upm/include/fti/upm_sensor.h create mode 100644 upm/include/fti/upm_servo.h create mode 100644 upm/include/fti/upm_stream.h create mode 100644 upm/include/fti/upm_switch.h create mode 100644 upm/include/fti/upm_temperature.h create mode 100644 upm/include/fti/upm_touch.h create mode 100644 upm/include/fti/upm_vibration.h create mode 100644 upm/include/fti/upm_voltage.h create mode 100644 upm/include/upm.h create mode 100644 upm/include/upm_fti.h create mode 100644 upm/include/upm_internal.h create mode 100644 upm/include/upm_math.h create mode 100644 upm/include/upm_platform.h create mode 100644 upm/include/upm_types.h create mode 100755 upm/scripts/build-android.sh create mode 100755 upm/scripts/build-doc.sh create mode 100755 upm/scripts/run-cmake.sh create mode 100755 upm/scripts/sonar-scan.sh create mode 100644 upm/src/CMakeLists.txt create mode 100644 upm/src/a110x/CMakeLists.txt create mode 100644 upm/src/a110x/a110x.c create mode 100644 upm/src/a110x/a110x.cxx create mode 100644 upm/src/a110x/a110x.h create mode 100644 upm/src/a110x/a110x.hpp create mode 100644 upm/src/a110x/a110x.i create mode 100644 upm/src/a110x/a110x.json create mode 100644 upm/src/a110x/a110x_fti.c create mode 100644 upm/src/abp/CMakeLists.txt create mode 100644 upm/src/abp/abp.c create mode 100644 upm/src/abp/abp.cxx create mode 100644 upm/src/abp/abp.h create mode 100644 upm/src/abp/abp.hpp create mode 100644 upm/src/abp/abp.i create mode 100644 upm/src/abp/abp.json create mode 100644 upm/src/ad8232/CMakeLists.txt create mode 100644 upm/src/ad8232/ad8232.c create mode 100644 upm/src/ad8232/ad8232.cxx create mode 100644 upm/src/ad8232/ad8232.h create mode 100644 upm/src/ad8232/ad8232.hpp create mode 100644 upm/src/ad8232/ad8232.json create mode 100644 upm/src/ad8232/ad8232_fti.c create mode 100644 upm/src/adafruitms1438/CMakeLists.txt create mode 100644 upm/src/adafruitms1438/adafruitms1438.cxx create mode 100644 upm/src/adafruitms1438/adafruitms1438.hpp create mode 100644 upm/src/adafruitms1438/adafruitms1438.json create mode 100644 upm/src/adafruitss/CMakeLists.txt create mode 100644 upm/src/adafruitss/adafruitss.cxx create mode 100644 upm/src/adafruitss/adafruitss.hpp create mode 100644 upm/src/adafruitss/adafruitss.json create mode 100644 upm/src/adc121c021/CMakeLists.txt create mode 100644 upm/src/adc121c021/adc121c021.cxx create mode 100644 upm/src/adc121c021/adc121c021.hpp create mode 100644 upm/src/adc121c021/adc121c021.i create mode 100644 upm/src/adc121c021/adc121c021.json create mode 100644 upm/src/adis16448/CMakeLists.txt create mode 100644 upm/src/adis16448/adis16448.cxx create mode 100644 upm/src/adis16448/adis16448.hpp create mode 100644 upm/src/adis16448/adis16448.json create mode 100644 upm/src/ads1x15/CMakeLists.txt create mode 100644 upm/src/ads1x15/ads1015.cxx create mode 100644 upm/src/ads1x15/ads1015.hpp create mode 100644 upm/src/ads1x15/ads1115.cxx create mode 100644 upm/src/ads1x15/ads1115.hpp create mode 100644 upm/src/ads1x15/ads1x15.cxx create mode 100644 upm/src/ads1x15/ads1x15.hpp create mode 100644 upm/src/ads1x15/ads1x15.i create mode 100644 upm/src/ads1x15/ads1x15.json create mode 100644 upm/src/adxl335/CMakeLists.txt create mode 100644 upm/src/adxl335/adxl335.cxx create mode 100644 upm/src/adxl335/adxl335.hpp create mode 100644 upm/src/adxl335/adxl335.i create mode 100644 upm/src/adxl335/adxl335.json create mode 100644 upm/src/adxl345/CMakeLists.txt create mode 100644 upm/src/adxl345/adxl345.cxx create mode 100644 upm/src/adxl345/adxl345.hpp create mode 100644 upm/src/adxl345/adxl345.i create mode 100644 upm/src/adxl345/adxl345.json create mode 100644 upm/src/adxrs610/CMakeLists.txt create mode 100644 upm/src/adxrs610/adxrs610.cxx create mode 100644 upm/src/adxrs610/adxrs610.hpp create mode 100644 upm/src/adxrs610/adxrs610.json create mode 100644 upm/src/am2315/CMakeLists.txt create mode 100644 upm/src/am2315/am2315.cpp create mode 100644 upm/src/am2315/am2315.hpp create mode 100644 upm/src/am2315/am2315.json create mode 100644 upm/src/apa102/CMakeLists.txt create mode 100644 upm/src/apa102/apa102.c create mode 100644 upm/src/apa102/apa102.cxx create mode 100644 upm/src/apa102/apa102.h create mode 100644 upm/src/apa102/apa102.hpp create mode 100644 upm/src/apa102/apa102.i create mode 100644 upm/src/apa102/apa102.json create mode 100644 upm/src/apa102/apa102_fti.c create mode 100644 upm/src/apds9002/CMakeLists.txt create mode 100644 upm/src/apds9002/apds9002.cxx create mode 100644 upm/src/apds9002/apds9002.hpp create mode 100644 upm/src/apds9002/apds9002.json create mode 100644 upm/src/apds9930/CMakeLists.txt create mode 100644 upm/src/apds9930/apds9930.cxx create mode 100644 upm/src/apds9930/apds9930.hpp create mode 100644 upm/src/apds9930/apds9930.json create mode 100644 upm/src/at42qt1070/CMakeLists.txt create mode 100644 upm/src/at42qt1070/at42qt1070.cxx create mode 100644 upm/src/at42qt1070/at42qt1070.hpp create mode 100644 upm/src/at42qt1070/at42qt1070.json create mode 100644 upm/src/autobox.i create mode 100644 upm/src/bacnetmstp/CMakeLists.txt create mode 100644 upm/src/bacnetmstp/bacnetmstp.cxx create mode 100644 upm/src/bacnetmstp/bacnetmstp.hpp create mode 100644 upm/src/bacnetmstp/bacnetmstp.i create mode 100644 upm/src/bacnetmstp/bacnetutil.cxx create mode 100644 upm/src/bacnetmstp/bacnetutil.hpp create mode 100644 upm/src/bacnetmstp/device-client.c create mode 100644 upm/src/bacnetmstp/device.h create mode 100644 upm/src/bacnetmstp/timer.h create mode 100755 upm/src/bh1749/CMakeLists.txt create mode 100755 upm/src/bh1749/bh1749.c create mode 100755 upm/src/bh1749/bh1749.cxx create mode 100755 upm/src/bh1749/bh1749.h create mode 100755 upm/src/bh1749/bh1749.hpp create mode 100755 upm/src/bh1749/bh1749.i create mode 100755 upm/src/bh1749/bh1749.json create mode 100755 upm/src/bh1749/bh1749_registers.h create mode 100644 upm/src/bh1750/CMakeLists.txt create mode 100644 upm/src/bh1750/bh1750.c create mode 100644 upm/src/bh1750/bh1750.cxx create mode 100644 upm/src/bh1750/bh1750.h create mode 100644 upm/src/bh1750/bh1750.hpp create mode 100644 upm/src/bh1750/bh1750.i create mode 100644 upm/src/bh1750/bh1750.json create mode 100644 upm/src/bh1750/bh1750_defs.h create mode 100644 upm/src/bh1750/bh1750_fti.c create mode 100755 upm/src/bh1792/CMakeLists.txt create mode 100755 upm/src/bh1792/bh1792.c create mode 100755 upm/src/bh1792/bh1792.cxx create mode 100755 upm/src/bh1792/bh1792.h create mode 100755 upm/src/bh1792/bh1792.hpp create mode 100755 upm/src/bh1792/bh1792.i create mode 100755 upm/src/bh1792/bh1792.json create mode 100755 upm/src/bh1792/bh1792glc_registers.h create mode 100644 upm/src/binding.gyp.in create mode 100644 upm/src/biss0001/CMakeLists.txt create mode 100644 upm/src/biss0001/biss0001.c create mode 100644 upm/src/biss0001/biss0001.cxx create mode 100644 upm/src/biss0001/biss0001.h create mode 100644 upm/src/biss0001/biss0001.hpp create mode 100644 upm/src/biss0001/biss0001.json create mode 100644 upm/src/biss0001/biss0001_fti.c create mode 100644 upm/src/bma220/CMakeLists.txt create mode 100644 upm/src/bma220/bma220.cxx create mode 100644 upm/src/bma220/bma220.hpp create mode 100644 upm/src/bma220/bma220.i create mode 100644 upm/src/bma220/bma220.json create mode 100644 upm/src/bma250e/CMakeLists.txt create mode 100644 upm/src/bma250e/bma250e.c create mode 100644 upm/src/bma250e/bma250e.cxx create mode 100644 upm/src/bma250e/bma250e.h create mode 100644 upm/src/bma250e/bma250e.hpp create mode 100644 upm/src/bma250e/bma250e.i create mode 100644 upm/src/bma250e/bma250e.json create mode 100644 upm/src/bma250e/bma250e_defs.h create mode 100644 upm/src/bma250e/bma250e_fti.c create mode 100644 upm/src/bmg160/CMakeLists.txt create mode 100644 upm/src/bmg160/bmg160.c create mode 100644 upm/src/bmg160/bmg160.cxx create mode 100644 upm/src/bmg160/bmg160.h create mode 100644 upm/src/bmg160/bmg160.hpp create mode 100644 upm/src/bmg160/bmg160.i create mode 100644 upm/src/bmg160/bmg160.json create mode 100644 upm/src/bmg160/bmg160_defs.h create mode 100644 upm/src/bmg160/bmg160_fti.c create mode 100644 upm/src/bmi160/CMakeLists.txt create mode 100644 upm/src/bmi160/bmi160.c create mode 100644 upm/src/bmi160/bmi160.cxx create mode 100644 upm/src/bmi160/bmi160.h create mode 100644 upm/src/bmi160/bmi160.hpp create mode 100644 upm/src/bmi160/bmi160.i create mode 100644 upm/src/bmi160/bmi160.json create mode 100644 upm/src/bmi160/bmi160_defs.h create mode 100644 upm/src/bmi160/bosch_bmi160.c create mode 100644 upm/src/bmi160/bosch_bmi160.h create mode 100644 upm/src/bmi160/license.txt create mode 100644 upm/src/bmm150/CMakeLists.txt create mode 100644 upm/src/bmm150/bmm150.c create mode 100644 upm/src/bmm150/bmm150.cxx create mode 100644 upm/src/bmm150/bmm150.h create mode 100644 upm/src/bmm150/bmm150.hpp create mode 100644 upm/src/bmm150/bmm150.i create mode 100644 upm/src/bmm150/bmm150.json create mode 100644 upm/src/bmm150/bmm150_defs.h create mode 100644 upm/src/bmm150/bmm150_fti.c create mode 100644 upm/src/bmm150/license.txt create mode 100644 upm/src/bmp280/CMakeLists.txt create mode 100644 upm/src/bmp280/bme280.cxx create mode 100644 upm/src/bmp280/bme280.hpp create mode 100644 upm/src/bmp280/bmp280.c create mode 100644 upm/src/bmp280/bmp280.cxx create mode 100644 upm/src/bmp280/bmp280.h create mode 100644 upm/src/bmp280/bmp280.hpp create mode 100644 upm/src/bmp280/bmp280.i create mode 100644 upm/src/bmp280/bmp280.json create mode 100644 upm/src/bmp280/bmp280_regs.h create mode 100644 upm/src/bmpx8x/CMakeLists.txt create mode 100644 upm/src/bmpx8x/bmpx8x.c create mode 100644 upm/src/bmpx8x/bmpx8x.cxx create mode 100644 upm/src/bmpx8x/bmpx8x.h create mode 100644 upm/src/bmpx8x/bmpx8x.hpp create mode 100644 upm/src/bmpx8x/bmpx8x.i create mode 100644 upm/src/bmpx8x/bmpx8x.json create mode 100644 upm/src/bmpx8x/bmpx8x_defs.h create mode 100644 upm/src/bmpx8x/bmpx8x_fti.c create mode 100644 upm/src/bmx055/CMakeLists.txt create mode 100644 upm/src/bmx055/bmc150.cxx create mode 100644 upm/src/bmx055/bmc150.hpp create mode 100644 upm/src/bmx055/bmi055.cxx create mode 100644 upm/src/bmx055/bmi055.hpp create mode 100644 upm/src/bmx055/bmx055.cxx create mode 100644 upm/src/bmx055/bmx055.hpp create mode 100644 upm/src/bmx055/bmx055.i create mode 100644 upm/src/bmx055/bmx055.json create mode 100644 upm/src/bno055/CMakeLists.txt create mode 100644 upm/src/bno055/bno055.c create mode 100644 upm/src/bno055/bno055.cxx create mode 100644 upm/src/bno055/bno055.h create mode 100644 upm/src/bno055/bno055.hpp create mode 100644 upm/src/bno055/bno055.i create mode 100644 upm/src/bno055/bno055.json create mode 100644 upm/src/bno055/bno055_regs.h create mode 100644 upm/src/button/CMakeLists.txt create mode 100644 upm/src/button/button.c create mode 100644 upm/src/button/button.cxx create mode 100644 upm/src/button/button.h create mode 100644 upm/src/button/button.hpp create mode 100644 upm/src/button/button.i create mode 100644 upm/src/button/button.json create mode 100644 upm/src/buzzer/CMakeLists.txt create mode 100644 upm/src/buzzer/buzzer.c create mode 100644 upm/src/buzzer/buzzer.cxx create mode 100644 upm/src/buzzer/buzzer.h create mode 100644 upm/src/buzzer/buzzer.hpp create mode 100644 upm/src/buzzer/buzzer.i create mode 100644 upm/src/buzzer/buzzer.json create mode 100644 upm/src/buzzer/buzzer_tones.h create mode 100644 upm/src/carrays_float.i create mode 100644 upm/src/carrays_int16_t.i create mode 100644 upm/src/carrays_uint16_t.i create mode 100644 upm/src/carrays_uint32_t.i create mode 100644 upm/src/carrays_uint8_t.i create mode 100644 upm/src/cjq4435/CMakeLists.txt create mode 100644 upm/src/cjq4435/cjq4435.c create mode 100644 upm/src/cjq4435/cjq4435.cxx create mode 100644 upm/src/cjq4435/cjq4435.h create mode 100644 upm/src/cjq4435/cjq4435.hpp create mode 100644 upm/src/cjq4435/cjq4435.json create mode 100644 upm/src/collision/CMakeLists.txt create mode 100644 upm/src/collision/collision.c create mode 100644 upm/src/collision/collision.cxx create mode 100644 upm/src/collision/collision.h create mode 100644 upm/src/collision/collision.hpp create mode 100644 upm/src/collision/collision.json create mode 100644 upm/src/collision/collision_fti.c create mode 100644 upm/src/common_top.i create mode 100644 upm/src/curieimu/CMakeLists.txt create mode 100644 upm/src/curieimu/curieimu.cpp create mode 100644 upm/src/curieimu/curieimu.hpp create mode 100644 upm/src/curieimu/curieimu.i create mode 100644 upm/src/curieimu/curieimu.json create mode 100644 upm/src/cwlsxxa/CMakeLists.txt create mode 100644 upm/src/cwlsxxa/cwlsxxa.cxx create mode 100644 upm/src/cwlsxxa/cwlsxxa.hpp create mode 100644 upm/src/cwlsxxa/cwlsxxa.i create mode 100644 upm/src/cwlsxxa/cwlsxxa.json create mode 100644 upm/src/dfrec/CMakeLists.txt create mode 100644 upm/src/dfrec/dfrec.c create mode 100644 upm/src/dfrec/dfrec.cxx create mode 100644 upm/src/dfrec/dfrec.h create mode 100644 upm/src/dfrec/dfrec.hpp create mode 100644 upm/src/dfrec/dfrec.i create mode 100644 upm/src/dfrec/dfrec.json create mode 100644 upm/src/dfrec/dfrec_fti.c create mode 100644 upm/src/dfrorp/CMakeLists.txt create mode 100644 upm/src/dfrorp/dfrorp.c create mode 100644 upm/src/dfrorp/dfrorp.cxx create mode 100644 upm/src/dfrorp/dfrorp.h create mode 100644 upm/src/dfrorp/dfrorp.hpp create mode 100644 upm/src/dfrorp/dfrorp.i create mode 100644 upm/src/dfrorp/dfrorp.json create mode 100644 upm/src/dfrorp/dfrorp_fti.c create mode 100644 upm/src/dfrph/CMakeLists.txt create mode 100644 upm/src/dfrph/dfrph.c create mode 100644 upm/src/dfrph/dfrph.cxx create mode 100644 upm/src/dfrph/dfrph.h create mode 100644 upm/src/dfrph/dfrph.hpp create mode 100644 upm/src/dfrph/dfrph.json create mode 100644 upm/src/dfrph/dfrph_fti.c create mode 100755 upm/src/doxy2swig.py create mode 100644 upm/src/ds1307/CMakeLists.txt create mode 100644 upm/src/ds1307/ds1307.cxx create mode 100644 upm/src/ds1307/ds1307.hpp create mode 100644 upm/src/ds1307/ds1307.i create mode 100644 upm/src/ds1307/ds1307.json create mode 100644 upm/src/ds1808lc/CMakeLists.txt create mode 100644 upm/src/ds1808lc/ds1808lc.cxx create mode 100644 upm/src/ds1808lc/ds1808lc.hpp create mode 100644 upm/src/ds1808lc/ds1808lc.i create mode 100644 upm/src/ds1808lc/ds1808lc.json create mode 100644 upm/src/ds1808lc/mraa-utils.cxx create mode 100644 upm/src/ds1808lc/mraa-utils.hpp create mode 100644 upm/src/ds18b20/CMakeLists.txt create mode 100644 upm/src/ds18b20/ds18b20.c create mode 100644 upm/src/ds18b20/ds18b20.cxx create mode 100644 upm/src/ds18b20/ds18b20.h create mode 100644 upm/src/ds18b20/ds18b20.hpp create mode 100644 upm/src/ds18b20/ds18b20.i create mode 100644 upm/src/ds18b20/ds18b20.json create mode 100644 upm/src/ds18b20/ds18b20_defs.h create mode 100644 upm/src/ds18b20/ds18b20_fti.c create mode 100644 upm/src/ds2413/CMakeLists.txt create mode 100644 upm/src/ds2413/ds2413.cxx create mode 100644 upm/src/ds2413/ds2413.hpp create mode 100644 upm/src/ds2413/ds2413.i create mode 100644 upm/src/ds2413/ds2413.json create mode 100644 upm/src/e50hx/CMakeLists.txt create mode 100644 upm/src/e50hx/e50hx.cxx create mode 100644 upm/src/e50hx/e50hx.hpp create mode 100644 upm/src/e50hx/e50hx.i create mode 100644 upm/src/e50hx/e50hx.json create mode 100644 upm/src/ecezo/CMakeLists.txt create mode 100644 upm/src/ecezo/ecezo.c create mode 100644 upm/src/ecezo/ecezo.cxx create mode 100644 upm/src/ecezo/ecezo.h create mode 100644 upm/src/ecezo/ecezo.hpp create mode 100644 upm/src/ecezo/ecezo.i create mode 100644 upm/src/ecezo/ecezo.json create mode 100644 upm/src/ecezo/ecezo_defs.h create mode 100644 upm/src/ecezo/ecezo_fti.c create mode 100644 upm/src/ecs1030/CMakeLists.txt create mode 100644 upm/src/ecs1030/ecs1030.cxx create mode 100644 upm/src/ecs1030/ecs1030.hpp create mode 100644 upm/src/ecs1030/ecs1030.i create mode 100644 upm/src/ecs1030/ecs1030.json create mode 100644 upm/src/ehr/CMakeLists.txt create mode 100644 upm/src/ehr/ehr.cxx create mode 100644 upm/src/ehr/ehr.hpp create mode 100644 upm/src/ehr/ehr.i create mode 100644 upm/src/ehr/ehr.json create mode 100644 upm/src/eldriver/CMakeLists.txt create mode 100644 upm/src/eldriver/eldriver.cxx create mode 100644 upm/src/eldriver/eldriver.hpp create mode 100644 upm/src/eldriver/eldriver.json create mode 100644 upm/src/electromagnet/CMakeLists.txt create mode 100644 upm/src/electromagnet/electromagnet.cxx create mode 100644 upm/src/electromagnet/electromagnet.hpp create mode 100644 upm/src/electromagnet/electromagnet.json create mode 100644 upm/src/emg/CMakeLists.txt create mode 100644 upm/src/emg/emg.c create mode 100644 upm/src/emg/emg.cxx create mode 100644 upm/src/emg/emg.h create mode 100644 upm/src/emg/emg.hpp create mode 100644 upm/src/emg/emg.json create mode 100644 upm/src/emg/emg_fti.c create mode 100644 upm/src/enc03r/CMakeLists.txt create mode 100644 upm/src/enc03r/enc03r.c create mode 100644 upm/src/enc03r/enc03r.cxx create mode 100644 upm/src/enc03r/enc03r.h create mode 100644 upm/src/enc03r/enc03r.hpp create mode 100644 upm/src/enc03r/enc03r.json create mode 100644 upm/src/enc03r/enc03r_fti.c create mode 100644 upm/src/flex/CMakeLists.txt create mode 100644 upm/src/flex/flex.c create mode 100644 upm/src/flex/flex.cxx create mode 100644 upm/src/flex/flex.h create mode 100644 upm/src/flex/flex.hpp create mode 100644 upm/src/flex/flex.json create mode 100644 upm/src/flex/flex_fti.c create mode 100644 upm/src/gas/CMakeLists.txt create mode 100644 upm/src/gas/README.txt create mode 100644 upm/src/gas/gas.cxx create mode 100644 upm/src/gas/gas.hpp create mode 100644 upm/src/gas/gas.i create mode 100644 upm/src/gas/gas.json create mode 100644 upm/src/gas/mq2.cxx create mode 100644 upm/src/gas/mq2.hpp create mode 100644 upm/src/gas/mq3.cxx create mode 100644 upm/src/gas/mq3.hpp create mode 100644 upm/src/gas/mq4.cxx create mode 100644 upm/src/gas/mq4.hpp create mode 100644 upm/src/gas/mq5.cxx create mode 100644 upm/src/gas/mq5.hpp create mode 100644 upm/src/gas/mq6.cxx create mode 100644 upm/src/gas/mq6.hpp create mode 100644 upm/src/gas/mq7.cxx create mode 100644 upm/src/gas/mq7.hpp create mode 100644 upm/src/gas/mq8.cxx create mode 100644 upm/src/gas/mq8.hpp create mode 100644 upm/src/gas/mq9.cxx create mode 100644 upm/src/gas/mq9.hpp create mode 100644 upm/src/gas/mqx.c create mode 100644 upm/src/gas/mqx.h create mode 100644 upm/src/gas/mqx_fti.c create mode 100644 upm/src/gas/tp401.cxx create mode 100644 upm/src/gas/tp401.hpp create mode 100644 upm/src/gp2y0a/CMakeLists.txt create mode 100644 upm/src/gp2y0a/gp2y0a.c create mode 100644 upm/src/gp2y0a/gp2y0a.cxx create mode 100644 upm/src/gp2y0a/gp2y0a.h create mode 100644 upm/src/gp2y0a/gp2y0a.hpp create mode 100644 upm/src/gp2y0a/gp2y0a.json create mode 100644 upm/src/gp2y0a/gp2y0a_fti.c create mode 100644 upm/src/gprs/CMakeLists.txt create mode 100644 upm/src/gprs/gprs.cxx create mode 100644 upm/src/gprs/gprs.hpp create mode 100644 upm/src/gprs/gprs.i create mode 100644 upm/src/gprs/gprs.json create mode 100644 upm/src/groups.md create mode 100644 upm/src/grove/CMakeLists.txt create mode 100644 upm/src/grove/grove.cxx create mode 100644 upm/src/grove/grove.hpp create mode 100644 upm/src/grove/grove.i create mode 100644 upm/src/grove/grove.json create mode 100644 upm/src/grove/grovebase.hpp create mode 100644 upm/src/grove/grovebutton.cxx create mode 100644 upm/src/grove/grovebutton.hpp create mode 100644 upm/src/grove/groveled.cxx create mode 100644 upm/src/grove/groveled.hpp create mode 100644 upm/src/grove/grovelight.cxx create mode 100644 upm/src/grove/grovelight.hpp create mode 100644 upm/src/grove/groverelay.cxx create mode 100644 upm/src/grove/groverelay.hpp create mode 100644 upm/src/grove/groverotary.cxx create mode 100644 upm/src/grove/groverotary.hpp create mode 100644 upm/src/grove/groveslide.cxx create mode 100644 upm/src/grove/groveslide.hpp create mode 100644 upm/src/grove/grovetemp.cxx create mode 100644 upm/src/grove/grovetemp.hpp create mode 100644 upm/src/grovecollision/CMakeLists.txt create mode 100644 upm/src/grovecollision/grovecollision.cxx create mode 100644 upm/src/grovecollision/grovecollision.hpp create mode 100644 upm/src/grovecollision/grovecollision.json create mode 100644 upm/src/groveehr/CMakeLists.txt create mode 100644 upm/src/groveehr/groveehr.cxx create mode 100644 upm/src/groveehr/groveehr.hpp create mode 100644 upm/src/groveehr/groveehr.i create mode 100644 upm/src/groveehr/groveehr.json create mode 100644 upm/src/groveeldriver/CMakeLists.txt create mode 100644 upm/src/groveeldriver/groveeldriver.cxx create mode 100644 upm/src/groveeldriver/groveeldriver.hpp create mode 100644 upm/src/groveeldriver/groveeldriver.json create mode 100644 upm/src/groveelectromagnet/CMakeLists.txt create mode 100644 upm/src/groveelectromagnet/groveelectromagnet.cxx create mode 100644 upm/src/groveelectromagnet/groveelectromagnet.hpp create mode 100644 upm/src/groveelectromagnet/groveelectromagnet.json create mode 100644 upm/src/groveemg/CMakeLists.txt create mode 100644 upm/src/groveemg/groveemg.cxx create mode 100644 upm/src/groveemg/groveemg.hpp create mode 100644 upm/src/groveemg/groveemg.json create mode 100644 upm/src/grovegprs/CMakeLists.txt create mode 100644 upm/src/grovegprs/grovegprs.cxx create mode 100644 upm/src/grovegprs/grovegprs.hpp create mode 100644 upm/src/grovegprs/grovegprs.i create mode 100644 upm/src/grovegprs/grovegprs.json create mode 100644 upm/src/grovegsr/CMakeLists.txt create mode 100644 upm/src/grovegsr/grovegsr.cxx create mode 100644 upm/src/grovegsr/grovegsr.hpp create mode 100644 upm/src/grovegsr/grovegsr.json create mode 100644 upm/src/grovelinefinder/CMakeLists.txt create mode 100644 upm/src/grovelinefinder/grovelinefinder.cxx create mode 100644 upm/src/grovelinefinder/grovelinefinder.hpp create mode 100644 upm/src/grovelinefinder/grovelinefinder.json create mode 100644 upm/src/grovemd/CMakeLists.txt create mode 100644 upm/src/grovemd/grovemd.cxx create mode 100644 upm/src/grovemd/grovemd.hpp create mode 100644 upm/src/grovemoisture/CMakeLists.txt create mode 100644 upm/src/grovemoisture/grovemoisture.cxx create mode 100644 upm/src/grovemoisture/grovemoisture.hpp create mode 100644 upm/src/grovemoisture/grovemoisture.json create mode 100644 upm/src/groveo2/CMakeLists.txt create mode 100644 upm/src/groveo2/groveo2.cxx create mode 100644 upm/src/groveo2/groveo2.hpp create mode 100644 upm/src/groveo2/groveo2.json create mode 100644 upm/src/grovescam/CMakeLists.txt create mode 100644 upm/src/grovescam/grovescam.cxx create mode 100644 upm/src/grovescam/grovescam.hpp create mode 100644 upm/src/grovescam/grovescam.i create mode 100644 upm/src/grovescam/grovescam.json create mode 100644 upm/src/grovespeaker/CMakeLists.txt create mode 100644 upm/src/grovespeaker/grovespeaker.cxx create mode 100644 upm/src/grovespeaker/grovespeaker.hpp create mode 100644 upm/src/grovespeaker/grovespeaker.json create mode 100644 upm/src/groveultrasonic/CMakeLists.txt create mode 100644 upm/src/groveultrasonic/groveultrasonic.cxx create mode 100644 upm/src/groveultrasonic/groveultrasonic.hpp create mode 100644 upm/src/groveultrasonic/groveultrasonic.i create mode 100644 upm/src/groveultrasonic/groveultrasonic.json create mode 100644 upm/src/grovevdiv/CMakeLists.txt create mode 100644 upm/src/grovevdiv/grovevdiv.cxx create mode 100644 upm/src/grovevdiv/grovevdiv.hpp create mode 100644 upm/src/grovevdiv/grovevdiv.json create mode 100644 upm/src/grovewater/CMakeLists.txt create mode 100644 upm/src/grovewater/grovewater.cxx create mode 100644 upm/src/grovewater/grovewater.hpp create mode 100644 upm/src/grovewater/grovewater.json create mode 100644 upm/src/grovewfs/CMakeLists.txt create mode 100644 upm/src/grovewfs/grovewfs.cxx create mode 100644 upm/src/grovewfs/grovewfs.hpp create mode 100644 upm/src/grovewfs/grovewfs.i create mode 100644 upm/src/grovewfs/grovewfs.json create mode 100644 upm/src/gsr/CMakeLists.txt create mode 100644 upm/src/gsr/gsr.c create mode 100644 upm/src/gsr/gsr.cxx create mode 100644 upm/src/gsr/gsr.h create mode 100644 upm/src/gsr/gsr.hpp create mode 100644 upm/src/gsr/gsr.json create mode 100644 upm/src/gsr/gsr_fti.c create mode 100644 upm/src/guvas12d/CMakeLists.txt create mode 100644 upm/src/guvas12d/guvas12d.c create mode 100644 upm/src/guvas12d/guvas12d.cxx create mode 100644 upm/src/guvas12d/guvas12d.h create mode 100644 upm/src/guvas12d/guvas12d.hpp create mode 100644 upm/src/guvas12d/guvas12d.json create mode 100644 upm/src/guvas12d/guvas12d_fti.c create mode 100644 upm/src/h3lis331dl/CMakeLists.txt create mode 100644 upm/src/h3lis331dl/h3lis331dl.cxx create mode 100644 upm/src/h3lis331dl/h3lis331dl.hpp create mode 100644 upm/src/h3lis331dl/h3lis331dl.i create mode 100644 upm/src/h3lis331dl/h3lis331dl.json create mode 100644 upm/src/h803x/CMakeLists.txt create mode 100644 upm/src/h803x/h803x.cxx create mode 100644 upm/src/h803x/h803x.hpp create mode 100644 upm/src/h803x/h803x.i create mode 100644 upm/src/h803x/h803x.json create mode 100644 upm/src/hcsr04/CMakeLists.txt create mode 100644 upm/src/hcsr04/hcsr04.c create mode 100644 upm/src/hcsr04/hcsr04.cxx create mode 100644 upm/src/hcsr04/hcsr04.h create mode 100644 upm/src/hcsr04/hcsr04.hpp create mode 100644 upm/src/hcsr04/hcsr04.i create mode 100644 upm/src/hcsr04/hcsr04.json create mode 100644 upm/src/hdc1000/CMakeLists.txt create mode 100644 upm/src/hdc1000/hdc1000.cpp create mode 100644 upm/src/hdc1000/hdc1000.hpp create mode 100644 upm/src/hdc1000/hdc1000.json create mode 100644 upm/src/hdxxvxta/CMakeLists.txt create mode 100644 upm/src/hdxxvxta/hdxxvxta.cxx create mode 100644 upm/src/hdxxvxta/hdxxvxta.hpp create mode 100644 upm/src/hdxxvxta/hdxxvxta.i create mode 100644 upm/src/hdxxvxta/hdxxvxta.json create mode 100644 upm/src/hka5/CMakeLists.txt create mode 100644 upm/src/hka5/hka5.c create mode 100644 upm/src/hka5/hka5.cxx create mode 100644 upm/src/hka5/hka5.h create mode 100644 upm/src/hka5/hka5.hpp create mode 100644 upm/src/hka5/hka5.i create mode 100644 upm/src/hka5/hka5.json create mode 100644 upm/src/hka5/hka5_fti.c create mode 100644 upm/src/hlg150h/CMakeLists.txt create mode 100644 upm/src/hlg150h/hlg150h.cxx create mode 100644 upm/src/hlg150h/hlg150h.hpp create mode 100644 upm/src/hlg150h/hlg150h.i create mode 100644 upm/src/hlg150h/hlg150h.json create mode 100644 upm/src/hlg150h/mraa-utils.cxx create mode 100644 upm/src/hlg150h/mraa-utils.hpp create mode 100644 upm/src/hm11/CMakeLists.txt create mode 100644 upm/src/hm11/hm11.cxx create mode 100644 upm/src/hm11/hm11.hpp create mode 100644 upm/src/hm11/hm11.i create mode 100644 upm/src/hm11/hm11.json create mode 100644 upm/src/hmc5883l/CMakeLists.txt create mode 100644 upm/src/hmc5883l/hmc5883l.c create mode 100644 upm/src/hmc5883l/hmc5883l.cxx create mode 100644 upm/src/hmc5883l/hmc5883l.h create mode 100644 upm/src/hmc5883l/hmc5883l.hpp create mode 100644 upm/src/hmc5883l/hmc5883l.i create mode 100644 upm/src/hmc5883l/hmc5883l.json create mode 100644 upm/src/hmc5883l/hmc5883l_fti.c create mode 100644 upm/src/hmtrp/CMakeLists.txt create mode 100644 upm/src/hmtrp/hmtrp.cxx create mode 100644 upm/src/hmtrp/hmtrp.hpp create mode 100644 upm/src/hmtrp/hmtrp.i create mode 100644 upm/src/hmtrp/hmtrp.json create mode 100644 upm/src/hp20x/CMakeLists.txt create mode 100644 upm/src/hp20x/hp20x.cxx create mode 100644 upm/src/hp20x/hp20x.hpp create mode 100644 upm/src/hp20x/hp20x.json create mode 100644 upm/src/ht9170/CMakeLists.txt create mode 100644 upm/src/ht9170/ht9170.cxx create mode 100644 upm/src/ht9170/ht9170.hpp create mode 100644 upm/src/ht9170/ht9170.json create mode 100644 upm/src/htu21d/CMakeLists.txt create mode 100644 upm/src/htu21d/htu21d.cpp create mode 100644 upm/src/htu21d/htu21d.hpp create mode 100644 upm/src/htu21d/htu21d.i create mode 100644 upm/src/htu21d/htu21d.json create mode 100644 upm/src/hwxpxx/CMakeLists.txt create mode 100644 upm/src/hwxpxx/hwxpxx.cxx create mode 100644 upm/src/hwxpxx/hwxpxx.hpp create mode 100644 upm/src/hwxpxx/hwxpxx.i create mode 100644 upm/src/hwxpxx/hwxpxx.json create mode 100644 upm/src/hx711/CMakeLists.txt create mode 100644 upm/src/hx711/hx711.cxx create mode 100644 upm/src/hx711/hx711.hpp create mode 100644 upm/src/hx711/hx711.i create mode 100644 upm/src/hx711/hx711.json create mode 100644 upm/src/ili9341/CMakeLists.txt create mode 100644 upm/src/ili9341/ili9341.cxx create mode 100644 upm/src/ili9341/ili9341.hpp create mode 100644 upm/src/ili9341/ili9341.i create mode 100644 upm/src/ili9341/ili9341.json create mode 100644 upm/src/ili9341/ili9341_gfx.cxx create mode 100644 upm/src/ili9341/ili9341_gfx.hpp create mode 100644 upm/src/ili9341/license.txt create mode 100644 upm/src/ims/CMakeLists.txt create mode 100644 upm/src/ims/ims.c create mode 100644 upm/src/ims/ims.cxx create mode 100644 upm/src/ims/ims.h create mode 100644 upm/src/ims/ims.hpp create mode 100644 upm/src/ims/ims.i create mode 100644 upm/src/ims/ims.json create mode 100644 upm/src/ims/ims_defs.h create mode 100644 upm/src/ims/ims_fti.c create mode 100644 upm/src/ina132/CMakeLists.txt create mode 100644 upm/src/ina132/ina132.cxx create mode 100644 upm/src/ina132/ina132.hpp create mode 100644 upm/src/ina132/ina132.json create mode 100644 upm/src/interfaces/CMakeLists.txt create mode 100644 upm/src/interfaces/iADC.hpp create mode 100644 upm/src/interfaces/iCO2Sensor.hpp create mode 100644 upm/src/interfaces/iHumiditySensor.hpp create mode 100644 upm/src/interfaces/iLightController.hpp create mode 100644 upm/src/interfaces/iLightSensor.hpp create mode 100644 upm/src/interfaces/iModuleStatus.hpp create mode 100644 upm/src/interfaces/iPressureSensor.hpp create mode 100644 upm/src/interfaces/iTemperatureSensor.hpp create mode 100644 upm/src/interfaces/interfaces.cxx create mode 100644 upm/src/interfaces/interfaces.i create mode 100644 upm/src/interfaces/javaupm_iADC.i create mode 100644 upm/src/interfaces/javaupm_iCO2Sensor.i create mode 100644 upm/src/interfaces/javaupm_iHumiditySensor.i create mode 100644 upm/src/interfaces/javaupm_iLightController.i create mode 100644 upm/src/interfaces/javaupm_iLightSensor.i create mode 100644 upm/src/interfaces/javaupm_iModuleStatus.i create mode 100644 upm/src/interfaces/javaupm_iPressureSensor.i create mode 100644 upm/src/interfaces/javaupm_iTemperatureSensor.i create mode 100644 upm/src/isd1820/CMakeLists.txt create mode 100644 upm/src/isd1820/isd1820.cxx create mode 100644 upm/src/isd1820/isd1820.hpp create mode 100644 upm/src/isd1820/isd1820.json create mode 100644 upm/src/itg3200/CMakeLists.txt create mode 100644 upm/src/itg3200/itg3200.cxx create mode 100644 upm/src/itg3200/itg3200.hpp create mode 100644 upm/src/itg3200/itg3200.i create mode 100644 upm/src/itg3200/itg3200.json create mode 100644 upm/src/java_buffer.i create mode 100644 upm/src/java_exceptions.i create mode 100644 upm/src/javaswig_blacklist create mode 100644 upm/src/jhd1313m1/CMakeLists.txt create mode 100644 upm/src/jhd1313m1/jhd1313m1.c create mode 100644 upm/src/jhd1313m1/jhd1313m1.cxx create mode 100644 upm/src/jhd1313m1/jhd1313m1.h create mode 100644 upm/src/jhd1313m1/jhd1313m1.hpp create mode 100644 upm/src/jhd1313m1/jhd1313m1.i create mode 100644 upm/src/jhd1313m1/jhd1313m1.json create mode 100644 upm/src/joystick12/CMakeLists.txt create mode 100644 upm/src/joystick12/joystick12.c create mode 100644 upm/src/joystick12/joystick12.cxx create mode 100644 upm/src/joystick12/joystick12.h create mode 100644 upm/src/joystick12/joystick12.hpp create mode 100644 upm/src/joystick12/joystick12.i create mode 100644 upm/src/joystick12/joystick12.json create mode 100644 upm/src/joystick12/joystick12_fti.c create mode 100644 upm/src/kx122/CMakeLists.txt create mode 100644 upm/src/kx122/kx122.c create mode 100644 upm/src/kx122/kx122.cxx create mode 100644 upm/src/kx122/kx122.h create mode 100644 upm/src/kx122/kx122.hpp create mode 100644 upm/src/kx122/kx122.i create mode 100644 upm/src/kx122/kx122.json create mode 100644 upm/src/kx122/kx122_registers.h create mode 100644 upm/src/kxcjk1013/CMakeLists.txt create mode 100644 upm/src/kxcjk1013/kxcjk1013.cxx create mode 100644 upm/src/kxcjk1013/kxcjk1013.hpp create mode 100644 upm/src/kxcjk1013/kxcjk1013.json create mode 100755 upm/src/kxtj3/CMakeLists.txt create mode 100755 upm/src/kxtj3/kxtj3.c create mode 100755 upm/src/kxtj3/kxtj3.cxx create mode 100755 upm/src/kxtj3/kxtj3.h create mode 100755 upm/src/kxtj3/kxtj3.hpp create mode 100644 upm/src/kxtj3/kxtj3.i create mode 100755 upm/src/kxtj3/kxtj3.json create mode 100755 upm/src/kxtj3/kxtj3_registers.h create mode 100644 upm/src/l298/CMakeLists.txt create mode 100644 upm/src/l298/l298.cxx create mode 100644 upm/src/l298/l298.hpp create mode 100644 upm/src/l298/l298.json create mode 100644 upm/src/l3gd20/CMakeLists.txt create mode 100644 upm/src/l3gd20/l3gd20.cxx create mode 100644 upm/src/l3gd20/l3gd20.hpp create mode 100644 upm/src/l3gd20/l3gd20.json create mode 100644 upm/src/lcd/CMakeLists.txt create mode 100644 upm/src/lcd/eboled.cxx create mode 100644 upm/src/lcd/eboled.hpp create mode 100644 upm/src/lcd/hd44780_bits.hpp create mode 100644 upm/src/lcd/lcd.cxx create mode 100644 upm/src/lcd/lcd.hpp create mode 100644 upm/src/lcd/lcd.i create mode 100644 upm/src/lcd/lcd_private.hpp create mode 100644 upm/src/lcd/license.txt create mode 100644 upm/src/lcd/ssd.hpp create mode 100644 upm/src/lcd/ssd1306.cxx create mode 100644 upm/src/lcd/ssd1306.hpp create mode 100644 upm/src/lcd/ssd1308.cxx create mode 100644 upm/src/lcd/ssd1308.hpp create mode 100644 upm/src/lcd/ssd1327.cxx create mode 100644 upm/src/lcd/ssd1327.hpp create mode 100644 upm/src/lcdks/CMakeLists.txt create mode 100644 upm/src/lcdks/lcdks.c create mode 100644 upm/src/lcdks/lcdks.cxx create mode 100644 upm/src/lcdks/lcdks.h create mode 100644 upm/src/lcdks/lcdks.hpp create mode 100644 upm/src/lcdks/lcdks.i create mode 100644 upm/src/lcdks/lcdks.json create mode 100644 upm/src/lcm1602/CMakeLists.txt create mode 100644 upm/src/lcm1602/hd44780_bits.h create mode 100644 upm/src/lcm1602/lcm1602.c create mode 100644 upm/src/lcm1602/lcm1602.cxx create mode 100644 upm/src/lcm1602/lcm1602.h create mode 100644 upm/src/lcm1602/lcm1602.hpp create mode 100644 upm/src/lcm1602/lcm1602.i create mode 100644 upm/src/lcm1602/lcm1602.json create mode 100644 upm/src/ldt0028/CMakeLists.txt create mode 100644 upm/src/ldt0028/ldt0028.c create mode 100644 upm/src/ldt0028/ldt0028.cxx create mode 100644 upm/src/ldt0028/ldt0028.h create mode 100644 upm/src/ldt0028/ldt0028.hpp create mode 100644 upm/src/ldt0028/ldt0028.json create mode 100644 upm/src/ldt0028/ldt0028_fti.c create mode 100644 upm/src/led/CMakeLists.txt create mode 100644 upm/src/led/led.c create mode 100644 upm/src/led/led.cxx create mode 100644 upm/src/led/led.h create mode 100644 upm/src/led/led.hpp create mode 100644 upm/src/led/led.i create mode 100644 upm/src/led/led.json create mode 100644 upm/src/led/led_fti.c create mode 100644 upm/src/lidarlitev3/CMakeLists.txt create mode 100644 upm/src/lidarlitev3/lidarlitev3.cxx create mode 100644 upm/src/lidarlitev3/lidarlitev3.hpp create mode 100644 upm/src/lidarlitev3/lidarlitev3.i create mode 100644 upm/src/lidarlitev3/lidarlitev3.json create mode 100644 upm/src/light/CMakeLists.txt create mode 100644 upm/src/light/light.c create mode 100644 upm/src/light/light.cxx create mode 100644 upm/src/light/light.h create mode 100644 upm/src/light/light.hpp create mode 100644 upm/src/light/light.json create mode 100644 upm/src/light/light_fti.c create mode 100644 upm/src/linefinder/CMakeLists.txt create mode 100644 upm/src/linefinder/linefinder.c create mode 100644 upm/src/linefinder/linefinder.cxx create mode 100644 upm/src/linefinder/linefinder.h create mode 100644 upm/src/linefinder/linefinder.hpp create mode 100644 upm/src/linefinder/linefinder.json create mode 100644 upm/src/linefinder/linefinder_fti.c create mode 100644 upm/src/lis2ds12/CMakeLists.txt create mode 100644 upm/src/lis2ds12/lis2ds12.c create mode 100644 upm/src/lis2ds12/lis2ds12.cxx create mode 100644 upm/src/lis2ds12/lis2ds12.h create mode 100644 upm/src/lis2ds12/lis2ds12.hpp create mode 100644 upm/src/lis2ds12/lis2ds12.i create mode 100644 upm/src/lis2ds12/lis2ds12.json create mode 100644 upm/src/lis2ds12/lis2ds12_defs.h create mode 100644 upm/src/lis2ds12/lis2ds12_fti.c create mode 100644 upm/src/lis3dh/CMakeLists.txt create mode 100644 upm/src/lis3dh/lis3dh.c create mode 100644 upm/src/lis3dh/lis3dh.cxx create mode 100644 upm/src/lis3dh/lis3dh.h create mode 100644 upm/src/lis3dh/lis3dh.hpp create mode 100644 upm/src/lis3dh/lis3dh.i create mode 100644 upm/src/lis3dh/lis3dh.json create mode 100644 upm/src/lis3dh/lis3dh_defs.h create mode 100644 upm/src/lis3dh/lis3dh_fti.c create mode 100644 upm/src/lm35/CMakeLists.txt create mode 100644 upm/src/lm35/lm35.c create mode 100644 upm/src/lm35/lm35.cxx create mode 100644 upm/src/lm35/lm35.h create mode 100644 upm/src/lm35/lm35.hpp create mode 100644 upm/src/lm35/lm35.json create mode 100644 upm/src/lm35/lm35_fti.c create mode 100644 upm/src/lol/CMakeLists.txt create mode 100644 upm/src/lol/lol.cxx create mode 100644 upm/src/lol/lol.hpp create mode 100644 upm/src/lol/lol.i create mode 100644 upm/src/lol/lol.json create mode 100644 upm/src/loudness/CMakeLists.txt create mode 100644 upm/src/loudness/loudness.c create mode 100644 upm/src/loudness/loudness.cxx create mode 100644 upm/src/loudness/loudness.h create mode 100644 upm/src/loudness/loudness.hpp create mode 100644 upm/src/loudness/loudness.json create mode 100644 upm/src/loudness/loudness_fti.c create mode 100644 upm/src/lp8860/CMakeLists.txt create mode 100644 upm/src/lp8860/lp8860.cxx create mode 100644 upm/src/lp8860/lp8860.hpp create mode 100644 upm/src/lp8860/lp8860.i create mode 100644 upm/src/lp8860/lp8860.json create mode 100644 upm/src/lp8860/mraa-utils.cxx create mode 100644 upm/src/lp8860/mraa-utils.hpp create mode 100644 upm/src/lpd8806/CMakeLists.txt create mode 100644 upm/src/lpd8806/lpd8806.cxx create mode 100644 upm/src/lpd8806/lpd8806.hpp create mode 100644 upm/src/lpd8806/lpd8806.json create mode 100644 upm/src/lsm303agr/CMakeLists.txt create mode 100644 upm/src/lsm303agr/lsm303agr.c create mode 100644 upm/src/lsm303agr/lsm303agr.cxx create mode 100644 upm/src/lsm303agr/lsm303agr.h create mode 100644 upm/src/lsm303agr/lsm303agr.hpp create mode 100644 upm/src/lsm303agr/lsm303agr.i create mode 100644 upm/src/lsm303agr/lsm303agr.json create mode 100644 upm/src/lsm303agr/lsm303agr_defs.h create mode 100644 upm/src/lsm303agr/lsm303agr_fti.c create mode 100644 upm/src/lsm303d/CMakeLists.txt create mode 100644 upm/src/lsm303d/lsm303d.c create mode 100644 upm/src/lsm303d/lsm303d.cxx create mode 100644 upm/src/lsm303d/lsm303d.h create mode 100644 upm/src/lsm303d/lsm303d.hpp create mode 100644 upm/src/lsm303d/lsm303d.i create mode 100644 upm/src/lsm303d/lsm303d.json create mode 100644 upm/src/lsm303d/lsm303d_defs.h create mode 100644 upm/src/lsm303dlh/CMakeLists.txt create mode 100644 upm/src/lsm303dlh/lsm303dlh.cxx create mode 100644 upm/src/lsm303dlh/lsm303dlh.hpp create mode 100644 upm/src/lsm303dlh/lsm303dlh.i create mode 100644 upm/src/lsm303dlh/lsm303dlh.json create mode 100644 upm/src/lsm6ds3h/CMakeLists.txt create mode 100644 upm/src/lsm6ds3h/lsm6ds3h.c create mode 100644 upm/src/lsm6ds3h/lsm6ds3h.cxx create mode 100644 upm/src/lsm6ds3h/lsm6ds3h.h create mode 100644 upm/src/lsm6ds3h/lsm6ds3h.hpp create mode 100644 upm/src/lsm6ds3h/lsm6ds3h.i create mode 100644 upm/src/lsm6ds3h/lsm6ds3h.json create mode 100644 upm/src/lsm6ds3h/lsm6ds3h_defs.h create mode 100644 upm/src/lsm6ds3h/lsm6ds3h_fti.c create mode 100644 upm/src/lsm6dsl/CMakeLists.txt create mode 100644 upm/src/lsm6dsl/lsm6dsl.c create mode 100644 upm/src/lsm6dsl/lsm6dsl.cxx create mode 100644 upm/src/lsm6dsl/lsm6dsl.h create mode 100644 upm/src/lsm6dsl/lsm6dsl.hpp create mode 100644 upm/src/lsm6dsl/lsm6dsl.i create mode 100644 upm/src/lsm6dsl/lsm6dsl.json create mode 100644 upm/src/lsm6dsl/lsm6dsl_defs.h create mode 100644 upm/src/lsm6dsl/lsm6dsl_fti.c create mode 100644 upm/src/lsm9ds0/CMakeLists.txt create mode 100644 upm/src/lsm9ds0/lsm9ds0.cxx create mode 100644 upm/src/lsm9ds0/lsm9ds0.hpp create mode 100644 upm/src/lsm9ds0/lsm9ds0.i create mode 100644 upm/src/lsm9ds0/lsm9ds0.json create mode 100644 upm/src/m24lr64e/CMakeLists.txt create mode 100644 upm/src/m24lr64e/m24lr64e.c create mode 100644 upm/src/m24lr64e/m24lr64e.cxx create mode 100644 upm/src/m24lr64e/m24lr64e.h create mode 100644 upm/src/m24lr64e/m24lr64e.hpp create mode 100644 upm/src/m24lr64e/m24lr64e.i create mode 100644 upm/src/m24lr64e/m24lr64e.json create mode 100644 upm/src/m24lr64e/m24lr64e_fti.c create mode 100644 upm/src/mag3110/CMakeLists.txt create mode 100644 upm/src/mag3110/mag3110.cpp create mode 100644 upm/src/mag3110/mag3110.hpp create mode 100644 upm/src/mag3110/mag3110.json create mode 100644 upm/src/max30100/CMakeLists.txt create mode 100644 upm/src/max30100/max30100.c create mode 100644 upm/src/max30100/max30100.cxx create mode 100644 upm/src/max30100/max30100.h create mode 100644 upm/src/max30100/max30100.hpp create mode 100644 upm/src/max30100/max30100.i create mode 100644 upm/src/max30100/max30100.json create mode 100644 upm/src/max30100/max30100_fti.c create mode 100644 upm/src/max30100/max30100_regs.h create mode 100644 upm/src/max31723/CMakeLists.txt create mode 100644 upm/src/max31723/max31723.cxx create mode 100644 upm/src/max31723/max31723.hpp create mode 100644 upm/src/max31723/max31723.json create mode 100644 upm/src/max31855/CMakeLists.txt create mode 100644 upm/src/max31855/max31855.cxx create mode 100644 upm/src/max31855/max31855.hpp create mode 100644 upm/src/max31855/max31855.i create mode 100644 upm/src/max31855/max31855.json create mode 100644 upm/src/max44000/CMakeLists.txt create mode 100644 upm/src/max44000/max44000.cxx create mode 100644 upm/src/max44000/max44000.hpp create mode 100644 upm/src/max44000/max44000.i create mode 100644 upm/src/max44000/max44000.json create mode 100644 upm/src/max44009/CMakeLists.txt create mode 100644 upm/src/max44009/max44009.cxx create mode 100644 upm/src/max44009/max44009.hpp create mode 100644 upm/src/max44009/max44009.i create mode 100644 upm/src/max44009/max44009.json create mode 100644 upm/src/max5487/CMakeLists.txt create mode 100644 upm/src/max5487/max5487.cxx create mode 100644 upm/src/max5487/max5487.hpp create mode 100644 upm/src/max5487/max5487.json create mode 100644 upm/src/maxds3231m/CMakeLists.txt create mode 100644 upm/src/maxds3231m/maxds3231m.cxx create mode 100644 upm/src/maxds3231m/maxds3231m.hpp create mode 100644 upm/src/maxds3231m/maxds3231m.json create mode 100644 upm/src/maxsonarez/CMakeLists.txt create mode 100644 upm/src/maxsonarez/maxsonarez.cxx create mode 100644 upm/src/maxsonarez/maxsonarez.hpp create mode 100644 upm/src/maxsonarez/maxsonarez.json create mode 100644 upm/src/mb704x/CMakeLists.txt create mode 100644 upm/src/mb704x/mb704x.c create mode 100644 upm/src/mb704x/mb704x.cxx create mode 100644 upm/src/mb704x/mb704x.h create mode 100644 upm/src/mb704x/mb704x.hpp create mode 100644 upm/src/mb704x/mb704x.i create mode 100644 upm/src/mb704x/mb704x.json create mode 100644 upm/src/mb704x/mb704x_fti.c create mode 100644 upm/src/mcp2515/CMakeLists.txt create mode 100644 upm/src/mcp2515/license.txt create mode 100644 upm/src/mcp2515/mcp2515.c create mode 100644 upm/src/mcp2515/mcp2515.cxx create mode 100644 upm/src/mcp2515/mcp2515.h create mode 100644 upm/src/mcp2515/mcp2515.hpp create mode 100644 upm/src/mcp2515/mcp2515.i create mode 100644 upm/src/mcp2515/mcp2515.json create mode 100644 upm/src/mcp2515/mcp2515_regs.h create mode 100644 upm/src/mcp9808/CMakeLists.txt create mode 100644 upm/src/mcp9808/mcp9808.cxx create mode 100644 upm/src/mcp9808/mcp9808.hpp create mode 100644 upm/src/mcp9808/mcp9808.json create mode 100644 upm/src/md/CMakeLists.txt create mode 100644 upm/src/md/md.c create mode 100644 upm/src/md/md.cxx create mode 100644 upm/src/md/md.h create mode 100644 upm/src/md/md.hpp create mode 100644 upm/src/md/md.i create mode 100644 upm/src/md/md.json create mode 100644 upm/src/md/md_defs.h create mode 100644 upm/src/mg811/CMakeLists.txt create mode 100644 upm/src/mg811/mg811.cxx create mode 100644 upm/src/mg811/mg811.hpp create mode 100644 upm/src/mg811/mg811.json create mode 100644 upm/src/mhz16/CMakeLists.txt create mode 100644 upm/src/mhz16/mhz16.cxx create mode 100644 upm/src/mhz16/mhz16.hpp create mode 100644 upm/src/mhz16/mhz16.i create mode 100644 upm/src/mhz16/mhz16.json create mode 100644 upm/src/mic/CMakeLists.txt create mode 100644 upm/src/mic/mic.c create mode 100644 upm/src/mic/mic.cxx create mode 100644 upm/src/mic/mic.h create mode 100644 upm/src/mic/mic.hpp create mode 100644 upm/src/mic/mic.i create mode 100644 upm/src/mic/mic.json create mode 100644 upm/src/mic/mic_fti.c create mode 100644 upm/src/micsv89/CMakeLists.txt create mode 100644 upm/src/micsv89/micsv89.cxx create mode 100644 upm/src/micsv89/micsv89.hpp create mode 100644 upm/src/micsv89/micsv89.json create mode 100644 upm/src/mlx90614/CMakeLists.txt create mode 100644 upm/src/mlx90614/mlx90614.cxx create mode 100644 upm/src/mlx90614/mlx90614.hpp create mode 100644 upm/src/mlx90614/mlx90614.json create mode 100644 upm/src/mma7361/CMakeLists.txt create mode 100644 upm/src/mma7361/mma7361.c create mode 100644 upm/src/mma7361/mma7361.cxx create mode 100644 upm/src/mma7361/mma7361.h create mode 100644 upm/src/mma7361/mma7361.hpp create mode 100644 upm/src/mma7361/mma7361.i create mode 100644 upm/src/mma7361/mma7361.json create mode 100644 upm/src/mma7361/mma7361_fti.c create mode 100644 upm/src/mma7455/CMakeLists.txt create mode 100644 upm/src/mma7455/mma7455.cxx create mode 100644 upm/src/mma7455/mma7455.hpp create mode 100644 upm/src/mma7455/mma7455.i create mode 100644 upm/src/mma7455/mma7455.json create mode 100644 upm/src/mma7660/CMakeLists.txt create mode 100644 upm/src/mma7660/mma7660.c create mode 100644 upm/src/mma7660/mma7660.cxx create mode 100644 upm/src/mma7660/mma7660.h create mode 100644 upm/src/mma7660/mma7660.hpp create mode 100644 upm/src/mma7660/mma7660.i create mode 100644 upm/src/mma7660/mma7660.json create mode 100644 upm/src/mma7660/mma7660_fti.c create mode 100644 upm/src/mma7660/mma7660_regs.h create mode 100644 upm/src/mma8x5x/CMakeLists.txt create mode 100644 upm/src/mma8x5x/mma8x5x.cpp create mode 100644 upm/src/mma8x5x/mma8x5x.hpp create mode 100644 upm/src/mma8x5x/mma8x5x.json create mode 100644 upm/src/mmc35240/CMakeLists.txt create mode 100644 upm/src/mmc35240/mat.h create mode 100644 upm/src/mmc35240/mmc35240.cxx create mode 100644 upm/src/mmc35240/mmc35240.hpp create mode 100644 upm/src/mmc35240/mmc35240.json create mode 100644 upm/src/mmc35240/traits.h create mode 100644 upm/src/mmc35240/vec.h create mode 100644 upm/src/moisture/CMakeLists.txt create mode 100644 upm/src/moisture/moisture.c create mode 100644 upm/src/moisture/moisture.cxx create mode 100644 upm/src/moisture/moisture.h create mode 100644 upm/src/moisture/moisture.hpp create mode 100644 upm/src/moisture/moisture.json create mode 100644 upm/src/moisture/moisture_fti.c create mode 100644 upm/src/mpl3115a2/CMakeLists.txt create mode 100644 upm/src/mpl3115a2/mpl3115a2.cpp create mode 100644 upm/src/mpl3115a2/mpl3115a2.hpp create mode 100644 upm/src/mpl3115a2/mpl3115a2.json create mode 100644 upm/src/mpr121/CMakeLists.txt create mode 100644 upm/src/mpr121/mpr121.c create mode 100644 upm/src/mpr121/mpr121.cxx create mode 100644 upm/src/mpr121/mpr121.h create mode 100644 upm/src/mpr121/mpr121.hpp create mode 100644 upm/src/mpr121/mpr121.i create mode 100644 upm/src/mpr121/mpr121.json create mode 100644 upm/src/mpr121/mpr121_fti.c create mode 100644 upm/src/mpu9150/CMakeLists.txt create mode 100644 upm/src/mpu9150/ak8975.cxx create mode 100644 upm/src/mpu9150/ak8975.hpp create mode 100644 upm/src/mpu9150/mpu60x0.cxx create mode 100644 upm/src/mpu9150/mpu60x0.hpp create mode 100644 upm/src/mpu9150/mpu9150.cxx create mode 100644 upm/src/mpu9150/mpu9150.hpp create mode 100644 upm/src/mpu9150/mpu9150.i create mode 100644 upm/src/mpu9150/mpu9150.json create mode 100644 upm/src/mpu9150/mpu9250.cxx create mode 100644 upm/src/mpu9150/mpu9250.hpp create mode 100644 upm/src/mq303a/CMakeLists.txt create mode 100644 upm/src/mq303a/mq303a.c create mode 100644 upm/src/mq303a/mq303a.cxx create mode 100644 upm/src/mq303a/mq303a.h create mode 100644 upm/src/mq303a/mq303a.hpp create mode 100644 upm/src/mq303a/mq303a.json create mode 100644 upm/src/mq303a/mq303a_fti.c create mode 100644 upm/src/ms5611/CMakeLists.txt create mode 100644 upm/src/ms5611/ms5611.cxx create mode 100644 upm/src/ms5611/ms5611.hpp create mode 100644 upm/src/ms5611/ms5611.i create mode 100644 upm/src/ms5611/ms5611.json create mode 100644 upm/src/ms5803/CMakeLists.txt create mode 100644 upm/src/ms5803/ms5803.c create mode 100644 upm/src/ms5803/ms5803.cxx create mode 100644 upm/src/ms5803/ms5803.h create mode 100644 upm/src/ms5803/ms5803.hpp create mode 100644 upm/src/ms5803/ms5803.i create mode 100644 upm/src/ms5803/ms5803.json create mode 100644 upm/src/ms5803/ms5803_defs.h create mode 100644 upm/src/ms5803/ms5803_fti.c create mode 100644 upm/src/my9221/CMakeLists.txt create mode 100644 upm/src/my9221/grovecircularled.cxx create mode 100644 upm/src/my9221/grovecircularled.hpp create mode 100644 upm/src/my9221/groveledbar.cxx create mode 100644 upm/src/my9221/groveledbar.hpp create mode 100644 upm/src/my9221/my9221.c create mode 100644 upm/src/my9221/my9221.cxx create mode 100644 upm/src/my9221/my9221.h create mode 100644 upm/src/my9221/my9221.hpp create mode 100644 upm/src/my9221/my9221.i create mode 100644 upm/src/my9221/my9221.json create mode 100644 upm/src/nlgpio16/CMakeLists.txt create mode 100644 upm/src/nlgpio16/nlgpio16.cxx create mode 100644 upm/src/nlgpio16/nlgpio16.hpp create mode 100644 upm/src/nlgpio16/nlgpio16.i create mode 100644 upm/src/nlgpio16/nlgpio16.json create mode 100644 upm/src/nmea_gps/CMakeLists.txt create mode 100644 upm/src/nmea_gps/nmea_gps.c create mode 100644 upm/src/nmea_gps/nmea_gps.cxx create mode 100644 upm/src/nmea_gps/nmea_gps.h create mode 100644 upm/src/nmea_gps/nmea_gps.hpp create mode 100644 upm/src/nmea_gps/nmea_gps.i create mode 100644 upm/src/nmea_gps/nmea_gps.json create mode 100644 upm/src/nmea_gps/nmea_gps_fti.c create mode 100644 upm/src/nodeswig_blacklist create mode 100644 upm/src/nrf24l01/CMakeLists.txt create mode 100644 upm/src/nrf24l01/Callback.hpp create mode 100644 upm/src/nrf24l01/nrf24l01.cxx create mode 100644 upm/src/nrf24l01/nrf24l01.hpp create mode 100644 upm/src/nrf24l01/nrf24l01.i create mode 100644 upm/src/nrf24l01/nrf24l01.json create mode 100644 upm/src/nrf8001/CMakeLists.txt create mode 100644 upm/src/nrf8001/aci.h create mode 100644 upm/src/nrf8001/aci_cmds.h create mode 100644 upm/src/nrf8001/aci_evts.h create mode 100644 upm/src/nrf8001/aci_protocol_defines.h create mode 100644 upm/src/nrf8001/aci_queue.cpp create mode 100644 upm/src/nrf8001/aci_queue.h create mode 100644 upm/src/nrf8001/aci_setup.cpp create mode 100644 upm/src/nrf8001/aci_setup.h create mode 100644 upm/src/nrf8001/acilib.cpp create mode 100644 upm/src/nrf8001/acilib.h create mode 100644 upm/src/nrf8001/acilib_defs.h create mode 100644 upm/src/nrf8001/acilib_if.h create mode 100644 upm/src/nrf8001/acilib_types.h create mode 100644 upm/src/nrf8001/boards.h create mode 100644 upm/src/nrf8001/dtm.h create mode 100644 upm/src/nrf8001/hal_aci_tl.cpp create mode 100644 upm/src/nrf8001/hal_aci_tl.h create mode 100644 upm/src/nrf8001/hal_platform.h create mode 100644 upm/src/nrf8001/lib_aci.cpp create mode 100644 upm/src/nrf8001/lib_aci.h create mode 100644 upm/src/nrf8001/nrf8001.cxx create mode 100644 upm/src/nrf8001/nrf8001.hpp create mode 100644 upm/src/nrf8001/nrf8001.json create mode 100644 upm/src/nrf8001/uart_over_ble.h create mode 100644 upm/src/nunchuck/CMakeLists.txt create mode 100644 upm/src/nunchuck/nunchuck.c create mode 100644 upm/src/nunchuck/nunchuck.cxx create mode 100644 upm/src/nunchuck/nunchuck.h create mode 100644 upm/src/nunchuck/nunchuck.hpp create mode 100644 upm/src/nunchuck/nunchuck.i create mode 100644 upm/src/nunchuck/nunchuck.json create mode 100644 upm/src/nunchuck/nunchuck_fti.c create mode 100644 upm/src/o2/CMakeLists.txt create mode 100644 upm/src/o2/o2.c create mode 100644 upm/src/o2/o2.cxx create mode 100644 upm/src/o2/o2.h create mode 100644 upm/src/o2/o2.hpp create mode 100644 upm/src/o2/o2.json create mode 100644 upm/src/o2/o2_fti.c create mode 100644 upm/src/otp538u/CMakeLists.txt create mode 100644 upm/src/otp538u/otp538u.c create mode 100644 upm/src/otp538u/otp538u.cxx create mode 100644 upm/src/otp538u/otp538u.h create mode 100644 upm/src/otp538u/otp538u.hpp create mode 100644 upm/src/otp538u/otp538u.json create mode 100644 upm/src/otp538u/otp538u_fti.c create mode 100644 upm/src/otp538u/thermister_rt_table.h create mode 100644 upm/src/otp538u/thermopile_vt_table.h create mode 100644 upm/src/ozw/CMakeLists.txt create mode 100644 upm/src/ozw/aeotecdsb09104.cxx create mode 100644 upm/src/ozw/aeotecdsb09104.hpp create mode 100644 upm/src/ozw/aeotecdw2e.cxx create mode 100644 upm/src/ozw/aeotecdw2e.hpp create mode 100644 upm/src/ozw/aeotecsdg2.cxx create mode 100644 upm/src/ozw/aeotecsdg2.hpp create mode 100644 upm/src/ozw/aeotecss6.cxx create mode 100644 upm/src/ozw/aeotecss6.hpp create mode 100644 upm/src/ozw/ozw.cxx create mode 100644 upm/src/ozw/ozw.hpp create mode 100644 upm/src/ozw/ozw.i create mode 100644 upm/src/ozw/ozw.json create mode 100644 upm/src/ozw/ozwdump.cxx create mode 100644 upm/src/ozw/ozwdump.hpp create mode 100644 upm/src/ozw/ozwinterface.cxx create mode 100644 upm/src/ozw/ozwinterface.hpp create mode 100644 upm/src/ozw/tzemt400.cxx create mode 100644 upm/src/ozw/tzemt400.hpp create mode 100644 upm/src/ozw/zwNode.cxx create mode 100644 upm/src/ozw/zwNode.hpp create mode 100644 upm/src/p9813/CMakeLists.txt create mode 100644 upm/src/p9813/p9813.c create mode 100644 upm/src/p9813/p9813.cxx create mode 100644 upm/src/p9813/p9813.h create mode 100644 upm/src/p9813/p9813.hpp create mode 100644 upm/src/p9813/p9813.i create mode 100644 upm/src/p9813/p9813.json create mode 100644 upm/src/p9813/p9813_fti.c create mode 100644 upm/src/package.json.in create mode 100644 upm/src/package.json.npm.in create mode 100644 upm/src/pca9685/CMakeLists.txt create mode 100644 upm/src/pca9685/pca9685.cxx create mode 100644 upm/src/pca9685/pca9685.hpp create mode 100644 upm/src/pca9685/pca9685.i create mode 100644 upm/src/pca9685/pca9685.json create mode 100644 upm/src/pkgconfig.in create mode 100644 upm/src/pn532/CMakeLists.txt create mode 100644 upm/src/pn532/license.txt create mode 100644 upm/src/pn532/pn532.cxx create mode 100644 upm/src/pn532/pn532.hpp create mode 100644 upm/src/pn532/pn532.i create mode 100644 upm/src/pn532/pn532.json create mode 100644 upm/src/pom.xml.in create mode 100644 upm/src/ppd42ns/CMakeLists.txt create mode 100644 upm/src/ppd42ns/ppd42ns.c create mode 100644 upm/src/ppd42ns/ppd42ns.cxx create mode 100644 upm/src/ppd42ns/ppd42ns.h create mode 100644 upm/src/ppd42ns/ppd42ns.hpp create mode 100644 upm/src/ppd42ns/ppd42ns.i create mode 100644 upm/src/ppd42ns/ppd42ns.json create mode 100644 upm/src/ppd42ns/ppd42ns_data.h create mode 100644 upm/src/pulsensor/CMakeLists.txt create mode 100644 upm/src/pulsensor/Callback.hpp create mode 100644 upm/src/pulsensor/pulsensor.cxx create mode 100644 upm/src/pulsensor/pulsensor.hpp create mode 100644 upm/src/pulsensor/pulsensor.i create mode 100644 upm/src/pulsensor/pulsensor.json create mode 100644 upm/src/pythonswig_blacklist create mode 100644 upm/src/relay/CMakeLists.txt create mode 100644 upm/src/relay/relay.c create mode 100644 upm/src/relay/relay.cxx create mode 100644 upm/src/relay/relay.h create mode 100644 upm/src/relay/relay.hpp create mode 100644 upm/src/relay/relay.json create mode 100644 upm/src/relay/relay_fti.c create mode 100644 upm/src/rf22/CMakeLists.txt create mode 100644 upm/src/rf22/rf22.cxx create mode 100644 upm/src/rf22/rf22.hpp create mode 100644 upm/src/rf22/rf22.i create mode 100644 upm/src/rf22/rf22.json create mode 100644 upm/src/rfr359f/CMakeLists.txt create mode 100644 upm/src/rfr359f/rfr359f.cxx create mode 100644 upm/src/rfr359f/rfr359f.hpp create mode 100644 upm/src/rfr359f/rfr359f.json create mode 100644 upm/src/rgbringcoder/CMakeLists.txt create mode 100644 upm/src/rgbringcoder/rgbringcoder.cxx create mode 100644 upm/src/rgbringcoder/rgbringcoder.hpp create mode 100644 upm/src/rgbringcoder/rgbringcoder.i create mode 100644 upm/src/rgbringcoder/rgbringcoder.json create mode 100644 upm/src/rhusb/CMakeLists.txt create mode 100644 upm/src/rhusb/rhusb.cxx create mode 100644 upm/src/rhusb/rhusb.hpp create mode 100644 upm/src/rhusb/rhusb.i create mode 100644 upm/src/rhusb/rhusb.json create mode 100644 upm/src/rn2903/CMakeLists.txt create mode 100644 upm/src/rn2903/rn2903.c create mode 100644 upm/src/rn2903/rn2903.cxx create mode 100644 upm/src/rn2903/rn2903.h create mode 100644 upm/src/rn2903/rn2903.hpp create mode 100644 upm/src/rn2903/rn2903.i create mode 100644 upm/src/rn2903/rn2903.json create mode 100644 upm/src/rn2903/rn2903_defs.h create mode 100644 upm/src/rotary/CMakeLists.txt create mode 100644 upm/src/rotary/rotary.c create mode 100644 upm/src/rotary/rotary.cxx create mode 100644 upm/src/rotary/rotary.h create mode 100644 upm/src/rotary/rotary.hpp create mode 100644 upm/src/rotary/rotary.json create mode 100644 upm/src/rotary/rotary_fti.c create mode 100644 upm/src/rotaryencoder/CMakeLists.txt create mode 100644 upm/src/rotaryencoder/rotaryencoder.c create mode 100644 upm/src/rotaryencoder/rotaryencoder.cxx create mode 100644 upm/src/rotaryencoder/rotaryencoder.h create mode 100644 upm/src/rotaryencoder/rotaryencoder.hpp create mode 100644 upm/src/rotaryencoder/rotaryencoder.i create mode 100644 upm/src/rotaryencoder/rotaryencoder.json create mode 100644 upm/src/rotaryencoder/rotaryencoder_fti.c create mode 100644 upm/src/rpr220/CMakeLists.txt create mode 100644 upm/src/rpr220/rpr220.c create mode 100644 upm/src/rpr220/rpr220.cxx create mode 100644 upm/src/rpr220/rpr220.h create mode 100644 upm/src/rpr220/rpr220.hpp create mode 100644 upm/src/rpr220/rpr220.i create mode 100644 upm/src/rpr220/rpr220.json create mode 100644 upm/src/rpr220/rpr220_fti.c create mode 100644 upm/src/rsc/CMakeLists.txt create mode 100644 upm/src/rsc/rsc.c create mode 100644 upm/src/rsc/rsc.cxx create mode 100644 upm/src/rsc/rsc.h create mode 100644 upm/src/rsc/rsc.hpp create mode 100644 upm/src/rsc/rsc.json create mode 100644 upm/src/rsc/rsc_regs.h create mode 100644 upm/src/scam/CMakeLists.txt create mode 100644 upm/src/scam/scam.cxx create mode 100644 upm/src/scam/scam.hpp create mode 100644 upm/src/scam/scam.i create mode 100644 upm/src/scam/scam.json create mode 100644 upm/src/sensortemplate/CMakeLists.txt create mode 100644 upm/src/sensortemplate/sensortemplate.cxx create mode 100644 upm/src/sensortemplate/sensortemplate.hpp create mode 100644 upm/src/sensortemplate/sensortemplate.i create mode 100644 upm/src/sensortemplate/sensortemplate.json create mode 100644 upm/src/servo/CMakeLists.txt create mode 100644 upm/src/servo/es08a.c create mode 100644 upm/src/servo/es08a.cxx create mode 100644 upm/src/servo/es08a.h create mode 100644 upm/src/servo/es08a.hpp create mode 100644 upm/src/servo/es08a_fti.c create mode 100644 upm/src/servo/es9257.c create mode 100644 upm/src/servo/es9257.cxx create mode 100644 upm/src/servo/es9257.h create mode 100644 upm/src/servo/es9257.hpp create mode 100644 upm/src/servo/es9257_fti.c create mode 100644 upm/src/servo/servo.cxx create mode 100644 upm/src/servo/servo.hpp create mode 100644 upm/src/servo/servo.i create mode 100644 upm/src/servo/servo.json create mode 100644 upm/src/sht1x/CMakeLists.txt create mode 100644 upm/src/sht1x/sht1x.c create mode 100644 upm/src/sht1x/sht1x.cxx create mode 100644 upm/src/sht1x/sht1x.h create mode 100644 upm/src/sht1x/sht1x.hpp create mode 100644 upm/src/sht1x/sht1x.i create mode 100644 upm/src/sht1x/sht1x.json create mode 100644 upm/src/sht1x/sht1x_defs.h create mode 100644 upm/src/sht1x/sht1x_fti.c create mode 100644 upm/src/si1132/CMakeLists.txt create mode 100644 upm/src/si1132/si1132.cxx create mode 100644 upm/src/si1132/si1132.hpp create mode 100644 upm/src/si1132/si1132.i create mode 100644 upm/src/si1132/si1132.json create mode 100644 upm/src/si114x/CMakeLists.txt create mode 100644 upm/src/si114x/si114x.cxx create mode 100644 upm/src/si114x/si114x.hpp create mode 100644 upm/src/si114x/si114x.i create mode 100644 upm/src/si114x/si114x.json create mode 100644 upm/src/si7005/CMakeLists.txt create mode 100644 upm/src/si7005/mraa-utils.cxx create mode 100644 upm/src/si7005/mraa-utils.hpp create mode 100644 upm/src/si7005/si7005.cxx create mode 100644 upm/src/si7005/si7005.hpp create mode 100644 upm/src/si7005/si7005.i create mode 100644 upm/src/si7005/si7005.json create mode 100644 upm/src/slide/CMakeLists.txt create mode 100644 upm/src/slide/slide.c create mode 100644 upm/src/slide/slide.cxx create mode 100644 upm/src/slide/slide.h create mode 100644 upm/src/slide/slide.hpp create mode 100644 upm/src/slide/slide.json create mode 100644 upm/src/slide/slide_fti.c create mode 100644 upm/src/sm130/CMakeLists.txt create mode 100644 upm/src/sm130/sm130.cxx create mode 100644 upm/src/sm130/sm130.hpp create mode 100644 upm/src/sm130/sm130.json create mode 100644 upm/src/smartdrive/CMakeLists.txt create mode 100644 upm/src/smartdrive/smartdrive.cxx create mode 100644 upm/src/smartdrive/smartdrive.hpp create mode 100644 upm/src/smartdrive/smartdrive.i create mode 100644 upm/src/smartdrive/smartdrive.json create mode 100644 upm/src/speaker/CMakeLists.txt create mode 100644 upm/src/speaker/speaker.c create mode 100644 upm/src/speaker/speaker.cxx create mode 100644 upm/src/speaker/speaker.h create mode 100644 upm/src/speaker/speaker.hpp create mode 100644 upm/src/speaker/speaker.json create mode 100644 upm/src/ssd1351/CMakeLists.txt create mode 100644 upm/src/ssd1351/license.txt create mode 100644 upm/src/ssd1351/ssd1351.cxx create mode 100644 upm/src/ssd1351/ssd1351.hpp create mode 100644 upm/src/ssd1351/ssd1351.i create mode 100644 upm/src/ssd1351/ssd1351.json create mode 100644 upm/src/ssd1351/ssd1351_gfx.cxx create mode 100644 upm/src/ssd1351/ssd1351_gfx.hpp create mode 100644 upm/src/st7735/CMakeLists.txt create mode 100644 upm/src/st7735/license.txt create mode 100644 upm/src/st7735/st7735.cxx create mode 100644 upm/src/st7735/st7735.hpp create mode 100644 upm/src/st7735/st7735.i create mode 100644 upm/src/st7735/st7735.json create mode 100644 upm/src/st7735/st7735_gfx.cxx create mode 100644 upm/src/st7735/st7735_gfx.hpp create mode 100644 upm/src/stepmotor/CMakeLists.txt create mode 100644 upm/src/stepmotor/stepmotor.cxx create mode 100644 upm/src/stepmotor/stepmotor.hpp create mode 100644 upm/src/stepmotor/stepmotor.i create mode 100644 upm/src/stepmotor/stepmotor.json create mode 100644 upm/src/swigme.i.in create mode 100644 upm/src/sx1276/CMakeLists.txt create mode 100644 upm/src/sx1276/LICENSE.txt create mode 100644 upm/src/sx1276/sx1276.cxx create mode 100644 upm/src/sx1276/sx1276.hpp create mode 100644 upm/src/sx1276/sx1276.i create mode 100644 upm/src/sx1276/sx1276.json create mode 100644 upm/src/sx6119/CMakeLists.txt create mode 100644 upm/src/sx6119/sx6119.cxx create mode 100644 upm/src/sx6119/sx6119.hpp create mode 100644 upm/src/sx6119/sx6119.json create mode 100644 upm/src/t3311/CMakeLists.txt create mode 100644 upm/src/t3311/t3311.cxx create mode 100644 upm/src/t3311/t3311.hpp create mode 100644 upm/src/t3311/t3311.i create mode 100644 upm/src/t3311/t3311.json create mode 100644 upm/src/t6713/CMakeLists.txt create mode 100644 upm/src/t6713/t6713.cxx create mode 100644 upm/src/t6713/t6713.hpp create mode 100644 upm/src/t6713/t6713.i create mode 100644 upm/src/t6713/t6713.json create mode 100644 upm/src/t8100/CMakeLists.txt create mode 100644 upm/src/t8100/t8100.cxx create mode 100644 upm/src/t8100/t8100.hpp create mode 100644 upm/src/t8100/t8100.i create mode 100644 upm/src/t8100/t8100.json create mode 100644 upm/src/ta12200/CMakeLists.txt create mode 100644 upm/src/ta12200/ta12200.cxx create mode 100644 upm/src/ta12200/ta12200.hpp create mode 100644 upm/src/ta12200/ta12200.json create mode 100644 upm/src/tb7300/CMakeLists.txt create mode 100644 upm/src/tb7300/tb7300.cxx create mode 100644 upm/src/tb7300/tb7300.hpp create mode 100644 upm/src/tb7300/tb7300.i create mode 100644 upm/src/tb7300/tb7300.json create mode 100644 upm/src/tca9548a/CMakeLists.txt create mode 100644 upm/src/tca9548a/tca9548a.cxx create mode 100644 upm/src/tca9548a/tca9548a.hpp create mode 100644 upm/src/tca9548a/tca9548a.json create mode 100644 upm/src/tcs3414cs/CMakeLists.txt create mode 100644 upm/src/tcs3414cs/tcs3414cs.cxx create mode 100644 upm/src/tcs3414cs/tcs3414cs.hpp create mode 100644 upm/src/tcs3414cs/tcs3414cs.json create mode 100644 upm/src/tcs37727/CMakeLists.txt create mode 100644 upm/src/tcs37727/tcs37727.cpp create mode 100644 upm/src/tcs37727/tcs37727.hpp create mode 100644 upm/src/tcs37727/tcs37727.json create mode 100644 upm/src/teams/CMakeLists.txt create mode 100644 upm/src/teams/teams.cxx create mode 100644 upm/src/teams/teams.hpp create mode 100644 upm/src/teams/teams.i create mode 100644 upm/src/teams/teams.json create mode 100644 upm/src/temperature/CMakeLists.txt create mode 100644 upm/src/temperature/temperature.c create mode 100644 upm/src/temperature/temperature.cxx create mode 100644 upm/src/temperature/temperature.h create mode 100644 upm/src/temperature/temperature.hpp create mode 100644 upm/src/temperature/temperature.json create mode 100644 upm/src/temperature/temperature_fti.c create mode 100644 upm/src/tex00/CMakeLists.txt create mode 100644 upm/src/tex00/tex00.cxx create mode 100644 upm/src/tex00/tex00.hpp create mode 100644 upm/src/tex00/tex00.i create mode 100644 upm/src/tex00/tex00.json create mode 100644 upm/src/th02/CMakeLists.txt create mode 100644 upm/src/th02/th02.cxx create mode 100644 upm/src/th02/th02.hpp create mode 100644 upm/src/th02/th02.json create mode 100644 upm/src/tm1637/CMakeLists.txt create mode 100644 upm/src/tm1637/tm1637.cxx create mode 100644 upm/src/tm1637/tm1637.hpp create mode 100644 upm/src/tm1637/tm1637.i create mode 100644 upm/src/tm1637/tm1637.json create mode 100644 upm/src/tmp006/CMakeLists.txt create mode 100644 upm/src/tmp006/tmp006.cpp create mode 100644 upm/src/tmp006/tmp006.hpp create mode 100644 upm/src/tmp006/tmp006.json create mode 100644 upm/src/tsl2561/CMakeLists.txt create mode 100644 upm/src/tsl2561/tsl2561.c create mode 100644 upm/src/tsl2561/tsl2561.cxx create mode 100644 upm/src/tsl2561/tsl2561.h create mode 100644 upm/src/tsl2561/tsl2561.hpp create mode 100644 upm/src/tsl2561/tsl2561.json create mode 100644 upm/src/tsl2561/tsl2561_fti.c create mode 100644 upm/src/ttp223/CMakeLists.txt create mode 100644 upm/src/ttp223/ttp223.c create mode 100644 upm/src/ttp223/ttp223.cxx create mode 100644 upm/src/ttp223/ttp223.h create mode 100644 upm/src/ttp223/ttp223.hpp create mode 100644 upm/src/ttp223/ttp223.i create mode 100644 upm/src/ttp223/ttp223.json create mode 100644 upm/src/ttp223/ttp223_fti.c create mode 100644 upm/src/uartat/CMakeLists.txt create mode 100644 upm/src/uartat/uartat.c create mode 100644 upm/src/uartat/uartat.cxx create mode 100644 upm/src/uartat/uartat.h create mode 100644 upm/src/uartat/uartat.hpp create mode 100644 upm/src/uartat/uartat.i create mode 100644 upm/src/uartat/uartat.json create mode 100644 upm/src/uartat/uartat_defs.h create mode 100644 upm/src/uln200xa/CMakeLists.txt create mode 100644 upm/src/uln200xa/uln200xa.c create mode 100644 upm/src/uln200xa/uln200xa.cxx create mode 100644 upm/src/uln200xa/uln200xa.h create mode 100644 upm/src/uln200xa/uln200xa.hpp create mode 100644 upm/src/uln200xa/uln200xa.i create mode 100644 upm/src/uln200xa/uln200xa.json create mode 100644 upm/src/uln200xa/uln200xa_defs.h create mode 100644 upm/src/ultrasonic/CMakeLists.txt create mode 100644 upm/src/ultrasonic/ultrasonic.cxx create mode 100644 upm/src/ultrasonic/ultrasonic.hpp create mode 100644 upm/src/ultrasonic/ultrasonic.i create mode 100644 upm/src/ultrasonic/ultrasonic.json create mode 100644 upm/src/upm_exception.i create mode 100644 upm/src/upm_javastdvector.i create mode 100644 upm/src/upm_vectortypes.i create mode 100644 upm/src/urm37/CMakeLists.txt create mode 100644 upm/src/urm37/urm37.c create mode 100644 upm/src/urm37/urm37.cxx create mode 100644 upm/src/urm37/urm37.h create mode 100644 upm/src/urm37/urm37.hpp create mode 100644 upm/src/urm37/urm37.i create mode 100644 upm/src/urm37/urm37.json create mode 100644 upm/src/urm37/urm37_fti.c create mode 100644 upm/src/utilities/CMakeLists.txt create mode 100644 upm/src/utilities/upm_utilities.c create mode 100644 upm/src/utilities/upm_utilities.cxx create mode 100644 upm/src/utilities/upm_utilities.h create mode 100644 upm/src/utilities/upm_utilities.hpp create mode 100644 upm/src/utilities/utilities.i create mode 100644 upm/src/vcap/CMakeLists.txt create mode 100644 upm/src/vcap/vcap.cxx create mode 100644 upm/src/vcap/vcap.hpp create mode 100644 upm/src/vcap/vcap.i create mode 100644 upm/src/vcap/vcap.json create mode 100644 upm/src/vdiv/CMakeLists.txt create mode 100644 upm/src/vdiv/vdiv.c create mode 100644 upm/src/vdiv/vdiv.cxx create mode 100644 upm/src/vdiv/vdiv.h create mode 100644 upm/src/vdiv/vdiv.hpp create mode 100644 upm/src/vdiv/vdiv.json create mode 100644 upm/src/vdiv/vdiv_fti.c create mode 100644 upm/src/veml6070/CMakeLists.txt create mode 100644 upm/src/veml6070/veml6070.c create mode 100644 upm/src/veml6070/veml6070.cxx create mode 100644 upm/src/veml6070/veml6070.h create mode 100644 upm/src/veml6070/veml6070.hpp create mode 100644 upm/src/veml6070/veml6070.i create mode 100644 upm/src/veml6070/veml6070.json create mode 100644 upm/src/water/CMakeLists.txt create mode 100644 upm/src/water/water.c create mode 100644 upm/src/water/water.cxx create mode 100644 upm/src/water/water.h create mode 100644 upm/src/water/water.hpp create mode 100644 upm/src/water/water.json create mode 100644 upm/src/water/water_fti.c create mode 100644 upm/src/waterlevel/CMakeLists.txt create mode 100644 upm/src/waterlevel/waterlevel.cxx create mode 100644 upm/src/waterlevel/waterlevel.hpp create mode 100644 upm/src/waterlevel/waterlevel.json create mode 100644 upm/src/wfs/CMakeLists.txt create mode 100644 upm/src/wfs/wfs.c create mode 100644 upm/src/wfs/wfs.cxx create mode 100644 upm/src/wfs/wfs.h create mode 100644 upm/src/wfs/wfs.hpp create mode 100644 upm/src/wfs/wfs.i create mode 100644 upm/src/wfs/wfs.json create mode 100644 upm/src/wheelencoder/CMakeLists.txt create mode 100644 upm/src/wheelencoder/wheelencoder.cxx create mode 100644 upm/src/wheelencoder/wheelencoder.hpp create mode 100644 upm/src/wheelencoder/wheelencoder.json create mode 100644 upm/src/wt5001/CMakeLists.txt create mode 100644 upm/src/wt5001/wt5001.cxx create mode 100644 upm/src/wt5001/wt5001.hpp create mode 100644 upm/src/wt5001/wt5001.i create mode 100644 upm/src/wt5001/wt5001.json create mode 100644 upm/src/xbee/CMakeLists.txt create mode 100644 upm/src/xbee/xbee.cxx create mode 100644 upm/src/xbee/xbee.hpp create mode 100644 upm/src/xbee/xbee.i create mode 100644 upm/src/xbee/xbee.json create mode 100644 upm/src/yg1006/CMakeLists.txt create mode 100644 upm/src/yg1006/yg1006.c create mode 100644 upm/src/yg1006/yg1006.cxx create mode 100644 upm/src/yg1006/yg1006.h create mode 100644 upm/src/yg1006/yg1006.hpp create mode 100644 upm/src/yg1006/yg1006.json create mode 100644 upm/src/yg1006/yg1006_fti.c create mode 100644 upm/src/zfm20/CMakeLists.txt create mode 100644 upm/src/zfm20/zfm20.cxx create mode 100644 upm/src/zfm20/zfm20.hpp create mode 100644 upm/src/zfm20/zfm20.i create mode 100644 upm/src/zfm20/zfm20.json create mode 100644 upm/tests/CMakeLists.txt create mode 100755 upm/tests/check_autoloadlibrary.py create mode 100755 upm/tests/check_clean.py create mode 100755 upm/tests/check_consistency.py create mode 100644 upm/tests/check_duplicate_headers.py create mode 100755 upm/tests/check_examplenames.py create mode 100755 upm/tests/check_file_encoding.py create mode 100755 upm/tests/check_pythonload.py create mode 100644 upm/tests/node/jsonlint.js create mode 100644 upm/tests/node/package.json create mode 100644 upm/tests/node/test.js create mode 100644 upm/tests/runjsontest.cmake create mode 100644 upm/tests/unit/CMakeLists.txt create mode 100644 upm/tests/unit/json/json_tests.cxx create mode 100644 upm/tests/unit/nmea_gps/nmea_gps_tests.cxx create mode 100644 upm/tests/unit/utilities/utilities_tests.cxx diff --git a/CNAME b/CNAME new file mode 100755 index 00000000..a2edc61b --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +upm.mraa.io diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2fcb545c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM node:latest + +# Install Ruby Tools +RUN apt-get update && apt-get install -y ruby ruby-dev && \ + gem install sass bundler --no-user-install + +# Install Global Node.js Tools +RUN npm install -g gulp + +# Expose port for development +EXPOSE 1234 +EXPOSE 3001 + +# Set Workdir to the mounted directory +WORKDIR /usr/src/app + +CMD bash diff --git a/Documentation/buildingupm.html b/Documentation/buildingupm.html new file mode 100644 index 00000000..c3756af0 --- /dev/null +++ b/Documentation/buildingupm.html @@ -0,0 +1 @@ +
Building UPM
UPM uses cmake in order to make compilation relatively painless. Cmake runs build out of tree so the recommended way is to clone from git and make a build/ directory.
Dependencies
• basic: libmraa, cmake, swig, pkgconfig, pthreads, librt
• bindings: python-dev, nodejs-dev, openjdk
• documentation: doxygen, graphviz, sphinx, yuidoc
• sensor specific: bacnet-mstp, modbus, openzwave, jpeg
This project depends on libmraa, so that needs to be installed first. Append the install location of mraa pkgconfig to the following environment variable:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:.../mraa/build/lib/pkgconfig
If you are building the Java or Node.js bindings make sure you set the JAVA_HOME and NODE_PATH environment variables respectively.
UPM will attempt to build all directories inside src/ and they must contain individual CMakeLists.txt files.
mkdir build
cd build
cmake ..
make
make install
The last command will create the include/ and lib/ directories with a copy of the headers and library objects respectively in your build location. Note that doing an out-of-source build may cause issues when rebuilding later on.
Our cmake configure has a number of options, cmake-gui or ccmake can show you all the options. The interesting ones are detailed below:
Changing install path from /usr/local to /usr
-DCMAKE_INSTALL_PREFIX:PATH=/usr
Building debug build:
-DCMAKE_BUILD_TYPE=DEBUG
Using clang instead of gcc:
-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++
Cross-compiling on a different system:
-DCMAKE_CXX_FLAGS:STRING=-m32 -march=i586
-DCMAKE_C_FLAGS:STRING=-m32 -march=i586
Enabling Java module building
-DBUILDSWIGJAVA=ON
Building with an older version of swig (swig 2.0+) requires the disabling of javascript:
--DBUILDSWIGNODE=OFF
Generating python3 modules instead of python2.7
-DBUILDPYTHON3=ON
Disabling python module building
-DBUILDSWIGPYTHON=OFF
Setting the python library to use:
--DPYTHON_LIBRARY:FILEPATH=/usr/lib/libpython2.7.so.1.0
Building documentation
-DBUILDDOC=ON
Build C/C++/JAVA examples
-DBUILDEXAMPLES=ON
If you intend to turn on all the options and build everything at once (C++, Java, Node, Python and Documentation) you will have to edit the src/doxy2swig.py file and change the line endings from Windows style to Linux format. This has to be repeated every time to sync with the master branch since our Github repository stores files using CR LF line breaks.
You can also generate the include and lib directories containing all the sensor headers and library files respectively with make install. Further, you may choose to generate these only for a specific sensor you modified, and this can be achieved by building from the individual makefile of the sensor. Assuming you're in the build directory, to make the lcd module you would:
cd src/lcd
make install
Often developers are only interested in building one module or even just the python/node module to do some quick testing using scripting. In order to do this you need to use the target name for the python or node module you want to rebuild. For example the lcd module target name is i2clcd. Therefore the python module target name will be prefixed by pyupm. Just do the following to build only that module. Modules not using the UPM cmake macros may have different naming.
make _pyupm_i2clcd
Sometimes you want to build a small C++ example against an installed library. This is fairly easy if installed system-wide. Just link against the correct library (in this case libupm-i2clcd) and then add /usr/include/upm to the loader path:
g++ test.cxx -lupm-i2clcd -I/usr/include/upm
You can also use pkg-config to return the information to you, which is considered the correct way if including UPM in a build system like cmake or autotools on linux.
pkg-config --cflags --libs upm-i2clcd

(* Trademarks)

© 2017 UPM

diff --git a/Documentation/contributingrules.html b/Documentation/contributingrules.html new file mode 100644 index 00000000..8bebc278 --- /dev/null +++ b/Documentation/contributingrules.html @@ -0,0 +1 @@ +
Contribution rules and templates
• Each new module must have an example that builds against your UPM library.
• Each commit must have a sign-off line by everyone who authored or reviewed them. • Commits must be named <file/module>: A good description.
• You must license your module under a FOSS license. The recommended license is MIT but any permissive license is fine. Remember that people using UPM may want to write proprietary programs with your sensors so please avoid GPL. If your license is not MIT, please include a LICENSE file in src/mymodule/.
• The top of each source file must contain a comment block containing the license information. Please test your module builds before contributing and make sure it works on the latest version of libmraa. If you tested on a specific board/platform please tell us what this was in your PR.
• Try not to break the master in any commit.
• Include API documentation as described in the the @ref documentation guide.
Including the MIT license
We prefer that you choose the MIT license for the UPM repository. Here’s the comment block that’s needed at the top each source file:
/* * The MIT License (MIT)
*
* Author: <your full name>
* Copyright (c) <year> <copyright holder>
*
* Author: <contributing author full name - if applicable>
* Copyright (c) <year> <copyright holder>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
Code signing
The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify the below:
Developer's Certificate of Origin 1.1
  By making a contribution to this project, I certify that:
   (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
   (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
   (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
   (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.

then you just add a line to each of your commits with --signoff saying using your real name (sorry, no pseudonyms or anonymous contributions.) Unsigned commits will not be accepted.
  Signed-off-by: Random J Developer <random@developer.example.org>
using your real name (sorry, no pseudonyms or anonymous contributions.) Unsigned commits will not be accepted.

Creating a new sensor library using the sensortemplate
A stubbed-out sensor library is available that can be leveraged to get up-and-running quickly when writing a new sensor library. Use the shell commands below to generate collateral files for your new sensor library.
# Set SensorName to your new library name, example: 'MyNewSensor1234'
export SensorName=MyNewSensor1234
# Copy/paste the below commands into a bash shell...
# Get a lowercase version of the string
export sensorname=${SensorName,,}
# Copy sensortemplate files to ${sensorname}
find docs/ examples/ src/ -name '*sensortemplate*' -exec bash -c 'cp -r $0 ${0/
sensortemplate/${sensorname}}' {} \;
# Copy SensorTemplate files to ${SensorName}
find examples/ src/ -name '*SensorTemplate*' -exec bash -c 'cp -r $0 ${0/
SensorTemplate/${SensorName}}' {} \;
# Rename sernsortemplate src files
rename "s/sensortemplate/${sensorname}/" src/${sensorname}/*
# Search/replace the new files, replacing all instances of sensortemplate
perl -p -i -e "s/SensorTemplate/${SensorName}/g" src/${sensorname}/* examples/*/*${sensorname}*
examples/*/*${SensorName}*
perl -p -i -e "s/sensortemplate/${sensorname}/g" src/${sensorname}/* examples/*/*${sensorname}*
examples/*/*${SensorName}*
# Add mynewmodule example target for c++
perl -p -i -e "s/^((.*)sensortemplate(.*))/\1\n\2${sensorname}\3/g" examples/c++/CMakeLists.txt
# Add mynewmodule example target for java
perl -p -i -e "s/^((.*)SensorTemplateSample sensortemplate(.*))/\1\n\2${SensorName}Sample
${sensorname}\3/g" examples/java/CMakeLists.txt
# Add mynewmodule example mappings for doxygen
perl -p -i -e "s/^(.*SensorTemplateSample.*)$/\1\n${sensorname}.cxx\t${SensorName}Sample.java\t${se
nsorname}.js\t${sensorname}.py/g" doxy/samples.mapping.txt

(* Trademarks)

© 2017 UPM

diff --git a/Documentation/docindex.html b/Documentation/docindex.html new file mode 100644 index 00000000..4b665b78 --- /dev/null +++ b/Documentation/docindex.html @@ -0,0 +1 @@ +

(* Trademarks)

© 2017 UPM

diff --git a/Documentation/installingUpm.html b/Documentation/installingUpm.html new file mode 100644 index 00000000..f4a9c5f9 --- /dev/null +++ b/Documentation/installingUpm.html @@ -0,0 +1 @@ +
Installing UPM
UPM packages are provided for some of the major supported distributions, making it very easy to install UPM and its dependencies without having to go through a full build.
Poky Linux
Yocto Project based Poky Linux builds are provided for Intel Galileo, Intel Edison and Minnowboard. These are the official images released with the Intel IoT Developer Kit and can found here.
To update to the latest stable UPM version:
echo "src intel-iotdk https://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586/" > /etc/opkg/intel-iotdk.conf
opkg update
opkg upgrade mraa upm
If you would like to try the development version use intelgalactic-dev instead.
WindRiver Pulsar Linux
WR Pulsar uses SmartPM for software updates. Updating to the latest UPM version requires:
smart channel -y --add upm_mraa_channel type=rpm-md name="MRAA/UPM" baseurl=http://iotdk.intel.com/repos/pulsar/8/x64
smart update
smart install -y mraa upm
For Pulsar 7 use the following baseurl instead: baseurl=http://iotdk.intel.com/repos/pulsar/7/x64
Wind River Linux 7 uses 01.org repositories and will have a default update channel that includes MRAA & UPM. Thus you only have to update and install.
Ubuntu Desktop/Server
MRAA and UPM are available through a Personal Package Archive (PPA) on Ubuntu that can be found here.
To install :
sudo add-apt-repository ppa:mraa/mraa
smart update
sudo apt-get install libupm-dev python-upm python3-upm upm-examples
Note that the Ubuntu PPA only provides the C/C++ and Python packages. Node.js developers will have to install MRAA and UPM using NPM instead.
Node.js bindings only (NPM)
This option allows compiling MRAA/UPM on any system with npm and node-gyp.
The UPM modules have a hard dependency on MRAA, thus you will have to install it first. Also, make sure Node can find MRAA by updating the NODE_PATH variable if necessary. A global installation is preferred:
npm install mraa -g
After this, to install a UPM module using npm simply type:
npm install jsupm_<module-name> -g
In order to initialize the platform, require MRAA before you load a UPM module in your code:
require('mraa');<module-name> -g
var lib = require('jsupm_<module-name> ; < module-name> -g

(* Trademarks)

© 2017 UPM

diff --git a/Documentation/moduleNaming.html b/Documentation/moduleNaming.html new file mode 100644 index 00000000..053986d0 --- /dev/null +++ b/Documentation/moduleNaming.html @@ -0,0 +1 @@ +
Naming your module
UPM attempts to follow a clear naming pattern. Modules should be sensibly named and then placed in ${libdir}/upm and headers in ${includedir}/upm, all modules should be prefixed with libupm-. The upm_module_init will automatically name python UPM modules as pyupm_ and javascript modules as jsupm_. For example for src/grove/ the library built will be libupm-grove.so, the python module pyupm_grove and the js module jsupm_grove.
Choosing a name for a new module
Pick a name and stick with it. Usually, the chip name makes the most sense. If not, try to pick a generic name so people with a similar sensor can inherit your class if they only have minor changes.
• All modules should be prefixed with libupm-.
• Avoid brand names.
• Your lib must belong to the UPM namespace.
Questions?
Ping us via email: mihai.tudor.panu@intel.com or brendan.le.foll@intel.com and we'll suggest some useful names.

(* Trademarks)

© 2017 UPM

diff --git a/Documentation/mraa.html b/Documentation/mraa.html new file mode 100644 index 00000000..f100de1c --- /dev/null +++ b/Documentation/mraa.html @@ -0,0 +1 @@ +
Installing MRAA
Installing on Ubuntu
Here is a PPA for installing on ubuntu: https://launchpad.net/~mraa/+archive/ubuntu/mraa
sudo add-apt-repository ppa:mraa/mraa
sudo apt-get update
sudo apt-get install libmraa1 libmraa-dev mraa-tools python-mraa python3-mraa
Node.js package is available seperately.
Install on Arch Linux
There is an AUR package for mraa here: https://aur.archlinux.org/packages/mraa
Install on openSUSE
REPO="openSUSE_Tumbleweed"
if test "$(arch)" == "aarch64"; then
REPO="openSUSE_Factory_ARM"
fi
sudo zypper ar http://download.opensuse.org/repositories/hardware/$REPO/hardware.repo
sudo zypper in mraa
Installing for Node.js only
You can also install just the node.js mraa module by using npm. You will need a C++ compiler and the node development headers, however it's not required to have SWIG installed.
npm install mraa
Note that installing mraa in this way builds mraa without json-c so you cannot use mraa_init_json_platform(). Also building this way means the mraa.node includes a static version of libmraa rather than relying on a dynamic library in /usr/lib.
Installing on Intel 32bit Yocto based opkg image
See the section below on compiling or use our repository to install on a glibc based yocto poky image that supports opkg. Adding this repository is as simple as and you'll have the latest stable tagged build of mraa installed!
echo "src mraa-upm http://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586" > /etc/opkg/mraa-upm.conf
opkg update
opkg install mraa
If you would like to get the latest & greatest builds from master HEAD you can use our -dev repository
echo "src mraa-upm http://iotdk.intel.com/repos/3.5/intelgalactic-dev/opkg/i586" > /etc/opkg/mraa-upm.conf
opkg update
opkg install mraa

(* Trademarks)

© 2017 UPM

diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..4deb62eb --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Intel® IoT Developer Kit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100755 index 00000000..dd4d1702 --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# UPM Website [![Build Status](https://travis-ci.org/intel-iot-devkit/upm-site.svg?branch=master)](https://travis-ci.org/intel-iot-devkit/upm-site) + +## GitHub Pages URL: https://upm.mraa.io +## Dependencies: +* [NodeJs](https://nodejs.org/en/) +* [Gulp](https://github.com/gulpjs/gulp) +* [Python](https://www.python.org/), specifically Python 2! +* [Ruby](https://www.ruby-lang.org/en/) +* [Sass](http://sass-lang.com/) +* [Bundler](http://bundler.io/) +* A bunch of other stuff installed through bundle and ruby gems + +## Prepare Dev Environment: +* Run `npm install`, in the same directory as the code. This will install all the dependencies automatically +* Run `bundler install` to install Gems dependencies automatically + +## Gulp Tasks: +1. `gulp clean`: to clean local build directories and resources +2. `gulp build`: to generate the build for production using _config.yml, deploys to /_site +3. `gulp build:local`: to generated the build using _config_dev.yml +4. `gulp serve`: runs the app locally, using the _config_dev.yml file + +## Global.yml +* Urls defined for fetching images, source code, and apis +* Whenever there are changes in facets.json/sensordetail.json files, increment the value in ajaxVersion to refresh the cache +* Whenever there are changes in css/js resources, increment the value in resourceVersion to refresh the cache + +## _assets/gulp_config/paths.js +* Set paths.sensorDataSrc to the root of UPM /src + +## Static Content: +* The sensor data is kept under /_assets/content/sensorDetail.json + To generate this file with `jq` and latest `upm` sources use: + ``` + find upm/src/ -iname "*.json" | sort | xargs jq -s -c '.' >sensorDetail.json + ``` +* The facets data is kept under /_assets/content/facets.json +* If images are missing, copy it over from _assets/gulp_config/images to _/site/assets/images + +## Miscellaneous: +* _config_dev.yml has configurable properties for local +* _config.yml has properties for production deployment +* CNAME corresponds to the mapped cname in DNS provider + +## Site Deployment using Travis CI + +Documentation can be found [here](https://docs.travis-ci.com/user/deployment/pages/) diff --git a/addSensor.html b/addSensor.html new file mode 100644 index 00000000..d8c4402b --- /dev/null +++ b/addSensor.html @@ -0,0 +1 @@ +
Share your sensors and code.
Instructions and templates
The IoT community benefits from access to lots of sensors and code. Share yours. Just write it up and turn it in for review. Once we make sure it works well with UPM and is open source and is free, we’ll post it to the library.
Rules and guidelines
Your driver should be written in C/C++ with SWIG interfaces, have proper documentation and include at least one example.
Step-by-step: Creating or porting a module
Porting Arduino libraries to MRAA as UPM libraries is usually easy. The key to successful sharing is to understand how a non-real time OS deals with interrupts and timers. It also depends on the sensor’s design. For a detailed example, see Making a UPM module for MAX31855.
Adding a new module to UPM
1. Review contribution rules (see Contribution rules and Writing sensor documentation)
2. Choose a name for your module (see Module naming )
3. Make a new folder in src/modulename
4. Create a CMakeLists.txt file inside src/modulename
CmakeLists.txt
By default, you'll need a header called modulename.hpp and a C++ file called modulename.cxx. You can have multiple headers and source files. Only public headers need to be added to module_hpp. All source files need to be in module_src.

set (libname "modulename")
set (libdescription "Module Description")
set (module_src ${libname}.cxx)
set (module_hpp ${libname}.hpp)
upm_module_init()
Making your API
If you’re starting from scratch, use the new sensor template. Most UPM APIs have a simple set of functions. A simple object->read() function is usually preferred. Depending on your sensor/actuator, however, this may or may not be easy or not even make sense. In that case, you should look at a sensor on UPM that’s similar to yours and see how its APIs were created.

Create a class for your sensor with a constructor that defines the pins it is on. This constructor will create the mraa_*_context structs that are required to talk to the board's IO. An I2c sensor will create a mraa_i2c_context. Keep it as a private member and require a bus number and slave address in its constructor.
Mapping Arduino API to libmraa
Your constructor is similar to the setup() function in Arduino, you should initialize your IO the way you want it. This means initializing contexts (private members) and setting the correct modes for them.

See the MRAA API documentation for the exact API.
Building your module
To build your module just follow Building UPM. By creating a folder and the CMakelists.txt file you have done all that is required to add your sensor to the UPM build system.
Sending your module to us for inclusion in UPM
The last step is when you're happy with your module and it works send us a pull request! We'd love to include your sensor in our repository.
Feel free to use github, or email us at mihai.tudor.panu@intel.com with a git formatted patch of your sensor. Learn more about creating a pull request.

(* Trademarks)

© 2017 UPM

diff --git a/assets/content/LunrIndex.json b/assets/content/LunrIndex.json new file mode 100644 index 00000000..519976a2 --- /dev/null +++ b/assets/content/LunrIndex.json @@ -0,0 +1 @@ +{"version":"0.9.5","fields":["Categories","Connections","Manufacturer","ProjectType","APILanguageSupport","StarterKit","Brief","PartNumbers","name","Image"],"ref":"id","documentStore":{"docs":{"MMA7660":{"id":"MMA7660","name":"MMA7660","Brief":" API for the Seeed/NXP MMA7660 I2C 3-Axis Digital Accelerometer","PartNumbers":["mma7660","Grove - 3-Axis Digital Accelerometer(±1.5g)"],"Categories":["accelerometer"],"Connections":["i2c","gpio"],"Image":"mma7660.jpg","Manufacturer":["Seeed","NXP"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DS2413":{"id":"DS2413","name":"DS2413","Brief":"1-Wire Dual Channel Addressable Switch","PartNumbers":["ds2413"],"Categories":["switch"],"Connections":["uart"],"Image":"","Manufacturer":["maxim","adafruit"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ADS1015":{"id":"ADS1015","name":"ADS1015","Brief":"12-bit ADC with Integrated MUX, PGA, Comparator, Oscillator, and Reference","PartNumbers":["ads1015"],"Categories":["electric"],"Connections":["i2c"],"Image":"ads1015.jpg","Manufacturer":["ti","adafruit","seeed","sparkfun"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"ADS1115":{"id":"ADS1115","name":"ADS1115","Brief":"16-bit ADC with Integrated MUX, PGA, Comparator, Oscillator, and Reference","PartNumbers":["ads1115"],"Categories":["electric"],"Connections":["i2c"],"Image":"ads1115.jpg","Manufacturer":["ti","adafruit","dfrobot"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"Joystick12":{"id":"Joystick12","name":"Joystick12","Brief":"2-axis Analog Joystick","PartNumbers":["joystick12"],"Categories":["input"],"Connections":["analog"],"Image":"joystick12.jpg","Manufacturer":["generic"],"ProjectType":["prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HX711":{"id":"HX711","name":"HX711","Brief":"24-bit Analog-to-digital Converter","PartNumbers":["hx711"],"Categories":["adc"],"Connections":["gpio"],"Image":"","Manufacturer":["generic"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BMM150":{"id":"BMM150","name":"BMM150","Brief":"3-axis Geomagnetic Sensor","PartNumbers":["bme280"],"Categories":["pressure","humidity","temperature"],"Connections":["gpio","i2c","spi"],"Image":"","Manufacturer":["bosch"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"AD8232":{"id":"AD8232","name":"AD8232","Brief":"AD8232 Heart Rate Monitor Library","PartNumbers":["ad8232"],"Categories":["heartrate"],"Connections":["gpio","aio"],"Image":"ad8232.jpg","Manufacturer":["sparkfun"],"ProjectType":["medical"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++"]},"APA102":{"id":"APA102","name":"APA102","Brief":"Adafruit apa102 iPixel LED","PartNumbers":["apa102","iPixel LED","APA102 5050 RGB LED with integrated driver chip"],"Categories":["led"],"Connections":["SPI"],"Image":"apa102.jpg","Manufacturer":["Shiji_|_Lighting","Adafruit"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"adafruitss":{"id":"adafruitss","name":"adafruitss","Brief":"Adafruit PCA9685-based Servo Shield library","PartNumbers":["adafruitss"],"Categories":["servos"],"Connections":["i2c"],"Image":"adafruitss.jpg","Manufacturer":["adafruit"],"ProjectType":["servos"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MAX44000":{"id":"MAX44000","name":"MAX44000","Brief":"Ambient and Infrared Proximity Sensor","PartNumbers":["max44000"],"Categories":["proximity"],"Connections":["i2c"],"Image":"","Manufacturer":["maxim"],"ProjectType":["robotics","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DFREC":{"id":"DFREC","name":"DFREC","Brief":"Analog Electrical Conductivity (EC) Sensor","PartNumbers":["dfrec"],"Categories":["ec","conductivity"],"Connections":["analog","uart"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GP2Y0A":{"id":"GP2Y0A","name":"GP2Y0A","Brief":"Analog Infrared (IR) Based Distance Sensor","PartNumbers":["gp2y0a"],"Categories":["proximity","light"],"Connections":["analog"],"Image":"gp2y0a.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Light":{"id":"Light","name":"Light","Brief":"Analog Light Sensor","PartNumbers":["light"],"Categories":["light"],"Connections":["analog"],"Image":"light.jpg","Manufacturer":["seeed"],"ProjectType":["environmental","security","prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Microphone":{"id":"Microphone","name":"Microphone","Brief":"Analog Microphone","PartNumbers":["Grove - Sound Sensor"],"Categories":["sound"],"Connections":["analog"],"Image":"mic.jpg","Manufacturer":["seeed","dfrobot","sparkfun","adafruit","generic"],"ProjectType":["prototyping","industrial"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"DFRORP":{"id":"DFRORP","name":"DFRORP","Brief":"Analog Oxidation Reduction Potential (ORP) Sensor","PartNumbers":["dfrorp"],"Categories":["orp","liquid"],"Connections":["analog"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DFRPH":{"id":"DFRPH","name":"DFRPH","Brief":"Analog pH Sensor","PartNumbers":["dfrph"],"Categories":["pH","liquid"],"Connections":["analog"],"Image":"dfrph.jpg","Manufacturer":["dfrobot"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LM35":{"id":"LM35","name":"LM35","Brief":"Analog Temperature Sensor","PartNumbers":["lm35"],"Categories":["temperature"],"Connections":["analog"],"Image":"lm35.jpg","Manufacturer":["dfrobot","nationalsemiconductor"],"ProjectType":["environmental","monitoring","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Temperature":{"id":"Temperature","name":"Temperature","Brief":"Analog Temperature Sensor","PartNumbers":["Grove - Temperature Sensor"],"Categories":["temp"],"Connections":["analog"],"Image":"temp.jpg","Manufacturer":["seeed","dfrobot","sparkfun","adafruit","generic"],"ProjectType":["prototyping","industrial"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"UARTAT":{"id":"UARTAT","name":"UARTAT","Brief":"API for a Generic AT command based UART device","PartNumbers":["uartat"],"Categories":["other"],"Connections":["uart"],"Image":"","Manufacturer":["generic"],"ProjectType":["other"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"dsb09104":{"id":"dsb09104","name":"dsb09104","Brief":"API for Aeon Labs Aeotec Home Energy Meter Gen 1","PartNumbers":["dsb09104"],"Categories":["wifi"],"Connections":["uart"],"Image":"","Manufacturer":["Aeon_|_Labs"],"ProjectType":["commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"dg2":{"id":"dg2","name":"dg2","Brief":"API for Aeon Labs Aeotec Smart Dimmer Gen 2","PartNumbers":["dg2"],"Categories":["wifi"],"Connections":["uart"],"Image":"","Manufacturer":["Aeon_|_Labs"],"ProjectType":["commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"MS5611":{"id":"MS5611","name":"MS5611","Brief":"API for Amsys MS5611 Barometric Pressure Sensor library","PartNumbers":["ms5611","MS5611 GY-63 Atmospheric Pressure Sensor Module IIC/SPI Communication"],"Categories":["pressure","temperature"],"Connections":["i2c"],"Image":"","Manufacturer":["Amsys"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Node.js","C++"]},"P9813":{"id":"P9813","name":"P9813","Brief":"API for controlling Shiji Lighting P9813/Chainable RGB LEDs","PartNumbers":["p9813","APA102 5050 RGB LED w/ Integrated Driver Chip"],"Categories":["LED"],"Connections":["gpio"],"Image":"p9813.jpg","Manufacturer":["Adafruit","Shiji_|_Lighting"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"LP8860":{"id":"LP8860","name":"LP8860","Brief":"API for LP8860 LED Lighting Controller","PartNumbers":["lp8860"],"Categories":["light_|_Controller"],"Connections":["i2c"],"Image":"","Manufacturer":["Texas_|_Instruments"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["C++"]},"Electromagnet":{"id":"Electromagnet","name":"Electromagnet","Brief":"API for the Electromagnet","PartNumbers":["electromagnet"],"Categories":["electric","magnetic"],"Connections":["gpio"],"Image":"electromagnet.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"A110X":{"id":"A110X","name":"A110X","Brief":"API for the A110X Hall Effect Sensors","PartNumbers":["a1101","a1102","a1103","a1104","a1106"],"Categories":["halleffect"],"Connections":["gpio"],"Image":"a110x.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","industrial"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"SSD1351":{"id":"SSD1351","name":"SSD1351","Brief":"API for the Adafruit SSD1351 OLED displays","PartNumbers":["ssd1351","OLED Breakout Board - 16-bit Color 1.5\" w/microSD holder"],"Categories":["display"],"Connections":["spi"],"Image":"ssd1351.jpg","Manufacturer":["Adafruit","Slomon_|_Systech","Univision"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"ST7735":{"id":"ST7735","name":"ST7735","Brief":"API for the Adafruit ST7735 LCD","PartNumbers":["st7735","1.8\" Color TFT LCD display with MicroSD Card Breakout - ST7735R"],"Categories":["display"],"Connections":["spi"],"Image":"st7735.jpg","Manufacturer":["Adafruit","Truly_|_Semiconductors","Sitronix"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Node.js","C++"]},"mma8451":{"id":"mma8451","name":"mma8451","Brief":"API for the Adafruit/Freescale MMA8451 Three-Axis Accelerometer","PartNumbers":["mma8451","mma8x5x","Adafruit Triple-Axis Accelerometer - ±2/4/8g"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"","Manufacturer":["Freescale","Adafruit"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"AdafruitMS1438":{"id":"AdafruitMS1438","name":"AdafruitMS1438","Brief":"API for the AdafruitMS1438 Motor Shield","PartNumbers":["adafruitms1438"],"Categories":["motor"],"Connections":["i2c"],"Image":"adafruitms1438.jpg","Manufacturer":["adafruit"],"ProjectType":["motor"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ADC121C021":{"id":"ADC121C021","name":"ADC121C021","Brief":"API for the ADC121C021 I2C Analog-to-Digital Converter","PartNumbers":["adc121c021"],"Categories":["aio"],"Connections":["i2c"],"Image":"adc121c021.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Adxl345":{"id":"Adxl345","name":"Adxl345","Brief":"API for the ADXL345 3-Axis Digital Accelerometer","PartNumbers":["adxl335"],"Categories":["imu","accelerometers"],"Connections":["i2c"],"Image":"adxl335.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DSB29":{"id":"DSB29","name":"DSB29","Brief":"API for the Aeon Labs Aeotec Door/Window Sensor 2nd Edition","PartNumbers":["dsb29"],"Categories":["wifi"],"Connections":["uart"],"Image":"","Manufacturer":["Aeon_|_Labs"],"ProjectType":["commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"ss6":{"id":"ss6","name":"ss6","Brief":"API for the Aeon Labs Aeotec Smart Switch 6","PartNumbers":["ss6"],"Categories":["wifi"],"Connections":["uart"],"Image":"","Manufacturer":["Aeon_|_Labs"],"ProjectType":["commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"AM2315":{"id":"AM2315","name":"AM2315","Brief":"API for the AM2315 Temperature & Humidity Sensor","PartNumbers":["am2315"],"Categories":["humidity","temperature"],"Connections":["i2c"],"Image":"","Manufacturer":["adafruit"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"T6713":{"id":"T6713","name":"T6713","Brief":"API for the Amphenol Telaire 6713 Series CO2 Module","PartNumbers":["t6713","Miniature CO2 Module Series T6700"],"Categories":["gaseous"],"Connections":["i2c"],"Image":"","Manufacturer":["Amphenol"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"T8100":{"id":"T8100","name":"T8100","Brief":"API for the Amphenol Telaire Ventostat T8100 Ventilation Controller","PartNumbers":["t8100","Telaire Ventostat Series CO2 Monitor"],"Categories":["gaseous","temperature","humidity"],"Connections":["uart"],"Image":"","Manufacturer":["Amphenol"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"TCS37727":{"id":"TCS37727","name":"TCS37727","Brief":"API for the AMS TCS37727 Color Light-To-Digital Converter","PartNumbers":["tcs37727"],"Categories":["color","light"],"Connections":["i2c"],"Image":"","Manufacturer":["AMS"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"ADIS16448":{"id":"ADIS16448","name":"ADIS16448","Brief":"API for the Analog Devices ADIS16448 Accelerometer","PartNumbers":["adis16448"],"Categories":["imu"],"Connections":["spi"],"Image":"","Manufacturer":["generic"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ADXL335":{"id":"ADXL335","name":"ADXL335","Brief":"API for the Analog Devices ADIS16448 Accelerometer","PartNumbers":["adxl335"],"Categories":["imu","accelerometers"],"Connections":["analog"],"Image":"adxl335.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MMA7361":{"id":"MMA7361","name":"MMA7361","Brief":"API for the DFRobot MMA7361 Analog Accelerometer","PartNumbers":["mma7361","Triple Axis Accelerometer MMA7361","DFR0143"],"Categories":["accelerometer"],"Connections":["analog","gpio"],"Image":"","Manufacturer":["DFRobot"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"SHT1X":{"id":"SHT1X","name":"SHT1X","Brief":"API for the DFRobot SHT1X Temperature and Humidity Sensor","PartNumbers":["sht1x","SHT1x Humidity and Temperature Sensor (SKU: DFR0066)"],"Categories":["temperature","humidity"],"Connections":["gpio"],"Image":"","Manufacturer":["DFRobot","Sensirion"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"URM37":{"id":"URM37","name":"URM37","Brief":"API for the DFRobot URM37 Ultrasonic Ranger","PartNumbers":["urm37","URM37 V4.0 Ultrasonic Sensor"],"Categories":["sound"],"Connections":["uart","ainput","gpio"],"Image":"urm37.jpg","Manufacturer":["DFRobot"],"ProjectType":["prototyping","robotics","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++","C"]},"WheelEncoder":{"id":"WheelEncoder","name":"WheelEncoder","Brief":"API for the DFRobot Wheel Encoder","PartNumbers":["wheelencoder","Gravity:TT Motor Encoders Kit"],"Categories":["other"],"Connections":["gpio"],"Image":"wheelencoder.jpg","Manufacturer":["DFRobot"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"ES9257":{"id":"ES9257","name":"ES9257","Brief":"API for the EMAX ES9257 Servo","PartNumbers":["es9257","EMAX ES9257 2.5kg& .05 sec Micro Digital 3D Tail Servo"],"Categories":["servos"],"Connections":["pwm"],"Image":"es9257.jpg","Manufacturer":["EMAX"],"ProjectType":["prototyping","commercial"],"StarterKit":["gsk"],"APILanguageSupport":["Python","Node.js","C++"]},"ES08A":{"id":"ES08A","name":"ES08A","Brief":"API for the EMAX/Seeed ES08A Servo","PartNumbers":["es08a","EMAX 9g ES08A High Sensitive Mini Servo"],"Categories":["servos"],"Connections":["pwm"],"Image":"es08a.jpg","Manufacturer":["EMAX"],"ProjectType":["prototyping","commercial"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"GroveLEDBar":{"id":"GroveLEDBar","name":"GroveLEDBar","Brief":"API for the Grove - LED Bar/My-semi MY9221 12-channel LED driver","PartNumbers":["my9221","Grove - LED Bar","MY9221 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control"],"Categories":["display"],"Connections":["gpio"],"Image":"my9221.jpg","Manufacturer":["Seeed","My-semi"],"ProjectType":["prototyping","commercial"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"GroveButton":{"id":"GroveButton","name":"GroveButton","Brief":"API for the Grove Button","PartNumbers":["Grove Touch Sensor","Grove button"],"Categories":["touch"],"Connections":["gpio"],"Image":"grovebutton.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"GroveCircularLED":{"id":"GroveCircularLED","name":"GroveCircularLED","Brief":"API for the Grove Circular LED module/My-semi MY9221 12-channel LED driver","PartNumbers":["my9221","Grove - Circular LED","MY9221 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control"],"Categories":["display"],"Connections":["gpio"],"Image":"grovecircularled.jpg","Manufacturer":["Seeed","My-semi"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"GroveElectromagnet":{"id":"GroveElectromagnet","name":"GroveElectromagnet","Brief":"API for the Grove Electromagnet","PartNumbers":["groveelectromagnet"],"Categories":["electric","magnetic","deprecated"],"Connections":["gpio"],"Image":"groveelectromagnet.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveLed":{"id":"GroveLed","name":"GroveLed","Brief":"API for the Grove LED","PartNumbers":["Grove LED","Grove – Chainable RGB Led V2.0"],"Categories":["LED"],"Connections":["gpio"],"Image":"groveled.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"GroveLight":{"id":"GroveLight","name":"GroveLight","Brief":"API for the Grove Light Sensor","PartNumbers":["grovelight","Grove - Light Sensor(P)"],"Categories":["light"],"Connections":["analog"],"Image":"grovelight.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"Moisture":{"id":"Moisture","name":"Moisture","Brief":"API for the Grove Moisture Sensor ","PartNumbers":["Grove Moisture Sensor"],"Categories":["liquid"],"Connections":["analog"],"Image":"moisture.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["eak","hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveRelay":{"id":"GroveRelay","name":"GroveRelay","Brief":"API for the Grove Relay","PartNumbers":["groverelay","Grove - Relay"],"Categories":["relay"],"Connections":["gpio"],"Image":"groverelay.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk","eak","hak"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"Relay":{"id":"Relay","name":"Relay","Brief":"API for the Grove Relay","PartNumbers":["relay","Grove - Relay"],"Categories":["relay"],"Connections":["gpio"],"Image":"relay.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":["gsk","eak","hak"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"GroveRotary":{"id":"GroveRotary","name":"GroveRotary","Brief":"API for the Grove Rotary Angle Sensor (Knob)","PartNumbers":["groverotary","Grove - Rotary Angle Sensor"],"Categories":["ainput"],"Connections":["analog"],"Image":"groverotary.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"RotaryEncoder":{"id":"RotaryEncoder","name":"RotaryEncoder","Brief":"API for the Grove Rotary Encoder","PartNumbers":["rotaryencoder","Rotary Encoder","Grove - Encoder"],"Categories":["other"],"Connections":["gpio"],"Image":"rotaryencoder.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":["hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveSlide":{"id":"GroveSlide","name":"GroveSlide","Brief":"API for the Grove Slide Potentiometer","PartNumbers":["groveslide","Grove - Slide Potentiometer"],"Categories":["ainput"],"Connections":["analog"],"Image":"","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"GroveTemp":{"id":"GroveTemp","name":"GroveTemp","Brief":"API for the Grove Temperature Sensor","PartNumbers":["groverelay","Grove - Temperature Sensor"],"Categories":["temperature"],"Connections":["analog"],"Image":"grovetemp.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"UltraSonic":{"id":"UltraSonic","name":"UltraSonic","Brief":"API for the Grove Ultrasonic Ranger","PartNumbers":["ultrasonic","Grove - Ultrasonic Ranger"],"Categories":["sound"],"Connections":["gpio"],"Image":"ultrasonic.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","robotics","commercial"],"StarterKit":"","APILanguageSupport":["Node.js","C++"]},"vdiv":{"id":"vdiv","name":"vdiv","Brief":"API for the Grove Voltage Divider Sensor","PartNumbers":["vdiv","Grove - Voltage Divider","LMV3xx"],"Categories":["electric"],"Connections":["analog"],"Image":"vdiv.jpg","Manufacturer":["Seeed","Texas_|_Instruments"],"ProjectType":["prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"WFS":{"id":"WFS","name":"WFS","Brief":"API for the Grove Water Flow Sensor","PartNumbers":["wfs","G1/2 Water Flow sensor"],"Categories":["liquid"],"Connections":["gpio"],"Image":"wfs.jpg","Manufacturer":["Seeed"],"ProjectType":["mprototyping","commercial"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"waterlevel":{"id":"waterlevel","name":"waterlevel","Brief":"API for the Grove Water Level Switch","PartNumbers":["waterlevel","Water level switch"],"Categories":["liquid"],"Connections":["gpio"],"Image":"waterlevel.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"Water":{"id":"Water","name":"Water","Brief":"API for the Grove Water Sensor","PartNumbers":["water","Grove - Water Sensor"],"Categories":["liquid"],"Connections":["gpio"],"Image":"water.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"TB7300":{"id":"TB7300","name":"TB7300","Brief":"API for the Honeywell TB7300 Communicating Fan Coil Thermostat","PartNumbers":["tb7300","TB7300C5014B"],"Categories":["temperature"],"Connections":["uart"],"Image":"","Manufacturer":["honeywell"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"MS5803":{"id":"MS5803","name":"MS5803","Brief":"API for the Measurement Specialties/Sparkfun MS5803 Pressure and Temperature sensor","PartNumbers":["ms5803","SparkFun Pressure Sensor Breakout - MS5803-14BA"],"Categories":["pressure","temperature"],"Connections":["i2c","spi"],"Image":"","Manufacturer":["Measurement_|_Specialties","SparkFun"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MLX90614":{"id":"MLX90614","name":"MLX90614","Brief":"API for the Melexis MLX90614 Temperature Sensor","PartNumbers":["mlx90614","Digital plug & play infrared thermometer in a TO-can"],"Categories":["temperature"],"Connections":["i2c"],"Image":"mlx90614.jpg","Manufacturer":["Melexis"],"ProjectType":["medical","industrial","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"RN2903":{"id":"RN2903","name":"RN2903","Brief":"API for the Microchip RN2903 LoRa radio","PartNumbers":["rn2903"],"Categories":["wifi"],"Connections":["uart"],"Image":"","Manufacturer":["Microchip"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MICSV89":{"id":"MICSV89","name":"MICSV89","Brief":"API for the MICS-VZ89 Gas Sensor","PartNumbers":["micsv89","MICS-VZ-89TE","MICS-VZ-89TE Indoor Air Quality Sensor"],"Categories":["gaseous"],"Connections":["i2c"],"Image":"micsv89.jpg","Manufacturer":["SGX"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Node.js","C++"]},"MY9221 ":{"id":"MY9221 ","name":"MY9221 ","Brief":"API for the My-semi MY9221 12-channel LED driver","PartNumbers":["my9221","MY9221 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control"],"Categories":["display"],"Connections":["gpio"],"Image":"my9221.jpg","Manufacturer":["My-semi"],"ProjectType":["prototyping","commercial"],"StarterKit":["eak"],"APILanguageSupport":["C++","C"]},"NMEAGPS":{"id":"NMEAGPS","name":"NMEAGPS","Brief":"API for the NMEA GPS Module","PartNumbers":["VK2828u7","ublox","LEA-6H"],"Categories":["gps"],"Connections":["uart","gpio"],"Image":"","Manufacturer":["DFRobot","Seeed"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"NRF24L01":{"id":"NRF24L01","name":"NRF24L01","Brief":"API for the Nordic Semiconductor NRF24L01 Transceiver Module","PartNumbers":["nrf24l01","SparkFun Transceiver Breakout - nRF24L01+"],"Categories":["wifi"],"Connections":["spi"],"Image":"nrf24l01.jpg","Manufacturer":["Nordic_|_Semiconductor","SparkFun"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"nrf8001":{"id":"nrf8001","name":"nrf8001","Brief":"API for the Nordic Semiconductor NRF8001 Bluetooth Low Energy Module","PartNumbers":["nrf8001","Bluefruit LE - Bluetooth Low Energy (BLE 4.0) - nRF8001 Breakout - v1.0"],"Categories":["wifi"],"Connections":["spi","gpio","analog"],"Image":"nrf8001.jpg","Manufacturer":["Nordic_|_Semiconductor","Adafruit"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["C++"]},"NLGPIO16":{"id":"NLGPIO16","name":"NLGPIO16","Brief":"API for the Numato NLGPIO16 16 channel USB GPIO Module","PartNumbers":["nlgpio16","Numato 16 Channel USB GPIO Module With Analog Inputs"],"Categories":["other"],"Connections":["uart"],"Image":"","Manufacturer":["Numato_|_Lab"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"MMA7455":{"id":"MMA7455","name":"MMA7455","Brief":"API for the NXP MMA7455 Accelerometer","PartNumbers":["mma7455","MMA7455 3-Axis Accelerometer Module"],"Categories":["accelerometer"],"Connections":["i2c","spi"],"Image":"mma7455.jpg","Manufacturer":["NXP","Freescale"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"mma8453q":{"id":"mma8453q","name":"mma8453q","Brief":"API for the NXP MMA8453Q Three-Axis Accelerometer","PartNumbers":["mma8453q","mma8x5x","MMA8453Q: ±2g/±4g/±8g, Low g, 10-bit Digital Accelerometer"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"","Manufacturer":["NXP"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"mma8652fc":{"id":"mma8652fc","name":"mma8652fc","Brief":"API for the NXP MMA8652FC Three-Axis Accelerometer","PartNumbers":["mma8652fc","mma8x5x","MMA8652FC: ±2g/±4g/±8g, Low g, 12-Bit Digital Accelerometer"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"","Manufacturer":["NXP"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"mma8653fc":{"id":"mma8653fc","name":"mma8653fc","Brief":"API for the NXP MMA8653FC Three-Axis Accelerometer","PartNumbers":["mma8653fc","mma8x5x","MMA8653FC: ±2g/±4g/±8g, Low g, 12-Bit Digital Accelerometer"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"","Manufacturer":["NXP"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"PCA9685":{"id":"PCA9685","name":"PCA9685","Brief":"API for the NXP/Adafruit PCA9685 16-channel, 12-bit PWM Controller","PartNumbers":["PCA9685","Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685"],"Categories":["led","motor"],"Connections":["i2c"],"Image":"pca9685.jpg","Manufacturer":["NXP_|_Semiconductors","Adafruit"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["Node.js","C++"]},"RHUSB":{"id":"RHUSB","name":"RHUSB","Brief":"API for the Omega RH-USB Temperature and Humidity Sensor","PartNumbers":["rhusb","Humidity & Temperature Sensor with USB Output"],"Categories":["humidity","temperature"],"Connections":["uart"],"Image":"","Manufacturer":["Omega"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"OZW":{"id":"OZW","name":"OZW","Brief":"API for the OpenZWave library","PartNumbers":["ozw"],"Categories":["wifi"],"Connections":["uart"],"Image":"","Manufacturer":["Aeon_|_Labs"],"ProjectType":["commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"OTP538U":{"id":"OTP538U","name":"OTP538U","Brief":"API for the Oriental System Technology OTP538U IR Temperature Sensor","PartNumbers":["otp538u","Grove - Infrared Temperature Sensor"],"Categories":["light","temperature"],"Connections":["analog"],"Image":"otp538u.jpg","Manufacturer":["Oriental_|_System_|_Technology","Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":["hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"PN532":{"id":"PN532","name":"PN532","Brief":"API for the PN532 based Adafruit NFC/RFID reader/writer","PartNumbers":["pn532","PN532 NFC/RFID controller breakout board - v1.6"],"Categories":["rfid"],"Connections":["i2c"],"Image":"pn532.jpg","Manufacturer":["Philips","Adafruit"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"RFR359F":{"id":"RFR359F","name":"RFR359F","Brief":"API for the RFR359F-based Grove Distance Interrupter","PartNumbers":["rfr359f","Grove - IR Distance Interrupter"],"Categories":["light"],"Connections":["gpio"],"Image":"rfr359f.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","industrial"],"StarterKit":["robot","tsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"RPR220":{"id":"RPR220","name":"RPR220","Brief":"API for the ROHM Semiconductor RPR220-based Grove IR Reflective Sensor","PartNumbers":["rpr220","Grove - Infrared Reflective Sensor"],"Categories":["light"],"Connections":["gpio"],"Image":"rpr220.jpg","Manufacturer":["ROHM_|_Semiconductor","Seeed"],"ProjectType":["mprototyping","commercial"],"StarterKit":["tsk","hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ303A":{"id":"MQ303A","name":"MQ303A","Brief":"API for the Seeed MQ303A Alcohol Sensor","PartNumbers":["mq303a","Grove - Alcohol Sensor"],"Categories":["gaseous"],"Connections":["analog"],"Image":"mq303a.jpg","Manufacturer":["Seeed"],"ProjectType":["medical","prototyping"],"StarterKit":["tsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Rotary":{"id":"Rotary","name":"Rotary","Brief":"API for the Seeed Rotary Angle Sensor","PartNumbers":["rotary","Grove - Rotary Angle Sensor"],"Categories":["ainput"],"Connections":["analog"],"Image":"rotary.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++"]},"SCAM":{"id":"SCAM","name":"SCAM","Brief":"API for the Seeed Serial Camera","PartNumbers":["scam","Grove - Serial Camera Kit"],"Categories":["other"],"Connections":["uard"],"Image":"scam.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"Slide":{"id":"Slide","name":"Slide","Brief":"API for the Seeed Slide Potentiometer","PartNumbers":["slide","Grove - Slide Potentiometer"],"Categories":["ainput"],"Connections":["analog"],"Image":"slide.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Speaker":{"id":"Speaker","name":"Speaker","Brief":"API for the Seeed Speaker","PartNumbers":["speaker","Grove - Speaker"],"Categories":["sound"],"Connections":["gpio","PWM"],"Image":"speaker.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":["hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"TA12200":{"id":"TA12200","name":"TA12200","Brief":"API for the Seeed TA12-200 Current Transformer","PartNumbers":["ta12200","Grove - Electricity Sensor"],"Categories":["electric"],"Connections":["analog"],"Image":"ta12200.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"TCS3414CS":{"id":"TCS3414CS","name":"TCS3414CS","Brief":"API for the Seeed TCS3414CS Color Sensor","PartNumbers":["tcs3414cs"],"Categories":["light"],"Connections":["i2c"],"Image":"tcs3414cs.jpg","Manufacturer":["Seeed","TAOS","ams"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"TH02":{"id":"TH02","name":"TH02","Brief":"API for the Seeed TH02 Temperature & Humidity Sensor","PartNumbers":["th02","Grove - Temperature&Humidity Sensor (High-Accuracy & Mini)"],"Categories":["humidity","temperature"],"Connections":["i2c"],"Image":"th02.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"TM1637":{"id":"TM1637","name":"TM1637","Brief":"API for the Seeed TM1637 based 7-Segment Display","PartNumbers":["tm1637","Grove - 4-Digit Display"],"Categories":["display"],"Connections":["gpio"],"Image":"tm1637.jpeg","Manufacturer":["Seeed","Titan_|_Micro_|_Electronics"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"TTP223":{"id":"TTP223","name":"TTP223","Brief":"API for the Seeed TTP223 Touch Sensor","PartNumbers":["ttp223","Grove - Touch Sensor"],"Categories":["touch"],"Connections":["gpio"],"Image":"ttp223.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"PPD42NS":{"id":"PPD42NS","name":"PPD42NS","Brief":"API for the Seeed/Shinyei PPD42NS Dust Sensor","PartNumbers":["ppd42ns","Grove - Dust Sensor"],"Categories":["other"],"Connections":["gpio"],"Image":"ppd42ns.jpg","Manufacturer":["Shinyei","Seeed"],"ProjectType":["prototyping"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"SI1132":{"id":"SI1132","name":"SI1132","Brief":"API for the Silicon Labs Si1132 UV and Visible Light Sensor","PartNumbers":["si1132"],"Categories":["light"],"Connections":["i2c"],"Image":"","Manufacturer":["Silicon_|_Labs"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"SI114x":{"id":"SI114x","name":"SI114x","Brief":"API for the Silicon Labs SI1145 UV Light Sensor","PartNumbers":["si114x","SI1145 Digital UV Index / IR / Visible Light Sensor"],"Categories":["light"],"Connections":["i2c"],"Image":"si114x.jpg","Manufacturer":["Adafruit","Silicon_|_Labs"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"SI7005":{"id":"SI7005","name":"SI7005","Brief":"API for the Silicon Labs SI7005 digital I2C humidity and temperature sensor","PartNumbers":["si7005"],"Categories":["humidity","temperature"],"Connections":["i2c"],"Image":"","Manufacturer":["Silicon_|_Labs"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"SmartDrive":{"id":"SmartDrive","name":"SmartDrive","Brief":"API for the SmartDrive advanced motor controller from OpenElectronics","PartNumbers":["smartdrive","SmartDrive High Current Motor Controller"],"Categories":["motor"],"Connections":["i2c"],"Image":"","Manufacturer":["OpenElectronics"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["C++"]},"SM130":{"id":"SM130","name":"SM130","Brief":"API for the SonMicro SM130 RFID Reader Module","PartNumbers":["sm130"],"Categories":["rfid"],"Connections":["uart","gpio"],"Image":"sm130.jpg","Manufacturer":["SonMicro","RFID_|_Module_|_-_|_SM130_|_MIFARE_|_(13.56_|_MHz)"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"RGBRingCoder":{"id":"RGBRingCoder","name":"RGBRingCoder","Brief":"API for the SparkFun RGB RingCoder","PartNumbers":["rgbringcoder","SparkFun LED RingCoder Breakout - RGB"],"Categories":["led"],"Connections":["pwm","gpio"],"Image":"rgbringcoder.jpg","Manufacturer":["SparkFun"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"mma8452q":{"id":"mma8452q","name":"mma8452q","Brief":"API for the Sparkfun/Freescale MMA8451Q Three-Axis Accelerometer","PartNumbers":["mma8452q","mma8x5x","SparkFun Triple Axis Accelerometer Breakout - MMA8452Q"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"","Manufacturer":["Freescale","Sparkfun"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"RF22":{"id":"RF22","name":"RF22","Brief":"API for the SparkFun/HopeRF RF22 Transceiver Module","PartNumbers":["rf22","RFM22B-S2 SMD Wireless Transceiver - 915MHz"],"Categories":["wifi"],"Connections":["spi"],"Image":"rf22.jpg","Manufacturer":["SparkFun","HopeRF"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"StepMotor":{"id":"StepMotor","name":"StepMotor","Brief":"API for the Stepper Motor","PartNumbers":["stepmotor","EasyDriver - Stepper Motor Driver"],"Categories":["motor"],"Connections":["gpio"],"Image":"stepmotor.jpg","Manufacturer":["Allegro","SparkFun","generic"],"ProjectType":["prototyping","robotics","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"T3311":{"id":"T3311","name":"T3311","Brief":"API for the T3311 MODBUS Temperature and Humidity Sensor","PartNumbers":["t3311","T3311 Temperature and humidity probe with RS232 output, internal sensors"],"Categories":["humidity","temperature"],"Connections":["uart"],"Image":"","Manufacturer":["Comet"],"ProjectType":["industrial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"TMP006":{"id":"TMP006","name":"TMP006","Brief":"API for the Texas Instruments TMP006 IR-Thermopile Sensor","PartNumbers":["tmp006","TMP006 Infrared Thermopile Contactless Temperature Sensor in WCSP Package"],"Categories":["temperature"],"Connections":["i2c"],"Image":"","Manufacturer":["Texas_|_Instruments"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Python","C++"]},"TCA9548A":{"id":"TCA9548A","name":"TCA9548A","Brief":"API for the TI TCA9548A Multiplexer Breakout","PartNumbers":["TCA9548A","TCA9548A I2C Multiplexer"],"Categories":["multiplexer"],"Connections":["i2c"],"Image":"tca9548a.jpg","Manufacturer":["Adafruit","Texas_|_Instruments"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Node.js","C++"]},"TSL2561":{"id":"TSL2561","name":"TSL2561","Brief":"API for the TSL2561 Digital Light Sensor","PartNumbers":["tsl2561","Grove - Digital Light Sensor"],"Categories":["light"],"Connections":["i2c"],"Image":"tsl2561.jpg","Manufacturer":["Seeed","TAOS"],"ProjectType":["prototyping","commercial"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"TEAMS":{"id":"TEAMS","name":"TEAMS","Brief":"API for the Veris TEAMS Temperature Transmitter","PartNumbers":["teams"],"Categories":["temperature"],"Connections":["ainput"],"Image":"","Manufacturer":["Veris"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"TEX00":{"id":"TEX00","name":"TEX00","Brief":"API for the Veris TEX00 Temperature Sensor","PartNumbers":["tex00","TED00"],"Categories":["temperature"],"Connections":["ainput"],"Image":"","Manufacturer":["Veris"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"VCAP":{"id":"VCAP","name":"VCAP","Brief":"API for the Video Capture driver","PartNumbers":["vcap"],"Categories":["video"],"Connections":["other"],"Image":"","Manufacturer":["other"],"ProjectType":["medical","industrial","commercial","prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"VEML6070":{"id":"VEML6070","name":"VEML6070","Brief":"API for the Vishay VEML6070 UV Sensor","PartNumbers":["veml6070"],"Categories":["light"],"Connections":["i2c"],"Image":"","Manufacturer":["Vishay","Adafruit"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"NUNCHUCK":{"id":"NUNCHUCK","name":"NUNCHUCK","Brief":"API for the Wii* Nunchuk controller","PartNumbers":["nunchuck","Wii nunchuck","Grove - Nunchuck"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"nunchuck.jpg","Manufacturer":["generic"],"ProjectType":["prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"WT5001":{"id":"WT5001","name":"WT5001","Brief":"API for the WT5001 Serial MP3 Module","PartNumbers":["wt5001","Grove - Serial MP3 Player"],"Categories":["sound"],"Connections":["uart"],"Image":"wt5001.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"XBee":{"id":"XBee","name":"XBee","Brief":"API for the XBee modules","PartNumbers":["xbee","XBee 1mW Trace Antenna - Series 1 (802.15.4)"],"Categories":["wifi"],"Connections":["uart"],"Image":"xbee.jpg","Manufacturer":["SparkFun"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"YG1006":{"id":"YG1006","name":"YG1006","Brief":"API for the YG1006 Flame Sensor","PartNumbers":["yg1006","Grove - Flame Sensor"],"Categories":["light"],"Connections":["gpio"],"Image":"yg1006.jpg","Manufacturer":["Seeed","Texas_|_Instruments"],"ProjectType":["prototyping","industrial","robotics"],"StarterKit":["hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ZFM20":{"id":"ZFM20","name":"ZFM20","Brief":"API for the ZFM-20 Fingerprint Sensor Module","PartNumbers":["zfm20","Grove - Fingerprint Sensor"],"Categories":["touch"],"Connections":["uart"],"Image":"zfm20.jpg","Manufacturer":["Seeed","ZhianTec"],"ProjectType":["medical","prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"SX6119":{"id":"SX6119","name":"SX6119","Brief":"API support for the Seeed SX6119-based Grove FM Receiver","PartNumbers":["sx6119","Grove - FM Receiver"],"Categories":["sound"],"Connections":["gpio"],"Image":"sx6119.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"AT42QT1070":{"id":"AT42QT1070","name":"AT42QT1070","Brief":"Atmel AT42QT1070 touch sensor","PartNumbers":["at42qt1070","Grove-Q Touch Sensor"],"Categories":["touch"],"Connections":["i2c"],"Image":"at42qt1070.jpg","Manufacturer":["Atmel","Seeed"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"HM11":{"id":"HM11","name":"HM11","Brief":"Bluetooth Low Energy Module","PartNumbers":["hm11"],"Categories":["bluetooth"],"Connections":["uart"],"Image":"hm11.jpg","Manufacturer":["seeed"],"ProjectType":["wireless","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BMPX8X":{"id":"BMPX8X","name":"BMPX8X","Brief":"BMP Atmospheric Pressure Sensor","PartNumbers":["bmpx8x"],"Categories":["pressure"],"Connections":["i2c"],"Image":"","Manufacturer":["seeed","adafruit","sparkfun"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BMX055":{"id":"BMX055","name":"BMX055","Brief":"BMX055 9-axis Sensor Module","PartNumbers":["bmx055"],"Categories":["imu","accelerometer","gyroscope","magnetometer"],"Connections":["gpio","i2c","spi"],"Image":"","Manufacturer":["bosch"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BMG160":{"id":"BMG160","name":"BMG160","Brief":"Bosch 3-Axis gyroscope","PartNumbers":["bmg160"],"Categories":["gyroscope"],"Connections":["i2c","spi","gpio"],"Image":"","Manufacturer":["bosch"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BMI160":{"id":"BMI160","name":"BMI160","Brief":"Bosch accelerometer and gyroscope","PartNumbers":["BMI160"],"Categories":["accelerometer","gyroscope","compass"],"Connections":["i2c"],"Image":"","Manufacturer":["bosch"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BMA220":{"id":"BMA220","name":"BMA220","Brief":"Bosch BMA220 accelerometer","PartNumbers":["BMA220","DFRobot SEN0168"],"Categories":["accelerometer"],"Connections":["i2c","gpio"],"Image":"bma220.jpg","Manufacturer":["bosch"],"ProjectType":["industrial","commercial","prototyping"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"BMA250E":{"id":"BMA250E","name":"BMA250E","Brief":"Bosch BMA250E accelerometer","PartNumbers":["bma250e"],"Categories":["accelerometer"],"Connections":["i2c","spi","gpio"],"Image":"","Manufacturer":["bosch"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Button":{"id":"Button","name":"Button","Brief":"Button","PartNumbers":["Grove - Button"],"Categories":["button"],"Connections":["gpio"],"Image":"button.jpg","Manufacturer":["seeed","dfrobot","sparkfun","adafruit","generic"],"ProjectType":["prototyping","industrial"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Buzzer":{"id":"Buzzer","name":"Buzzer","Brief":"Buzzer","PartNumbers":["Grove - Buzzer"],"Categories":["sound"],"Connections":["pwm"],"Image":"buzzer.jpg","Manufacturer":["seeed","dfrobot","sparkfun","adafruit","generic"],"ProjectType":["prototyping","industrial"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Pulsensor":{"id":"Pulsensor","name":"Pulsensor","Brief":"C++ API for the Adafruit 3-Wire Pulse Sensor","PartNumbers":["pulsensor","Pulse Sensor Amped"],"Categories":["other"],"Connections":["analog"],"Image":"pulsensor.jpg","Manufacturer":["Adafruit"],"ProjectType":["medical","prototyping"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"CJQ4435":{"id":"CJQ4435","name":"CJQ4435","Brief":"CJQ4435 MOSFET","PartNumbers":["cjq4435"],"Categories":["electric"],"Connections":["gpio","pwm"],"Image":"cjq4435.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ADXRS610":{"id":"ADXRS610","name":"ADXRS610","Brief":"DFRobot ADXRS610 Gyro Breakout Board","PartNumbers":["adxrs610"],"Categories":["imu","gyroscope"],"Connections":["analog"],"Image":"adxrs610.jpg","Manufacturer":["dfrobot"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BH1750":{"id":"BH1750","name":"BH1750","Brief":"DFRobot BH1750 light intensity sensor","PartNumbers":["bh1750","DFRobot - Light Sensor - BH1750"],"Categories":["light"],"Connections":["i2c"],"Image":"","Manufacturer":["DFRobot","Rohm"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MG811":{"id":"MG811","name":"MG811","Brief":"DFRobot CO2 Sensor","PartNumbers":["mg811","Gravity: Analog CO2 Gas Sensor For Arduino"],"Categories":["gaseous"],"Connections":["analog"],"Image":"mg811.jpg","Manufacturer":["dfrobot"],"ProjectType":["prototype","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"HKA5":{"id":"HKA5","name":"HKA5","Brief":"DFRobot Laser Particulate Matter (PM) Sensor","PartNumbers":["hka5"],"Categories":["gaseous"],"Connections":["gpio","uart"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LIS2DS12":{"id":"LIS2DS12","name":"LIS2DS12","Brief":"Digital 3-axis Accelerometer","PartNumbers":["lis2ds12"],"Categories":["accelerometer"],"Connections":["i2c","spi","gpio"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"lis3dh":{"id":"lis3dh","name":"lis3dh","Brief":"Digital 3-axis Accelerometer","PartNumbers":["lis3dh"],"Categories":["accelerometer"],"Connections":["i2c","spi","gpio"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LSM6DS3H":{"id":"LSM6DS3H","name":"LSM6DS3H","Brief":"Digital 3-axis Accelerometer and Gyroscope","PartNumbers":["lsm6ds3h"],"Categories":["accelerometer","gyroscope"],"Connections":["i2c","spi","gpio"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LSM6DSL":{"id":"LSM6DSL","name":"LSM6DSL","Brief":"Digital 3-axis Accelerometer and Gyroscope","PartNumbers":["lsm6dsl"],"Categories":["accelerometer","gyroscope"],"Connections":["i2c","spi","gpio"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BME280":{"id":"BME280","name":"BME280","Brief":"Digital Humidity, Pressure, and Temperature Sensor","PartNumbers":["bme280","Grove - Barometer Sensor(BME280)"],"Categories":["pressure","humidity","temperature"],"Connections":["gpio","i2c","spi"],"Image":"","Manufacturer":["adafruit","seeed","bosch"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"CurieImu":{"id":"CurieImu","name":"CurieImu","Brief":"Digital Humidity, Pressure, and Temperature Sensor","PartNumbers":["curieimu"],"Categories":["IMU","accelerometer","compass"],"Connections":["firmata"],"Image":"","Manufacturer":["bosch"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MAX44009":{"id":"MAX44009","name":"MAX44009","Brief":"Digital Humidity, Pressure, and Temperature Sensor","PartNumbers":["max44009"],"Categories":["light"],"Connections":["i2c"],"Image":"","Manufacturer":["Maxim_|_integrated"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["C++"]},"BMP280":{"id":"BMP280","name":"BMP280","Brief":"Digital Pressure Sensor","PartNumbers":["bmp280","Grove - Barometer Sensor (BMP280)"],"Categories":["pressure","humidity","temperature"],"Connections":["gpio","i2c","spi"],"Image":"","Manufacturer":["adafruit","seeed","bosch"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HTU21D":{"id":"HTU21D","name":"HTU21D","Brief":"Digital Relative Humidity Sensor with Temperature","PartNumbers":["htu21d"],"Categories":["temperature","humidity"],"Connections":["i2c"],"Image":"","Manufacturer":["seeed","adafruit","sparkfun"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LPD8806":{"id":"LPD8806","name":"LPD8806","Brief":"Digital RGB LED Strip Controller","PartNumbers":["lpd8806"],"Categories":["display"],"Connections":["spi"],"Image":"lpd8806.jpg","Manufacturer":["adafruit"],"ProjectType":["lighting","rgb","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DS1307":{"id":"DS1307","name":"DS1307","Brief":"DS1307 Real Time Clock (RTC) Module","PartNumbers":["ds1307"],"Categories":["RTC","timekeeping"],"Connections":["i2c"],"Image":"ds1307.jpg","Manufacturer":["seeed","maxim"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DS1808LC":{"id":"DS1808LC","name":"DS1808LC","Brief":"DS1808LC Lighting Controller","PartNumbers":["ds1808lc"],"Categories":["lighting"],"Connections":["i2c"],"Image":"","Manufacturer":["maxim"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"DS18B20":{"id":"DS18B20","name":"DS18B20","Brief":"DS18B20 1-Wire Temperature Sensor","PartNumbers":["ds18b20"],"Categories":["ec","conductivity"],"Connections":["uart"],"Image":"","Manufacturer":["dallas"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"L298":{"id":"L298","name":"L298","Brief":"Dual H-bridge Motor Driver","PartNumbers":["l298"],"Categories":["motors"],"Connections":["gpio","pwm"],"Image":"l298.jpg","Manufacturer":["seeed","sparkfun"],"ProjectType":["robotics","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HT9170":{"id":"HT9170","name":"HT9170","Brief":"Dual Tone Multi Frequency (DTMF) Decoder","PartNumbers":["ht9170"],"Categories":["telephony"],"Connections":["gpio"],"Image":"ht9170.jpg","Manufacturer":["seeed"],"ProjectType":["telephone","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"M24LR64E":{"id":"M24LR64E","name":"M24LR64E","Brief":"Dynamic NFC/RFID Tag Module","PartNumbers":["m24lr64e"],"Categories":["rfid","wireless"],"Connections":["i2c","nfc"],"Image":"m24lr64e.jpg","Manufacturer":["seeed"],"ProjectType":["access_|_control","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"EHR":{"id":"EHR","name":"EHR","Brief":"Ear-clip Heart Rate Sensor","PartNumbers":["ehr"],"Categories":["heartrate"],"Connections":["gpio"],"Image":"ehr.jpg","Manufacturer":["seeed"],"ProjectType":["medical","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveEHR":{"id":"GroveEHR","name":"GroveEHR","Brief":"Ear-clip Heart Rate Sensor","PartNumbers":["groveehr"],"Categories":["heartrate","deprecated"],"Connections":["gpio"],"Image":"groveehr.jpg","Manufacturer":["seeed"],"ProjectType":["medical","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ECEZO":{"id":"ECEZO","name":"ECEZO","Brief":"Electrical Conductivity (EC) Circuit","PartNumbers":["ecezo"],"Categories":["ec","conductivity","liquid"],"Connections":["i2c","uart"],"Image":"","Manufacturer":["atlas","sparkfun"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ElDriver":{"id":"ElDriver","name":"ElDriver","Brief":"Electroluminescent Wire (EL) Driver","PartNumbers":["eldriver"],"Categories":["lighting"],"Connections":["gpio"],"Image":"eldriver.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","commercial","wearables"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"EMG":{"id":"EMG","name":"EMG","Brief":"Electromyography (EMG) Sensor","PartNumbers":["emg"],"Categories":["electromyography","medical"],"Connections":["analog"],"Image":"emg.jpg","Manufacturer":["seeed"],"ProjectType":["wearables","computer_|_interfacing","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveGSR":{"id":"GroveGSR","name":"GroveGSR","Brief":"Galvanic Skin Response (GSR) Sensor","PartNumbers":["grovegsr"],"Categories":["skinresponse"],"Connections":["analog"],"Image":"","Manufacturer":["seeed"],"ProjectType":["medical","interface","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GSR":{"id":"GSR","name":"GSR","Brief":"Galvanic Skin Response (GSR) Sensor","PartNumbers":["gsr"],"Categories":["skinresponse"],"Connections":["analog"],"Image":"gsr.jpg","Manufacturer":["seeed"],"ProjectType":["medical","interface","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GPRS":{"id":"GPRS","name":"GPRS","Brief":"General Packet Radio Service (GPRS) Module","PartNumbers":["gprs"],"Categories":["wireless"],"Connections":["uart"],"Image":"gprs.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","wireless"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Grove":{"id":"Grove","name":"Grove","Brief":"Generic library for basic Grove sensors","PartNumbers":["grove","libupm-grove"],"Categories":["LED","light","relay","temperature","touch"],"Connections":["i2c","gpio","pwm","ainput"],"Image":"","Manufacturer":["Seeed"],"ProjectType":["prototyping","commercial"],"StarterKit":["gsk","eak","hak"],"APILanguageSupport":["C++"]},"Hmc5883l":{"id":"Hmc5883l","name":"Hmc5883l","Brief":"Grove 3-Axis Digital Compass","PartNumbers":["hmc5883l"],"Categories":["compass","magnetometer"],"Connections":["i2c"],"Image":"","Manufacturer":["seeed","honeywell"],"ProjectType":["IMU","prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Itg3200":{"id":"Itg3200","name":"Itg3200","Brief":"Grove 3-Axis Digital Gyroscope","PartNumbers":["itg3200"],"Categories":["gyroscope"],"Connections":["i2c"],"Image":"","Manufacturer":["seeed"],"ProjectType":["IMU","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GUVAS12D":{"id":"GUVAS12D","name":"GUVAS12D","Brief":"Grove Analog UV Sensor","PartNumbers":["guvas12d"],"Categories":["ultraviolet"],"Connections":["gpio"],"Image":"guvas12d.jpg","Manufacturer":["seeed"],"ProjectType":["environmental","prototyping"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Collision":{"id":"Collision","name":"Collision","Brief":"Grove Collision Sensor","PartNumbers":["collision"],"Categories":["collision","accelerometer"],"Connections":["gpio"],"Image":"collision.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveCollision":{"id":"GroveCollision","name":"GroveCollision","Brief":"Grove Collision Sensor","PartNumbers":["grovecollision"],"Categories":["collision","deprecated"],"Connections":["gpio"],"Image":"grovecollision.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"INA132":{"id":"INA132","name":"INA132","Brief":"Grove Differential Amplifier","PartNumbers":["ina132"],"Categories":["electric"],"Connections":["analog"],"Image":"ina132.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveElDriver":{"id":"GroveElDriver","name":"GroveElDriver","Brief":"Grove Electroluminescent Wire (EL) Driver","PartNumbers":["groveeldriver"],"Categories":["lighting","deprecated"],"Connections":["gpio"],"Image":"groveeldriver.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","commercial","wearables"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveEMG":{"id":"GroveEMG","name":"GroveEMG","Brief":"Grove Electromyography (EMG) Sensor","PartNumbers":["groveemg"],"Categories":["electromyography","medical","deprecated"],"Connections":["analog"],"Image":"","Manufacturer":["seeed"],"ProjectType":["wearables","computer_|_interfacing","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveGPRS":{"id":"GroveGPRS","name":"GroveGPRS","Brief":"Grove General Packet Radio Service (GPRS) Module","PartNumbers":["grovegprs"],"Categories":["wireless"],"Connections":["uart"],"Image":"grovegprs.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","wireless"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MD":{"id":"MD","name":"MD","Brief":"Grove I2C Motor Driver","PartNumbers":["Grove - I2C Motor Driver"],"Categories":["motor"],"Connections":["i2c"],"Image":"md.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveMoisture":{"id":"GroveMoisture","name":"GroveMoisture","Brief":"Grove Moisture Sensor","PartNumbers":["grovemoisture"],"Categories":["moisture"],"Connections":["analog"],"Image":"grovemoisture.jpg","Manufacturer":["seeed"],"ProjectType":["liquid","prototyping"],"StarterKit":["eak","hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveO2":{"id":"GroveO2","name":"GroveO2","Brief":"Grove Oxygen (O2) Concentration Sensor","PartNumbers":["groveo2"],"Categories":["gas","oxygen","deprecated"],"Connections":["analog"],"Image":"groveo2.jpg","Manufacturer":["seeed"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveSpeaker":{"id":"GroveSpeaker","name":"GroveSpeaker","Brief":"Grove Speaker Module","PartNumbers":["grovespeaker"],"Categories":["sound","deprecated"],"Connections":["gpio"],"Image":"grovespeaker.jpg","Manufacturer":["seeed"],"ProjectType":["sound","prototyping"],"StarterKit":["hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ISD1820":{"id":"ISD1820","name":"ISD1820","Brief":"Grove Voice Recording and Playback Module","PartNumbers":["isd1820"],"Categories":["audio"],"Connections":["gpio"],"Image":"isd1820.jpg","Manufacturer":["seeed"],"ProjectType":["audio","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveVDiv":{"id":"GroveVDiv","name":"GroveVDiv","Brief":"Grove Voltage Divider Sensor","PartNumbers":["grovevdiv"],"Categories":["electric","deprecated"],"Connections":["gpio"],"Image":"grovevdiv.jpg","Manufacturer":["seeed"],"ProjectType":["robotics","prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveWater":{"id":"GroveWater","name":"GroveWater","Brief":"Grove Water Sensor","PartNumbers":["grovewater"],"Categories":["liquid","deprecated"],"Connections":["gpio"],"Image":"","Manufacturer":["seeed"],"ProjectType":["agriculture","environmental","prototyping"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HCSR04":{"id":"HCSR04","name":"HCSR04","Brief":"HC-SR04 Ultrasonic Distance Measuring Sensor","PartNumbers":["hcsr04"],"Categories":["ultrasonic","distance"],"Connections":["gpio"],"Image":"","Manufacturer":["sparkfun"],"ProjectType":["robotics","safety","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HDC1000":{"id":"HDC1000","name":"HDC1000","Brief":"HDC1000 Temperature and Humidity Sensor","PartNumbers":["hdc1000"],"Categories":["temperature","humidity"],"Connections":["i2c"],"Image":"","Manufacturer":["ti"],"ProjectType":["environmental","","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ABP":{"id":"ABP","name":"ABP","Brief":"Honeywell ABP Pressure and Temperature Sensors","PartNumbers":["abp"],"Categories":["pressure","temperature"],"Connections":["i2c"],"Image":"","Manufacturer":["honeywell"],"ProjectType":["medical","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++","C"]},"HP20X":{"id":"HP20X","name":"HP20X","Brief":"HP20X Barometer (High-Accuracy)","PartNumbers":["hp20x"],"Categories":["pressure"],"Connections":["i2c"],"Image":"hp20x.jpg","Manufacturer":["seeed"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"H3LIS331DL":{"id":"H3LIS331DL","name":"H3LIS331DL","Brief":"I2C 3-axis Digital Accelerometer (400g)","PartNumbers":["h3lis331dl"],"Categories":["accelerometer"],"Connections":["i2c"],"Image":"h3lis331dl.jpg","Manufacturer":["seeed","stmicro"],"ProjectType":["IMU","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"IMS":{"id":"IMS","name":"IMS","Brief":"I2C Moisture Sensor","PartNumbers":["ims"],"Categories":["moisture"],"Connections":["i2c"],"Image":"","Manufacturer":["catnip"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveLineFinder":{"id":"GroveLineFinder","name":"GroveLineFinder","Brief":"Infrared (IR) Based Line Finder","PartNumbers":["grovelinefinder"],"Categories":["grovelinefinder"],"Connections":["gpio"],"Image":"grovelinefinder.jpg","Manufacturer":["seeed","dfrobot"],"ProjectType":["robotics","prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LineFinder":{"id":"LineFinder","name":"LineFinder","Brief":"Infrared (IR) Based Line Finder","PartNumbers":["linefinder"],"Categories":["linefinder"],"Connections":["gpio"],"Image":"linefinder.jpg","Manufacturer":["seeed","dfrobot"],"ProjectType":["robotics","prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BNO055":{"id":"BNO055","name":"BNO055","Brief":"Intelligent 9-axis Absolute Orientation Sensor","PartNumbers":["bno055"],"Categories":["accelerometer","compass"],"Connections":["gpio","i2c"],"Image":"","Manufacturer":["adafruit"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MPU9150":{"id":"MPU9150","name":"MPU9150","Brief":"InvenSense/Seeed MPU9150 accelerometer","PartNumbers":["mpu9150","Grove - IMU 9DOF v1.0"],"Categories":["accelerometer","gyroscope","compass"],"Connections":["i2c","gpio"],"Image":"mpu9150.jpg","Manufacturer":["InvenSense","Seeed"],"ProjectType":["prototyping","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"KX122":{"id":"KX122","name":"KX122","Brief":"Kionix KX122 tri-axis accelerometer sensor","Categories":["acceleration"],"Connections":["i2c,spi"],"Image":"","Manufacturer":["Kionix"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["C++","C"]},"KXTJ3":{"id":"KXTJ3","name":"KXTJ3","Brief":"Kionix KXTJ3 tri-axis accelerometer sensor","Categories":["acceleration"],"Connections":["i2c"],"Image":"kxtj3.png","Manufacturer":["Kionix"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["C++","C","Java","Python","Node.js"]},"L3GD20":{"id":"L3GD20","name":"L3GD20","Brief":"L3GD20 Tri-axis Digital Gyroscope","PartNumbers":["l3gd20"],"Categories":["gyroscope"],"Connections":["iio","i2c"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["IMU","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Jhd1313m1":{"id":"Jhd1313m1","name":"Jhd1313m1","Brief":"LCD Display Driver for the JHD1313M1 Controller for HD44780-based Displays","PartNumbers":["jhd1313m1"],"Categories":["display"],"Connections":["i2c"],"Image":"","Manufacturer":["seeed"],"ProjectType":["display","prototyping"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Lcm1602":{"id":"Lcm1602","name":"Lcm1602","Brief":"LCD Display Driver for the LCM1602 Controller for HD44780-based Displays","PartNumbers":["lcm1602"],"Categories":["display"],"Connections":["gpio"],"Image":"","Manufacturer":["adafruit","sparkfun","seeed"],"ProjectType":["display","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LCDKS":{"id":"LCDKS","name":"LCDKS","Brief":"LCD Keypad Shield","PartNumbers":["lcdks"],"Categories":["userinput"],"Connections":["gpio","analog"],"Image":"","Manufacturer":["sainsmart","dfrobot","sparkfun"],"ProjectType":["control","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Led":{"id":"Led","name":"Led","Brief":"Light-emitting Diode (LED)","PartNumbers":["Grove - LED"],"Categories":["led"],"Connections":["gpio"],"Image":"led.jpg","Manufacturer":["seeed","dfrobot","sparkfun","adafruit","generic"],"ProjectType":["prototyping","industrial"],"StarterKit":["gsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HLG150H":{"id":"HLG150H","name":"HLG150H","Brief":"Lighting Power Supply Controller","PartNumbers":["hlg150h"],"Categories":["lightcontroller"],"Connections":["pwm"],"Image":"","Manufacturer":["meanwell"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["C++"]},"LoL":{"id":"LoL","name":"LoL","Brief":"Lots of LEDs (LoL) Array Rev A","PartNumbers":["lol"],"Categories":["display"],"Connections":["gpio"],"Image":"","Manufacturer":["olimex"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Loudness":{"id":"Loudness","name":"Loudness","Brief":"Loudness Sensor","PartNumbers":["loudness"],"Categories":["audio"],"Connections":["analog"],"Image":"loudness.jpg","Manufacturer":["seeed","dfrobot"],"ProjectType":["noise_|_control","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MAXSONAREZ":{"id":"MAXSONAREZ","name":"MAXSONAREZ","Brief":"LV-MaxSonar-EZ0 Ultrasonic range finder","PartNumbers":["maxsonarez","LV-MaxSonar-EZ0","MB1000 LV-MaxSonar-EZ0","LV-MaxSonar-EZ1","MB1010 LV-MaxSonar-EZ1","LV-MaxSonar-EZ2","MB1020 LV-MaxSonar-EZ2","LV-MaxSonar-EZ3","MB1030 LV-MaxSonar-EZ3","LV-MaxSonar-EZ4","MB1040 LV-MaxSonar-EZ4"],"Categories":["sound"],"Connections":["analog"],"Image":"maxsonarez.jpg","Manufacturer":["MaxBotix"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"MAG3110":{"id":"MAG3110","name":"MAG3110","Brief":"MAG3110 Three-Axis Digital Magnetometer","PartNumbers":["mag3110"],"Categories":["magnetometer"],"Connections":["i2c"],"Image":"","Manufacturer":["freescale"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MAX5487":{"id":"MAX5487","name":"MAX5487","Brief":"MAX5487 Digital Potentiometer","PartNumbers":["max5487","MAX5487 Dual, 256-Tap, Nonvolatile, SPI-Interface, Linear-Taper Digital Potentiometers"],"Categories":["digital_|_potentiometer"],"Connections":["spi"],"Image":"","Manufacturer":["maxim"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"MAXDS3231M":{"id":"MAXDS3231M","name":"MAXDS3231M","Brief":"maxds3231m Realtime Clock (RTC) Sensor","PartNumbers":["maxds3231m","DS3231","DS3231 Extremely Accurate I2C-Integrated RTC/TCXO/Crystal"],"Categories":["RTC"],"Connections":["i2c"],"Image":"","Manufacturer":["Maxim"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"MB704X":{"id":"MB704X","name":"MB704X","Brief":"MB704x MaxSonar-WR Ultrasonic Ranger","PartNumbers":["MB704x","MB704x MaxSonar-WR Ultrasonic Ranger"],"Categories":["sound"],"Connections":["i2c"],"Image":"","Manufacturer":["MaxBotix"],"ProjectType":["prototyping","industrial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MMC35240":{"id":"MMC35240","name":"MMC35240","Brief":"Memsic MMC35240 Tri-axis Magnetic Sensor API","PartNumbers":["mmc35240","MMC3530KJ"],"Categories":["compass"],"Connections":["i2c"],"Image":"","Manufacturer":["Memsic"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["C++"]},"MHZ16":{"id":"MHZ16","name":"MHZ16","Brief":"MHZ16 Serial CO2 Sensor library","PartNumbers":["Grove - CO2 Sensor","MH-Z16 Intelligent Infrared Gas Module"],"Categories":["gaseous"],"Connections":["uart"],"Image":"mhz16.jpg","Manufacturer":["Seeed","Zhengzhou_|_Winsen_|_Electronics_|_Technology"],"ProjectType":["industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"MCP2515":{"id":"MCP2515","name":"MCP2515","Brief":"Microchip MCP2515 CAN bus controller","PartNumbers":["mcp2515","CAN-BUS Shield V1.2"],"Categories":["communication"],"Connections":["spi","gpio"],"Image":"","Manufacturer":["Seeed","Microchip"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MCP9808":{"id":"MCP9808","name":"MCP9808","Brief":"Microchip MCP9808 precision temperature sensor","PartNumbers":["mcp9808","MCP9808 High Accuracy I2C Temperature Sensor Breakout Board"],"Categories":["temperature"],"Connections":["i2c"],"Image":"mcp9808.jpg","Manufacturer":["Microchip","Adafruit"],"ProjectType":["prototyping"],"StarterKit":"","APILanguageSupport":["Node.js","C++"]},"MQ2":{"id":"MQ2","name":"MQ2","Brief":"MQ2 Methane, Butane, Liquefied Petroleum Gas (LPG), and Smoke Sensor","PartNumbers":["mq2"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["seeed"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":["hak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ3":{"id":"MQ3","name":"MQ3","Brief":"MQ3 Alcohol, Ethanol, Smoke Sensor","PartNumbers":["mq3"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["seeed"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ4":{"id":"MQ4","name":"MQ4","Brief":"MQ4 Methane and Connecticut Natural Gas (CNG) Sensor","PartNumbers":["mq4"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ5":{"id":"MQ5","name":"MQ5","Brief":"MQ5 Natural Gas and Liquefied Petroleum Gas (LPG) Sensor","PartNumbers":["mq5"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["seeed"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ6":{"id":"MQ6","name":"MQ6","Brief":"MQ6 Liquefied Petroleum Gas (LPG) and Butane Sensor","PartNumbers":["mq6"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ7":{"id":"MQ7","name":"MQ7","Brief":"MQ7 Carbon Monoxide Sensor","PartNumbers":["mq7"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ8":{"id":"MQ8","name":"MQ8","Brief":"MQ8 Flammable (Hydrogen) Gas Sensor","PartNumbers":["mq8"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["dfrobot"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MQ9":{"id":"MQ9","name":"MQ9","Brief":"MQ9 Carbon Monoxide (CO) and Flammable Gas Sensor","PartNumbers":["mq9"],"Categories":["gas"],"Connections":["analog"],"Image":"","Manufacturer":["seeed"],"ProjectType":["prototyping","safety","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ECS1030":{"id":"ECS1030","name":"ECS1030","Brief":"Non-Invasive Current Sensor","PartNumbers":["ecs1030"],"Categories":["meter","electric"],"Connections":["analog"],"Image":"ecs1030.jpg","Manufacturer":["sparkfun"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MPL3115A2":{"id":"MPL3115A2","name":"MPL3115A2","Brief":"NXP/Adafruit MPL3115A2 Atmospheric Pressure Sensor","PartNumbers":["mpl3115a2","MPL3115A2 - I2C Barometric Pressure/Altitude/Temperature Sensor"],"Categories":["pressure"],"Connections":["i2c"],"Image":"mpl3115a2.jpg","Manufacturer":["NXP","Adafruit"],"ProjectType":["medical","industrial","commercial"],"StarterKit":"","APILanguageSupport":["Java","C++"]},"LIDARLITEV3":{"id":"LIDARLITEV3","name":"LIDARLITEV3","Brief":"Optical Distance Measurement Sensor","PartNumbers":["lidarlitev3"],"Categories":["distance"],"Connections":["i2c","pwm"],"Image":"lidarlitev3.jpg","Manufacturer":["garmin"],"ProjectType":["robotics","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"O2":{"id":"O2","name":"O2","Brief":"Oxygen (O2) Concentration Sensor","PartNumbers":["o2"],"Categories":["gas","oxygen"],"Connections":["analog"],"Image":"o2.jpg","Manufacturer":["seeed"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LDT0028":{"id":"LDT0028","name":"LDT0028","Brief":"Piezo Vibration Sensor","PartNumbers":["ldt0028"],"Categories":["vibration"],"Connections":["analog"],"Image":"ldt0028.jpg","Manufacturer":["seeed"],"ProjectType":["industrial","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MAX30100":{"id":"MAX30100","name":"MAX30100","Brief":"Pulse Oximeter and Heart-rate Sensor","PartNumbers":["max30100"],"Categories":["heartrate","pulse-ox"],"Connections":["i2c","gpio"],"Image":"","Manufacturer":["maxim"],"ProjectType":["medical","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"Flex":{"id":"Flex","name":"Flex","Brief":"Resistive Flex Sensor","PartNumbers":["flex"],"Categories":["flex_|_sensors"],"Connections":["analog"],"Image":"flex.jpg","Manufacturer":["sparkfun"],"ProjectType":["prototyping","industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"BH1749":{"id":"BH1749","name":"BH1749","Brief":"ROHM BH1749 Color sensor (16-bit)","Categories":["color_|_sensor"],"Connections":["i2c"],"Image":"","Manufacturer":["ROHM"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["C++","C","Java","Python","Node.js"]},"BH1792":{"id":"BH1792","name":"BH1792","Brief":"ROHM BH1792 Heart Rate Sensor library","Categories":["medical"],"Connections":["i2c"],"Image":"","Manufacturer":["ROHM"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["C++","C","Java","Python","Node.js"]},"BISS0001":{"id":"BISS0001","name":"BISS0001","Brief":"Seeed BISS0001 PIR motion detector","PartNumbers":["biss0001","Grove - PIR Motion Sensor"],"Categories":["light"],"Connections":["GPIO"],"Image":"biss0001.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","home","industrial"],"StarterKit":["tsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"APDS9002":{"id":"APDS9002","name":"APDS9002","Brief":"Seeed luminance sensor","PartNumbers":["apds9002","Grove - Luminance Sensor"],"Categories":["light"],"Connections":["Analog"],"Image":"apds9002.jpg","Manufacturer":["Avago","Seeed"],"ProjectType":["prototyping","mobile"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"MPR121":{"id":"MPR121","name":"MPR121","Brief":"Seeed/FreeScale MPR121 Touch Sensor","PartNumbers":["mpr121","Grove - I2C Touch Sensor"],"Categories":["touch"],"Connections":["i2c"],"Image":"mpr121.jpg","Manufacturer":["Seeed","FreeScale"],"ProjectType":["prototyping"],"StarterKit":["tsk"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"SX1276":{"id":"SX1276","name":"SX1276","Brief":"Semtech SX1276 LoRa/FSK Module","PartNumbers":["sx1276"],"Categories":["radio"],"Connections":["gpio","spi"],"Image":"","Manufacturer":["semtech"],"ProjectType":["industrial"],"StarterKit":"","APILanguageSupport":["Python","Node.js","C++"]},"GROVESCAM":{"id":"GROVESCAM","name":"GROVESCAM","Brief":"Serial Camera Module","PartNumbers":["grovescam"],"Categories":["imaging","deprecated"],"Connections":["uart"],"Image":"grovescam.jpg","Manufacturer":["seeed"],"ProjectType":["prototyping","access_|_control","security"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HMTRP":{"id":"HMTRP","name":"HMTRP","Brief":"Serial RF Pro Module","PartNumbers":["hmtrp"],"Categories":["wireless"],"Connections":["uart"],"Image":"hmtrp.jpg","Manufacturer":["seeed"],"ProjectType":["wireless","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"servo":{"id":"servo","name":"servo","Brief":"Servo library","PartNumbers":["servo"],"Categories":["servos"],"Connections":["pwm"],"Image":"es08a.jpg","Manufacturer":["EMAX"],"ProjectType":["prototyping","commercial"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++"]},"ENC03R":{"id":"ENC03R","name":"ENC03R","Brief":"Single-axis Analog Gyro Module","PartNumbers":["enc03r"],"Categories":["gyroscope","IMU","Discontinued"],"Connections":["analog"],"Image":"enc03r.jpg","Manufacturer":["murata","seeed"],"ProjectType":["prototyping"],"StarterKit":["robok"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"APDS9930":{"id":"APDS9930","name":"APDS9930","Brief":"SparkFun apds9930 ambient light and color sensor","PartNumbers":["apds9930","SparkFun RGB and Gesture Sensor - APDS-9960"],"Categories":["light","proximity"],"Connections":["iio","i2c"],"Image":"","Manufacturer":["Avago","SparkFun"],"ProjectType":["prototyping","mobile","robotics"],"StarterKit":"","APILanguageSupport":["C++"]},"RSC":{"id":"RSC","name":"RSC","Brief":"SPI based Board Mount Pressure and Temperature","PartNumbers":["rsc"],"Categories":["pressure","temperature"],"Connections":["gpio","spi"],"Image":"","Manufacturer":["Honeywell"],"ProjectType":["medical","industrial","extended"],"StarterKit":[],"APILanguageSupport":["Python","Node.js","C++","C"]},"ILI9341":{"id":"ILI9341","name":"ILI9341","Brief":"SPI Based LCD","PartNumbers":["ili9341"],"Categories":["display"],"Connections":["spi"],"Image":"ili9341.jpg","Manufacturer":["adafruit"],"ProjectType":["graphics","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"MAX31723":{"id":"MAX31723","name":"MAX31723","Brief":"SPI/3-wire Digital Thermometer","PartNumbers":["max31723"],"Categories":["temperature"],"Connections":["spi"],"Image":"","Manufacturer":["maxim"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"SensorTemplate":{"id":"SensorTemplate","name":"SensorTemplate","Brief":"Template Sensor","PartNumbers":["template"],"Categories":["other"],"Connections":["i2c"],"Image":"sensortemplate.png","Manufacturer":["generic"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["// Java","Java","// Python","Python","// Node.js","Node.js","// C++","C++","// C","C"]},"MAX31855":{"id":"MAX31855","name":"MAX31855","Brief":"Thermocouple-to-Digital Converter","PartNumbers":["max31855"],"Categories":["temperature"],"Connections":["spi"],"Image":"max31855.jpg","Manufacturer":["maxim","adafruit"],"ProjectType":["thermal","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"KXCJK1013":{"id":"KXCJK1013","name":"KXCJK1013","Brief":"Tri-axis Digital Accelerometer","PartNumbers":["kxcjk1013"],"Categories":["accelerometer"],"Connections":["iio","i2c"],"Image":"","Manufacturer":["kionix"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LSM303DLH":{"id":"LSM303DLH","name":"LSM303DLH","Brief":"Triaxial Accelerometer/magnetometer","PartNumbers":["lsm303dlh"],"Categories":["compass","accelerometer"],"Connections":["i2c"],"Image":"","Manufacturer":["seeed","adafruit","stmicro"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LSM9DS0":{"id":"LSM9DS0","name":"LSM9DS0","Brief":"Triaxial Gyroscope/Accelerometer/Magnetometer Sensor","PartNumbers":["lsm9ds0"],"Categories":["gyroscope","accelerometer","magnetometer"],"Connections":["i2c","gpio"],"Image":"lsm9ds0.jpg","Manufacturer":["sparkfun","stmicro"],"ProjectType":["robotics","wearables","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LSM303AGR":{"id":"LSM303AGR","name":"LSM303AGR","Brief":"Ultra-Compact High-Performance eCompass Module","PartNumbers":["lsm303agr"],"Categories":["magnetometer"],"Connections":["i2c"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["imu","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"LSM303D":{"id":"LSM303D","name":"LSM303D","Brief":"Ultra-compact high-performance eCompass module","PartNumbers":["lsm303d"],"Categories":["compass"],"Connections":["i2c"],"Image":"","Manufacturer":["stmicro"],"ProjectType":["robotics","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveUltraSonic":{"id":"GroveUltraSonic","name":"GroveUltraSonic","Brief":"Ultrasonic Proximity Sensor","PartNumbers":["groveultrasonic"],"Categories":["proximity","deprecated"],"Connections":["gpio"],"Image":"groveultrasonic.jpg","Manufacturer":["seeed"],"ProjectType":["robotics","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"ULN200XA":{"id":"ULN200XA","name":"ULN200XA","Brief":"UPM module for the ULN200XA Darlington Stepper Driver","PartNumbers":["ULN200XA","ULN2001A","ULN2002A","ULN2003A","ULN2004A"],"Categories":["motor"],"Connections":["gpio"],"Image":"uln200xa.jpg","Manufacturer":["Seeed"],"ProjectType":["prototyping","robotics"],"StarterKit":"","APILanguageSupport":["Java","Python","Node.js","C++","C"]},"CWLXSSA":{"id":"CWLXSSA","name":"CWLXSSA","Brief":"Veris CWLSXXA CO2 Sensor","PartNumbers":["cwlsxxa"],"Categories":["temp","gaseous"],"Connections":["analog"],"Image":"","Manufacturer":["veris"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"E50HX":{"id":"E50HX","name":"E50HX","Brief":"Veris E50HX (E50H2/E50H5) Energy Meter Module","PartNumbers":["e50hx"],"Categories":["energy"],"Connections":["rs485"],"Image":"","Manufacturer":["veris"],"ProjectType":["industrial"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"H803X":{"id":"H803X","name":"H803X","Brief":"Veris H803X Energy Meter Module","PartNumbers":["h803x"],"Categories":["energy","electric"],"Connections":["uart"],"Image":"","Manufacturer":["veris"],"ProjectType":["prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HDXXVXTA":{"id":"HDXXVXTA","name":"HDXXVXTA","Brief":"Veris HDXXVXTA Humidity Transmitter","PartNumbers":["hdxxvxta"],"Categories":["humidity"],"Connections":["analog"],"Image":"","Manufacturer":["veris"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"HWXPXX":{"id":"HWXPXX","name":"HWXPXX","Brief":"Veris HWXPXX Hardware Protocol Humidity and Temperature Sensor","PartNumbers":["hwxpxx"],"Categories":["temperature"],"Connections":["uart"],"Image":"","Manufacturer":["veris"],"ProjectType":["environmental","prototyping"],"StarterKit":[],"APILanguageSupport":["Java","Python","Node.js","C++","C"]},"GroveWFS":{"id":"GroveWFS","name":"GroveWFS","Brief":"Water Flow Sensor","PartNumbers":["grovewfs"],"Categories":["liquid","deprecated"],"Connections":["gpio"],"Image":"grovewfs.jpg","Manufacturer":["seeed"],"ProjectType":["agriculture","monitoring","prototyping"],"StarterKit":["eak"],"APILanguageSupport":["Java","Python","Node.js","C++","C"]}},"docInfo":{"MMA7660":{"Categories":1,"Connections":2,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":8,"PartNumbers":6,"name":1,"Image":1},"DS2413":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"ADS1015":{"Categories":1,"Connections":1,"Manufacturer":4,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":9,"PartNumbers":1,"name":1,"Image":1},"ADS1115":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":9,"PartNumbers":1,"name":1,"Image":1},"Joystick12":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"HX711":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"BMM150":{"Categories":3,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"AD8232":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"APA102":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":4,"PartNumbers":10,"name":1,"Image":1},"adafruitss":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"MAX44000":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"DFREC":{"Categories":2,"Connections":2,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"GP2Y0A":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"Light":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"Microphone":{"Categories":1,"Connections":1,"Manufacturer":5,"ProjectType":2,"APILanguageSupport":4,"StarterKit":1,"Brief":2,"PartNumbers":3,"name":1,"Image":1},"DFRORP":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"DFRPH":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"LM35":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"Temperature":{"Categories":1,"Connections":1,"Manufacturer":5,"ProjectType":2,"APILanguageSupport":4,"StarterKit":1,"Brief":3,"PartNumbers":3,"name":1,"Image":1},"UARTAT":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":0,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"dsb09104":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":9,"PartNumbers":1,"name":1,"Image":0},"dg2":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":8,"PartNumbers":1,"name":1,"Image":0},"MS5611":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":2,"StarterKit":0,"Brief":7,"PartNumbers":10,"name":1,"Image":0},"P9813":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":7,"PartNumbers":9,"name":1,"Image":1},"LP8860":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"Electromagnet":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":2,"PartNumbers":1,"name":1,"Image":1},"A110X":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"SSD1351":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":5,"PartNumbers":10,"name":1,"Image":1},"ST7735":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":4,"PartNumbers":10,"name":1,"Image":1},"mma8451":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":7,"name":1,"Image":0},"AdafruitMS1438":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"ADC121C021":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"Adxl345":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"DSB29":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":8,"PartNumbers":1,"name":1,"Image":0},"ss6":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":0},"AM2315":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"T6713":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":7,"PartNumbers":6,"name":1,"Image":0},"T8100":{"Categories":3,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":7,"PartNumbers":6,"name":1,"Image":0},"TCS37727":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":0},"ADIS16448":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"ADXL335":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"MMA7361":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":6,"name":1,"Image":0},"SHT1X":{"Categories":2,"Connections":1,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":7,"name":1,"Image":0},"URM37":{"Categories":1,"Connections":3,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"WheelEncoder":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":4,"PartNumbers":5,"name":1,"Image":1},"ES9257":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":3,"StarterKit":1,"Brief":4,"PartNumbers":11,"name":1,"Image":1},"ES08A":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":1,"Brief":4,"PartNumbers":8,"name":1,"Image":1},"GroveLEDBar":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":1,"Brief":10,"PartNumbers":15,"name":1,"Image":1},"GroveButton":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":1,"Brief":3,"PartNumbers":5,"name":1,"Image":1},"GroveCircularLED":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":11,"PartNumbers":15,"name":1,"Image":1},"GroveElectromagnet":{"Categories":3,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"GroveLed":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":1,"Brief":3,"PartNumbers":7,"name":1,"Image":1},"GroveLight":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":1,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"Moisture":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":2,"Brief":4,"PartNumbers":3,"name":1,"Image":1},"GroveRelay":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":3,"Brief":3,"PartNumbers":3,"name":1,"Image":1},"Relay":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":4,"StarterKit":3,"Brief":3,"PartNumbers":3,"name":1,"Image":1},"GroveRotary":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":1,"Brief":6,"PartNumbers":5,"name":1,"Image":1},"RotaryEncoder":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":5,"name":1,"Image":1},"GroveSlide":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":4,"PartNumbers":4,"name":1,"Image":0},"GroveTemp":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":1,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"UltraSonic":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":2,"StarterKit":0,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"vdiv":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"WFS":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"waterlevel":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":4,"name":1,"Image":1},"Water":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"TB7300":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":7,"PartNumbers":2,"name":1,"Image":0},"MS5803":{"Categories":2,"Connections":2,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":7,"PartNumbers":7,"name":1,"Image":0},"MLX90614":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":1,"StarterKit":0,"Brief":5,"PartNumbers":6,"name":1,"Image":1},"RN2903":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"MICSV89":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":5,"PartNumbers":11,"name":1,"Image":1},"MY9221 ":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":1,"Brief":7,"PartNumbers":12,"name":1,"Image":1},"NMEAGPS":{"Categories":1,"Connections":2,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":4,"name":1,"Image":0},"NRF24L01":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":5,"name":1,"Image":1},"nrf8001":{"Categories":1,"Connections":3,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":1,"StarterKit":0,"Brief":8,"PartNumbers":11,"name":1,"Image":1},"NLGPIO16":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":8,"PartNumbers":9,"name":1,"Image":0},"MMA7455":{"Categories":1,"Connections":2,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":4,"PartNumbers":6,"name":1,"Image":1},"mma8453q":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":10,"name":1,"Image":0},"mma8652fc":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":10,"name":1,"Image":0},"mma8653fc":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":10,"name":1,"Image":0},"PCA9685":{"Categories":2,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":9,"PartNumbers":11,"name":1,"Image":1},"RHUSB":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":7,"PartNumbers":6,"name":1,"Image":0},"OZW":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"OTP538U":{"Categories":2,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":8,"PartNumbers":5,"name":1,"Image":1},"PN532":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":6,"PartNumbers":7,"name":1,"Image":1},"RFR359F":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":2,"Brief":6,"PartNumbers":5,"name":1,"Image":1},"RPR220":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":2,"Brief":9,"PartNumbers":5,"name":1,"Image":1},"MQ303A":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":4,"name":1,"Image":1},"Rotary":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":1,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"SCAM":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":4,"PartNumbers":5,"name":1,"Image":1},"Slide":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"Speaker":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":3,"PartNumbers":3,"name":1,"Image":1},"TA12200":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":6,"PartNumbers":4,"name":1,"Image":1},"TCS3414CS":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"TH02":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":7,"name":1,"Image":1},"TM1637":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":7,"PartNumbers":5,"name":1,"Image":1},"TTP223":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":4,"name":1,"Image":1},"PPD42NS":{"Categories":0,"Connections":1,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":4,"name":1,"Image":1},"SI1132":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":8,"PartNumbers":1,"name":1,"Image":0},"SI114x":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":3,"StarterKit":0,"Brief":7,"PartNumbers":9,"name":1,"Image":1},"SI7005":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":9,"PartNumbers":1,"name":1,"Image":0},"SmartDrive":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":6,"PartNumbers":6,"name":1,"Image":0},"SM130":{"Categories":1,"Connections":2,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"RGBRingCoder":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":4,"PartNumbers":6,"name":1,"Image":1},"mma8452q":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":8,"name":1,"Image":0},"RF22":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":5,"PartNumbers":7,"name":1,"Image":1},"StepMotor":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":3,"APILanguageSupport":4,"StarterKit":0,"Brief":3,"PartNumbers":5,"name":1,"Image":1},"T3311":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":6,"PartNumbers":9,"name":1,"Image":0},"TMP006":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":2,"StarterKit":0,"Brief":7,"PartNumbers":9,"name":1,"Image":0},"TCA9548A":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":5,"PartNumbers":4,"name":1,"Image":1},"TSL2561":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"TEAMS":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"TEX00":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":2,"name":1,"Image":0},"VCAP":{"Categories":1,"Connections":0,"Manufacturer":0,"ProjectType":4,"APILanguageSupport":4,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"VEML6070":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"NUNCHUCK":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":5,"name":1,"Image":1},"WT5001":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"XBee":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":3,"PartNumbers":8,"name":1,"Image":1},"YG1006":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"ZFM20":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":6,"PartNumbers":4,"name":1,"Image":1},"SX6119":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":8,"PartNumbers":4,"name":1,"Image":1},"AT42QT1070":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":4,"PartNumbers":5,"name":1,"Image":1},"HM11":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"BMPX8X":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"BMX055":{"Categories":4,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"BMG160":{"Categories":1,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"BMI160":{"Categories":3,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"BMA220":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":3,"StarterKit":0,"Brief":3,"PartNumbers":3,"name":1,"Image":1},"BMA250E":{"Categories":1,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"Button":{"Categories":1,"Connections":1,"Manufacturer":5,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":1,"PartNumbers":2,"name":1,"Image":1},"Buzzer":{"Categories":1,"Connections":1,"Manufacturer":5,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":1,"PartNumbers":2,"name":1,"Image":1},"Pulsensor":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":7,"PartNumbers":4,"name":1,"Image":1},"CJQ4435":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":2,"PartNumbers":1,"name":1,"Image":1},"ADXRS610":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"BH1750":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":5,"name":1,"Image":0},"MG811":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":3,"StarterKit":0,"Brief":3,"PartNumbers":7,"name":1,"Image":1},"HKA5":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"LIS2DS12":{"Categories":1,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"lis3dh":{"Categories":1,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"LSM6DS3H":{"Categories":2,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"LSM6DSL":{"Categories":2,"Connections":3,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"BME280":{"Categories":3,"Connections":3,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":4,"name":1,"Image":0},"CurieImu":{"Categories":3,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"MAX44009":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"BMP280":{"Categories":3,"Connections":3,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":5,"name":1,"Image":0},"HTU21D":{"Categories":2,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"LPD8806":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"DS1307":{"Categories":2,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"DS1808LC":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"DS18B20":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"L298":{"Categories":1,"Connections":2,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"HT9170":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"M24LR64E":{"Categories":2,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"EHR":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"GroveEHR":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"ECEZO":{"Categories":3,"Connections":2,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"ElDriver":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"EMG":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"GroveGSR":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":4,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"GSR":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":4,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"GPRS":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"Grove":{"Categories":5,"Connections":4,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":3,"Brief":5,"PartNumbers":3,"name":1,"Image":0},"Hmc5883l":{"Categories":2,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"Itg3200":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"GUVAS12D":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"Collision":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"GroveCollision":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"INA132":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"GroveElDriver":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"GroveEMG":{"Categories":3,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"GroveGPRS":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":1},"MD":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":4,"name":1,"Image":1},"GroveMoisture":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":2,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"GroveO2":{"Categories":3,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"GroveSpeaker":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"ISD1820":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"GroveVDiv":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"GroveWater":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"HCSR04":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"HDC1000":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"ABP":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"HP20X":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"H3LIS331DL":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":1},"IMS":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"GroveLineFinder":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"LineFinder":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"BNO055":{"Categories":2,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"MPU9150":{"Categories":3,"Connections":2,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":4,"StarterKit":0,"Brief":3,"PartNumbers":5,"name":1,"Image":1},"KX122":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":6,"PartNumbers":0,"name":1,"Image":0},"KXTJ3":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":0,"name":1,"Image":1},"L3GD20":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"Jhd1313m1":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":8,"PartNumbers":1,"name":1,"Image":0},"Lcm1602":{"Categories":1,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":8,"PartNumbers":1,"name":1,"Image":0},"LCDKS":{"Categories":1,"Connections":2,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":0},"Led":{"Categories":1,"Connections":1,"Manufacturer":5,"ProjectType":2,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":2,"name":1,"Image":1},"HLG150H":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"LoL":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"Loudness":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":2,"PartNumbers":1,"name":1,"Image":1},"MAXSONAREZ":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":3,"StarterKit":0,"Brief":6,"PartNumbers":36,"name":1,"Image":1},"MAG3110":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"MAX5487":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":3,"PartNumbers":12,"name":1,"Image":0},"MAXDS3231M":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":2,"StarterKit":0,"Brief":5,"PartNumbers":8,"name":1,"Image":0},"MB704X":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":6,"name":1,"Image":0},"MMC35240":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":1,"StarterKit":0,"Brief":7,"PartNumbers":2,"name":1,"Image":0},"MHZ16":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":5,"PartNumbers":9,"name":1,"Image":1},"MCP2515":{"Categories":1,"Connections":2,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":4,"name":1,"Image":0},"MCP9808":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":2,"StarterKit":0,"Brief":5,"PartNumbers":9,"name":1,"Image":1},"MQ2":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":9,"PartNumbers":1,"name":1,"Image":0},"MQ3":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"MQ4":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":0},"MQ5":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":8,"PartNumbers":1,"name":1,"Image":0},"MQ6":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":0},"MQ7":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"MQ8":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"MQ9":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":0},"ECS1030":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"MPL3115A2":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":2,"StarterKit":0,"Brief":5,"PartNumbers":6,"name":1,"Image":1},"LIDARLITEV3":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"O2":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"LDT0028":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"MAX30100":{"Categories":3,"Connections":2,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"Flex":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"BH1749":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":0,"name":1,"Image":0},"BH1792":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":0,"name":1,"Image":0},"BISS0001":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":5,"name":1,"Image":1},"APDS9002":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":3,"PartNumbers":4,"name":1,"Image":1},"MPR121":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":4,"PartNumbers":5,"name":1,"Image":1},"SX1276":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":3,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"GROVESCAM":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"HMTRP":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":1},"servo":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":4,"StarterKit":0,"Brief":2,"PartNumbers":1,"name":1,"Image":1},"ENC03R":{"Categories":3,"Connections":1,"Manufacturer":2,"ProjectType":1,"APILanguageSupport":5,"StarterKit":1,"Brief":5,"PartNumbers":1,"name":1,"Image":1},"APDS9930":{"Categories":2,"Connections":2,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":1,"StarterKit":0,"Brief":6,"PartNumbers":7,"name":1,"Image":0},"RSC":{"Categories":2,"Connections":2,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":4,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"ILI9341":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"MAX31723":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"SensorTemplate":{"Categories":0,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":10,"StarterKit":0,"Brief":2,"PartNumbers":1,"name":1,"Image":1},"MAX31855":{"Categories":1,"Connections":1,"Manufacturer":2,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"KXCJK1013":{"Categories":1,"Connections":2,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"LSM303DLH":{"Categories":2,"Connections":1,"Manufacturer":3,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":2,"PartNumbers":1,"name":1,"Image":0},"LSM9DS0":{"Categories":3,"Connections":2,"Manufacturer":2,"ProjectType":3,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"LSM303AGR":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"LSM303D":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"GroveUltraSonic":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":3,"PartNumbers":1,"name":1,"Image":1},"ULN200XA":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":5,"name":1,"Image":1},"CWLXSSA":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"E50HX":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":6,"PartNumbers":1,"name":1,"Image":0},"H803X":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":1,"APILanguageSupport":5,"StarterKit":0,"Brief":5,"PartNumbers":1,"name":1,"Image":0},"HDXXVXTA":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":4,"PartNumbers":1,"name":1,"Image":0},"HWXPXX":{"Categories":1,"Connections":1,"Manufacturer":1,"ProjectType":2,"APILanguageSupport":5,"StarterKit":0,"Brief":7,"PartNumbers":1,"name":1,"Image":0},"GroveWFS":{"Categories":2,"Connections":1,"Manufacturer":1,"ProjectType":3,"APILanguageSupport":5,"StarterKit":1,"Brief":3,"PartNumbers":1,"name":1,"Image":1}},"length":250,"save":true},"index":{"Categories":{"root":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"KX122":{"tf":1},"KXTJ3":{"tf":1}},"df":2,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MMA7660":{"tf":1},"mma8451":{"tf":1},"Adxl345":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"mma8452q":{"tf":1},"NUNCHUCK":{"tf":1},"BMX055":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"CurieImu":{"tf":1},"Collision":{"tf":1},"H3LIS331DL":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1}},"df":27}}}}}}}}}},"d":{"docs":{},"df":0,"c":{"docs":{"HX711":{"tf":1}},"df":1}},"i":{"docs":{},"df":0,"o":{"docs":{"ADC121C021":{"tf":1}},"df":1},"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"GroveRotary":{"tf":1},"GroveSlide":{"tf":1},"Rotary":{"tf":1},"Slide":{"tf":1}},"df":4}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"ISD1820":{"tf":1},"Loudness":{"tf":1}},"df":2}}}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"DS2413":{"tf":1}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"adafruitss":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"servo":{"tf":1}},"df":4}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"Microphone":{"tf":1},"URM37":{"tf":1},"UltraSonic":{"tf":1},"Speaker":{"tf":1},"WT5001":{"tf":1},"SX6119":{"tf":1},"Buzzer":{"tf":1},"GroveSpeaker":{"tf":1},"MAXSONAREZ":{"tf":1},"MB704X":{"tf":1}},"df":10}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"GroveGSR":{"tf":1},"GSR":{"tf":1}},"df":2}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1},"Electromagnet":{"tf":1},"GroveElectromagnet":{"tf":1},"vdiv":{"tf":1},"TA12200":{"tf":1},"CJQ4435":{"tf":1},"INA132":{"tf":1},"GroveVDiv":{"tf":1},"ECS1030":{"tf":1},"H803X":{"tf":1}},"df":11,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"EMG":{"tf":1},"GroveEMG":{"tf":1}},"df":2}}}}}}}}}}}}}}},"c":{"docs":{"DFREC":{"tf":1},"DS18B20":{"tf":1},"ECEZO":{"tf":1}},"df":3},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"E50HX":{"tf":1},"H803X":{"tf":1}},"df":2}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"Joystick12":{"tf":1}},"df":1}}}},"m":{"docs":{},"df":0,"u":{"docs":{"Adxl345":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"BMX055":{"tf":1},"ADXRS610":{"tf":1},"CurieImu":{"tf":1},"ENC03R":{"tf":1}},"df":7},"a":{"docs":{},"df":0,"g":{"docs":{"GROVESCAM":{"tf":1}},"df":1}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"BMM150":{"tf":1},"MS5611":{"tf":1},"MS5803":{"tf":1},"BMPX8X":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"ABP":{"tf":1},"HP20X":{"tf":1},"MPL3115A2":{"tf":1},"RSC":{"tf":1}},"df":10}}}}},"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"MAX44000":{"tf":1},"GP2Y0A":{"tf":1},"APDS9930":{"tf":1},"GroveUltraSonic":{"tf":1}},"df":4}}}}},"h":{"docs":{"DFRPH":{"tf":1}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"MAX30100":{"tf":1}},"df":1}}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"BMM150":{"tf":1},"AM2315":{"tf":1},"T8100":{"tf":1},"SHT1X":{"tf":1},"RHUSB":{"tf":1},"TH02":{"tf":1},"SI7005":{"tf":1},"T3311":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"HDC1000":{"tf":1},"HDXXVXTA":{"tf":1}},"df":13}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"AD8232":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"MAX30100":{"tf":1}},"df":4}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"A110X":{"tf":1}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"Temperature":{"tf":1},"CWLXSSA":{"tf":1}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"BMM150":{"tf":1},"LM35":{"tf":1},"MS5611":{"tf":1},"AM2315":{"tf":1},"T8100":{"tf":1},"SHT1X":{"tf":1},"GroveTemp":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"RHUSB":{"tf":1},"OTP538U":{"tf":1},"TH02":{"tf":1},"SI7005":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"Grove":{"tf":1},"HDC1000":{"tf":1},"ABP":{"tf":1},"MCP9808":{"tf":1},"RSC":{"tf":1},"MAX31723":{"tf":1},"MAX31855":{"tf":1},"HWXPXX":{"tf":1}},"df":29}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"HT9170":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"GroveButton":{"tf":1},"TTP223":{"tf":1},"ZFM20":{"tf":1},"AT42QT1070":{"tf":1},"Grove":{"tf":1},"MPR121":{"tf":1}},"df":6}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"DS1307":{"tf":1}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1},"GroveLed":{"tf":1},"PCA9685":{"tf":1},"RGBRingCoder":{"tf":1},"Grove":{"tf":1},"Led":{"tf":1}},"df":7}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"GP2Y0A":{"tf":1},"Light":{"tf":1},"TCS37727":{"tf":1},"GroveLight":{"tf":1},"OTP538U":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"TCS3414CS":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"TSL2561":{"tf":1},"VEML6070":{"tf":1},"YG1006":{"tf":1},"BH1750":{"tf":1},"MAX44009":{"tf":1},"DS1808LC":{"tf":1},"ElDriver":{"tf":1},"Grove":{"tf":1},"GroveElDriver":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"APDS9930":{"tf":1}},"df":22,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"LP8860":{"tf":1}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"HLG150H":{"tf":1}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"DFRORP":{"tf":1},"DFRPH":{"tf":1},"Moisture":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"ECEZO":{"tf":1},"GroveWater":{"tf":1},"GroveWFS":{"tf":1}},"df":9}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"LineFinder":{"tf":1}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"DFREC":{"tf":1},"DS18B20":{"tf":1},"ECEZO":{"tf":1}},"df":3}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"TCS37727":{"tf":1}},"df":1,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"BH1749":{"tf":1}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"Collision":{"tf":1},"GroveCollision":{"tf":1}},"df":2}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"BMI160":{"tf":1},"CurieImu":{"tf":1},"Hmc5883l":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"MMC35240":{"tf":1},"LSM303DLH":{"tf":1},"LSM303D":{"tf":1}},"df":8}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"MCP2515":{"tf":1}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"DFRORP":{"tf":1}},"df":1}},"x":{"docs":{"MAX30100":{"tf":1}},"df":1,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"GroveO2":{"tf":1},"O2":{"tf":1}},"df":2}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"dsb09104":{"tf":1},"dg2":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"RN2903":{"tf":1},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"OZW":{"tf":1},"RF22":{"tf":1},"XBee":{"tf":1}},"df":10}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"M24LR64E":{"tf":1},"GPRS":{"tf":1},"GroveGPRS":{"tf":1},"HMTRP":{"tf":1}},"df":4}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"Electromagnet":{"tf":1},"GroveElectromagnet":{"tf":1}},"df":2,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"BMX055":{"tf":1},"Hmc5883l":{"tf":1},"MAG3110":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1}},"df":5}}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"AdafruitMS1438":{"tf":1},"PCA9685":{"tf":1},"SmartDrive":{"tf":1},"StepMotor":{"tf":1},"L298":{"tf":1},"MD":{"tf":1},"ULN200XA":{"tf":1}},"df":7}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"GroveMoisture":{"tf":1},"IMS":{"tf":1}},"df":2}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"TCA9548A":{"tf":1}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"EMG":{"tf":1},"GroveEMG":{"tf":1},"BH1792":{"tf":1}},"df":3}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"ECS1030":{"tf":1}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"SSD1351":{"tf":1},"ST7735":{"tf":1},"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"TM1637":{"tf":1},"LPD8806":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"LoL":{"tf":1},"ILI9341":{"tf":1}},"df":11}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"HCSR04":{"tf":1},"LIDARLITEV3":{"tf":1}},"df":2}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"ENC03R":{"tf":1}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MAX5487":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"GroveElectromagnet":{"tf":1},"GroveEHR":{"tf":1},"GroveCollision":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"GROVESCAM":{"tf":1},"GroveUltraSonic":{"tf":1},"GroveWFS":{"tf":1}},"df":12}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{"GroveO2":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"O2":{"tf":1}},"df":10,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"T6713":{"tf":1},"T8100":{"tf":1},"MICSV89":{"tf":1},"MQ303A":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1},"MHZ16":{"tf":1},"CWLXSSA":{"tf":1}},"df":8}}}}},"p":{"docs":{"NMEAGPS":{"tf":1}},"df":1},"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"ADXRS610":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"Itg3200":{"tf":1},"MPU9150":{"tf":1},"L3GD20":{"tf":1},"ENC03R":{"tf":1},"LSM9DS0":{"tf":1}},"df":11}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"GroveLineFinder":{"tf":1}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"GroveRelay":{"tf":1},"Relay":{"tf":1},"Grove":{"tf":1}},"df":3}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"PN532":{"tf":1},"SM130":{"tf":1},"M24LR64E":{"tf":1}},"df":3}}},"t":{"docs":{},"df":0,"c":{"docs":{"DS1307":{"tf":1},"MAXDS3231M":{"tf":1}},"df":2}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"SX1276":{"tf":1}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"VCAP":{"tf":1}},"df":1}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"LDT0028":{"tf":1}},"df":1}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"HM11":{"tf":1}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"Button":{"tf":1}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"GUVAS12D":{"tf":1}},"df":1}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"HCSR04":{"tf":1}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"LCDKS":{"tf":1}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"Flex":{"tf":1}},"df":1}}}}}}}}}}}}}}},"Connections":{"root":{"docs":{},"df":0,"i":{"2":{"docs":{},"df":0,"c":{"docs":{"MMA7660":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"BMM150":{"tf":1},"adafruitss":{"tf":1},"MAX44000":{"tf":1},"MS5611":{"tf":1},"LP8860":{"tf":1},"mma8451":{"tf":1},"AdafruitMS1438":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"AM2315":{"tf":1},"T6713":{"tf":1},"TCS37727":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"MICSV89":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"PCA9685":{"tf":1},"PN532":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1},"SmartDrive":{"tf":1},"mma8452q":{"tf":1},"TMP006":{"tf":1},"TCA9548A":{"tf":1},"TSL2561":{"tf":1},"VEML6070":{"tf":1},"NUNCHUCK":{"tf":1},"AT42QT1070":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"BH1750":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"MAX44009":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"M24LR64E":{"tf":1},"ECEZO":{"tf":1},"Grove":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"MD":{"tf":1},"HDC1000":{"tf":1},"ABP":{"tf":1},"HP20X":{"tf":1},"H3LIS331DL":{"tf":1},"IMS":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"Jhd1313m1":{"tf":1},"MAG3110":{"tf":1},"MAXDS3231M":{"tf":1},"MB704X":{"tf":1},"MMC35240":{"tf":1},"MCP9808":{"tf":1},"MPL3115A2":{"tf":1},"LIDARLITEV3":{"tf":1},"MAX30100":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"MPR121":{"tf":1},"APDS9930":{"tf":1},"SensorTemplate":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":88,",":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"KX122":{"tf":1}},"df":1}}}}}},"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"L3GD20":{"tf":1},"APDS9930":{"tf":1},"KXCJK1013":{"tf":1}},"df":3}}},"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"MMA7660":{"tf":1},"HX711":{"tf":1},"BMM150":{"tf":1},"AD8232":{"tf":1},"P9813":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"RotaryEncoder":{"tf":1},"UltraSonic":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"MY9221 ":{"tf":1},"NMEAGPS":{"tf":1},"nrf8001":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"Speaker":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SM130":{"tf":1},"RGBRingCoder":{"tf":1},"StepMotor":{"tf":1},"YG1006":{"tf":1},"SX6119":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"Button":{"tf":1},"CJQ4435":{"tf":1},"HKA5":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ElDriver":{"tf":1},"Grove":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"GroveElDriver":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HCSR04":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"LoL":{"tf":1},"MCP2515":{"tf":1},"MAX30100":{"tf":1},"BISS0001":{"tf":1},"SX1276":{"tf":1},"RSC":{"tf":1},"LSM9DS0":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1},"GroveWFS":{"tf":1}},"df":82}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"DS2413":{"tf":1},"DFREC":{"tf":1},"UARTAT":{"tf":1},"dsb09104":{"tf":1},"dg2":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"T8100":{"tf":1},"URM37":{"tf":1},"TB7300":{"tf":1},"RN2903":{"tf":1},"NMEAGPS":{"tf":1},"NLGPIO16":{"tf":1},"RHUSB":{"tf":1},"OZW":{"tf":1},"SM130":{"tf":1},"T3311":{"tf":1},"WT5001":{"tf":1},"XBee":{"tf":1},"ZFM20":{"tf":1},"HM11":{"tf":1},"HKA5":{"tf":1},"DS18B20":{"tf":1},"ECEZO":{"tf":1},"GPRS":{"tf":1},"GroveGPRS":{"tf":1},"MHZ16":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"H803X":{"tf":1},"HWXPXX":{"tf":1}},"df":31},"d":{"docs":{"SCAM":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"Joystick12":{"tf":1},"DFREC":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRotary":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"vdiv":{"tf":1},"nrf8001":{"tf":1},"OTP538U":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"Slide":{"tf":1},"TA12200":{"tf":1},"Pulsensor":{"tf":1},"ADXRS610":{"tf":1},"MG811":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"INA132":{"tf":1},"GroveEMG":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"LCDKS":{"tf":1},"Loudness":{"tf":1},"MAXSONAREZ":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"ECS1030":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"Flex":{"tf":1},"APDS9002":{"tf":1},"ENC03R":{"tf":1},"CWLXSSA":{"tf":1},"HDXXVXTA":{"tf":1}},"df":52}}}}},"i":{"docs":{},"df":0,"o":{"docs":{"AD8232":{"tf":1}},"df":1},"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"URM37":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"Grove":{"tf":1}},"df":4}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"BMM150":{"tf":1},"APA102":{"tf":1},"SSD1351":{"tf":1},"ST7735":{"tf":1},"ADIS16448":{"tf":1},"MS5803":{"tf":1},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"MMA7455":{"tf":1},"RF22":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMA250E":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"LPD8806":{"tf":1},"MAX5487":{"tf":1},"MCP2515":{"tf":1},"SX1276":{"tf":1},"RSC":{"tf":1},"ILI9341":{"tf":1},"MAX31723":{"tf":1},"MAX31855":{"tf":1}},"df":27}}},"p":{"docs":{},"df":0,"w":{"docs":{},"df":0,"m":{"docs":{"ES9257":{"tf":1},"ES08A":{"tf":1},"Speaker":{"tf":1},"RGBRingCoder":{"tf":1},"Buzzer":{"tf":1},"CJQ4435":{"tf":1},"L298":{"tf":1},"Grove":{"tf":1},"HLG150H":{"tf":1},"LIDARLITEV3":{"tf":1},"servo":{"tf":1}},"df":11}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"CurieImu":{"tf":1}},"df":1}}}}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"M24LR64E":{"tf":1}},"df":1}}},"r":{"docs":{},"df":0,"s":{"4":{"8":{"5":{"docs":{"E50HX":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"Manufacturer":{"root":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"MMA7660":{"tf":1},"ADS1015":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"Temperature":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"ADXL335":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"NMEAGPS":{"tf":1},"OTP538U":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"TSL2561":{"tf":1},"WT5001":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"SX6119":{"tf":1},"AT42QT1070":{"tf":1},"HM11":{"tf":1},"BMPX8X":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"CJQ4435":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"DS1307":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1},"M24LR64E":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ElDriver":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"GPRS":{"tf":1},"Grove":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"INA132":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveGPRS":{"tf":1},"MD":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HP20X":{"tf":1},"H3LIS331DL":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"MPU9150":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"Led":{"tf":1},"Loudness":{"tf":1},"MHZ16":{"tf":1},"MCP2515":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ5":{"tf":1},"MQ9":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"ENC03R":{"tf":1},"LSM303DLH":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1},"GroveWFS":{"tf":1}},"df":113}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"SHT1X":{"tf":1}},"df":1}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1}},"df":3},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"SX1276":{"tf":1}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"ADS1015":{"tf":1},"AD8232":{"tf":1},"Microphone":{"tf":1},"Temperature":{"tf":1},"MS5803":{"tf":1},"NRF24L01":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"RF22":{"tf":1},"StepMotor":{"tf":1},"XBee":{"tf":1},"BMPX8X":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"HTU21D":{"tf":1},"L298":{"tf":1},"ECEZO":{"tf":1},"HCSR04":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"ECS1030":{"tf":1},"Flex":{"tf":1},"APDS9930":{"tf":1},"LSM9DS0":{"tf":1}},"df":25}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"j":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1}},"df":2}}}}}}}}}},"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{"PPD42NS":{"tf":1}},"df":1}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"SSD1351":{"tf":1}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"ST7735":{"tf":1}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1}},"df":3}}}}}}}}}}}},"g":{"docs":{},"df":0,"x":{"docs":{"MICSV89":{"tf":1}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"SM130":{"tf":1}},"df":1}}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"H3LIS331DL":{"tf":1},"L3GD20":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":10}}}}}},"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"LCDKS":{"tf":1}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{"MMA7660":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"MPL3115A2":{"tf":1}},"df":6,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"PCA9685":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"LM35":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"NRF24L01":{"tf":1},"nrf8001":{"tf":1}},"df":2}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"NLGPIO16":{"tf":1}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"DS2413":{"tf":1},"MAX44000":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"MAX5487":{"tf":1},"MAXDS3231M":{"tf":1},"MAX30100":{"tf":1},"MAX31723":{"tf":1},"MAX31855":{"tf":1}},"df":9,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"MAX44009":{"tf":1}},"df":1}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"MAXSONAREZ":{"tf":1},"MB704X":{"tf":1}},"df":2}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"MS5803":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"HLG150H":{"tf":1}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"MLX90614":{"tf":1}},"df":1}}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"MMC35240":{"tf":1}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"RN2903":{"tf":1},"MCP2515":{"tf":1},"MCP9808":{"tf":1}},"df":3}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"ENC03R":{"tf":1}},"df":1}}}}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"DS2413":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"APA102":{"tf":1},"adafruitss":{"tf":1},"Microphone":{"tf":1},"Temperature":{"tf":1},"P9813":{"tf":1},"SSD1351":{"tf":1},"ST7735":{"tf":1},"mma8451":{"tf":1},"AdafruitMS1438":{"tf":1},"AM2315":{"tf":1},"nrf8001":{"tf":1},"PCA9685":{"tf":1},"PN532":{"tf":1},"SI114x":{"tf":1},"TCA9548A":{"tf":1},"VEML6070":{"tf":1},"BMPX8X":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"Pulsensor":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"LPD8806":{"tf":1},"BNO055":{"tf":1},"Lcm1602":{"tf":1},"Led":{"tf":1},"MCP9808":{"tf":1},"MPL3115A2":{"tf":1},"ILI9341":{"tf":1},"MAX31855":{"tf":1},"LSM303DLH":{"tf":1}},"df":35}}}}}}},"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"dsb09104":{"tf":1},"dg2":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"OZW":{"tf":1}},"df":5}}}}}}}}},"m":{"docs":{"TCS37727":{"tf":1},"TCS3414CS":{"tf":1}},"df":2,"s":{"docs":{},"df":0,"i":{"docs":{"MS5611":{"tf":1}},"df":1}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"T6713":{"tf":1},"T8100":{"tf":1}},"df":2}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"StepMotor":{"tf":1}},"df":1}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"AT42QT1070":{"tf":1}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{"ECEZO":{"tf":1}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"APDS9002":{"tf":1},"APDS9930":{"tf":1}},"df":2}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1},"HDC1000":{"tf":1}},"df":3,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"TM1637":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"LP8860":{"tf":1},"vdiv":{"tf":1},"TMP006":{"tf":1},"TCA9548A":{"tf":1},"YG1006":{"tf":1}},"df":5}}}}}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"ST7735":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"o":{"docs":{"TCS3414CS":{"tf":1},"TSL2561":{"tf":1}},"df":2}}},"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"ADS1115":{"tf":1},"DFREC":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"NMEAGPS":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"Loudness":{"tf":1},"MQ4":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1}},"df":27}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"DS18B20":{"tf":1}},"df":1}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Joystick12":{"tf":1},"HX711":{"tf":1},"Microphone":{"tf":1},"Temperature":{"tf":1},"UARTAT":{"tf":1},"ADIS16448":{"tf":1},"StepMotor":{"tf":1},"NUNCHUCK":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"Led":{"tf":1},"SensorTemplate":{"tf":1}},"df":12}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"LIDARLITEV3":{"tf":1}},"df":1}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"BMM150":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"BMP280":{"tf":1}},"df":9}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"SSD1351":{"tf":1}},"df":1}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"mma8451":{"tf":1},"MMA7455":{"tf":1},"mma8452q":{"tf":1},"MAG3110":{"tf":1},"MPR121":{"tf":1}},"df":5}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"ES9257":{"tf":1},"ES08A":{"tf":1},"servo":{"tf":1}},"df":3}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"TB7300":{"tf":1},"Hmc5883l":{"tf":1},"ABP":{"tf":1},"RSC":{"tf":1}},"df":4}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"RF22":{"tf":1}},"df":1}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{"RHUSB":{"tf":1}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"OTP538U":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"SmartDrive":{"tf":1}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"LoL":{"tf":1}},"df":1}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"PN532":{"tf":1}},"df":1}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"BH1750":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1}},"df":3,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"RPR220":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{"SM130":{"tf":1}},"df":1}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"1":{"3":{"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"(":{"1":{"3":{"docs":{},"df":0,".":{"5":{"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"SM130":{"tf":1}},"df":1}}}}}}},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0}}}}}}}}}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"T3311":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"IMS":{"tf":1}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"TEAMS":{"tf":1},"TEX00":{"tf":1},"CWLXSSA":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1}},"df":7}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"VEML6070":{"tf":1}},"df":1}}}}}},"z":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"ZFM20":{"tf":1}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"z":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"MHZ16":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"MPU9150":{"tf":1}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"KX122":{"tf":1},"KXTJ3":{"tf":1},"KXCJK1013":{"tf":1}},"df":3}}}}}}}},"ProjectType":{"root":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"MMA7660":{"tf":1},"DS2413":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"Joystick12":{"tf":1},"HX711":{"tf":1},"BMM150":{"tf":1},"APA102":{"tf":1},"MAX44000":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"MS5611":{"tf":1},"P9813":{"tf":1},"LP8860":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"SSD1351":{"tf":1},"ST7735":{"tf":1},"mma8451":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"AM2315":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"MS5803":{"tf":1},"RN2903":{"tf":1},"MICSV89":{"tf":1},"MY9221 ":{"tf":1},"NMEAGPS":{"tf":1},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"NLGPIO16":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"PCA9685":{"tf":1},"OTP538U":{"tf":1},"PN532":{"tf":1},"RFR359F":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SI114x":{"tf":1},"SmartDrive":{"tf":1},"SM130":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"RF22":{"tf":1},"StepMotor":{"tf":1},"TMP006":{"tf":1},"TCA9548A":{"tf":1},"TSL2561":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1},"NUNCHUCK":{"tf":1},"WT5001":{"tf":1},"XBee":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"SX6119":{"tf":1},"AT42QT1070":{"tf":1},"HM11":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"BMA220":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"Pulsensor":{"tf":1},"CJQ4435":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"LPD8806":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"DS18B20":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1},"M24LR64E":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ElDriver":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"GPRS":{"tf":1},"Grove":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"INA132":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveGPRS":{"tf":1},"MD":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HCSR04":{"tf":1},"HDC1000":{"tf":1},"HP20X":{"tf":1},"H3LIS331DL":{"tf":1},"IMS":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"KX122":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"HLG150H":{"tf":1},"LoL":{"tf":1},"Loudness":{"tf":1},"MAXSONAREZ":{"tf":1},"MAG3110":{"tf":1},"MAX5487":{"tf":1},"MAXDS3231M":{"tf":1},"MB704X":{"tf":1},"MCP2515":{"tf":1},"MCP9808":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"LIDARLITEV3":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"MAX30100":{"tf":1},"Flex":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"servo":{"tf":1},"ENC03R":{"tf":1},"APDS9930":{"tf":1},"ILI9341":{"tf":1},"MAX31723":{"tf":1},"SensorTemplate":{"tf":1},"MAX31855":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1},"H803X":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1},"GroveWFS":{"tf":1}},"df":212}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"MMA7660":{"tf":1},"MAX44000":{"tf":1},"GP2Y0A":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"UltraSonic":{"tf":1},"MMA7455":{"tf":1},"PCA9685":{"tf":1},"Slide":{"tf":1},"SmartDrive":{"tf":1},"StepMotor":{"tf":1},"YG1006":{"tf":1},"CJQ4435":{"tf":1},"L298":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"MD":{"tf":1},"GroveVDiv":{"tf":1},"HCSR04":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"LIDARLITEV3":{"tf":1},"APDS9930":{"tf":1},"LSM9DS0":{"tf":1},"LSM303D":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1}},"df":27}}}},"g":{"docs":{},"df":0,"b":{"docs":{"LPD8806":{"tf":1}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"DS2413":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"BMM150":{"tf":1},"DFREC":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"Temperature":{"tf":1},"MS5611":{"tf":1},"LP8860":{"tf":1},"A110X":{"tf":1},"Adxl345":{"tf":1},"AM2315":{"tf":1},"T6713":{"tf":1},"T8100":{"tf":1},"TCS37727":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"SHT1X":{"tf":1},"Relay":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"NMEAGPS":{"tf":1},"RHUSB":{"tf":1},"RFR359F":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"YG1006":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"BMP280":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"DS18B20":{"tf":1},"ECEZO":{"tf":1},"ABP":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"Led":{"tf":1},"HLG150H":{"tf":1},"MB704X":{"tf":1},"MMC35240":{"tf":1},"MHZ16":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"ECS1030":{"tf":1},"MPL3115A2":{"tf":1},"LDT0028":{"tf":1},"Flex":{"tf":1},"BISS0001":{"tf":1},"SX1276":{"tf":1},"RSC":{"tf":1},"CWLXSSA":{"tf":1},"E50HX":{"tf":1}},"df":80}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"GroveGSR":{"tf":1},"GSR":{"tf":1}},"df":2}}}}}}},"m":{"docs":{},"df":0,"u":{"docs":{"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"H3LIS331DL":{"tf":1},"L3GD20":{"tf":1},"MAG3110":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM303AGR":{"tf":1}},"df":12}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"AD8232":{"tf":1},"MLX90614":{"tf":1},"MQ303A":{"tf":1},"VCAP":{"tf":1},"ZFM20":{"tf":1},"Pulsensor":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"ABP":{"tf":1},"MPL3115A2":{"tf":1},"MAX30100":{"tf":1},"RSC":{"tf":1}},"df":14}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"LM35":{"tf":1},"GroveWFS":{"tf":1}},"df":2}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"AdafruitMS1438":{"tf":1}},"df":1}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"APDS9002":{"tf":1},"APDS9930":{"tf":1}},"df":2}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"WFS":{"tf":1},"RPR220":{"tf":1}},"df":2}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"APA102":{"tf":1},"dsb09104":{"tf":1},"dg2":{"tf":1},"MS5611":{"tf":1},"P9813":{"tf":1},"SSD1351":{"tf":1},"ST7735":{"tf":1},"mma8451":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"T6713":{"tf":1},"T8100":{"tf":1},"TCS37727":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"Relay":{"tf":1},"RotaryEncoder":{"tf":1},"UltraSonic":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"RN2903":{"tf":1},"MICSV89":{"tf":1},"MY9221 ":{"tf":1},"NMEAGPS":{"tf":1},"NRF24L01":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"RHUSB":{"tf":1},"OZW":{"tf":1},"OTP538U":{"tf":1},"PN532":{"tf":1},"RPR220":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1},"SM130":{"tf":1},"mma8452q":{"tf":1},"RF22":{"tf":1},"StepMotor":{"tf":1},"TMP006":{"tf":1},"TCA9548A":{"tf":1},"TSL2561":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1},"XBee":{"tf":1},"SX6119":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"ElDriver":{"tf":1},"Grove":{"tf":1},"GroveElDriver":{"tf":1},"ABP":{"tf":1},"MPU9150":{"tf":1},"KX122":{"tf":1},"KXTJ3":{"tf":1},"MAXSONAREZ":{"tf":1},"MAX5487":{"tf":1},"MAXDS3231M":{"tf":1},"MMC35240":{"tf":1},"MHZ16":{"tf":1},"MPL3115A2":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"servo":{"tf":1}},"df":81}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"EMG":{"tf":1},"GroveEMG":{"tf":1}},"df":2}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"LCDKS":{"tf":1}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"adafruitss":{"tf":1}},"df":1}}},"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"Light":{"tf":1},"GROVESCAM":{"tf":1}},"df":2}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"GroveSpeaker":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"HCSR04":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1}},"df":9}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"Light":{"tf":1},"LM35":{"tf":1},"HKA5":{"tf":1},"HTU21D":{"tf":1},"GUVAS12D":{"tf":1},"GroveO2":{"tf":1},"GroveWater":{"tf":1},"HDC1000":{"tf":1},"HP20X":{"tf":1},"IMS":{"tf":1},"O2":{"tf":1},"MAX31723":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1}},"df":14}}}}}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"RSC":{"tf":1}},"df":1}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"HM11":{"tf":1},"GPRS":{"tf":1},"GroveGPRS":{"tf":1},"HMTRP":{"tf":1}},"df":4}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"HM11":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ElDriver":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"MAX30100":{"tf":1},"LSM9DS0":{"tf":1}},"df":11}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"LPD8806":{"tf":1}},"df":1}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"GroveMoisture":{"tf":1}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"HT9170":{"tf":1}},"df":1}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"MAX31855":{"tf":1}},"df":1}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"M24LR64E":{"tf":1},"GROVESCAM":{"tf":1}},"df":2}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"ISD1820":{"tf":1}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"GroveWater":{"tf":1},"GroveWFS":{"tf":1}},"df":2}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1}},"df":2}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"|":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"Loudness":{"tf":1}},"df":1}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"BISS0001":{"tf":1}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"ILI9341":{"tf":1}},"df":1}}}}}}}}},"APILanguageSupport":{"root":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{"MMA7660":{"tf":1},"DS2413":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"Joystick12":{"tf":1},"HX711":{"tf":1},"BMM150":{"tf":1},"AD8232":{"tf":1},"APA102":{"tf":1},"adafruitss":{"tf":1},"MAX44000":{"tf":1},"DFREC":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"UARTAT":{"tf":1},"dsb09104":{"tf":1},"dg2":{"tf":1},"P9813":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"ST7735":{"tf":1},"AdafruitMS1438":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"AM2315":{"tf":1},"T8100":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"RN2903":{"tf":1},"NMEAGPS":{"tf":1},"NRF24L01":{"tf":1},"MMA7455":{"tf":1},"OZW":{"tf":1},"OTP538U":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SM130":{"tf":1},"StepMotor":{"tf":1},"TSL2561":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1},"NUNCHUCK":{"tf":1},"WT5001":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"HM11":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA250E":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"Pulsensor":{"tf":1},"CJQ4435":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"HKA5":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"LPD8806":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"DS18B20":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1},"M24LR64E":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ECEZO":{"tf":1},"ElDriver":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"GPRS":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"INA132":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveGPRS":{"tf":1},"MD":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HCSR04":{"tf":1},"HDC1000":{"tf":1},"HP20X":{"tf":1},"H3LIS331DL":{"tf":1},"IMS":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"LoL":{"tf":1},"Loudness":{"tf":1},"MAG3110":{"tf":1},"MAX5487":{"tf":1},"MAXDS3231M":{"tf":1},"MB704X":{"tf":1},"MHZ16":{"tf":1},"MCP2515":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"ECS1030":{"tf":1},"MPL3115A2":{"tf":1},"LIDARLITEV3":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"MAX30100":{"tf":1},"Flex":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"servo":{"tf":1},"ENC03R":{"tf":1},"ILI9341":{"tf":1},"MAX31723":{"tf":1},"SensorTemplate":{"tf":1.4142135623730951},"MAX31855":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1},"CWLXSSA":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1},"GroveWFS":{"tf":1}},"df":200}}}},"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"MMA7660":{"tf":1},"DS2413":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"Joystick12":{"tf":1},"HX711":{"tf":1},"BMM150":{"tf":1},"AD8232":{"tf":1},"APA102":{"tf":1},"adafruitss":{"tf":1},"MAX44000":{"tf":1},"DFREC":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"UARTAT":{"tf":1},"dsb09104":{"tf":1},"dg2":{"tf":1},"P9813":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"mma8451":{"tf":1},"AdafruitMS1438":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"AM2315":{"tf":1},"T8100":{"tf":1},"TCS37727":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"RN2903":{"tf":1},"NMEAGPS":{"tf":1},"NLGPIO16":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"RHUSB":{"tf":1},"OZW":{"tf":1},"OTP538U":{"tf":1},"PN532":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SI114x":{"tf":1},"SM130":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"StepMotor":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TSL2561":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1},"NUNCHUCK":{"tf":1},"WT5001":{"tf":1},"XBee":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"SX6119":{"tf":1},"AT42QT1070":{"tf":1},"HM11":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"CJQ4435":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"LPD8806":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"DS18B20":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1},"M24LR64E":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ECEZO":{"tf":1},"ElDriver":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"GPRS":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"INA132":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveGPRS":{"tf":1},"MD":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HCSR04":{"tf":1},"HDC1000":{"tf":1},"ABP":{"tf":1},"HP20X":{"tf":1},"H3LIS331DL":{"tf":1},"IMS":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"LoL":{"tf":1},"Loudness":{"tf":1},"MAXSONAREZ":{"tf":1},"MAG3110":{"tf":1},"MB704X":{"tf":1},"MHZ16":{"tf":1},"MCP2515":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"ECS1030":{"tf":1},"LIDARLITEV3":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"MAX30100":{"tf":1},"Flex":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"SX1276":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"servo":{"tf":1},"ENC03R":{"tf":1},"RSC":{"tf":1},"ILI9341":{"tf":1},"MAX31723":{"tf":1},"SensorTemplate":{"tf":1.4142135623730951},"MAX31855":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1},"CWLXSSA":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1},"GroveWFS":{"tf":1}},"df":220}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"MMA7660":{"tf":1},"DS2413":{"tf":1},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"Joystick12":{"tf":1},"HX711":{"tf":1},"BMM150":{"tf":1},"AD8232":{"tf":1},"APA102":{"tf":1},"adafruitss":{"tf":1},"MAX44000":{"tf":1},"DFREC":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"UARTAT":{"tf":1},"dsb09104":{"tf":1},"dg2":{"tf":1},"MS5611":{"tf":1},"P9813":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"ST7735":{"tf":1},"AdafruitMS1438":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"AM2315":{"tf":1},"T8100":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"RN2903":{"tf":1},"MICSV89":{"tf":1},"NMEAGPS":{"tf":1},"NLGPIO16":{"tf":1},"PCA9685":{"tf":1},"RHUSB":{"tf":1},"OZW":{"tf":1},"OTP538U":{"tf":1},"PN532":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SI114x":{"tf":1},"SM130":{"tf":1},"RGBRingCoder":{"tf":1},"StepMotor":{"tf":1},"T3311":{"tf":1},"TCA9548A":{"tf":1},"TSL2561":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1},"NUNCHUCK":{"tf":1},"WT5001":{"tf":1},"XBee":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"SX6119":{"tf":1},"AT42QT1070":{"tf":1},"HM11":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"CJQ4435":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"LPD8806":{"tf":1},"DS1307":{"tf":1},"DS1808LC":{"tf":1},"DS18B20":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1},"M24LR64E":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"ECEZO":{"tf":1},"ElDriver":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"GPRS":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"INA132":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveGPRS":{"tf":1},"MD":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HCSR04":{"tf":1},"HDC1000":{"tf":1},"ABP":{"tf":1},"HP20X":{"tf":1},"H3LIS331DL":{"tf":1},"IMS":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"BNO055":{"tf":1},"MPU9150":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"Led":{"tf":1},"LoL":{"tf":1},"Loudness":{"tf":1},"MAXSONAREZ":{"tf":1},"MAG3110":{"tf":1},"MB704X":{"tf":1},"MHZ16":{"tf":1},"MCP2515":{"tf":1},"MCP9808":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"ECS1030":{"tf":1},"LIDARLITEV3":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"MAX30100":{"tf":1},"Flex":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"SX1276":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"servo":{"tf":1},"ENC03R":{"tf":1},"RSC":{"tf":1},"ILI9341":{"tf":1},"MAX31723":{"tf":1},"SensorTemplate":{"tf":1.4142135623730951},"MAX31855":{"tf":1},"KXCJK1013":{"tf":1},"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1},"GroveUltraSonic":{"tf":1},"ULN200XA":{"tf":1},"CWLXSSA":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1},"GroveWFS":{"tf":1}},"df":220}}}}}},"c":{"docs":{"MMA7660":{"tf":1.4142135623730951},"DS2413":{"tf":1.4142135623730951},"ADS1015":{"tf":1},"ADS1115":{"tf":1},"Joystick12":{"tf":1.4142135623730951},"HX711":{"tf":1.4142135623730951},"BMM150":{"tf":1.4142135623730951},"AD8232":{"tf":1},"APA102":{"tf":1},"adafruitss":{"tf":1.4142135623730951},"MAX44000":{"tf":1.4142135623730951},"DFREC":{"tf":1.4142135623730951},"GP2Y0A":{"tf":1.4142135623730951},"Light":{"tf":1.4142135623730951},"Microphone":{"tf":1},"DFRORP":{"tf":1.4142135623730951},"DFRPH":{"tf":1.4142135623730951},"LM35":{"tf":1.4142135623730951},"Temperature":{"tf":1},"UARTAT":{"tf":1.4142135623730951},"dsb09104":{"tf":1},"dg2":{"tf":1},"MS5611":{"tf":1},"P9813":{"tf":1},"LP8860":{"tf":1},"Electromagnet":{"tf":1.4142135623730951},"A110X":{"tf":1.4142135623730951},"SSD1351":{"tf":1},"ST7735":{"tf":1},"mma8451":{"tf":1},"AdafruitMS1438":{"tf":1.4142135623730951},"ADC121C021":{"tf":1.4142135623730951},"Adxl345":{"tf":1.4142135623730951},"DSB29":{"tf":1},"ss6":{"tf":1},"AM2315":{"tf":1.4142135623730951},"T6713":{"tf":1},"T8100":{"tf":1},"TCS37727":{"tf":1},"ADIS16448":{"tf":1.4142135623730951},"ADXL335":{"tf":1.4142135623730951},"MMA7361":{"tf":1.4142135623730951},"SHT1X":{"tf":1.4142135623730951},"URM37":{"tf":1.4142135623730951},"WheelEncoder":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1.4142135623730951},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1.4142135623730951},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1.4142135623730951},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1.4142135623730951},"WFS":{"tf":1.4142135623730951},"waterlevel":{"tf":1},"Water":{"tf":1.4142135623730951},"TB7300":{"tf":1},"MS5803":{"tf":1.4142135623730951},"MLX90614":{"tf":1},"RN2903":{"tf":1.4142135623730951},"MICSV89":{"tf":1},"MY9221 ":{"tf":1.4142135623730951},"NMEAGPS":{"tf":1.4142135623730951},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"NLGPIO16":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"PCA9685":{"tf":1},"RHUSB":{"tf":1},"OZW":{"tf":1},"OTP538U":{"tf":1.4142135623730951},"PN532":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1.4142135623730951},"MQ303A":{"tf":1.4142135623730951},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1.4142135623730951},"Speaker":{"tf":1.4142135623730951},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1.4142135623730951},"PPD42NS":{"tf":1.4142135623730951},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1},"SmartDrive":{"tf":1},"SM130":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"RF22":{"tf":1},"StepMotor":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TCA9548A":{"tf":1},"TSL2561":{"tf":1.4142135623730951},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1.4142135623730951},"NUNCHUCK":{"tf":1.4142135623730951},"WT5001":{"tf":1},"XBee":{"tf":1},"YG1006":{"tf":1.4142135623730951},"ZFM20":{"tf":1},"SX6119":{"tf":1},"AT42QT1070":{"tf":1},"HM11":{"tf":1.4142135623730951},"BMPX8X":{"tf":1.4142135623730951},"BMX055":{"tf":1.4142135623730951},"BMG160":{"tf":1.4142135623730951},"BMI160":{"tf":1.4142135623730951},"BMA220":{"tf":1},"BMA250E":{"tf":1.4142135623730951},"Button":{"tf":1.4142135623730951},"Buzzer":{"tf":1.4142135623730951},"Pulsensor":{"tf":1},"CJQ4435":{"tf":1.4142135623730951},"ADXRS610":{"tf":1.4142135623730951},"BH1750":{"tf":1.4142135623730951},"MG811":{"tf":1},"HKA5":{"tf":1.4142135623730951},"LIS2DS12":{"tf":1.4142135623730951},"lis3dh":{"tf":1.4142135623730951},"LSM6DS3H":{"tf":1.4142135623730951},"LSM6DSL":{"tf":1.4142135623730951},"BME280":{"tf":1.4142135623730951},"CurieImu":{"tf":1.4142135623730951},"MAX44009":{"tf":1},"BMP280":{"tf":1.4142135623730951},"HTU21D":{"tf":1.4142135623730951},"LPD8806":{"tf":1.4142135623730951},"DS1307":{"tf":1.4142135623730951},"DS1808LC":{"tf":1.4142135623730951},"DS18B20":{"tf":1.4142135623730951},"L298":{"tf":1.4142135623730951},"HT9170":{"tf":1.4142135623730951},"M24LR64E":{"tf":1.4142135623730951},"EHR":{"tf":1.4142135623730951},"GroveEHR":{"tf":1.4142135623730951},"ECEZO":{"tf":1.4142135623730951},"ElDriver":{"tf":1.4142135623730951},"EMG":{"tf":1.4142135623730951},"GroveGSR":{"tf":1.4142135623730951},"GSR":{"tf":1.4142135623730951},"GPRS":{"tf":1.4142135623730951},"Grove":{"tf":1},"Hmc5883l":{"tf":1.4142135623730951},"Itg3200":{"tf":1.4142135623730951},"GUVAS12D":{"tf":1.4142135623730951},"Collision":{"tf":1.4142135623730951},"GroveCollision":{"tf":1.4142135623730951},"INA132":{"tf":1.4142135623730951},"GroveElDriver":{"tf":1.4142135623730951},"GroveEMG":{"tf":1.4142135623730951},"GroveGPRS":{"tf":1.4142135623730951},"MD":{"tf":1.4142135623730951},"GroveMoisture":{"tf":1.4142135623730951},"GroveO2":{"tf":1.4142135623730951},"GroveSpeaker":{"tf":1.4142135623730951},"ISD1820":{"tf":1.4142135623730951},"GroveVDiv":{"tf":1.4142135623730951},"GroveWater":{"tf":1.4142135623730951},"HCSR04":{"tf":1.4142135623730951},"HDC1000":{"tf":1.4142135623730951},"ABP":{"tf":1.4142135623730951},"HP20X":{"tf":1.4142135623730951},"H3LIS331DL":{"tf":1.4142135623730951},"IMS":{"tf":1.4142135623730951},"GroveLineFinder":{"tf":1.4142135623730951},"LineFinder":{"tf":1.4142135623730951},"BNO055":{"tf":1.4142135623730951},"MPU9150":{"tf":1},"KX122":{"tf":1.4142135623730951},"KXTJ3":{"tf":1.4142135623730951},"L3GD20":{"tf":1.4142135623730951},"Jhd1313m1":{"tf":1.4142135623730951},"Lcm1602":{"tf":1.4142135623730951},"LCDKS":{"tf":1.4142135623730951},"Led":{"tf":1.4142135623730951},"HLG150H":{"tf":1},"LoL":{"tf":1.4142135623730951},"Loudness":{"tf":1.4142135623730951},"MAXSONAREZ":{"tf":1},"MAG3110":{"tf":1.4142135623730951},"MAX5487":{"tf":1},"MAXDS3231M":{"tf":1},"MB704X":{"tf":1.4142135623730951},"MMC35240":{"tf":1},"MHZ16":{"tf":1},"MCP2515":{"tf":1.4142135623730951},"MCP9808":{"tf":1},"MQ2":{"tf":1.4142135623730951},"MQ3":{"tf":1.4142135623730951},"MQ4":{"tf":1.4142135623730951},"MQ5":{"tf":1.4142135623730951},"MQ6":{"tf":1.4142135623730951},"MQ7":{"tf":1.4142135623730951},"MQ8":{"tf":1.4142135623730951},"MQ9":{"tf":1.4142135623730951},"ECS1030":{"tf":1.4142135623730951},"MPL3115A2":{"tf":1},"LIDARLITEV3":{"tf":1.4142135623730951},"O2":{"tf":1.4142135623730951},"LDT0028":{"tf":1.4142135623730951},"MAX30100":{"tf":1.4142135623730951},"Flex":{"tf":1.4142135623730951},"BH1749":{"tf":1.4142135623730951},"BH1792":{"tf":1.4142135623730951},"BISS0001":{"tf":1.4142135623730951},"APDS9002":{"tf":1},"MPR121":{"tf":1.4142135623730951},"SX1276":{"tf":1},"GROVESCAM":{"tf":1.4142135623730951},"HMTRP":{"tf":1.4142135623730951},"servo":{"tf":1},"ENC03R":{"tf":1.4142135623730951},"APDS9930":{"tf":1},"RSC":{"tf":1.4142135623730951},"ILI9341":{"tf":1.4142135623730951},"MAX31723":{"tf":1.4142135623730951},"SensorTemplate":{"tf":2},"MAX31855":{"tf":1.4142135623730951},"KXCJK1013":{"tf":1.4142135623730951},"LSM303DLH":{"tf":1.4142135623730951},"LSM9DS0":{"tf":1.4142135623730951},"LSM303AGR":{"tf":1.4142135623730951},"LSM303D":{"tf":1.4142135623730951},"GroveUltraSonic":{"tf":1.4142135623730951},"ULN200XA":{"tf":1.4142135623730951},"CWLXSSA":{"tf":1.4142135623730951},"E50HX":{"tf":1.4142135623730951},"H803X":{"tf":1.4142135623730951},"HDXXVXTA":{"tf":1.4142135623730951},"HWXPXX":{"tf":1.4142135623730951},"GroveWFS":{"tf":1.4142135623730951}},"df":250}}},"StarterKit":{"root":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"Joystick12":{"tf":1},"A110X":{"tf":1},"vdiv":{"tf":1},"NUNCHUCK":{"tf":1},"CJQ4435":{"tf":1},"Hmc5883l":{"tf":1},"MD":{"tf":1},"GroveVDiv":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"ENC03R":{"tf":1}},"df":11},"t":{"docs":{"RFR359F":{"tf":1}},"df":1}}}}},"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"Light":{"tf":1},"Microphone":{"tf":1},"Temperature":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveButton":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"GroveTemp":{"tf":1},"Rotary":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"Grove":{"tf":1},"Jhd1313m1":{"tf":1},"Led":{"tf":1}},"df":18}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"GroveLEDBar":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"WFS":{"tf":1},"Water":{"tf":1},"MY9221 ":{"tf":1},"PPD42NS":{"tf":1},"TSL2561":{"tf":1},"Grove":{"tf":1},"GUVAS12D":{"tf":1},"GroveMoisture":{"tf":1},"GroveWater":{"tf":1},"MQ5":{"tf":1},"GroveWFS":{"tf":1}},"df":15}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"RotaryEncoder":{"tf":1},"OTP538U":{"tf":1},"RPR220":{"tf":1},"Speaker":{"tf":1},"YG1006":{"tf":1},"Grove":{"tf":1},"GroveMoisture":{"tf":1},"GroveSpeaker":{"tf":1},"MQ2":{"tf":1}},"df":12}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"BISS0001":{"tf":1},"MPR121":{"tf":1}},"df":5}}}}},"Brief":{"root":{"1":{"2":{"docs":{"ADS1015":{"tf":1},"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"PCA9685":{"tf":1}},"df":5},"6":{"docs":{"ADS1115":{"tf":1},"NLGPIO16":{"tf":1},"PCA9685":{"tf":1},"BH1749":{"tf":1}},"df":4},"docs":{"DS2413":{"tf":1},"dsb09104":{"tf":1},"DS18B20":{"tf":1}},"df":3},"2":{"0":{"0":{"docs":{"TA12200":{"tf":1}},"df":1},"docs":{"ZFM20":{"tf":1}},"df":1},"4":{"docs":{"HX711":{"tf":1}},"df":1},"docs":{"Joystick12":{"tf":1},"dg2":{"tf":1}},"df":2,"n":{"docs":{},"df":0,"d":{"docs":{"DSB29":{"tf":1}},"df":1}}},"3":{"docs":{"MMA7660":{"tf":1},"BMM150":{"tf":1},"Adxl345":{"tf":1},"BMG160":{"tf":1},"Pulsensor":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"H3LIS331DL":{"tf":1}},"df":12},"4":{"0":{"0":{"docs":{},"df":0,"g":{"docs":{"H3LIS331DL":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"6":{"7":{"1":{"3":{"docs":{"T6713":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{"ss6":{"tf":1}},"df":1},"7":{"docs":{"TM1637":{"tf":1}},"df":1},"9":{"docs":{"BMX055":{"tf":1},"BNO055":{"tf":1}},"df":2},"docs":{},"df":0,"a":{"1":{"1":{"0":{"docs":{},"df":0,"x":{"docs":{"A110X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"MMA7660":{"tf":1},"UARTAT":{"tf":1},"dsb09104":{"tf":1},"dg2":{"tf":1},"MS5611":{"tf":1},"P9813":{"tf":1},"LP8860":{"tf":1},"Electromagnet":{"tf":1},"A110X":{"tf":1},"SSD1351":{"tf":1},"ST7735":{"tf":1},"mma8451":{"tf":1},"AdafruitMS1438":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"AM2315":{"tf":1},"T6713":{"tf":1},"T8100":{"tf":1},"TCS37727":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"TB7300":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"RN2903":{"tf":1},"MICSV89":{"tf":1},"MY9221 ":{"tf":1},"NMEAGPS":{"tf":1},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"NLGPIO16":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"PCA9685":{"tf":1},"RHUSB":{"tf":1},"OZW":{"tf":1},"OTP538U":{"tf":1},"PN532":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1},"SmartDrive":{"tf":1},"SM130":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"RF22":{"tf":1},"StepMotor":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TCA9548A":{"tf":1},"TSL2561":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"VCAP":{"tf":1},"VEML6070":{"tf":1},"NUNCHUCK":{"tf":1},"WT5001":{"tf":1},"XBee":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"SX6119":{"tf":1},"Pulsensor":{"tf":1},"MMC35240":{"tf":1}},"df":104},"a":{"1":{"0":{"2":{"docs":{"APA102":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{},"df":0,"s":{"9":{"9":{"3":{"0":{"docs":{"APDS9930":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"x":{"docs":{},"df":0,"i":{"docs":{"MMA7660":{"tf":1},"Joystick12":{"tf":1},"BMM150":{"tf":1},"mma8451":{"tf":1},"Adxl345":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"mma8452q":{"tf":1},"BMX055":{"tf":1},"BMG160":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"H3LIS331DL":{"tf":1},"BNO055":{"tf":1},"KX122":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"MAG3110":{"tf":1},"MMC35240":{"tf":1},"ENC03R":{"tf":1},"KXCJK1013":{"tf":1}},"df":26}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MMA7660":{"tf":1},"mma8451":{"tf":1},"Adxl345":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"mma8452q":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"H3LIS331DL":{"tf":1},"MPU9150":{"tf":1},"KX122":{"tf":1},"KXTJ3":{"tf":1},"KXCJK1013":{"tf":1}},"df":23,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"LSM303DLH":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"HP20X":{"tf":1}},"df":1}}}}}}},"d":{"8":{"2":{"3":{"2":{"docs":{"AD8232":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"DS2413":{"tf":1}},"df":1}}}}},"c":{"1":{"2":{"1":{"docs":{},"df":0,"c":{"0":{"2":{"1":{"docs":{"ADC121C021":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2},"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"APA102":{"tf":1},"adafruitss":{"tf":1},"SSD1351":{"tf":1},"ST7735":{"tf":1},"PN532":{"tf":1},"Pulsensor":{"tf":1}},"df":6,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"mma8451":{"tf":1}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"s":{"1":{"4":{"3":{"8":{"docs":{"AdafruitMS1438":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}}}}},"x":{"docs":{},"df":0,"l":{"3":{"4":{"5":{"docs":{"Adxl345":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{},"df":0,"s":{"6":{"1":{"0":{"docs":{"ADXRS610":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"i":{"docs":{},"df":0,"s":{"1":{"6":{"4":{"4":{"8":{"docs":{"ADIS16448":{"tf":1},"ADXL335":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"SmartDrive":{"tf":1}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"Joystick12":{"tf":1},"HX711":{"tf":1},"DFREC":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"Microphone":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"ADC121C021":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1},"MMA7361":{"tf":1},"GUVAS12D":{"tf":1},"ENC03R":{"tf":1}},"df":16}}}},"g":{"docs":{},"df":0,"l":{"docs":{"GroveRotary":{"tf":1},"Rotary":{"tf":1}},"df":2}}},"m":{"2":{"3":{"1":{"5":{"docs":{"AM2315":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{"TCS37727":{"tf":1}},"df":1,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"MAX44000":{"tf":1},"APDS9930":{"tf":1}},"df":2}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"MS5611":{"tf":1}},"df":1}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"T6713":{"tf":1},"T8100":{"tf":1}},"df":2}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"INA132":{"tf":1}},"df":1}}}}}},"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"dsb09104":{"tf":1},"dg2":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1}},"df":4},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"dsb09104":{"tf":1},"dg2":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1}},"df":4}}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"MQ303A":{"tf":1},"MQ3":{"tf":1}},"df":2}}}}}},"t":{"4":{"2":{"docs":{},"df":0,"q":{"docs":{},"df":0,"t":{"1":{"0":{"7":{"0":{"docs":{"AT42QT1070":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"AT42QT1070":{"tf":1}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"BMPX8X":{"tf":1},"MPL3115A2":{"tf":1}},"df":2}}}}}}}},"b":{"docs":{},"df":0,"p":{"docs":{"ABP":{"tf":1}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"BNO055":{"tf":1}},"df":1}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"LoL":{"tf":1}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"SX6119":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1}},"df":13,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{"MMA7660":{"tf":1}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{"PPD42NS":{"tf":1}},"df":1}}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"MPR121":{"tf":1}},"df":1}}}}}}}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"BMM150":{"tf":1},"MAX44000":{"tf":1},"DFREC":{"tf":1},"GP2Y0A":{"tf":1},"Light":{"tf":1},"DFRORP":{"tf":1},"DFRPH":{"tf":1},"LM35":{"tf":1},"Temperature":{"tf":1},"MS5611":{"tf":1},"A110X":{"tf":1},"DSB29":{"tf":1},"AM2315":{"tf":1},"SHT1X":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRotary":{"tf":1},"GroveTemp":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"Water":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"MICSV89":{"tf":1},"RHUSB":{"tf":1},"OTP538U":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"TCS3414CS":{"tf":1},"TH02":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TSL2561":{"tf":1},"TEX00":{"tf":1},"VEML6070":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"AT42QT1070":{"tf":1},"BMPX8X":{"tf":1},"BMX055":{"tf":1},"Pulsensor":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"DS18B20":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"EMG":{"tf":1},"GroveGSR":{"tf":1},"GSR":{"tf":1},"Grove":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"GroveEMG":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1},"HCSR04":{"tf":1},"HDC1000":{"tf":1},"ABP":{"tf":1},"IMS":{"tf":1},"BNO055":{"tf":1},"KX122":{"tf":1},"KXTJ3":{"tf":1},"Loudness":{"tf":1},"MAXDS3231M":{"tf":1},"MMC35240":{"tf":1},"MHZ16":{"tf":1},"MCP9808":{"tf":1},"MQ2":{"tf":1},"MQ3":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1},"MQ7":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1},"ECS1030":{"tf":1},"MPL3115A2":{"tf":1},"LIDARLITEV3":{"tf":1},"O2":{"tf":1},"LDT0028":{"tf":1},"MAX30100":{"tf":1},"Flex":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"APDS9930":{"tf":1},"SensorTemplate":{"tf":1},"LSM9DS0":{"tf":1},"GroveUltraSonic":{"tf":1},"CWLXSSA":{"tf":1},"HWXPXX":{"tf":1},"GroveWFS":{"tf":1}},"df":108}}}},"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"adafruitss":{"tf":1},"ES9257":{"tf":1},"ES08A":{"tf":1},"servo":{"tf":1}},"df":4},"i":{"docs":{},"df":0,"c":{"docs":{"GPRS":{"tf":1},"GroveGPRS":{"tf":1}},"df":2}}},"i":{"docs":{"T6713":{"tf":1}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"SCAM":{"tf":1},"WT5001":{"tf":1},"MHZ16":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1}},"df":5}}}},"m":{"docs":{},"df":0,"i":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1}},"df":3,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"RPR220":{"tf":1}},"df":3}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"SX1276":{"tf":1}},"df":1}}}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"TM1637":{"tf":1}},"df":1}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"DS2413":{"tf":1},"ss6":{"tf":1},"waterlevel":{"tf":1}},"df":3}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"adafruitss":{"tf":1},"AdafruitMS1438":{"tf":1},"LCDKS":{"tf":1}},"df":3}}},"j":{"docs":{},"df":0,"i":{"docs":{"P9813":{"tf":1}},"df":1}}},"t":{"1":{"docs":{},"df":0,"x":{"docs":{"SHT1X":{"tf":1}},"df":1}},"docs":{},"df":0}},"m":{"1":{"3":{"0":{"docs":{"SM130":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"dg2":{"tf":1},"ss6":{"tf":1}},"df":2,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"SmartDrive":{"tf":1}},"df":1}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"MQ2":{"tf":1},"MQ3":{"tf":1}},"df":2}}}},"s":{"docs":{},"df":0,"d":{"1":{"3":{"5":{"1":{"docs":{"SSD1351":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"7":{"7":{"3":{"5":{"docs":{"ST7735":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"StepMotor":{"tf":1},"ULN200XA":{"tf":1}},"df":2}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"LPD8806":{"tf":1}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"GroveSlide":{"tf":1},"Slide":{"tf":1}},"df":2}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"MS5803":{"tf":1}},"df":1}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Speaker":{"tf":1},"GroveSpeaker":{"tf":1}},"df":2}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"RGBRingCoder":{"tf":1},"APDS9930":{"tf":1}},"df":2,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"mma8452q":{"tf":1}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"RF22":{"tf":1}},"df":1}}}}}}}}}}}}},"i":{"docs":{"RSC":{"tf":1},"ILI9341":{"tf":1}},"df":2,"/":{"3":{"docs":{"MAX31723":{"tf":1}},"df":1},"docs":{},"df":0}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"OTP538U":{"tf":1}},"df":1}}}}},"i":{"1":{"1":{"3":{"2":{"docs":{"SI1132":{"tf":1}},"df":1},"docs":{},"df":0},"4":{"5":{"docs":{"SI114x":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"7":{"0":{"0":{"5":{"docs":{"SI7005":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1}},"df":3}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"ENC03R":{"tf":1}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"SM130":{"tf":1}},"df":1}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"SX6119":{"tf":1}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"HLG150H":{"tf":1}},"df":1}}}}},"x":{"1":{"2":{"7":{"6":{"docs":{"SX1276":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"6":{"1":{"1":{"9":{"docs":{"SX6119":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"GroveGSR":{"tf":1},"GSR":{"tf":1}},"df":2}}},"r":{"0":{"4":{"docs":{"HCSR04":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"7":{"3":{"6":{"1":{"docs":{"MMA7361":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"4":{"5":{"5":{"docs":{"MMA7455":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"6":{"6":{"0":{"docs":{"MMA7660":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"8":{"4":{"5":{"1":{"docs":{"mma8451":{"tf":1}},"df":1,"q":{"docs":{"mma8452q":{"tf":1}},"df":1}},"3":{"docs":{},"df":0,"q":{"docs":{"mma8453q":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"6":{"5":{"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"mma8652fc":{"tf":1}},"df":1}}},"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"mma8653fc":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"c":{"3":{"5":{"2":{"4":{"0":{"docs":{"MMC35240":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"x":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"HT9170":{"tf":1}},"df":1,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"TCA9548A":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"AD8232":{"tf":1}},"df":1}}}},"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"MQ7":{"tf":1},"MQ9":{"tf":1}},"df":2}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"AdafruitMS1438":{"tf":1},"SmartDrive":{"tf":1},"StepMotor":{"tf":1},"L298":{"tf":1},"MD":{"tf":1}},"df":5}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"BISS0001":{"tf":1}},"df":1}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"T6713":{"tf":1},"NMEAGPS":{"tf":1},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"NLGPIO16":{"tf":1},"SM130":{"tf":1},"RF22":{"tf":1},"WT5001":{"tf":1},"XBee":{"tf":1},"ZFM20":{"tf":1},"HM11":{"tf":1},"BMX055":{"tf":1},"DS1307":{"tf":1},"M24LR64E":{"tf":1},"GPRS":{"tf":1},"GroveGPRS":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"SX1276":{"tf":1},"GROVESCAM":{"tf":1},"HMTRP":{"tf":1},"ENC03R":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1},"ULN200XA":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1}},"df":27,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"GroveCircularLED":{"tf":1}},"df":1}}}}}},"b":{"docs":{},"df":0,"u":{"docs":{"T3311":{"tf":1}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"Moisture":{"tf":1},"GroveMoisture":{"tf":1},"IMS":{"tf":1}},"df":3}}}}},"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"CJQ4435":{"tf":1}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"RSC":{"tf":1}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"MICSV89":{"tf":1}},"df":1,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"Microphone":{"tf":1}},"df":1}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"RN2903":{"tf":1},"MCP2515":{"tf":1},"MCP9808":{"tf":1}},"df":3}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"dsb09104":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1}},"df":3}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"MQ2":{"tf":1},"MQ4":{"tf":1}},"df":2}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"MS5803":{"tf":1},"HCSR04":{"tf":1},"LIDARLITEV3":{"tf":1}},"df":3}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"MLX90614":{"tf":1}},"df":1}}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"MMC35240":{"tf":1}},"df":1}}}}},"s":{"5":{"6":{"1":{"1":{"docs":{"MS5611":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"0":{"3":{"docs":{"MS5803":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"y":{"9":{"2":{"2":{"1":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1}},"df":3},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"l":{"docs":{},"df":0,"x":{"9":{"0":{"6":{"1":{"4":{"docs":{"MLX90614":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"q":{"2":{"docs":{"MQ2":{"tf":1}},"df":1},"3":{"0":{"3":{"docs":{},"df":0,"a":{"docs":{"MQ303A":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{"MQ3":{"tf":1}},"df":1},"4":{"docs":{"MQ4":{"tf":1}},"df":1},"5":{"docs":{"MQ5":{"tf":1}},"df":1},"6":{"docs":{"MQ6":{"tf":1}},"df":1},"7":{"docs":{"MQ7":{"tf":1}},"df":1},"8":{"docs":{"MQ8":{"tf":1}},"df":1},"9":{"docs":{"MQ9":{"tf":1}},"df":1},"docs":{},"df":0},"p":{"3":{"docs":{"WT5001":{"tf":1}},"df":1},"docs":{},"df":0,"u":{"9":{"1":{"5":{"0":{"docs":{"MPU9150":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"l":{"3":{"1":{"1":{"5":{"docs":{},"df":0,"a":{"2":{"docs":{"MPL3115A2":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"1":{"2":{"1":{"docs":{"MPR121":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"HKA5":{"tf":1}},"df":1}}}},"x":{"5":{"4":{"8":{"7":{"docs":{"MAX5487":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"MAXSONAREZ":{"tf":1},"MB704X":{"tf":1}},"df":2}}}}},"d":{"docs":{},"df":0,"s":{"3":{"2":{"3":{"1":{"docs":{},"df":0,"m":{"docs":{"MAXDS3231M":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"g":{"3":{"1":{"1":{"0":{"docs":{"MAG3110":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MMC35240":{"tf":1}},"df":1,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MAG3110":{"tf":1}},"df":1}}}}}}}}},"b":{"7":{"0":{"4":{"docs":{},"df":0,"x":{"docs":{"MB704X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{},"df":0,"z":{"1":{"6":{"docs":{"MHZ16":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"p":{"2":{"5":{"1":{"5":{"docs":{"MCP2515":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"9":{"8":{"0":{"8":{"docs":{"MCP9808":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"i":{"2":{"docs":{},"df":0,"c":{"docs":{"MMA7660":{"tf":1},"ADC121C021":{"tf":1},"SI7005":{"tf":1},"MD":{"tf":1},"H3LIS331DL":{"tf":1},"IMS":{"tf":1}},"df":6}},"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"RFR359F":{"tf":1}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{"BH1750":{"tf":1}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"BNO055":{"tf":1}},"df":1}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"MAX44000":{"tf":1},"GP2Y0A":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1}},"df":4}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"TMP006":{"tf":1}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"MPU9150":{"tf":1}},"df":1}}}}}}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{"ECS1030":{"tf":1}},"df":1}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"APA102":{"tf":1}},"df":1}}}}},"r":{"docs":{"GP2Y0A":{"tf":1},"OTP538U":{"tf":1},"RPR220":{"tf":1},"TMP006":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1}},"df":6}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"MMA7660":{"tf":1},"HX711":{"tf":1},"ADC121C021":{"tf":1},"Adxl345":{"tf":1},"TCS37727":{"tf":1},"SI7005":{"tf":1},"TSL2561":{"tf":1},"LIS2DS12":{"tf":1},"lis3dh":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"BMP280":{"tf":1},"HTU21D":{"tf":1},"LPD8806":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"H3LIS331DL":{"tf":1},"L3GD20":{"tf":1},"MAG3110":{"tf":1},"MAX5487":{"tf":1},"MAX31723":{"tf":1},"MAX31855":{"tf":1},"KXCJK1013":{"tf":1}},"df":26}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"GP2Y0A":{"tf":1},"RFR359F":{"tf":1},"HCSR04":{"tf":1},"LIDARLITEV3":{"tf":1}},"df":4}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"SSD1351":{"tf":1},"TM1637":{"tf":1},"Jhd1313m1":{"tf":1.4142135623730951},"Lcm1602":{"tf":1.4142135623730951}},"df":4}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"dg2":{"tf":1}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"vdiv":{"tf":1},"GroveVDiv":{"tf":1}},"df":2}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"INA132":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"Led":{"tf":1}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"DS2413":{"tf":1},"L298":{"tf":1},"HT9170":{"tf":1}},"df":3}},"s":{"docs":{},"df":0,"t":{"docs":{"PPD42NS":{"tf":1}},"df":1}}},"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"UARTAT":{"tf":1},"ADIS16448":{"tf":1},"ADXL335":{"tf":1}},"df":3}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"HT9170":{"tf":1}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"BISS0001":{"tf":1}},"df":1}}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"DSB29":{"tf":1}},"df":1}}}}}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"MMA7361":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"WheelEncoder":{"tf":1},"ADXRS610":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"HKA5":{"tf":1}},"df":8}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"VCAP":{"tf":1},"L298":{"tf":1},"ElDriver":{"tf":1},"GroveElDriver":{"tf":1},"MD":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"ULN200XA":{"tf":1}},"df":11}}}}},"s":{"1":{"3":{"0":{"7":{"docs":{"DS1307":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"0":{"8":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"DS1808LC":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0,"b":{"2":{"0":{"docs":{"DS18B20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"f":{"docs":{"HT9170":{"tf":1}},"df":1}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"M24LR64E":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"ULN200XA":{"tf":1}},"df":1}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"DS2413":{"tf":1},"Pulsensor":{"tf":1},"DS18B20":{"tf":1},"ElDriver":{"tf":1},"GroveElDriver":{"tf":1},"MAX31723":{"tf":1}},"df":6}},"i":{"docs":{"NUNCHUCK":{"tf":1}},"df":1}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"WheelEncoder":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"GroveWater":{"tf":1},"GroveWFS":{"tf":1}},"df":5}}}},"t":{"5":{"0":{"0":{"1":{"docs":{"WT5001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{"MB704X":{"tf":1}},"df":1}},"c":{"docs":{"Pulsensor":{"tf":1}},"df":1,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"DS2413":{"tf":1},"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"NLGPIO16":{"tf":1},"PCA9685":{"tf":1}},"df":6}}}}}},"o":{"2":{"docs":{"T6713":{"tf":1},"MG811":{"tf":1},"MHZ16":{"tf":1},"CWLXSSA":{"tf":1}},"df":4},"docs":{"MQ9":{"tf":1}},"df":1,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2},"s":{"docs":{},"df":0,"s":{"docs":{"Hmc5883l":{"tf":1}},"df":1}},"c":{"docs":{},"df":0,"t":{"docs":{"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":2}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"UARTAT":{"tf":1}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{"TB7300":{"tf":1}},"df":1}}}},"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"HX711":{"tf":1},"ADC121C021":{"tf":1},"TCS37727":{"tf":1},"MAX31855":{"tf":1}},"df":4}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"DFREC":{"tf":1},"ECEZO":{"tf":1}},"df":2}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"P9813":{"tf":1},"LP8860":{"tf":1},"T8100":{"tf":1},"PCA9685":{"tf":1},"SmartDrive":{"tf":1},"NUNCHUCK":{"tf":1},"LPD8806":{"tf":1},"DS1808LC":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"HLG150H":{"tf":1},"MCP2515":{"tf":1}},"df":12}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"GroveO2":{"tf":1},"O2":{"tf":1}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"MQ4":{"tf":1}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"TCS37727":{"tf":1},"TCS3414CS":{"tf":1},"BH1749":{"tf":1},"APDS9930":{"tf":1}},"df":4}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"Collision":{"tf":1},"GroveCollision":{"tf":1}},"df":2}}}},"i":{"docs":{},"df":0,"l":{"docs":{"TB7300":{"tf":1}},"df":1}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"GroveCircularLED":{"tf":1}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"ECEZO":{"tf":1}},"df":1}}}}}},"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"SCAM":{"tf":1},"GROVESCAM":{"tf":1}},"df":2}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"VCAP":{"tf":1}},"df":1}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"MQ7":{"tf":1},"MQ9":{"tf":1}},"df":2}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"TA12200":{"tf":1},"ECS1030":{"tf":1}},"df":2}}}}}},"j":{"docs":{},"df":0,"q":{"4":{"4":{"3":{"5":{"docs":{"CJQ4435":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"DS1307":{"tf":1},"MAXDS3231M":{"tf":1}},"df":2}}},"i":{"docs":{},"df":0,"p":{"docs":{"EHR":{"tf":1},"GroveEHR":{"tf":1}},"df":2}}},"n":{"docs":{},"df":0,"g":{"docs":{"MQ4":{"tf":1}},"df":1}},"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{"CWLXSSA":{"tf":1}},"df":1}}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1},"HX711":{"tf":1},"PCA9685":{"tf":1},"BH1749":{"tf":1}},"df":5},"s":{"docs":{},"df":0,"s":{"0":{"0":{"0":{"1":{"docs":{"BISS0001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"adafruitss":{"tf":1},"GP2Y0A":{"tf":1},"UARTAT":{"tf":1},"PN532":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"TM1637":{"tf":1},"SX6119":{"tf":1},"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"RSC":{"tf":1},"ILI9341":{"tf":1}},"df":14},"i":{"docs":{},"df":0,"c":{"docs":{"Grove":{"tf":1}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"HP20X":{"tf":1}},"df":1,"r":{"docs":{"MS5611":{"tf":1}},"df":1}}}}},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"GroveLEDBar":{"tf":1}},"df":1}}}}},"u":{"docs":{"MCP2515":{"tf":1}},"df":1,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"GroveButton":{"tf":1},"Button":{"tf":1}},"df":2}}},"a":{"docs":{},"df":0,"n":{"docs":{"MQ2":{"tf":1},"MQ6":{"tf":1}},"df":2}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Buzzer":{"tf":1}},"df":1}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"nrf8001":{"tf":1},"HM11":{"tf":1}},"df":2}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"TCA9548A":{"tf":1},"ADXRS610":{"tf":1}},"df":2}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"L298":{"tf":1}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{"BMPX8X":{"tf":1}},"df":1},"x":{"0":{"5":{"5":{"docs":{"BMX055":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"2":{"2":{"0":{"docs":{"BMA220":{"tf":1}},"df":1},"docs":{},"df":0},"5":{"0":{"docs":{"BMA250E":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"BMG160":{"tf":1},"BMI160":{"tf":1},"BMA220":{"tf":1},"BMA250E":{"tf":1}},"df":4}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"ADXRS610":{"tf":1},"RSC":{"tf":1}},"df":2}}}},"h":{"1":{"7":{"4":{"9":{"docs":{"BH1749":{"tf":1}},"df":1},"docs":{},"df":0},"5":{"0":{"docs":{"BH1750":{"tf":1}},"df":1},"docs":{},"df":0},"9":{"2":{"docs":{"BH1792":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"p":{"9":{"8":{"1":{"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"P9813":{"tf":1}},"df":1}}}}}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2}},"c":{"docs":{},"df":0,"a":{"9":{"6":{"8":{"5":{"docs":{"adafruitss":{"tf":1},"PCA9685":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"r":{"docs":{},"df":0,"o":{"docs":{"HMTRP":{"tf":1}},"df":1,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"MAX44000":{"tf":1},"GroveUltraSonic":{"tf":1}},"df":2}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"HWXPXX":{"tf":1}},"df":1}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"MS5611":{"tf":1},"MS5803":{"tf":1},"BMPX8X":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"BMP280":{"tf":1},"ABP":{"tf":1},"MPL3115A2":{"tf":1},"RSC":{"tf":1}},"df":10}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"MCP9808":{"tf":1}},"df":1}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"DFRORP":{"tf":1}},"df":1,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"GroveSlide":{"tf":1},"Slide":{"tf":1},"MAX5487":{"tf":1}},"df":3}}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"HLG150H":{"tf":1}},"df":1}}}},"h":{"docs":{"DFRPH":{"tf":1}},"df":1},"w":{"docs":{},"df":0,"m":{"docs":{"PCA9685":{"tf":1}},"df":1}},"n":{"5":{"3":{"2":{"docs":{"PN532":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"docs":{},"df":0,"d":{"4":{"2":{"docs":{},"df":0,"n":{"docs":{"PPD42NS":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"Pulsensor":{"tf":1},"MAX30100":{"tf":1}},"df":2}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"HKA5":{"tf":1}},"df":1}}}}}},"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"GPRS":{"tf":1},"GroveGPRS":{"tf":1}},"df":2}}}}},"m":{"docs":{"HKA5":{"tf":1}},"df":1},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"ISD1820":{"tf":1}},"df":1}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"MQ2":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1}},"df":3}}}}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":2}}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{"LDT0028":{"tf":1}},"df":1}}},"r":{"docs":{"BISS0001":{"tf":1}},"df":1}}},"o":{"2":{"docs":{"GroveO2":{"tf":1},"O2":{"tf":1}},"df":2},"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"DFRORP":{"tf":1}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MAX30100":{"tf":1}},"df":1}}}},"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"GroveO2":{"tf":1},"O2":{"tf":1}},"df":2}}}}},"r":{"docs":{},"df":0,"p":{"docs":{"DFRORP":{"tf":1}},"df":1},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"OTP538U":{"tf":1},"BNO055":{"tf":1}},"df":2}}}}},"l":{"docs":{"SSD1351":{"tf":1}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{"RHUSB":{"tf":1}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"z":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"OZW":{"tf":1}},"df":1}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"SmartDrive":{"tf":1}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"LIDARLITEV3":{"tf":1}},"df":1}}}},"t":{"docs":{},"df":0,"p":{"5":{"3":{"8":{"docs":{},"df":0,"u":{"docs":{"OTP538U":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"ADS1015":{"tf":1},"ADS1115":{"tf":1}},"df":2}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"RPR220":{"tf":1}},"df":1}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"DFRORP":{"tf":1}},"df":1}}}},"l":{"docs":{"HTU21D":{"tf":1}},"df":1,"a":{"docs":{},"df":0,"y":{"docs":{"GroveRelay":{"tf":1},"Relay":{"tf":1}},"df":2}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"SM130":{"tf":1}},"df":1,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"PN532":{"tf":1}},"df":1}}}}}}}},"l":{"docs":{"DS1307":{"tf":1}},"df":1,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"MAXDS3231M":{"tf":1}},"df":1}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"SX6119":{"tf":1}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"ISD1820":{"tf":1}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"GroveGSR":{"tf":1},"GSR":{"tf":1}},"df":2}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"Flex":{"tf":1}},"df":1}}}},"v":{"docs":{"LoL":{"tf":1}},"df":1}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"AD8232":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"MAX30100":{"tf":1},"BH1792":{"tf":1}},"df":5}},"n":{"docs":{},"df":0,"g":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"URM37":{"tf":1},"UltraSonic":{"tf":1},"MB704X":{"tf":1}},"df":3}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"RN2903":{"tf":1},"GPRS":{"tf":1},"GroveGPRS":{"tf":1}},"df":3}}}},"g":{"docs":{},"df":0,"b":{"docs":{"P9813":{"tf":1},"RGBRingCoder":{"tf":1},"LPD8806":{"tf":1}},"df":3}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"Rotary":{"tf":1}},"df":3}}}},"h":{"docs":{},"df":0,"m":{"docs":{"RPR220":{"tf":1},"BH1749":{"tf":1},"BH1792":{"tf":1}},"df":3}}},"n":{"2":{"9":{"0":{"3":{"docs":{"RN2903":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{"RHUSB":{"tf":1}},"df":1},"f":{"2":{"2":{"docs":{"RF22":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{"HMTRP":{"tf":1}},"df":1,"r":{"3":{"5":{"9":{"docs":{},"df":0,"f":{"docs":{"RFR359F":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"i":{"docs":{},"df":0,"d":{"docs":{"SM130":{"tf":1}},"df":1}}},"p":{"docs":{},"df":0,"r":{"2":{"2":{"0":{"docs":{"RPR220":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"RGBRingCoder":{"tf":1}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"DS1307":{"tf":1},"MAXDS3231M":{"tf":1}},"df":2}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"Joystick12":{"tf":1}},"df":1}}}}}}},"h":{"docs":{},"df":0,"d":{"1":{"3":{"1":{"3":{"docs":{},"df":0,"m":{"1":{"docs":{"Jhd1313m1":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"BMM150":{"tf":1}},"df":1}}}}}}},"n":{"docs":{"dsb09104":{"tf":1},"dg2":{"tf":1}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"UARTAT":{"tf":1},"GPRS":{"tf":1},"Grove":{"tf":1},"GroveGPRS":{"tf":1}},"df":4}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1},"GroveCircularLED":{"tf":1},"GroveElectromagnet":{"tf":1},"GroveLed":{"tf":1},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1},"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"SX6119":{"tf":1},"Grove":{"tf":1},"Hmc5883l":{"tf":1},"Itg3200":{"tf":1},"GUVAS12D":{"tf":1},"Collision":{"tf":1},"GroveCollision":{"tf":1},"INA132":{"tf":1},"GroveElDriver":{"tf":1},"GroveEMG":{"tf":1},"GroveGPRS":{"tf":1},"MD":{"tf":1},"GroveMoisture":{"tf":1},"GroveO2":{"tf":1},"GroveSpeaker":{"tf":1},"ISD1820":{"tf":1},"GroveVDiv":{"tf":1},"GroveWater":{"tf":1}},"df":38}}}},"a":{"docs":{"MICSV89":{"tf":1},"MQ2":{"tf":1},"MQ4":{"tf":1},"MQ5":{"tf":1.4142135623730951},"MQ6":{"tf":1},"MQ8":{"tf":1},"MQ9":{"tf":1}},"df":7,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"GroveGSR":{"tf":1},"GSR":{"tf":1}},"df":2}}}}},"p":{"docs":{"NMEAGPS":{"tf":1}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{"NLGPIO16":{"tf":1}},"df":1}},"r":{"docs":{"GPRS":{"tf":1},"GroveGPRS":{"tf":1}},"df":2}},"y":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"ADXRS610":{"tf":1},"ENC03R":{"tf":1}},"df":2,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"BMG160":{"tf":1},"BMI160":{"tf":1},"LSM6DS3H":{"tf":1},"LSM6DSL":{"tf":1},"Itg3200":{"tf":1},"L3GD20":{"tf":1}},"df":6,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"LSM9DS0":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{"GroveGSR":{"tf":1},"GSR":{"tf":1}},"df":2}}},"h":{"8":{"0":{"3":{"docs":{},"df":0,"x":{"docs":{"H803X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{"L298":{"tf":1}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"AD8232":{"tf":1},"EHR":{"tf":1},"GroveEHR":{"tf":1},"MAX30100":{"tf":1},"BH1792":{"tf":1}},"df":5}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"dsb09104":{"tf":1}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"TB7300":{"tf":1},"ABP":{"tf":1}},"df":2}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"A110X":{"tf":1}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"HWXPXX":{"tf":1}},"df":1}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"AM2315":{"tf":1},"SHT1X":{"tf":1},"RHUSB":{"tf":1},"TH02":{"tf":1},"SI7005":{"tf":1},"T3311":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"HTU21D":{"tf":1},"HDC1000":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1}},"df":13}}}},"c":{"docs":{"HCSR04":{"tf":1}},"df":1},"d":{"4":{"4":{"7":{"8":{"0":{"docs":{"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"c":{"1":{"0":{"0":{"0":{"docs":{"HDC1000":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"v":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"HDXXVXTA":{"tf":1}},"df":1}}}}}}},"p":{"2":{"0":{"docs":{},"df":0,"x":{"docs":{"HP20X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"HP20X":{"tf":1},"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":3}}},"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"MQ8":{"tf":1}},"df":1}}}}}}},"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"HWXPXX":{"tf":1}},"df":1}}}}}},"l":{"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"2":{"0":{"docs":{"L3GD20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"AD8232":{"tf":1},"adafruitss":{"tf":1},"MS5611":{"tf":1},"OZW":{"tf":1},"Grove":{"tf":1},"MHZ16":{"tf":1},"BH1792":{"tf":1},"servo":{"tf":1}},"df":8}}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"Light":{"tf":1},"P9813":{"tf":1},"LP8860":{"tf":1},"TCS37727":{"tf":1},"GroveLight":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"TSL2561":{"tf":1},"BH1750":{"tf":1},"DS1808LC":{"tf":1},"Led":{"tf":1},"HLG150H":{"tf":1},"APDS9930":{"tf":1}},"df":13}}},"n":{"docs":{},"df":0,"e":{"docs":{"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1}},"df":2}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"MQ2":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1}},"df":3}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1},"LP8860":{"tf":1},"GroveLEDBar":{"tf":1.4142135623730951},"GroveCircularLED":{"tf":1.4142135623730951},"GroveLed":{"tf":1},"MY9221 ":{"tf":1},"LPD8806":{"tf":1},"Led":{"tf":1},"LoL":{"tf":1}},"df":10},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"waterlevel":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{"dsb09104":{"tf":1},"dg2":{"tf":1},"DSB29":{"tf":1},"ss6":{"tf":1},"SI1132":{"tf":1},"SI114x":{"tf":1},"SI7005":{"tf":1}},"df":7},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"HKA5":{"tf":1}},"df":1}}}},"p":{"8":{"8":{"6":{"0":{"docs":{"LP8860":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"g":{"docs":{"MQ2":{"tf":1},"MQ5":{"tf":1},"MQ6":{"tf":1}},"df":3}},"c":{"docs":{},"df":0,"d":{"docs":{"ST7735":{"tf":1},"Jhd1313m1":{"tf":1},"Lcm1602":{"tf":1},"LCDKS":{"tf":1},"ILI9341":{"tf":1}},"df":5},"m":{"1":{"6":{"0":{"2":{"docs":{"Lcm1602":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"RN2903":{"tf":1}},"df":1,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"SX1276":{"tf":1}},"df":1}}}}}},"w":{"docs":{"nrf8001":{"tf":1},"HM11":{"tf":1}},"df":2},"t":{"docs":{"LoL":{"tf":1}},"df":1},"l":{"docs":{"LoL":{"tf":1}},"df":1},"u":{"docs":{},"df":0,"d":{"docs":{"Loudness":{"tf":1}},"df":1}}},"v":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"APDS9002":{"tf":1}},"df":1}}}}},"e":{"5":{"0":{"docs":{},"df":0,"h":{"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"5":{"0":{"docs":{},"df":0,"h":{"5":{"docs":{"E50HX":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0,"x":{"docs":{"E50HX":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0,"l":{"docs":{"ElDriver":{"tf":1},"GroveElDriver":{"tf":1}},"df":2,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"DFREC":{"tf":1},"ECEZO":{"tf":1}},"df":2,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"Electromagnet":{"tf":1},"GroveElectromagnet":{"tf":1}},"df":2}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"EMG":{"tf":1},"GroveEMG":{"tf":1}},"df":2}}}}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"ElDriver":{"tf":1},"GroveElDriver":{"tf":1}},"df":2}}}}}}}}}}}}}},"c":{"docs":{"DFREC":{"tf":1},"ECEZO":{"tf":1}},"df":2,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":2}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"dsb09104":{"tf":1},"nrf8001":{"tf":1},"HM11":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1}},"df":5}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"WheelEncoder":{"tf":1},"RotaryEncoder":{"tf":1}},"df":2}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"A110X":{"tf":1}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"DSB29":{"tf":1}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"ES9257":{"tf":1}},"df":1,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"ES08A":{"tf":1}},"df":1}}}}}},"g":{"docs":{"EMG":{"tf":1},"GroveEMG":{"tf":1}},"df":2},"i":{"docs":{},"df":0,"t":{"docs":{"Led":{"tf":1}},"df":1}}},"s":{"0":{"8":{"docs":{},"df":0,"a":{"docs":{"ES08A":{"tf":1}},"df":1}},"docs":{},"df":0},"9":{"2":{"5":{"7":{"docs":{"ES9257":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"docs":{},"df":0,"r":{"docs":{"EHR":{"tf":1},"GroveEHR":{"tf":1}},"df":2}},"z":{"0":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"docs":{},"df":0},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"MQ3":{"tf":1}},"df":1}}}}}}},"t":{"3":{"3":{"1":{"1":{"docs":{"T3311":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"8":{"1":{"0":{"0":{"docs":{"T8100":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"LM35":{"tf":1},"Temperature":{"tf":1},"AM2315":{"tf":1},"SHT1X":{"tf":1},"GroveTemp":{"tf":1},"MS5803":{"tf":1},"MLX90614":{"tf":1},"RHUSB":{"tf":1},"OTP538U":{"tf":1},"TH02":{"tf":1},"SI7005":{"tf":1},"T3311":{"tf":1},"TEAMS":{"tf":1},"TEX00":{"tf":1},"BME280":{"tf":1},"CurieImu":{"tf":1},"MAX44009":{"tf":1},"HTU21D":{"tf":1},"DS18B20":{"tf":1},"HDC1000":{"tf":1},"ABP":{"tf":1},"MCP9808":{"tf":1},"RSC":{"tf":1},"HWXPXX":{"tf":1}},"df":24}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"SensorTemplate":{"tf":1}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"T6713":{"tf":1},"T8100":{"tf":1}},"df":2}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"OTP538U":{"tf":1}},"df":1}}}}}}},"x":{"0":{"0":{"docs":{"TEX00":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"a":{"docs":{"TMP006":{"tf":1}},"df":1}},"a":{"docs":{},"df":0,"m":{"docs":{"TEAMS":{"tf":1}},"df":1}}},"h":{"0":{"2":{"docs":{"TH02":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"mma8451":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"mma8452q":{"tf":1},"MAG3110":{"tf":1}},"df":6}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"TB7300":{"tf":1}},"df":1}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"TMP006":{"tf":1}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MAX31723":{"tf":1}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"MAX31855":{"tf":1}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"s":{"3":{"4":{"1":{"4":{"docs":{},"df":0,"c":{"docs":{"TCS3414CS":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"7":{"7":{"2":{"7":{"docs":{"TCS37727":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"9":{"5":{"4":{"8":{"docs":{},"df":0,"a":{"docs":{"TCA9548A":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"b":{"7":{"3":{"0":{"0":{"docs":{"TB7300":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"NRF24L01":{"tf":1},"RF22":{"tf":1}},"df":2}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"TA12200":{"tf":1}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"TEAMS":{"tf":1},"HDXXVXTA":{"tf":1}},"df":2}}}}}}},"i":{"docs":{"KX122":{"tf":1},"KXTJ3":{"tf":1},"L3GD20":{"tf":1},"MMC35240":{"tf":1},"KXCJK1013":{"tf":1}},"df":5,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"LSM303DLH":{"tf":1},"LSM9DS0":{"tf":1}},"df":2}}}}}}},"a":{"1":{"2":{"docs":{"TA12200":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"g":{"docs":{"M24LR64E":{"tf":1}},"df":1}},"m":{"1":{"6":{"3":{"7":{"docs":{"TM1637":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"p":{"0":{"0":{"6":{"docs":{"TMP006":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"docs":{},"df":0,"p":{"2":{"2":{"3":{"docs":{"TTP223":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"TTP223":{"tf":1},"AT42QT1070":{"tf":1},"MPR121":{"tf":1}},"df":3}}},"n":{"docs":{},"df":0,"e":{"docs":{"HT9170":{"tf":1}},"df":1}}},"i":{"docs":{"TCA9548A":{"tf":1}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{"DS1307":{"tf":1}},"df":1}}},"s":{"docs":{},"df":0,"l":{"2":{"5":{"6":{"1":{"docs":{"TSL2561":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"UARTAT":{"tf":1}},"df":1}}},"r":{"docs":{},"df":0,"m":{"3":{"7":{"docs":{"URM37":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"LSM303AGR":{"tf":1},"LSM303D":{"tf":1}},"df":2,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"URM37":{"tf":1},"UltraSonic":{"tf":1},"HCSR04":{"tf":1},"MAXSONAREZ":{"tf":1},"MB704X":{"tf":1},"GroveUltraSonic":{"tf":1}},"df":6}}}}}},"n":{"2":{"0":{"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"b":{"docs":{"NLGPIO16":{"tf":1},"RHUSB":{"tf":1}},"df":2}},"v":{"docs":{"SI1132":{"tf":1},"SI114x":{"tf":1},"VEML6070":{"tf":1},"GUVAS12D":{"tf":1}},"df":4},"p":{"docs":{},"df":0,"m":{"docs":{"ULN200XA":{"tf":1}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"T8100":{"tf":1}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"T8100":{"tf":1}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"TEAMS":{"tf":1},"TEX00":{"tf":1},"CWLXSSA":{"tf":1},"E50HX":{"tf":1},"H803X":{"tf":1},"HDXXVXTA":{"tf":1},"HWXPXX":{"tf":1}},"df":7}},"m":{"docs":{},"df":0,"l":{"6":{"0":{"7":{"0":{"docs":{"VEML6070":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"vdiv":{"tf":1},"GroveVDiv":{"tf":1}},"df":2}}}},"i":{"docs":{},"df":0,"c":{"docs":{"ISD1820":{"tf":1}},"df":1}}},"z":{"8":{"9":{"docs":{"MICSV89":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"SI1132":{"tf":1}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"VEML6070":{"tf":1}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"VCAP":{"tf":1}},"df":1}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"LDT0028":{"tf":1}},"df":1}}}}}},"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"GroveRotary":{"tf":1}},"df":1}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"KX122":{"tf":1},"KXTJ3":{"tf":1}},"df":2}}}}},"x":{"1":{"2":{"2":{"docs":{"KX122":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"t":{"docs":{},"df":0,"j":{"3":{"docs":{"KXTJ3":{"tf":1}},"df":1},"docs":{},"df":0}}},"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"LCDKS":{"tf":1}},"df":1}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"WFS":{"tf":1},"GroveWFS":{"tf":1}},"df":2}},"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"YG1006":{"tf":1}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"MQ8":{"tf":1},"MQ9":{"tf":1}},"df":2}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{"Flex":{"tf":1}},"df":1}}},"a":{"docs":{},"df":0,"n":{"docs":{"TB7300":{"tf":1}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"ZFM20":{"tf":1}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"GroveLineFinder":{"tf":1},"LineFinder":{"tf":1},"MAXSONAREZ":{"tf":1}},"df":3}}}}},"m":{"docs":{"SX6119":{"tf":1}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"HT9170":{"tf":1}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"NMEAGPS":{"tf":1}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"NRF24L01":{"tf":1},"nrf8001":{"tf":1}},"df":2}}}},"n":{"docs":{"ECS1030":{"tf":1}},"df":1}},"r":{"docs":{},"df":0,"f":{"2":{"4":{"docs":{},"df":0,"l":{"0":{"1":{"docs":{"NRF24L01":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"8":{"0":{"0":{"1":{"docs":{"nrf8001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"NLGPIO16":{"tf":1}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"k":{"docs":{"NUNCHUCK":{"tf":1}},"df":1}}}}}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"1":{"6":{"docs":{"NLGPIO16":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}}},"x":{"docs":{},"df":0,"p":{"docs":{"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1}},"df":4,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"PCA9685":{"tf":1},"MPL3115A2":{"tf":1}},"df":2}}}}}}}}}}},"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"PN532":{"tf":1},"M24LR64E":{"tf":1}},"df":2}}}}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"MQ4":{"tf":1},"MQ5":{"tf":1}},"df":2}}}}},"x":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"XBee":{"tf":1}},"df":1}}}},"y":{"docs":{},"df":0,"g":{"1":{"0":{"0":{"6":{"docs":{"YG1006":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"z":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"docs":{"ZFM20":{"tf":1}},"df":1}}}}},"PartNumbers":{"root":{"0":{"5":{"docs":{"ES9257":{"tf":1}},"df":1},"docs":{},"df":0},"1":{"0":{"docs":{"mma8453q":{"tf":1}},"df":1},"2":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"PCA9685":{"tf":1}},"df":6},"4":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{"MS5803":{"tf":1}},"df":1}}},"6":{"docs":{"SSD1351":{"tf":1},"NLGPIO16":{"tf":1},"PCA9685":{"tf":1}},"df":3},"docs":{"XBee":{"tf":1}},"df":1,".":{"5":{"docs":{"SSD1351":{"tf":1}},"df":1},"8":{"docs":{"ST7735":{"tf":1}},"df":1},"docs":{},"df":0},"m":{"docs":{},"df":0,"w":{"docs":{"XBee":{"tf":1}},"df":1}}},"2":{"5":{"6":{"docs":{"MAX5487":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"/":{"4":{"docs":{},"df":0,"/":{"8":{"docs":{},"df":0,"g":{"docs":{"mma8451":{"tf":1}},"df":1}},"docs":{},"df":0}},"docs":{},"df":0},".":{"5":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{"ES9257":{"tf":1}},"df":1}}},"docs":{},"df":0},"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"±":{"4":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"±":{"8":{"docs":{},"df":0,"g":{"docs":{"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1}},"df":3}},"docs":{},"df":0}}}},"docs":{},"df":0}}}},"3":{"docs":{"MMA7660":{"tf":1},"MMA7455":{"tf":1}},"df":2,"d":{"docs":{"ES9257":{"tf":1}},"df":1}},"4":{"docs":{"TM1637":{"tf":1}},"df":1,".":{"0":{"docs":{"nrf8001":{"tf":1}},"df":1},"docs":{},"df":0}},"5":{"0":{"5":{"0":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"6":{"3":{"docs":{"MS5611":{"tf":1}},"df":1},"docs":{},"df":0,"h":{"docs":{"NMEAGPS":{"tf":1}},"df":1}},"8":{"0":{"2":{"docs":{},"df":0,".":{"1":{"5":{"docs":{},"df":0,".":{"4":{"docs":{"XBee":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"9":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"MICSV89":{"tf":1.4142135623730951}},"df":1}}},"docs":{},"df":0},"9":{"1":{"5":{"docs":{},"df":0,"m":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"RF22":{"tf":1}},"df":1}}}},"docs":{},"df":0},"9":{"6":{"0":{"docs":{"APDS9930":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"g":{"docs":{"ES08A":{"tf":1}},"df":1},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"MPU9150":{"tf":1}},"df":1}}}},"docs":{},"df":0,"m":{"2":{"4":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"6":{"4":{"docs":{},"df":0,"e":{"docs":{"M24LR64E":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"7":{"3":{"6":{"1":{"docs":{"MMA7361":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"4":{"5":{"5":{"docs":{"MMA7455":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"6":{"6":{"0":{"docs":{"MMA7660":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"8":{"4":{"5":{"1":{"docs":{"mma8451":{"tf":1}},"df":1},"2":{"docs":{},"df":0,"q":{"docs":{"mma8452q":{"tf":1.4142135623730951}},"df":1}},"3":{"docs":{},"df":0,"q":{"docs":{"mma8453q":{"tf":1.4142135623730951}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"6":{"5":{"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"mma8652fc":{"tf":1.4142135623730951}},"df":1}}},"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"mma8653fc":{"tf":1.4142135623730951}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"x":{"5":{"docs":{},"df":0,"x":{"docs":{"mma8451":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"mma8452q":{"tf":1}},"df":5}},"docs":{},"df":0}},"docs":{},"df":0},"c":{"3":{"5":{"2":{"4":{"0":{"docs":{"MMC35240":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"3":{"0":{"docs":{},"df":0,"k":{"docs":{},"df":0,"j":{"docs":{"MMC35240":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"a":{"docs":{},"df":0,"x":{"3":{"0":{"1":{"0":{"0":{"docs":{"MAX30100":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"1":{"7":{"2":{"3":{"docs":{"MAX31723":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"5":{"5":{"docs":{"MAX31855":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"4":{"4":{"0":{"0":{"0":{"docs":{"MAX44000":{"tf":1}},"df":1},"9":{"docs":{"MAX44009":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"5":{"4":{"8":{"7":{"docs":{"MAX5487":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"MAXSONAREZ":{"tf":3.1622776601683795},"MB704X":{"tf":1}},"df":2,"e":{"docs":{},"df":0,"z":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1}}}}}}},"d":{"docs":{},"df":0,"s":{"3":{"2":{"3":{"1":{"docs":{},"df":0,"m":{"docs":{"MAXDS3231M":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"g":{"3":{"1":{"1":{"0":{"docs":{"MAG3110":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"5":{"6":{"1":{"1":{"docs":{"MS5611":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"0":{"3":{"docs":{"MS5803":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"MS5611":{"tf":1},"T6713":{"tf":1},"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"NLGPIO16":{"tf":1},"MMA7455":{"tf":1},"MHZ16":{"tf":1}},"df":8}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"T8100":{"tf":1}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"WheelEncoder":{"tf":1},"SmartDrive":{"tf":1},"StepMotor":{"tf":1},"MD":{"tf":1}},"df":4}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"BISS0001":{"tf":1}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"Moisture":{"tf":1}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"MICSV89":{"tf":1.4142135623730951}},"df":1,"r":{"docs":{},"df":0,"o":{"docs":{"ES9257":{"tf":1}},"df":1,"s":{"docs":{},"df":0,"d":{"docs":{"ST7735":{"tf":1}},"df":1}}}},"s":{"docs":{},"df":0,"v":{"8":{"9":{"docs":{"MICSV89":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"n":{"docs":{},"df":0,"i":{"docs":{"ES08A":{"tf":1},"TH02":{"tf":1}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"T6713":{"tf":1}},"df":1}}}}}}},"y":{"9":{"2":{"2":{"1":{"docs":{"GroveLEDBar":{"tf":1.4142135623730951},"GroveCircularLED":{"tf":1.4142135623730951},"MY9221 ":{"tf":1.4142135623730951}},"df":3},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"l":{"docs":{},"df":0,"x":{"9":{"0":{"6":{"1":{"4":{"docs":{"MLX90614":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"q":{"2":{"docs":{"MQ2":{"tf":1}},"df":1},"3":{"0":{"3":{"docs":{},"df":0,"a":{"docs":{"MQ303A":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{"MQ3":{"tf":1}},"df":1},"4":{"docs":{"MQ4":{"tf":1}},"df":1},"5":{"docs":{"MQ5":{"tf":1}},"df":1},"6":{"docs":{"MQ6":{"tf":1}},"df":1},"7":{"docs":{"MQ7":{"tf":1}},"df":1},"8":{"docs":{"MQ8":{"tf":1}},"df":1},"9":{"docs":{"MQ9":{"tf":1}},"df":1},"docs":{},"df":0},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"TCA9548A":{"tf":1}},"df":1}}}}}}}},"p":{"3":{"docs":{"WT5001":{"tf":1}},"df":1},"docs":{},"df":0,"u":{"9":{"1":{"5":{"0":{"docs":{"MPU9150":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"l":{"3":{"1":{"1":{"5":{"docs":{},"df":0,"a":{"2":{"docs":{"MPL3115A2":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"1":{"2":{"1":{"docs":{"MPR121":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"g":{"8":{"1":{"1":{"docs":{"MG811":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"b":{"1":{"0":{"0":{"0":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"docs":{},"df":0},"1":{"0":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"docs":{},"df":0},"2":{"0":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"docs":{},"df":0},"3":{"0":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"docs":{},"df":0},"4":{"0":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"7":{"0":{"4":{"docs":{},"df":0,"x":{"docs":{"MB704X":{"tf":1.4142135623730951}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{"MHZ16":{"tf":1}},"df":1},"c":{"docs":{},"df":0,"p":{"2":{"5":{"1":{"5":{"docs":{"MCP2515":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"9":{"8":{"0":{"8":{"docs":{"MCP9808":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"g":{"1":{"docs":{},"df":0,"/":{"2":{"docs":{"WFS":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1}},"df":3,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"MMA7660":{"tf":1},"Microphone":{"tf":1},"Temperature":{"tf":1},"GroveLEDBar":{"tf":1},"GroveButton":{"tf":1.4142135623730951},"GroveCircularLED":{"tf":1},"GroveLed":{"tf":1.4142135623730951},"GroveLight":{"tf":1},"Moisture":{"tf":1},"GroveRelay":{"tf":1},"Relay":{"tf":1},"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"GroveSlide":{"tf":1},"GroveTemp":{"tf":1},"UltraSonic":{"tf":1},"vdiv":{"tf":1},"Water":{"tf":1},"OTP538U":{"tf":1},"RFR359F":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"SCAM":{"tf":1},"Slide":{"tf":1},"Speaker":{"tf":1},"TA12200":{"tf":1},"TH02":{"tf":1},"TM1637":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"TSL2561":{"tf":1},"NUNCHUCK":{"tf":1},"WT5001":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"SX6119":{"tf":1},"AT42QT1070":{"tf":1},"Button":{"tf":1},"Buzzer":{"tf":1},"BME280":{"tf":1},"BMP280":{"tf":1},"Grove":{"tf":1.4142135623730951},"MD":{"tf":1},"MPU9150":{"tf":1},"Led":{"tf":1},"MHZ16":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1}},"df":50,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"GroveElectromagnet":{"tf":1}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"GroveElDriver":{"tf":1}},"df":1}}}}},"h":{"docs":{},"df":0,"r":{"docs":{"GroveEHR":{"tf":1}},"df":1}},"m":{"docs":{},"df":0,"g":{"docs":{"GroveEMG":{"tf":1}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"GroveLight":{"tf":1}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"GroveLineFinder":{"tf":1}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"GroveRelay":{"tf":1},"GroveTemp":{"tf":1}},"df":2}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"GroveRotary":{"tf":1}},"df":1}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"GroveSlide":{"tf":1}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"GroveSpeaker":{"tf":1}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"GROVESCAM":{"tf":1}},"df":1}}}},"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{"GroveGSR":{"tf":1}},"df":1}},"p":{"docs":{},"df":0,"r":{"docs":{"GroveGPRS":{"tf":1}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"GroveCollision":{"tf":1}},"df":1}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"GroveMoisture":{"tf":1}},"df":1}}}}}}},"o":{"2":{"docs":{"GroveO2":{"tf":1}},"df":1},"docs":{},"df":0},"v":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"GroveVDiv":{"tf":1}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"GroveWater":{"tf":1}},"df":1}},"f":{"docs":{"GroveWFS":{"tf":1}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"GroveUltraSonic":{"tf":1}},"df":1}}}}}}}}}}},"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"WheelEncoder":{"tf":1}},"df":1}}}},"i":{"docs":{"MG811":{"tf":1}},"df":1}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1}},"df":3}}}}}}},"p":{"2":{"docs":{},"df":0,"y":{"0":{"docs":{},"df":0,"a":{"docs":{"GP2Y0A":{"tf":1}},"df":1}},"docs":{},"df":0}},"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"NLGPIO16":{"tf":1}},"df":1}},"r":{"docs":{"GPRS":{"tf":1}},"df":1}},"y":{"docs":{"MS5611":{"tf":1}},"df":1},"a":{"docs":{"MG811":{"tf":1},"MHZ16":{"tf":1}},"df":2},"s":{"docs":{},"df":0,"r":{"docs":{"GSR":{"tf":1}},"df":1}},"u":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"1":{"2":{"docs":{},"df":0,"d":{"docs":{"GUVAS12D":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"APDS9930":{"tf":1}},"df":1}}}}}},"a":{"1":{"1":{"0":{"1":{"docs":{"A110X":{"tf":1}},"df":1},"2":{"docs":{"A110X":{"tf":1}},"df":1},"3":{"docs":{"A110X":{"tf":1}},"df":1},"4":{"docs":{"A110X":{"tf":1}},"df":1},"6":{"docs":{"A110X":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"MMA7660":{"tf":1},"mma8451":{"tf":1},"MMA7361":{"tf":1},"MMA7455":{"tf":1},"mma8452q":{"tf":1}},"df":5}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"mma8451":{"tf":1},"MMA7361":{"tf":1},"MMA7455":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"mma8452q":{"tf":1}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"±":{"1":{"docs":{},"df":0,".":{"5":{"docs":{},"df":0,"g":{"docs":{"MMA7660":{"tf":1}},"df":1}},"docs":{},"df":0}},"docs":{},"df":0}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"MAXDS3231M":{"tf":1}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"TH02":{"tf":1},"MCP9808":{"tf":1}},"df":2}}}}}}},"d":{"8":{"2":{"3":{"2":{"docs":{"AD8232":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"1":{"0":{"1":{"5":{"docs":{"ADS1015":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"1":{"1":{"5":{"docs":{"ADS1115":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"mma8451":{"tf":1},"PCA9685":{"tf":1}},"df":2,"s":{"docs":{},"df":0,"s":{"docs":{"adafruitss":{"tf":1}},"df":1}},"m":{"docs":{},"df":0,"s":{"1":{"4":{"3":{"8":{"docs":{"AdafruitMS1438":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1}},"df":3}}},"c":{"1":{"2":{"1":{"docs":{},"df":0,"c":{"0":{"2":{"1":{"docs":{"ADC121C021":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"docs":{},"df":0,"l":{"3":{"3":{"5":{"docs":{"Adxl345":{"tf":1},"ADXL335":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{},"df":0,"s":{"6":{"1":{"0":{"docs":{"ADXRS610":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"i":{"docs":{},"df":0,"s":{"1":{"6":{"4":{"4":{"8":{"docs":{"ADIS16448":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"p":{"docs":{},"df":0,"a":{"1":{"0":{"2":{"docs":{"APA102":{"tf":1.4142135623730951},"P9813":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{"APDS9930":{"tf":1}},"df":1,"s":{"9":{"0":{"0":{"2":{"docs":{"APDS9002":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"9":{"3":{"0":{"docs":{"APDS9930":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"t":{"4":{"2":{"docs":{},"df":0,"q":{"docs":{},"df":0,"t":{"1":{"0":{"7":{"0":{"docs":{"AT42QT1070":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"MS5611":{"tf":1}},"df":1}}}}}}}},"m":{"2":{"3":{"1":{"5":{"docs":{"AM2315":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"p":{"docs":{"Pulsensor":{"tf":1}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"GroveRotary":{"tf":1},"Rotary":{"tf":1}},"df":2}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"NLGPIO16":{"tf":1},"MG811":{"tf":1}},"df":2}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"XBee":{"tf":1}},"df":1}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"MICSV89":{"tf":1}},"df":1}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"MQ303A":{"tf":1}},"df":1}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"MG811":{"tf":1}},"df":1}}}}}},"b":{"docs":{},"df":0,"p":{"docs":{"ABP":{"tf":1}},"df":1}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"MMA7660":{"tf":1},"ES9257":{"tf":1},"MLX90614":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"TM1637":{"tf":1},"SI114x":{"tf":1},"TSL2561":{"tf":1},"MAX5487":{"tf":1}},"df":10}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"ST7735":{"tf":1},"TM1637":{"tf":1}},"df":2}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"RFR359F":{"tf":1}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"vdiv":{"tf":1}},"df":1}}}},"s":{"1":{"3":{"0":{"7":{"docs":{"DS1307":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"0":{"8":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"DS1808LC":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0,"b":{"2":{"0":{"docs":{"DS18B20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"2":{"4":{"1":{"3":{"docs":{"DS2413":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"3":{"2":{"3":{"1":{"docs":{"MAXDS3231M":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"b":{"0":{"9":{"1":{"0":{"4":{"docs":{"dsb09104":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"2":{"9":{"docs":{"DSB29":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1},"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"PCA9685":{"tf":1},"StepMotor":{"tf":1},"MD":{"tf":1}},"df":8}}}}},"f":{"docs":{},"df":0,"r":{"0":{"0":{"6":{"6":{"docs":{"SHT1X":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"1":{"4":{"3":{"docs":{"MMA7361":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"DFREC":{"tf":1}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"DFRORP":{"tf":1}},"df":1}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"BMA220":{"tf":1},"BH1750":{"tf":1}},"df":2}}}},"p":{"docs":{},"df":0,"h":{"docs":{"DFRPH":{"tf":1}},"df":1}}}},"g":{"2":{"docs":{"dg2":{"tf":1}},"df":1},"docs":{},"df":0},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1}},"df":3}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"PPD42NS":{"tf":1}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{"MAX5487":{"tf":1}},"df":1}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"1":{"2":{"docs":{"Joystick12":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}}}}},"h":{"docs":{},"df":0,"d":{"1":{"3":{"1":{"3":{"docs":{},"df":0,"m":{"1":{"docs":{"Jhd1313m1":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"h":{"3":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"3":{"3":{"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"H3LIS331DL":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"8":{"0":{"3":{"docs":{},"df":0,"x":{"docs":{"H803X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"x":{"7":{"1":{"1":{"docs":{"HX711":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"SSD1351":{"tf":1}},"df":1}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"SHT1X":{"tf":1},"RHUSB":{"tf":1},"T3311":{"tf":1}},"df":3}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"ES08A":{"tf":1},"TH02":{"tf":1},"SmartDrive":{"tf":1},"MCP9808":{"tf":1}},"df":4}}},"m":{"1":{"1":{"docs":{"HM11":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"c":{"5":{"8":{"8":{"3":{"docs":{},"df":0,"l":{"docs":{"Hmc5883l":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"HMTRP":{"tf":1}},"df":1}}}},"k":{"docs":{},"df":0,"a":{"5":{"docs":{"HKA5":{"tf":1}},"df":1},"docs":{},"df":0}},"t":{"9":{"1":{"7":{"0":{"docs":{"HT9170":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"u":{"2":{"1":{"docs":{},"df":0,"d":{"docs":{"HTU21D":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"0":{"4":{"docs":{"HCSR04":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"d":{"docs":{},"df":0,"c":{"1":{"0":{"0":{"0":{"docs":{"HDC1000":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"v":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"HDXXVXTA":{"tf":1}},"df":1}}}}}}},"p":{"2":{"0":{"docs":{},"df":0,"x":{"docs":{"HP20X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"l":{"docs":{},"df":0,"g":{"1":{"5":{"0":{"docs":{},"df":0,"h":{"docs":{"HLG150H":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"HWXPXX":{"tf":1}},"df":1}}}}}},"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"2":{"8":{"0":{"docs":{"BMM150":{"tf":1},"BME280":{"tf":1}},"df":2},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"2":{"8":{"0":{"docs":{"BMP280":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"x":{"8":{"docs":{},"df":0,"x":{"docs":{"BMPX8X":{"tf":1}},"df":1}},"docs":{},"df":0}},"x":{"0":{"5":{"5":{"docs":{"BMX055":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"g":{"1":{"6":{"0":{"docs":{"BMG160":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"i":{"1":{"6":{"0":{"docs":{"BMI160":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"2":{"2":{"0":{"docs":{"BMA220":{"tf":1}},"df":1},"docs":{},"df":0},"5":{"0":{"docs":{"BMA250E":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"SSD1351":{"tf":1},"ST7735":{"tf":1},"MS5803":{"tf":1},"NRF24L01":{"tf":1},"nrf8001":{"tf":1},"PN532":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"MCP9808":{"tf":1}},"df":9}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"SSD1351":{"tf":1},"PN532":{"tf":1},"MCP9808":{"tf":1}},"df":3}}}},"i":{"docs":{},"df":0,"t":{"docs":{"SSD1351":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1},"PCA9685":{"tf":1}},"df":5},"s":{"docs":{},"df":0,"s":{"0":{"0":{"0":{"1":{"docs":{"BISS0001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"a":{"docs":{},"df":0,"r":{"docs":{"GroveLEDBar":{"tf":1}},"df":1,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"BME280":{"tf":1},"BMP280":{"tf":1}},"df":2,"r":{"docs":{"MPL3115A2":{"tf":1}},"df":1}}}}}}},"u":{"docs":{"MCP2515":{"tf":1}},"df":1,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"GroveButton":{"tf":1},"Button":{"tf":1}},"df":2}}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Buzzer":{"tf":1}},"df":1}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"nrf8001":{"tf":1}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"nrf8001":{"tf":1}},"df":1}}}}}}},"e":{"docs":{"nrf8001":{"tf":1}},"df":1}},"h":{"1":{"7":{"5":{"0":{"docs":{"BH1750":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"n":{"docs":{},"df":0,"o":{"0":{"5":{"5":{"docs":{"BNO055":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"i":{"2":{"docs":{},"df":0,"c":{"docs":{"PCA9685":{"tf":1},"TCA9548A":{"tf":1},"MD":{"tf":1},"MAXDS3231M":{"tf":1},"MCP9808":{"tf":1},"MPL3115A2":{"tf":1},"MPR121":{"tf":1}},"df":7}},"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"APA102":{"tf":1}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1},"MAXDS3231M":{"tf":1}},"df":3}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"PCA9685":{"tf":1},"MAX5487":{"tf":1}},"df":2}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"RFR359F":{"tf":1}},"df":1}}}},"n":{"docs":{"T3311":{"tf":1}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"MHZ16":{"tf":1}},"df":1}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"MLX90614":{"tf":1},"OTP538U":{"tf":1},"RPR220":{"tf":1},"TMP006":{"tf":1},"MHZ16":{"tf":1}},"df":5}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"MICSV89":{"tf":1}},"df":1}}},"e":{"docs":{},"df":0,"x":{"docs":{"SI114x":{"tf":1}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"NLGPIO16":{"tf":1}},"df":1}}},"a":{"1":{"3":{"2":{"docs":{"INA132":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"MS5611":{"tf":1}},"df":1}}}}}},"r":{"docs":{"RFR359F":{"tf":1},"SI114x":{"tf":1}},"df":2},"t":{"docs":{},"df":0,"g":{"3":{"2":{"0":{"0":{"docs":{"Itg3200":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"d":{"1":{"8":{"2":{"0":{"docs":{"ISD1820":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"m":{"docs":{"IMS":{"tf":1}},"df":1,"u":{"docs":{"MPU9150":{"tf":1}},"df":1}},"l":{"docs":{},"df":0,"i":{"9":{"3":{"4":{"1":{"docs":{"ILI9341":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"l":{"2":{"9":{"8":{"docs":{"L298":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"2":{"0":{"docs":{"L3GD20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0,"e":{"docs":{"nrf8001":{"tf":1}},"df":1,"d":{"docs":{"APA102":{"tf":1.4142135623730951},"P9813":{"tf":1},"GroveLEDBar":{"tf":1.4142135623730951},"GroveCircularLED":{"tf":1.4142135623730951},"GroveLed":{"tf":1.4142135623730951},"MY9221 ":{"tf":1},"RGBRingCoder":{"tf":1},"Led":{"tf":1}},"df":8},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"waterlevel":{"tf":1}},"df":1}}},"a":{"docs":{"NMEAGPS":{"tf":1}},"df":1}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"Light":{"tf":1},"GroveLight":{"tf":1},"SI114x":{"tf":1},"TSL2561":{"tf":1},"BH1750":{"tf":1}},"df":5}}},"s":{"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"1":{"2":{"docs":{"LIS2DS12":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{"lis3dh":{"tf":1}},"df":1}}},"docs":{},"df":0},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{"Grove":{"tf":1}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"LineFinder":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{"MAX5487":{"tf":1}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"3":{"docs":{"LIDARLITEV3":{"tf":1}},"df":1},"docs":{},"df":0}}}}}}}}},"m":{"3":{"5":{"docs":{"LM35":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"v":{"3":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"vdiv":{"tf":1}},"df":1}}},"docs":{},"df":0}},"p":{"8":{"8":{"6":{"0":{"docs":{"LP8860":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"d":{"8":{"8":{"0":{"6":{"docs":{"LPD8806":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"d":{"docs":{"ST7735":{"tf":1}},"df":1,"k":{"docs":{"LCDKS":{"tf":1}},"df":1}},"m":{"1":{"6":{"0":{"2":{"docs":{"Lcm1602":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"o":{"docs":{},"df":0,"w":{"docs":{"nrf8001":{"tf":1},"mma8453q":{"tf":1},"mma8652fc":{"tf":1},"mma8653fc":{"tf":1}},"df":4},"l":{"docs":{"LoL":{"tf":1}},"df":1},"u":{"docs":{},"df":0,"d":{"docs":{"Loudness":{"tf":1}},"df":1}}},"s":{"docs":{},"df":0,"m":{"3":{"0":{"3":{"docs":{},"df":0,"d":{"docs":{"LSM303D":{"tf":1}},"df":1,"l":{"docs":{},"df":0,"h":{"docs":{"LSM303DLH":{"tf":1}},"df":1}}},"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"LSM303AGR":{"tf":1}},"df":1}}}},"docs":{},"df":0},"docs":{},"df":0},"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"3":{"docs":{},"df":0,"h":{"docs":{"LSM6DS3H":{"tf":1}},"df":1}},"docs":{},"df":0,"l":{"docs":{"LSM6DSL":{"tf":1}},"df":1}}}},"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"0":{"docs":{"LSM9DS0":{"tf":1}},"df":1},"docs":{},"df":0}}},"docs":{},"df":0}},"v":{"docs":{"MAXSONAREZ":{"tf":3.1622776601683795}},"df":1},"d":{"docs":{},"df":0,"t":{"0":{"0":{"2":{"8":{"docs":{"LDT0028":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"APDS9002":{"tf":1}},"df":1}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1},"GroveLed":{"tf":1},"RGBRingCoder":{"tf":1},"APDS9930":{"tf":1}},"df":5,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"RGBRingCoder":{"tf":1}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"GroveRelay":{"tf":1},"Relay":{"tf":1.4142135623730951}},"df":2}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"RPR220":{"tf":1}},"df":1}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"SX6119":{"tf":1}},"df":1}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"GroveRotary":{"tf":1},"RotaryEncoder":{"tf":1},"Rotary":{"tf":1.4142135623730951}},"df":3},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"RotaryEncoder":{"tf":1}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"UltraSonic":{"tf":1},"MB704X":{"tf":1}},"df":2}}}}},"n":{"2":{"9":{"0":{"3":{"docs":{"RN2903":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"b":{"docs":{"RHUSB":{"tf":1}},"df":1}}}},"f":{"2":{"2":{"docs":{"RF22":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"r":{"3":{"5":{"9":{"docs":{},"df":0,"f":{"docs":{"RFR359F":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"m":{"2":{"2":{"docs":{},"df":0,"b":{"docs":{"RF22":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}},"p":{"docs":{},"df":0,"r":{"2":{"2":{"0":{"docs":{"RPR220":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"RGBRingCoder":{"tf":1}},"df":1}}}}}},"s":{"2":{"3":{"2":{"docs":{"T3311":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"c":{"docs":{"RSC":{"tf":1}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"x":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"MAXDS3231M":{"tf":1}},"df":1}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"APA102":{"tf":1},"P9813":{"tf":1}},"df":2}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"NLGPIO16":{"tf":1},"PCA9685":{"tf":1}},"df":5}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"GroveLed":{"tf":1}},"df":1}}}}}}},"o":{"2":{"docs":{"T6713":{"tf":1},"T8100":{"tf":1},"MG811":{"tf":1},"MHZ16":{"tf":1}},"df":4},"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"MS5611":{"tf":1}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"SSD1351":{"tf":1},"ST7735":{"tf":1}},"df":2}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"Collision":{"tf":1}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"PN532":{"tf":1},"SmartDrive":{"tf":1}},"df":5}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"TMP006":{"tf":1}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"ST7735":{"tf":1}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"SCAM":{"tf":1}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"GroveCircularLED":{"tf":1}},"df":1}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"SmartDrive":{"tf":1}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"CurieImu":{"tf":1}},"df":1}}}}}}},"j":{"docs":{},"df":0,"q":{"4":{"4":{"3":{"5":{"docs":{"CJQ4435":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{"CWLXSSA":{"tf":1}},"df":1}}}}}}},"s":{"2":{"docs":{"RF22":{"tf":1}},"df":1},"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"Microphone":{"tf":1}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"0":{"1":{"6":{"8":{"docs":{"BMA220":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"Microphone":{"tf":1},"Temperature":{"tf":1},"MS5611":{"tf":1},"SHT1X":{"tf":1},"URM37":{"tf":1},"GroveButton":{"tf":1},"Moisture":{"tf":1},"GroveRotary":{"tf":1},"GroveTemp":{"tf":1},"WFS":{"tf":1},"Water":{"tf":1},"MS5803":{"tf":1},"MICSV89":{"tf":1},"RHUSB":{"tf":1},"OTP538U":{"tf":1},"RPR220":{"tf":1},"MQ303A":{"tf":1},"Rotary":{"tf":1},"TA12200":{"tf":1},"TH02":{"tf":1},"TTP223":{"tf":1},"PPD42NS":{"tf":1},"SI114x":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"TSL2561":{"tf":1},"YG1006":{"tf":1},"ZFM20":{"tf":1},"AT42QT1070":{"tf":1},"Pulsensor":{"tf":1},"BH1750":{"tf":1},"MG811":{"tf":1},"BMP280":{"tf":1},"MHZ16":{"tf":1},"MCP9808":{"tf":1},"MPL3115A2":{"tf":1},"BISS0001":{"tf":1},"APDS9002":{"tf":1},"MPR121":{"tf":1},"APDS9930":{"tf":1}},"df":40,"(":{"docs":{},"df":0,"p":{"docs":{"GroveLight":{"tf":1}},"df":1},"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"2":{"8":{"0":{"docs":{"BME280":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"ES08A":{"tf":1}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"T6713":{"tf":1},"T8100":{"tf":1},"XBee":{"tf":1}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{"SCAM":{"tf":1},"WT5001":{"tf":1}},"df":2}}},"v":{"docs":{},"df":0,"o":{"docs":{"ES9257":{"tf":1},"ES08A":{"tf":1},"servo":{"tf":1}},"df":3}}},"c":{"docs":{"ES9257":{"tf":1}},"df":1}},"s":{"6":{"docs":{"ss6":{"tf":1}},"df":1},"docs":{},"df":0,"d":{"1":{"3":{"5":{"1":{"docs":{"SSD1351":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"7":{"7":{"3":{"5":{"docs":{"ST7735":{"tf":1}},"df":1,"r":{"docs":{"ST7735":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"StepMotor":{"tf":1}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"StepMotor":{"tf":1}},"df":1}}}}}},"h":{"docs":{},"df":0,"t":{"1":{"docs":{},"df":0,"x":{"docs":{"SHT1X":{"tf":1.4142135623730951}},"df":1}},"docs":{},"df":0},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"MCP2515":{"tf":1}},"df":1}}}}},"k":{"docs":{},"df":0,"u":{"docs":{"SHT1X":{"tf":1}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"GroveSlide":{"tf":1},"Slide":{"tf":1.4142135623730951}},"df":2}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"waterlevel":{"tf":1}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"MS5803":{"tf":1},"NRF24L01":{"tf":1},"RGBRingCoder":{"tf":1},"mma8452q":{"tf":1},"APDS9930":{"tf":1}},"df":5}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Speaker":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{"MAX5487":{"tf":1}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"SCAM":{"tf":1}},"df":1}}},"i":{"1":{"1":{"3":{"2":{"docs":{"SI1132":{"tf":1}},"df":1},"docs":{},"df":0},"4":{"5":{"docs":{"SI114x":{"tf":1}},"df":1},"docs":{},"df":0,"x":{"docs":{"SI114x":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"7":{"0":{"0":{"5":{"docs":{"SI7005":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"m":{"1":{"3":{"0":{"docs":{"SM130":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"SmartDrive":{"tf":1.4142135623730951}},"df":1}}}}}}},"d":{"docs":{"RF22":{"tf":1}},"df":1}},"x":{"1":{"2":{"7":{"6":{"docs":{"SX1276":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"6":{"1":{"1":{"9":{"docs":{"SX6119":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"3":{"3":{"1":{"1":{"docs":{"T3311":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"6":{"7":{"0":{"0":{"docs":{"T6713":{"tf":1}},"df":1},"docs":{},"df":0},"1":{"3":{"docs":{"T6713":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"8":{"1":{"0":{"0":{"docs":{"T8100":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"Temperature":{"tf":1},"SHT1X":{"tf":1},"GroveTemp":{"tf":1},"RHUSB":{"tf":1},"OTP538U":{"tf":1},"T3311":{"tf":1},"TMP006":{"tf":1},"MCP9808":{"tf":1}},"df":8,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"TH02":{"tf":1}},"df":1}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"SensorTemplate":{"tf":1}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"T8100":{"tf":1}},"df":1}}}},"a":{"docs":{},"df":0,"m":{"docs":{"TEAMS":{"tf":1}},"df":1}},"x":{"0":{"0":{"docs":{"TEX00":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"d":{"0":{"0":{"docs":{"TEX00":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"f":{"docs":{},"df":0,"t":{"docs":{"ST7735":{"tf":1}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"mma8451":{"tf":1},"MMA7361":{"tf":1},"mma8452q":{"tf":1}},"df":3}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"NRF24L01":{"tf":1},"RF22":{"tf":1}},"df":2}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{"XBee":{"tf":1}},"df":1}}}},"c":{"docs":{},"df":0,"s":{"3":{"4":{"1":{"4":{"docs":{},"df":0,"c":{"docs":{"TCS3414CS":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"7":{"7":{"2":{"7":{"docs":{"TCS37727":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"9":{"5":{"4":{"8":{"docs":{},"df":0,"a":{"docs":{"TCA9548A":{"tf":1.4142135623730951}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"a":{"1":{"2":{"2":{"0":{"0":{"docs":{"TA12200":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"ES9257":{"tf":1}},"df":1}},"p":{"docs":{"MAX5487":{"tf":1}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"MAX5487":{"tf":1}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"GroveButton":{"tf":1},"TTP223":{"tf":1},"AT42QT1070":{"tf":1},"MPR121":{"tf":1}},"df":4}}}},"b":{"7":{"3":{"0":{"0":{"docs":{"TB7300":{"tf":1}},"df":1,"c":{"5":{"0":{"1":{"4":{"docs":{},"df":0,"b":{"docs":{"TB7300":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"0":{"2":{"docs":{"TH02":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"MLX90614":{"tf":1}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"TMP006":{"tf":1}},"df":1}}}}}}}},"m":{"1":{"6":{"3":{"7":{"docs":{"TM1637":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"p":{"0":{"0":{"6":{"docs":{"TMP006":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"docs":{},"df":0,"p":{"2":{"2":{"3":{"docs":{"TTP223":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"l":{"2":{"5":{"6":{"1":{"docs":{"TSL2561":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"UARTAT":{"tf":1}},"df":1}}}}},"r":{"docs":{},"df":0,"m":{"3":{"7":{"docs":{"URM37":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"URM37":{"tf":1},"UltraSonic":{"tf":1.4142135623730951},"MB704X":{"tf":1}},"df":3}}}}}},"n":{"2":{"0":{"0":{"1":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}},"2":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}},"3":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}},"4":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}},"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"NMEAGPS":{"tf":1}},"df":1}}}},"s":{"docs":{},"df":0,"b":{"docs":{"NLGPIO16":{"tf":1},"RHUSB":{"tf":1}},"df":2}},"v":{"docs":{"SI114x":{"tf":1}},"df":1}},"p":{"9":{"8":{"1":{"3":{"docs":{"P9813":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"MS5611":{"tf":1},"MS5803":{"tf":1}},"df":2,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"MPL3115A2":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{"T3311":{"tf":1}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"GroveLEDBar":{"tf":1},"GroveCircularLED":{"tf":1},"MY9221 ":{"tf":1},"Pulsensor":{"tf":1}},"df":4,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"Pulsensor":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"GroveSlide":{"tf":1},"Slide":{"tf":1},"MAX5487":{"tf":1}},"df":3}}}}}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"MLX90614":{"tf":1}},"df":1}},"a":{"docs":{},"df":0,"y":{"docs":{"MLX90614":{"tf":1}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"WT5001":{"tf":1}},"df":1}}}}},"c":{"docs":{},"df":0,"a":{"9":{"6":{"8":{"5":{"docs":{"PCA9685":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"w":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"PCA9685":{"tf":1}},"df":1}}}}}}}},"n":{"5":{"3":{"2":{"docs":{"PN532":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"docs":{},"df":0,"d":{"4":{"2":{"docs":{},"df":0,"n":{"docs":{"PPD42NS":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"TMP006":{"tf":1}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"BISS0001":{"tf":1}},"df":1}}},"w":{"docs":{"P9813":{"tf":1}},"df":1,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"SSD1351":{"tf":1}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"WheelEncoder":{"tf":1}},"df":1}}}}}}}}},"f":{"docs":{"WFS":{"tf":1}},"df":1},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"WFS":{"tf":1},"waterlevel":{"tf":1},"Water":{"tf":1.4142135623730951}},"df":3,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"waterlevel":{"tf":1}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"RF22":{"tf":1}},"df":1}}}}}},"i":{"docs":{"NUNCHUCK":{"tf":1}},"df":1}},"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{"TMP006":{"tf":1}},"df":1}}},"t":{"5":{"0":{"0":{"1":{"docs":{"WT5001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{"MB704X":{"tf":1}},"df":1}},"e":{"5":{"0":{"docs":{},"df":0,"h":{"docs":{},"df":0,"x":{"docs":{"E50HX":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"TA12200":{"tf":1}},"df":1,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"Electromagnet":{"tf":1}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"ElDriver":{"tf":1}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"0":{"3":{"docs":{},"df":0,"r":{"docs":{"ENC03R":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"WheelEncoder":{"tf":1},"RotaryEncoder":{"tf":1.4142135623730951}},"df":2}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"nrf8001":{"tf":1}},"df":1}}}}},"s":{"0":{"8":{"docs":{},"df":0,"a":{"docs":{"ES08A":{"tf":1.4142135623730951}},"df":1}},"docs":{},"df":0},"9":{"2":{"5":{"7":{"docs":{"ES9257":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"ES9257":{"tf":1},"ES08A":{"tf":1}},"df":2}},"g":{"docs":{"EMG":{"tf":1}},"df":1}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"StepMotor":{"tf":1}},"df":1}}}}}}},"h":{"docs":{},"df":0,"r":{"docs":{"EHR":{"tf":1}},"df":1}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{"ECEZO":{"tf":1}},"df":1}}},"s":{"1":{"0":{"3":{"0":{"docs":{"ECS1030":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"z":{"0":{"docs":{"MAXSONAREZ":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"MAXSONAREZ":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"MAXSONAREZ":{"tf":1.4142135623730951}},"df":1},"3":{"docs":{"MAXSONAREZ":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{"MAXSONAREZ":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"MAXDS3231M":{"tf":1}},"df":1}}}}}},"o":{"2":{"docs":{"O2":{"tf":1}},"df":1},"docs":{},"df":0,"l":{"docs":{"SSD1351":{"tf":1}},"df":1},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"RHUSB":{"tf":1},"T3311":{"tf":1}},"df":2}}}}},"z":{"docs":{},"df":0,"w":{"docs":{"OZW":{"tf":1}},"df":1}},"t":{"docs":{},"df":0,"p":{"5":{"3":{"8":{"docs":{},"df":0,"u":{"docs":{"OTP538U":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"v":{"1":{"docs":{},"df":0,".":{"0":{"docs":{"nrf8001":{"tf":1},"MPU9150":{"tf":1}},"df":2},"2":{"docs":{"MCP2515":{"tf":1}},"df":1},"6":{"docs":{"PN532":{"tf":1}},"df":1},"docs":{},"df":0}},"2":{"docs":{},"df":0,".":{"0":{"docs":{"GroveLed":{"tf":1}},"df":1},"docs":{},"df":0}},"4":{"docs":{},"df":0,".":{"0":{"docs":{"URM37":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"T8100":{"tf":1}},"df":1}}}}}}},"m":{"docs":{},"df":0,"l":{"6":{"0":{"7":{"0":{"docs":{"VEML6070":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"vdiv":{"tf":1}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"vdiv":{"tf":1}},"df":1}}}}},"z":{"docs":{"MICSV89":{"tf":1.4142135623730951}},"df":1},"k":{"2":{"8":{"2":{"8":{"docs":{},"df":0,"u":{"7":{"docs":{"NMEAGPS":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"SI114x":{"tf":1}},"df":1}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"VCAP":{"tf":1}},"df":1}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"WheelEncoder":{"tf":1},"SCAM":{"tf":1}},"df":2}},"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"k":{"1":{"0":{"1":{"3":{"docs":{"KXCJK1013":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"WFS":{"tf":1}},"df":1}},"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"YG1006":{"tf":1}},"df":1}}},"e":{"docs":{},"df":0,"x":{"docs":{"Flex":{"tf":1}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"ZFM20":{"tf":1}},"df":1}}}}}}}}}},"m":{"docs":{"SX6119":{"tf":1}},"df":1}},"q":{"docs":{"AT42QT1070":{"tf":1}},"df":1,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"MICSV89":{"tf":1}},"df":1}}}}}}},"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"2":{"4":{"docs":{},"df":0,"l":{"0":{"1":{"docs":{"NRF24L01":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"8":{"0":{"0":{"1":{"docs":{"nrf8001":{"tf":1.4142135623730951}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"1":{"6":{"docs":{"NLGPIO16":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"NLGPIO16":{"tf":1}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"NUNCHUCK":{"tf":1.7320508075688772}},"df":1}}}}}}},"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"PN532":{"tf":1}},"df":1}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"MAX5487":{"tf":1}},"df":1}}}}}}}}}},"x":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"XBee":{"tf":1.4142135623730951}},"df":1}}}},"y":{"docs":{},"df":0,"g":{"1":{"0":{"0":{"6":{"docs":{"YG1006":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"z":{"1":{"6":{"docs":{"MHZ16":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"2":{"0":{"docs":{"ZFM20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}}},"name":{"root":{"docs":{},"df":0,"m":{"2":{"4":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"6":{"4":{"docs":{},"df":0,"e":{"docs":{"M24LR64E":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"7":{"3":{"6":{"1":{"docs":{"MMA7361":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"4":{"5":{"5":{"docs":{"MMA7455":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"6":{"6":{"0":{"docs":{"MMA7660":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"8":{"4":{"5":{"1":{"docs":{"mma8451":{"tf":1}},"df":1},"2":{"docs":{},"df":0,"q":{"docs":{"mma8452q":{"tf":1}},"df":1}},"3":{"docs":{},"df":0,"q":{"docs":{"mma8453q":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"6":{"5":{"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"mma8652fc":{"tf":1}},"df":1}}},"3":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"mma8653fc":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"c":{"3":{"5":{"2":{"4":{"0":{"docs":{"MMC35240":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"a":{"docs":{},"df":0,"x":{"3":{"0":{"1":{"0":{"0":{"docs":{"MAX30100":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"1":{"7":{"2":{"3":{"docs":{"MAX31723":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"5":{"5":{"docs":{"MAX31855":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"4":{"4":{"0":{"0":{"0":{"docs":{"MAX44000":{"tf":1}},"df":1},"9":{"docs":{"MAX44009":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"5":{"4":{"8":{"7":{"docs":{"MAX5487":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1}}}}}}},"d":{"docs":{},"df":0,"s":{"3":{"2":{"3":{"1":{"docs":{},"df":0,"m":{"docs":{"MAXDS3231M":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"g":{"3":{"1":{"1":{"0":{"docs":{"MAG3110":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"Microphone":{"tf":1}},"df":1}}}}}},"s":{"docs":{},"df":0,"v":{"8":{"9":{"docs":{"MICSV89":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}},"s":{"5":{"6":{"1":{"1":{"docs":{"MS5611":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"0":{"3":{"docs":{"MS5803":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"Moisture":{"tf":1}},"df":1}}}}}},"l":{"docs":{},"df":0,"x":{"9":{"0":{"6":{"1":{"4":{"docs":{"MLX90614":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"y":{"9":{"2":{"2":{"1":{"docs":{"MY9221 ":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"q":{"2":{"docs":{"MQ2":{"tf":1}},"df":1},"3":{"0":{"3":{"docs":{},"df":0,"a":{"docs":{"MQ303A":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{"MQ3":{"tf":1}},"df":1},"4":{"docs":{"MQ4":{"tf":1}},"df":1},"5":{"docs":{"MQ5":{"tf":1}},"df":1},"6":{"docs":{"MQ6":{"tf":1}},"df":1},"7":{"docs":{"MQ7":{"tf":1}},"df":1},"8":{"docs":{"MQ8":{"tf":1}},"df":1},"9":{"docs":{"MQ9":{"tf":1}},"df":1},"docs":{},"df":0},"g":{"8":{"1":{"1":{"docs":{"MG811":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{"MD":{"tf":1}},"df":1},"p":{"docs":{},"df":0,"u":{"9":{"1":{"5":{"0":{"docs":{"MPU9150":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"l":{"3":{"1":{"1":{"5":{"docs":{},"df":0,"a":{"2":{"docs":{"MPL3115A2":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"1":{"2":{"1":{"docs":{"MPR121":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"b":{"7":{"0":{"4":{"docs":{},"df":0,"x":{"docs":{"MB704X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{},"df":0,"z":{"1":{"6":{"docs":{"MHZ16":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"p":{"2":{"5":{"1":{"5":{"docs":{"MCP2515":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"9":{"8":{"0":{"8":{"docs":{"MCP9808":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"d":{"docs":{},"df":0,"s":{"1":{"3":{"0":{"7":{"docs":{"DS1307":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"8":{"0":{"8":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{"DS1808LC":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0,"b":{"2":{"0":{"docs":{"DS18B20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"2":{"4":{"1":{"3":{"docs":{"DS2413":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"b":{"0":{"9":{"1":{"0":{"4":{"docs":{"dsb09104":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"2":{"9":{"docs":{"DSB29":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"DFREC":{"tf":1}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"DFRORP":{"tf":1}},"df":1}}},"p":{"docs":{},"df":0,"h":{"docs":{"DFRPH":{"tf":1}},"df":1}}}},"g":{"2":{"docs":{"dg2":{"tf":1}},"df":1},"docs":{},"df":0}},"a":{"1":{"1":{"0":{"docs":{},"df":0,"x":{"docs":{"A110X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"d":{"8":{"2":{"3":{"2":{"docs":{"AD8232":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"1":{"0":{"1":{"5":{"docs":{"ADS1015":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"1":{"1":{"5":{"docs":{"ADS1115":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"adafruitss":{"tf":1}},"df":1}},"m":{"docs":{},"df":0,"s":{"1":{"4":{"3":{"8":{"docs":{"AdafruitMS1438":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}}}}},"c":{"1":{"2":{"1":{"docs":{},"df":0,"c":{"0":{"2":{"1":{"docs":{"ADC121C021":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"docs":{},"df":0,"l":{"3":{"3":{"5":{"docs":{"ADXL335":{"tf":1}},"df":1},"docs":{},"df":0},"4":{"5":{"docs":{"Adxl345":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{},"df":0,"s":{"6":{"1":{"0":{"docs":{"ADXRS610":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"i":{"docs":{},"df":0,"s":{"1":{"6":{"4":{"4":{"8":{"docs":{"ADIS16448":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"p":{"docs":{},"df":0,"a":{"1":{"0":{"2":{"docs":{"APA102":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{},"df":0,"s":{"9":{"0":{"0":{"2":{"docs":{"APDS9002":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"9":{"3":{"0":{"docs":{"APDS9930":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"m":{"2":{"3":{"1":{"5":{"docs":{"AM2315":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"t":{"4":{"2":{"docs":{},"df":0,"q":{"docs":{},"df":0,"t":{"1":{"0":{"7":{"0":{"docs":{"AT42QT1070":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0},"b":{"docs":{},"df":0,"p":{"docs":{"ABP":{"tf":1}},"df":1}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"1":{"2":{"docs":{"Joystick12":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}}}}},"h":{"docs":{},"df":0,"d":{"1":{"3":{"1":{"3":{"docs":{},"df":0,"m":{"1":{"docs":{"Jhd1313m1":{"tf":1}},"df":1},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"h":{"3":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"3":{"3":{"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"H3LIS331DL":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"8":{"0":{"3":{"docs":{},"df":0,"x":{"docs":{"H803X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"x":{"7":{"1":{"1":{"docs":{"HX711":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"m":{"1":{"1":{"docs":{"HM11":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"c":{"5":{"8":{"8":{"3":{"docs":{},"df":0,"l":{"docs":{"Hmc5883l":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"HMTRP":{"tf":1}},"df":1}}}},"k":{"docs":{},"df":0,"a":{"5":{"docs":{"HKA5":{"tf":1}},"df":1},"docs":{},"df":0}},"t":{"9":{"1":{"7":{"0":{"docs":{"HT9170":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"u":{"2":{"1":{"docs":{},"df":0,"d":{"docs":{"HTU21D":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"0":{"4":{"docs":{"HCSR04":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"d":{"docs":{},"df":0,"c":{"1":{"0":{"0":{"0":{"docs":{"HDC1000":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"v":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"HDXXVXTA":{"tf":1}},"df":1}}}}}}},"p":{"2":{"0":{"docs":{},"df":0,"x":{"docs":{"HP20X":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"l":{"docs":{},"df":0,"g":{"1":{"5":{"0":{"docs":{},"df":0,"h":{"docs":{"HLG150H":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"w":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"HWXPXX":{"tf":1}},"df":1}}}}}},"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"1":{"5":{"0":{"docs":{"BMM150":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"2":{"8":{"0":{"docs":{"BMP280":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"x":{"8":{"docs":{},"df":0,"x":{"docs":{"BMPX8X":{"tf":1}},"df":1}},"docs":{},"df":0}},"x":{"0":{"5":{"5":{"docs":{"BMX055":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"g":{"1":{"6":{"0":{"docs":{"BMG160":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"i":{"1":{"6":{"0":{"docs":{"BMI160":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"2":{"2":{"0":{"docs":{"BMA220":{"tf":1}},"df":1},"docs":{},"df":0},"5":{"0":{"docs":{"BMA250E":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"e":{"2":{"8":{"0":{"docs":{"BME280":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"Button":{"tf":1}},"df":1}}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Buzzer":{"tf":1}},"df":1}}}}},"h":{"1":{"7":{"4":{"9":{"docs":{"BH1749":{"tf":1}},"df":1},"docs":{},"df":0},"5":{"0":{"docs":{"BH1750":{"tf":1}},"df":1},"docs":{},"df":0},"9":{"2":{"docs":{"BH1792":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"n":{"docs":{},"df":0,"o":{"0":{"5":{"5":{"docs":{"BNO055":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"0":{"0":{"0":{"1":{"docs":{"BISS0001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"g":{"docs":{},"df":0,"p":{"2":{"docs":{},"df":0,"y":{"0":{"docs":{},"df":0,"a":{"docs":{"GP2Y0A":{"tf":1}},"df":1}},"docs":{},"df":0}},"docs":{},"df":0,"r":{"docs":{"GPRS":{"tf":1}},"df":1}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"Grove":{"tf":1}},"df":1,"l":{"docs":{"GroveLed":{"tf":1}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"GroveLEDBar":{"tf":1}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"GroveLight":{"tf":1}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"GroveLineFinder":{"tf":1}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"GroveButton":{"tf":1}},"df":1}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"GroveCircularLED":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"GroveCollision":{"tf":1}},"df":1}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"GroveElectromagnet":{"tf":1}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"GroveElDriver":{"tf":1}},"df":1}}}}},"h":{"docs":{},"df":0,"r":{"docs":{"GroveEHR":{"tf":1}},"df":1}},"m":{"docs":{},"df":0,"g":{"docs":{"GroveEMG":{"tf":1}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"GroveRelay":{"tf":1}},"df":1}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"GroveRotary":{"tf":1}},"df":1}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"GroveSlide":{"tf":1}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"GroveSpeaker":{"tf":1}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"GROVESCAM":{"tf":1}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"GroveTemp":{"tf":1}},"df":1}}}},"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{"GroveGSR":{"tf":1}},"df":1}},"p":{"docs":{},"df":0,"r":{"docs":{"GroveGPRS":{"tf":1}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"GroveMoisture":{"tf":1}},"df":1}}}}}}},"o":{"2":{"docs":{"GroveO2":{"tf":1}},"df":1},"docs":{},"df":0},"v":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"GroveVDiv":{"tf":1}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"GroveWater":{"tf":1}},"df":1}},"f":{"docs":{"GroveWFS":{"tf":1}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"GroveUltraSonic":{"tf":1}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{"GSR":{"tf":1}},"df":1}},"u":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"1":{"2":{"docs":{},"df":0,"d":{"docs":{"GUVAS12D":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}}}}},"l":{"2":{"9":{"8":{"docs":{"L298":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"2":{"0":{"docs":{"L3GD20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"Light":{"tf":1}},"df":1}}},"s":{"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"1":{"2":{"docs":{"LIS2DS12":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{"lis3dh":{"tf":1}},"df":1}}},"docs":{},"df":0},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"LineFinder":{"tf":1}},"df":1}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"3":{"docs":{"LIDARLITEV3":{"tf":1}},"df":1},"docs":{},"df":0}}}}}}}}},"m":{"3":{"5":{"docs":{"LM35":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"p":{"8":{"8":{"6":{"0":{"docs":{"LP8860":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"d":{"8":{"8":{"0":{"6":{"docs":{"LPD8806":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"m":{"3":{"0":{"3":{"docs":{},"df":0,"d":{"docs":{"LSM303D":{"tf":1}},"df":1,"l":{"docs":{},"df":0,"h":{"docs":{"LSM303DLH":{"tf":1}},"df":1}}},"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"LSM303AGR":{"tf":1}},"df":1}}}},"docs":{},"df":0},"docs":{},"df":0},"6":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"3":{"docs":{},"df":0,"h":{"docs":{"LSM6DS3H":{"tf":1}},"df":1}},"docs":{},"df":0,"l":{"docs":{"LSM6DSL":{"tf":1}},"df":1}}}},"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"0":{"docs":{"LSM9DS0":{"tf":1}},"df":1},"docs":{},"df":0}}},"docs":{},"df":0}},"c":{"docs":{},"df":0,"m":{"1":{"6":{"0":{"2":{"docs":{"Lcm1602":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{},"df":0,"k":{"docs":{"LCDKS":{"tf":1}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{"Led":{"tf":1}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{"LoL":{"tf":1}},"df":1},"u":{"docs":{},"df":0,"d":{"docs":{"Loudness":{"tf":1}},"df":1}}},"d":{"docs":{},"df":0,"t":{"0":{"0":{"2":{"8":{"docs":{"LDT0028":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"t":{"3":{"3":{"1":{"1":{"docs":{"T3311":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"6":{"7":{"1":{"3":{"docs":{"T6713":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"8":{"1":{"0":{"0":{"docs":{"T8100":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"Temperature":{"tf":1}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"m":{"docs":{"TEAMS":{"tf":1}},"df":1}},"x":{"0":{"0":{"docs":{"TEX00":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"s":{"3":{"4":{"1":{"4":{"docs":{},"df":0,"c":{"docs":{"TCS3414CS":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"7":{"7":{"2":{"7":{"docs":{"TCS37727":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"9":{"5":{"4":{"8":{"docs":{},"df":0,"a":{"docs":{"TCA9548A":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"b":{"7":{"3":{"0":{"0":{"docs":{"TB7300":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"1":{"2":{"2":{"0":{"0":{"docs":{"TA12200":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"0":{"2":{"docs":{"TH02":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"m":{"1":{"6":{"3":{"7":{"docs":{"TM1637":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"p":{"0":{"0":{"6":{"docs":{"TMP006":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"docs":{},"df":0,"p":{"2":{"2":{"3":{"docs":{"TTP223":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"l":{"2":{"5":{"6":{"1":{"docs":{"TSL2561":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"UARTAT":{"tf":1}},"df":1}}}}},"r":{"docs":{},"df":0,"m":{"3":{"7":{"docs":{"URM37":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"UltraSonic":{"tf":1}},"df":1}}}}}},"n":{"2":{"0":{"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{"ULN200XA":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"p":{"9":{"8":{"1":{"3":{"docs":{"P9813":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"9":{"6":{"8":{"5":{"docs":{"PCA9685":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"n":{"5":{"3":{"2":{"docs":{"PN532":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"docs":{},"df":0,"d":{"4":{"2":{"docs":{},"df":0,"n":{"docs":{"PPD42NS":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"Pulsensor":{"tf":1}},"df":1}}}}}}}}},"e":{"5":{"0":{"docs":{},"df":0,"h":{"docs":{},"df":0,"x":{"docs":{"E50HX":{"tf":1}},"df":1}}},"docs":{},"df":0},"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"Electromagnet":{"tf":1}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"ElDriver":{"tf":1}},"df":1}}}}},"s":{"0":{"8":{"docs":{},"df":0,"a":{"docs":{"ES08A":{"tf":1}},"df":1}},"docs":{},"df":0},"9":{"2":{"5":{"7":{"docs":{"ES9257":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{},"df":0,"r":{"docs":{"EHR":{"tf":1}},"df":1}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{"ECEZO":{"tf":1}},"df":1}}},"s":{"1":{"0":{"3":{"0":{"docs":{"ECS1030":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"m":{"docs":{},"df":0,"g":{"docs":{"EMG":{"tf":1}},"df":1}},"n":{"docs":{},"df":0,"c":{"0":{"3":{"docs":{},"df":0,"r":{"docs":{"ENC03R":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0}}},"s":{"docs":{},"df":0,"s":{"6":{"docs":{"ss6":{"tf":1}},"df":1},"docs":{},"df":0,"d":{"1":{"3":{"5":{"1":{"docs":{"SSD1351":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"7":{"7":{"3":{"5":{"docs":{"ST7735":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"StepMotor":{"tf":1}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"t":{"1":{"docs":{},"df":0,"x":{"docs":{"SHT1X":{"tf":1}},"df":1}},"docs":{},"df":0}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"SCAM":{"tf":1}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"Slide":{"tf":1}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Speaker":{"tf":1}},"df":1}}}}}},"i":{"1":{"1":{"3":{"2":{"docs":{"SI1132":{"tf":1}},"df":1},"docs":{},"df":0},"4":{"docs":{},"df":0,"x":{"docs":{"SI114x":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"7":{"0":{"0":{"5":{"docs":{"SI7005":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"m":{"1":{"3":{"0":{"docs":{"SM130":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"SmartDrive":{"tf":1}},"df":1}}}}}}}},"x":{"1":{"2":{"7":{"6":{"docs":{"SX1276":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"6":{"1":{"1":{"9":{"docs":{"SX6119":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"servo":{"tf":1}},"df":1}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"SensorTemplate":{"tf":1}},"df":1}}}}}}}}}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"WheelEncoder":{"tf":1}},"df":1}}}}}}}}},"f":{"docs":{"WFS":{"tf":1}},"df":1},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"Water":{"tf":1}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"waterlevel":{"tf":1}},"df":1}}}}}}}}},"t":{"5":{"0":{"0":{"1":{"docs":{"WT5001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"Relay":{"tf":1}},"df":1}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"RotaryEncoder":{"tf":1}},"df":1}}}}}},"i":{"docs":{"Rotary":{"tf":1}},"df":1}}}}},"n":{"2":{"9":{"0":{"3":{"docs":{"RN2903":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"b":{"docs":{"RHUSB":{"tf":1}},"df":1}}}},"f":{"2":{"2":{"docs":{"RF22":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0,"r":{"3":{"5":{"9":{"docs":{},"df":0,"f":{"docs":{"RFR359F":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"p":{"docs":{},"df":0,"r":{"2":{"2":{"0":{"docs":{"RPR220":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"RGBRingCoder":{"tf":1}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{"RSC":{"tf":1}},"df":1}}},"v":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"vdiv":{"tf":1}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"VCAP":{"tf":1}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"6":{"0":{"7":{"0":{"docs":{"VEML6070":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{"NMEAGPS":{"tf":1}},"df":1}}}}},"r":{"docs":{},"df":0,"f":{"2":{"4":{"docs":{},"df":0,"l":{"0":{"1":{"docs":{"NRF24L01":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"8":{"0":{"0":{"1":{"docs":{"nrf8001":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"1":{"6":{"docs":{"NLGPIO16":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"NUNCHUCK":{"tf":1}},"df":1}}}}}}}},"o":{"2":{"docs":{"O2":{"tf":1}},"df":1},"docs":{},"df":0,"z":{"docs":{},"df":0,"w":{"docs":{"OZW":{"tf":1}},"df":1}},"t":{"docs":{},"df":0,"p":{"5":{"3":{"8":{"docs":{},"df":0,"u":{"docs":{"OTP538U":{"tf":1}},"df":1}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"x":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"XBee":{"tf":1}},"df":1}}}},"y":{"docs":{},"df":0,"g":{"1":{"0":{"0":{"6":{"docs":{"YG1006":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"z":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"2":{"0":{"docs":{"ZFM20":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0}}},"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"q":{"4":{"4":{"3":{"5":{"docs":{"CJQ4435":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"CurieImu":{"tf":1}},"df":1}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"Collision":{"tf":1}},"df":1}}}}},"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"x":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"CWLXSSA":{"tf":1}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"g":{"3":{"2":{"0":{"0":{"docs":{"Itg3200":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"n":{"docs":{},"df":0,"a":{"1":{"3":{"2":{"docs":{"INA132":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"d":{"1":{"8":{"2":{"0":{"docs":{"ISD1820":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"m":{"docs":{"IMS":{"tf":1}},"df":1},"l":{"docs":{},"df":0,"i":{"9":{"3":{"4":{"1":{"docs":{"ILI9341":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"k":{"docs":{},"df":0,"x":{"1":{"2":{"2":{"docs":{"KX122":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"t":{"docs":{},"df":0,"j":{"3":{"docs":{"KXTJ3":{"tf":1}},"df":1},"docs":{},"df":0}},"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"k":{"1":{"0":{"1":{"3":{"docs":{"KXCJK1013":{"tf":1}},"df":1},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"Flex":{"tf":1}},"df":1}}}}}},"Image":{"root":{"docs":{},"df":0,"m":{"2":{"4":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"6":{"4":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"M24LR64E":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"7":{"4":{"5":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MMA7455":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"6":{"6":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MMA7660":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Microphone":{"tf":1}},"df":1}}}},"s":{"docs":{},"df":0,"v":{"8":{"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MICSV89":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0}}}},"y":{"9":{"2":{"2":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveLEDBar":{"tf":1},"MY9221 ":{"tf":1}},"df":2}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Moisture":{"tf":1}},"df":1}}}}}}}}}}},"l":{"docs":{},"df":0,"x":{"9":{"0":{"6":{"1":{"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MLX90614":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"q":{"3":{"0":{"3":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MQ303A":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"g":{"8":{"1":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MG811":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MD":{"tf":1}},"df":1}}}}},"p":{"docs":{},"df":0,"u":{"9":{"1":{"5":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MPU9150":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"l":{"3":{"1":{"1":{"5":{"docs":{},"df":0,"a":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MPL3115A2":{"tf":1}},"df":1}}}}},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"1":{"2":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MPR121":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"a":{"docs":{},"df":0,"x":{"3":{"1":{"8":{"5":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MAX31855":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MAXSONAREZ":{"tf":1}},"df":1}}}}}}}}}}}}},"h":{"docs":{},"df":0,"z":{"1":{"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MHZ16":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0}},"c":{"docs":{},"df":0,"p":{"9":{"8":{"0":{"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"MCP9808":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"a":{"1":{"1":{"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"A110X":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"d":{"8":{"2":{"3":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"AD8232":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"s":{"1":{"0":{"1":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ADS1015":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"1":{"1":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ADS1115":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"adafruitss":{"tf":1}},"df":1}}}}}},"m":{"docs":{},"df":0,"s":{"1":{"4":{"3":{"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"AdafruitMS1438":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}}}}}},"c":{"1":{"2":{"1":{"docs":{},"df":0,"c":{"0":{"2":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ADC121C021":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"docs":{},"df":0,"l":{"3":{"3":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Adxl345":{"tf":1},"ADXL335":{"tf":1}},"df":2}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"r":{"docs":{},"df":0,"s":{"6":{"1":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ADXRS610":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"p":{"docs":{},"df":0,"a":{"1":{"0":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"APA102":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"d":{"docs":{},"df":0,"s":{"9":{"0":{"0":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"APDS9002":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"t":{"4":{"2":{"docs":{},"df":0,"q":{"docs":{},"df":0,"t":{"1":{"0":{"7":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"AT42QT1070":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"docs":{},"df":0},"docs":{},"df":0}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"1":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Joystick12":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0}}}}}}}},"g":{"docs":{},"df":0,"p":{"2":{"docs":{},"df":0,"y":{"0":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GP2Y0A":{"tf":1}},"df":1}}}}}},"docs":{},"df":0}},"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GPRS":{"tf":1}},"df":1}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveButton":{"tf":1}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveCircularLED":{"tf":1}},"df":1}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveCollision":{"tf":1}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveElectromagnet":{"tf":1}},"df":1}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveElDriver":{"tf":1}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveEHR":{"tf":1}},"df":1}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveLed":{"tf":1}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveLight":{"tf":1}},"df":1}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveLineFinder":{"tf":1}},"df":1}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveRelay":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveRotary":{"tf":1}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveTemp":{"tf":1}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveGPRS":{"tf":1}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveMoisture":{"tf":1}},"df":1}}}}}}}}}}}},"o":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveO2":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveSpeaker":{"tf":1}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GROVESCAM":{"tf":1}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveVDiv":{"tf":1}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveUltraSonic":{"tf":1}},"df":1}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GroveWFS":{"tf":1}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GSR":{"tf":1}},"df":1}}}}}},"u":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"1":{"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"GUVAS12D":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0}}}}},"l":{"2":{"9":{"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"L298":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Light":{"tf":1}},"df":1}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"LineFinder":{"tf":1}},"df":1}}}}}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"LIDARLITEV3":{"tf":1}},"df":1}}}}},"docs":{},"df":0}}}}}}}}},"m":{"3":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"LM35":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"p":{"docs":{},"df":0,"d":{"8":{"8":{"0":{"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"LPD8806":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Led":{"tf":1}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Loudness":{"tf":1}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"t":{"0":{"0":{"2":{"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"LDT0028":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"m":{"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"LSM9DS0":{"tf":1}},"df":1}}}}},"docs":{},"df":0}}},"docs":{},"df":0}}},"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"DFRPH":{"tf":1}},"df":1}}}}}}}},"s":{"1":{"3":{"0":{"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"DS1307":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Temperature":{"tf":1}},"df":1}}}}}}},"a":{"1":{"2":{"2":{"0":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"TA12200":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"c":{"docs":{},"df":0,"s":{"3":{"4":{"1":{"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"TCS3414CS":{"tf":1}},"df":1}}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"a":{"9":{"5":{"4":{"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"TCA9548A":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"h":{"0":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"TH02":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"m":{"1":{"6":{"3":{"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"TM1637":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"t":{"docs":{},"df":0,"p":{"2":{"2":{"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"TTP223":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"l":{"2":{"5":{"6":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"TSL2561":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"p":{"9":{"8":{"1":{"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"P9813":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"9":{"6":{"8":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"PCA9685":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"n":{"5":{"3":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"PN532":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"docs":{},"df":0,"d":{"4":{"2":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"PPD42NS":{"tf":1}},"df":1}}}}}}},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Pulsensor":{"tf":1}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Electromagnet":{"tf":1}},"df":1}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ElDriver":{"tf":1}},"df":1}}}}}}}}}}},"s":{"0":{"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ES08A":{"tf":1},"servo":{"tf":1}},"df":2}}}}}},"docs":{},"df":0},"9":{"2":{"5":{"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ES9257":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"EHR":{"tf":1}},"df":1}}}}}},"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"EMG":{"tf":1}},"df":1}}}}}},"c":{"docs":{},"df":0,"s":{"1":{"0":{"3":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ECS1030":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"n":{"docs":{},"df":0,"c":{"0":{"3":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ENC03R":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"1":{"3":{"5":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"SSD1351":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"t":{"7":{"7":{"3":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ST7735":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"StepMotor":{"tf":1}},"df":1}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"SCAM":{"tf":1}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Slide":{"tf":1}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Speaker":{"tf":1}},"df":1}}}}}}}}}},"i":{"1":{"1":{"4":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"SI114x":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"m":{"1":{"3":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"SM130":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"x":{"6":{"1":{"1":{"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"SX6119":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"SensorTemplate":{"tf":1}},"df":1}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"3":{"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"URM37":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"UltraSonic":{"tf":1}},"df":1}}}}}}}}}}}},"n":{"2":{"0":{"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ULN200XA":{"tf":1}},"df":1}}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"WheelEncoder":{"tf":1}},"df":1}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"WFS":{"tf":1}},"df":1}}}}}},"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"waterlevel":{"tf":1}},"df":1}}}}}}}}},".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Water":{"tf":1}},"df":1}}}}}}}},"t":{"5":{"0":{"0":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"WT5001":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Relay":{"tf":1}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"RotaryEncoder":{"tf":1}},"df":1}}}}}}}}}}},".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Rotary":{"tf":1}},"df":1}}}}}}}}},"f":{"2":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"RF22":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0,"r":{"3":{"5":{"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"RFR359F":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"p":{"docs":{},"df":0,"r":{"2":{"2":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"RPR220":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"RGBRingCoder":{"tf":1}},"df":1}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"vdiv":{"tf":1}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"2":{"4":{"docs":{},"df":0,"l":{"0":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"NRF24L01":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0}},"docs":{},"df":0},"8":{"0":{"0":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"nrf8001":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"NUNCHUCK":{"tf":1}},"df":1}}}}}}}}}}}},"o":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"O2":{"tf":1}},"df":1}}}}},"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"5":{"3":{"8":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"OTP538U":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"x":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"XBee":{"tf":1}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"g":{"1":{"0":{"0":{"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"YG1006":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"z":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"2":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ZFM20":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0}}},"h":{"3":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"3":{"3":{"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"H3LIS331DL":{"tf":1}},"df":1}}}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"docs":{},"df":0,"m":{"1":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"HM11":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"HMTRP":{"tf":1}},"df":1}}}}}}}},"t":{"9":{"1":{"7":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"HT9170":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"p":{"2":{"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"HP20X":{"tf":1}},"df":1}}}}}},"docs":{},"df":0},"docs":{},"df":0}},"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"2":{"2":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"BMA220":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Button":{"tf":1}},"df":1}}}}}}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Buzzer":{"tf":1}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"0":{"0":{"0":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"BISS0001":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}}},"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"q":{"4":{"4":{"3":{"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"CJQ4435":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Collision":{"tf":1}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"1":{"3":{"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"INA132":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"s":{"docs":{},"df":0,"d":{"1":{"8":{"2":{"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ISD1820":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}},"l":{"docs":{},"df":0,"i":{"9":{"3":{"4":{"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"ILI9341":{"tf":1}},"df":1}}}}},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0},"docs":{},"df":0}}},"k":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"j":{"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"KXTJ3":{"tf":1}},"df":1}}}}},"docs":{},"df":0}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"Flex":{"tf":1}},"df":1}}}}}}}}}}},"pipeline":["trimmer","stopWordFilter","stemmer"]} \ No newline at end of file diff --git a/assets/content/facets.json b/assets/content/facets.json new file mode 100755 index 00000000..cc203a2b --- /dev/null +++ b/assets/content/facets.json @@ -0,0 +1 @@ +{"facets":[{"name":"Project Type","id":"1","type":["Prototyping","Industrial","Medical","Commercial","Extended"]},{"name":"Categories","id":"2","type":["Pressure","Color sensor","Humidity","Temperature","Accelerometer","Button","Analog Input","Light","Radio","Light Controller","Compass","Gyroscope","Motor","Led","Servos","Other"]},{"name":"Connections","id":"3","type":["gpio","i2c","spi","AIO","PWM","Analog"]},{"name":"Starter Kit","id":"4","type":["GSK","DFRobot 3PA","DFRobot 4WD","Robok","Environment & Agriculture Kit","Grove Starter Kit","Home Automation Kit","Robotics Kit","Transportation & Safety Kit"]},{"name":"API Language Support","id":"5","type":["C++","Python","Java","Node.js","C"]},{"name":"Manufacturer","id":"6","type":["Amsys","Silabs","Semtech","Texas Instruments","Meanwell","Seeed","Maxim Integrated","Vishay","DFrobot","Sparkfun","Generic","Honeywell","Emax","Bosch","Acme Co","Max","Kernel","adafruit","Studio"]}]} \ No newline at end of file diff --git a/assets/content/sensorDetail.json b/assets/content/sensorDetail.json new file mode 100644 index 00000000..7f05682d --- /dev/null +++ b/assets/content/sensorDetail.json @@ -0,0 +1 @@ +[{"Library":"a110x","Description":"A110X Hall Effect Library","Sensor Class":{"A110X":{"Name":"API for the A110X Hall Effect Sensors","Description":"UPM module for the A110X (A1101, A1102, A1103, A1104, and A1106) Hall Effect sensors. It outputs a digital signal indicating whether it is detecting a magnetic field with south polarity perpendicular to the sensor element.","Aliases":["a1101","a1102","a1103","a1104","a1106"],"Categories":["halleffect"],"Connections":["gpio"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed"],"Kits":["robok"],"Image":"a110x.jpg","Examples":{"Java":["A110X_Example.java","A110X_intr_Example.java"],"Python":["a110x.py"],"Node.js":["a110x.js"],"C++":["a110x-intr.cxx","a110x.cxx"],"C":["a110x.c"]},"Specifications":{"Vcc":{"unit":"V","low":3.8,"high":24},"Ioutoff":{"unit":"uA","low":0,"high":10},"Supply Current":{"unit":"mA","low":3.8,"high":7.5},"a1101":{"Operate Point":{"unit":"G","low":50,"high":160},"Release Point":{"unit":"G","low":10,"high":130},"Hysteresis":{"unit":"G","low":20,"high":80}},"a1102":{"Operate Point":{"unit":"G","low":130,"high":230},"Release Point":{"unit":"G","low":75,"high":175},"Hysteresis":{"unit":"G","low":30,"high":80}},"a1103":{"Operate Point":{"unit":"G","low":220,"high":340},"Release Point":{"unit":"G","low":165,"high":285},"Hysteresis":{"unit":"G","low":30,"high":80}},"a1104":{"Operate Point":{"unit":"G","low":70,"high":350},"Release Point":{"unit":"G","low":50,"high":330},"Hysteresis":{"unit":"G","low":20}},"a1106":{"Operate Point":{"unit":"G","low":280,"high":400},"Release Point":{"unit":"G","low":180,"high":300},"Hysteresis":{"unit":"G","low":70,"high":140}}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-hall-sensor-p-965.html"],"Datasheets":["http://www.allegromicro.com/en/Products/Part_Numbers/1101/1101.pdf"],"Schematics":["https://learn.adafruit.com/assets/26693"]}}}},{"Library":"abp","Description":"Honeywell Basic Amplified Board mount Pressure(ABP) Sensor Library","Sensor Class":{"ABP":{"Name":"Honeywell ABP Pressure and Temperature Sensors","Description":"This is the UPM Module for the ABP Honeywell Pressure and Temp sensor. This sensor uses an onboard ASIC to output values of pressure that are updated at approximately 2 KHz. It is capable of detecting pressure in the 0-5 psi range and it has an i2c based interface. Temperature calculation using this driver is possible but not all ABP sensors support that functionality.","Aliases":["abp"],"Categories":["pressure","temperature"],"Connections":["i2c"],"Project Type":["medical","industrial","commercial"],"Manufacturers":["honeywell"],"Examples":{"Python":["abp.py"],"Node.js":["abp.js"],"C++":["abp.cxx"],"C":["abp.c"]},"Specifications":{"Vsupply":{"unit":"Vdc","min":-0.3,"max":6},"Supply Current Digital":{"3.3 Vdc":{"unit":"mA","min":"0.0","max":"3.9"},"5.0 Vdc":{"unit":"mA","min":"0.0","max":"4.6"},"Sleep Mode":{"unit":"uA","min":"0.0","max":"10"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Start up Time Digital":{"unit":"ms","time":3},"Response Time Digital":{"unit":"ms","time":0.46},"Compensated Temperature Range":{"unit":"°C","min":0,"max":50},"Pressure Range":{"Differential":[{"unit":"mbar","min":60,"max":4000},{"unit":"kPa","min":6,"max":400},{"unit":"psi","min":1,"max":60}],"Gage":[{"unit":"mbar","min":0,"max":10000},{"unit":"kPa","min":0,"max":1000},{"unit":"psi","min":0,"max":150}]}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://sensing.honeywell.com/sensors/amplified-board-mount-pressure-sensors/basic-abp-series"],"Datasheets":["https://sensing.honeywell.com/honeywell-sensing-basic-board-mount-pressure-abp-series-datasheet-2305128-e-en.pdf"]}}}},{"Library":"ad8232","Description":"Single Lead Heart Rate Monitor","Sensor Class":{"AD8232":{"Name":"AD8232 Heart Rate Monitor Library","Description":"This module simply spits out the ADC values reported by the sensor, with the intent to send that data, via serial or network port, somewhere to another piece of software running on a computer that plots the data for you, like an EKG.","Aliases":["ad8232"],"Categories":["heartrate"],"Connections":["gpio","aio"],"Project Type":["medical"],"Manufacturers":["sparkfun"],"Kits":[],"Image":"ad8232.jpg","Examples":{"Java":["Ad8232_Example.java"],"Python":["ad8232.py"],"Node.js":["ad8232.js"],"C++":["ad8232.cxx"]},"Specifications":{"Vdd":{"unit":"V","low":2,"high":3.5},"ESD Rating":{"unit":"kV","low":8}},"Platforms":{"Intel Joule Module":{"Notes":["Sensor must be driven at 3.3v only."],"Images":[""]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/12650"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Biometric/AD8232.pdf"],"Schematics":["https://cdn.sparkfun.com/datasheets/Sensors/Biometric/AD8232_Heart_Rate_Monitor_v10.pdf"]}}}},{"Library":"adafruitms1438","Description":"Module for the Adafruit Motor Shield 1438","Sensor Class":{"AdafruitMS1438":{"Name":"API for the AdafruitMS1438 Motor Shield","Description":"This class implements support for the stepper and DC motors that can be connected to this Motor Shield.","Aliases":["adafruitms1438"],"Categories":["motor"],"Connections":["i2c"],"Project Type":["motor"],"Manufacturers":["adafruit"],"Kits":[],"Image":"adafruitms1438.jpg","Examples":{"Java":[],"Python":["adafruitms1438-stepper.py","adafruitms1438.py"],"Node.js":["adafruitms1438-stepper.js","adafruitms1438.js"],"C++":["adafruitms1438-stepper.cxx","adafruitms1438.cxx"],"C":[]},"Specifications":{"Vmotor":{"unit":"V","low":4.5,"high":13.5},"Amotor":{"unit":"A","high":1.2},"Apeak":{"unit":"A","high":3},"Vlogic":{"unit":"V","low":3.3,"high":5}},"Platforms":{"Intel Joule Module":{"Notes":["The two servo connections are not controlled by the PCA9685 controller (or this class). They are connected directly to digital PWM pins 9 and 10 on the Arduino* breakout board."],"Images":[""]}},"Urls":{"Product Pages":["https://www.adafruit.com/products/1438"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/TB6612FNG_datasheet_en_20121101.pdf"],"Schematics":["https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino"]}}}},{"Library":"adafruitss","Description":"Adafruit Servo Shield","Sensor Class":{"adafruitss":{"Name":"Adafruit PCA9685-based Servo Shield library","Description":"UPM library for the PCA9685-based Adafruit 16-channel servo shield.","Aliases":["adafruitss"],"Categories":["servos"],"Connections":["i2c"],"Project Type":["servos"],"Manufacturers":["adafruit"],"Kits":[],"Image":"adafruitss.jpg","Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["adafruitss.cxx"],"C":[]},"Specifications":{"Vmotor":{"unit":"v","low":0,"high":6},"Vlogic":{"unit":"V","low":3.3,"high":5},"PWM Frequency":{"unit":"KHz","high":1.6}},"Platforms":{"Intel Joule Module":{"Notes":["If 3 or more GWS servos are attached, results could be unpredictable. Adafruit Industries recommend installing a capacitor on the board, which should alleviate the issue. Sizing depends on servos and their number."],"Images":[""]}},"Urls":{"Product Pages":["http://www.adafruit.com/product/1411"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/PCA9685.pdf"],"Schematics":["https://learn.adafruit.com/assets/36081"]}}}},{"Library":"adc121c021","Description":"I2C 12-bit Analog to Digital Converter with Alert Pin","Sensor Class":{"ADC121C021":{"Name":"API for the ADC121C021 I2C Analog-to-Digital Converter","Description":"UPM module for the ADC121C021 12-bit analog-to-digital converter (ADC). By constantly providing a reference voltage, this sensor helps increase the accuracy of a value collected from an analog sensor.","Aliases":["adc121c021"],"Categories":["aio"],"Connections":["i2c"],"Project Type":["prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"adc121c021.jpg","Examples":{"Java":["ADC121C021_Example.java"],"Python":["adc121c021.py"],"Node.js":["adc121c021.js"],"C++":["adc121c021.cxx"],"C":[]},"Specifications":{"Working Voltage":{"unit":"v","low":5,"high":5},"Resolution":{"unit":"Bit","low":12,"high":12},"Sample Rate":{"unit":"ksps","low":188.9,"high":188.9}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-I2C-ADC-p-1580.html"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_ADC/master/res/ADC121C021_Datasheet.pdf"],"Schematics":[]}}}},{"Library":"adis16448","Description":"Industrial Grade Ten Degrees of Freedom Inertial Sensor","Sensor Class":{"ADIS16448":{"Name":"API for the Analog Devices ADIS16448 Accelerometer","Description":"This is an industrial-grade accelerometer by Analog Devices.","Aliases":["adis16448"],"Categories":["imu"],"Connections":["spi"],"Project Type":["prototyping","industrial"],"Manufacturers":["generic"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":["adis16448.js"],"C++":["adis16448.cxx"],"C":[]},"Specifications":{"Working Voltage":{"unit":"v","low":3.15,"high":3.45},"Working Current":{"unit":"mA","low":76,"high":104}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["http://www.analog.com/en/products/sensors/inertial-measurement-units/adis16448.html"],"Datasheets":["http://www.analog.com/media/en/technical-documentation/data-sheets/ADIS16448.pdf"],"Schematics":[]}}}},{"Library":"ADS1x15","Description":"TI ADC Library","Sensor Class":{"ADS1015":{"Name":"12-bit ADC with Integrated MUX, PGA, Comparator, Oscillator, and Reference","Description":"The ADS1013, ADS1014, and ADS1015 are precision analog-to-digital converters (ADCs) with 12 bits of resolution offered in an ultra-small, leadless QFN-10 package or an MSOP-10 package. The ADS1013/4/5 are designed with precision, power, and ease of implementation in mind. The ADS1013/4/5 feature an onboard reference and oscillator. Data is transferred via an I2C-compatible serial interface; four I2C slave addresses can be selected. The ADS1013/4/5 operate from a single power supply ranging from 2.0V to 5.5V. The ADS1013/4/5 can perform conversions at rates up to 3300 samples per second (SPS). An onboard PGA is available on the ADS1014 and ADS1015 that offers input ranges from the supply to as low as +/- 256mV, allowing both large and small signals to be measured with high resolution. The ADS1015 also features an input multiplexer (MUX) that provides two differential or four single-ended inputs. The ADS1013/4/5 operate either in continuous conversion mode or a single-shot mode that automatically powers down after a conversion and greatly reduces current consumption during idle periods. The ADS1013/4/5 are specified from -40 deg C to +125 deg C. Tested with Adafriut ADS1015 board.","Aliases":["ads1015"],"Categories":["electric"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["ti","adafruit","seeed","sparkfun"],"Image":"ads1015.jpg","Examples":{"Java":["Ads1015_Example.java"],"Python":["ads1015.py"],"Node.js":["ads1115.js","ads1x15.js"],"C++":["ads1x15-adc-sensor.cxx","ads1x15-ads1015.cxx","ads1x15.cxx"]},"Specifications":{"Vdd":{"unit":"v","low":2,"high":5.5},"Data Rate":{"unit":"sps","low":128,"high":3300},"I (continuous mode)":{"unit":"uA","typical":150},"I2C Addresses":{"unit":"address","low":"0x48","high":"0x4B"}},"Platforms":{"Intel Joule Module":{"Notes":["On SeeedStudio Grove Shield for Intel Joule"]},"Intel Edison Module":{"Notes":["On SparkFun Block for Intel Edison - ADC"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1083","http://wiki.seeed.cc/Grove_Shield_for_Intel_Joule/","https://www.sparkfun.com/products/13770"],"Datasheets":["http://www.ti.com/lit/ds/symlink/ads1015.pdf"],"Schematics":["https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/signal-connections"]}},"ADS1115":{"Name":"16-bit ADC with Integrated MUX, PGA, Comparator, Oscillator, and Reference","Description":"The ADS1113, ADS1114, and ADS1115 are precision analog-to-digital converters (ADCs) with 16 bits of resolution offered in an ultra-small, leadless QFN-10 package or an MSOP-10 package. The ADS1113/4/5 are designed with precision, power, and ease of implementation in mind. The ADS1113/4/5 feature an onboard reference and oscillator. Data is transferred via an I2C-compatible serial interface; four I2C slave addresses can be selected. The ADS1113/4/5 operate from a single power supply ranging from 2.0V to 5.5V. The ADS1113/4/5 can perform conversions at rates up to 860 samples per second (SPS). An onboard PGA is available on the ADS1114 and ADS1115 that offers input ranges from the supply to as low as +/- 256mV, allowing both large and small signals to be measured with high resolution. The ADS1115 also features an input multiplexer (MUX) that provides two differential or four single-ended inputs. The ADS1113/4/5 operate either in continuous conversion mode or a single-shot mode that automatically powers down after a conversion and greatly reduces current consumption during idle periods. The ADS1113/4/5 are specified from -40 deg C to +125 deg C. Tested with DIYMall ADS1115 board.","Aliases":["ads1115"],"Categories":["electric"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["ti","adafruit","dfrobot"],"Image":"ads1115.jpg","Examples":{"Java":["Ads1115_Example.java"],"Python":["ads1115.py"],"Node.js":["ads1115.js","ads1x15.js"],"C++":["ads1x15-adc-sensor.cxx","ads1x15-ads1115.cxx","ads1x15.cxx"]},"Specifications":{"Vdd":{"unit":"v","low":2,"high":5.5},"Data Rate":{"unit":"sps","low":8,"high":860},"I (continuous mode)":{"unit":"uA","typical":150},"I2C Addresses":{"unit":"address","low":"0x48","high":"0x4B"}},"Platforms":{"Intel Joule Module":{"Notes":["On DFRobot Gravity Expansion Shield for Intel Joule"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1085","https://www.dfrobot.com/product-1560.html"],"Datasheets":["http://www.ti.com/lit/ds/symlink/ads1115.pdf"],"Schematics":["https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/signal-connections"]}}}},{"Library":"adxl335","Description":"Low-power, 3-axis +/- 3 g Accelerometer","Sensor Class":{"ADXL335":{"Name":"API for the Analog Devices ADIS16448 Accelerometer","Description":"UPM module for the ADXL335 3-axis analog accelerometer. This was tested on a Grove 3-axis Analog Accelerometer. It uses 3 analog pins, one for each axis: X, Y, and Z.","Aliases":["adxl335"],"Categories":["imu","accelerometers"],"Connections":["analog"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed"],"Kits":[],"Image":"adxl335.jpg","Examples":{"Java":[],"Python":["adxl335.py"],"Node.js":["adxl335.js"],"C++":["adxl335.cxx"],"C":[]},"Specifications":{"Working Voltage":{"unit":"v","low":1.8,"high":3.6},"Working Current":{"unit":"uA","low":350,"high":350}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["http://www.analog.com/en/products/mems/accelerometers/adxl335.html"],"Datasheets":["http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL335.pdf"],"Schematics":[]}}}},{"Library":"adxl345","Description":"3-axis, +/- 2/4/8/16 g Digital Accelerometer","Sensor Class":{"Adxl345":{"Name":"API for the ADXL345 3-Axis Digital Accelerometer","Description":"ADXL345 is a 3-axis digital accelerometer. The sensor has configurable resolutions to measure +/- 2g, +/- 4g, +/- 8g, or +/- 16g.","Aliases":["adxl335"],"Categories":["imu","accelerometers"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed"],"Kits":[],"Image":"adxl335.jpg","Examples":{"Java":[],"Python":["adxl345.py"],"Node.js":["adxl345.js"],"C++":["adxl345.cxx"],"C":[]},"Specifications":{"Working Voltage":{"unit":"v","low":2,"high":3.6},"Working Current":{"unit":"uA","low":30,"high":140}},"Platforms":{"Intel Edison":{"Notes":["The Grove* version of the sensor is incompatible with and not detected on the I2C bus by the Intel(R) Edison using an Arduino* breakout board at 5V (3V works fine)."],"Images":[""]}},"Urls":{"Product Pages":["http://www.analog.com/en/products/mems/accelerometers/adxl345.html"],"Datasheets":["http://www.seeedstudio.com/wiki/images/2/2c/ADXL345_datasheet.pdf","http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf"],"Schematics":[]}}}},{"Library":"adxrs610","Description":"Gyro Breakout Board (300 Degrees/second)","Sensor Class":{"ADXRS610":{"Name":"DFRobot ADXRS610 Gyro Breakout Board","Description":"The ADXRS610 is a MEMS based single axis gyroscope with a range of +/- 300 degrees/sec. It also incorporates a temperature sensing unit that can be used for advanced calibration. This sensor returns an analog voltage proportional to the rotation about the Z-axis in degrees/sec. The temperature component returns a proportional analog values in degrees C. This driver was developed using the DFRobot ADXRS610 Gyro Beakout board.","Aliases":["adxrs610"],"Categories":["imu","gyroscope"],"Connections":["analog"],"Project Type":["prototyping","industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Image":"adxrs610.jpg","Examples":{"Java":[],"Python":["adxrs610.py"],"Node.js":["adxrs610.js"],"C++":["adxrs610.cxx"],"C":[]},"Specifications":{"Vdd":{"unit":"v","low":5,"high":5},"Quiescent Current":{"unit":"mA","low":3.5,"high":4.5}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-642.html"],"Datasheets":["http://image.dfrobot.com/image/data/SEN0070/ADXRS610%20datasheet_EN.pdf"],"Schematics":["http://image.dfrobot.com/image/data/SEN0070/ADXRS610_Gyro_Breakout.pdf"]}}}},{"Library":"am2315","Description":"Digital Temperature and Humidity Sensor","Sensor Class":{"AM2315":{"Name":"API for the AM2315 Temperature & Humidity Sensor","Description":"The AM2315 is a digital humidity sensor with temperature output. RH reports between 0 and 100%, and the temperature range is -40 to +125 degC. The sampling period of this sensor is 2 seconds. Reads occurring more often than that return cached data.","Aliases":["am2315"],"Categories":["humidity","temperature"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["adafruit"],"Kits":[],"Examples":{"Java":["AM2315_Example.java"],"Python":[],"Node.js":[],"C++":["am2315.cxx"],"C":[]},"Specifications":{"Vcc":{"unit":"v","low":3.5,"high":5.5},"Current Draw":{"unit":"mA","low":0,"high":10},"Temperature Sensor Range":{"unit":"degC","low":-20,"high":80},"Humidity Sensor Range":{"unit":"%","low":0,"high":100}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["http://www.adafruit.com/products/1293"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/AM2315.pdf"],"Schematics":[]}}}},{"Library":"apa102","Description":"Adafruit apa102 iPixel LED library","Sensor Class":{"APA102":{"Name":"Adafruit apa102 iPixel LED","Description":"This is the UPM Module for the Adafruit apa102 LED. This RGB LED package offers a PWM interface for fine tuning of colors, as well as offering shifting. Each LED module can read the top layer of commands, before shifting the next layer to the next LED, allowing you to communicate to a large string of LEDs.","Aliases":["apa102","iPixel LED","APA102 5050 RGB LED with integrated driver chip"],"Categories":["led"],"Connections":["SPI"],"Project Type":["prototyping","commercial"],"Manufacturers":["Shiji Lighting","Adafruit"],"Image":"apa102.jpg","Examples":{"Java":["APA102_Example.java"],"Python":["apa102.py"],"Node.js":["apa102.js"],"C++":["apa102.cxx"]},"Specifications":{"Vdd":{"unit":"V","min":5,"max":5.5},"Supply Current Digital":{"Normal mode":{"unit":"mA","min":"22.5","max":"26.5"}},"Operating Temperature":{"unit":"°C","min":-40,"max":70}},"Urls":{"Product Pages":["https://www.adafruit.com/product/2343"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/APA102.pdf"]}}}},{"Library":"apds9002","Description":"Seeed luminance sensor library","Sensor Class":{"APDS9002":{"Name":"Seeed luminance sensor","Description":"This is the UPM Module for the apds9002, Seeed luminance sensor. This sensor offers a luminance sensor solution that has a responsitivity close to that of the human eye. Operates at 3.3 and 5 volts on a Seeed standard breakout board.","Aliases":["apds9002","Grove - Luminance Sensor"],"Categories":["light"],"Connections":["Analog"],"Project Type":["prototyping","mobile"],"Manufacturers":["Avago","Seeed"],"Image":"apds9002.jpg","Examples":{"Java":["Apds9002_Example.java"],"Python":["apds9002.py"],"Node.js":["apds9002.js"],"C++":["apds9002.cxx"]},"Specifications":{"Vdd":{"unit":"V","min":2.4,"max":5.5},"Measurement range":{"unit":"Lux","min":"0","max":"1000"},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Rise time":{"unit":"ms","typ":0.95,"max":2},"Fall time":{"unit":"ms","typ":0.8,"max":2}},"Platforms":{"Intel Edison":{"Notes":["Might require Seeed breakout board"]},"Arduino 101":{"Notes":["Might require Seeed breakout board"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Luminance-Sensor-p-1941.html"],"Datasheets":["http://www.mouser.com/ds/2/678/V02-3579EN-DS-APDS-9002-11Jun20120-909745.pdf"]}}}},{"Library":"apds9930","Description":"SparkFun apds9930 ambient light and color sensor library","Sensor Class":{"APDS9930":{"Name":"SparkFun apds9930 ambient light and color sensor","Description":"This is the UPM Module for the SparkFun RGB and ambient light sensor. This sensor also has gesture and proximity detection, coupled with IR and UV filters to reduce background noise. Uses i2c to communicate and can operate on 3.3 volts.","Aliases":["apds9930","SparkFun RGB and Gesture Sensor - APDS-9960"],"Categories":["light","proximity"],"Connections":["iio","i2c"],"Project Type":["prototyping","mobile","robotics"],"Manufacturers":["Avago","SparkFun"],"Examples":{"C++":["apds9930.cxx"]},"Specifications":{"Vdd":{"unit":"V","min":2.4,"max":3.8},"Supply Current Digital":{"Normal Mode":{"unit":"uA","min":"38.0","max":"790"},"Sleep mode":{"unit":"uA","typ":"1.0"}},"Operating Temperature":{"unit":"°C","min":-30,"max":85}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/12787"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Proximity/apds9960.pdf"]}}}},{"Library":"at42qt1070","Description":"Atmel Touch Sensor library","Sensor Class":{"AT42QT1070":{"Name":"Atmel AT42QT1070 touch sensor","Description":"This is the UPM Module for the Atmel at42qt1070 touch sensor. This sensor is a single touch capacitive sensor, able to detect when a capacitive load is applied to one of the five pins offered. It has extensive exernal noise and RF suppression built in. When a capacitive load is detected, the corrisponding output is pulled low until the load is eliminated.","Aliases":["at42qt1070","Grove-Q Touch Sensor"],"Categories":["touch"],"Connections":["i2c"],"Project Type":["prototyping"],"Manufacturers":["Atmel","Seeed"],"Image":"at42qt1070.jpg","Examples":{"Python":["at42qt1070.py"],"Node.js":["at42qt1070.js"],"C++":["at42qt1070.cxx"]},"Specifications":{"Vdd":{"unit":"V","min":1.8,"max":5.5},"Supply Current Digital":{"3.3 Vdc":{"unit":"mA","min":"0.0","max":"1.0"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Capacitance":{"unit":"pF","min":1,"max":30}},"Platforms":{"Intel Edison":{"Notes":["Might require Seeed breakout board"]},"Arduino 101":{"Notes":["Might require Seeed breakout board"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Q-Touch-Sensor-p-1854.html"],"Datasheets":["http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-9596-AT42-QTouch-BSW-AT42QT1070_Datasheet.pdf"]}}}},{"Library":"BH1749","Description":"ROHM BH1749 Color sensor (16-bit) library","Sensor Class":{"BH1749":{"Name":"ROHM BH1749 Color sensor (16-bit)","Description":"BH1749NUC is a digital color sensor IC with I2C bus interface. This IC senses Red, Green, Blue (RGB) and Infrared and converts them to digital values. The high sensitivity, wide dynamic range and excellent Ircut characteristics make it possible for this IC to obtain the accurate illuminance and color temperature of ambient light. It is ideal for adjusting LCD backlight of TV, mobile phone and tablet PC.","Categories":["color sensor"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["ROHM"],"Examples":{"C++":["bh1749.cxx"],"C":["bh1749.c"],"Java":["BH1749_Example.java"],"Python":["bh1749.py"],"Node.js":["bh1749.js"]},"Specifications":{"Supply Voltage (VDD)":{"unit":"V","min":2.3,"max":3.6},"Supply Current":{"unit":"uA","min":0.8,"max":190},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Illumination Detection":{"unit":"klx","value":80}},"Urls":{"Product Pages":["https://www.rohm.com/products/sensors-mems/color-sensor-ics/bh1745nuc-product"],"Datasheets":["https://www.rohm.com/datasheet/BH1749NUC/bh1749nuc-e"]}}}},{"Library":"bh1750","Description":"DFRobot BH1750 light intensity sensor library","Sensor Class":{"BH1750":{"Name":"DFRobot BH1750 light intensity sensor","Description":"This is the UPM Module for the DFRobot bh1750 light intensity sensor. This sensor outputs light level data directly in Lux(Lx), eliminating complicated voltage calculations from your program. Offers a large range of Lx sensativity, with high resolution and i2c communication.","Aliases":["bh1750","DFRobot - Light Sensor - BH1750"],"Categories":["light"],"Connections":["i2c"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["DFRobot","Rohm"],"Examples":{"Java":["BH1750_Example.java"],"Python":["bh1750.py"],"Node.js":["bh1750.js"],"C++":["bh1750.cxx"],"C":["bh1750.c"]},"Specifications":{"Vdd":{"unit":"V","min":3,"max":5},"Supply Current Digital":{"Normal mode":{"unit":"uA","typ":"120","max":"190"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Detection Range":{"unit":"Lux","min":1,"max":65535}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-531.html"],"Datasheets":["http://image.dfrobot.com/image/data/SEN0097/BH1750FVI.pdf"]}}}},{"Library":"BH1792","Description":"ROHM BH1792 Heart Rate Sensor library","Sensor Class":{"BH1792":{"Name":"ROHM BH1792 Heart Rate Sensor library","Description":"BH1792GLC is optical sensor for heart rate monitor IC in which LED driver, green light and IR detection photodiode are incorporated. This device drives LED and provides the intensity of light reflected from body. LED brightness can be adjusted by LED driver current. The photodiode having the high sensitivity for green light and excellent wavelength selectivity achieves accurate pulse wave detection.","Categories":["medical"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["ROHM"],"Examples":{"C++":["bh1792.cxx"],"C":["bh1792.c"],"Java":["BH1792_Example.java"],"Python":["bh1792.py"],"Node.js":["bh1792.js"]},"Specifications":{"Supply Voltage (VDD)":{"unit":"V","min":2.5,"typical":3,"max":3.6},"Terminal Input Voltage":{"unit":"V","min":0.7,"max":5.5},"Supply Current":{"unit":"uA","min":0.8,"max":200},"LED Supply Current":{"unit":"mA","typical":1.4,"max":3},"Standby Mode Current":{"unit":"uA","typical":0.8,"max":1.5},"Operating Temperature":{"unit":"°C","min":-20,"max":85}},"Urls":{"Product Pages":["https://www.rohm.com/sensor-shield-support/heart-rate-sensor2"],"Datasheets":["https://www.rohm.com/datasheet/BH1792GLC/bh1792glc-e"]}}}},{"Library":"biss0001","Description":"Seeed PIR motion sensor library","Sensor Class":{"BISS0001":{"Name":"Seeed BISS0001 PIR motion detector","Description":"This is the UPM Module for the Seeed BISS0001 PIR motion detector. This sensor offers a 120 degree sensor arc, with a 3 to 6 meter detecting distance. It also offers adjustable detecting distance and hold times.","Aliases":["biss0001","Grove - PIR Motion Sensor"],"Categories":["light"],"Connections":["GPIO"],"Project Type":["prototyping","home","industrial"],"Manufacturers":["seeed"],"Kits":["tsk"],"Image":"biss0001.jpg","Examples":{"Java":["BISS0001_Example.java"],"Python":["biss0001.py"],"Node.js":["biss0001.js"],"C++":["biss0001.cxx"],"C":["biss0001.c"]},"Specifications":{"Vdd":{"unit":"V","min":3,"max":5},"Supply Current Digital":{"5.0 Vdc":{"unit":"mA","typ":"10"}},"Operating Temperature":{"unit":"°C","min":-20,"max":70},"Storage Temperature":{"unit":"°C","min":-40,"max":125},"Response Time Digital":{"unit":"s","min":0.3,"max":25},"Detecting angle":{"unit":"degrees","angle":120},"Detecting distance":{"unit":"m","min":3,"max":6}},"Platforms":{"Intel Edison":{"Notes":["Requires Seeed expansion board"]},"Arduino 101":{"Notes":["Requires Seeed expansion board"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-PIR-Motion-Sensor-p-802.html"],"Datasheets":["http://wiki.seeedstudio.com/images/2/2f/Twig_-_BISS0001.pdf"]}}}},{"Library":"bma220","Description":"Bosch Sensortec accelerometer library","Sensor Class":{"BMA220":{"Name":"Bosch BMA220 accelerometer","Description":"This is the UPM Module for the Bosch BMA220 accelerometer. A triaxis accelerometer which measures acceleration in three perpendicular axes. It offers interruption pins, as well as motion interrupts, which can be triggered via orientation, shock, or taps. DFRobot offers this on an evaluation board, known as SEN0168.","Aliases":["BMA220","DFRobot SEN0168"],"Categories":["accelerometer"],"Connections":["i2c","gpio"],"Project Type":["industrial","commercial","prototyping"],"Manufacturers":["bosch"],"Image":"bma220.jpg","Examples":{"Python":["bma220.py"],"Node.js":["bma220.js"],"C++":["bma220.cxx"]},"Specifications":{"Vdd":{"unit":"V","min":1.62,"max":1.98},"Supply Current Digital":{"Normal mode":{"unit":"uA","typ":"250"},"Low power mode":{"unit":"uA","typ":"10"},"Suspend mode":{"unit":"uA","min":"<1"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Wake-up time":{"unit":"ms","max":1.2},"Start-up time":{"unit":"ms","typ":1.5}},"Urls":{"Product Pages":["http://www.mouser.com/ProductDetail/Bosch-Sensortec/BMA220/?qs=d72FGnIDsgT670fCZvhfag%3D%3D"],"Datasheets":["http://www.mouser.com/ds/2/783/BST-BMA220-DS003-08-838368.pdf"]}}}},{"Library":"bma250e","Description":"Bosch Sensortec accelerometer library","Sensor Class":{"BMA250E":{"Name":"Bosch BMA250E accelerometer","Description":"This is the UPM Module for the Bosch BMA250E accelerometer. This sensor offers triaxial low-g acceleration detection, and offers spi and i2c interfaces. It also offers interrupts, which can be activated by input, such as new data, motion, taps, or even different orientations.","Aliases":["bma250e"],"Categories":["accelerometer"],"Connections":["i2c","spi","gpio"],"Project Type":["industrial","commercial"],"Manufacturers":["bosch"],"Examples":{"Java":["BMA250E_Example.java"],"Python":["bma250e.py"],"Node.js":["bma250e.js"],"C++":["bma250e.cxx"],"C":["bma250e.c"]},"Specifications":{"Vdd":{"unit":"V","min":1.62,"max":3.6},"Supply Current Digital":{"Normal mode":{"unit":"uA","typ":"130"},"Suspend mode":{"unit":"uA","typ":"2.1"},"Deep suspend mode":{"unit":"uA","typ":"1"},"Low-power mode 1":{"unit":"uA","typ":"6.5"},"Low-power mode 2":{"unit":"uA","typ":"66"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Start-up time":{"unit":"ms","max":"1.2"},"Wake-up time 1":{"unit":"ms","typ":"1.3","max":"1.8"},"Wake-up time 2":{"unit":"ms","typ":"1","max":"1.2"}},"Urls":{"Product Pages":["https://www.bosch-sensortec.com/bst/products/all_products/bma250e"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMA250E-DS004-06.pdf"]}}}},{"Library":"bmg","Description":"Bosch Sensortec 3-axis gyroscope library","Sensor Class":{"BMG160":{"Name":"Bosch 3-Axis gyroscope","Description":"This is the UPM Module for the Bosch BMG160 3-Axis gyroscope. Offers 16 bit digital resolution, with 5 scale ranges. Supports interrupts and low power modes. Offers i2c and SPI interfaces.","Aliases":["bmg160"],"Categories":["gyroscope"],"Connections":["i2c","spi","gpio"],"Project Type":["industrial","commercial"],"Manufacturers":["bosch"],"Examples":{"Java":["BMG160_Example.java"],"Python":["bmg160.py"],"Node.js":["bmg160.js"],"C++":["bmg160.cxx"],"C":["bmg160.c"]},"Specifications":{"Vdd":{"unit":"V","min":2.4,"max":3.6},"Supply Current Digital":{"Normal mode":{"unit":"mA","typ":"2.5"},"Sleep mode":{"unit":"uA","typ":"25"},"Deep sleep mode":{"unit":"uA","typ":"<5"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Start up time":{"unit":"ms","time":3},"Wake-up time":{"unit":"ms","min":10,"max":30}},"Urls":{"Product Pages":["https://www.bosch-sensortec.com/bst/products/all_products/bmg160"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMG160-DS000-09.pdf"]}}}},{"Library":"bmi160","Description":"Bosch Sensortec accelerometer and gyroscope library.","Sensor Class":{"BMI160":{"Name":"Bosch accelerometer and gyroscope","Description":"This is the UPM Module for the BMI160 Bosch low power inertial measurement unit. High performance hardware synchronized accelerometer and gyroscope, with very low power consumption. Extended i2c mode with 1 MHz clock frequencies. This sensor is able to handle external sensor data from other Bosch sensors.","Aliases":["BMI160"],"Categories":["accelerometer","gyroscope","compass"],"Connections":["i2c"],"Project Type":["industrial","commercial"],"Manufacturers":["bosch"],"Examples":{"Java":["BMI160_Example.java"],"Python":["bmi160.py"],"Node.js":["bmi160.js"],"C++":["bmi160.cxx"],"C":["bmi160.c"]},"Specifications":{"Vdd":{"unit":"V","min":1.71,"max":3.6},"Supply Current Digital":{"Full operation":{"unit":"uA","typ":"925","max":"990"},"Suspended mode":{"unit":"uA","typ":"3","max":"10"},"Significant motion detection":{"unit":"uA","max":"20"},"Step detector":{"unit":"uA","max":"20"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Start up time accelerometer":{"unit":"ms","time":3.2},"Response time gyroscope":{"unit":"ms","time":55}},"Urls":{"Product Pages":["https://www.bosch-sensortec.com/bst/products/all_products/bmi160"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMI160-DS000-07.pdf"]}}}},{"Library":"bmx050","Description":"Bosch 3-axis Magnetometer","Sensor Class":{"BMM150":{"Name":"3-axis Geomagnetic Sensor","Description":"The BMM150 is a standalone geomagnetic sensor for consumer market applications. It allows measurements of the magnetic field in three perpendicular axes. Based on Bosch's proprietary FlipCore technology, performance and features of BMM150 are carefully tuned and perfectly match the demanding requirements of all 3-axis mobile applications such as electronic compass, navigation or augmented reality. An evaluation circuitry (ASIC) converts the output of the geomagnetic sensor to digital results which can be read out over the industry standard digital interfaces (SPI and I2C). Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.","Aliases":["bme280"],"Categories":["pressure","humidity","temperature"],"Connections":["gpio","i2c","spi"],"Project Type":["prototyping","industrial"],"Manufacturers":["bosch"],"Kits":[],"Examples":{"Java":["BMM150_Example.java"],"Python":["bmm150.py"],"Node.js":["bmm150.js"],"C++":["bmm150.cxx"],"C":["bmm150.c"]},"Specifications":{"Vdd":{"unit":"v","low":1.62,"high":3.6},"Temperature Range":{"unit":"degC","low":-40,"high":85},"Sensing Range":{"unit":"uT (±)","low":1300,"high":2500}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.bosch-sensortec.com/bst/products/all_products/bmm150"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMM150-DS001-01.pdf"],"Schematics":[]}}}},{"Library":"bmp280","Description":"Bosch Atmospheric Sensor Library","Sensor Class":{"BME280":{"Name":"Digital Humidity, Pressure, and Temperature Sensor","Description":"The BME280 is as combined digital humidity, pressure and temperature sensor based on proven sensing principles. The sensor module is housed in an extremely compact metal-lid LGA package with a footprint of only 2.5 * 2.5 mm2 with a height of 0.93 mm. Its small dimensions and its low power consumption allow the implementation in battery driven devices such as handsets, GPS modules or watches. The BME280 is register and performance compatible to the Bosch Sensortec BMP280 digital pressure sensor","Aliases":["bme280","Grove - Barometer Sensor(BME280)"],"Categories":["pressure","humidity","temperature"],"Connections":["gpio","i2c","spi"],"Project Type":["prototyping","industrial"],"Manufacturers":["adafruit","seeed","bosch"],"Examples":{"Java":["BMP280_Example.java"],"Python":["bmp280.py"],"Node.js":["bmp280.js"],"C++":["bmp280.cxx"],"C":["bmp280.c"]},"Specifications":{"Vdd":{"unit":"v","low":1.7,"high":3.6},"Ioff":{"unit":"mA","low":0,"high":0},"Iavg":{"unit":"mA","low":1,"high":2},"Pressure Range":{"unit":"hpA","low":300,"high":1100},"Temperature Range":{"unit":"C","low":-40,"high":85}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"]}},"Urls":{"Product Pages":["https://www.adafruit.com/products/2652"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf"],"Schematics":["https://learn.adafruit.com/assets/26693"]}},"BMP280":{"Name":"Digital Pressure Sensor","Description":"The BMP280 is an absolute barometric pressure sensor especially designed for mobile applications. The sensor module is housed in an extremely compact 8-pin metal-lid LGA package with a footprint of only 2.0 * 2.5 mm2 and 0.95 mm package height. Its small dimensions and its low power consumption of 2.7 uA @1Hz allow the implementation in battery driven devices such as mobile phones, GPS modules or watches. As the successor to the widely adopted BMP180, the BMP280 delivers high performance in all applications that require precise pressure measurement. The BMP280 operates at lower noise, supports new filter modes and an SPI interface within a footprint 63% smaller than the BMP180.","Aliases":["bmp280","Grove - Barometer Sensor (BMP280)"],"Categories":["pressure","humidity","temperature"],"Connections":["gpio","i2c","spi"],"Project Type":["prototyping","industrial"],"Manufacturers":["adafruit","seeed","bosch"],"Examples":{"Java":["BME280_Example.java","BME280_InterfaceExample"],"Python":["bme280.py"],"Node.js":["bme280.js"],"C++":["bmp280-bme280.cxx"],"C":["bmp280-bme280.c"]},"Specifications":{"Vdd":{"unit":"v","low":1.7,"high":3.6},"Ioff":{"unit":"mA","low":0,"high":0},"Iavg":{"unit":"mA","low":1,"high":2},"Pressure Range":{"unit":"hpA","low":300,"high":1100},"Temperature Range":{"unit":"C","low":-40,"high":85}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"]}},"Urls":{"Product Pages":["https://www.adafruit.com/products/2651"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMP280-DS001-18.pdf"],"Schematics":["https://learn.adafruit.com/assets/26693"]}}}},{"Library":"bmpx8x","Description":"BMP Atmospheric Pressure Sensor","Sensor Class":{"BMPX8X":{"Name":"BMP Atmospheric Pressure Sensor","Description":"The BME280 is as combined digital humidity, pressure and temperature sensor based on proven sensing principles. The sensor module is housed in an extremely compact metal-lid LGA package with a footprint of only 2.5 * 2.5 mm2 with a height of 0.93 mm. Its small dimensions and its low power consumption allow the implementation in battery driven devices such as handsets, GPS modules or watches. The BME280 is register and performance compatible to the Bosch Sensortec BMP280 digital pressure sensor","Aliases":["bmpx8x"],"Categories":["pressure"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","adafruit","sparkfun"],"Kits":[],"Examples":{"Java":["BMPX8X_Example.java"],"Python":["bmpx8x.py"],"Node.js":["bmpx8x.js"],"C++":["bmpx8x.cxx"],"C":["bmpx8x.c"]},"Specifications":{"Vdd":{"unit":"v","low":1.8,"high":3.6},"Supply Current":{"unit":"uA","low":3,"high":32},"Peak Current":{"unit":"uA","low":650,"high":1000},"Standby Current":{"unit":"uA","low":0.1,"high":0.1},"Pressure Range":{"unit":"hPa","low":300,"high":1100},"Temperature Range":{"unit":"C","low":-40,"high":85}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1900"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/1900_BMP183.pdf","https://www.sparkfun.com/datasheets/Components/General/BST-BMP085-DS000-05.pdf"],"Schematics":["https://learn.adafruit.com/adafruit-bmp183-spi-barometric-pressure-and-altitude-sensor/downloads#schematic"]}}}},{"Library":"bmx055","Description":"BMX055 9-axis Sensor Module","Sensor Class":{"BMX055":{"Name":"BMX055 9-axis Sensor Module","Description":"The BMX055 is an integrated 9-axis sensor for the detection of movements and rotations and magnetic heading. It comprises the full functionality of a triaxial, low-g acceleration sensor, a triaxial angular rate sensor and a triaxial geomagnetic sensor. The BMX055 senses orientation, tilt, motion, acceleration, rotation, shock, vibration and heading in cell phones, handhelds, computer peripherals, man-machine interfaces, virtual reality features and game controllers. The BMX055 is essentially 3 separate devices in one: the BMA250E Accelerometer, the BMG160 Gyroscope, and the BMM150 Magnetometer. They are completely independant of each other. This driver provides a very simple interface to these 3 devices. If finer control is desired, you should just use the separate BMA25E, BMG160, and BMM150 device classes directly. This driver simply initializes all three devices, and provides a mechanism to read accelerometer, gyroscope and magnetometer data from them.","Aliases":["bmx055"],"Categories":["imu","accelerometer","gyroscope","magnetometer"],"Connections":["gpio","i2c","spi"],"Project Type":["prototyping","industrial"],"Manufacturers":["bosch"],"Kits":[],"Examples":{"Java":["BMX055_Example.java"],"Python":["bmx055.py"],"Node.js":["bmx055.js"],"C++":["bmx055.cxx"],"C":[]},"Specifications":{"Vdd":{"unit":"v","low":2.4,"high":3.6},"Measurement Range (Accelerometer)":{"unit":"g","low":2,"high":16},"Measurement Range (Gyroscope)":{"unit":"deg/s","low":125,"high":2000},"Measurement Range (Magnetometer)":{"unit":"LSB/uT","typ":3.3},"Iavg":{"unit":"uA","low":130,"high":5000},"Temperature Range":{"unit":"C","low":-40,"high":85}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.bosch-sensortec.com/bst/products/all_products/bmx055"],"Datasheets":["https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMX055-DS000-02.pdf"],"Schematics":[]}}}},{"Library":"bno055","Description":"API for the BNO055 Absolute Orientation 9DOF Fusion Hub","Sensor Class":{"BNO055":{"Name":"Intelligent 9-axis Absolute Orientation Sensor","Description":"The BNO055 is a System in Package (SiP), integrating a triaxial 14-bit accelerometer, a triaxial 16-bit gyroscope with a range of +/- 2000 degrees per second, a triaxial geomagnetic sensor and a 32-bit cortex M0+ microcontroller running Bosch Sensortec sensor fusion software, in a single package. This sensor handles the hard problem of combining various sensor information into a reliable measurement of sensor orientation (refered to as 'sensor fusion'). The onboard MCU runs this software and can provide fusion output in the form of Euler Angles, Quaternions, Linear Acceleration, and Gravity Vectors in 3 axes. The focus on this driver has been on supporting the fusion components. Less support is available for use of this device as a generic accelerometer, gyroscope and magnetometer, however enough infrastructure is available to add any missing functionality. This device requires calibration in order to operate accurately. Methods are provided to retrieve calibration data (once calibrated) to be stored somewhere else, like in a file. A method is provided to load this data as well. Calibration data is lost on a power cycle. See one of the examples for a description of how to calibrate the device, but in essence: There is a calibration status register available (getCalibrationStatus()) that returns the calibration status of the accelerometer (ACC), magnetometer (MAG), gyroscope (GYR), and overall system (SYS). Each of these values range from 0 (uncalibrated) to 3 (fully calibrated). Calibration involves certain motions to get all 4 values at 3. The motions are as follows (though see the datasheet for more information): GYR: Simply let the sensor sit flat for a few seconds. ACC: Move the sensor in various positions. Start flat, then rotate slowly by 45 degrees, hold for a few seconds, then continue rotating another 45 degrees and hold, etc. 6 or more movements of this type may be required. You can move through any axis you desire, but make sure that the device is lying at least once perpendicular to the x, y, and z axis. MAG: Move slowly in a figure 8 pattern in the air, until the calibration values reaches 3. SYS: This will usually reach 3 when the other items have also reached 3. If not, continue slowly moving the device though various axes until it does.","Aliases":["bno055"],"Categories":["accelerometer","compass"],"Connections":["gpio","i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["adafruit"],"Kits":[],"Examples":{"Java":["BNO055_Example.java"],"Python":["bno055.py"],"Node.js":["bno055.js"],"C++":["bno055.cxx"],"C":["bno055.c"]},"Specifications":{"Vsource":{"unit":"v","low":2.4,"high":3.6},"Supply Current":{"unit":"mA","low":0.33,"high":12.3},"Supply Current (Suspended)":{"unit":"uA","typ":40},"Gyroscope Ranges":{"unit":"deg/s","low":125,"high":2000},"Magnetometer Ranges":{}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.adafruit.com/products/2472"],"Datasheets":["https://cdn-learn.adafruit.com/assets/assets/000/036/832/original/BST_BNO055_DS000_14.pdf"],"Schematics":["https://cdn-learn.adafruit.com/assets/assets/000/024/546/medium800/sensors_BNO055_REV-C.png?1429569060"]}}}},{"Library":"button","Description":"Generic library for buttons & switches","Sensor Class":{"Button":{"Name":"Button","Description":"Basic UPM module for buttons and switches. Allows attaching a callback function to state transitions.","Aliases":["Grove - Button"],"Categories":["button"],"Connections":["gpio"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","dfrobot","sparkfun","adafruit","generic"],"Kits":["gsk"],"Image":"button.jpg","Examples":{"Java":["Button_Example.java","Button_intr_Example.java"],"Python":["button.py"],"Node.js":["button.js"],"C++":["button.cxx"],"C":["button.c","button-intr.c"]},"Urls":{"Product Pages":["http://wiki.seeed.cc/Grove-Button/"],"Schematics":["https://easyeda.com/Seeed/Grove_Button_v1_2-f0f9f212fcee460ebe3703dab813e5c4"]}}}},{"Library":"buzzer","Description":"Generic library for piezoelectric buzzers","Sensor Class":{"Buzzer":{"Name":"Buzzer","Description":"This module defines the Buzzer interface for libbuzzer. This sensor can make different tones when connected to a pin capable of analog pulse-width modulation. It emits sound using a piezoelectric material that vibrates at different frequencies based on the input voltage.","Aliases":["Grove - Buzzer"],"Categories":["sound"],"Connections":["pwm"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","dfrobot","sparkfun","adafruit","generic"],"Kits":["gsk"],"Image":"buzzer.jpg","Examples":{"Java":["Buzzer_Example.java"],"Python":["buzzer.py"],"Node.js":["buzzer.js"],"C++":["buzzer.cxx"],"C":["buzzer.c"]},"Platforms":{"Intel Edison":{"Notes":["Might not work correctly with early versions of MRAA/UPM libraries, please use the latest versions."]}},"Urls":{"Product Pages":["http://wiki.seeed.cc/Grove-Buzzer/"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Components/General/cem-1203-42-.pdf"],"Schematics":["https://easyeda.com/Seeed/Grove_Buzzer_v1_2-c713baf3c1774da39ce0c995544ce5da"]}}}},{"Library":"cjq4435","Description":"API for the CJQ4435 MOSFET","Sensor Class":{"CJQ4435":{"Name":"CJQ4435 MOSFET","Description":"UPM module for the CJQ4435 MOSFET. It was developed using the Grove MOSFET module, but could be used with any MOSFET. A MOSFET is like a switch, but it can switch much faster than a mechanical relay. Here, we implement support via MRAA pulse width modulation (PWM) functions. Note: available periods vary depending on the capabilities of your platform.","Aliases":["cjq4435"],"Categories":["electric"],"Connections":["gpio","pwm"],"Project Type":["prototyping","robotics"],"Manufacturers":["seeed"],"Kits":["robok"],"Image":"cjq4435.jpg","Examples":{"Java":["CJQ4435_Example.java"],"Python":["cjq4435.py"],"Node.js":["cjq4435.js"],"C++":["cjq4435.cxx"],"C":["cjq4435.c"]},"Specifications":{"Trigger Voltage":{"unit":"V","typ":5},"Working Voltage":{"unit":"V","low":5,"high":15}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-MOSFET-p-1594.html","http://wiki.seeed.cc/Grove-MOSFET/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-MOSFET/master/res/CJQ4435.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-MOSFET/raw/master/res/Grove%20-%20MOSFET%20.pdf"]}}}},{"Library":"collision","Description":"API for the Collision Sensor","Sensor Class":{"Collision":{"Name":"Grove Collision Sensor","Description":"The Collision Sensor can detect whether any collision movement or vibration happens. It outputs a low pulse signal when vibration is detected.","Aliases":["collision"],"Categories":["collision","accelerometer"],"Connections":["gpio"],"Project Type":["prototyping","robotics"],"Manufacturers":["seeed"],"Kits":[],"Image":"collision.jpg","Examples":{"Java":["Collision_Example.java"],"Python":["collision.py"],"Node.js":["collision.js"],"C++":["collision.cxx"],"C":["collision.c"]},"Specifications":{"Vsource":{"unit":"V","low":3.3,"high":5}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Collision-Sensor-p-1132.html","http://wiki.seeed.cc/Grove-Collision_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Collision_Sensor/master/res/DataSheet-MVS0608_02-v2_1.pdf"],"Schematics":[]}}}},{"Library":"curieimu","Description":"Bosch Atmospheric Sensor Library","Sensor Class":{"CurieImu":{"Name":"Digital Humidity, Pressure, and Temperature Sensor","Description":"Curie IMU is a 6-axis accelerometer.","Aliases":["curieimu"],"Categories":["IMU","accelerometer","compass"],"Connections":["firmata"],"Project Type":["prototyping","industrial"],"Manufacturers":["bosch"],"Kits":[],"Examples":{"Java":[],"Python":["curieimu.py"],"Node.js":["curieimu.js"],"C++":["curieimu.cxx"],"C":[]},"Specifications":{},"Platforms":{},"Urls":{"Product Pages":[],"Datasheets":[],"Schematics":[]}}}},{"Library":"cwlsxxa","Description":"API for the Veris CWLSXXA CO2 Sensor Family","Sensor Class":{"CWLXSSA":{"Name":"Veris CWLSXXA CO2 Sensor","Description":"The driver was developed using the CWLSHTA CO2 Gas sensor. The 'T' variant supports a temperature transmitter, and the 'H' variant supports a humidity sensor. All 3 signals are provided by the device as analog 0-5Vdc, 0-10Vdc, or 4-20ma loop current outputs. For devices supporting temperature, the valid temperature range is 10C to 50C. The humidity ranges from 0% to 100% (non-condensing). The CO2 sensor ranges from 0 to 2000 ppm. This driver was developed using the 5Vdc outputs and the 4-20ma outputs. For voltage outputs, your MCU must be configured for 5V operation. In addition, you must configure the sensor (via it's configuration switches) to output 0-5VDC only. Using any other analog reference voltage will require the appropriate external circuitry (such as a voltage divider) in order to interface safely with your MCU. In addition, the sensor can be configured for 4-20ma usage, by specifying the correct receiver resistance (in ohms) in the constructor. This sensor was tested with a Cooking Hacks (Libelium) 4-channel 4-20ma Arduino interface shield. For this interface, the receiver resistance was specified as 165.0 ohms. For devices which do not support temperature, use '-1' as the temperature pin number in the object constructor. If temperature measurement is disabled, getTemperature() will always return 0C/32F. For devices which do not support humidity, use '-1' as the temperature pin number in the object constructor. If humidity measurement is disabled, getHumidity() will always return 0.","Aliases":["cwlsxxa"],"Categories":["temp","gaseous"],"Connections":["analog"],"Project Type":["industrial"],"Manufacturers":["veris"],"Kits":[],"Examples":{"Java":["CWLSXXA_Example.java"],"Python":["cwlsxxa.py"],"Node.js":["cwlsxxa.js"],"C++":["cwlsxxa.cxx"],"C":[]},"Specifications":{"Vsource (DC)":{"unit":"VDC","low":20,"high":30},"Vsource (AC)":{"unit":"VAC","typ":24},"CO2 Measurement Range":{"unit":"ppm","low":0,"high":5000},"CO2 Accuracy":{"unit":"ppm ±","typ":30},"CO2 Repeatability":{"unit":"ppm ±","typ":20},"CO2 Response Time":{"unit":"s","max":60},"RH Measurement Range":{"unit":"%","low":0,"high":100},"RH Operating Temperature Range":{"unit":"degC","low":10,"high":35},"RH Accuracy":{"unit":"%","typ":2},"RH Stability":{"unit":"%","typ":1},"Temperature Accuracy":{"unit":"degC","typ":0.5},"Temperature Resolution":{"unit":"degC","typ":0.1},"Temperature Range":{"unit":"degC","low":10,"high":35}},"Platforms":{"Intel Joule Module":{"Notes":["Requires pull-up resistors with carrier board"],"Images":[""]}},"Urls":{"Product Pages":["http://www.veris.com/Item/CWLSHTA.aspx"],"Datasheets":["http://www.veris.com/docs/Datasheets/CDL_CDW_d0117.pdf"],"Schematics":[]}}}},{"Library":"dfrec","Description":"DFRobot EC Meter Library","Sensor Class":{"DFREC":{"Name":"Analog Electrical Conductivity (EC) Sensor","Description":"The driver was tested with the DFRobot EC Analog Sensor. This device measure the electrical conductivity of an aqueous solution. The included probe is a K=1 model. Calibration is somewhat complicated - see the DFRobot wiki for instructions on calibration. Functions are provided to supply the appropriate values. By default, the values used in the DFRobot arduino example are used.","Aliases":["dfrec"],"Categories":["ec","conductivity"],"Connections":["analog","uart"],"Project Type":["industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":["DFREC_Example.java"],"Python":["dfrec.py"],"Node.js":["dfrec.js"],"C++":["dfrec.cxx"],"C":["dfrec.c"]},"Specifications":{"Operating Voltage":{"unit":"V","Typ":5},"Measurement Range":{"unit":"mS/cm","low":1,"high":20},"Operating Temperature":{"unit":"degC","low":5,"high":40}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-1123.html"],"Datasheets":[""],"Schematics":["http://image.dfrobot.com/image/data/DFR0300/DFR0300_v1.0_schematic.pdf"]}}}},{"Library":"dfrorp","Description":"UPM C++ API for the DFRobot ORP (Oxidation/Reduction Potential)","Sensor Class":{"DFRORP":{"Name":"Analog Oxidation Reduction Potential (ORP) Sensor","Description":"This library was tested with the DFRobot ORP (Oxidation/Reduction Potential) Sensor. To calibrate: Disconnect the sensor probe (but leave the sensor interface board connected). Then run one of the examples while holding down the 'calibrate' button on the device. Read the ORP value reported (it should be fairly small). This value is what you should supply to setCalibrationOffset(). Then reconnect the probe to the interface board and you should be ready to go. DO NOT press the calibrate button on the interface board while the probe is attached or you can permanently damage the probe.","Aliases":["dfrorp"],"Categories":["orp","liquid"],"Connections":["analog"],"Project Type":["industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":["DFRORP_Example.java"],"Python":["dfrorp.py"],"Node.js":["dfrorp.js"],"C++":["dfrorp.cxx"],"C":["dfrorp.c"]},"Specifications":{"Operating Voltage":{"unit":"V","Typ":5},"Measurement Range":{"unit":"V","low":-2,"high":2},"Operating Temperature":{"unit":"degC","low":5,"high":70}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-1071.html"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/Analog_ORP_Meter(SKU:SEN0165)"],"Schematics":["http://image.dfrobot.com/image/data/SEN0165/OPR%20meter%20V1.0%20Schematic.pdf"]}}}},{"Library":"dfrph","Description":"API for the DFRobot pH Sensors","Sensor Class":{"DFRPH":{"Name":"Analog pH Sensor","Description":"TThis sensor family returns an analog voltage proportional to the acidity or alkalinity of a liquid -- it's pH value. This driver was developed using the DFRobot Analog pH meter and the DFRobot Analog pH Meter Pro. Calibration instructions, taken and slightly reworded from the DFRobot wiki at: http://dfrobot.com/wiki/index.php/PH_meter%28SKU:_SEN0161%29 1) Connect equipment: the pH electrode is connected to the BNC connector on the pH meter board, and then the pH meter board is connected to the analog port 0 of the controller. When the controller gets power, you will see the blue LED on board is on. 2) Put the pH electrode into the standard solution whose pH value is 7.00. Run the dfrph example and note the pH output value. Compare the value with 7.00, and calculate the difference. This is the value you should supply to the setOffset() method. 3) Put the pH electrode into the pH standard solution whose value is 4.00. Then wait about one minute, and adjust the potentiometer on the interface board. Let the value stabilise at around 4.00. At this time,the acidic calibration has been completed and you can measure the pH value of an acidic solution. 4) According to the linear characteristics of pH electrode itself, after the above calibration,you can directly measure the pH value of the alkaline solution. If you want to get better accuracy, you can recalibrate it. Alkaline calibration use the standard solution whose pH value is 9.18. Also adjust the potentiometer and let the value stabilise at around 9.18. After this calibration, you can measure the pH value of an alkaline solution.","Aliases":["dfrph"],"Categories":["pH","liquid"],"Connections":["analog"],"Project Type":["industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Image":"dfrph.jpg","Examples":{"Java":[],"Python":["dfrph.py"],"Node.js":["dfrph.js"],"C++":["dfrph.cxx"],"C":["dfrph.c"]},"Specifications":{"Operating Voltage":{"unit":"V","Typ":5},"Measurement Range":{"unit":"pH","low":0,"high":14},"Operating Temperature":{"unit":"degC","low":0,"high":60}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-1110.html"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/PH_meter(SKU:_SEN0161)"],"Schematics":["http://image.dfrobot.com/image/data/SEN0161/pH%20meter%20V1.0%20SCH.pdf"]}}}},{"Library":"ds1307","Description":"DS1307 Real-Time Clock library","Sensor Class":{"DS1307":{"Name":"DS1307 Real Time Clock (RTC) Module","Description":"UPM module for the DS1307-based real-time clock. The clock can provide information about seconds, minutes, hours, day of the week, day of the month, month, and year. It can operate in either a 24-hour or a 12-hour format. This device can also output a square wave at 1Khz, 4Khz, 8Khz, and 32Khz. However, this capability is not implemented in this module.","Aliases":["ds1307"],"Categories":["RTC","timekeeping"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","maxim"],"Kits":[],"Image":"ds1307.jpg","Examples":{"Java":["DS1307_Example.java"],"Python":["ds1307.py"],"Node.js":["ds1307.js"],"C++":["ds1307.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":4.5,"high":5.5},"Active Current":{"unit":"mA","Typ":1.5},"Standby Current (Oscillator On)":{"unit":"nA","low":480,"high":800},"Operating Temperature":{"unit":"degC","low":0,"high":70}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/digital/real-time-clocks/DS1307.html/tb_tab0"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/DS1307.pdf"],"Schematics":[]}}}},{"Library":"ds1808lc","Description":"API for DS1808 Dual Log Digital Potentiometer as a Light Controller","Sensor Class":{"DS1808LC":{"Name":"DS1808LC Lighting Controller","Description":"The Maxim Integrated [DS1808](http://www.maximintegrated.com/en/products/analog/data-converters/digital-potentiometers/DS1808.html) Dual Log Digital Potentiometer","Aliases":["ds1808lc"],"Categories":["lighting"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["maxim"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["ds1808lc.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"+-V","Typ":12},"Voltage Range":{"unit":"+-%","Typ":10},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/data-converters/digital-potentiometers/DS1808.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/DS1808.pdf"],"Schematics":[""]}}}},{"Library":"ds18b20","Description":"API for the DS18B20 1-Wire Temperature Sensor","Sensor Class":{"DS18B20":{"Name":"DS18B20 1-Wire Temperature Sensor","Description":"The driver was tested with the DFRobot EC Analog Sensor. This device measure the electrical conductivity of an aqueous solution. The included probe is a K=1 model. Calibration is somewhat complicated - see the DFRobot wiki for instructions on calibration. Functions are provided to supply the appropriate values. By default, the values used in the DFRobot arduino example are used.","Aliases":["ds18b20"],"Categories":["ec","conductivity"],"Connections":["uart"],"Project Type":["prototyping","industrial"],"Manufacturers":["dallas"],"Kits":[],"Examples":{"Java":[""],"Python":["ds18b20.py"],"Node.js":["ds18b20.js"],"C++":["ds18b20.cxx"],"C":["ds18b20.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5.5},"Measurement Range":{"unit":"degC","low":-55,"high":125},"+-.5degC Accuracy Range":{"unit":"degC","low":-10,"high":85}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/11050"],"Datasheets":["http://cdn.sparkfun.com/datasheets/Sensors/Temp/DS18B20.pdf"],"Schematics":[""]}}}},{"Library":"ds2413","Description":"1-Wire Dual Channel Addressable Switch Library","Sensor Class":{"DS2413":{"Name":"1-Wire Dual Channel Addressable Switch","Description":"The DS2413 is a dual-channel programmable I/O 1-Wire(r) chip. The PIO outputs are configured as open-drain and provide up to 20mA continuous sink capability and off-state operating voltage up to 28V. Control and sensing of the PIO pins is performed with a dedicated device-level command protocol. This device requires the use of a UART to provide access to a Dallas 1-wire bus, via a new facility supported by MRAA (once the relevant PR is accepted), using the UartOW access class. It is important to realize that the UART is only being used to access and control a Dallas 1-wire compliant bus, it is not actually a UART device. Multiple DS2413 devices can be connected to this bus. This module will identify all such devices connected, and allow you to access them using an index starting at 0.","Aliases":["ds2413"],"Categories":["switch"],"Connections":["uart"],"Project Type":["prototyping","industrial"],"Manufacturers":["maxim","adafruit"],"Kits":[],"Examples":{"Java":[],"Python":["ds2413.py"],"Node.js":["ds2413.js"],"C++":["ds2413.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.8,"high":5.5},"Input Load Current":{"unit":"uA","low":3.5,"high":950},"Operating Temperature":{"unit":"degC","low":0,"high":70}},"Urls":{"Product Pages":["http://www.maximintegrated.com/datasheet/index.mvp/id/4588","https://learn.adafruit.com/adafruit-1-wire-gpio-breakout-ds2413/overview"],"Datasheets":["http://www.adafruit.com/datasheets/DS2413.pdf"],"Schematics":["https://learn.adafruit.com/assets/15639"]}}}},{"Library":"e50hx","Description":"UPM API for the Veris E50HX Energy Meter","Sensor Class":{"E50HX":{"Name":"Veris E50HX (E50H2/E50H5) Energy Meter Module","Description":"This module implements support for the Veris E50H2 and E50H5 BACnet Energy Meters. From the datasheet: The E50H5 BACnet MS/TP DIN Rail Meter with Data Logging combines exceptional performance and easy installation to deliver a cost-effective solution for power monitoring applications. Native serial communication via BACnet MS/TP provides complete accessibility of all measurements to your Building Automation System The data logging capability protects data in the event of a power failure. The E50H5 can be easily installed on standard DIN rail, surface mounted or contained in an optional NEMA 4 enclosure, as needed. The front-panel LCD display makes device installation and setup easy and provides local access to the full set of detailed measurements. This module was developed using the upm::BACNETMSTP module, based on libbacnet-stack 0.8.3. Both libbacnet 0.8.3 and the upm::BACNETMSTP libraries must be present in order to build this module. This driver was developed on the E50H5. The Trend Log functionality is not currently supported. The Binary Input Objects are also not supported as these are only used for the Alarm bits which are already available from Analog Input Object 52 as an alarm bitfield incorporating all of the supported alarm indicators. It was connected using an RS232->RS485 interface. You cannot use the built in MCU TTL UART pins for accessing this device -- you must use a full Serial RS232->RS485 or USB-RS485 interface connected via USB.","Aliases":["e50hx"],"Categories":["energy"],"Connections":["rs485"],"Project Type":["industrial"],"Manufacturers":["veris"],"Kits":[],"Examples":{"Java":["E50HX_Example.java"],"Python":["e50hx.py"],"Node.js":["e50hx.js"],"C++":["e50hx.cxx"],"C":[]},"Specifications":{"AC Operating Voltage":{"unit":"VAC","low":90,"high":600},"AC Power Usage":{"unit":"VA","Max":5},"DC Operating Voltage":{"unit":"VDC","low":125,"high":300},"DC Power Usage":{"unit":"W","Max":3},"Operating Temperature":{"unit":"degC","low":-30,"high":70}},"Urls":{"Product Pages":["http://www.veris.com/Item/E50H5.aspx"],"Datasheets":["http://www.veris.com/docs/Datasheets/E5x_d0117.pdf"],"Schematics":[]}}}},{"Library":"ecezo","Description":"API for the EC-EZO EC Sensor","Sensor Class":{"ECEZO":{"Name":"Electrical Conductivity (EC) Circuit","Description":"This driver was tested with the Atlas Scientific Electrical Conductivity kit. This device can operate in either UART or I2C modes.","Aliases":["ecezo"],"Categories":["ec","conductivity","liquid"],"Connections":["i2c","uart"],"Project Type":["industrial"],"Manufacturers":["atlas","sparkfun"],"Kits":[],"Examples":{"Java":["ECEZO_Example.java"],"Python":["ecezo.py"],"Node.js":["ecezo.js"],"C++":["ecezo.cxx"],"C":["ecezo.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","low":19,"high":50},"Conductivity Probe Range":{"unit":"K","low":0.1,"high":10},"Accurate Reading Range (K=0.1)":{"unit":"uS","low":0.5,"high":50000},"Accurate Reading Range (K=1.0)":{"unit":"uS","low":5,"high":200000},"Accurate Reading Range (K=10.0)":{"unit":"uS","low":10,"high":1000000},"Operating Temperature":{"unit":"degC","low":1,"high":35}},"Urls":{"Product Pages":["https://www.atlas-scientific.com/product_pages/kits/ec_k1_0_kit.html","https://www.sparkfun.com/products/12908"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Biometric/EC_EZO_Datasheet.pdf"],"Schematics":[]}}}},{"Library":"ecs1030","Description":"ECS1030 Electricity Sensor Library","Sensor Class":{"ECS1030":{"Name":"Non-Invasive Current Sensor","Description":"This non-invasive current sensor can be clamped around the supply line of an electrical load to tell you how much current is passing through it. It does this by acting as an inductor and responding to the magnetic field around a current-carrying conductor. This particular current sensor measures a load up to 30 A, which makes it great for building your own energy monitors.","Aliases":["ecs1030"],"Categories":["meter","electric"],"Connections":["analog"],"Project Type":["industrial"],"Manufacturers":["sparkfun"],"Kits":[],"Image":"ecs1030.jpg","Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["ecs1030.cxx"],"C":[]},"Specifications":{"Measurable Current":{"unit":"V","low":1,"nominal":30,"maximum":60},"Operating Temperature":{"unit":"degC","low":-40,"high":65}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/11005"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Current/ECS1030-L72-SPEC.pdf"],"Schematics":[]}}}},{"Library":"ehr","Description":"API for the Ear-clip Heart Rate Sensor","Sensor Class":{"EHR":{"Name":"Ear-clip Heart Rate Sensor","Description":"UPM module for the ear-clip heart rate sensor. It is used to measure your heart rate.","Aliases":["ehr"],"Categories":["heartrate"],"Connections":["gpio"],"Project Type":["medical","wearables","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"ehr.jpg","Examples":{"Java":["EHR_Example.java"],"Python":["ehr.py"],"Node.js":["ehr.js"],"C++":["ehr.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5},"Operating Current":{"unit":"mA","typ":6.5},"Measurement Range":{"unit":"bpm","min":30}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Ear-clip-Heart-Rate-Sensor-p-1116.html"],"Datasheets":["http://wiki.seeedstudio.com/wiki/Grove_-_Heart_rate_ear_clip_kit"],"Schematics":[]}}}},{"Library":"eldriver","Description":"API for the EL Driver Module","Sensor Class":{"ElDriver":{"Name":"Electroluminescent Wire (EL) Driver","Description":"The EL Driver allows you to easily light up an EL wire with just one single cable.","Aliases":["eldriver"],"Categories":["lighting"],"Connections":["gpio"],"Project Type":["prototyping","commercial","wearables"],"Manufacturers":["seeed"],"Kits":[],"Image":"eldriver.jpg","Examples":{"Java":[],"Python":["eldriver.py"],"Node.js":["eldriver.js"],"C++":["eldriver.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","max":300},"Supported EL Capacitance":{"unit":"nF","max":15}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-EL-Driver-p-2269.html"],"Datasheets":["http://wiki.seeed.cc/Grove-EL_Driver/"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-EL_Driver/master/res/Grove-EL_Driver_v1.0.pdf"]}}}},{"Library":"electromagnet","Description":"Electromagnet Library","Sensor Class":{"Electromagnet":{"Name":"API for the Electromagnet","Description":"The Electromagnet can hold up to 1 kg (approximately 2.2 lbs)","Aliases":["electromagnet"],"Categories":["electric","magnetic"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"electromagnet.jpg","Examples":{"Java":[],"Python":["electromagnet.py"],"Node.js":["electromagnet.js"],"C++":["electromagnet.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","typ":400},"Standby Current":{"unit":"uA","typ":200},"Max Load Weight":{"unit":"kgs","typ":1}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Electromagnet-p-1820.html"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Electromagnet/master/res/ZYE1-P20-15.pdf","http://wiki.seeed.cc/Grove-Electromagnet/"],"Schematics":[]}}}},{"Library":"emg","Description":"Grove EMG Muscle Signal Reader Library","Sensor Class":{"EMG":{"Name":"Electromyography (EMG) Sensor","Description":"Grove EMG muscle signal reader gathers small muscle signals, then processes them, and returns the result.","Aliases":["emg"],"Categories":["electromyography","medical"],"Connections":["analog"],"Project Type":["wearables","computer interfacing","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"emg.jpg","Examples":{"Java":["Emg_Example.java"],"Python":["emg.py"],"Node.js":["emg.js"],"C++":["emg.cxx"],"C":["emg.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-EMG-Detector-p-1737.html"],"Datasheets":["http://wiki.seeed.cc/Grove-EMG_Detector/"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-EMG_Detector/master/res/Grove-EMG_Sensor_v1.1_SCH.pdf"]}}}},{"Library":"enc03r","Description":"ENC03R Single Axis Gyro Library","Sensor Class":{"ENC03R":{"Name":"Single-axis Analog Gyro Module","Description":"UPM module for the ENC03R single axis analog gyro. This gyroscope measures x-axis angular velocity, that is how fast the sensor is rotating around the x-axis. Calibration of the sensor is necessary for accurate readings.","Aliases":["enc03r"],"Categories":["gyroscope","IMU","Discontinued"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["murata","seeed"],"Kits":["robok"],"Image":"enc03r.jpg","Examples":{"Java":["ENC03R_Example.java"],"Python":["enc03r.py"],"Node.js":["enc03r.js"],"C++":["enc03r.cxx"],"C":["enc03r.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.7,"high":5.25},"Response Time":{"unit":"Hz","typ":50},"Operating Temperature":{"unit":"decC","low":-5,"high":75}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Single-Axis-Analog-Gyro-p-1451.html"],"Datasheets":["http://www.seeedstudio.com/wiki/File:Analog_Gyro_datasheet.pdf","http://wiki.seeedstudio.com/wiki/Grove_-_Single_Axis_Analog_Gyro"],"Schematics":[]}}}},{"Library":"flex","Description":"API for the Spectra Symbol Flex Sensor","Sensor Class":{"Flex":{"Name":"Resistive Flex Sensor","Description":"A simple flex sensor. The resistance across the sensor increases when flexed. Patented technology by Spectra Symbol, these sensors were used in the original Nintendo* Power Glove.","Aliases":["flex"],"Categories":["flex sensors"],"Connections":["analog"],"Project Type":["prototyping","industrial"],"Manufacturers":["sparkfun"],"Kits":[],"Image":"flex.jpg","Examples":{"Java":["FlexSensor_Example.java"],"Python":[],"Node.js":["flex.js"],"C++":["flex.cxx"],"C":[]},"Specifications":{"Flat Resistance":{"unit":"KOhms","typ":10},"Bend Resistance":{"unit":"KOhms","low":60,"high":110},"Temperature Range":{"unit":"degC","low":-35,"high":80}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/8606"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/FLEXSENSORREVA1.pdf"],"Schematics":[]}}}},{"Library":"gas","Description":"Gas Sensor Library","Sensor Class":{"MQ2":{"Name":"MQ2 Methane, Butane, Liquefied Petroleum Gas (LPG), and Smoke Sensor","Description":"The MQ2 Gas Sensor module is useful for gas leakage detection (in home and industry). It can detect LPG, i-butane, methane, alcohol, hydrogen, smoke, and other combustible gases. It's a medium-sensitivity sensor with a detection range of 300-10,000 ppm.","Aliases":["mq2"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["seeed"],"Kits":["hak"],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq2.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":0.1,"high":160},"Heater Resistance":{"unit":"Ohms","typ":33},"Sensor Resistance":{"unit":"KOhms","low":3,"high":30}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Gas-Sensor(MQ2)-p-937.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Gas_Sensor-MQ2/"],"Schematics":[]}},"MQ3":{"Name":"MQ3 Alcohol, Ethanol, Smoke Sensor","Description":"The MQ3 Gas Sensor module is useful for gas leakage detection (in home and industry). It can detect alcohol vapors and benzine. It's highly sensitive but has a long warm-up time of about 1 minute. It's detection range is 0.04-4 mg/L Alcohol.","Aliases":["mq3"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["seeed"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq3.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":0.1,"high":150},"Heater Resistance":{"unit":"Ohms","typ":33},"Sensor Resistance":{"unit":"MOhms","low":1,"high":8},"Detectable Concentration":{"unit":"mg/L","low":0.05,"high":10}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Gas-Sensor%28MQ3%29-p-1418.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Gas_Sensor-MQ3/"],"Schematics":[]}},"MQ4":{"Name":"MQ4 Methane and Connecticut Natural Gas (CNG) Sensor","Description":"The MQ4 Gas Sensor module is useful for detecting CH4 (Methane), and natural gas concentrations in the air. It has a detection range of 100-10000 ppm. For optimum use, it requires calibration after a pre-heat time of at least 24 hours. See the datasheet for details.","Aliases":["mq4"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq4.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":0.1,"high":150},"Heater Resistance":{"unit":"Ohms","typ":33},"Sensor Resistance":{"unit":"KOhms","low":10,"high":60}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-683.html"],"Datasheets":["http://image.dfrobot.com/image/data/SEN0129/MQ-4.pdf","https://www.dfrobot.com/wiki/index.php/Analog_Gas_Sensor(MQ4)_(SKU:SEN0129)"],"Schematics":[]}},"MQ5":{"Name":"MQ5 Natural Gas and Liquefied Petroleum Gas (LPG) Sensor","Description":"The MQ5 Gas Sensor module is useful for gas leakage detection (in home and industry). It can detect LPG, natural gas, town gas, and so on. It is highly sensitive and has a detection range of 300-10,000 ppm.","Aliases":["mq5"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["seeed"],"Kits":["eak"],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq5.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":0.1,"high":160},"Heater Resistance":{"unit":"Ohms","typ":31},"Sensor Resistance":{"unit":"KOhms","low":10,"high":60},"Detectable Concentration":{"unit":"ppm","low":200,"high":10000}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Gas-Sensor%28MQ5%29-p-938.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Gas_Sensor-MQ5/","https://raw.githubusercontent.com/SeeedDocument/Grove-Gas_Sensor-MQ5/master/res/MQ-5.pdf"],"Schematics":[]}},"MQ6":{"Name":"MQ6 Liquefied Petroleum Gas (LPG) and Butane Sensor","Description":"The MQ6 Gas Sensor module is useful for detecting LPG, iso-butane, propane, and LNG concentrations in the air. It has a detection range of 200-10000 ppm. For optimum use, it requires calibration after a pre-heat time of at least 24 hours. See the datasheet for details.","Aliases":["mq6"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq6.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":0.1,"high":150},"Heater Resistance":{"unit":"Ohms","typ":33},"Sensor Resistance":{"unit":"KOhms","low":10,"high":60},"Detectable Concentration":{"unit":"ppm","low":200,"high":10000}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-685.html"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/LPG_Gas_Sensor(MQ6)_(SKU:SEN0131)","http://image.dfrobot.com/image/data/SEN0131/MQ-6.pdf"],"Schematics":["http://image.dfrobot.com/image/data/SEN0131/MQ-X%20Schematic.pdf"]}},"MQ7":{"Name":"MQ7 Carbon Monoxide Sensor","Description":"The Grove MQ7 Gas Sensor module is useful for detecting Carbon Monoxide (CO) concentrations in the air. It has a detection range of 20-2000 ppm. For optimum use, it requires calibration after a pre-heat time of 48 hours. See the datasheet for details.","Aliases":["mq7"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq7.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","typ":70},"Heater Resistance":{"unit":"Ohms","typ":33},"Detectable Concentration":{"unit":"ppm","low":20,"high":2000}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-686.html"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/Carbon_Monoxide_Gas_Sensor(MQ7)_(SKU:SEN0132)","http://image.dfrobot.com/image/data/SEN0132/MQ-7.pdf"],"Schematics":["http://image.dfrobot.com/image/data/SEN0132/MQ-X%20Schematic.pdf"]}},"MQ8":{"Name":"MQ8 Flammable (Hydrogen) Gas Sensor","Description":"The MQ8 Gas Sensor module is useful for detecting Hydrogen gas concentrations in the air. It has a detection range of 100-10000 ppm. For optimum use, it requires calibration after a pre-heat time of at least 24 hours. See the datasheet for details.","Aliases":["mq8"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq8.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","max":160},"Heater Resistance":{"unit":"Ohms","typ":31},"Sensor Resistance":{"unit":"KOhms","low":10,"high":60},"Detectable Concentration":{"unit":"ppm","low":100,"high":10000}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-687.html"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/Hydrogen_Gas_Sensor(MQ8)_(SKU:SEN0133)","http://image.dfrobot.com/image/data/SEN0133/MQ-8.pdf"],"Schematics":["http://image.dfrobot.com/image/data/SEN0133/MQ-X%20Schematic.pdf"]}},"MQ9":{"Name":"MQ9 Carbon Monoxide (CO) and Flammable Gas Sensor","Description":"The Grove MQ9 Gas Sensor module is useful for gas leakage detection (in home and industry). It can detect carbon monoxide, coal gas, and liquefied gas. Its sensitivity is 10-1,000 ppm CO, and 100-10,000 ppm Gas.","Aliases":["mq9"],"Categories":["gas"],"Connections":["analog"],"Project Type":["prototyping","safety","industrial"],"Manufacturers":["seeed"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["gas-mq9.cxx"],"C":["gas-mqx.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":0.1,"high":68},"Heater Resistance":{"unit":"Ohms","typ":33},"Sensor Resistance":{"unit":"Ohms","low":2,"high":20000},"Detectable Concentration":{"unit":"ppm","low":200,"high":10000}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Gas-Sensor%28MQ9%29-p-1419.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Gas_Sensor-MQ9/","https://raw.githubusercontent.com/SeeedDocument/Grove-Gas_Sensor-MQ9/master/res/MQ-9.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Gas_Sensor-MQ9/master/res/Gas_Sensor_Schematic.pdf"]}}}},{"Library":"gp2y0a","Description":"API for the GP2Y0A family of IR Proximity Sensors","Sensor Class":{"GP2Y0A":{"Name":"Analog Infrared (IR) Based Distance Sensor","Description":"Sensors of this family return an analog voltage corresponding to the distance of an object from the sensor. The voltage is lower when objects are far away; the voltage increases as objects get closer to the sensor.","Aliases":["gp2y0a"],"Categories":["proximity","light"],"Connections":["analog"],"Project Type":["prototyping","robotics"],"Manufacturers":["seeed"],"Kits":[],"Image":"gp2y0a.jpg","Examples":{"Java":["Gp2y0a_Example.java"],"Python":["gp2y0a.py"],"Node.js":["gp2y0a.js"],"C++":["gp2y0a.cxx"],"C":["gp2y0a.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.5,"typ":5,"high":7},"Operating Current":{"unit":"mA","typ":33,"max":50},"Measurement Range":{"unit":"cm","low":10,"high":80}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-80cm-Infrared-Proximity-Sensor-p-788.html"],"Datasheets":["http://wiki.seeed.cc/Grove-80cm_Infrared_Proximity_Sensor/"],"Schematics":[]}}}},{"Library":"gprs","Description":"API for the GPRS Module","Sensor Class":{"GPRS":{"Name":"General Packet Radio Service (GPRS) Module","Description":"The driver was tested with the GPRS Module, V2. It's a GSM GPRS module based on the SIM900. This module uses a standard 'AT' command set. See the datasheet for a full list of available commands and their possible responses.","Aliases":["gprs"],"Categories":["wireless"],"Connections":["uart"],"Project Type":["prototyping","wireless"],"Manufacturers":["seeed"],"Kits":[],"Image":"gprs.jpg","Examples":{"Java":[],"Python":["gprs.py"],"Node.js":["gprs.js"],"C++":["gprs.cxx"],"C":[]},"Specifications":{"Input Voltage (5v Pin)":{"unit":"V","Typ":5},"Input Voltage (Vin Pin)":{"unit":"V","low":6.5,"high":12},"Power Consumption":{"unit":"mA","low":1.5},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["https://www.seeedstudio.com/GPRS-Shield-V3.0-p-2333.html"],"Datasheets":["http://www.seeedstudio.com/document/SIM900datasheeet.zip","http://wiki.seeedstudio.com/wiki/GPRS_Shield_V3.0","http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf","http://garden.seeedstudio.com/images/a/a8/SIM900_AT_Command_Manual_V1.03.pdf","http://garden.seeedstudio.com/images/a/a0/SIM900_ATC_V1_00.pdf"],"Schematics":["http://www.seeedstudio.com/wiki/File:GPRS_Shield_v3.0.pdf"]}}}},{"Library":"grove","Description":"Generic library for basic Grove sensors","Sensor Class":{"Grove":{"Name":"Generic library for basic Grove sensors","Description":"This is the Generic UPM Module for basic Grove sensors. This library is now deprecated and replaced by individual libraries for every sensor.","Aliases":["grove","libupm-grove"],"Categories":["LED","light","relay","temperature","touch"],"Connections":["i2c","gpio","pwm","ainput"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed"],"Kits":["gsk","eak","hak"],"Examples":{"C++":["grove-grovebutton.cxx"]},"Urls":{"Product Pages":["https://github.com/intel-iot-devkit/upm/tree/master/src/grove"]}},"GroveButton":{"Name":"API for the Grove Button","Description":"This is the UPM Module for the Grove button. This class is being replaced by the upm-button library and the Button class.","Aliases":["Grove Touch Sensor","Grove button"],"Categories":["touch"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk"],"Image":"grovebutton.jpg","Examples":{"Java":["GroveButton_Example.java","GroveButton_intr_Example.java"],"Python":["grovebutton.py"],"Node.js":["grovebutton.js"],"C++":["grove-grovebutton.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":12},"Supply Current Digital":{"unit":"mA","min":5,"max":25},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Button-p-766.html","http://wiki.seeed.cc/Grove-Button/"],"Schematics":["https://github.com/SeeedDocument/Grove_Button/raw/master/resources/Grove_-_Button_v1.0_Source_File.zip"]}},"GroveLed":{"Name":"API for the Grove LED","Description":"This is the UPM Module for the Grove LED. This class is being replaced by the upm-led library and the Led class.","Aliases":["Grove LED","Grove – Chainable RGB Led V2.0"],"Categories":["LED"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk"],"Image":"groveled.jpg","Examples":{"Java":["GroveLED_Example.java","GroveLed_multi_Example.java"],"Python":["groveled.py"],"Node.js":["groveled.js"],"C++":["grove-groveled.cxx","grove-groveled-multi.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.5,"max":7.5},"Supply Current":{"unit":"mA","min":20,"max":60},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-%E2%80%93-Chainable-RGB-Led-V2.0-p-2903.html","http://wiki.seeed.cc/Grove-Chainable_RGB_LED/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Chainable_RGB_LED/master/res/P9813_datasheet.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-Chainable_RGB_LED/raw/master/res/Grove%20-%20Chainable%20RGB%20LED%20v2.0.zip"]}},"GroveLight":{"Name":"API for the Grove Light Sensor","Description":"This is the UPM Module for the Grove Light Sensor. This class is being replaced by the upm-light library and the Light class.","Aliases":["grovelight","Grove - Light Sensor(P)"],"Categories":["light"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk"],"Image":"grovelight.jpg","Examples":{"Java":["GroveLight_Example.java"],"Python":["grovelight.py"],"Node.js":["grovelight.js"],"C++":["grove-grovelight.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5},"Supply Current":{"unit":"mA","min":0.5,"max":3},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Response Time":{"unit":"ms","min":20,"max":30}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Light-Sensor(P)-p-1253.html","http://wiki.seeed.cc/Grove-Light_Sensor/"],"Datasheets":["https://github.com/SeeedDocument/Grove_Light_Sensor/raw/master/res/LM358.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove_Light_Sensor/raw/master/resources/Grove%20-%20Light%20Sensor%28P%29%20v1.1.zip"]}},"GroveRelay":{"Name":"API for the Grove Relay","Description":"This is the UPM Module for the Grove relay switch. This class is being replaced by the upm-relay library and the Relay class.","Aliases":["groverelay","Grove - Relay"],"Categories":["relay"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk","eak","hak"],"Image":"groverelay.jpg","Examples":{"Java":["GroveRelay_Example.java"],"Python":["groverelay.py"],"Node.js":["groverelay.js"],"C++":["grove-groverelay.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","typ":100},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Relay Life":{"unit":"Cycle","cycles":100000},"Max Switching Voltage":{"AC":{"unit":"V","max":250},"DC":{"unit":"V","max":30}},"Max Switching Current":{"unit":"A","max":5}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Relay-p-769.html","http://wiki.seeed.cc/Grove-Relay/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Relay/master/res/Relay_Datasheet.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-Relay/raw/master/res/Grove%20-%20Relay%20Schematic.pdf","https://github.com/SeeedDocument/Grove-Relay/raw/master/res/Grove%20-%20Relay%20PCB.pdf","https://raw.githubusercontent.com/SeeedDocument/Grove-Relay/master/res/Grove-Relay_Eagle_Files.zip"]}},"GroveRotary":{"Name":"API for the Grove Rotary Angle Sensor (Knob)","Description":"This is the UPM Module for the Grove Rotary Angle Sensor (Knob). This class is being replaced by the upm-rotary library and the Rotary class.","Aliases":["groverotary","Grove - Rotary Angle Sensor"],"Categories":["ainput"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk"],"Image":"groverotary.jpg","Examples":{"Java":["GroveRotary_Example.java"],"Python":["groverotary.py"],"Node.js":["groverotary.js"],"C++":["grove-groverotary.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.75,"max":5.25},"Supply Current":{"unit":"mA","typ":20},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Rotary Angle":{"unit":"°","min":0,"max":300}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Rotary-Angle-Sensor-p-770.html","http://wiki.seeed.cc/Grove-Rotary_Angle_Sensor/"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Rotary_Angle_Sensor/master/res/Grove-Rotary_Angle_Sensor_Eagle_File.zip","https://raw.githubusercontent.com/SeeedDocument/Grove-Rotary_Angle_Sensor/master/res/Grove-Rotary_Angle_Sensor_v1.2.zip"]}},"GroveSlide":{"Name":"API for the Grove Slide Potentiometer","Description":"This is the UPM Module for the Grove Slide Potentiometer. This class is being replaced by the upm-slide library and the Slide class.","Aliases":["groveslide","Grove - Slide Potentiometer"],"Categories":["ainput"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Images":"slide.jpg","Examples":{"Java":["GroveSlide_Example.java"],"Python":["groveslide.py"],"Node.js":["groveslide.js"],"C++":["grove-groveslide.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":30},"Supply Current":{"unit":"mA","max":30},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Sroke Length":{"unit":"mm","min":0,"max":30}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Slide-Potentiometer-p-1196.html?gclid=Cj0KCQjw5arMBRDzARIsAAqmJexy5Nrps6rpUqNFk4iIL6mVfHQt7EYfly4NbdhC7wBl4p3AxQZNkjIaAuN2EALw_wcB","http://wiki.seeed.cc/Grove-Slide_Potentiometer/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Slide_Potentiometer/master/res/Sliding_potentiometer_datasheet.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Slide_Potentiometer/master/res/Sliding_Potentiometer.rar"]}},"GroveTemp":{"Name":"API for the Grove Temperature Sensor","Description":"This is the UPM Module for the Grove Temperature Sensor. This class is being replaced by the upm-temperature library and the Temperature class.","Aliases":["groverelay","Grove - Temperature Sensor"],"Categories":["temperature"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk"],"Image":"grovetemp.jpg","Examples":{"Java":["GroveTemp_Example.java"],"Python":["grovetemp.py"],"Node.js":["grovetemp.js"],"C++":["grove-grovetemp.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","typ":50},"Operating Temperature":{"unit":"°C","min":-40,"max":125},"Accuracy":{"unit":"+/- °C","accuracy":1.5}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Temperature-Sensor-p-774.html?gclid=Cj0KCQjw5arMBRDzARIsAAqmJexygEDSrIieYoG1C37j3HmOOx7PHjXlPsWxnQo7g1sCctC_VErW2IAaAvIHEALw_wcB","http://wiki.seeed.cc/Grove-Temperature_Sensor_V1.2/"],"Datasheets":["https://github.com/SeeedDocument/Grove-Temperature_Sensor_V1.2/raw/master/res/NCP18WF104F03RC.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-Temperature_Sensor_V1.2/raw/master/res/Grove_-_Temperature_sensor_v1.1.zip"]}}}},{"Library":"grovecollision","Description":"API for the Grove Collision Sensor","Sensor Class":{"GroveCollision":{"Name":"Grove Collision Sensor","Description":"The Grove Collision Sensor can detect whether any collision movement or vibration happens. It outputs a low pulse signal when vibration is detected.","Aliases":["grovecollision"],"Categories":["collision","deprecated"],"Connections":["gpio"],"Project Type":["prototyping","robotics"],"Manufacturers":["seeed"],"Kits":[],"Image":"grovecollision.jpg","Examples":{"Java":["GroveCollision_Example.java"],"Python":["grovecollision.py"],"Node.js":["grovecollision.js"],"C++":["grovecollision.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","max":2},"Reaction Point":{"unit":"mg","typ":50},"Off Resistance":{"unit":"MOhms","min":30},"On Resistance":{"unit":"Ohms","max":100}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Collision-Sensor-p-1132.html"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Collision_Sensor/master/res/DataSheet-MVS0608_02-v2_1.pdf","http://wiki.seeed.cc/Grove-Collision_Sensor/"],"Schematics":[]}}}},{"Library":"groveehr","Description":"API for the Ear-clip Heart Rate Sensor","Sensor Class":{"GroveEHR":{"Name":"Ear-clip Heart Rate Sensor","Description":"UPM module for the ear-clip heart rate sensor. It is used to measure your heart rate.","Aliases":["groveehr"],"Categories":["heartrate","deprecated"],"Connections":["gpio"],"Project Type":["medical","wearables","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"groveehr.jpg","Examples":{"Java":["GroveEHR_Example.java"],"Python":["groveehr.py"],"Node.js":["groveehr.js"],"C++":["groveehr.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5},"Operating Current":{"unit":"mA","typ":6.5},"Measurement Range":{"unit":"bpm","min":30}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Ear-clip-Heart-Rate-Sensor-p-1116.html"],"Datasheets":["http://wiki.seeedstudio.com/wiki/Grove_-_Heart_rate_ear_clip_kit"],"Schematics":[]}}}},{"Library":"groveeldriver","Description":"API for the Grove EL Driver Module","Sensor Class":{"GroveElDriver":{"Name":"Grove Electroluminescent Wire (EL) Driver","Description":"The Grove EL Driver allows you to easily light up an EL wire with just one single cable.","Aliases":["groveeldriver"],"Categories":["lighting","deprecated"],"Connections":["gpio"],"Project Type":["prototyping","commercial","wearables"],"Manufacturers":["seeed"],"Kits":[],"Image":"groveeldriver.jpg","Examples":{"Java":[],"Python":["groveeldriver.py"],"Node.js":["groveeldriver.js"],"C++":["groveeldriver.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","max":300},"Supported EL Capacitance":{"unit":"nF","max":15}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-EL-Driver-p-2269.html"],"Datasheets":["http://wiki.seeed.cc/Grove-EL_Driver/"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-EL_Driver/master/res/Grove-EL_Driver_v1.0.pdf"]}}}},{"Library":"groveelectromagnet","Description":"Grove Electromagnet Library","Sensor Class":{"GroveElectromagnet":{"Name":"API for the Grove Electromagnet","Description":"The Grove Electromagnet can hold up to 1 kg (approximately 2.2 lbs)","Aliases":["groveelectromagnet"],"Categories":["electric","magnetic","deprecated"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"groveelectromagnet.jpg","Examples":{"Java":[],"Python":["groveelectromagnet.py"],"Node.js":["groveelectromagnet.js"],"C++":["groveelectromagnet.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","typ":400},"Standby Current":{"unit":"uA","typ":200},"Max Load Weight":{"unit":"kgs","typ":1}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Electromagnet-p-1820.html"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Electromagnet/master/res/ZYE1-P20-15.pdf","http://wiki.seeed.cc/Grove-Electromagnet/"],"Schematics":[]}}}},{"Library":"groveemg","Description":"Grove EMG Muscle Signal Reader Library","Sensor Class":{"GroveEMG":{"Name":"Grove Electromyography (EMG) Sensor","Description":"Grove EMG muscle signal reader gathers small muscle signals, then processes them, and returns the result.","Aliases":["groveemg"],"Categories":["electromyography","medical","deprecated"],"Connections":["analog"],"Project Type":["wearables","computer interfacing","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Examples":{"Java":["GroveEmg_Example.java"],"Python":["groveemg.py"],"Node.js":["groveemg.js"],"C++":["groveemg.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-EMG-Detector-p-1737.html"],"Datasheets":["http://wiki.seeed.cc/Grove-EMG_Detector/"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-EMG_Detector/master/res/Grove-EMG_Sensor_v1.1_SCH.pdf"]}}}},{"Library":"grovegprs","Description":"API for the Grove GPRS Module","Sensor Class":{"GroveGPRS":{"Name":"Grove General Packet Radio Service (GPRS) Module","Description":"The driver was tested with the Grove GPRS Module, V2. It's a GSM GPRS module based on the SIM900. This module uses a standard 'AT' command set. See the datasheet for a full list of available commands and their possible responses.","Aliases":["grovegprs"],"Categories":["wireless"],"Connections":["uart"],"Project Type":["prototyping","wireless"],"Manufacturers":["seeed"],"Kits":[],"Image":"grovegprs.jpg","Examples":{"Java":[],"Python":["grovegprs.py"],"Node.js":["grovegprs.js"],"C++":["grovegprs.cxx"],"C":[]},"Specifications":{"Input Voltage (5v Pin)":{"unit":"V","Typ":5},"Input Voltage (Vin Pin)":{"unit":"V","low":6.5,"high":12},"Power Consumption":{"unit":"mA","low":1.5},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["https://www.seeedstudio.com/GPRS-Shield-V3.0-p-2333.html"],"Datasheets":["http://www.seeedstudio.com/document/SIM900datasheeet.zip","http://wiki.seeedstudio.com/wiki/GPRS_Shield_V3.0","http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf","http://garden.seeedstudio.com/images/a/a8/SIM900_AT_Command_Manual_V1.03.pdf","http://garden.seeedstudio.com/images/a/a0/SIM900_ATC_V1_00.pdf"],"Schematics":["http://www.seeedstudio.com/wiki/File:GPRS_Shield_v3.0.pdf"]}}}},{"Library":"grovegsr","Description":"API for the Grove GSR Galvanic Skin Response Sensor","Sensor Class":{"GroveGSR":{"Name":"Galvanic Skin Response (GSR) Sensor","Description":"Measures the electrical conductance of skin to measure strong emotional reactions. In other words, it measures sweat on your fingers as an indicator of strong emotional reactions.","Aliases":["grovegsr"],"Categories":["skinresponse"],"Connections":["analog"],"Project Type":["medical","interface","wearables","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Examples":{"Java":["GroveGsr_Example.java"],"Python":["grovegsr.py"],"Node.js":["grovegsr.js"],"C++":["grovegsr.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","low":0.7,"high":3},"Operating Temperature":{"unit":"degC","min":0,"max":70}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-GSR-sensor-p-1614.html"],"Datasheets":["http://wiki.seeed.cc/Grove-GSR_Sensor/","file:///C:/Users/Malachai/Downloads/Lm324.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-GSR_Sensor/raw/master/res/Grove%20-%20GSR_v1.2_SCH.pdf","https://github.com/SeeedDocument/Grove-GSR_Sensor/raw/master/res/Grove%20-%20GSR%20v1.0%20SCH.pdf"]}}}},{"Library":"grovelinefinder","Description":"Grove Line Finder Sensor Library","Sensor Class":{"GroveLineFinder":{"Name":"Infrared (IR) Based Line Finder","Description":"UPM module for the Line Finder sensor. It outputs a digital signal indicating whether it is detecting black on a white background, or white on a black background.","Aliases":["grovelinefinder"],"Categories":["grovelinefinder"],"Connections":["gpio"],"Project Type":["robotics","prototyping"],"Manufacturers":["seeed","dfrobot"],"Kits":["robok"],"Image":"grovelinefinder.jpg","Examples":{"Java":["GroveLineFinder_Example.java"],"Python":["grovelinefinder.py"],"Node.js":["grovelinefinder.js"],"C++":["grovelinefinder.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.7,"high":5.5},"Operating Current":{"unit":"uA","typ":210},"Operating Temperature":{"unit":"degC","low":-40,"high":125}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Line-Finder-v1.1-p-2712.html"],"Datasheets":["file:///C:/Users/Malachai/Downloads/Lmv358.pdf","http://wiki.seeed.cc/Grove-Line_Finder/"],"Schematics":["https://easyeda.com/Seeed/Grove_Line_Finder_v1_1-dfc99c72325e41ff93a451882fd2e143"]}}}},{"Library":"grovemoisture","Description":"API for the Grove Moisture Sensor","Sensor Class":{"GroveMoisture":{"Name":"Grove Moisture Sensor","Description":"UPM module for the Grove Moisture Sensor. This sensor can be used to detect the moisture content of soil or whether there is water around the sensor. As the moisture content increases, so does the value that is read. Note: this sensor is not designed to be left in soil nor to be used outdoors.","Aliases":["grovemoisture"],"Categories":["moisture"],"Connections":["analog"],"Project Type":["liquid","prototyping"],"Manufacturers":["seeed"],"Kits":["eak","hak"],"Image":"grovemoisture.jpg","Examples":{"Java":["GroveMoisture_Example.java"],"Python":["grovemoisture.py"],"Node.js":["grovemoisture.js"],"C++":["grovemoisture.cxx"],"C":[]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Supply Current":{"unit":"mA","min":0,"max":35}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Moisture-Sensor-p-955.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Moisture_Sensor/"],"Schematics":[]}}}},{"Library":"groveo2","Description":"Grove O2 Oxygen Gas Sensor Library","Sensor Class":{"GroveO2":{"Name":"Grove Oxygen (O2) Concentration Sensor","Description":"The Grove O2 Oxygen Gas sensor measures the oxygen concentration in the air.","Aliases":["groveo2"],"Categories":["gas","oxygen","deprecated"],"Connections":["analog"],"Project Type":["environmental","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"groveo2.jpg","Examples":{"Java":["GroveO2_Example.java"],"Python":["groveo2.py"],"Node.js":["groveo2.js"],"C++":["groveo2.cxx"],"C":[]},"Specifications":{"Measurement Range":{"unit":"% Vol","low":0,"high":25},"Sensitivity":{"unit":"mA (in air)","low":0.1,"high":0.3},"Operating Temperature":{"unit":"degC","low":-20,"high":50}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-gas-sensoro2-p-1541.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Gas_Sensor-O2/"],"Schematics":["https://github.com/SeeedDocument/Grove_Gas_Sensor_O2/raw/master/resources/Schematics_O2.zip"]}}}},{"Library":"grovescam","Description":"Grove Serial Camera Library","Sensor Class":{"GROVESCAM":{"Name":"Serial Camera Module","Description":"UPM module for the ear-clip heart rate sensor. It is used to measure your heart rate.","Aliases":["grovescam"],"Categories":["imaging","deprecated"],"Connections":["uart"],"Project Type":["prototyping","access control","security"],"Manufacturers":["seeed"],"Kits":[],"Image":"grovescam.jpg","Examples":{"Java":["GROVESCAM_Example.java"],"Python":["grovescam.py"],"Node.js":["grovescam.js"],"C++":["grovescam.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Resolution":{"unit":"","max":"640x480"}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Serial-Camera-Kit-p-1608.html"],"Datasheets":["http://www.seeedstudio.com/wiki/Grove_-_Serial_Camera_Kit"],"Schematics":[]}}}},{"Library":"grovespeaker","Description":"API for the Grove Speaker","Sensor Class":{"GroveSpeaker":{"Name":"Grove Speaker Module","Description":"UPM module for the Grove Speaker. This sensor can generate different tones and sounds depending on the frequency of the input signal.","Aliases":["grovespeaker"],"Categories":["sound","deprecated"],"Connections":["gpio"],"Project Type":["sound","prototyping"],"Manufacturers":["seeed"],"Kits":["hak"],"Image":"grovespeaker.jpg","Examples":{"Java":["GroveSpeaker_Example.java"],"Python":["grovespeaker.py"],"Node.js":["grovespeaker.js"],"C++":["grovespeaker.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":4,"high":5.5},"Voltage Gain":{"unit":"dB","typ":46},"Bandwidth":{"unit":"KHz","min":20}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Speaker-p-1445.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Speaker/","https://raw.githubusercontent.com/SeeedDocument/Grove-Speaker/master/res/LM386_Low_Voltage_Audio_Power_Amplifier_Datasheet.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Speaker/master/res/Grove-Speaker_v1.0_sch.pdf"]}}}},{"Library":"groveultrasonic","Description":"Grove Ultrasonic Sensor Library","Sensor Class":{"GroveUltraSonic":{"Name":"Ultrasonic Proximity Sensor","Description":"This Grove Ultrasonic sensor is a non-contact distance measurement module which is compatible with the Grove system. It is designed for easy modular project usage with industrial performance. Detection ranges from 3 cm (1.2\") to 4 m (13'1.5\") and works best when the object is within a 30 degree angle relative to the sensor.","Aliases":["groveultrasonic"],"Categories":["proximity","deprecated"],"Connections":["gpio"],"Project Type":["robotics","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"groveultrasonic.jpg","Examples":{"Java":[],"Python":[],"Node.js":["groveultrasonic.js"],"C++":["groveultrasonic.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.2,"high":5.2},"Operating Current":{"unit":"mA","typ":8},"Measurement Range":{"unit":"cm","low":2,"high":350}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Ultrasonic-Ranger-p-960.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Ultrasonic_Ranger/"],"Schematics":[]}}}},{"Library":"grovevdiv","Description":"API for the Grove Voltage Divider Sensor","Sensor Class":{"GroveVDiv":{"Name":"Grove Voltage Divider Sensor","Description":"UPM module for the Grove Voltage Divider sensor.","Aliases":["grovevdiv"],"Categories":["electric","deprecated"],"Connections":["gpio"],"Project Type":["robotics","prototyping"],"Manufacturers":["seeed"],"Kits":["robok"],"Image":"grovevdiv.jpg","Examples":{"Java":["GroveVDiv_Example.java"],"Python":["grovevdiv.py"],"Node.js":["grovevdiv.js"],"C++":["grovevdiv.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Voltage-Divider-p-1472.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Voltage_Divider/"],"Schematics":["https://github.com/SeeedDocument/Grove-Voltage_Divider/raw/master/res/LMV358ID_Datasheet.pdf"]}}}},{"Library":"grovewater","Description":"Grove Water Sensor Library","Sensor Class":{"GroveWater":{"Name":"Grove Water Sensor","Description":"UPM module for the Grove Water sensor.","Aliases":["grovewater"],"Categories":["liquid","deprecated"],"Connections":["gpio"],"Project Type":["agriculture","environmental","prototyping"],"Manufacturers":["seeed"],"Kits":["eak"],"Examples":{"Java":["GroveWater_Example.java"],"Python":["grovewater.py"],"Node.js":["grovewater.js"],"C++":["grovewater.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":4.7,"high":5.25},"Operating Current":{"unit":"mA","max":20},"Working Temperature":{"unit":"degC","low":10,"high":30}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Water-Sensor-p-748.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Water_Sensor/"],"Schematics":[]}}}},{"Library":"grovewfs","Description":"API for the Grove Water Flow Sensor","Sensor Class":{"GroveWFS":{"Name":"Water Flow Sensor","Description":"This sensor is used to measure water flow in liters per minute (LPM). It incorporates a Hall Effect sensor. The UPM module defines an interrupt routine to be triggered on each low pulse, keeping count. This device requires a 10K pull-up resistor for the signal line (yellow wire). There is a schematic diagram on the SeeedStudio site (3/2015): http://www.seeedstudio.com/wiki/index.php?title=G1/2_Water_Flow_sensor However, be careful when wiring this up - the schematic appears to have a bug in it: the lower left connection of the signal line (yellow) to Vcc (red) should not be there. The sensor can work with this connection, but probably not for very long.","Aliases":["grovewfs"],"Categories":["liquid","deprecated"],"Connections":["gpio"],"Project Type":["agriculture","monitoring","prototyping"],"Manufacturers":["seeed"],"Kits":["eak"],"Image":"grovewfs.jpg","Examples":{"Java":["GroveWFS_Example.java"],"Python":["grovewfs.py"],"Node.js":["grovewfs.js"],"C++":["grovewfs.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":5,"high":24},"Operating Current":{"unit":"mA","typ":15},"Water Pressure":{"unit":"MPa","max":2},"Water Temperature":{"unit":"degC","max":120}},"Urls":{"Product Pages":["https://www.seeedstudio.com/G1%26amp%3B2%26quot%3B-Water-Flow-Sensor-p-635.html"],"Datasheets":["http://wiki.seeedstudio.com/wiki/G1/2_Water_Flow_sensor","http://www.seeedstudio.com/wiki/images/b/b7/Water_flow_sensor_datasheet.pdf"],"Schematics":[]}}}},{"Library":"gsr","Description":"API for the Grove GSR Galvanic Skin Response Sensor","Sensor Class":{"GSR":{"Name":"Galvanic Skin Response (GSR) Sensor","Description":"Measures the electrical conductance of skin to measure strong emotional reactions. In other words, it measures sweat on your fingers as an indicator of strong emotional reactions.","Aliases":["gsr"],"Categories":["skinresponse"],"Connections":["analog"],"Project Type":["medical","interface","wearables","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"gsr.jpg","Examples":{"Java":["Gsr_Example.java"],"Python":["gsr.py"],"Node.js":["gsr.js"],"C++":["gsr.cxx"],"C":["gsr.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","low":0.7,"high":3},"Operating Temperature":{"unit":"degC","min":0,"max":70}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-GSR-sensor-p-1614.html"],"Datasheets":["http://wiki.seeed.cc/Grove-GSR_Sensor/","file:///C:/Users/Malachai/Downloads/Lm324.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-GSR_Sensor/raw/master/res/Grove%20-%20GSR_v1.2_SCH.pdf","https://github.com/SeeedDocument/Grove-GSR_Sensor/raw/master/res/Grove%20-%20GSR%20v1.0%20SCH.pdf"]}}}},{"Library":"guvas12d","Description":"API for the GUVA-S12D UV Sensor","Sensor Class":{"GUVAS12D":{"Name":"Grove Analog UV Sensor","Description":"UPM module for the GUVA-S12D UV sensor","Aliases":["guvas12d"],"Categories":["ultraviolet"],"Connections":["gpio"],"Project Type":["environmental","prototyping"],"Manufacturers":["seeed"],"Kits":["eak"],"Image":"guvas12d.jpg","Examples":{"Java":["GUVAS12D_Example.java"],"Python":["guvas12d.py"],"Node.js":["guvas12d.js"],"C++":["guvas12d.cxx"],"C":["guvas12d.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5.1},"Operating Current":{"unit":"mA","typ":0.31},"Response Wavelength":{"unit":"nm","low":240,"high":370},"Working Temperature":{"unit":"degC","low":-30,"high":85}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-UV-Sensor-p-1540.html"],"Datasheets":["http://wiki.seeed.cc/Grove-UV_Sensor/","https://raw.githubusercontent.com/SeeedDocument/Grove-UV_Sensor/master/res/Grove-UV_Sensor_v1.1_Datasheets.zip"],"Schematics":["https://github.com/SeeedDocument/Grove-UV_Sensor/raw/master/res/Grove%20-%20UV%20Sensor%20v1.1sch.pdf"]}}}},{"Library":"h3lis331dl","Description":"H3LIS331DL I2C Accelerometer (400g) Library","Sensor Class":{"H3LIS331DL":{"Name":"I2C 3-axis Digital Accelerometer (400g)","Description":"This is a high-performance, high-range accelerometer for extreme applications.","Aliases":["h3lis331dl"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["IMU","prototyping"],"Manufacturers":["seeed","stmicro"],"Kits":[],"Image":"h3lis331dl.jpg","Examples":{"Java":["H3LIS331DL_Example.java"],"Python":["h3lis331dl.py"],"Node.js":["h3lis331dl.js"],"C++":["h3lis331dl.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"uA","typ":300},"Measurement Range":{"unit":"+-g","low":100,"high":400}},"Urls":{"Product Pages":["httpshttps://www.seeedstudio.com/Grove-3Axis-Digital-Accelerometer400g-p-1897.html"],"Datasheets":["http://www.st.com/web/en/resource/technical/document/datasheet/DM00053090.pdf","http://wiki.seeed.cc/Grove-3-Axis_Digital_Accelerometer-400g/"],"Schematics":[]}}}},{"Library":"h803x","Description":"UPM API for the Veris H803X Energy Meter","Sensor Class":{"H803X":{"Name":"Veris H803X Energy Meter Module","Description":"The H8036 is similar to the H8035, but provides much more data. The Enercept H8035/H8036 is an innovative three-phase networked (Modbus RTU) power transducer that combines electronics and high accuracy industrial grade CTs in a single package. The need for external electrical enclosures is eliminated, greatly reducing installation time and cost. Color-coordination between voltage leads and CTs makes phase matching easy. Additionally, these transducers automatically detect and compensate for phase reversal, eliminating the concern of CT load orientation. Up to 63 Transducers can be daisy-chained on a single RS-485 network. This module was developed using libmodbus 3.1.2, and the H8035. The H8036 has not been tested. libmodbus 3.1.2 must be present for this module to build. It was developed using an RS232->RS485 interface. You cannot use the built in MCU TTL UART pins for accessing this device -- you must use a full Serial RS232->RS485 or USB-RS485 interface connected via USB.","Aliases":["h803x"],"Categories":["energy","electric"],"Connections":["uart"],"Project Type":["prototyping"],"Manufacturers":["veris"],"Kits":[],"Examples":{"Java":["H803X_Example.java"],"Python":["h803x.py"],"Node.js":["h803x.js"],"C++":["h803x.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"VAC","low":208,"high":480},"Operating Current":{"unit":"A","max":2400},"Operating Temperature":{"unit":"degC","low":0,"high":60}},"Urls":{"Product Pages":["http://www.veris.com/Item/H8035-0100-2.aspx"],"Datasheets":["http://www.veris.com/docs/Datasheets/H803x_d0117.pdf"],"Schematics":[]}}}},{"Library":"hcsr04","Description":"HC-SR04 Ultrasonic Sensor Library","Sensor Class":{"HCSR04":{"Name":"HC-SR04 Ultrasonic Distance Measuring Sensor","Description":"This module defines the HC-SR04 interface for libhcsr04.","Aliases":["hcsr04"],"Categories":["ultrasonic","distance"],"Connections":["gpio"],"Project Type":["robotics","safety","prototyping"],"Manufacturers":["sparkfun"],"Kits":[],"Examples":{"Java":["HCSR04_Example.java"],"Python":["hcsr04.py"],"Node.js":["hcsr04.js"],"C++":["hcsr04.cxx"],"C":["hcsr04.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","typ":15},"Measurement Range":{"unit":"cm","low":2,"high":400}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/13959"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf"],"Schematics":[]}}}},{"Library":"hdc1000","Description":"API for the HDC1000 Temperature & Humidity Sensor","Sensor Class":{"HDC1000":{"Name":"HDC1000 Temperature and Humidity Sensor","Description":"The HDC1000 is a digital humidity sensor with integrated temperature sensor that provides excellent measurement accuracy at very low power. The device measures humidity based on a novel capacitive sensor. The humidity and temperature sensors are factory calibrated. The innovative WLCSP (Wafer Level Chip Scale Package) simplifies board design with the use of an ultra-compact package. The sensing element of the HDC1000 is placed on the bottom part of the device, which makes the HDC1000 more robust against dirt, dust, and other environmental contaminants. The HDC1000 is functional within the full -40 to +125 [degC] temperature range.","Aliases":["hdc1000"],"Categories":["temperature","humidity"],"Connections":["i2c"],"Project Type":["environmental","","prototyping"],"Manufacturers":["ti"],"Kits":[],"Examples":{"Java":[],"Python":["hdc1000.py"],"Node.js":[],"C++":["hdc1000.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5},"Operating Current":{"unit":"uA","low":0.82,"high":1.2},"Operating Temperature":{"unit":"degC","low":-40,"high":125}},"Urls":{"Product Pages":["http://www.ti.com/product/HDC1000/description"],"Datasheets":["http://www.ti.com/lit/ds/symlink/hdc1000.pdf"],"Schematics":[]}}}},{"Library":"hdxxvxta","Description":"API for the Veris HDXXVXTA Humidity Transmitter","Sensor Class":{"HDXXVXTA":{"Name":"Veris HDXXVXTA Humidity Transmitter","Description":"The driver was developed using the HD2NVSTA1 humidity transmitter. The 'T' variant supports a temperature transmitter as well. Both signals are provided by the device as analog 0-5Vdc or 0-10Vdc outputs. The A1 variant supports a temperature range of -40C-50C, while the A2 variant supports a range of 0C-50C. Humidity ranges for all devices in this device family range from 0% to 100% (non-condensing). This driver used the 5Vdc outputs for obvious reasons. Your MCU must be configured for 5V operation. Using any other analog reference voltage will require the appropriate external circuitry (such as a voltage divider) in order to interface safely with your MCU. For devices which do not support temperature, use '-1' as the temperature pin number in the object constructor. If temperature measurement is disabled, getTemperature() will always return 0C/32F.","Aliases":["hdxxvxta"],"Categories":["humidity"],"Connections":["analog"],"Project Type":["environmental","prototyping"],"Manufacturers":["veris"],"Kits":[],"Examples":{"Java":[],"Python":["hdxxvxta.py"],"Node.js":["hdxxvxta.js"],"C++":["hdxxvxta.cxx"],"C":[]},"Specifications":{},"Urls":{"Product Pages":[],"Datasheets":[],"Schematics":[]}}}},{"Library":"hka5","Description":"API for the DFRobot Laser Particulate Matter (PM) Sensor","Sensor Class":{"HKA5":{"Name":"DFRobot Laser Particulate Matter (PM) Sensor","Description":"This driver was tested with a DFRobot Laser PM2.5 Sensor. It connects to a UART at 9600 baud. This is the only baud rate supported. It optionally supports Reset and Set/Sleep gpios as well.","Aliases":["hka5"],"Categories":["gaseous"],"Connections":["gpio","uart"],"Project Type":["environmental","prototyping"],"Manufacturers":["dfrobot"],"Kits":[],"Examples":{"Java":["HKA5_Example.java"],"Python":["hka5.py"],"Node.js":["hka5.js"],"C++":["hka5.cxx"],"C":["hka5.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","typ":10}},"Urls":{"Product Pages":["https://www.dfrobot.com/wiki/index.php/DFRobot_LM35_Linear_Temperature_Sensor_(SKU:DFR0023)"],"Datasheets":["http://image.dfrobot.com/image/data/DFR0023/DFR0023_Datasheet.pdf"],"Schematics":[]}}}},{"Library":"hlg150h","Description":"Light Controller Library","Sensor Class":{"HLG150H":{"Name":"Lighting Power Supply Controller","Description":"HLG series single output LED power supply features universal AC input, protection for short circuit, overload, over voltage and over temperature","Aliases":["hlg150h"],"Categories":["lightcontroller"],"Connections":["pwm"],"Project Type":["prototyping","industrial"],"Manufacturers":["meanwell"],"Examples":{"C++":["hlg150h.cxx"]},"Specifications":{"Vdd":{"unit":"v","low":1.7,"high":3.6},"Ioff":{"unit":"mA","low":0,"high":0},"Iavg":{"unit":"mA","low":1,"high":2},"Pressure Range":{"unit":"hpA","low":300,"high":1100},"Voltage Range":{"unit":"C","low":-40,"high":85}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.meanwell-web.com/en/product-info/ac-dc-power-supply/led-driver/101-180-w-led-driver/hlg-150h/product/HLG-150H-24B"],"Datasheets":["http://www.mouser.com/ds/2/260/r1755_3-1109742.pdf"],"Schematics":["http://www.mouser.com/ds/2/260/HLG-150H-SPEC-806071.pdf"]}}}},{"Library":"hm11","Description":"HM-11 Bluetooth 4.0 Low Energy Module Library","Sensor Class":{"HM11":{"Name":"Bluetooth Low Energy Module","Description":"The driver was tested with the Grove BLE module. It's an HM-11 BLE 4.0 module based on a TI CC2541 chip. It operates using a standard 'AT' command set. See the datasheet for a full list of available commands and their possible responses: http://www.seeedstudio.com/wiki/images/c/cd/Bluetooth4_en.pdf It is connected via a UART at 9,600 baud.","Aliases":["hm11"],"Categories":["bluetooth"],"Connections":["uart"],"Project Type":["wireless","wearables","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"hm11.jpg","Examples":{"Java":["HM11_Example.java"],"Python":["hm11.py"],"Node.js":["hm11.js"],"C++":["hm11.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":2,"typ":3.3,"high":3.6},"Peak Operating Current":{"unit":"mA","typ":15},"Operating Temperature":{"unit":"degC","low":-40,"high":65}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Bluetooth-V4.0-HM-11-BLE-Module-p-1803.html"],"Datasheets":["http://wiki.seeed.cc/Bluetooth_V4.0_HM_11_BLE_Module/"],"Schematics":[]}}}},{"Library":"hmc5883l","Description":"HMC5883L Magnetometer Library","Sensor Class":{"Hmc5883l":{"Name":"Grove 3-Axis Digital Compass","Description":"Honeywell [HMC5883L] (http://www.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf) is a 3-axis digital compass. Communication with HMC5883L is simple and all done through an I2C interface. Different breakout boards are available. Typically, a 3V supply is all that is needed to power the sensor.","Aliases":["hmc5883l"],"Categories":["compass","magnetometer"],"Connections":["i2c"],"Project Type":["IMU","prototyping"],"Manufacturers":["seeed","honeywell"],"Kits":["robok"],"Examples":{"Java":["Hmc5883l_Example.java"],"Python":["hmc5883l.py"],"Node.js":["hmc5883l.js"],"C++":["hmc5883l.cxx"],"C":["hmc5883l.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"uA","low":2.5,"high":640},"Output Rate":{"unit":"Hz","max":116}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-3-Axis-Digital-Compass-p-759.html"],"Datasheets":["http://wiki.seeed.cc/Grove-3-Axis_Compass_V1.0/","https://raw.githubusercontent.com/SeeedDocument/Grove-3-Axis_Compass_V1.0/master/res/HMC5883.pdf"],"Schematics":[]}}}},{"Library":"hmtrp","Description":"API for the HM-TRP Serial RF Pro Transceiver","Sensor Class":{"HMTRP":{"Name":"Serial RF Pro Module","Description":"UPM support for the HM-TRP Serial RF Pro transceiver. This was tested specifically with the Grove Serial RF Pro transceiver. In theory, this class should work with the following devices: HM-TRP-433: 414000000-454000000Hz HM-TRP-470: 450000000-490000000Hz HM-TRP-868: 849000000-889000000Hz HM-TRP-915: 895000000-935000000Hz The only difference is the transmit and receive frequencies supported. By default, the device simply sends and receives any data presented on its UART interface. It can be put into a configuration mode by grounding the CONFIG pin on the transceiver.","Aliases":["hmtrp"],"Categories":["wireless"],"Connections":["uart"],"Project Type":["wireless","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"hmtrp.jpg","Examples":{"Java":["HMTRP_Example.java"],"Python":["hmtrp.py"],"Node.js":["hmtrp.js"],"C++":["hmtrp.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":4.75,"typ":5,"high":5.25},"Sleep Current":{"unit":"uA","typ":1},"Transmission Distance":{"unit":"Km","max":1},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Serial-RF-Pro-p-794.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Serial_RF_Pro/","https://github.com/SeeedDocument/Grove-Serial_RF_Pro/raw/master/res/HM-TRP-RS232_enV1.0_20120604.pdf"],"Schematics":[]}}}},{"Library":"hp20x","Description":"API for the HP20X-based Grove Barometer (High-Accuracy)","Sensor Class":{"HP20X":{"Name":"HP20X Barometer (High-Accuracy)","Description":"This is a high-accuracy barometer providing pressure, altitude, and temperature data. It can be calibrated for a given altitude offset, and a wide range of interrupt generating capabilities are supported. As usual, see the HP20X datasheet for more details. This module was developed using a Grove Barometer (High-Accuracy) based on an HP206C chip.","Aliases":["hp20x"],"Categories":["pressure"],"Connections":["i2c"],"Project Type":["environmental","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"hp20x.jpg","Examples":{"Java":["HP20x_Example.java"],"Python":["hp20x.py"],"Node.js":["hp20x.js"],"C++":["hp20x.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5.5},"Operating Current":{"unit":"mA","low":0.635,"high":1.1},"Measurement Range":{"unit":"hPa","low":300,"high":1200}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Barometer-HighAccuracy-p-1865.html"],"Datasheets":["http://www.seeedstudio.com/wiki/File:HP206C_Datasheet.pdf"],"Schematics":[]}}}},{"Library":"ht9170","Description":"API for the HT9170 DTMF Decoder","Sensor Class":{"HT9170":{"Name":"Dual Tone Multi Frequency (DTMF) Decoder","Description":"This driver was developed using the DTMF (Dual-Tone Multi-Frequency) Shield by Seeed Studio*. It can decode DTMF signals presented at its audio input. It does not generate DTMF signals.","Aliases":["ht9170"],"Categories":["telephony"],"Connections":["gpio"],"Project Type":["telephone","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"ht9170.jpg","Examples":{"Java":[],"Python":["ht9170.py"],"Node.js":["ht9170.js"],"C++":["ht9170.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","typ":3}},"Urls":{"Product Pages":["https://www.seeedstudio.com/DTMFDual-Tone-Multi-Frequency-Shield-p-1839.html"],"Datasheets":["http://www.holtek.com/pdf/comm/9170v111.pdf"],"Schematics":["http://www.dossant.com/projects/wp-content/uploads/2013/01/dtmf_mod3_schematic.pdf"]}}}},{"Library":"htu21d","Description":"API for the HTU21D Temperature & Humidity Sensor","Sensor Class":{"HTU21D":{"Name":"Digital Relative Humidity Sensor with Temperature","Description":"HTU21D by Measurement Specialties is a digital humidity sensor with temperature output. RH reports between 0 and 100%, and the temperature range is -40 to +125 degC. Note: getCompRH is the preferred function below (passing true to cause a measurement cycle). If actual values used for the compensated ready are necessary, use the getHumidity(false) and getTemperature(false) functions following the getCompRH call. Also note the sensor should not perform more than a couple of measurements per second to limit the heating of the sensor.","Aliases":["htu21d"],"Categories":["temperature","humidity"],"Connections":["i2c"],"Project Type":["environmental","prototyping"],"Manufacturers":["seeed","adafruit","sparkfun"],"Kits":[],"Examples":{"Java":["HTU21D_Example.java"],"Python":["htu21d.py"],"Node.js":["htu21d.js"],"C++":["htu21d.cxx"],"C":[]},"Urls":{"Product Pages":[],"Datasheets":[],"Schematics":[]}}}},{"Library":"hwxpxx","Description":"UPM API for the Veris HWXPXX Hardware Protocol Humidity and Temperature Sensor","Sensor Class":{"HWXPXX":{"Name":"Veris HWXPXX Hardware Protocol Humidity and Temperature Sensor","Description":"This module implements support for the Veris HWXPHTX Hardware Protocol Humidity and Temperature Sensor family. It uses MODBUS over an RS485 interface. You must have libmodbus v3.1.2 (or greater) installed to compile and use this driver. This module was developed using libmodbus 3.1.2, and the HWXPHTX. This sensor supports humidity, and optionally, temperature, slider switch, and override switch reporting. The HWXPHTX used to develop this driver did not include the optional slider or override switches, however support for them is provided. It was developed using an RS232->RS485 inteface. You cannot use the built in MCU TTL UART pins for accessing this device -- you must use a full serial RS232->RS485 interface connected via USB.","Aliases":["hwxpxx"],"Categories":["temperature"],"Connections":["uart"],"Project Type":["environmental","prototyping"],"Manufacturers":["veris"],"Kits":[],"Examples":{"Java":[],"Python":["hwxpxx.py"],"Node.js":["hwxpxx.js"],"C++":["hwxpxx.cxx"],"C":[]},"Specifications":{"Operating Voltage (DC)":{"unit":"V","low":12,"high":30},"Operating Voltage (AC)":{"unit":"VAC","typ":24},"Operating Current":{"unit":"mA","max":100},"Operating Range (RH)":{"unit":"%RH","low":0,"high":100},"Operating Range (Temp)":{"unit":"degC","low":10,"high":35}},"Urls":{"Product Pages":["http://www.veris.com/Item/HWXPHTX.aspx"],"Datasheets":["http://www.veris.com/docs/Datasheets/HWProtocol_d0117.pdf"],"Schematics":[]}}}},{"Library":"hx711","Description":"API for the HX711 Analog-to-Digital Converter","Sensor Class":{"HX711":{"Name":"24-bit Analog-to-digital Converter","Description":"HX711 is a precision 24-bit analog-to-digital converter (ADC) designed for weight scales and industrial control applications to interface directly with a bridge sensor. This module was tested on the Intel(R) Galileo Gen 2 board.","Aliases":["hx711"],"Categories":["adc"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["generic"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":["hx711.js"],"C++":["hx711.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.7,"high":5.5},"Operating Current":{"unit":"mA","max":1.4}},"Urls":{"Product Pages":[],"Datasheets":["http://image.dfrobot.com/image/data/SEN0160/hx711_english.pdf"],"Schematics":[]}}}},{"Library":"ili9341","Description":"API for the ILI9342 LCD","Sensor Class":{"ILI9341":{"Name":"SPI Based LCD","Description":"This module defines the interface for the ILI9341 display library.","Aliases":["ili9341"],"Categories":["display"],"Connections":["spi"],"Project Type":["graphics","prototyping"],"Manufacturers":["adafruit"],"Kits":[],"Image":"ili9341.jpg","Examples":{"Java":[],"Python":["ili9341.py"],"Node.js":["ili9341.js"],"C++":["ili9341.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5}},"Urls":{"Product Pages":["https://www.adafruit.com/product/2090"],"Datasheets":["http://www.adafruit.com/datasheets/ILI9341.pdf"],"Schematics":["https://cdn-learn.adafruit.com/assets/assets/000/015/463/medium800/adafruit_products_schem.png?1395173896"]}}}},{"Library":"ims","Description":"API for the Catnip Electronics I2C Moisture Sensor","Sensor Class":{"IMS":{"Name":"I2C Moisture Sensor","Description":"I2C Sensor which can be used to read moisture, light, and temperature which must run at 100kHz.","Aliases":["ims"],"Categories":["moisture"],"Connections":["i2c"],"Project Type":["environmental","prototyping"],"Manufacturers":["catnip"],"Kits":[],"Examples":{"Java":["IMS_Example.java"],"Python":["ims.py"],"Node.js":["ims.js"],"C++":["ims.cxx"],"C":["ims.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","low":0.7,"high":14},"Operating Temperature":{"unit":"degC","low":0,"high":85}},"Urls":{"Product Pages":["https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/"],"Datasheets":[],"Schematics":[]}}}},{"Library":"ina132","Description":"API for the INA132 Differential Amplifier Sensor","Sensor Class":{"INA132":{"Name":"Grove Differential Amplifier","Description":"The INA132 Differential Amplifier Sensor is designed for precise differential-input amplification. This sensor was tested amplifying the signal from a Weight Sensor (Load Cell) 0-500g","Aliases":["ina132"],"Categories":["electric"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"ina132.jpg","Examples":{"Java":[],"Python":["ina132.py"],"Node.js":["ina132.js"],"C++":["ina132.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.7,"high":5.5}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Differential-Amplifier-p-1284.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Differential_Amplifier_v1.2","https://raw.githubusercontent.com/SeeedDocument/Grove-Differential_Amplifier_v1.2/master/res/Ina132.pdf"],"Schematics":[]}}}},{"Library":"isd1820","Description":"API support for the ISD1820-based Grove Voice Recorder","Sensor Class":{"ISD1820":{"Name":"Grove Voice Recording and Playback Module","Description":"This class implements support for the Grove Voice Recorder. There are two digital pins: one that enables recording, and the other that plays back what was previously recorded.","Aliases":["isd1820"],"Categories":["audio"],"Connections":["gpio"],"Project Type":["audio","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"isd1820.jpg","Examples":{"Java":[],"Python":["isd1820.py"],"Node.js":["isd1820.js"],"C++":["isd1820.cxx"],"C":[]},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Recorder-p-1825.html"],"Datasheets":["http://wiki.seeed.cc/Grove_Recorder/","https://github.com/SeeedDocument/Grove_Recorder/raw/master/res/ISD1820P.pdf"],"Schematics":[]}}}},{"Library":"itg3200","Description":"API for the ITG-3200 3-Axis Digital Gyroscope","Sensor Class":{"Itg3200":{"Name":"Grove 3-Axis Digital Gyroscope","Description":"InvenSense* ITG-3200 is a 3-axis digital gyroscope. (https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf) This sensor has been tested and can run at either 3.3V or 5V on Intel(R) Galileo.
However, it is incompatible with and not detected on the I2C bus by Intel(R) Edison using the Arduino* breakout board.","Aliases":["itg3200"],"Categories":["gyroscope"],"Connections":["i2c"],"Project Type":["IMU","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Examples":{"Java":["Itg3200_Example.java"],"Python":["itg3200.py"],"Node.js":["itg3200.js"],"C++":["itg3200.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Operating Current":{"unit":"mA","typ":6.5},"Standby Current":{"unit":"uA","typ":5}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-3-Axis-Digital-Gyro-p-750.html"],"Datasheets":["http://wiki.seeed.cc/Grove-3-Axis_Digital_Gyro/","https://raw.githubusercontent.com/SeeedDocument/Grove-3-Axis_Digital_Gyro/master/res/ITG-3200.pdf"],"Schematics":[]}}}},{"Library":"jhd1313m1","Description":"API for the JHD1313M1 I2C LCD Controller","Sensor Class":{"Jhd1313m1":{"Name":"LCD Display Driver for the JHD1313M1 Controller for HD44780-based Displays","Description":"JHD1313M1 has two I2C addreses: one belongs to a controller, very similar to the upm::Lcm1602 LCD driver, that controls the HD44780-based display, and the other controls only the backlight. This module was tested with the Seeed Grove LCD RGB Backlight v2.0 display that requires 5V to operate.","Aliases":["jhd1313m1"],"Categories":["display"],"Connections":["i2c"],"Project Type":["display","prototyping"],"Manufacturers":["seeed"],"Kits":["gsk"],"Examples":{"Java":["Jhd1313m1_Example.java","Jhd1313m1_lcd_Example.java"],"Python":["jhd1313m1-lcd.py"],"Node.js":["jhd1313m1-lcd.js"],"C++":["jhd1313m1-lcd.cxx"],"C":["jhd1313m1.c"]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","max":60}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-LCD-RGB-Backlight-p-1643.html?cPath=34_36"],"Datasheets":["http://wiki.seeed.cc/Grove-LCD_RGB_Backlight/"],"Schematics":[]}}}},{"Library":"joystick12","Description":"API for the ElecFreaks* Joystick v 1.2-1.4 Breakout","Sensor Class":{"Joystick12":{"Name":"2-axis Analog Joystick","Description":"This module defines the Joystick API, and implementation for the X and Y buttons could be treated as normal GPIO - this enables easier interrupt support. This driver should be compatible with any 2-axis analog joystick.","Aliases":["joystick12"],"Categories":["input"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["generic"],"Kits":["robok"],"Image":"joystick12.jpg","Examples":{"Java":["Joystick12_Example.java","Joystick12_example_Example.java"],"Python":["joystick12.py"],"Node.js":["joystick12.js"],"C++":["joystick12.cxx"],"C":["joystick12.c"]},"Urls":{"Product Pages":["http://www.elecfreaks.com/estore/joystick-breakout-module-bkout-md01.html"],"Datasheets":["https://www.elecfreaks.com/wiki/index.php?title=Joystick_breakout_module"],"Schematics":["http://elecfreaks.com/store/download/schematic-red.pdf"]}}}},{"Library":"KX122","Description":"Kionix KX122 accelerometer sensor library","Sensor Class":{"KX122":{"Name":"Kionix KX122 tri-axis accelerometer sensor","Description":"This is the UPM Module for the Kionix KX122 accelerometer sensor. The Kionix KX122 sensor is a multifunctional sensor that provides a multitude if different functionality in addition to the basic accelerometer functionality. The sensor has 2 interrupt pins, that can be used to detect various interrupts. The Sensor has an additional sample buffer that can be configured.","Categories":["acceleration"],"Connections":["i2c,spi"],"Project Type":["prototyping","commercial"],"Manufacturers":["Kionix"],"Examples":{"C++":["kx122.cxx"],"C":["kx122.c"]},"Specifications":{"Supply Voltage (VDD)":{"unit":"V","min":1.71,"max":3.6},"I/O Pads Supply Voltage (IO_VDD)":{"unit":"V","min":1.7,"max":3.6},"Supply Current":{"unit":"uA","min":0.9,"max":146},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Urls":{"Product Pages":["http://www.kionix.com/product/KX122-1037"],"Datasheets":["http://kionixfs.kionix.com/en/datasheet/KX122-1037%20Specifications%20Rev%205.0.pdf"]}}}},{"Library":"kxcjk1013","Description":"KXCJK1013 Tri-axis Digital Accelerometer API","Sensor Class":{"KXCJK1013":{"Name":"Tri-axis Digital Accelerometer","Description":"he KXCJK is a tri-axis +/-2g, +/-4g or +/-8g silicon micromachined accelerometer.","Aliases":["kxcjk1013"],"Categories":["accelerometer"],"Connections":["iio","i2c"],"Project Type":["imu","prototyping"],"Manufacturers":["kionix"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["kxcjk1013.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.71,"typ":2.6,"high":3.6},"Operating Current":{"unit":"uA","low":0.9,"high":135},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":[],"Datasheets":["http://kionixfs.kionix.com/en/datasheet/KXCJK-1013%20Specifications%20Rev%202.pdf"],"Schematics":[]}}}},{"Library":"KXTJ3","Description":"Kionix KXTJ3 tri-axis accelerometer sensor library","Sensor Class":{"KXTJ3":{"Name":"Kionix KXTJ3 tri-axis accelerometer sensor","Description":"This is the UPM Module for the Kionix KXTJ3 accelerometer sensor. The Kionix KXTJ3 sensor is a multifunctional sensor that provides multiple functionalities. The sensor provides an extended g-range up to +/- 16g, higher resolution embedded wake-up function down to 3.9mg, and a flexible interrupt circuitry. The KXTJ3 sense element offers lower noise performance, exceptional shock resiliency, stable performance over temperature, and virtually eliminates offset and sensitivity shifts from reflow.","Categories":["acceleration"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Kionix"],"Image":"kxtj3.png","Examples":{"C++":["kxtj3.cxx"],"C":["kxtj3.c"],"Java":["KXTJ3_Example.java"],"Python":["kxtj3.py"],"Node.js":["kxtj3.js"]},"Specifications":{"Supply Voltage (VDD)":{"unit":"V","min":1.71,"typical":2.5,"max":3.6},"I/O Pads Supply Voltage (IO_VDD)":{"unit":"V","min":1.7,"max":3.6},"Supply Current":{"unit":"uA","min":0.9,"max":155},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Urls":{"Product Pages":["http://www.kionix.com/product/KXTJ3-1057"],"Datasheets":["http://kionixfs.kionix.com/en/datasheet/KXTJ3-1057-Specifications-Rev-3.0.pdf"]}}}},{"Library":"l298","Description":"API for the L298 Dual H-Bridge Motor Driver","Sensor Class":{"L298":{"Name":"Dual H-bridge Motor Driver","Description":"It was developed using the RobotBase Dual H-Bridge module. This module can support 2 DC motors, or one 2-phase stepper motor. It requires 3 pins per DC motor (or H-bridge), or 4 pins for the stepper motor (uses both H-bridges).","Aliases":["l298"],"Categories":["motors"],"Connections":["gpio","pwm"],"Project Type":["robotics","prototyping"],"Manufacturers":["seeed","sparkfun"],"Kits":[],"Image":"l298.jpg","Examples":{"Java":[],"Python":["l298.py","l298-stepper.py"],"Node.js":["l298.js","l298-stepper.js"],"C++":["l298.cxx","l298-stepper.cxx"],"C":[]},"Specifications":{"Motor Supply Voltage":{"unit":"V","low":6,"high":35},"Motor Supply Current":{"unit":"A","typ":2}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/9670"],"Datasheets":[],"Schematics":[]}}}},{"Library":"l3gd20","Description":"L3GD20 Tri-axis Digital Gyroscope API","Sensor Class":{"L3GD20":{"Name":"L3GD20 Tri-axis Digital Gyroscope","Description":"The L3GD20 The L3GD20 is a low-power three-axis angular rate sensor. This driver supports IIO and I2C modes. Some methods will only work in one mode or the other. See the documentation on the methods to determine whether a given method is operation in a given mode. Both the I2C and IIO mechanisms make use of the calibration and denoise algorithms. For I2C mode, not all capabilities of the device are supported, but a complete register map and low level read/write methods are provided to add any missing functionality.","Aliases":["l3gd20"],"Categories":["gyroscope"],"Connections":["iio","i2c"],"Project Type":["IMU","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["l3gd20.cxx","l3gd20-i2c.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.4,"high":3.6},"Operating Current":{"unit":"mA","typ":6.1},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/l3gd20.html"],"Datasheets":["http://www.st.com/resource/en/datasheet/l3gd20.pdf"],"Schematics":[]}}}},{"Library":"lcdks","Description":"API for the generic LCD Keypad Shield","Sensor Class":{"LCDKS":{"Name":"LCD Keypad Shield","Description":"The LCD Keypad Shield uses 7 digital outputs and 1 analog input (for the keypad). The outputs are used to drive an attached LCM1602 LCD controller. This driver should be compatible with the similar LCD keypad shields from Sainsmart, DFRobot and Sparkfun.","Aliases":["lcdks"],"Categories":["userinput"],"Connections":["gpio","analog"],"Project Type":["control","prototyping"],"Manufacturers":["sainsmart","dfrobot","sparkfun"],"Kits":[],"Examples":{"Java":[],"Python":["lcdks.py"],"Node.js":["lcdks.js"],"C++":["lcdks.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/13293","http://www.sainsmart.com/sainsmart-1602-lcd-keypad-shield-for-arduino-duemilanove-uno-mega2560-mega1280.html","http://www.dfrobot.com/index.php?route=product/product&product_id=51"],"Datasheets":["http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino_V2"],"Schematics":["https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/16X2_LCD_shield.pdf"]}}}},{"Library":"lcm1602","Description":"API for the LCM1602 I2C controller for HD44780-based displays","Sensor Class":{"Lcm1602":{"Name":"LCD Display Driver for the LCM1602 Controller for HD44780-based Displays","Description":"UPM module for the ear-clip heart rate sensor. It is used to measure your heart rate.","Aliases":["lcm1602"],"Categories":["display"],"Connections":["gpio"],"Project Type":["display","prototyping"],"Manufacturers":["adafruit","sparkfun","seeed"],"Kits":[],"Examples":{"Java":["Lcm1602_i2c_Example.java","Lcm1602_parallel_Example.java"],"Python":[],"Node.js":[],"C++":["lcm1602-i2c.cxx","lcm1602-parallel.cxx"],"C":["lcm1602-i2c.c","lcm1602-parallel.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":4.8,"typ":5,"high":5.2},"Operating Current":{"unit":"mA","max":150}},"Urls":{"Product Pages":[],"Datasheets":["https://www.adafruit.com/datasheets/TC1602A-01T.pdf"],"Schematics":[]}}}},{"Library":"ldt0028","Description":"API for LDT0-028 PZT Film-Based Sensors","Sensor Class":{"LDT0028":{"Name":"Piezo Vibration Sensor","Description":"This module defines the LDT0-028 interface for libupm-ldt0028","Aliases":["ldt0028"],"Categories":["vibration"],"Connections":["analog"],"Project Type":["industrial","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"ldt0028.jpg","Examples":{"Java":["LDT0028_Example.java"],"Python":["ldt0028.py"],"Node.js":["ldt0028.js"],"C++":["ldt0028.cxx"],"C":["ldt0028.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Piezo-Vibration-Sensor-p-1411.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Piezo_Vibration_Sensor/","https://raw.githubusercontent.com/SeeedDocument/Grove-Piezo_Vibration_Sensor/master/res/Piezo_Vibration_Sensor.pdf"],"Schematics":[]}}}},{"Library":"led","Description":"LED library","Sensor Class":{"Led":{"Name":"Light-emitting Diode (LED)","Description":"UPM module for the LED (or other similar light-emitting diodes). An LED is a p-n junction semiconductor which emits light in response to voltage. The longer wire of an LED connects to the positive seat (anode); the shorter wire connects to the negative seat (cathode). The flat side of the bulb corresponds to the cathode, while the rounded side corresponds to the anode.","Aliases":["Grove - LED"],"Categories":["led"],"Connections":["gpio"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","dfrobot","sparkfun","adafruit","generic"],"Kits":["gsk"],"Image":"led.jpg","Examples":{"Java":["LED_Example.java"],"Python":["led.py"],"Node.js":["led.js"],"C++":["led.cxx"],"C":["led.c"]},"Urls":{"Product Pages":["http://wiki.seeed.cc/Grove-LED_Socket_Kit/"],"Schematics":["https://github.com/SeeedDocument/Grove-LED_Socket_Kit/raw/master/res/Grove-LED_v1.3_Schematics.zip"]}}}},{"Library":"lidarlitev3","Description":"API for the LIDARLITEV3 Optical Distance Measurement Sensor","Sensor Class":{"LIDARLITEV3":{"Name":"Optical Distance Measurement Sensor","Description":"It is a compact, high-performance optical distance measurement sensor from Garmin.","Aliases":["lidarlitev3"],"Categories":["distance"],"Connections":["i2c","pwm"],"Project Type":["robotics","prototyping"],"Manufacturers":["garmin"],"Kits":[],"Image":"lidarlitev3.jpg","Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["lidarlitev3.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":5},"Operating Current":{"unit":"mA","low":105,"high":130}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/14032"],"Datasheets":["http://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf"],"Schematics":[]}}}},{"Library":"light","Description":"API for the Light Sensor","Sensor Class":{"Light":{"Name":"Analog Light Sensor","Description":"The light sensor detects the intensity of the ambient light. As the light intensity of the environment increases, the resistance of the sensor decreases. This means the raw value from the analog pin is larger in bright light and smaller in the dark. A very approximate lux value can also be returned.","Aliases":["light"],"Categories":["light"],"Connections":["analog"],"Project Type":["environmental","security","prototyping"],"Manufacturers":["seeed"],"Kits":["gsk"],"Image":"light.jpg","Examples":{"Java":["Light_Example.java"],"Python":["light.py"],"Node.js":["light.js"],"C++":["light.cxx"],"C":["light.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":5},"Operating Current":{"unit":"mA","low":0.5,"high":3},"Response Time":{"unit":"ms","low":20,"high":30}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Light-Sensor-p-746.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Light_Sensor/","https://github.com/SeeedDocument/Grove_Light_Sensor/raw/master/res/LS06-M%CE%A65_datasheet.pdf"],"Schematics":[]}}}},{"Library":"linefinder","Description":"Grove Line Finder Sensor Library","Sensor Class":{"LineFinder":{"Name":"Infrared (IR) Based Line Finder","Description":"UPM module for the Line Finder sensor. It outputs a digital signal indicating whether it is detecting black on a white background, or white on a black background.","Aliases":["linefinder"],"Categories":["linefinder"],"Connections":["gpio"],"Project Type":["robotics","prototyping"],"Manufacturers":["seeed","dfrobot"],"Kits":["robok"],"Image":"linefinder.jpg","Examples":{"Java":["LineFinder_Example.java"],"Python":["linefinder.py"],"Node.js":["linefinder.js"],"C++":["linefinder.cxx"],"C":["linefinder.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.7,"high":5.5},"Operating Current":{"unit":"uA","typ":210},"Operating Temperature":{"unit":"degC","low":-40,"high":125}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Line-Finder-v1.1-p-2712.html"],"Datasheets":["file:///C:/Users/Malachai/Downloads/Lmv358.pdf","http://wiki.seeed.cc/Grove-Line_Finder/"],"Schematics":["https://easyeda.com/Seeed/Grove_Line_Finder_v1_1-dfc99c72325e41ff93a451882fd2e143"]}}}},{"Library":"lis2ds12","Description":"API for the LIS2DS12 3-axis Accelerometer","Sensor Class":{"LIS2DS12":{"Name":"Digital 3-axis Accelerometer","Description":"The LIS2DS12 is an ultra-low-power high performance three-axis linear accelerometer belonging to the \"pico\" family which leverages on the robust and mature manufacturing processes already used for the production of micromachined accelerometers. The LIS2DS12 has user-selectable full scales of 2g/4g/8g/16g and is capable of measuring accelerations with output data rates from 1 Hz to 6400 Hz. Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.","Aliases":["lis2ds12"],"Categories":["accelerometer"],"Connections":["i2c","spi","gpio"],"Project Type":["imu","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":["LIS2DS12_Example.java"],"Python":["lis2ds12.py"],"Node.js":["lis2ds12.js"],"C++":["lis2ds12.cxx"],"C":["lis2ds12.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.62,"high":1.98},"Operating Current":{"unit":"uA","low":0.7,"high":150},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/lis2ds12.html"],"Datasheets":["http://www.st.com/content/ccc/resource/technical/document/datasheet/ce/32/55/ac/e1/87/46/84/DM00177048.pdf/files/DM00177048.pdf/jcr:content/translations/en.DM00177048.pdf"],"Schematics":[]}}}},{"Library":"lis3dh","Description":"API for the LIS3DH 3-axis Accelerometer","Sensor Class":{"lis3dh":{"Name":"Digital 3-axis Accelerometer","Description":"The LIS3DH is an ultra-low-power high performance three-axis linear accelerometer belonging to the \"nano\" family which leverages the robust and mature manufacturing processes already used for the production of micromachined accelerometers. The LIS3DH has user-selectable full scales of 2g/4g/8g/16g and is capable of measuring accelerations with output data rates from 1 Hz to 5300 Hz. Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.","Aliases":["lis3dh"],"Categories":["accelerometer"],"Connections":["i2c","spi","gpio"],"Project Type":["imu","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":["LIS3DH_Example.java"],"Python":["lis3dh.py"],"Node.js":["lis3dh.js"],"C++":["lis3dh.cxx"],"C":["lis3dh.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.71,"high":3.6},"Operating Current":{"unit":"uA","low":0.5,"high":11},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/lis3dh.html"],"Datasheets":["http://www.st.com/resource/en/datasheet/lis3dh.pdf"],"Schematics":[]}}}},{"Library":"lm35","Description":"API for the DFRobot LM35 Linear Temperature Sensor","Sensor Class":{"LM35":{"Name":"Analog Temperature Sensor","Description":"This sensor returns an analog voltage proportional to the temperature of the ambient environment. This driver was developed using the DFRobot LM35 Linear Temperature Sensor","Aliases":["lm35"],"Categories":["temperature"],"Connections":["analog"],"Project Type":["environmental","monitoring","prototyping"],"Manufacturers":["dfrobot","nationalsemiconductor"],"Kits":[],"Image":"lm35.jpg","Examples":{"Java":[],"Python":["lm35.py"],"Node.js":["lm35.js"],"C++":["lm35.cxx"],"C":["lm35.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.3,"high":5},"Measurement Range":{"unit":"degC","low":0,"high":100}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-76.html"],"Datasheets":["http://image.dfrobot.com/image/data/DFR0023/DFR0023_Datasheet.pdf"],"Schematics":[]}}}},{"Library":"lol","Description":"API for the Olimex LoL Array","Sensor Class":{"LoL":{"Name":"Lots of LEDs (LoL) Array Rev A","Description":"This module defines the LoL API and implementation for a simple framebuffer.","Aliases":["lol"],"Categories":["display"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["olimex"],"Kits":[],"Examples":{"Java":["LoL_Example.java","LoL_example_Example.java"],"Python":[],"Node.js":[],"C++":["lol.cxx"],"C":[]},"Urls":{"Product Pages":["https://www.olimex.com/Products/Duino/Shields/SHIELD-LOL/"],"Datasheets":[],"Schematics":[]}}}},{"Library":"loudness","Description":"API for the Loudness Sensor","Sensor Class":{"Loudness":{"Name":"Loudness Sensor","Description":"This sensor family returns an analog voltage proportional to the loudness of the ambient environment. It's output does not correspond to a particular sound level in decibels. The higher the output voltage, the louder the ambient noise level. This device uses an electret microphone for sound input. This driver was developed using the DFRobot Loudness Sensor V2 and the Grove Loudness sensor.","Aliases":["loudness"],"Categories":["audio"],"Connections":["analog"],"Project Type":["noise control","prototyping"],"Manufacturers":["seeed","dfrobot"],"Kits":[],"Image":"loudness.jpg","Examples":{"Java":[],"Python":["loudness.py"],"Node.js":["loudness.js"],"C++":["loudness.cxx"],"C":["loudness.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":3.5,"high":10},"Measurement Range":{"unit":"Hz","low":50,"high":2000}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Loudness-Sensor-p-1382.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Loudness_Sensor/","https://raw.githubusercontent.com/SeeedDocument/Grove-Loudness_Sensor/master/res/LM2904DR.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Loudness_Sensor/master/res/Grove_loudness_sensor.pdf"]}}}},{"Library":"lp8860","Description":"LED Light Controller Library","Sensor Class":{"LP8860":{"Name":"API for LP8860 LED Lighting Controller","Description":"The LP8860-Q1 is an automotive high-efficiency LED driver with boost controller. It has 4 high-precision current sinks that can be controlled by a PWM input signal, an SPI or I2C master, or both ","Aliases":["lp8860"],"Categories":["light Controller"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["Texas Instruments"],"Image":"","Examples":{"C++":["lp8860.cxx"]},"Specifications":{"Vdd":{"unit":"v","low":3,"high":48},"Iavg":{"unit":"mA","low":1,"high":150},"Frequency Range":{"unit":"KHz","low":100,"high":2200},"Temperature Range":{"unit":"C","low":-40,"high":125}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://www.ti.com/product/LP8860-Q1"],"Datasheets":["http://www.ti.com/lit/ds/symlink/lp8860-q1.pdf"],"Schematics":["http://www.ti.com/general/docs/datasheetdiagram.tsp?genericPartNumber=LP8860-Q1&diagramId=66853"]}}}},{"Library":"lpd8806","Description":"API for the LPD8806 RGB LED Strip Controller","Sensor Class":{"LPD8806":{"Name":"Digital RGB LED Strip Controller","Description":"FastPixel* LPD8806 is an RGB LED strip controller.","Aliases":["lpd8806"],"Categories":["display"],"Connections":["spi"],"Project Type":["lighting","rgb","prototyping"],"Manufacturers":["adafruit"],"Kits":[],"Image":"lpd8806.jpg","Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["lpd8806.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","max":5}},"Urls":{"Product Pages":["https://www.adafruit.com/product/306"],"Datasheets":["https://cdn-learn.adafruit.com/downloads/pdf/digital-led-strip.pdf"],"Schematics":[]}}}},{"Library":"lsm303agr","Description":"API for the LSM303AGR 3-Axis Geomagnetic Sensor","Sensor Class":{"LSM303AGR":{"Name":"Ultra-Compact High-Performance eCompass Module","Description":"The LSM303AGR is an ultra-low-power high-performance system-in-package featuring a 3D digital linear acceleration sensor and a 3D digital magnetic sensor. The LSM303AGR has linear acceleration full scales of 2g/4g/8g/16g and a magnetic field dynamic range of 50 Gauss. Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports only I2C operation.","Aliases":["lsm303agr"],"Categories":["magnetometer"],"Connections":["i2c"],"Project Type":["imu","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":["LSM303AGR_Example.java"],"Python":["lsm303agr.py"],"Node.js":["lsm303agr.js"],"C++":["lsm303agr.cxx"],"C":["lsm303agr.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.71,"high":3.6},"Operating Current":{"unit":"uA","low":2,"high":200}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/lsm303agr.html"],"Datasheets":["http://www.st.com/content/ccc/resource/technical/document/datasheet/74/c4/19/54/62/c5/46/13/DM00177685.pdf/files/DM00177685.pdf/jcr:content/translations/en.DM00177685.pdf"],"Schematics":[]}}}},{"Library":"lsm303d","Description":"API for the LSM303D 3-Axis Geomagnetic Sensor","Sensor Class":{"LSM303D":{"Name":"Ultra-compact high-performance eCompass module","Description":"The LSM303D is an ultra-low-power high-performance system-in-package featuring a 3D digital linear acceleration sensor and a 3D digital magnetic sensor. The LSM303D has linear acceleration full scales of 2g/4g/8g/16g and a magnetic field dynamic range of 50 Gauss. Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports only I2C operation.","Aliases":["lsm303d"],"Categories":["compass"],"Connections":["i2c"],"Project Type":["robotics","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":["LSM303D_Example.java"],"Python":["lsm303d.py"],"Node.js":["lsm303d.js"],"C++":["lsm303d.cxx"],"C":["lsm303d.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":2.16,"high":3.6},"Operating Current":{"unit":"uA","typ":300},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/lsm303d.html"],"Datasheets":["http://www.st.com/content/ccc/resource/technical/document/datasheet/1c/9e/71/05/4e/b7/4d/d1/DM00057547.pdf/files/DM00057547.pdf/jcr:content/translations/en.DM00057547.pdf"],"Schematics":[]}}}},{"Library":"lsm303dlh","Description":"API for the LSM303DLH Accelerometer & Compass","Sensor Class":{"LSM303DLH":{"Name":"Triaxial Accelerometer/magnetometer","Description":"This module defines the LSM303DLH 3-axis magnetometer/3-axis accelerometer. This module was tested with the Seeed Studio* Grove 6-Axis Accelerometer & Compass module used over I2C. The magnetometer and acceleromter are accessed at two seperate I2C addresses.","Aliases":["lsm303dlh"],"Categories":["compass","accelerometer"],"Connections":["i2c"],"Project Type":["imu","prototyping"],"Manufacturers":["seeed","adafruit","stmicro"],"Kits":[],"Examples":{"Java":["LSM303DLH_Example.java"],"Python":["lsm303dlh.py"],"Node.js":["lsm303dhl.js"],"C++":["lsm303dlh.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","typ":3.3}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-6axis-accelerometercompass-p-1448.html?cPath=144_146"],"Datasheets":["http://wiki.seeedstudio.com/wiki/Grove_-_6-Axis_Accelerometer%26Compass_V1.0"],"Schematics":[]}}}},{"Library":"lsm6ds3h","Description":"API for the LSM6DS3H 3-axis Accelerometer and Gyroscope","Sensor Class":{"LSM6DS3H":{"Name":"Digital 3-axis Accelerometer and Gyroscope","Description":"The LSM6DS3H is a system-in-package featuring a 3D digital accelerometer and a 3D digital gyroscope performing at 1.1 mA (up to 1.6 kHz ODR) in high performance mode and enabling always-on low-power features for an optimal motion experience for the consumer. Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.","Aliases":["lsm6ds3h"],"Categories":["accelerometer","gyroscope"],"Connections":["i2c","spi","gpio"],"Project Type":["imu","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":["LSM6DS3H_Example.java"],"Python":["lsm6ds3h.py"],"Node.js":["lsm6ds3h.js"],"C++":["lsm6ds3h.cxx"],"C":["lsm6ds3h.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.71,"high":3.6},"Operating Current":{"unit":"mA","low":0.85,"high":1.1},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/lsm6ds3h.html"],"Datasheets":["http://www.st.com/content/ccc/resource/technical/document/datasheet/group0/38/96/79/af/ab/62/42/c3/DM00229854/files/DM00229854.pdf/jcr:content/translations/en.DM00229854.pdf"],"Schematics":[]}}}},{"Library":"lsm6dsl","Description":"API for the LSM6DSL 3-axis Accelerometer and Gyroscope","Sensor Class":{"LSM6DSL":{"Name":"Digital 3-axis Accelerometer and Gyroscope","Description":"The LSM6DSL is a system-in-package featuring a 3D digital accelerometer and a 3D digital gyroscope performing at 0.65 mA in high performance mode and enabling always-on low-power features for an optimal motion experience for the consumer. Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.","Aliases":["lsm6dsl"],"Categories":["accelerometer","gyroscope"],"Connections":["i2c","spi","gpio"],"Project Type":["imu","prototyping"],"Manufacturers":["stmicro"],"Kits":[],"Examples":{"Java":["LSM6DSL_Example.java"],"Python":["lsm6dsl.py"],"Node.js":["lsm6dsl.js"],"C++":["lsm6dsl.cxx"],"C":["lsm6dsl.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.71,"high":3.6},"Operating Current":{"unit":"mA","low":0.4,"high":0.65},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.st.com/en/mems-and-sensors/lsm6dsl.html"],"Datasheets":["http://www.st.com/content/ccc/resource/technical/document/datasheet/ee/23/a0/dc/1d/68/45/52/DM00237456.pdf/files/DM00237456.pdf/jcr:content/translations/en.DM00237456.pdf"],"Schematics":[]}}}},{"Library":"lsm9ds0","Description":"API for the LSM9DS0 Gyroscope/Accelerometer/Magnetometer","Sensor Class":{"LSM9DS0":{"Name":"Triaxial Gyroscope/Accelerometer/Magnetometer Sensor","Description":"The LSM9DS0 is a system-in-package featuring a 3D digital linear acceleration sensor, a 3D digital angular rate sensor, and a 3D digital magnetic sensor. The LSM9DS0 has a linear acceleration full scale of 2g/4g/6g/8g/16g, a magnetic field full scale of 2/4/8/12 gauss and an angular rate of 245/500/2000 dps. While not all of the functionality of this device is supported initially, methods and register definitions are provided that should allow an end user to implement whatever features are required. This driver was developed on a Sparkfun 9DOF edison block.","Aliases":["lsm9ds0"],"Categories":["gyroscope","accelerometer","magnetometer"],"Connections":["i2c","gpio"],"Project Type":["robotics","wearables","prototyping"],"Manufacturers":["sparkfun","stmicro"],"Kits":[],"Image":"lsm9ds0.jpg","Examples":{"Java":[],"Python":["lsm9ds0.py"],"Node.js":["lsm9ds0.js"],"C++":["lsm9ds0.cxx"],"C":[]},"Specifications":{"Accelerometer Range (+-)":{"unit":"g","low":2,"high":16},"Magnetometer Range (+-)":{"unit":"gauss","low":2,"high":12},"Gyroscope Range (+-)":{"unit":"deg/s","low":245,"high":2000}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/13033"],"Datasheets":[],"Schematics":["https://cdn.sparkfun.com/datasheets/Dev/Edison/9dof_block.pdf"]}}}},{"Library":"m24lr64e","Description":"API for the M24LR64E NFC Tag","Sensor Class":{"M24LR64E":{"Name":"Dynamic NFC/RFID Tag Module","Description":"The M24LR64E NFC tag is an 8KB electrically erasable programmable read-only memory (EEPROM) that can be written to or read from using I2C and NFC-equipped devices. The user mode (default) allows read and write access to all 8KB of space, provided the sector security status (SSS) allows it. The root mode allows modification of the SSS data and other information, provided the proper password is submitted. The default password for a new tag is 0x00000000. See the datasheet for more details. The Seeed Studio* wiki page for this device includes a link to an Android* application that can be used to also read and write the device via NFC, as well as set NFC passwords, which cannot be done via I2C.","Aliases":["m24lr64e"],"Categories":["rfid","wireless"],"Connections":["i2c","nfc"],"Project Type":["access control","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"m24lr64e.jpg","Examples":{"Java":["M24LR64E_Example.java"],"Python":["m24lr64e.py"],"Node.js":["m24lr64e.js"],"C++":["m24lr64e.cxx"],"C":["m24lr64e.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.8,"high":5.5},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-NFC-Tag-p-1866.html"],"Datasheets":["http://www.seeedstudio.com/wiki/Grove_-_NFC_Tag","https://raw.githubusercontent.com/SeeedDocument/Grove-NFC_Tag/master/res/M24LR64E-R.pdf"],"Schematics":[]}}}},{"Library":"mag3110","Description":"API for the MAG3110 Three-Axis Digital Magnetometer","Sensor Class":{"MAG3110":{"Name":"MAG3110 Three-Axis Digital Magnetometer","Description":"The MAG3110 is a small, low-power digital 3D magnetic sensor with a wide dynamic range to allow operation in PCBs with high extraneous magnetic fields. It measures the components of the local magnetic field, the sum of the geomagnetic field and the magnetic field created by components on the circuit board. It can be used in conjunction with a 3-axis accelerometer so that orientation-independent accurate compass heading information may be achieved It is capable of measuring local magnetic fields up to 10 Gauss with output data rates up to 80 Hz.","Aliases":["mag3110"],"Categories":["magnetometer"],"Connections":["i2c"],"Project Type":["imu","prototyping"],"Manufacturers":["freescale"],"Kits":[],"Examples":{"Java":[],"Python":["mag3110.py"],"Node.js":[],"C++":["mag3110.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.95,"high":3.6},"Operating Current":{"unit":"uA","low":8.6,"high":900},"Operating Temperature":{"unit":"degC","low":-40,"high":85}},"Urls":{"Product Pages":["http://www.nxp.com/products/sensors/magnetometers/high-accuracy-3d-magnetometer:MAG3110"],"Datasheets":["http://www.nxp.com/docs/en/data-sheet/MAG3110.pdf"],"Schematics":[]}}}},{"Library":"max30100","Description":"API for the Pulse Oximeter and Heart-Rate Sensor","Sensor Class":{"MAX30100":{"Name":"Pulse Oximeter and Heart-rate Sensor","Description":"The MAX30100 is an integrated pulse oximetry and heartrate monitor sensor solution. It combines two LEDs, a photodetector, optimized optics, and low-noise analog signal processing to detect pulse oximetry and heart-rate signals.","Aliases":["max30100"],"Categories":["heartrate","pulse-ox"],"Connections":["i2c","gpio"],"Project Type":["medical","wearables","prototyping"],"Manufacturers":["maxim"],"Kits":[],"Examples":{"Java":["MAX30100_Example.java"],"Python":["max30100.py"],"Node.js":["max30100.js"],"C++":["max30100.cxx"],"C":["max30100.c"]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.8,"high":3.3},"Operating Current":{"unit":"uA","low":0.7,"high":1200}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/MAX30100.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/MAX30100.pdf"],"Schematics":[]}}}},{"Library":"max31723","Description":"API for the MAX31723 Temperature Sensor","Sensor Class":{"MAX31723":{"Name":"SPI/3-wire Digital Thermometer","Description":"Maxim Integrated* [MAX31723](http://datasheets.maximintegrated.com/en/ds/MAX31722-MAX31723.pdf) is a low-voltage 3-wire/SPI temperature sensor controller. This module was tested on the Maxim Integrated [MAX31732PMB1 PMOD module](http://datasheets.maximintegrated.com/en/ds/MAX31723PMB1.pdf) from the analog PMOD kit.","Aliases":["max31723"],"Categories":["temperature"],"Connections":["spi"],"Project Type":["environmental","prototyping"],"Manufacturers":["maxim"],"Kits":[],"Examples":{"Java":[],"Python":[],"Node.js":[],"C++":["max31723.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.7,"high":3.7},"Operating Current":{"unit":"uA","low":100,"high":1200},"Operating Temperature":{"unit":"degC","low":-55,"high":125}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/MAX31723.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/MAX31722-MAX31723.pdf"],"Schematics":[]}}}},{"Library":"max31855","Description":"API for the MAX31855 Thermocouple Amplifier","Sensor Class":{"MAX31855":{"Name":"Thermocouple-to-Digital Converter","Description":"Maxim Integrated* [MAX31855](http://datasheets.maximintegrated.com/en/ds/MAX31855.pdf) is a cold-junction compensated thermocouple-to-digital converter. This module was tested on the Maxim Integrated [MAX31855PMB1 PMOD module] (http://datasheets.maximintegrated.com/en/ds/MAX31855PMB1.pdf) from the analog PMOD kit.","Aliases":["max31855"],"Categories":["temperature"],"Connections":["spi"],"Project Type":["thermal","prototyping"],"Manufacturers":["maxim","adafruit"],"Kits":[],"Image":"max31855.jpg","Examples":{"Java":["MAX31855_Example.java"],"Python":[],"Node.js":[],"C++":["max31855.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":3,"high":3.6},"Operating Current":{"unit":"uA","max":1500}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/MAX31855.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf"],"Schematics":[]}}}},{"Library":"max44000","Description":"API for the MAX44000 Ambient and Infrared Proximity Sensor","Sensor Class":{"MAX44000":{"Name":"Ambient and Infrared Proximity Sensor","Description":"Maxim Integrated* [MAX44000](http://datasheets.maximintegrated.com/en/ds/MAX44000.pdf) is an ambient and infrared proximity sensor. This module was tested on the Maxim Integrated [MAX44000PMB1 PMOD module] (http://datasheets.maximintegrated.com/en/ds/MAX44000PMB1.pdf) from the analog PMOD kit.","Aliases":["max44000"],"Categories":["proximity"],"Connections":["i2c"],"Project Type":["robotics","prototyping"],"Manufacturers":["maxim"],"Kits":[],"Examples":{"Java":["MAX44000_Example.java"],"Python":[],"Node.js":[],"C++":["max44000.cxx"],"C":[]},"Specifications":{"Operating Voltage":{"unit":"V","low":1.7,"high":3.6},"Operating Current":{"unit":"mA","low":10,"high":110},"Operating Temperature":{"unit":"degC","low":-40,"high":105}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/MAX44000.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/MAX44000.pdf"],"Schematics":[]}}}},{"Library":"max44009","Description":"Ambient Light Sensor Library","Sensor Class":{"MAX44009":{"Name":"Digital Humidity, Pressure, and Temperature Sensor","Description":"The MAX44009 ambient light sensor features an i2c digital output that is ideal for a number of portable applications such as smartphones, notebooks and industrial sensors","Aliases":["max44009"],"Categories":["light"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["Maxim integrated"],"Image":"","Examples":{"C++":["max44009.cxx"]},"Specifications":{"Vdd":{"unit":"v","low":1.7,"high":3.6},"Temperature Range":{"unit":"C","low":-40,"high":85},"Dynamic Range":{"unit":"lux","low":0.045,"high":188000}},"Platforms":{"Intel Joule Module":{"Notes":["might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/MAX44009.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/MAX44009.pdf"]}}}},{"Library":"max5487","Description":"MAX5487 Digital Potentiometer library","Sensor Class":{"MAX5487":{"Name":"MAX5487 Digital Potentiometer","Description":"This is the UPM Module for the Maxim dual, linear-taper, digital potentiometer. It offers 256 Tap positions, as well as a 10 kiloohm end to end resistance. It interfaces using 3 wire spi, and feature nonvolatile memory.","Aliases":["max5487","MAX5487 Dual, 256-Tap, Nonvolatile, SPI-Interface, Linear-Taper Digital Potentiometers"],"Categories":["digital potentiometer"],"Connections":["spi"],"Project Type":["prototyping","commercial"],"Manufacturers":["maxim"],"Examples":{"Java":["MAX5487_Example.java"],"C++":["max5487.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.7,"max":5.25},"Supply Current":{"unit":"uA","min":"0.5","max":"400"},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/analog/data-converters/digital-potentiometers/MAX5487.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/MAX5487-MAX5489.pdf"]}}}},{"Library":"maxds3231m","Description":"maxds3231m Realtime Clock (RTC) Sensor Library","Sensor Class":{"MAXDS3231M":{"Name":"maxds3231m Realtime Clock (RTC) Sensor","Description":"This is the UPM Module for the Maxim Realtime Clock module. It offers i2c connectivity, with a temperature compensated crystal and crystal oscillator. It offers 12 and 24 hour clock formats, as built in battery backup support.","Aliases":["maxds3231m","DS3231","DS3231 Extremely Accurate I2C-Integrated RTC/TCXO/Crystal"],"Categories":["RTC"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Maxim"],"Examples":{"Java":["MAXds3231m_Example.java"],"C++":["maxds3231m.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.3,"max":5.5},"Supply Current":{"unit":"uA","min":130,"max":650},"Operating Temperature":{"unit":"°C","min":-45,"max":85},"Compensated Temperature Range":{"unit":"°C","min":0,"max":40}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.maximintegrated.com/en/products/digital/real-time-clocks/DS3231.html"],"Datasheets":["https://datasheets.maximintegrated.com/en/ds/DS3231M.pdf"]}}}},{"Library":"maxsonarez","Description":"API for the MaxBotix LV-MaxSonar-EZ Family of Ultrasonic Rangers","Sensor Class":{"MAXSONAREZ":{"Name":"LV-MaxSonar-EZ0 Ultrasonic range finder","Description":"This is the UPM Module for the MaxBotix Ultrasonic Range Finder series. The EZ0 offers the widest beam of the EZ collection. The EZ1 offers the second widest beam of the EZ collection, as well as high sensativity and side object rejectoin. The EZ2 offers a good balance of high sensativity and side object rejection. The EZ3 offers a very narrow beam, with good side object rejection. The EZ4 is the narrowest beam sensor, with the best side object rejection, which provides good detection for large objects.","Aliases":["maxsonarez","LV-MaxSonar-EZ0","MB1000 LV-MaxSonar-EZ0","LV-MaxSonar-EZ1","MB1010 LV-MaxSonar-EZ1","LV-MaxSonar-EZ2","MB1020 LV-MaxSonar-EZ2","LV-MaxSonar-EZ3","MB1030 LV-MaxSonar-EZ3","LV-MaxSonar-EZ4","MB1040 LV-MaxSonar-EZ4"],"Categories":["sound"],"Connections":["analog"],"Project Type":["prototyping","commercial"],"Manufacturers":["MaxBotix"],"Image":"maxsonarez.jpg","Examples":{"Python":["maxsonarez.py"],"Node.js":["maxsonarez.js"],"C++":["maxsonarez.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.5,"max":5.5},"Supply Current":{"unit":"mA","Typ":"2"},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Effective Range":{"unit":"cm","min":"15.24","max":"645"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.maxbotix.com/Ultrasonic_Sensors/MB1000.htm"],"Datasheets":["http://www.maxbotix.com/documents/LV-MaxSonar-EZ_Datasheet.pdf"]}}}},{"Library":"mb704x","Description":"API for the MaxBotix MB704x MaxSonar-WR Ultrasonic Ranger","Sensor Class":{"MB704X":{"Name":"MB704x MaxSonar-WR Ultrasonic Ranger","Description":"This is the UPM Module for the API for the MB704x MaxSonar-WR Ultrasonic Ranger. It was tested with a long distance weather resistant horn, others are offered however giving this sensor a large range of uses.","Aliases":["MB704x","MB704x MaxSonar-WR Ultrasonic Ranger"],"Categories":["sound"],"Connections":["i2c"],"Project Type":["prototyping","industrial"],"Manufacturers":["MaxBotix"],"Examples":{"Java":["MB704X_Example.java"],"Python":["mb704x.py"],"Node.js":["mb704x.js"],"C++":["mb704x.cxx"],"C":["mb704x.c"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5.5},"Supply Current":{"unit":"mA","Typ":"3.4"},"Operating Temperature":{"unit":"°C","min":-40,"max":70},"Effective Range":{"unit":"cm","min":"20","max":"765"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://www.maxbotix.com/Ultrasonic_Sensors/I2C_Distance_Sensors.htm"],"Datasheets":["https://www.maxbotix.com/documents/I2CXL-MaxSonar-WR_Datasheet.pdf"]}}}},{"Library":"mcp2515","Description":"API for the Microchip MCP2515 CAN bus controller","Sensor Class":{"MCP2515":{"Name":"Microchip MCP2515 CAN bus controller","Description":"This is the UPM Module for the Microchip MCP2515 CAN bus controller. This Arduino/Genuino compatable shield offers the ability to communicate over CAN-BUS. This offers a good medium speed, long distance and high reliablity communication solution for Arduino/Genuino projects.","Aliases":["mcp2515","CAN-BUS Shield V1.2"],"Categories":["communication"],"Connections":["spi","gpio"],"Project Type":["prototyping"],"Manufacturers":["Seeed","Microchip"],"Examples":{"Java":["MCP2515_Example.java","MCP2515_TXRX_Example.java"],"Python":["mcp2515-txrx.py","mcp2515.py"],"Node.js":["mcp2515-txrx.js","mcp2515.js"],"C++":["mcp2515-txrx.cxx","mcp2515.cxx"],"C":["mcp2515-txrx.c","mcp2515.c"]},"Specifications":{"Vsource":{"unit":"V","min":2.7,"max":5.5},"Supply Current":{"Normal Mode":{"unit":"mA","Typ":"10"},"Sleep Mode":{"unit":"uA","min":"5","max":"8"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Data Frame Buffer":{"unit":"bit","min":"11","max":"29"}},"Platforms":{"Intel Edison":{},"Arduino 101":{}},"Urls":{"Product Pages":["https://www.seeedstudio.com/CANBUS-Shield-p-2256.html"],"Datasheets":["http://ww1.microchip.com/downloads/en/DeviceDoc/21801e.pdf"]}}}},{"Library":"mcp9808","Description":"MCP9808 precision temperature sensor library","Sensor Class":{"MCP9808":{"Name":"Microchip MCP9808 precision temperature sensor","Description":"This is the UPM Module for the Microchip MCP9808 precision temperature sensor. The MCP9808 digital temperature sensor converts temperatures between -20 deg C and +100 deg C to a digital word with +/- 0.5 deg C (max.) accuracy. The MCP9808 comes with user-programmable registers that provide flexibility for temperature sensing applications. The registers allow user-selectable settings such as Shutdown or low-power modes and the specification of temperature Event and Critical output boundaries. When the temperature changes beyond the specified boundary limits, the MCP9808 outputs an Event signal. The user has the option of setting the event output signal polarity as an active-low or active-high comparator output for thermostat operation, or as temperature event interrupt outputfor microprocessor-based systems. The event output can also be configured as a Critical temperature output.","Aliases":["mcp9808","MCP9808 High Accuracy I2C Temperature Sensor Breakout Board"],"Categories":["temperature"],"Connections":["i2c"],"Project Type":["prototyping"],"Manufacturers":["Microchip","Adafruit"],"Image":"mcp9808.jpg","Examples":{"Node.js":["mcp9808.js"],"C++":["mcp9808.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.7,"max":5.5},"Supply Current":{"unit":"uA","min":200,"max":400},"Operating Temperature":{"unit":"°C","min":-40,"max":125},"0.25 °C Prescision":{"unit":"°C","min":-40,"max":125},"0.5 °C Prescision":{"unit":"°C","min":-20,"max":100}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1782?gclid=Cj0KCQjwnubLBRC_ARIsAASsNNkm7dgo3LX4XplesneIFqkY63M7rmfcdlPYq7JXYpuIqnfuEGljSdYaAsILEALw_wcB"],"Datasheets":["http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf"]}}}},{"Library":"md","Description":"I2C Motor Driver library","Sensor Class":{"MD":{"Name":"Grove I2C Motor Driver","Description":"This class implements support for the I2C Motor Driver. This device can support a single 4-wire stepper motor, or two 2-wire DC motors. The device contains an Atmel* ATmega8L microcontroller that manages an L298N H-bridge driver chip. This device supports an I2C bus speed of 100Khz only. The module does not provide any telemetry or status - it only accepts I2C commands for its various operations. This module was tested with version 1.3 of the I2C Motor Driver. For stepper operation, this driver can run in one of two modes - Mode 1, where this driver handles the stepping operation, and Mode 2, where this driver simply sends commands to the Motor Driver, and it handles the stepping operation. Mode2 requires updated (and working) firmware to be loaded onto the device. The default stepper operation mode is Mode1, which is generally more flexible and is supported on all firmware revisions.","Aliases":["Grove - I2C Motor Driver"],"Categories":["motor"],"Connections":["i2c"],"Project Type":["prototyping","robotics"],"Manufacturers":["Seeed"],"Kits":["robok"],"Image":"md.jpg","Examples":{"Java":["GroveMD_Example.java"],"Python":["grovemd-stepper.py","grovemd.py"],"Node.js":["md-stepper.js","md.js"],"C++":["md-stepper.cxx","md.cxx"],"C":["md-stepper.c","md.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"A","min":0.5,"max":4},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Requires Grove Shield"]},"Arduino 101":{"Notes":["Requires Grove Shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-I2C-Motor-Driver-p-907.html"],"Datasheets":["http://wiki.seeed.cc/Grove-I2C_Motor_Driver_V1.3/"]}}}},{"Library":"mg811","Description":"API for the DFRobot CO2 Sensor","Sensor Class":{"MG811":{"Name":"DFRobot CO2 Sensor","Description":"This sensor returns an an analog voltage that falls as the concentration of CO2 increases. It contains a heater that must be allowed to 'warm' up the sensor before measurements are stable (hours to days is the recommendation). It requires that the MCU be powered from an external power supply (not USB) at 5v, since the heater will consume significant current. The sensor should be allowed to 'heat' up for some time before beginning use, typically a couple of hours minimum. It also needs fairly precise calibration at 400ppm and 1000ppm to return meaningful results. The sensor also incorporates a potentiometer that can be adjusted to specific threshold. Once that threshold is reached, an LED on the sensor will light, and the digital pin will be driven high.","Aliases":["mg811","Gravity: Analog CO2 Gas Sensor For Arduino"],"Categories":["gaseous"],"Connections":["analog"],"Project Type":["prototype","industrial","commercial"],"Manufacturers":["dfrobot"],"Image":"mg811.jpg","Examples":{"Python":["mg811.py"],"Node.js":["mg811.js"],"C++":["mg811.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":0,"max":5},"Supply Current":{"unit":"mA","typ":200},"Operating Temperature":{"unit":"°C","min":-20,"max":50},"Effective Range":{"unit":"ppm","min":"350","max":"10,000"}},"Platforms":{"Intel Edison":{"Notes":["Requires the Gravity: IO Expansion Shield for Arduino V7.1"]},"Arduino 101":{"Notes":["Requires the Gravity: IO Expansion Shield for Arduino V7.1"]}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-1023.html"],"Datasheets":["http://image.dfrobot.com/image/data/SEN0159/CO2b%20MG811%20datasheet.pdf"]}}}},{"Library":"mhz16","Description":"MHZ16 Serial CO2 Sensor library","Sensor Class":{"MHZ16":{"Name":"MHZ16 Serial CO2 Sensor library","Description":"This is the UPM Module for the Seeed/Zhengzhou Winsen Electronics Technology MHZ16 Serial CO2 Sensor. This class implements support for the Grove CO2 sensor. Its CO2 detection range is 0-2,000 ppm. It requires a 2-3 minute warm-up time before reporting valid data.","Aliases":["Grove - CO2 Sensor","MH-Z16 Intelligent Infrared Gas Module"],"Categories":["gaseous"],"Connections":["uart"],"Project Type":["industrial","commercial"],"Manufacturers":["Seeed","Zhengzhou Winsen Electronics Technology"],"Image":"mhz16.jpg","Examples":{"Java":["MHZ16_Example.java"],"Python":["mhz16.py"],"Node.js":["mhz16.js"],"C++":["mhz16.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.5,"max":6},"Supply Current":{"unit":"mA","min":"50","max":"100"},"Operating Temperature":{"unit":"°C","min":0,"max":50},"Response Time":{"unit":"s","time":"<90"},"Warm-up Time":{"unit":"minute","time":3},"Effective Range":{"unit":"ppm","min":0,"max":2000},"Accuracy":{"unit":"ppm","accuracy":200},"Operating Humidity":{"unit":"RH","min":"0%","max":"90%"}},"Platforms":{"Intel Edison":{"Notes":["Requires Grove Arduino breakout board"]},"Arduino 101":{"Notes":["Requires Grove Arduino breakout board"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-CO2-Sensor-p-1863.html"],"Datasheets":["http://wiki.seeed.cc/Grove-CO2_Sensor/","https://raw.githubusercontent.com/SeeedDocument/Grove-CO2_Sensor/master/res/MH-Z16_CO2_datasheet_EN.pdf"]}}}},{"Library":"mic","Description":"Generic analog microphone library","Sensor Class":{"Microphone":{"Name":"Analog Microphone","Description":"This module defines the Analog Microphone sensor.","Aliases":["Grove - Sound Sensor"],"Categories":["sound"],"Connections":["analog"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","dfrobot","sparkfun","adafruit","generic"],"Kits":["gsk"],"Image":"mic.jpg","Examples":{"Java":["Microphone_Example.java"],"Python":["mic.py"],"Node.js":["mic.js"],"C++":["mic.cxx"]},"Urls":{"Product Pages":["http://www.seeedstudio.com/wiki/Grove_-_Sound_Sensor"],"Schematics":["https://github.com/SeeedDocument/Grove_Sound_Sensor/raw/master/res/Grove%20-%20Sound%20Sensor%20v1.6%20Schematic.pdf"]}}}},{"Library":"micsv89","Description":"MICS-VZ89 environmental sensor library","Sensor Class":{"MICSV89":{"Name":"API for the MICS-VZ89 Gas Sensor","Description":"This is the UPM Module for the SGX Sensortech MICS-VZ-89. The MiCS-VZ-86/89 combines state-of-the-art MOS sensor technology with intelligent detection algorithms to monitor VOCs and CO2 equivalent variations in confined spaces. This library only supports the i2c variants of this sensor.","Aliases":["micsv89","MICS-VZ-89TE","MICS-VZ-89TE Indoor Air Quality Sensor"],"Categories":["gaseous"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["SGX"],"Image":"micsv89.jpg","Examples":{"Node.js":["micsv89.js"],"C++":["micsv89.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Warm-up Time":{"unit":"minute","time":15}},"Urls":{"Product Pages":["https://sgx.cdistore.com/ProductDetail/MICSVZ89TE-SGX-Sensortech-Limited/598202/"],"Datasheets":["https://sgx.cdistore.com/datasheets/e2v/MiCS-VZ-89TE_V1.0.pdf"]}}}},{"Library":"mlx90614","Description":"MLX90614 Temperature Sensor library","Sensor Class":{"MLX90614":{"Name":"API for the Melexis MLX90614 Temperature Sensor","Description":"This is the UPM Module for the Melexis mlx90614 temperature sensor. The MLX90614 is an infrared thermometer for non-contact temperature measurements. Both the IR sensitive thermopile detector chip and the signal conditioning ASIC are integrated in the same TO-39 can. Integrated into the MLX90614 are a low noise amplifier, 17-bit ADC and powerful DSP unit thus achieving high accuracy and resolution of the thermometer.","Aliases":["mlx90614","Digital plug & play infrared thermometer in a TO-can"],"Categories":["temperature"],"Connections":["i2c"],"Project Type":["medical","industrial","commercial"],"Manufacturers":["Melexis"],"Image":"mlx90614.jpg","Examples":{"C++":["mlx90614.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.6,"max":5.5},"Supply Current":{"unit":"mA","min":1.3,"max":2},"Operating Temperature":{"unit":"°C","min":-40,"max":125},"Effective Range":{"unit":"°C","min":-70,"max":380},"Accuracy":{"Between 0 and 50 °C":{"unit":"°C","accuracy":0.5}},"Resolution":{"unit":"°C","resolution":"0.02"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.melexis.com/en/product/MLX90614/Digital-Plug-Play-Infrared-Thermometer-TO-Can"],"Datasheets":["https://www.melexis.com/-/media/files/documents/datasheets/mlx90614-datasheet-melexis.pdf"]}}}},{"Library":"mma7361","Description":"UPM API for the DFRobot MMA7361 Analog Accelerometer","Sensor Class":{"MMA7361":{"Name":"API for the DFRobot MMA7361 Analog Accelerometer","Description":"This is the UPM Module for the DFRobot mma7361 analog accelerometer. This triaxial accelerometer has variable sensitivity, and offers an easy to read analog interface. This library was tested with the DFRobot MMA7361 Analog Accelerometer.","Aliases":["mma7361","Triple Axis Accelerometer MMA7361","DFR0143"],"Categories":["accelerometer"],"Connections":["analog","gpio"],"Project Type":["prototyping"],"Manufacturers":["DFRobot"],"Examples":{"Java":["MMA7361_Example.java"],"Python":["mma7361.py"],"Node.js":["mma7361.js"],"C++":["mma7361.cxx"],"C":["mma7361.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":8},"Supply Current":{"Measurement Mode":{"unit":"uA","typ":500},"Standby Mode":{"unit":"uA","typ":3}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"mV/g","sensativity":800},"Sensitivity":{"unit":"g","min":1.5,"max":6}},"Platforms":{"Intel Edison":{"Notes":["Might DFRobot IO/Sensor expansion board."]},"Arduino 101":{"Notes":["Might DFRobot IO/Sensor expansion board."]}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-507.html#.V7YEj99ytNJ"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/Triple_Axis_Accelerometer_MMA7361_SKU:DFR0143","http://www.nxp.com/docs/en/data-sheet/MMA7361L.pdf"]}}}},{"Library":"mma7455","Description":"NXP MMA7455 Accelerometer library","Sensor Class":{"MMA7455":{"Name":"API for the NXP MMA7455 Accelerometer","Description":"This is the UPM Module for the NXP MMA7455 Accelerometer. The MMA7455L 3-Axis Digital Output Accelerometer is a low power, micro machined sensor capable of measuring acceleration along its X, Y, and Z axes. It offers several convenient integrated features including an analog to digital converter (ADC), digital low-pass filter, and selectable sensitivity ranges of ±2g, ±4g, or ±8g. This device can be easily configured to detect quick motion pulses as single taps, double taps, and 0g (free fall) conditions on any or all axes and provides configurable interrupt pins (INT1 and INT2) for each type of event.","Aliases":["mma7455","MMA7455 3-Axis Accelerometer Module"],"Categories":["accelerometer"],"Connections":["i2c","spi"],"Project Type":["prototyping","robotics"],"Manufacturers":["NXP","Freescale"],"Image":"mma7455.jpg","Examples":{"Java":["MMA7455_Example.java"],"C++":["mma7455.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.5,"max":5.5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Sensitivity":{"unit":"g","min":2,"max":10},"Supply Current":{"Standby Mode":{"unit":"uA","typ":26},"Full Operation":{"unit":"mA","typ":"<3"}}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.parallax.com/product/28526"],"Datasheets":["https://www.parallax.com/sites/default/files/downloads/28526-Freescale-MMA7455L-Device-Documentation.pdf"]}}}},{"Library":"mma7660","Description":"MMA7660 I2C 3-Axis Digital Accelerometer library","Sensor Class":{"MMA7660":{"Name":" API for the Seeed/NXP MMA7660 I2C 3-Axis Digital Accelerometer","Description":"This is the UPM Module for the Seeed/NXP MMA7660 i2c 3-axis digital accelerometer. This device supports a variety of capabilities, including the generation of interrupts for various conditions, tilt and basic gesture detection, and X/Y/Z-axis measurements of g-forces being applied","Aliases":["mma7660","Grove - 3-Axis Digital Accelerometer(±1.5g)"],"Categories":["accelerometer"],"Connections":["i2c","gpio"],"Project Type":["prototyping","robotics"],"Manufacturers":["Seeed","NXP"],"Image":"mma7660.jpg","Examples":{"Java":["MMA7660_Example.java"],"Python":["mma7660.py"],"Node.js":["mma7660.js"],"C++":["mma7660.cxx"],"C":["mma7660.c"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5.5},"Supply Current":{"unit":"uA","min":0.4,"max":47},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Sensitivity":{"unit":"LSB/g","sensitivity":"21"}},"Platforms":{"Intel Edison":{"Notes":["Might Grove breakout shield"]},"Arduino 101":{"Notes":["Might Grove breakout shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-3-Axis-Digital-Accelerometer(%C2%B11.5g)-p-765.html"],"Datasheets":["http://wiki.seeed.cc/Grove-3-Axis_Digital_Accelerometer-1.5g/"]}}}},{"Library":"mma8x5x","Description":"MMA8X5X Family Three-Axis Accelerometer Library","Sensor Class":{"mma8451":{"Name":"API for the Adafruit/Freescale MMA8451 Three-Axis Accelerometer","Description":"This is the UPM Module for the Adafruit/Freescale mma8451 three-axis accelerometer. This simple accelerometer and breakout board are a great starting point for working with accelerometers in general. This is the most percise of the mma8x5x series, offering a 14-bit analog to digital converter onboard. The Adafruit breakout board makes it easy to mount to breadboard or perfboard.","Aliases":["mma8451","mma8x5x","Adafruit Triple-Axis Accelerometer - ±2/4/8g"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Freescale","Adafruit"],"Examples":{"Python":["mma8x5x.py"],"C++":["mma8x5x.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"uA","min":6,"max":165},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Range":{"unit":"g","min":2,"max":8},"Sensitivity":{"unit":"LSB/g","min":1024,"max":4096}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/2019"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/MMA8451Q-1.pdf"]}},"mma8452q":{"Name":"API for the Sparkfun/Freescale MMA8451Q Three-Axis Accelerometer","Description":"This is the UPM Module for the Sparkfun/Freescale mma8452 three-axis accelerometer. This breakout board makes it easy to use the tiny MMA8452Q accelerometer in your project. The MMA8452Q is a smart low-power, three-axis, capacitive MEMS accelerometer with 12 bits of resolution. The MMA8452Q has user-selectable full scales of ±2g/±4g/±8g.","Aliases":["mma8452q","mma8x5x","SparkFun Triple Axis Accelerometer Breakout - MMA8452Q"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Freescale","Sparkfun"],"Examples":{"Python":["mma8x5x.py"],"C++":["mma8x5x.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.95,"max":3.6},"Supply Current":{"unit":"uA","min":6,"max":165},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Range":{"unit":"g","min":2,"max":8},"Sensitivity":{"unit":"LSB/g","min":256,"max":1024}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/12756"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/MMA8452Q-rev8.1.pdf"]}},"mma8453q":{"Name":"API for the NXP MMA8453Q Three-Axis Accelerometer","Description":"This is the UPM Module for the NXP mma8453q three-axis accelerometer. This accelerometer is packed with embedded functions with flexible user-programmable options configurable to two interrupt pins. Embedded interrupt functions allow for overall power savings relieving the host processor from continuously polling data. The MMA8453Q has user-selectable full scales of ±2g/±4g/±8g.","Aliases":["mma8453q","mma8x5x","MMA8453Q: ±2g/±4g/±8g, Low g, 10-bit Digital Accelerometer"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["NXP"],"Examples":{"Python":["mma8x5x.py"],"C++":["mma8x5x.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.95,"max":3.6},"Supply Current":{"unit":"uA","min":6,"max":165},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Range":{"unit":"g","min":2,"max":8},"Sensitivity":{"unit":"LSB/g","min":64,"max":256}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://www.nxp.com/products/sensors/accelerometers/3-axis-accelerometers/2g-4g-8g-low-g-10-bit-digital-accelerometer:MMA8453Q"],"Datasheets":["http://www.nxp.com/docs/en/data-sheet/MMA8453Q.pdf"]}},"mma8652fc":{"Name":"API for the NXP MMA8652FC Three-Axis Accelerometer","Description":"This is the UPM Module for the NXP mma8652fc three-axis accelerometer. This accelerometer is packed with embedded functions with flexible user-programmable options configurable to two interrupt pins. Embedded interrupt functions allow for overall power savings relieving the host processor from continuously polling data. The MMA8453Q has user-selectable full scales of ±2g/±4g/±8g.","Aliases":["mma8652fc","mma8x5x","MMA8652FC: ±2g/±4g/±8g, Low g, 12-Bit Digital Accelerometer"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["NXP"],"Examples":{"Python":["mma8x5x.py"],"C++":["mma8x5x.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.95,"max":3.6},"Supply Current":{"unit":"uA","min":6,"max":165},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Range":{"unit":"g","min":2,"max":8},"Sensitivity":{"unit":"LSB/g","min":256,"max":1024}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://www.nxp.com/products/sensors/accelerometers/3-axis-accelerometers/2g-4g-8g-low-g-12-bit-digital-accelerometer:MMA8652FC"],"Datasheets":["http://www.nxp.com/docs/en/data-sheet/MMA8652FC.pdf"]}},"mma8653fc":{"Name":"API for the NXP MMA8653FC Three-Axis Accelerometer","Description":"This is the UPM Module for the NXP mma8653fc three-axis accelerometer. This accelerometer is packed with embedded functions with flexible user-programmable options configurable to two interrupt pins. Embedded interrupt functions allow for overall power savings relieving the host processor from continuously polling data. The MMA8453Q has user-selectable full scales of ±2g/±4g/±8g.","Aliases":["mma8653fc","mma8x5x","MMA8653FC: ±2g/±4g/±8g, Low g, 12-Bit Digital Accelerometer"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["NXP"],"Examples":{"Python":["mma8x5x.py"],"C++":["mma8x5x.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.95,"max":3.6},"Supply Current":{"unit":"uA","min":6,"max":165},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Range":{"unit":"g","min":2,"max":8},"Sensitivity":{"unit":"LSB/g","min":64,"max":256}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://www.nxp.com/products/sensors/accelerometers/3-axis-accelerometers/2g-4g-8g-low-g-10-bit-digital-accelerometer:MMA8653FC"],"Datasheets":["http://www.nxp.com/docs/en/data-sheet/MMA8653FC.pdf"]}}}},{"Library":"mmc35240","Description":"Memsic MMC35240 Tri-axis Magnetic Sensor Library","Sensor Class":{"MMC35240":{"Name":"Memsic MMC35240 Tri-axis Magnetic Sensor API","Description":"This is the UPM Module for the Memsic MMC35240 Tri-axis Magnetic Sensor. Fully integrated 3-axis magnetic sensor and electronic circuits requiring fewer external components.","Aliases":["mmc35240","MMC3530KJ"],"Categories":["compass"],"Connections":["i2c"],"Project Type":["industrial","commercial"],"Manufacturers":["Memsic"],"Examples":{"C++":["mmc35240.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.62,"max":1.98},"Supply Current":{"unit":"uA","typ":"160"},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Sensitivity":{"unit":"mG/LSB","min":"1","max":"4"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.memsic.com/magnetic-sensors/MMC3530KJ"],"Datasheets":["https://www.memsic.com/magnetic-sensors/MMC3530KJ"]}}}},{"Library":"moisture","Description":"Moisture Sensor library","Sensor Class":{"Moisture":{"Name":"API for the Grove Moisture Sensor ","Description":"This is the UPM Module for the Grove moisture sensor. This sensor can be used to detect the moisture content of soil or whether there is water around the sensor. As the moisture content increases, so does the value that is read. Note: this sensor is not designed to be left in soil nor to be used outdoors.","Aliases":["Grove Moisture Sensor"],"Categories":["liquid"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["eak","hak"],"Image":"moisture.jpg","Examples":{"Java":["Moisture_Example.java"],"Python":["moisture.py"],"Node.js":["moisture.js"],"C++":["moisture.cxx"],"C":["moisture.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Supply Current":{"unit":"mA","min":0,"max":35}},"Platforms":{"Intel Edison":{"Notes":["Might need the Grove base shield"]},"Arduino 101":{"Notes":["Might need the Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Moisture-Sensor-p-955.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Moisture_Sensor/"]}}}},{"Library":"mpl3115a2","Description":"NXP/Adafruit MPL3115A2 Atmospheric Pressure Sensor library","Sensor Class":{"MPL3115A2":{"Name":"NXP/Adafruit MPL3115A2 Atmospheric Pressure Sensor","Description":"This is the UPM Module for the NXP/Adafruit MPL3115A2 Atmospheric Pressure Sensor. This sensor is a compact absolute pressure sensor, with a wide operating range and high operating accuracy, offering a 24-bit ADC onboard. It also offers internal compensation, and a fast i2c interface.","Aliases":["mpl3115a2","MPL3115A2 - I2C Barometric Pressure/Altitude/Temperature Sensor"],"Categories":["pressure"],"Connections":["i2c"],"Project Type":["medical","industrial","commercial"],"Manufacturers":["NXP","Adafruit"],"Image":"mpl3115a2.jpg","Examples":{"Java":["MPL3115A2_Example.java"],"C++":["mpl3115a2.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5.5},"Supply Current":{"unit":"uA","min":"8.5","max":"265"},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Range":{"Calibrated Range":{"unit":"kPa","min":50,"max":110},"Operational Range":{"unit":"kPa","min":20,"max":110}},"Pressure Accuracy":{"unit":"kPa","lower":"-0.4","upper":"0.4"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1893"],"Datasheets":["http://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf"]}}}},{"Library":"mpr121","Description":"Seeed/FreeScale MPR121 Touch Sensor library","Sensor Class":{"MPR121":{"Name":"Seeed/FreeScale MPR121 Touch Sensor","Description":"This is the UPM Module for the Seeed/FreeScale MPR121 Touch Sensor. The MPR121 is a capacitive touch sensor controller,features internal intelligence, include an hardware configurable I2C address, an expended filtering system with debounce, and completely independent electrodes with auto-configuration built in. Note: Each touch sensor comes with 4 \"feelers\" that act as capacitive pads for touch detection.","Aliases":["mpr121","Grove - I2C Touch Sensor"],"Categories":["touch"],"Connections":["i2c"],"Project Type":["prototyping"],"Manufacturers":["Seeed","FreeScale"],"Kits":["tsk"],"Image":"mpr121.jpg","Examples":{"Java":["MPR121_Example.java"],"Python":["mpr121.py"],"Node.js":["mpr121.js"],"C++":["mpr121.cxx"],"C":["mpr121.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"uA","min":"2","max":"29"},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need the Grove base shield"]},"Arduino 101":{"Notes":["Might need the Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-I2C-Touch-Sensor-p-840.html"],"Datasheets":["https://www.sparkfun.com/datasheets/Components/MPR121.pdf"]}}}},{"Library":"mpu9150","Description":"InvenSense/Seeed MPU9150 accelerometer library","Sensor Class":{"MPU9150":{"Name":"InvenSense/Seeed MPU9150 accelerometer","Description":"This is the UPM Module for the InvenSense/Seeed MPU9150 accelerometer. The MPU-9150 is the world's first integrated 9-axis motion tracking device designed for the low power, low cost, and high performance requirements of consumer electronics equipment including smartphones, tablets and wearable sensors. MPU-9150 features three 16-bit ADC for digitizing the gyroscope outputs and three 16-bit ADCs for digitizing the accelerometer outputs and three 13-bit ADCs for digitizing the magnetometer outputs","Aliases":["mpu9150","Grove - IMU 9DOF v1.0"],"Categories":["accelerometer","gyroscope","compass"],"Connections":["i2c","gpio"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["InvenSense","Seeed"],"Image":"mpu9150.jpg","Examples":{"Java":["MPU9150_Example.java"],"Python":["mpu9150.py"],"Node.js":["mpu9150.js"],"C++":["mpu9150-ak8975.cxx","mpu9150-mpu60x0.cxx","mpu9150-mpu9250.cxx","mpu9150.cxx"]},"Specifications":{"Vsource":{"unit":"V","typ":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Communication Speed":{"unit":"kHz","typ":400},"Gyroscope Range":{"unit":"°/sec","min":"-/+250","max":"-/+2000"},"Accelerometer Range":{"unit":"g","min":"-/+2","max":"-/+16"}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["http://wiki.seeedstudio.com/wiki/Grove_-_IMU_9DOF_v1.0"],"Datasheets":["http://wiki.seeedstudio.com/images/5/51/MPU-9150.pdf"]}}}},{"Library":"mq303a","Description":"Seeed MQ303A Alcohol Sensor library","Sensor Class":{"MQ303A":{"Name":"API for the Seeed MQ303A Alcohol Sensor","Description":"This is the UPM Module for the Seeed MQ303A Alcohol Sensor. It has good sensitivity and fast response to alcohol. It is suitable for making Breathalyzer. This Grove implements all the necessary circuitry for MQ303A like power conditioning and heater power supply. This sensor outputs a voltage inversely proportional to the alcohol concentration in air.","Aliases":["mq303a","Grove - Alcohol Sensor"],"Categories":["gaseous"],"Connections":["analog"],"Project Type":["medical","prototyping"],"Manufacturers":["Seeed"],"Kits":["tsk"],"Image":"mq303a.jpg","Examples":{"Java":["MQ303A_Example.java"],"Python":["mq303a.py"],"Node.js":["mq303a.js"],"C++":["mq303a.cxx"],"C":["mq303a.c"]},"Specifications":{"Vsource":{"unit":"V","typ":5},"Supply Current":{"unit":"mA","min":100,"max":140},"Effective Range":{"unit":"ppm","min":20,"max":1000},"Warm-up Time":{"unit":"hours","min":2,"recommended":48},"Operating Temperature":{"unit":"°C","min":18,"max":22},"Operating Humidity":{"unit":"RH","min":"60%","max":"70%"}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Alcohol-Sensor-p-764.html","http://wiki.seeed.cc/Grove-Alcohol_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Alcohol_Sensor/master/res/MQ303A.pdf"]}}}},{"Library":"ms5611","Description":"Amsys ms5611 Barometric Pressure Sensor library","Sensor Class":{"MS5611":{"Name":"API for Amsys MS5611 Barometric Pressure Sensor library","Description":"This is the UPM Module for the Amsys ms5611 barometric pressure sensor. The MS5611 is a new generation of high resolution altimeter sensors from MEAS Switzerland with SPI and I2C bus interface. This module implements I2C only.","Aliases":["ms5611","MS5611 GY-63 Atmospheric Pressure Sensor Module IIC/SPI Communication"],"Categories":["pressure","temperature"],"Connections":["i2c"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["Amsys"],"Examples":{"Node.js":["ms5611.js"],"C++":["ms5611.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.8,"max":3.6},"Supply Current":{"unit":"uA","min":"0.9","max":"12.5"},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Pressure Sensor":{"Effective Pressure Range":{"unit":"mbar","min":10,"max":1200},"Resolution":{"unit":"mbar","min":"0.012","max":"0.065"},"Accuracy":{"unit":"mbar","min":"-1.5","max":"1.5"},"Response Time":{"unit":"ms","min":"0.5","max":"8.22"}},"Temperature Sensor":{"Effective Temperature Range":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"°C","typ":"<0.01"},"Accuracy":{"unit":"°C","min":-0.8,"max":0.8}}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.banggood.com/MS5611-GY-63-Atmospheric-Pressure-Sensor-Module-IICSPI-Communication-p-965980.html","http://www.amsys.info/products/ms5611.htm"],"Datasheets":["http://www.amsys.info/sheets/amsys.en.ms5611_01ba03.pdf"]}}}},{"Library":"ms5803","Description":"Measurement Specialties/Sparkfun MS5803 Pressure and Temperature sensor Library","Sensor Class":{"MS5803":{"Name":"API for the Measurement Specialties/Sparkfun MS5803 Pressure and Temperature sensor","Description":"This is the UPM Module for the Measurement Specialties/Sparkfun MS5803 Pressure and Temperature sensor. The MS5803-14BA is a new generation of high resolution pressure sensors with SPI and I2C bus interface. It is optimized for depth measurement systems with a water depth resolution of 1cm and below. The sensor module includes a high linear pressure sensor and an ultra low power 24 bit delta-sigma ADC with internal factory calibrated coefficients. It provides a precise digital 24 bit pressure and temperature value and different operation modes that allow the user to optimize for conversion speed and current consumption. A high resolution temperature output allows the implementation of a depth measurement systems and thermometer function without any additional sensor.","Aliases":["ms5803","SparkFun Pressure Sensor Breakout - MS5803-14BA"],"Categories":["pressure","temperature"],"Connections":["i2c","spi"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["Measurement Specialties","SparkFun"],"Examples":{"Java":["MS5803_Example.java"],"Python":["ms5803.py"],"Node.js":["ms5803.js"],"C++":["ms5803.cxx"],"C":["ms5803.c"]},"Specifications":{"Vsource":{"unit":"V","min":1.8,"max":3.6},"Supply Current":{"unit":"uA","min":"0.9","max":"12.5"},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Pressure Sensor":{"Effective Pressure Range":{"unit":"bar","min":0,"max":14},"Resolution":{"unit":"mbar","min":"0.2","max":"1"},"Accuracy":{"unit":"mbar","min":-40,"max":40},"Response Time":{"unit":"ms","min":0.5,"max":8.22}},"Temperature Sensor":{"Effective Temperature Range":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"°C","typ":"<0.01"},"Accuracy":{"unit":"°C","min":-0.8,"max":0.8}}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/12909"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Sensors/Weather/ms5803_14ba.pdf"]}}}},{"Library":"my9221","Description":"My-semi MY9221 12-channel LED driver Library","Sensor Class":{"GroveCircularLED":{"Name":"API for the Grove Circular LED module/My-semi MY9221 12-channel LED driver","Description":"This is the UPM Module for the Grove Circular LED module/My-semi MY9221 12-channel LED driver. This is a circular LED ring based on the MY9221 chip. It is often used with a rotary encoder and has 24 controllable LEDs.","Aliases":["my9221","Grove - Circular LED","MY9221 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control"],"Categories":["display"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed","My-semi"],"Image":"grovecircularled.jpg","Examples":{"Python":["grovecircularled.py"],"Node.js":["grovecircularled.js"],"C++":["my9221-grovecircularled.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.5,"max":5.5},"Supply Current":{"unit":"mA","typ":"5.5 per LED"},"LEDs":{"unit":"LED","leds":24},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["http://wiki.seeedstudio.com/wiki/Grove_-_Circular_LED"],"Datasheets":["http://www.my-semi.com.tw/file/MY9221_BF_3.0.pdf"]}},"GroveLEDBar":{"Name":"API for the Grove - LED Bar/My-semi MY9221 12-channel LED driver","Description":"This is the UPM Module for the Grove - LED Bar/My-semi MY9221 12-channel LED driver. This is a 10-segment LED bar, with 8 green segments, 1 yellow segment, and one red segment. They can be daisy chained together so that this module can control multiple LED bars.","Aliases":["my9221","Grove - LED Bar","MY9221 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control"],"Categories":["display"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed","My-semi"],"Kits":["eak"],"Image":"my9221.jpg","Examples":{"Java":["GroveLEDBar_Example.java"],"Python":["groveledbar.py"],"Node.js":["groveledbar.js"],"C++":["my9221-groveledbar.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5.5},"Supply Current":{"unit":"mA","typ":"5.5 per LED"},"LEDs":{"unit":"LED","leds":10},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduinon 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-LED-Bar-p-1178.html","http://wiki.seeed.cc/Grove-LED_Bar/"],"Datasheets":["http://www.my-semi.com.tw/file/MY9221_BF_3.0.pdf"]}},"MY9221 ":{"Name":"API for the My-semi MY9221 12-channel LED driver","Description":"This is the UPM Module for the My-semi MY9221 12-channel LED driver. This is the base for several grove LED modules, allowing finite control of individual LEDs","Aliases":["my9221","MY9221 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control"],"Categories":["display"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["My-semi"],"Kits":["eak"],"Image":"my9221.jpg","Examples":{"C++":["my9221-grovecircularled.cxx","my9221-groveledbar.cxx"],"C":["my9221.c"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5.5},"Supply Current":{"unit":"mA","typ":"5.5 per LED"},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduinon 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-LED-Bar-p-1178.html","http://wiki.seeed.cc/Grove-LED_Bar/"],"Datasheets":["http://www.my-semi.com.tw/file/MY9221_BF_3.0.pdf"]}}}},{"Library":"nlgpio16","Description":"Numato NLGPIO16 16 Channel USB GPIO Module Library","Sensor Class":{"NLGPIO16":{"Name":"API for the Numato NLGPIO16 16 channel USB GPIO Module","Description":"This is the UPM Module for the Numato NLGPIO16 16 channel USB GPIO Module. The NLGPIO16 is a USB adapter providing access to 16 GPIO's, 7 of which can be used as analog inputs. The GPIO's are 3.3v only. An external power supply can be connected to provide more current if the need arises. It is recommended to use a series resistor with the GPIO/ADC pins when interfacing with other circuits. In output mode, GPIOs can source up to 8mA (gpio8-gpio15). So no additional circuitry is needed to drive regular LEDs. A 470 Ohms series resistor is recommended for current limiting when connecting an LED to a GPIO. In contrast to GPIOs, analog inputs can read voltages at any level between 0 to 3.3V volts. It is recommended to use a series resistor to protect the input from stray voltages and spikes. The internal Analog to Digital converter supports 10 bits resolution which is adequate for most applications.","Aliases":["nlgpio16","Numato 16 Channel USB GPIO Module With Analog Inputs"],"Categories":["other"],"Connections":["uart"],"Project Type":["prototyping"],"Manufacturers":["Numato Lab"],"Examples":{"Python":["nlgpio16.py"],"Node.js":["nlgpio16.js"],"C++":["nlgpio16.cxx"]},"Specifications":{"Vsource":{"unit":"V","usb":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Analog Inputs":{"unit":"inputs","inputs":7},"TTL Inputs":{"unit":"TTL 3.3V inputs","inputs":16},"ADC Resolution":{"unit":"bit","bits":10}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://numato.com/16-channel-usb-gpio-module-with-analog-inputs/"],"Datasheets":["https://docs.numato.com/doc/16-channel-usb-gpio-module-with-analog-inputs/"]}}}},{"Library":"nmea_gps","Description":"UPM C++ API for a generic GPS serial device reporting NMEA data","Sensor Class":{"NMEAGPS":{"Name":"API for the NMEA GPS Module","Description":"This is the UPM Module for a generic GPS serial device reporting NMEA data. This driver was tested with a number of GPS devices that emit NMEA data via a serial interface of some sort (typically a UART). The I2C capablity was tested with a UBLOX LEA-6H based GPS shield from DFRobot. Currently, the I2C capability is only supported for UBLOX devices (or compatibles) that conform to the specifications outlined in the u-blox6 Receiver Description Protocol Specification, Chapter 4, DDC Port.","Aliases":["VK2828u7","ublox","LEA-6H"],"Categories":["gps"],"Connections":["uart","gpio"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["DFRobot","Seeed"],"Examples":{"Java":["NMEAGPS_Example.java","NMEAGPS_I2C_Example.java"],"Python":["nmea_gps.py","nmea_gps_i2c.py"],"Node.js":["nmea_gps.js","nmea_gps_i2c.js"],"C++":["nmea_gps.cxx","nmea_gps-i2c.cxx"],"C":["nmea_gps.c","nmea_gps-i2c.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors","Might need Grove base shield","Might need DFRobot breakout board"]},"Arduino 101":{"Notes":["Might need pull up resistors","Might need Grove base shield","Might need DFRobot breakout board"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-gps-p-959.html","https://www.dfrobot.com/product-481.html"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-GPS/master/res/E-1612-UB_Datasheets_Sheet.pdf"]}}}},{"Library":"nrf24l01","Description":"Nordic Semiconductor NRF24L01 Transceiver library","Sensor Class":{"NRF24L01":{"Name":"API for the Nordic Semiconductor NRF24L01 Transceiver Module","Description":"This is the UPM Module for the Nordic Semiconductor NRF24L01 Transceiver Module. This transceiver IC operates in the 2.4GHz band and has many new features! Take all the coolness of the nRF2401A and add some extra pipelines, buffers, and an auto-retransmit feature.","Aliases":["nrf24l01","SparkFun Transceiver Breakout - nRF24L01+"],"Categories":["wifi"],"Connections":["spi"],"Project Type":["prototyping","commercial"],"Manufacturers":["Nordic Semiconductor","SparkFun"],"Image":"nrf24l01.jpg","Examples":{"Java":["NRF24L01_receiver_Example.java","NRF24L01_transmitter_Example.java"],"C++":["nrf24l01-broadcast.cxx","nrf24l01-receiver.cxx","nrf24l01-transmitter.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":7},"Supply Current":{"Idle Mode Supply":{"unit":"uA","min":0.9,"max":320},"Transmit Mode Supply":{"unit":"mA","min":0.12,"max":11.3},"Recieve Mode Supply":{"unit":"mA","min":8.4,"max":12.3}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Operating Frequency":{"unit":"MHz","min":2400,"max":2525},"Data Rate":{"unit":"kbps","min":250,"max":2000}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/691"],"Datasheets":["file:///D:/Downloads/nRF24L01_Product_Specification_v2_0.pdf"]}}}},{"Library":"nrf8001","Description":"Nordic Semiconductor NRF8001 Bluetooth Low Energy library","Sensor Class":{"nrf8001":{"Name":"API for the Nordic Semiconductor NRF8001 Bluetooth Low Energy Module","Description":"This is the UPM Module for the Nordic Semiconductor NRF8001 Bluetooth Low Energy Module. These files define the NRF8001 interface for lib-nrf8001. Interaction with this device is done through the ACI routines included with the library. You can use the nRF UART app in Apple* App Store and Google* Play* on Samsung* Galaxy S*4 running Android* 4.3 to interact with a microcontroller running the 'hello world' example.","Aliases":["nrf8001","Bluefruit LE - Bluetooth Low Energy (BLE 4.0) - nRF8001 Breakout - v1.0"],"Categories":["wifi"],"Connections":["spi","gpio","analog"],"Project Type":["prototyping"],"Manufacturers":["Nordic Semiconductor","Adafruit"],"Image":"nrf8001.jpg","Examples":{"C++":["nrf8001-broadcast.cxx","nrf8001-helloworld.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.9,"max":3.6},"Supply Current":{"unit":"uA","min":2,"max":14000},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Bluetooth Version":{"unit":"version number","version":"BLE V4.0"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1697","http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF8001"],"Datasheets":["https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/introduction","http://www.nordicsemi.com/eng/nordic/download_resource/17534/16/64902106/2981"]}}}},{"Library":"nunchuck","Description":"Wii Nunchuk library","Sensor Class":{"NUNCHUCK":{"Name":"API for the Wii* Nunchuk controller","Description":"UPM module for the Wii Nunchuk controller. This module was tested with Wii Nunchuck connected to I2C via a Grove Wii Nunchuck adapter. See http://wiibrew.org/wiki/Wiimote/Extension_Controllers and http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck for more details on the controller and its protocol. A warning for the Grove Wii Nunchuk adapter: it has 2 traces on one side, and 3 traces on the other. Do not match these up with the Nunchuk connector's traces. The connector's 'groove' should be on the same side as the Grove interface socket on the adapter.","Aliases":["nunchuck","Wii nunchuck","Grove - Nunchuck"],"Categories":["accelerometer"],"Connections":["i2c"],"Project Type":["prototyping"],"Manufacturers":["generic"],"Kits":["robok"],"Image":"nunchuck.jpg","Examples":{"Java":["NUNCHUCK_Example.java"],"Python":["nunchuck.py"],"Node.js":["nunchuck.js"],"C++":["nunchuck.cxx"],"C":["nunchuck.c"]},"Specifications":{"Vsource":{"unit":"V","typ":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Nunchuck-p-1474.html","http://wiibrew.org/wiki/Wiimote/Extension_Controllers","http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck"],"Datasheets":["http://wiki.seeed.cc/Grove-NunChuck/"]}}}},{"Library":"o2","Description":"O2 Oxygen Gas Sensor Library","Sensor Class":{"O2":{"Name":"Oxygen (O2) Concentration Sensor","Description":"The Grove O2 Oxygen Gas sensor measures the oxygen concentration in the air.","Aliases":["o2"],"Categories":["gas","oxygen"],"Connections":["analog"],"Project Type":["environmental","prototyping"],"Manufacturers":["seeed"],"Kits":[],"Image":"o2.jpg","Examples":{"Java":["O2_Example.java"],"Python":["o2.py"],"Node.js":["o2.js"],"C++":["o2.cxx"],"C":["o2.c"]},"Specifications":{"Measurement Range":{"unit":"% Vol","low":0,"high":25},"Sensitivity":{"unit":"mA (in air)","low":0.1,"high":0.3},"Operating Temperature":{"unit":"degC","low":-20,"high":50}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-gas-sensoro2-p-1541.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Gas_Sensor-O2/"],"Schematics":["https://github.com/SeeedDocument/Grove_Gas_Sensor_O2/raw/master/resources/Schematics_O2.zip"]}}}},{"Library":"otp538u","Description":"Oriental System Technology OTP538U IR Temperature Sensor library","Sensor Class":{"OTP538U":{"Name":"API for the Oriental System Technology OTP538U IR Temperature Sensor","Description":"This is the UPM Module for the Oriental System Technology OTP538U IR Temperature Sensor. This Grove-Infrared temperature sensor is a non-contact temperature measure model.The sensor is composed of 116 elements of thermocouple in series on a floating micro-membrane having an active diameter of 545μm and with blacken surface to absorb the incident thermal infrared radiation, which induces a voltage response at output terminals.","Aliases":["otp538u","Grove - Infrared Temperature Sensor"],"Categories":["light","temperature"],"Connections":["analog"],"Project Type":["prototyping","commercial"],"Manufacturers":["Oriental System Technology","Seeed"],"Kits":["hak"],"Image":"otp538u.jpg","Examples":{"Java":["OTP538U_Example.java"],"Python":["otp538u.py"],"Node.js":["otp538u.js"],"C++":["otp538u.cxx"],"C":["otp538u.c"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5},"Supply Current":{"unit":"uA","min":160,"max":200},"Operating Temperature":{"unit":"°C","min":-10,"max":80},"Effective Temperature Range":{"unit":"°C","min":-10,"max":100},"Accuracy":{"unit":"°C","min":-2,"max":2},"Holding Time":{"unit":"s","time":2}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield","Will NOT work on 3.3V"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Infrared-Temperature-Sensor-p-1058.html","http://wiki.seeed.cc/Grove-Infrared_Temperature_Sensor/"],"Datasheets":["http://wiki.seeedstudio.com/images/f/f2/OTP-538Udatasheet.zip"]}}}},{"Library":"ozw","Description":"UPM OpenZWave library","Sensor Class":{"OZW":{"Name":"API for the OpenZWave library","Description":"This module implements a singleton wrapper around the OpenZWave library. OpenZWave must be compiled and installed on your machine in order to use this library. This module was developed with OpenZWave 1.3/1.4, and an Aeon Z-Stick Gen5 configured as a Primary Controller. It provides the ability to query and set various values that can be used to control ZWave devices. It does not concern itself with configuration of devices. It is assumed that you have already setup your ZWave network using a tool like the OpenZWave control panel, and have already configured your devices as appropriate. To avoid exposing some of the internals of OpenZWave, devices (nodes) and their values, are accessed via a nodeId and a value index number. The ozwdump example will run dumpNodes() which will list the currently connected devices and the values that are available to them, along with an index number for that value. It is through these values (nodeId and index) that you can query and set device values at a low level. In addition to querying values from a device (such as state (on/off), or temperature, etc), methods are provided to allow you to control these devices to the extent they allow, for example, using a ZWave connected switch to turn on a lamp. Access to this class by OZW drivers is handled by the ozwInterface class. It is that class that drivers use for access to ozw, and therefore the Z-Wave network. This class is not intended to be used directly by end users. When writing an OZW driver, the ozwInterface class should be used (inherited) by your driver, and your driver should wrap and expose only those methods needed by the user. Take a look at some of the drivers (like aeotecss6) to see how this works.","Aliases":["ozw"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["commercial"],"Manufacturers":["Aeon Labs"],"Examples":{"Java":["AeotecDSB09104_Example.java","AeotecDW2E_Example.java","AeotecSDG2_Example.java","AeotecSS6_Example.java"],"Python":["aeotecdsb09104.py","aeotecdw2e.py","aeotecsdg2.py","aeotecss6.py"],"Node.js":["aeotecdsb09104.js","aeotecdw2e.js","aeotecsdg2.js","aeotecss6.js"],"C++":["ozw-aeotecdsb09104.cxx","ozw-aeotecdw2e.cxx","ozw-aeotecsdg2.cxx","ozw-aeotecss6.cxx","ozw-ozwdump.cxx","ozw-tzemt400.cxx"]},"Urls":{"Product Pages":["http://www.openzwave.com/"]}},"dsb09104":{"Name":"API for Aeon Labs Aeotec Home Energy Meter Gen 1","Description":"This is the UPM Module for the Aeon Labs Aeotec Home Energy Meter Gen 1. This module allows for monitoring certain elements of an Aeotec Home Energy Meter Gen 1.","Aliases":["dsb09104"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["commercial"],"Manufacturers":["Aeon Labs"],"Examples":{"Java":["AeotecDSB09104_Example.java"],"Python":["aeotecdsb09104.py"],"Node.js":["aeotecdsb09104.js"],"C++":["ozw-aeotecdsb09104.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":220,"max":400},"Supply Current":{"unit":"A","max":200}},"Urls":{"Product Pages":["https://aeotec.freshdesk.com/support/solutions/articles/6000161943-home-energy-meter-gen5-user-guide-"]}},"DSB29":{"Name":"API for the Aeon Labs Aeotec Door/Window Sensor 2nd Edition","Description":"This is the UPM Module for the Aeon Labs Aeotec Door/Window Sensor 2nd Edition. This module allows for monitoring certain elements of an Aeotec Door/Window Sensor 2nd Edition Z-Wave device. NOTE: This is a battery powered device that spends most of it's time sleeping (sort of like a cat). This means that on initial startup, there is not enough information known about the device to reliably query anything. Use isDeviceAvailable() to test whether the device has responded to OZW's probe request before requesting information for it.","Aliases":["dsb29"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["commercial"],"Manufacturers":["Aeon Labs"],"Examples":{"Java":["AeotecDW2E_Example.java"],"Python":["aeotecdw2e.py"],"Node.js":["aeotecdw2e.js"],"C++":["ozw-aeotecdw2e.cxx"]},"Urls":{"Product Pages":["https://aeotec.com/z-wave-door-window-sensor"]}},"dg2":{"Name":"API for Aeon Labs Aeotec Smart Dimmer Gen 2","Description":"This is the UPM Module for the Aeon Labs Aeotec Smart Dimmer Gen 2. This module allows for controlling and monitoring certain elements of an Aeotec Smart Dimmer Gen 2.","Aliases":["dg2"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["commercial"],"Manufacturers":["Aeon Labs"],"Examples":{"Java":["AeotecSDG2_Example.java"],"Python":["aeotecsdg2.py"],"Node.js":["aeotecsdg2.js"],"C++":["ozw-aeotecsdg2.cxx"]},"Urls":{"Product Pages":["https://aeotec.freshdesk.com/support/solutions/articles/6000053613-micro-dimmer-g2-and-micro-smart-dimmer-g2-user-guide-"]}},"ss6":{"Name":"API for the Aeon Labs Aeotec Smart Switch 6","Description":"This is the UPM Module for the Aeon Labs Aeotec Smart Switch 6. This module allows for controlling and monitoring certain elements of an Aeotec Smart Switch 6.","Aliases":["ss6"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["commercial"],"Manufacturers":["Aeon Labs"],"Examples":{"Java":["AeotecSS6_Example.java"],"Python":["aeotecss6.py"],"Node.js":["aeotecss6.js"],"C++":["ozw-aeotecss6.cxx"]},"Urls":{"Product Pages":["https://aeotec.com/z-wave-plug-in-switch"]}}}},{"Library":"p9813","Description":"Shiji Lighting P9813 Chainable RGB LEDs driver library","Sensor Class":{"P9813":{"Name":"API for controlling Shiji Lighting P9813/Chainable RGB LEDs","Description":"This is the UPM Module for the Shiji Lighting P9813/Chainable RGB LEDs. This LED controller provides individually controllable LEDs through a two pin protocol","Aliases":["p9813","APA102 5050 RGB LED w/ Integrated Driver Chip"],"Categories":["LED"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Adafruit","Shiji Lighting"],"Image":"p9813.jpg","Examples":{"Java":["P9813_Example.java"],"Python":["p9813.py"],"Node.js":["p9813.js"],"C++":["p9813.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":5,"max":5.5},"Supply Current":{"unit":"mA","min":22.5,"max":26.5},"Operating Temperature":{"unit":"°C","min":-40,"max":70},"View Angle":{"unit":"°","degrees":160}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors","Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need pull up resistors","Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/2343"],"Datasheets":["https://cdn-shop.adafruit.com/product-files/2343/APA102C.pdf"]}}}},{"Library":"pca9685","Description":"NXP/Adafruit PCA9685 PWM Controller library","Sensor Class":{"PCA9685":{"Name":"API for the NXP/Adafruit PCA9685 16-channel, 12-bit PWM Controller","Description":"This is the UPM Module for the NXP/Adafruit PCA9685 16-channel, 12-bit PWM Controller. You want to make a cool robot, maybe a hexapod walker, or maybe just a piece of art with a lot of moving parts. Or maybe you want to drive a lot of LEDs with precise PWM output. Then you realize that your microcontroller has a limited number of PWM outputs! What now? You could give up OR you could just get this handy PWM and Servo driver breakout.","Aliases":["PCA9685","Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685"],"Categories":["led","motor"],"Connections":["i2c"],"Project Type":["prototyping","robotics"],"Manufacturers":["NXP Semiconductors","Adafruit"],"Image":"pca9685.jpg","Examples":{"Node.js":["pca9685.js"],"C++":["pca9685.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.3,"max":5.5},"Supply Current":{"unit":"mA","min":6,"max":10},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"PWM Channels":{"unit":"Channels","channels":16}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/815","https://learn.adafruit.com/16-channel-pwm-servo-driver/overview"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/PCA9685.pdf"]}}}},{"Library":"pn532","Description":"Adafruit PN532 NFC/RFID reader/writer Library","Sensor Class":{"PN532":{"Name":"API for the PN532 based Adafruit NFC/RFID reader/writer","Description":"This is the UPM Module for the PN532 based Adafruit NFC/RFID reader/writer. The PN532 is the most popular NFC chip, and is what is embedded in pretty much every phone or device that does NFC. It can pretty much do it all, such as read and write to tags and cards, communicate with phones (say for payment processing), and 'act' like a NFC tag. If you want to do any sort of embedded NFC work, this is the chip you'll want to use!","Aliases":["pn532","PN532 NFC/RFID controller breakout board - v1.6"],"Categories":["rfid"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Philips","Adafruit"],"Image":"pn532.jpg","Examples":{"Python":["pn532-writeurl.py","pn532.py"],"Node.js":["pn532-writeurl.js","pn532.js"],"C++":["pn532-writeurl.cxx","pn532.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.6,"max":3.6},"Supply Current":{"unit":"mA","min":6,"max":140},"Operating Temperature":{"unit":"°C","min":-30,"max":85}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{},"Arduino 101":{}},"Urls":{"Product Pages":["https://www.adafruit.com/product/364"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/pn532ds.pdf"]}}}},{"Library":"ppd42ns","Description":"Seeed/Shinyei PPD42NS Dust Sensor library","Sensor Class":{"PPD42NS":{"Name":"API for the Seeed/Shinyei PPD42NS Dust Sensor","Description":"This is the UPM Module for the Seeed/Shinyei PPD42NS Dust Sensor. This Dust Sensor gives a good indication of the air quality in an environment by measuring the dust concentration. The Particulate Matter level (PM level) in the air is measured by counting the Low Pulse Occupancy time (LPO time) in given time unit. LPO time is proportional to PM concentration. This sensor can provide reliable data for air purifier systems; it is responsive to PM of diameter 1μm.","Aliases":["ppd42ns","Grove - Dust Sensor"],"Categories":["other"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["Shinyei","Seeed"],"Kits":["eak"],"Image":"ppd42ns.jpg","Examples":{"Java":["PPD42NS_Example.java"],"Python":["ppd42ns.py"],"Node.js":["ppd42ns.js"],"C++":["ppd42ns.cxx"],"C":["ppd42ns.c"]},"Specifications":{"Vsource":{"unit":"V","min":4.75,"max":5.75},"Supply Current":{"unit":"mA","typ":90},"Operating Temperature":{"unit":"°C","min":0,"max":45},"Effective Range":{"Pieces Per Liter":{"unit":"pcs/liter","min":0,"max":28000},"Pieces Per 0.01 Cubic Foot":{"unit":"pcs/0.01cf","min":0,"max":8000}},"Particle Diameter":{"unit":"um","size":">1"}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Dust-Sensor-p-1050.html","http://wiki.seeed.cc/Grove-Dust_Sensor/"],"Datasheets":["https://github.com/SeeedDocument/Grove_Dust_Sensor/raw/master/resource/Grove_-_Dust_sensor.pdf"]}}}},{"Library":"pulsensor","Description":"Pulse Sensor library","Sensor Class":{"Pulsensor":{"Name":"C++ API for the Adafruit 3-Wire Pulse Sensor","Description":"This is the UPM Module for the Adafruit 3-Wire Pulse Sensor. It can be used by students, artists, athletes, makers, and game & mobile developers who want to easily incorporate live heart-rate data into their projects.","Aliases":["pulsensor","Pulse Sensor Amped"],"Categories":["other"],"Connections":["analog"],"Project Type":["medical","prototyping"],"Manufacturers":["Adafruit"],"Image":"pulsensor.jpg","Examples":{"Java":["Pulsensor_Example.java"],"C++":["pulsensor.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{},"Arduino 101":{}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1093","https://media.digikey.com/pdf/Data%20Sheets/Pulse%20PDFs/PulseSensorAmpedGettingStartedGuide.pdf"]}}}},{"Library":"relaylib","Description":"Grove Relay library","Sensor Class":{"Relay":{"Name":"API for the Grove Relay","Description":"This is the UPM Module for the Grove Relay. UPM module for the relay switch. The relay is a digital normally-open switch that uses low voltage or current to control a higher voltage and/or higher current. When closed, the indicator LED (if present) lights up and current is allowed to flow.","Aliases":["relay","Grove - Relay"],"Categories":["relay"],"Connections":["gpio"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["Seeed"],"Kits":["gsk","eak","hak"],"Image":"relay.jpg","Examples":{"Java":["Relay_Example.java"],"Python":["relay.py"],"Node.js":["relay.js"],"C++":["relay.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","min":60,"max":100},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Relay Life":{"unit":"Cycles","typ":100000},"Max AC Switching Voltage":{"unit":"V","max":250},"Max DC Switching Voltage":{"unit":"V","max":30},"Max Switching Current":{"unit":"A","max":5}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Relay-p-769.html","http://wiki.seeed.cc/Grove-Relay/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Relay/master/res/Relay_Datasheet.pdf"]}}}},{"Library":"rf22","Description":"SparkFun/HopeRF RF22 Wireless Transceiver library","Sensor Class":{"RF22":{"Name":"API for the SparkFun/HopeRF RF22 Transceiver Module","Description":"This is the UPM Module for the SparkFun/HopeRF RF22 Transceiver Module. This base class provides basic functions for sending and receiving unaddressable, unreliable datagrams of arbitrary length to 255 octets per packet. Subclasses may use this class to implement reliable, addressed datagrams and streams, mesh routers, repeaters, translators etc. On transmission, the TO and FROM addresses default to 0x00, unless changed by a subclass. On reception the TO addressed is checked against the node address (defaults to 0x00) or the broadcast address (which is 0xff). The ID and FLAGS are set to 0, and not checked by this class. This permits use of the this base RF22 class as an unaddressable, unreliable datagram service. Subclasses are expected to change this behavior to add node address, ids, retransmission etc. Naturally, for any 2 radios to communicate that must be configured to use the same frequency and modulation scheme.","Aliases":["rf22","RFM22B-S2 SMD Wireless Transceiver - 915MHz"],"Categories":["wifi"],"Connections":["spi"],"Project Type":["prototyping","commercial"],"Manufacturers":["SparkFun","HopeRF"],"Image":"rf22.jpg","Examples":{"C++":["rf22-client.cxx","rf22-server.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.8,"max":3.6},"Supply Current":{"Standby Mode":{"unit":"nA","min":450,"max":800},"Standard Usage":{"unit":"mA","min":8.5,"max":85}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Data Rate":{"unit":"kbps","min":0.123,"max":256}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/12030"],"Datasheets":["https://www.sparkfun.com/datasheets/Wireless/General/RFM22B.pdf"]}}}},{"Library":"rfr359f","Description":"Seeed RFR359 Distance Interrupter library","Sensor Class":{"RFR359F":{"Name":"API for the RFR359F-based Grove Distance Interrupter","Description":"This is the UPM Module for the RFR359F-based Grove Distance Interrupter. The sensitivity can be adjusted with the potentiometer on the sensor module. It has a range of approximately 4 inches and a quick response time.","Aliases":["rfr359f","Grove - IR Distance Interrupter"],"Categories":["light"],"Connections":["gpio"],"Project Type":["prototyping","industrial"],"Manufacturers":["Seeed"],"Kits":["robot","tsk"],"Image":"rfr359f.jpg","Examples":{"Java":["RFR359F_Example.java"],"Python":["rfr359f.py"],"Node.js":["rfr359f.js"],"C++":["rfr359f.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","min":1,"max":20},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Effective Distance":{"unit":"cm","min":7.5,"max":40}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-IR-Distance-Interrupter-p-1278.html","http://wiki.seeed.cc/Grove-IR_Distance_Interrupter_v1.2/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-IR_Distance_Interrupter_v1.2/master/res/Reflective_photosensor.pdf","https://raw.githubusercontent.com/SeeedDocument/Grove-IR_Distance_Interrupter_v1.2/master/res/LM393.pdf"]}}}},{"Library":"rgbringcoder","Description":"SparkFun RGB RingCoder Library","Sensor Class":{"RGBRingCoder":{"Name":"API for the SparkFun RGB RingCoder","Description":"This is the UPM Module for the SparkFun RGB RingCode. RGB RingCoder is a breakout board, a circular LED containing 16 LEDs arranged in a ring, and a rotary encoder. The encoder contains an RGB LED as well as a push button function. NOTE: This SparkFun product is retired, and no longer for sale.","Aliases":["rgbringcoder","SparkFun LED RingCoder Breakout - RGB"],"Categories":["led"],"Connections":["pwm","gpio"],"Project Type":["prototyping"],"Manufacturers":["SparkFun"],"Image":"rgbringcoder.jpg","Examples":{"Python":["rgbringcoder.py"],"Node.js":["rgbringcoder.js"],"C++":["rgbringcoder.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/retired/11040"],"Datasheets":["https://github.com/sparkfun/LED_RingCoder_Breakout"]}}}},{"Library":"rhusb","Description":"Omega RH-USB Temperature and Humidity Sensor Library","Sensor Class":{"RHUSB":{"Name":"API for the Omega RH-USB Temperature and Humidity Sensor","Description":"This is the UPM Module for the Omega RH-USB Temperature and Humidity Sensor. It connects via an integrated USB cable, and is accessed via a serial port. It is suitable for wall or duct mounting.","Aliases":["rhusb","Humidity & Temperature Sensor with USB Output"],"Categories":["humidity","temperature"],"Connections":["uart"],"Project Type":["industrial","commercial"],"Manufacturers":["Omega"],"Examples":{"Python":["rhusb.py"],"Node.js":["rhusb.js"],"C++":["rhusb.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":5,"max":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Temperature":{"Effective Range":{"unit":"°C","min":-17,"max":49},"Accuracy":{"unit":"°C","min":-1,"max":1}},"Relative Humidity":{"Effective Range":{"unit":"RH","min":"2%","max":"98%"},"Accuracy":{"unit":"RH","min":"-3%","max":"3%"}}},"Urls":{"Product Pages":["http://www.omega.com/pptst/RH-USB.html"],"Datasheets":["http://www.omega.com/das/pdf/RH-USB.pdf"]}}}},{"Library":"rn2903","Description":"Microchip RN2903 LoRa radio Library","Sensor Class":{"RN2903":{"Name":"API for the Microchip RN2903 LoRa radio","Description":"This is the UPM Module for the Microchip RN2903 LoRa radio. The RN2903 is a fully-certified 915 MHz module based on wireless LoRa technology. The RN2903 utilizes a unique spread spectrum modulation within the Sub-GHz band to enable long range, low power, and high network capacity.","Aliases":["rn2903"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["prototyping","commercial"],"Manufacturers":["Microchip"],"Examples":{"Java":["RN2903_Example.java","RN2903_P2P_RX_Example.java","RN2903_P2P_TX_Example.java"],"Python":["rn2903-p2p-rx.py","rn2903-p2p-tx.py","rn2903.py"],"Node.js":["rn2903-p2p-rx.js","rn2903-p2p-tx.js","rn2903.js"],"C++":["rn2903-p2p-rx.cxx","rn2903-p2p-tx.cxx","rn2903.cxx"],"C":["rn2903-p2p-rx.c","rn2903-p2p-tx.c","rn2903.c"]},"Specifications":{"Vsource":{"unit":"V","min":2.1,"max":3.6},"Supply Current":{"unit":"mA","min":185,"max":200},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Frequency Band":{"unit":"MHz","min":902,"max":928},"Effective Range":{"unit":"km","min":5,"max":15}},"Urls":{"Product Pages":["http://www.microchip.com/wwwproducts/en/RN2903"],"Datasheets":["http://ww1.microchip.com/downloads/en/DeviceDoc/50002390C.pdf"]}}}},{"Library":"rotary","Description":"Seeed Rotary Angle Sensor library","Sensor Class":{"Rotary":{"Name":"API for the Seeed Rotary Angle Sensor","Description":"This is the UPM Module for the Seeed Rotary Angle Sensor. Provides a set of functions to read the absolute pin value, degrees or radians, and another set to do the same relative to the center of the knob's range.","Aliases":["rotary","Grove - Rotary Angle Sensor"],"Categories":["ainput"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["gsk"],"Image":"rotary.jpg","Examples":{"Java":["Rotary_Example.java"],"Python":["rotary.py"],"Node.js":["rotary.js"],"C++":["rotary.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.75,"max":5.25},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Rotary Angle":{"unit":"°","min":0,"max":300}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Rotary-Angle-Sensor-p-770.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Rotary_Angle_Sensor/"]}}}},{"Library":"rotaryencoder","Description":"Grove Rotary Encoder library","Sensor Class":{"RotaryEncoder":{"Name":"API for the Grove Rotary Encoder","Description":"This is the UPM Module for the Grove Rotary Encoder. This rotary encoder encodes a rotation signal into electronic pulses that can be used to measure rotation and direction. It is useful in cases where a rotary knob is required, but using a potentiometer is not desirable. A rotary encoder can turn a full 360 degrees without a stop and does not place a resistive load on the circuit, as is the case with a potentiometer.","Aliases":["rotaryencoder","Rotary Encoder","Grove - Encoder"],"Categories":["other"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed"],"Kits":["hak"],"Image":"rotaryencoder.jpg","Examples":{"Java":["RotaryEncoder_Example.java"],"Python":["rotaryencoder.py"],"Node.js":["rotaryencoder.js"],"C++":["rotaryencoder.cxx"],"C":["rotaryencoder.c"]},"Specifications":{"Vsource":{"unit":"V","min":4.5,"max":5.5},"Supply Current":{"unit":"mA","min":10,"max":30},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Rotary Angle":{"unit":"°","min":0,"max":360}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Encoder-p-1352.html"],"Datasheets":["http://wiki.seeed.cc/Grove-Encoder/"]}}}},{"Library":"rpr220","Description":"ROHM Semiconductor RPR220 IR Reflective Sensor library","Sensor Class":{"RPR220":{"Name":"API for the ROHM Semiconductor RPR220-based Grove IR Reflective Sensor","Description":"This is the UPM Module for the ROHM Semiconductor RPR220-based Grove IR Reflective Sensor. The reflectivity of infrared light varies with the color and distance of the reflecting surface. According to this principle, Grove - Infrared Reflective Sensor utilizes a RPR220 reflective photosensor module to detect color and distance. When a light-colored object approaches,the signal intensity received by infrared reflective sensor increases and the indicator LED on board turns red. When a dark-colored object approaches, the intensity decreases and the LED turns off.","Aliases":["rpr220","Grove - Infrared Reflective Sensor"],"Categories":["light"],"Connections":["gpio"],"Project Type":["mprototyping","commercial"],"Manufacturers":["ROHM Semiconductor","Seeed"],"Kits":["tsk","hak"],"Image":"rpr220.jpg","Examples":{"Java":["RPR220_Example.java","RPR220_intr_Example.java"],"Python":["rpr220.py"],"Node.js":["rpr220.js"],"C++":["rpr220-intr.cxx","rpr220.cxx"],"C":["rpr220-intr.c","rpr220.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","min":14.69,"max":15.35},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Effective Distance":{"unit":"mm","min":4,"max":15},"Response Time":{"unit":"us","typ":10}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Infrared-Reflective-Sensor-p-1230.html","http://wiki.seeed.cc/Grove-Infrared_Reflective_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Infrared_Reflective_Sensor/master/res/RPR220_datasheet.pdf"]}}}},{"Library":"rsc","Description":"Honeywell TruStability Pressure and Temperature Sensor Library","Sensor Class":{"RSC":{"Name":"SPI based Board Mount Pressure and Temperature","Description":"The RSC Series is a piezoresistive silicon pressure sensor offering a digital output for reading pressure over the specified full scale pressure span and temperature range. It is calibrated and temperature compensated for sensor offset, sensitivity, temperature effects, and non-linearity using a 24-bit analog-todigital converter with integrated EEPROM. Pressure data may be acquired at rates between 20 and 2000 samples per second over an SPI interface. It is intended for use with non-corrosive, non-ionic gases, such as air and other dry gases, designed and and RoHS compliant. Most of the functionality available on this chip has been implemented. The driver calculates the compensated pressure and temperature values based on the information provided in the datasheet. The user must not mess around with the coefficient and adc init value readings from the EEPROM as these are used to calculate the compensated pressure and temperature values. In order to get the sensor to work properly on an Edison, you would need to turn off the Edison SPI power management, this can be done with the command: echo on > /sys/devices/pci0000\\:00/0000\\:00\\:07.1/power/control. You might have to use external pull up resistors on all the lines. More info about this has been provided in the datasheet with a table and a diagram.","Aliases":["rsc"],"Categories":["pressure","temperature"],"Connections":["gpio","spi"],"Project Type":["medical","industrial","extended"],"Manufacturers":["Honeywell"],"Kits":[],"Examples":{"Python":["rsc.py"],"Node.js":["rsc.js"],"C++":["rsc.cxx"],"C":["rsc.c"]},"Specifications":{"Vsupply":{"unit":"Vdc","min":2.7,"high":6},"Supply Current(3.3 Vdc)":{"unit":"mA","standby":1.3,"active":1.7},"Supply Current(5.0 Vdc)":{"unit":"mA","standby":2.1,"active":2.6},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Start up Time":{"unit":"ms","time":0.3},"Compensated Temperature Range (Medical)":{"unit":"°C","min":0,"max":50},"Compensated Temperature Range (Industrial)":{"unit":"°C","min":-20,"max":85},"Compensated Temperature Range (Extended)":{"unit":"°C","min":-40,"max":85},"Data Rate":{"unit":"samples per second","min":20,"max":2000},"Pressure Range":{"Absolute":[{"unit":"bar","min":0,"max":10},{"unit":"kPa","min":0,"max":600},{"unit":"MPa","min":0,"max":1},{"unit":"psi","min":0,"max":150}],"Differential":[{"unit":"mbar","min":1.6,"max":600},{"unit":"bar","min":1,"max":10},{"unit":"Pa","min":160,"max":600},{"unit":"kPa","min":1,"max":600},{"unit":"MPa","max":1},{"unit":"inH2O","min":0.5,"max":30},{"unit":"psi","min":1,"max":150}],"Gage":[{"unit":"mbar","min":0,"max":600},{"unit":"bar","min":0,"max":10},{"unit":"Pa","min":0,"max":600},{"unit":"kPa","min":0,"max":600},{"unit":"MPa","min":0,"max":1},{"unit":"inH2O","min":0,"max":30},{"unit":"psi","min":0,"max":150}]}},"// Platforms":{"comment":"Catch-all for listing platforms used to validate this sensor class.","required":false},"Platforms":{"Intel Joule Module":{"Notes":["Might Require pull-up resistors or use a shield instead"]},"Intel Edison":{"Notes":["Turn of SPI power management to use the sensor. Turn it off using the command : echo on > /sys/devices/pci0000\\:00/0000\\:00\\:07.1/power/control"]},"Arduino 101":{"Notes":["Might need pull up resistors or a shield"]}},"Urls":{"Product Pages":["https://sensing.honeywell.com/sensors/amplified-board-mount-pressure-sensors/trustability-rsc-series"],"Datasheets":["https://sensing.honeywell.com/honeywell-sensing-trustability-rsc-series-data-sheet-32321348-b-en.pdf"]}}}},{"Library":"scam","Description":"Seeed Serial Camera library","Sensor Class":{"SCAM":{"Name":"API for the Seeed Serial Camera","Description":"This is the UPM Module for the Seeed Serial Camera. There is no protocol documentation currently available, so this module was developed based completely on the Seeed Studio* Arduino* sketch.","Aliases":["scam","Grove - Serial Camera Kit"],"Categories":["other"],"Connections":["uard"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Image":"scam.jpg","Examples":{"Java":["SCAM_Example.java"],"Python":["scam.py"],"Node.js":["scam.js"],"C++":["scam.cxx"]},"Specifications":{"Vsource":{"unit":"V","typ":5},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"pixels","res":"160x120"},"UART Baud Rate":{"unit":"Baud","min":9600,"max":115200}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["http://wiki.seeed.cc/Grove-Serial_Camera_Kit/"]}}}},{"// Library":{"comment":"Library name. Usually synonymous with the chip ID (e.g. fooinc0378). However, in the case where this library implements multiple sensor classes, choose a name which describes the full functionality (e.g. fooincled).","type":"string","required":true},"Library":"sensortemplate","// Description":{"comment":"Library description. This library provides support for the fooincled family of sensors.","type":"string","required":true},"Description":"This is a sensor library template used for new sensors","// Sensor Class":{"comment":"Sensor/actuator class object which corresponds to the sensor/actuator C++ class (case sensitive).","type":"object","required":true},"Sensor Class":{"// SensorTemplate":{"comment":"Template Item","type":"object","required":true},"SensorTemplate":{"// Name":{"comment":"Sensor display name as indicated by the datasheet or manufacturer","type":"string","required":true},"Name":"Template Sensor","// Description":{"comment":"In-depth description of the C++ sensor/actuator class. Include any necessary information on what is required for this implementation to work.","type":"string","required":true},"Description":"This sensor template can be used to generate code stubs for new sensor library development","// Aliases":{"comment":"Known vendor/manufacturer part numbers or names for the sensor/actuator/s supported by this class. Part numbers/IDs are preferred when available.","type":"array","required":false},"Aliases":["template"],"// Categories":{"comment":"One or more categories that his sensor class fits in.","type":"array","required":true},"Categories":["other"],"// Connections":{"comment":"One or more connection types for this sensor class.","type":"array","required":true},"Connections":["i2c"],"// Project Type":{"comment":"One or more application fields or project types sensor is suited for (e.g. prototyping, industrial)","type":"array","required":true},"Project Type":["prototyping"],"// Manufacturers":{"comment":"One or more manufacturers for the hardware supported by this class.","type":"array","required":true},"Manufacturers":["generic"],"// Kits":{"comment":"One or more retail kits that provide this sensor","type":"array","required":false},"Kits":[],"// Image":{"comment":"A single small (0-20k) html-viewable image file (located in docs/images). Please do not use existing, copyrighted images with your sensors.","type":"string","required":false},"Image":"sensortemplate.png","// Examples":{"comment":"Functional examples showing the main use cases for this sensor class. At least one is required.","type":"object","required":true},"Examples":{"// Java":{"comment":"One or more Java examples.","type":"array","required":false},"Java":["SensorTemplate_Example_Example_Example.java"],"// Python":{"comment":"One or more Python examples.","type":"array","required":false},"Python":["sensortemplate.py"],"// Node.js":{"comment":"One or more Node.js examples.","type":"array","required":false},"Node.js":["sensortemplate.js"],"// C++":{"comment":"One or more C++ examples.","type":"array","required":true},"C++":["sensortemplate.cxx"],"// C":{"comment":"One or more C examples.","type":"array","required":false},"C":null},"// Specifications":{"comment":"Catch-all for HW specifications.","type":"object","required":false},"Specifications":{"// Vdd":{"comment":"Example specification. Provides unit value and range.","type":"object","required":false},"Vdd":{"// unit":{"comment":"Example specification. Provides unit value and range.","type":"string","required":false},"unit":"v","low":1.7,"high":3.6},"// Ioff":{"comment":"Example specification. Provides unit value and range.","type":"object","required":false},"Ioff":{"unit":"mA","typical":0},"// Iavg":{"comment":"Example specification. Provides unit value and range.","type":"object","required":false},"Iavg":{"unit":"mA","low":1,"high":2},"// Measured Range":{"comment":"Example specification. Provides unit value and range.","type":"object","required":false},"Measured Range":{"unit":"raw","low":0,"high":1023},"// Other Specs":{"comment":"Example specification. Provides unit value and range.","type":"object","required":false},"Other Specs":{}},"// Platforms":{"comment":"Catch-all for listing platforms used to validate this sensor class.","type":"object","required":false},"Platforms":{"// Intel Joule Module":{"comment":"Example platform.","type":"object","required":false},"Intel Joule Module":{"// Notes":{"comment":"JSON Object or Array which documents this platform.","type":"array","required":false},"Notes":["Requires pull-up resistors with carrier board"],"// Images":{"comment":"JSON Object or Array which documents this platform.","type":"array","required":false},"Images":[""]}},"// Urls":{"comment":"Collection of external URLs which provide additional documentation for this sensor class.","type":"object","required":true},"Urls":{"// Product Pages":{"comment":"Provide at least one URL for a product web-site where users can get additional information on this sensor.","type":"array","required":true},"Product Pages":["https://software.intel.com/en-us/iot/hardware/sensors/short-title-case-description-from-datasheet-manditory"],"// Datasheets":{"comment":"Array of product datasheets","type":"array","required":false},"Datasheets":[],"// Schematics":{"comment":"Array of product schematic pages.","type":"array","required":false},"Schematics":[]}}}},{"Library":"servo","Description":"Servo Library","Sensor Class":{"ES08A":{"Name":"API for the EMAX/Seeed ES08A Servo","Description":"This is the UPM Module for the EMAX/Seeed ES08A Servo. Like other servos, the ES08A servo has a shaft that can be controlled by setting the desired angle. There are also routines for setting and getting the minimum and maximum pulse width as well as the maximum period.","Aliases":["es08a","EMAX 9g ES08A High Sensitive Mini Servo"],"Categories":["servos"],"Connections":["pwm"],"Project Type":["prototyping","commercial"],"Manufacturers":["EMAX"],"Kits":["gsk"],"Image":"es08a.jpg","Examples":{"Java":["ES08A_Example.java"],"Python":["es08a.py"],"Node.js":["es08a.js"],"C++":["servo-es08a.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.8,"max":6},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Operating Speed":{"unit":"Sec/60°","min":0.1,"max":0.12}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{},"Arduino 101":{}},"Urls":{"Product Pages":["https://www.seeedstudio.com/EMAX-9g-ES08A-High-Sensitive-Mini-Servo-p-760.html","https://www.emaxmodel.com/es08a-ii.html#product_tabs_description_tabbed"]}},"ES9257":{"Name":"API for the EMAX ES9257 Servo","Description":"This is the UPM Module for the EMAX ES9257 Servo. The ES9257 servo is a fast, heavy duty servo that is popular for moving the control surfaces on RC models.","Aliases":["es9257","EMAX ES9257 2.5kg& .05 sec Micro Digital 3D Tail Servo"],"Categories":["servos"],"Connections":["pwm"],"Project Type":["prototyping","commercial"],"Manufacturers":["EMAX"],"Kits":["gsk"],"Image":"es9257.jpg","Examples":{"Python":["es08a.py"],"Node.js":["es08a.js"],"C++":["servo-es08a.cxx"]},"Specifications":{"Vsource":{"unit":"V","typ":4.8},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Operating Speed":{"unit":"Sec/60°","typ":0.08}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{},"Arduino 101":{}},"Urls":{"Product Pages":["https://www.seeedstudio.com/EMAX-ES9257-2.5kg%26amp%3B-.05-sec-Micro-Digital-3D-Tail-Servo-p-762.html"]}},"servo":{"Name":"Servo library","Description":"This is the UPM Module for the Servo library. The base Servo class provides routines for setting the angle of the shaft as well as setting and getting the minimum and maximum pulse width and the maximum period.","Aliases":["servo"],"Categories":["servos"],"Connections":["pwm"],"Project Type":["prototyping","commercial"],"Manufacturers":["EMAX"],"Image":"es08a.jpg","Examples":{"Java":["ES08A_Example.java"],"Python":["es08a.py","es08a.py"],"Node.js":["es08a.js","es08a.js"],"C++":["servo-es08a.cxx","servo-es08a.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.8,"max":6},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Operating Speed":{"unit":"Sec/60°","min":0.08,"max":0.12}},"Platforms":{"Intel Joule Module":{},"Intel Edison":{},"Arduino 101":{}},"Urls":{"Product Pages":["https://www.seeedstudio.com/EMAX-ES9257-2.5kg%26amp%3B-.05-sec-Micro-Digital-3D-Tail-Servo-p-762.html","https://www.seeedstudio.com/EMAX-9g-ES08A-High-Sensitive-Mini-Servo-p-760.html","https://www.emaxmodel.com/es08a-ii.html#product_tabs_description_tabbed"]}}}},{"Library":"sht1x","Description":"DFRobot SHT1X Temperature and Humidity Sensor Library","Sensor Class":{"SHT1X":{"Name":"API for the DFRobot SHT1X Temperature and Humidity Sensor","Description":"This is the UPM Module for the DFRobot SHT1X Temperature and Humidity Sensor. SHT1x is individually calibrated in a precision humidity chamber. The calibration coefficients are programmed into an OTP memory on the chip. These coefficients are used to internally calibrate the signals from the sensors. The 2-wire serial interface and internal voltage regulation allows for easy and fast system integration. The tiny size and low power consumption makes SHT1x the ultimate choice for even the most demanding applications.","Aliases":["sht1x","SHT1x Humidity and Temperature Sensor (SKU: DFR0066)"],"Categories":["temperature","humidity"],"Connections":["gpio"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["DFRobot","Sensirion"],"Examples":{"Java":["SHT1X_Example.java"],"Python":["sht1x.py"],"Node.js":["sht1x.js"],"C++":["sht1x.cxx"],"C":["sht1x.c"]},"Specifications":{"Vsource":{"unit":"V","min":2.4,"max":5.5},"Supply Current Digital":{"unit":"mA","typ":0.9},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Humidity Sensor":{"Measurement Range":{"unit":"%RH","min":0,"max":100},"Accuracy":{"unit":"%RH","min":-2,"max":2}},"Temperature Sensor":{"Measurement Range":{"unit":"°C","min":-40,"max":123.8},"Accuracy":{"unit":"°C","min":-0.3,"max":0.3}},"Response Time":{"unit":"second","typ":"< 4"}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.dfrobot.com/wiki/index.php/SHT1x_Humidity_and_Temperature_Sensor_(SKU:_DFR0066)"],"Datasheets":["https://www.sparkfun.com/datasheets/Sensors/SHT1x_datasheet.pdf"]}}}},{"Library":"si1132","Description":"Silicon Labs Si1132 UV and visible light sensor library","Sensor Class":{"SI1132":{"Name":"API for the Silicon Labs Si1132 UV and Visible Light Sensor","Description":"This is the UPM Module for the Silicon Labs Si1132 UV and Visible Light Sensor. The Silicon Labs Si1132 is a low-power, ultraviolet (UV) index, and ambient light sensor with I2C digital interface and programmable-event interrupt output.","Aliases":["si1132"],"Categories":["light"],"Connections":["i2c"],"Project Type":["industrial","commercial"],"Manufacturers":["Silicon Labs"],"Examples":{"C++":["si1132.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.71,"max":3.6},"Supply Current":{"Standby Mode":{"unit":"uA","min":"0.15","max":"1.4"},"Actively Measuring":{"unit":"mA","min":"4.3","max":"5.5"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Measurement Time":{"unit":"us","typ":285}},"Urls":{"Product Pages":["https://www.silabs.com/products/sensors/optical/si1132"],"Datasheets":["https://www.silabs.com/documents/public/data-sheets/Si1132.pdf"]}}}},{"Library":"si114x","Description":"Silicon Labs SI1145 UV Light Sensor library","Sensor Class":{"SI114x":{"Name":"API for the Silicon Labs SI1145 UV Light Sensor","Description":"This is the UPM Module for the Silicon Labs SI1145 UV Light Sensor. This device is capable of measuring IR and visible ambient light as well. It also supports the ability to use externally attached LEDs to perform proximity detection on 3 separate channels. Currently, this class only supports the retrieving of the calculated UV index measured by the device, but enough infrastructure is provided to make it easy to enhance this driver in the future to support additional capabilities, including interrupt support.","Aliases":["si114x","SI1145 Digital UV Index / IR / Visible Light Sensor"],"Categories":["light"],"Connections":["i2c"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["Adafruit","Silicon Labs"],"Image":"si114x.jpg","Examples":{"Python":["si114x.py"],"Node.js":["si114x.js"],"C++":["si114x.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3,"max":5},"Supply Current":{"Standby Mode":{"unit":"uA","min":"0.15","max":"1.4"},"Actively Measuring":{"unit":"mA","min":"4.3","max":"5.5"}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Start-up Time":{"unit":"ms","time":25},"Measurement Time":{"unit":"us","min":155,"max":660}},"Platforms":{"Intel Joule Module":{"Notes":[]},"Intel Edison":{"Notes":[]},"Arduino 101":{"Notes":[]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1777"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/Si1145-46-47.pdf"]}}}},{"Library":"si7005","Description":"Silicon Labs SI7005 digital I2C humidity and temperature sensor library","Sensor Class":{"SI7005":{"Name":"API for the Silicon Labs SI7005 digital I2C humidity and temperature sensor","Description":"This is the UPM Module for the Silicon Labs SI7005 digital I2C humidity and temperature sensor. The Si7005 sensor integrates humidity and temperature sensor elements and offers an analog-to-digital converter and signal processing in a single monolithic CMOS sensor IC. Both the humidity and temperature sensors are factory-calibrated and the data is stored in on-chip non-volatile memory.","Aliases":["si7005"],"Categories":["humidity","temperature"],"Connections":["i2c"],"Project Type":["industrial","commercial"],"Manufacturers":["Silicon Labs"],"Examples":{"C++":["si7005.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.1,"max":3.6},"Supply Current Digital":{"unit":"uA","min":1,"max":565},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Conversion Time":{"unit":"ms","min":18,"max":40},"Wake-up Time":{"unit":"ms","min":10,"max":15},"Power-up Time":{"unit":"ms","min":10,"max":15}},"Urls":{"Product Pages":["https://www.silabs.com/products/sensors/humidity/si7005"],"Datasheets":["https://www.silabs.com/documents/public/data-sheets/Si7005.pdf"]}}}},{"Library":"slide","Description":"Seeed Slide Sensor library","Sensor Class":{"Slide":{"Name":"API for the Seeed Slide Potentiometer","Description":"This is the UPM Module for the Seeed Slide Potentiometer. Basic UPM module for the slide potentiometer on analog that returns either a raw value or a scaled voltage value.","Aliases":["slide","Grove - Slide Potentiometer"],"Categories":["ainput"],"Connections":["analog"],"Project Type":["prototyping","robotics"],"Manufacturers":["Seeed"],"Image":"slide.jpg","Examples":{"Java":["Slide_Example.java"],"Python":["slide.py"],"Node.js":["slide.js"],"C++":["slide.cxx"],"C":["slide.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":30},"Supply Current":{"unit":"mA","max":30},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Operational Life":{"unit":"cycles","typ":">15,000"},"Stroke Length":{"unit":"mm","length":30},"Total Resistance":{"unit":"Kohm","resistance":10}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Slide-Potentiometer-p-1196.html","http://wiki.seeed.cc/Grove-Slide_Potentiometer/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Slide_Potentiometer/master/res/Sliding_potentiometer_datasheet.pdf"]}}}},{"Library":"sm130","Description":"SonMicro SM130 RFID Reader Module library","Sensor Class":{"SM130":{"Name":"API for the SonMicro SM130 RFID Reader Module","Description":"This is the UPM Module for the SonMicro SM130 RFID Reader Module. This module defines the SM130 interface for the sm130 RFID library This module was developed using an SM130 and a Sparkfun RFID Evaluation shield using a UART for communications. It should be fairly trivial to add support for I2C communication in the future, if you have the correct firmware on the SM130.","Aliases":["sm130"],"Categories":["rfid"],"Connections":["uart","gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["SonMicro","RFID Module - SM130 MIFARE (13.56 MHz)"],"Image":"sm130.jpg","Examples":{"Java":["SM130_Example.java"],"Python":["sm130.py"],"Node.js":["sm130.js"],"C++":["sm130.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.85,"max":5.5},"Supply Current":{"unit":"mA","min":0.03,"max":180},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/10126"],"Datasheets":["https://www.sparkfun.com/datasheets/Sensors/ID/SM130.pdf"]}}}},{"Library":"smartdrive","Description":"SmartDrive library","Sensor Class":{"SmartDrive":{"Name":"API for the SmartDrive advanced motor controller from OpenElectronics","Description":"This is the UPM Module for the OpenElectronics SmartDrive advanced motor controller. SmartDrive is a multiplexer to control high current DC motors This module has been tested on the SmartDrive.","Aliases":["smartdrive","SmartDrive High Current Motor Controller"],"Categories":["motor"],"Connections":["i2c"],"Project Type":["prototyping","robotics"],"Manufacturers":["OpenElectronics"],"Examples":{"C++":["smartdrive.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":12,"max":24},"Supply Current":{"unit":"A","average":10,"max":30},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Controllable Motors":{"unit":"motors","motors":2}},"Urls":{"Product Pages":["http://www.mindsensors.com/rpi/76-smartdrive-high-current-motor-controller"]}}}},{"Library":"speaker","Description":"Seeed Speaker library","Sensor Class":{"Speaker":{"Name":"API for the Seeed Speaker","Description":"This is the UPM Module for the Seeed Speaker. This speaker can generate different tones and sounds depending on the frequency of the input signal. It can operate in one of two modes: GPIO (default) and PWM. Depending on which mode is selected, some methods may not be usable. In GPIO mode, the playAll() and playSound() methods are supported. In PWM mode, setFrequency(), emit(), on() and off() are supported. Calling a method not appropriate for the mode will have no effect.","Aliases":["speaker","Grove - Speaker"],"Categories":["sound"],"Connections":["gpio","PWM"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["hak"],"Image":"speaker.jpg","Examples":{"Java":["SpeakerPWM_Example.java","Speaker_Example.java"],"Python":["speaker_pwm.py","speaker.py"],"Node.js":["speaker_pwm.js","speaker.js"],"C++":["speaker-pwm.cxx","speaker.cxx"],"C":["speaker-pwm.c","speaker.c"]},"Specifications":{"Vsource":{"unit":"V","min":4,"max":5.5},"Supply Current":{"unit":"mA","min":4,"max":8},"Operating Temperature":{"unit":"°C","min":0,"max":70}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Speaker-p-1445.html","http://wiki.seeed.cc/Grove-Speaker/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Speaker/master/res/LM386_Low_Voltage_Audio_Power_Amplifier_Datasheet.pdf"]}}}},{"Library":"ssd1351","Description":"Adafruit SSD1351 OLED library","Sensor Class":{"SSD1351":{"Name":"API for the Adafruit SSD1351 OLED displays","Description":"This is the UPM Module for the Adafruit SSD1351 OLED displays. It was tested with the Adafruit 1.5\" OLED Display, but should work with any SSD1351 display running in SPI mode. On the Intel Edison don't forget to disable SPI Power Management (PM) for this driver to work, you can find more details on this topic here: http://iotdk.intel.com/docs/master/mraa/edison.html","Aliases":["ssd1351","OLED Breakout Board - 16-bit Color 1.5\" w/microSD holder"],"Categories":["display"],"Connections":["spi"],"Project Type":["prototyping","commercial"],"Manufacturers":["Adafruit","Slomon Systech","Univision"],"Image":"ssd1351.jpg","Examples":{"C++":["ssd1351.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"uA","min":10,"max":1260},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"pixels","height":128,"width":128},"Color Resolution":{"unit":"bits","resolution":14}},"Urls":{"Product Pages":["https://www.adafruit.com/product/1431"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/SSD1351-Revision+1.3.pdf","https://cdn-shop.adafruit.com/datasheets/UG-2828GDEDF11.pdf"]}}}},{"Library":"st7735","Description":"Adafruit ST7735 LCD library","Sensor Class":{"ST7735":{"Name":"API for the Adafruit ST7735 LCD","Description":"This is the UPM Module for the Adafruit ST7735 LCD. This lovely little display breakout is the best way to add a small, colorful and bright display to any project. Since the display uses 4-wire SPI to communicate and has its own pixel-addressable frame buffer, it can be used with every kind of microcontroller. Even a very small one with low memory and few pins available!","Aliases":["st7735","1.8\" Color TFT LCD display with MicroSD Card Breakout - ST7735R"],"Categories":["display"],"Connections":["spi"],"Project Type":["prototyping","commercial"],"Manufacturers":["Adafruit","Truly Semiconductors","Sitronix"],"Image":"st7735.jpg","Examples":{"Java":["ST7735_Example.java"],"Node.js":["st7735.js"],"C++":["st7735.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","min":1,"max":50},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"pixels","height":128,"width":160},"Color Resolution":{"unit":"bits","resolution":18}},"Urls":{"Product Pages":["https://www.adafruit.com/product/358"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/JD-T1800.pdf","https://cdn-shop.adafruit.com/datasheets/ST7735R_V0.2.pdf"]}}}},{"Library":"stepmotor","Description":"Stepper Motor library","Sensor Class":{"StepMotor":{"Name":"API for the Stepper Motor","Description":"This is the UPM Module for the API for the Stepper Motor. This module defines the Stepper Motor interface. It is compatible with stepper motor drivers that use 2 pins to control the motor, like an Easy Driver from Brian Schmalz or the STR driver series from Applied Motion. It can also control an enable pin if one is available and connected. The implementation is synchronous and thus blocking while the stepper motor is in motion. However it is possible to send the commands via threading and the performance of the library will be very good given a low CPU load. On a busy system though you will notice some jitter especially at higher speeds. It is possible to reduce this effect to some extent by using smoothing and/or microstepping on stepper drivers that support such features.","Aliases":["stepmotor","EasyDriver - Stepper Motor Driver"],"Categories":["motor"],"Connections":["gpio"],"Project Type":["prototyping","robotics","commercial"],"Manufacturers":["Allegro","SparkFun","generic"],"Image":"stepmotor.jpg","Examples":{"Java":["StepMotor_Example.java"],"Python":["stepmotor.py"],"Node.js":["stepmotor.js"],"C++":["stepmotor.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":7},"Motor Driver Voltage":{"unit":"V","min":6,"max":30},"Supply Current":{"unit":"mA","min":150,"max":700},"Operating Temperature":{"unit":"°C","min":-20,"max":85}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/12779"],"Datasheets":["https://cdn.sparkfun.com/datasheets/Robotics/A3967-Datasheet.pdf"]}}}},{"Library":"sx1276","Description":"Semtech SX1276 LoRa/FSK Modem Library","Sensor Class":{"SX1276":{"Name":"Semtech SX1276 LoRa/FSK Module","Description":"The SX1276 is a FSK/OOK/LoRa modem capable of both Low Frequency and High Frequency communication. It requires a 3.3v power supply, do not use 5v. Frequency Hopping Spread Spectrum (FHSS) is not currently supported.","Aliases":["sx1276"],"Categories":["radio"],"Connections":["gpio","spi"],"Project Type":["industrial"],"Manufacturers":["semtech"],"Examples":{"Python":["sx1276-fsk.py","sx1276-lora.py"],"Node.js":["sx1276-fsk.js","sx1276-lora.js"],"C++":["sx1276-fsk.cxx","sx1276-lora.cxx"]},"Specifications":{"VDDmr":{"unit":"V","min":-0.5,"max":3.9},"VDDop":{"unit":"V","min":1.8,"max":3.7},"Tmr":{"unit":"�C","min":-55,"max":115},"Top":{"unit":"�C","min":-40,"max":85},"IDDsl":{"unit":"uA","typ":0,"max":1},"IDDidle":{"unit":"uA","typ":1.5},"IDDst":{"unit":"mA","typ":1.6,"max":1.8},"IDDfs":{"unit":"mA","typ":5.8},"IDDr":[{"Conditions":"LnaBoost Off, band 1","unit":"mA","typ":10.8},{"Conditions":"LnaBoost On, band 1","unit":"mA","typ":11.5},{"Conditions":"bands 2 & 3","unit":"mA","typ":12}],"IDDt":[{"Conditions":"RFOP +20 dBm on PA_BOOST","unit":"mA","typ":120},{"Conditions":"RFOP +17 dBm on PA_BOOST","unit":"mA","typ":87},{"Conditions":"RFOP +13 dBm on RFO_LH/RH pin","unit":"mA","typ":29},{"Conditions":"RFOP +7 dBm on RFO_LH/RH pin","unit":"mA","typ":20}],"LoRaWAN Band":"US915","Range":"Claimed > 10km","Packet Size":{"unit":"bytes","max":256}},"Platforms":{"Intel Edison":{"Notes":["Power using 3.3 V"]},"Arduino 101":{"Notes":["Power using 3.3 V"]},"Intel C1000":{"Notes":["Power using 3.3 V"]}},"Urls":{"Product Pages":["http://www.semtech.com/wireless-rf/rf-transceivers/sx1276/"],"Datasheets":["http://www.semtech.com/images/datasheet/sx1276.pdf"]}}}},{"Library":"sx6119","Description":"Seeed SX6119-based FM Receiver library","Sensor Class":{"SX6119":{"Name":"API support for the Seeed SX6119-based Grove FM Receiver","Description":"This is the UPM Module for the Seeed SX6119-based Grove FM Receiver. There are two digital pins: one that toggles power on/off, and the other that does a seek to the next station.","Aliases":["sx6119","Grove - FM Receiver"],"Categories":["sound"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed"],"Image":"sx6119.jpg","Examples":{"Python":["sx6119.py"],"Node.js":["sx6119.js"],"C++":["sx6119.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2,"max":3.6},"Supply Current":{"unit":"mA","min":0.005,"max":17},"Operating Temperature":{"unit":"°C","min":-20,"max":85},"Start-up Time":{"unit":"ms","min":30,"max":150}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-FM-Receiver-p-1841.html","http://wiki.seeed.cc/Grove-FM_Receiver/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-FM_Receiver/master/res/SX6119_%E6%94%B6%E9%9F%B3IC_datasheet.pdf"]}}}},{"Library":"t3311","Description":"T3311 Temperature and Humidity Sensor Library","Sensor Class":{"T3311":{"Name":"API for the T3311 MODBUS Temperature and Humidity Sensor","Description":"This is the UPM Module for the T3311 MODBUS Temperature and Humidity Sensor. This module implements support for the Comet System T3311 Temperature and Humidity transmitter. It uses MODBUS over an RS232 serial port. You must have libmodbus v3.1.2 (or greater) installed to compile and use this driver. This module was developed using libmodbus 3.1.2, and T3311 Firmware revison 2.66 connected via a Prolific RS232 Serial to USB adaptor. You cannot use the built in TTL UART pins for accessing this device -- you must use a full serial RS232 interface connected via USB.","Aliases":["t3311","T3311 Temperature and humidity probe with RS232 output, internal sensors"],"Categories":["humidity","temperature"],"Connections":["uart"],"Project Type":["industrial"],"Manufacturers":["Comet"],"Examples":{"Python":["t3311.py"],"Node.js":["t3311.js"],"C++":["t3311.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":9,"max":30},"Operating Temperature":{"unit":"°C","min":-30,"max":85},"Temperature Sensor":{"Effective Range":{"unit":"°C","min":-30,"max":80},"Accuracy":{"unit":"°C","min":-0.4,"max":0.4}},"Humidity Sensor":{"Effective Range":{"unit":"RH","min":"0%","max":"100%"},"Accuracy":{"unit":"RH","min":"-2.5%","max":"2.5%"}}},"Urls":{"Product Pages":["http://www.cometsystem.com/products/reg-T3311"],"Datasheets":["http://www.cometsystem.com/products/reg-T3311#technical_dataa"]}}}},{"Library":"t6713","Description":"Amphenol Telaire 6713 Series CO2 Module Sensor Library","Sensor Class":{"T6713":{"Name":"API for the Amphenol Telaire 6713 Series CO2 Module","Description":"This is the UPM Module for the Amphenol Telaire 6713 Series CO2 Module. The new T6700 series is a miniature NDIR CO2 sensor that has accuracy and reliability of many larger sensors. The new small size allows OEM’s to integrate in to smaller enclosures and equipment and uses significantly less power than many other devices on the market.","Aliases":["t6713","Miniature CO2 Module Series T6700"],"Categories":["gaseous"],"Connections":["i2c"],"Project Type":["industrial","commercial"],"Manufacturers":["Amphenol"],"Examples":{"C++":["t6713-co2-sensor.cxx","t6713.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":4.4,"max":5.5},"Supply Current":{"unit":"mA","min":25,"max":200},"Operating Temperature":{"unit":"°C","min":-10,"max":60},"Detection Range":{"unit":"ppm","min":400,"max":5000},"Accuracy":{"unit":"ppm","min":-75,"max":75}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://amphenol-sensors.com/en/products/co2/co2-modules/3215-t6700"],"Datasheets":["http://amphenol-sensors.com/en/products/co2/co2-modules/3215-t6700#specifications-t6703"]}}}},{"Library":"t8100","Description":"Amphenol Telaire Ventostat T8100 Ventilation Controller Library","Sensor Class":{"T8100":{"Name":"API for the Amphenol Telaire Ventostat T8100 Ventilation Controller","Description":"This is the UPM Module for the Amphenol Telaire Ventostat T8100 Ventilation Controller. This module implements support for the Amphenol Telaire Ventostat T8100 Ventilation Controller with BACnet interface. It may also support the T8200 and T8300 models, but they have not been tested. The Telaire Ventostat T8100 reports Temperature, Humidity and CO2 concentrations. It supports an optional relay with a settable trigger point. The unit this driver was tested under did not support the optional relay.","Aliases":["t8100","Telaire Ventostat Series CO2 Monitor"],"Categories":["gaseous","temperature","humidity"],"Connections":["uart"],"Project Type":["industrial","commercial"],"Manufacturers":["Amphenol"],"Examples":{"Java":["T8100_Example.java"],"Python":["t8100.py"],"Node.js":["t8100.js"],"C++":["t8100.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":0,"max":10},"Supply Current":{"unit":"mA","min":4,"max":20},"Operating Temperature":{"unit":"°C","min":0,"max":50},"Temperature Sensor":{"Effective Range":{"unit":"°C","min":0,"max":50},"Accuracy":{"unit":"°C","min":-0.8,"max":0.8}},"Humidity Sensor":{"Effective Range":{"unit":"RH","min":"0%","max":"99%"},"Accuracy":{"unit":"RH","min":"-3.5%","max":"3.5%"}},"CO2 Sensor":{"Effective Range":{"unit":"ppm","min":0,"max":5000},"Accuracy":{"unit":"ppm","min":-30,"max":30},"Warm-up Time":{"unit":"minutes","min":2,"max":10}}},"Urls":{"Product Pages":["https://www.instrumart.com/products/18180/telaire-ventostat-series-co2-monitor"],"Datasheets":["https://www.instrumart.com/assets/Telaire_Ventostat_Wall_Mount-datasheet.pdf"]}}}},{"Library":"ta12200","Description":"Seeed TA12-200 Current Transformer library","Sensor Class":{"TA12200":{"Name":"API for the Seeed TA12-200 Current Transformer","Description":"This is the UPM Module for the Seeed TA12-200 Current Transformer. The Electricity sensor module is based on the TA12-200 current transformer which can change large alternating current into a small amplitude. You can use it to test large alternating current upto 5A.","Aliases":["ta12200","Grove - Electricity Sensor"],"Categories":["electric"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Image":"ta12200.jpg","Examples":{"Python":["ta12200.py"],"Node.js":["ta12200.js"],"C++":["ta12200.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Sampling Voltage":{"unit":"V","min":0,"max":2},"Supply Current":{"unit":"A","min":0,"max":5},"Output Current":{"unit":"mA","min":0,"max":2.5},"Operating Temperature":{"unit":"°C","min":-55,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Electricity-Sensor-p-777.html","http://wiki.seeed.cc/Grove-Electricity_Sensor/"]}}}},{"Library":"tb7300","Description":"Honeywell TB7300 Communicating Fan Coil Thermostat Library","Sensor Class":{"TB7300":{"Name":"API for the Honeywell TB7300 Communicating Fan Coil Thermostat","Description":"This is the UPM Module for the Honeywell TB7300 Communicating Fan Coil Thermostat. It may also support the TB7200, though only the TB7300 was available for development of this driver. The TB7200 Series PI thermostats are designed for zoning applications, and the TB7300 Series PI thermostats are designed for fan coil control. Both Series are communicating thermostats with models available in BACnet(r) MS/TP protocol and can be easily integrated into a WEBs-AX building automation system based on the NiagaraAX(r) platform. TB7200 and TB7300 Series thermostats are compatible with the Honeywell Occupancy Sensor Cover. Thermostats equipped with an occupancy sensor cover provide advanced active occupancy logic, which will automatically switch occupancy levels from Occupied to Stand-By and Unoccupied as required by local activity being present or not. This advanced occupancy functionality provides advantageous energy savings during occupied hours without sacrificing occupant comfort. All thermostats can be ordered with or without a factory installed PIR cover.","Aliases":["tb7300","TB7300C5014B"],"Categories":["temperature"],"Connections":["uart"],"Project Type":["industrial","commercial"],"Manufacturers":["honeywell"],"Examples":{"Java":["TB7300_Example.java"],"Python":["tb7300.py"],"Node.js":["tb7300.js"],"C++":["tb7300.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":19,"max":30},"Supply Current":{"unit":"A","min":1,"max":3},"Operating Temperature":{"unit":"°C","min":0,"max":50},"Operating Humidity":{"unit":"RH","min":"0%","max":"95%"}},"Urls":{"Product Pages":["https://parts-hvac.com/tb7300c5014b.html"]}}}},{"Library":"tca9548","Description":"TI tca9548a multiplexer library","Sensor Class":{"TCA9548A":{"Name":"API for the TI TCA9548A Multiplexer Breakout","Description":"This is the UPM Module for the Texas Instruments TCA9548A Multiplexer Breakout.","Aliases":["TCA9548A","TCA9548A I2C Multiplexer"],"Categories":["multiplexer"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Adafruit","Texas Instruments"],"Image":"tca9548a.jpg","Examples":{"Node.js":["tca9548.js"],"C++":["tca9548a.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":1.65,"max":5.5},"Supply Current":{"unit":"uA","min":2,"max":80},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Supported Same Address i2c Devices":{"unit":"Devices","devices":8}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/2717","https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/overview"],"Datasheets":["https://cdn-shop.adafruit.com/datasheets/tca9548a.pdf"]}}}},{"Library":"tcs3414cs","Description":"Seeed TCS3414CS Color Sensor library","Sensor Class":{"TCS3414CS":{"Name":"API for the Seeed TCS3414CS Color Sensor","Description":"This is the UPM Module for the Seeed TCS3414CS Color Sensor. This module is based on the color sensor TCS3414CS with digital output I2C. Based on the 8*2 array of filtered photodiodes and 16-bit analog-to-digital converters, you can measure the color chromaticity of ambient light or the color of objects. Of the 16 photodiodes, 4 have red filters, 4 have green filters, 4 have blue filters and 4 have no filter(clear). With the synchronization input pin, an external pulsed light source can provide precise synchronous conversion control.","Aliases":["tcs3414cs"],"Categories":["light"],"Connections":["i2c"],"Project Type":["prototyping"],"Manufacturers":["Seeed","TAOS","ams"],"Image":"tcs3414cs.jpg","Examples":{"Python":["tcs3414cs.py"],"Node.js":["tcs3414cs.js"],"C++":["tcs3414cs.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":6},"Supply Current":{"unit":"mA","min":1,"max":12},"Operating Temperature":{"unit":"°C","min":-30,"max":70}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["http://wiki.seeed.cc/Grove-I2C_Color_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Color_Sensor/master/res/TCS3404_TCS3414-A.pdf","https://github.com/SeeedDocument/Grove-I2C_Color_Sensor/raw/master/res/TCS3472%20Datasheet.pdf"]}}}},{"Library":"tcs37727","Description":"AMS TCS37727 Color Light-To-Digital Converter Library","Sensor Class":{"TCS37727":{"Name":"API for the AMS TCS37727 Color Light-To-Digital Converter","Description":"This is the UPM Module for the AMS TCS37727 Color Light-To-Digital Converter. The TCS3772 device family provides red, green, blue, and clear (RGBC) light sensing and, when coupled with an external IR LED, proximity detection. These devices detect light intensity under a variety of lighting conditions and through a variety of attenuation materials, including dark glass. The proximity detection feature allows a large dynamic range of operation for accurate short distance detection, such as in a cell phone, for detecting when the user positions the phone close to their ear. An internal state machine provides the ability to put the device into a low power state in between proximity and RGBC measurements providing very low average power consumption.","Aliases":["tcs37727"],"Categories":["color","light"],"Connections":["i2c"],"Project Type":["industrial","commercial"],"Manufacturers":["AMS"],"Examples":{"Python":["tcs37727.py"],"C++":["tcs37727.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.7,"max":3.6},"Supply Current":{"unit":"uA","min":2.5,"max":330},"Operating Temperature":{"unit":"°C","min":-30,"max":70}},"Urls":{"Product Pages":["http://ams.com/eng/Products/Light-Sensors"],"Datasheets":["http://ams.com/eng/content/download/291143/1065677/file/TCS3772_DS000175_2-00.pdf"]}}}},{"Library":"teams","Description":"Veris TEAMS Temperature Transmitter Library","Sensor Class":{"TEAMS":{"Name":"API for the Veris TEAMS Temperature Transmitter","Description":"This is the UPM Module for the Veris TEAMS Temperature Transmitter. The Veris TEAMS temperature sensor provides it's output via a 4-20ma current loop. The supported temperature range is 10C to 35C. This sensor was developed with a Cooking Hacks (Libelium) 4-channel 4-20ma Arduino interface shield. For this interface, the receiver resistance (rResistor) was specified as 165.0 ohms. When using a 4-20ma current loop interface which scales the sensors' values to a 0-5vdc range, you can supply 0.0 as the rResistor value in the constructor (default), and it will act just like a normal analog input.","Aliases":["teams"],"Categories":["temperature"],"Connections":["ainput"],"Project Type":["industrial","commercial"],"Manufacturers":["Veris"],"Examples":{"Java":["TEAMS_Example.java"],"Python":["teams.py"],"Node.js":["teams.js"],"C++":["teams.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":5,"max":30},"Supply Current":{"unit":"mA","min":4,"max":20},"Operating Temperature":{"unit":"°C","min":-25,"max":105},"Accuracy":{"unit":"°C","min":-0.3,"max":0.3}},"Urls":{"Product Pages":["http://www.veris.com/Item/TEAMS.aspx"],"Datasheets":["http://www.veris.com/docs/Datasheets/TW_TE_d0117.pdf"]}}}},{"Library":"temperature","Description":"Temperature sensor library","Sensor Class":{"Temperature":{"Name":"Analog Temperature Sensor","Description":"Basic UPM module for analog temperature sensors. These sensors use a NTC thermistor to measure ambient temperature. This driver was developed using the Grove Temperature Sensor. The conversion formula has been updated to work with versions 1.1 and 1.2 of the sensor. For the older v1.0 sensor you will have to specify R0 and B values when initializing the device. The range of this sensor is -40 to 125 C and accuracy is +/- 1.5 C.","Aliases":["Grove - Temperature Sensor"],"Categories":["temp"],"Connections":["analog"],"Project Type":["prototyping","industrial"],"Manufacturers":["seeed","dfrobot","sparkfun","adafruit","generic"],"Kits":["gsk"],"Image":"temp.jpg","Examples":{"Java":["Temperature_Example.java"],"Python":["temperature.py"],"Node.js":["temperature.js"],"C++":["temperature.cxx"]},"Platforms":{"Arduino 101":{"Notes":["Will need to adjust ADC scale when used with Grove Base Shield (see API documentation)."]}},"Urls":{"Product Pages":["http://wiki.seeed.cc/Grove-Temperature_Sensor_V1.2/"],"Datasheets":["https://github.com/SeeedDocument/Grove-Temperature_Sensor_V1.2/raw/master/res/NCP18WF104F03RC.pdf"],"Schematics":["https://easyeda.com/Seeed/Grove_Temperature_sensor_v1_2-ed433e462f14455e9aa38ae1a06e4680"]}}}},{"Library":"tex00","Description":"Veris TEX00 Temperature Sensor Library","Sensor Class":{"TEX00":{"Name":"API for the Veris TEX00 Temperature Sensor","Description":"This is the UPM Module for the Veris TEX00 Temperature Sensor. The Veris TEX00 temperature sensor family is made up of a series of RTD thermistors in wall mount packaging. This driver was developed using the TED00, which utilizes a 10K Ohm Type 2 thermistor. However, this driver can support the other 12 variants of the TE series as well by providing the correct sensor type to the class constructor. These other sensor types have not been tested. Only the TED00 was tested with this driver.","Aliases":["tex00","TED00"],"Categories":["temperature"],"Connections":["ainput"],"Project Type":["industrial","commercial"],"Manufacturers":["Veris"],"Examples":{"Java":["TEX00_Example.java"],"Python":["tex00.py"],"Node.js":["tex00.js"],"C++":["tex00.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":5,"max":30},"Supply Current":{"unit":"mA","min":4,"max":20},"Operating Temperature":{"unit":"°C","min":-25,"max":105},"Effective Range":{"unit":"°C","min":10,"max":35},"Offset Temperature":{"unit":"+/-°C","min":1.8,"max":3}},"Urls":{"Product Pages":["http://www.veris.com/Item/TED00.aspx"],"Datasheets":["http://www.veris.com/docs/Datasheets/TW_TE_d0117.pdf"]}}}},{"Library":"th02","Description":"Seeed TH02 Temperature & Humidity Sensor Library","Sensor Class":{"TH02":{"Name":"API for the Seeed TH02 Temperature & Humidity Sensor","Description":"This is the UPM Module for the Seeed TH02 Temperature & Humidity Sensor. This is a multifunctional sensor that gives you temperature and relative humidity information at the same time. It utilizes a TH02 sensor that can meet measurement needs of general purposes. It provides reliable readings when environment humidity condition inbetween 0-80% RH, and temperature condition inbetween 0-70°C, covering needs in most home and daily applications that don't contain extreme conditions.","Aliases":["th02","Grove - Temperature&Humidity Sensor (High-Accuracy & Mini)"],"Categories":["humidity","temperature"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed"],"Image":"th02.jpg","Examples":{"Java":["Th02_Example.java"],"C++":["th02.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"uA","min":24,"max":565},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Humidity Sensor":{"Effective Range":{"unit":"%RH","min":20,"max":80},"Accuracy":{"unit":"-/+ %RH","min":3,"max":4.5}},"Temperature Sensor":{"Effective Range":{"unit":"°C","min":0,"max":70},"Resolution":{"unit":"°C","resolution":"1/32"},"Accuracy":{"unit":"+/- °C","min":0.5,"max":1}}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield","Must be set to 3 V rather than 5 V."]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Temperature%26Humidity-Sensor-(High-Accuracy-%26-Mini)-p-1921.html","http://wiki.seeed.cc/Grove-TemptureAndHumidity_Sensor-High-Accuracy_AndMini-v1.0/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-TemptureAndHumidity_Sensor-High-Accuracy_AndMini-v1.0/master/res/TH02_SENSOR.pdf"]}}}},{"Library":"tm1637","Description":"Seeed TM1637 based 7-Segment Display Library","Sensor Class":{"TM1637":{"Name":"API for the Seeed TM1637 based 7-Segment Display","Description":"This is the UPM Module for the Seeed TM1637 based 7-Segment Display. It can be used to address and write data to multiple display digits. This driver is based on the Grove version of the TM1637 display that uses 4 digits, thus making it ideal for clock displays, timers, counters, or even score displays in a two-player arcade game.","Aliases":["tm1637","Grove - 4-Digit Display"],"Categories":["display"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed","Titan Micro Electronics"],"Image":"tm1637.jpeg","Examples":{"Java":["TM1637_Example.java"],"Python":["tm1637.py"],"Node.js":["tm1637.js"],"C++":["tm1637.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5.5},"Supply Current":{"unit":"mA","min":0.2,"max":80},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-4digital-display-p-1198.html","http://wiki.seeed.cc/Grove-4-Digit_Display/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-4-Digit_Display/master/res/TM1637_datasheet.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-4-Digit_Display/master/res/Grove_4-Digit_Display_V1.0.pdf"]}}}},{"Library":"tmp006","Description":"Texas Instruments TMP006 Infrared-Thermopile Sensor Library","Sensor Class":{"TMP006":{"Name":"API for the Texas Instruments TMP006 IR-Thermopile Sensor","Description":"This is the UPM Module for the Texas Instruments TMP006 IR-Thermopile Sensor. The TMP006 and TMP006B are fully integrated MEMs thermopile sensors that measure the temperature of an object without having to be in direct contact. The thermopile absorbs passive infrared energy from an object at wavelengths between 4 um to 16 um within the end-user defined field of view. The corresponding change in voltage across the thermopile is digitized and reported with the on-chip die thermal sensor measurement through an I2C- and SMBus-compatible interface. With this data, the target object temperature can be calculated by an external processor.","Aliases":["tmp006","TMP006 Infrared Thermopile Contactless Temperature Sensor in WCSP Package"],"Categories":["temperature"],"Connections":["i2c"],"Project Type":["prototyping","industrial","commercial"],"Manufacturers":["Texas Instruments"],"Examples":{"Python":["tmp006.py"],"C++":["tmp006.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.5,"max":5.5},"Supply Current":{"unit":"uA","min":1,"max":325},"Operating Temperature":{"unit":"°C","min":-40,"max":125},"Effective Range":{"unit":"°C","min":0,"max":60},"Accuracy":{"unit":"-/+ °C","min":0.5,"max":1}},"Urls":{"Product Pages":["http://www.ti.com/product/TMP006/datasheet/abstract#SBOS5183423"],"Datasheets":["http://www.ti.com/lit/ds/symlink/tmp006.pdf"]}}}},{"Library":"tsl2561","Description":"TSL2561 Digital Light Sensor library","Sensor Class":{"TSL2561":{"Name":"API for the TSL2561 Digital Light Sensor","Description":"This is the UPM Module for the TSL2561 Digital Light Sensor. TSL2560 and TSL2561 are light-to-digital converters that transform light intensity to a digital signal output capable of a direct I2C (TSL2561) interface","Aliases":["tsl2561","Grove - Digital Light Sensor"],"Categories":["light"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed","TAOS"],"Kits":["eak"],"Image":"tsl2561.jpg","Examples":{"Java":["TSL2561_Example.java"],"Python":["tsl2561.py"],"Node.js":["tsl2561.js"],"C++":["tsl2561.cxx"],"C":["tsl2561.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5.1},"Supply Current":{"unit":"uA","min":240,"max":600},"Operating Temperature":{"unit":"°C","min":-30,"max":70},"Effective Range":{"unit":"Lux","min":0.1,"max":40000},"Conversion Time":{"unit":"ms","min":12,"max":400}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Digital-Light-Sensor-p-1281.html","http://wiki.seeed.cc/Grove-Digital_Light_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Digital_Light_Sensor/master/res/TSL2561T.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-Digital_Light_Sensor/raw/master/res/Digital%20light%20sensor%20v1.0%20Sch.pdf","https://github.com/SeeedDocument/Grove-Digital_Light_Sensor/raw/master/res/Digital%20light%20sensor%20v1.0%20PCB.pdf"]}}}},{"Library":"ttp223","Description":"Seeed TTP223 Touch Detector Sensor library","Sensor Class":{"TTP223":{"Name":"API for the Seeed TTP223 Touch Sensor","Description":"This is the UPM Module for the Seeed TTP223 Touch Sensor. This touch sensor detects when a finger is near the metallic pad by the change in capacitance. It can replace a more traditional push button. The touch sensor can still function when placed under a non-metallic surface like glass or plastic.","Aliases":["ttp223","Grove - Touch Sensor"],"Categories":["touch"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed"],"Image":"ttp223.jpg","Examples":{"Java":["TTP223_Example.java"],"Python":["ttp223.py"],"Node.js":["ttp223.js"],"C++":["ttp223.cxx"],"C":["ttp223.c"]},"Specifications":{"Vsource":{"unit":"V","min":2,"max":5.5},"Supply Current":{"unit":"uA","min":1.5,"max":7},"Operating Temperature":{"unit":"°C","min":-20,"max":70},"Response Time":{"unit":"ms","min":60,"max":220}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Touch-Sensor-p-747.html","http://wiki.seeed.cc/Grove-Touch_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Touch_Sensor/master/res/TTP223.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Touch_Sensor/master/res/Touch_sensor_Eagle_File.zip"]}}}},{"Library":"uartat","Description":"Generic AT Command Based UART Device Library","Sensor Class":{"UARTAT":{"Name":"API for a Generic AT command based UART device","Description":"This is the UPM Module for a Generic AT command based UART device. This is a generic UART device driver for accessing UART based devices that utilize an \"AT\" command set. Typically these devices are Radios, Modems, and similar devices that are configured and controlled by emitting \"AT\" commands.","Aliases":["uartat"],"Categories":["other"],"Connections":["uart"],"Project Type":["other"],"Manufacturers":["generic"],"Examples":{"Java":["LE910_Example.java"],"Python":["le910.py"],"Node.js":["le910.js"],"C++":["uartat-le910.cxx"],"C":["uartat-le910.c"]},"Urls":{"Product Pages":["https://github.com/intel-iot-devkit/upm/tree/master/src/uartat"]}}}},{"Library":"uln200xa","Description":"ULN200XA Stepper Driver Library","Sensor Class":{"ULN200XA":{"Name":"UPM module for the ULN200XA Darlington Stepper Driver","Description":"This is the UPM Module for the ULN200XA Darlington Stepper Driver. This module was developed on a ULN2003A Stepper Driver. It should also support the ULN2001A, ULN2002A, and ULN2004A devices, when using to drive the 28BYJ-48 unipolar stepper motor.","Aliases":["ULN200XA","ULN2001A","ULN2002A","ULN2003A","ULN2004A"],"Categories":["motor"],"Connections":["gpio"],"Project Type":["prototyping","robotics"],"Manufacturers":["Seeed"],"Image":"uln200xa.jpg","Examples":{"Java":["ULN200XA_Example.java"],"Python":["uln200xa.py"],"Node.js":["uln200xa.js"],"C++":["uln200xa.cxx"],"C":["uln200xa.c"]},"Specifications":{"Vsource":{"unit":"V","min":2.4,"max":13},"Supply Current":{"unit":"uA","min":500,"max":1450},"Operating Temperature":{"unit":"°C","min":-20,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Gear-Stepper-Motor-with-Driver-p-1685.html?cPath=39_40"],"Datasheets":["http://www.seeedstudio.com/document/pdf/Stepper%20Motor%20Datasheet.pdf","http://www.seeedstudio.com/document/pdf/ULN2003%20Datasheet.pdf"],"Schematics":["http://www.seeedstudio.com/document/pdf/Driver%20Board%20Schematic.pdf"]}}}},{"Library":"ultrasonic","Description":"Grove ultrasonic sensor Library","Sensor Class":{"UltraSonic":{"Name":"API for the Grove Ultrasonic Ranger","Description":"This is the UPM Module for the Grove Ultrasonic Ranger. This Grove Ultrasonic sensor is a non-contact distance measurement module which is compatible with the Grove system. It is designed for easy modular project usage with industrial performance. Detection ranges from 3 cm (1.2\") to 4 m (13'1.5\") and works best when the object is within a 30 degree angle relative to the sensor.","Aliases":["ultrasonic","Grove - Ultrasonic Ranger"],"Categories":["sound"],"Connections":["gpio"],"Project Type":["prototyping","robotics","commercial"],"Manufacturers":["Seeed"],"Image":"ultrasonic.jpg","Examples":{"Node.js":["ultrasonic.js"],"C++":["ultrasonic.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.2,"max":5.2},"Supply Current":{"unit":"mA","typ":8},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Ultrasonic Frequency":{"unit":"kHz","typ":40},"Effective Range":{"unit":"cm","min":2,"max":350},"Resolution":{"unit":"cm","min":-1,"max":1}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Ultrasonic-Ranger-p-960.html","http://wiki.seeed.cc/Grove-Ultrasonic_Ranger/"]}}}},{"Library":"urm37","Description":"DFRobot URM37 Ultrasonic Ranger Library","Sensor Class":{"URM37":{"Name":"API for the DFRobot URM37 Ultrasonic Ranger","Description":"This is the UPM Module for the DFRobot URM37 Ultrasonic Ranger. This library was tested with the DFRobot URM37 Ultrasonic Ranger, V4. It has a range of between 5 and 500 centimeters (cm). It supports both analog distance measurement, and UART based temperature and distance measurements. This driver does not support PWM measurement mode. For UART operation, the only supported baud rate is 9600. In addition, you must ensure that the UART TX/RX pins are configured for TTL operation (the factory default) rather than RS232 operation, or permanent damage to your URM37 and/or MCU will result. On power up, the LED indicator will blink one long pulse, followed by one short pulse to indicate TTL operation.","Aliases":["urm37","URM37 V4.0 Ultrasonic Sensor"],"Categories":["sound"],"Connections":["uart","ainput","gpio"],"Project Type":["prototyping","robotics","commercial"],"Manufacturers":["DFRobot"],"Image":"urm37.jpg","Examples":{"Python":["urm37-uart.py","urm37.py"],"Node.js":["urm37-uart.js","urm37.js"],"C++":["urm37-uart.cxx","urm37.cxx"],"C":["urm37-uart.c","urm37.c"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5},"Supply Current":{"unit":"mA","typ":"<20"},"Operating Temperature":{"unit":"°C","min":-10,"max":70},"Effective Range":{"unit":"cm","min":5,"max":500},"Resolution":{"unit":"cm","resolution":1}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-53.html","https://www.dfrobot.com/wiki/index.php/URM37_V4.0_Ultrasonic_Sensor_(SKU:SEN0001)"]}}}},{"Library":"vcap","Description":"Take a snapshot from a video camera and save as a JPEG","Sensor Class":{"VCAP":{"Name":"API for the Video Capture driver","Description":"This is the UPM Module for the Video Capture driver. This UPM module captures a still frame from a Linux V4L device, such as a USB webcam, and and then allows you to save it as a JPEG image into a file. The camera and driver in use must support streaming, mmap-able buffers and must provide data in YUYV format. This should encompass most video cameras out there. It has been tested with a few off the shelf cameras without any problems.","Aliases":["vcap"],"Categories":["video"],"Connections":["other"],"Project Type":["medical","industrial","commercial","prototyping"],"Manufacturers":["other"],"Examples":{"Java":["VCAP_Example.java"],"Python":["vcap.py"],"Node.js":["vcap.js"],"C++":["vcap.cxx"]},"Urls":{"Product Pages":["https://github.com/intel-iot-devkit/upm/tree/master/src/vcap"]}}}},{"Library":"vdiv","Description":"Grove Voltage Divider Sensor Library","Sensor Class":{"vdiv":{"Name":"API for the Grove Voltage Divider Sensor","Description":"This is the UPM Module for the Grove Voltage Divider Sensor. The Grove – Voltage Divider provides an interface for measuring extern voltage, eliminating the need to connect a resistance to input interface. Besides, The voltage gain can select by dial switch.They are easy to use.","Aliases":["vdiv","Grove - Voltage Divider","LMV3xx"],"Categories":["electric"],"Connections":["analog"],"Project Type":["prototyping"],"Manufacturers":["Seeed","Texas Instruments"],"Kits":["robok"],"Image":"vdiv.jpg","Examples":{"Java":["VDiv_Example.java"],"Python":["vdiv.py"],"Node.js":["vdiv.js"],"C++":["vdiv.cxx"],"C":["vdiv.c"]},"Specifications":{"Vsource":{"unit":"V","min":4.7,"max":5.3},"Supply Current":{"unit":"uA","min":130,"max":410},"Operating Temperature":{"unit":"°C","min":-40,"max":125},"Accuracy":{"unit":"%","typ":"<=1"},"External Voltage Range":{"Gain 3":{"unit":"V","min":0.3,"max":12.9},"Gain 10":{"unit":"V","min":1,"max":43}}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Voltage-Divider-p-1472.html","http://wiki.seeed.cc/Grove-Voltage_Divider/"],"Datasheets":["https://github.com/SeeedDocument/Grove-Voltage_Divider/raw/master/res/LMV358ID_Datasheet.pdf"],"Schematics":["https://github.com/SeeedDocument/Grove-Voltage_Divider/raw/master/res/Grove-Voltage_Divider_Eagle_File.zip"]}}}},{"Library":"veml6070","Description":"Vishay VEML6070 UV Sensor Library","Sensor Class":{"VEML6070":{"Name":"API for the Vishay VEML6070 UV Sensor","Description":"This is the UPM Module for the Vishay VEML6070 UV Sensor. VEML6070 is an advanced ultraviolet (UV) light sensor with I2C protocol interface and designed by the CMOS process. It is easily operated via a simple I2C command. The active acknowledge (ACK) feature with threshold windows setting allows the UV sensor to send out a UVI alert message. Under a strong solar UVI condition, the smart ACK signal can be easily implemented by the software programming. VEML6070 incorporates a photodiode, amplifiers, and analog / digital circuits into a single chip. VEML6070's adoption of FiltronTM UV technology provides the best spectral sensitivity to cover UV spectrum sensing. It has an excellent temperature compensation and a robust refresh rate setting that does not use an external RC low pass filter. VEML6070 has linear sensitivity to solar UV light and is easily adjusted by an external resistor.","Aliases":["veml6070"],"Categories":["light"],"Connections":["i2c"],"Project Type":["prototyping","commercial"],"Manufacturers":["Vishay","Adafruit"],"Examples":{"Java":["VEML6070_Example.java"],"Python":["veml6070.py"],"Node.js":["veml6070.js"],"C++":["veml6070.cxx"],"C":["veml6070.c"]},"Specifications":{"Vsource":{"unit":"V","min":2.7,"max":5.5},"Supply Current":{"unit":"uA","min":100,"max":250},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Maximum UVA Sensativity":{"unit":"mW/cm2","typ":328}},"Platforms":{"Intel Joule Module":{"Notes":[]},"Intel Edison":{"Notes":[]}},"Urls":{"Product Pages":["https://www.adafruit.com/product/2899","https://learn.adafruit.com/adafruit-veml6070-uv-light-sensor-breakout/overview?gclid=Cj0KCQjwn6DMBRC0ARIsAHZtCeOQb5G3DDYxFmW9TmWxzijBIP1Gm_gNAo4PZ00Kwz3CGimYd1dBdu4aAo6IEALw_wcB"],"Datasheets":["https://www.vishay.com/docs/84277/veml6070.pdf"]}}}},{"Library":"water","Description":"Grove Water Sensor Library","Sensor Class":{"Water":{"Name":"API for the Grove Water Sensor","Description":"This is the UPM Module for the Grove Water Sensor. This sensor detects the presence of water using exposed PCB traces. The sensor is made up of interlaced traces of Ground and Sensor signals. The sensor traces are weakly pulled up using 1 MΩ resistor. The resistor will pull the sensor trace value high until a drop of water shorts the sensor trace to the ground trace. This circuit will work with digital I/O pins of Arduino or you can use it with the analog pins to detect the amount of water induced contact between the grounded and sensor traces.","Aliases":["water","Grove - Water Sensor"],"Categories":["liquid"],"Connections":["gpio"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Kits":["eak"],"Image":"water.jpg","Examples":{"Java":["Water_Example.java"],"Python":["water.py"],"Node.js":["water.js"],"C++":["water.cxx"],"C":["water.c"]},"Specifications":{"Vsource":{"unit":"V","min":4.75,"max":5.25},"Supply Current":{"unit":"mA","typ":"<20"},"Operating Temperature":{"unit":"°C","min":10,"max":30},"Operating Humidity":{"unit":"%RH","min":10,"max":90}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Water-Sensor-p-748.html?gclid=Cj0KCQjwn6DMBRC0ARIsAHZtCeM6_FaKXMn5-4xpQYuyJgydq_exuH2PqkKAKnKsTha_iJzXneoWL7EaAohrEALw_wcB","http://wiki.seeed.cc/Grove-Water_Sensor/"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Water_Sensor/master/res/Water_sensor.zip"]}}}},{"Library":"waterlevel","Description":"Grove Water Level Switch Library","Sensor Class":{"waterlevel":{"Name":"API for the Grove Water Level Switch","Description":"This is the UPM Module for the Grove Water Level Switch. This switch is a device used to sense the level of liquid within a tank, it may actuate a pump, an indicator, an alarm, or other devices. When the float ball rises or falls with the liquid to the level of the switch, The magnetic force of magnet which inside of the float ball will cause the reed switch to turn ON. When the float ball move away from the reed switch, the reed switch will turn OFF.","Aliases":["waterlevel","Water level switch"],"Categories":["liquid"],"Connections":["gpio"],"Project Type":["prototyping","commercial"],"Manufacturers":["Seeed"],"Image":"waterlevel.jpg","Examples":{"Java":["WaterLevelSensor_Example.java"],"Python":["waterlevel.py"],"Node.js":["waterlevel.js"],"C++":["waterlevel.cxx"]},"Specifications":{"Switching Voltage":{"unit":"V","min":3.3,"max":100},"Switching Current":{"unit":"A","max":0.5},"Operating Temperature":{"unit":"°C","min":-10,"max":80}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Water-level-switch-p-565.html"]}}}},{"Library":"wfs","Description":"Grove Water Flow Sensor Library","Sensor Class":{"WFS":{"Name":"API for the Grove Water Flow Sensor","Description":"This is the UPM Module for the Grove Water Flow Sensor. This sensor is used to measure water flow in liters per minute (LPM). It incorporates a Hall Effect sensor. The UPM module defines an interrupt routine to be triggered on each low pulse, keeping count. This device requires a 10K pull-up resistor for the signal line (yellow wire). However, be careful when wiring this up - the schematic appears to have a bug in it: the lower left connection of the signal line (yellow) to Vcc (red) should not be there. The sensor can work with this connection, but probably not for very long.","Aliases":["wfs","G1/2 Water Flow sensor"],"Categories":["liquid"],"Connections":["gpio"],"Project Type":["mprototyping","commercial"],"Manufacturers":["Seeed"],"Kits":["eak"],"Image":"wfs.jpg","Examples":{"Java":["WFS_Example.java"],"Python":["wfs.py"],"Node.js":["wfs.js"],"C++":["wfs.cxx"],"C":["wfs.c"]},"Specifications":{"Vsource":{"unit":"V","min":5,"max":24},"Supply Current":{"unit":"mA","max":15},"Operating Temperature":{"Air":{"unit":"°C","min":-10,"max":80},"Liquid":{"unit":"°C","min":0,"max":120}},"Operating Humidity":{"unit":"%RH","min":35,"max":90},"Flow Rate":{"unit":"L/min","min":1,"max":30},"Water Pressyre":{"unit":"MPa","max":2}},"Platforms":{"Intel Joule Module":{"Notes":["Might need pull up resistors"]},"Intel Edison":{"Notes":["Might need pull up resistors"]},"Arduino 101":{"Notes":["Might need pull up resistors"]}},"Urls":{"Product Pages":["http://wiki.seeedstudio.com/wiki/G1/2_Water_Flow_sensor"]}}}},{"Library":"wheelencoder","Description":"FRobot Wheel Encoder Library","Sensor Class":{"WheelEncoder":{"Name":"API for the DFRobot Wheel Encoder","Description":"This is the UPM Module for the DFRobot Wheel Encoder. This sensor was developed for the DFRobot Wheel Encoder, though it could be used for any counting time-based task. When you instantiate a class of this type, the gpio pin specified is connected to an interrupt. Whenever a low to high transition occurs on the gpio pin, the internal counter is incremented by one. This class also includes a millisecond counter, so that you can correlate the number of counts to a time period for calculating an RPM or other value as needed.","Aliases":["wheelencoder","Gravity:TT Motor Encoders Kit"],"Categories":["other"],"Connections":["gpio"],"Project Type":["prototyping","robotics"],"Manufacturers":["DFRobot"],"Image":"wheelencoder.jpg","Examples":{"Python":["wheelencoder.py"],"Node.js":["wheelencoder.js"],"C++":["wheelencoder.cxx"]},"Specifications":{"Vsource":{"unit":"V","max":5},"Supply Current":{"unit":"mA","max":20},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Resolution":{"unit":"PPR","resolution":20}},"Platforms":{"Intel Edison":{"Notes":["Might need the Gravity: IO Expansion Shield"]},"Arduino 101":{"Notes":["Might need the Gravity: IO Expansion Shield"]}},"Urls":{"Product Pages":["https://www.dfrobot.com/product-98.html"],"Datasheets":["https://www.dfrobot.com/wiki/index.php/Wheel_Encoders_for_DFRobot_3PA_and_4WD_Rovers_(SKU:SEN0038)"],"Schematics":["http://www.dfrobot.com/wiki/images/b/b9/FIT0029_Encoder_Schematics.png"]}}}},{"Library":"wt5001","Description":"WT5001 Serial MP3 module Library","Sensor Class":{"WT5001":{"Name":"API for the WT5001 Serial MP3 Module","Description":"This is the UPM Module for the WT5001 Serial MP3 Module. Grove-Serial MP3 Player is a kind of simple MP3 player device whose design is based on a high-quality MP3 audio chip---WT5001. It can support 8KHZ~44.1KHZ sampling frequency MP3 and WAV file formats. This product has several peripheral ports: a standard UART Grove interface, a dual track headphone jack, an external interface and also a micro SD card interface. You can control the MP3 playback state by sending commands to module via serial port tools, such as switch songs, change the volume and play mode and so on. It seems a simple module, but it owns such strong function. Want to know how the sound quality? Please come to experience it! NOTE: This product is retired, please consider the Grove - MP3 v2.0 as your alternative choice. This UPM module has not been tested with V2.0.","Aliases":["wt5001","Grove - Serial MP3 Player"],"Categories":["sound"],"Connections":["uart"],"Project Type":["prototyping"],"Manufacturers":["Seeed"],"Image":"wt5001.jpg","Examples":{"Java":["WT5001_Example.java"],"Python":["wt5001.py"],"Node.js":["wt5001.js"],"C++":["wt5001.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.3,"max":5.2},"Supply Current":{"unit":"mA","min":37.6,"max":52},"Operating Temperature":{"unit":"°C","min":-40,"max":85}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/grove-serial-mp3-player-p-1542.html","http://wiki.seeedstudio.com/wiki/Grove_%E2%80%93_Serial_MP3_Player"],"Datasheets":["http://wiki.seeedstudio.com/images/2/26/WT5001_datasheet_V1.5.pdf"]}}}},{"Library":"xbee","Description":"XBee modules Library","Sensor Class":{"XBee":{"Name":"API for the XBee modules","Description":"This is the UPM Module for the XBee modules. This is a generic UART driver for use with Digi XBee modules. It was tested with the XBee S1 802.15.4 module and the XBee S6B WiFi module. It provides basic UART support for sending and receiving data to and from the device. It is controlled by an AT or API command set. It is connected at 9600 baud by default.","Aliases":["xbee","XBee 1mW Trace Antenna - Series 1 (802.15.4)"],"Categories":["wifi"],"Connections":["uart"],"Project Type":["prototyping","commercial"],"Manufacturers":["SparkFun"],"Image":"xbee.jpg","Examples":{"Python":["xbee.py"],"Node.js":["xbee.js"],"C++":["xbee.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":2.8,"max":3.4},"Supply Current":{"XBee":{"unit":"mA","min":45,"max":50},"XBee PRO":{"min":55,"max":215}},"Operating Temperature":{"unit":"°C","min":-40,"max":85},"Band":{"unit":"GHz","frequency":2.4}},"Platforms":{"Intel Edison":{"Notes":["Might need XBee shield"]},"Arduino 101":{"Notes":["Might need XBee shield"]}},"Urls":{"Product Pages":["https://www.sparkfun.com/products/11215"],"Datasheets":["https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-Datasheet.pdf"],"Schematics":["https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-Dimensional.pdf"]}}}},{"Library":"yg1006","Description":"YG1006 Flame Sensor Library","Sensor Class":{"YG1006":{"Name":"API for the YG1006 Flame Sensor","Description":"This is the UPM Module for the YG1006 Flame Sensor. The Grove - Flame Sensor can be used to detect fire source or other light sources of the wavelength in the range of 760nm - 1100 nm. It is based on the YG1006 sensor which is a high speed and high sensitive NPN silicon phototransistor. Due to its black epoxy, the sensor is sensitive to infrared radiation. In fire fighting robot game, The sensor plays a very important role, it can be used as a robot eyes to find the fire source.","Aliases":["yg1006","Grove - Flame Sensor"],"Categories":["light"],"Connections":["gpio"],"Project Type":["prototyping","industrial","robotics"],"Manufacturers":["Seeed","Texas Instruments"],"Kits":["hak"],"Image":"yg1006.jpg","Examples":{"Java":["YG1006_Example.java"],"Python":["yg1006.py"],"Node.js":["yg1006.js"],"C++":["yg1006.cxx"],"C":["yg1006.c"]},"Specifications":{"Vsource":{"unit":"V","min":4.75,"max":5.3},"Supply Current":{"unit":"mA","typ":20},"Operating Temperature":{"unit":"°C","min":-25,"max":85},"Response Time":{"unit":"us","time":15},"Light Range":{"unit":"nm","min":760,"max":1100},"Effective Range":{"unit":"m","min":0,"max":1}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Flame-Sensor-p-1450.html","http://wiki.seeed.cc/Grove-Flame_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Flame_Sensor/master/res/LM293D.pdf"],"Schematics":["https://raw.githubusercontent.com/SeeedDocument/Grove-Flame_Sensor/master/res/Grove-Directional_Light_Sensor_Eagle_File.zip"]}}}},{"Library":"zfm20","Description":"ZFM-20 Fingerprint Sensor Module","Sensor Class":{"ZFM20":{"Name":"API for the ZFM-20 Fingerprint Sensor Module","Description":"This is the UPM Module for the ZFM-20 Fingerprint Sensor Module. The Fingerprint Sensor is one optical fingerprint sensor which will make adding fingerprint detection and verification super simple.There's a high powered DSP chip AS601 that does the image rendering, calculation, feature-finding and searching. You can also enroll new fingers directly - up to 162 finger prints can be stored in the onboard FLASH memory. There's a red LED in the lens that lights up during a photo so you know its working.","Aliases":["zfm20","Grove - Fingerprint Sensor"],"Categories":["touch"],"Connections":["uart"],"Project Type":["medical","prototyping"],"Manufacturers":["Seeed","ZhianTec"],"Image":"zfm20.jpg","Examples":{"Java":["ZFM20_Example.java"],"Python":["zfm20-register.py","zfm20.py"],"Node.js":["zfm20-register.js","zfm20.js"],"C++":["zfm20-register.cxx","zfm20.cxx"]},"Specifications":{"Vsource":{"unit":"V","min":3.6,"max":6},"Supply Current":{"unit":"mA","max":120},"Operating Temperature":{"unit":"°C","min":-20,"max":50},"Imaging Time":{"unit":"s","typ":1},"False Acceptance Rate":{"unit":"%","rate":0.001},"False Reject Rate":{"unit":"%","rate":1},"Baud Rate":{"unit":"bps","default":57600}},"Platforms":{"Intel Edison":{"Notes":["Might need Grove base shield"]},"Arduino 101":{"Notes":["Might need Grove base shield"]}},"Urls":{"Product Pages":["https://www.seeedstudio.com/Grove-Fingerprint-Sensor-p-1424.html","http://wiki.seeed.cc/Grove-Fingerprint_Sensor/"],"Datasheets":["https://raw.githubusercontent.com/SeeedDocument/Grove-Fingerprint_Sensor/master/res/ZFM206%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8CV2.1.pdf","https://github.com/SeeedDocument/Grove-Fingerprint_Sensor/raw/master/res/ZFM-user-manualV15.pdf"]}}}}] \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 00000000..47b55469 --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,audio,canvas,progress,sub,sup,video{vertical-align:baseline}.collapsing,.dropdown-menu .divider,.nav .nav-divider,.sr-only,svg:not(:root){overflow:hidden}hr,img{border:0}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.dropdown-menu>li>a,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.glyphicon,.popover,.tooltip,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.checkbox-inline,.glyphicon,.img-thumbnail,.list-inline>li,.radio-inline,label{display:inline-block}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot);src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/bootstrap/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}body{margin:0;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,.label,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}.badge,.label,dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.bg-primary,.btn-primary{background-color:#337ab7}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.btn,.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dd,dt{line-height:1.428571429}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.428571429;color:#777}legend,pre{color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}.dropdown-menu,caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:" "}.container,.container-fluid{margin-right:auto;margin-left:auto}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-link,pre code{border-radius:0}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap}.container{padding-left:15px;padding-right:15px}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{max-width:100%;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.428571429;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox-inline,.collapsing,.dropdown,.dropup,.has-feedback,.radio-inline{position:relative}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.btn-block+.btn-block,.help-block{margin-top:5px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control,.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .checkbox,.form-inline .control-label,.form-inline .form-group,.form-inline .radio{margin-bottom:0;vertical-align:middle}.form-inline .form-control{width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.carousel-container .carousel-control.left,.carousel-container .carousel-control.right,.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.428571429;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;background-color:#e5e5e5}.dropdown-menu>li>a{font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.badge,.label{line-height:1;color:#fff}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:" ";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li,.navbar-text{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before{display:table;content:" "}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-static-top{border-radius:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.close,.list-group-item>.badge,.navbar-toggle,.pager .next>a,.pager .next>span{float:right}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control,.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .checkbox,.navbar-form .control-label,.navbar-form .form-group,.navbar-form .radio{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.breadcrumb,.pagination,.progress{border-radius:4px}.navbar-btn{margin-top:8px;margin-bottom:8px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.add-sensor .separator,.pager{margin:20px 0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;list-style:none;text-align:center}.pager:after,.pager:before{content:" ";display:table}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;text-align:center;white-space:nowrap;border-radius:.25em}.badge,.progress-bar{font-size:12px;text-align:center}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;vertical-align:middle;white-space:nowrap;background-color:#777;border-radius:10px}.badge:empty,.modal{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.list-group-item,.thumbnail{background-color:#fff;border:1px solid #ddd}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.progress,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;line-height:1.428571429;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}.alert,.modal-body,.modal-footer,.modal-header,.panel-body{padding:15px}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.alert{border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p+p,.panel-group .panel+.panel{margin-top:5px}.alert>p,.alert>ul{margin-bottom:0}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;background-color:#f5f5f5;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;line-height:20px;color:#fff;background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-bar-info{background-color:#5bc0de}.progress-bar-warning{background-color:#f0ad4e}.progress-bar-danger{background-color:#d9534f}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.find-sensor-img img,.media-middle,nav.navbar .icon{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive,.panel>.table-responsive>.table{margin-bottom:0}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel-heading{border-bottom:0}.add-sensor .separator,.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{line-break:auto;line-height:1.428571429;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal-open{overflow:hidden}.modal{overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translate(0,-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.carousel-control,.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{border-bottom:1px solid #e5e5e5;min-height:16.43px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative}.modal-footer{text-align:right;border-top:1px solid #e5e5e5}.modal-footer:after,.modal-footer:before{content:" ";display:table}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;letter-spacing:normal;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.top .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.top-left .tooltip-arrow{right:5px;margin-bottom:-5px}.tooltip.top-right .tooltip-arrow{left:5px;margin-bottom:-5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;letter-spacing:normal;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel-inner>.item,.github-desktop,.ui-helper-hidden-accessible{display:none}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}#codeSection .nav-pills>li:only-child a:focus,#codeSection .nav-pills>li:only-child a:hover,.navbar-text{cursor:default}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:" ";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}#codeSection pre,#codeSection pre code,.breadcrum,.btn,.btn-area .button-style,.inner-pages .sub-title,.main-content .sub-title,.main-content .title,.navbar-text,.page-heading,.page-heading .details,.page-sub-heading,.page_navigation a,.section-wrapper .heading,.section-wrapper .sub-heading,.section-wrapper .text,.sensor-name-container .sensor-name,.sensor-name-container .sensor-name .details,body,h1,h2,h3,h4,h5,h6,html,nav.navbar .sub-heading,nav.navbar .title-text,nav.navbar a{font-family:Roboto,sans-serif}#codeSection .tab-content{color:#fff;border:1px solid #ccc;background-color:#fff;border-radius:0 0 10px 10px}#codeSection .tab-content.content-hover{background-color:#ededed}#codeSection .tab-content .tab-pane{background-color:#042B49;border:1px solid #042B49;border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:10px}#codeSection .tab-content .tab-pane:first-child{border-top-right-radius:10px;border-top-left-radius:0}#codeSection .tab-content .tab-pane:last-child{border-top-right-radius:0;border-top-left-radius:10px}#codeSection .tab-content .tab-pane:only-child{border-top-right-radius:0!important;border-top-left-radius:0!important}#codeSection .tab-content .tab-pane:not(:first-child):not(:last-child){border-top-right-radius:10px;border-top-left-radius:10px}#codeSection .nav-pills>li{border:1px solid #ccc;border-bottom:0;border-top-right-radius:10px;border-top-left-radius:10px;background-color:#fff}#codeSection .nav-pills>li:hover{background-color:#fff}#codeSection .nav-pills>li>a{color:#bf2a25;padding:5px 15px;border-radius:10px 10px 0 0}#codeSection .nav-pills>li>a:focus,#codeSection .nav-pills>li>a:hover{color:#9a9a9a;background-color:#fff}#codeSection .nav-pills>li.active>a{background-color:#042B49;color:#fff}#codeSection .nav{position:relative;top:1px}#codeSection pre{background-color:#042B49;border:1px solid #042B49;margin-bottom:0}.navbar-inverse .navbar-collapse,nav.navbar{border-color:#ccc}#codeSection pre .hljs{background-color:#042B49}#codeSection pre code{white-space:pre}.additional-code{font-size:15px;padding:10px 0 0 30px;font-weight:400}.additional-code .sensor-detail-sprite.github-img{position:relative;top:5px;margin-left:10px}a sup{display:inline-block;text-decoration:none}body,html{font-weight:500;font-size:18px;line-height:30px;-webkit-font-smoothing:antialiased;padding-top:43px;min-height:50vh}p{margin-bottom:30px}article,aside,footer,header,main,nav,section{position:relative}input[type=text]:focus{outline:0}.link-color{color:#bf2a2f!important;font-size:14px!important}.link-color:hover{color:#bf2a2f!important;font-weight:400!important}a{outline:0!important;transition:all 225ms ease;color:#FF7B7B}a:hover{color:#6165FF}.btn{font-weight:400}::-moz-selection{background:#086AFF;color:#fff}::selection{background:#086AFF;color:#fff}.highlight{background:0 0}.highlight pre{color:#fff;background-color:#042B49;margin-bottom:0;border-radius:0}#sensorDetailPage .section-wrapper:nth-of-type(even){background-color:#fff}#sensorDetailPage .section-wrapper:nth-of-type(odd){background-color:#f1f1f1}.site-footer{height:150px;padding:40px 0;background-color:#729dbf}.site-footer .text-muted{color:#c1d2e1;font-size:14px}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#729dbf;text-decoration:none!important}.navbar-inverse .navbar-nav>li>a:focus .find-sensor,.navbar-inverse .navbar-nav>li>a:hover .find-sensor{background-position:-10px -72px}.navbar-inverse .navbar-nav>li>a:focus .add-sensor,.navbar-inverse .navbar-nav>li>a:hover .add-sensor{background-position:-10px -179px}.navbar-inverse .navbar-nav>li>a:focus .documentation,.navbar-inverse .navbar-nav>li>a:hover .documentation{background-position:-10px 0}.navbar-inverse .navbar-nav>li>a:hover .github{background-position:0 -248px}.navbar-inverse .navbar-nav>li>a.active,.navbar-inverse .navbar-nav>li>a.active:active,.navbar-inverse .navbar-nav>li>a.active:focus,.navbar-inverse .navbar-nav>li>a.active:hover,.navbar-inverse .navbar-nav>li>a.active>span:hover{color:#729dbf!important}.navbar-inverse .navbar-nav>li>a{color:#5f5f5f;line-height:1.8}.navbar-inverse .navbar-nav>li>a>span:hover{color:#729dbf;text-decoration:none!important}.navbar-inverse .navbar-toggle .icon-bar{background-color:#5f5f5f}.logo-section{height:300px;background:url('/assets/images/header-bg.png') 0 no-repeat #729dbf;background-size:cover;padding:35px 0}.main-content{padding:0 0 30px}.main-content .section-img{min-height:50px}.main-content .section-data{padding-bottom:30px;margin-bottom:20px}.main-content .title{font-size:24px!important;padding-top:20px}.main-content .sub-title{font-size:15px;padding:0 65px;color:#4d4d4d;font-weight:400;line-height:1.5}.background-theme{background:#e6e6e6}.section-wrapper{padding:40px 0 20px}.section-wrapper:last-child{padding-bottom:70px!important}.section-wrapper.installingMraa .title{font-weight:700;padding:10px 0}.section-wrapper.installingMraa .sub-title{padding:0 0 20px;font-weight:400}.section-wrapper.set-up{padding:50px 0!important}.section-wrapper .manufacturer-heading{padding-bottom:30px}.section-wrapper.upm-detail .sub-title{padding:0 0 30px;line-height:2}.section-wrapper.upm-detail .title{padding-top:0}.section-wrapper .heading{font-size:32px;font-weight:300;padding-bottom:10px}.section-wrapper .sub-heading{font-size:18px;font-weight:300}.section-wrapper .text{font-size:15px;font-weight:300;line-height:1.75}.section-wrapper .title{color:#4d4d4d;font-weight:400;font-size:16px}.section-wrapper .value{color:#07487a;font-weight:500}.section-wrapper .description{color:#666;font-size:15px;font-weight:400;line-height:1.5}.section-wrapper .description p{color:#666;font-size:15px}.section-wrapper .row-padding{padding:50px}.section-wrapper .brand-img-container{background:#fff;border:1px solid #ececec;box-shadow:0 2px 7px 0 rgba(0,0,0,.03);border-radius:6px;width:100%;height:81px;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;margin-bottom:30px}.section-wrapper .home-icon{background:url('/assets/images/homePage.png') no-repeat;display:inline-block}.section-wrapper .home-icon.samplecode{background-position:-10px 0;width:69px;height:39px}.section-wrapper .home-icon.portable-code{background-position:-10px -49px;width:62px;height:45px}.section-wrapper .home-icon.comms{background-position:-10px -104px;width:53px;height:45px}.section-wrapper .home-icon.multilanguage{background-position:-10px -159px;width:48px;height:41px}.section-wrapper .home-icon.opensource{background-position:-10px -210px;width:47px;height:45px}.section-wrapper .home-icon.detect{background-position:-10px -265px;width:44px;height:37px}.filter-title{color:#6f6f6f;padding:0 15px;font-size:16px;font-weight:500}.navbar-text{text-decoration:none;margin:0;line-height:1;text-transform:none;font-weight:100;font-size:72px;color:#fff;padding-bottom:15px}.title-text{color:#fff;margin-right:20px;font-size:20px;padding-left:5px}nav.navbar{margin:0;background-color:#fff;padding:10px 0 0;border-radius:0}nav.navbar .navbar-toggle{border:none}nav.navbar .navbar-toggle:focus,nav.navbar .navbar-toggle:hover{background-color:transparent}nav.navbar .navbar-logo{padding:0}nav.navbar .icon{height:27px;width:25px;display:table-cell;padding-right:35px;background:url('/assets/images/menu1.png') no-repeat}nav.navbar .icon.find-sensor{background-position:-10px -107px}nav.navbar .icon.add-sensor{background-position:-10px -214px}nav.navbar .icon.documentation{background-position:-10px -36px}nav.navbar .icon.github{background-position:-10px -142px}nav.navbar a{text-transform:capitalize;font-size:15px;font-weight:500;color:#fff;display:table;width:90%;padding:0 22px}nav.navbar a.active,nav.navbar a.active:hover{color:#729dbf}nav.navbar .sub-heading,nav.navbar .title-text{color:#fff;line-height:1.5;display:inline-block}nav.navbar a.active .find-sensor{background-position:-10px -72px}nav.navbar a.active .add-sensor{background-position:-10px -179px}nav.navbar a.active .documentation{background-position:-10px 0}nav.navbar a.active .github{background-position:-10px -142px}nav.navbar .nav-list{padding:22px 0}nav.navbar .nav-list li:last-child{border-left:1px solid #ccc}nav.navbar .logo-img{padding-right:15px;height:75px;padding-bottom:10px}nav.navbar .navbar-toggle{padding:0;margin:24px 0 0}nav.navbar .sub-heading{font-size:23px;font-weight:700}nav.navbar .title-text{font-size:18px;font-weight:300;margin-right:20px}.header-btn{padding:20px 0}.btn-area{padding:15px 0}.btn-area .button-style{text-align:center;padding:5px 15px;font-size:15px;font-weight:700;width:150px;border-radius:30px;display:inline-block;margin-right:20px;background-color:#fff;color:#bf2a25;cursor:pointer}.btn-area .button-style.btn-color{background-color:#bf2a25;color:#fff}.btn-area .button-style.btn-style-width{width:130px;margin-right:0}.btn-area .button-style.btn-style-no-width{width:auto;margin-right:0}.btn-area .button-style.overview-btn{padding:5px 30px}.btn-area.compatible-btn{padding:0}.btn-area.join-btn{padding-top:0}.btn-area.source-btn{display:inline-block;padding-bottom:40px;padding-top:0}.carousel-container{padding:15px 100px}.carousel-container .carousel-control{width:0}.carousel-container .carousel-img{background:url('/assets/images/sensorDetailSprite.png') no-repeat;height:40px;width:26px;display:inline-block;top:40%;position:absolute;left:50px}.carousel-container .left-active{background-position:-10px 0}.carousel-container .right-active{background-position:-10px -50px;right:50px;left:auto}.carousel-container .carousel-inner>.item{background-color:#fff;border:1px solid #ddd;height:300px;text-align:center}.carousel-container .carousel-indicators{bottom:-10%}.carousel-container .carousel-indicators li{background-color:#bf2a2f;height:15px;width:15px;border-color:#bf2a2f;border-radius:50%}.carousel-container .carousel-indicators .active{background-color:#fff;height:16px;width:16px;border-color:#ddd}.inner-pages .background-theme{background-color:#f1f1f1}.inner-pages .detail-section .title{color:#bf2a25}.inner-pages .section-wrapper{padding:20px 0}.inner-pages .section-wrapper .padding-btm{padding-bottom:25px!important}.inner-pages .section-wrapper .heading{font-size:26px;color:#666;padding-bottom:8px;text-transform:capitalize}.inner-pages .section-wrapper.documentation-inner{padding-bottom:0;padding-top:10px;line-height:1.5}.inner-pages .section-wrapper.documentation-inner .heading{text-transform:none;font-size:23px}.inner-pages .section-wrapper.documentation-inner .documentation-title{padding-top:15px}.inner-pages .section-wrapper.documentation-inner .sub-title{padding:10px 0}.inner-pages .see-all{font-size:14px;text-transform:none;font-weight:400;display:inline-block;margin-left:10px}.inner-pages .section-padding{padding:50px 0}.inner-pages .sub-title{color:#4d4d4d;font-size:15px;line-height:1.75;padding-bottom:10px}.documentation-table{width:100%}.no-results{text-align:center;padding:30% 0;font-size:24px;color:#8e8e8e;font-weight:700}.document-padding{padding:10px 0}.add-sensor.section-wrapper .title{padding:20px 0 0;font-weight:700;font-size:15px}.add-sensor .circle{display:inline-block;width:20px;height:20px;background:#042b49;border-radius:50%;text-align:center;font-size:12px;line-height:1.5;color:#fff;font-weight:700;margin:2px 15px 0 0;float:left}.add-sensor .number-line{padding:10px 0;display:table;vertical-align:top;width:100%}.add-sensor .number-text{width:calc(100% - 40px);display:table-cell;float:left}.data-table{width:100%}.data-table td,.data-table th{padding:7px 15px;font-size:15px;font-weight:400}.data-table td a,.data-table th a{color:#6c6f70}.data-table td a:hover,.data-table th a:hover{color:#6c6f70;font-weight:500}.data-table.table-striped>tbody>tr:nth-of-type(odd){background-color:#fff}.data-table.documentation-table td{padding:4px 15px}.main-container{min-height:50vh;padding:30px 0 0}.breadcrum{font-size:14px;color:#bf2a2f;padding-bottom:20px;cursor:pointer}a.breadcrum:hover{color:#bf2a2f!important;text-decoration:none}.input-style{width:100%;height:35px;color:#696969;border-radius:5px;border:1px solid #ccc;padding:0 15px;font-size:14px;line-height:1;font-weight:400}input.input-style:-ms-input-placeholder{color:#8e8e8e;font-style:italic}input.input-style::placeholder{color:#8e8e8e;font-style:italic}.page-heading{font-size:34px;line-height:1;font-weight:300;color:#333745}.page-heading .details{font-size:16px;font-weight:300;color:#7e7e7e}.kits,.page-sub-heading{font-size:15px;font-weight:400}.page-sub-heading{padding:15px 0;color:#323232;line-height:1.5}.sensor-img{background:#fff;height:380px;border-radius:5px;border:1px solid #ccc;line-height:380px;text-align:center;padding:0 10px}.section-padding.detail-link{padding:0}.detail-link{padding:15px 0;font-size:15px}.link{color:#bf2a2f}.link:active,.link:hover,.link:visited{color:#bf2a2f;text-decoration:underline;cursor:pointer}.client-img{max-height:65px;max-width:130px}.kits{padding-left:20px;color:#4d4d4d;line-height:1.75}.sensor-detail-sprite{background:url('/assets/images/sensorDetailSprite.png') no-repeat;display:inline-block}.sensor-detail-sprite.github-img{background-position:-10px -101px;height:21px;width:20px;display:inline-block}.sensor-detail-sprite.sourcecode-git{background-position:-10px -132px;height:20px;width:20px;display:inline-block;margin-left:5px;position:relative;top:3px}.specifications-list{list-style:none;font-size:14px;padding-left:0;font-weight:400}.specifications-list li{padding:7px 20px}.specifications-list li>ul{list-style:none;padding:0}.specifications-list li>ul>li{font-size:14px;background-color:transparent!important;padding:7px 0}.specifications-list li>ul>li .specification-key{padding-left:20px}.specifications-list li:nth-of-type(odd){background-color:#fff}.specifications-list li:nth-of-type(even){background-color:#f1f1f1}.specifications-list .specification-key{width:50%;display:inline-block}.platform-list{list-style:none;font-size:14px;padding-left:0}.platform-list li{padding:5px 20px}.platform-list li>ul{list-style:none}.platform-list li>ul>li{font-size:14px;background-color:transparent!important;padding:0;list-style-type:disc;font-weight:400!important}.left-container{width:245px;display:block;background-color:#f1f1f1;margin-bottom:50px}.left-container .panel-group{margin-bottom:0}.left-container .panel-group .accordion-toggle:hover{color:#fff}.left-container .panel-default>.panel-heading+.panel-collapse>.panel-body{border:none}.left-container .panel-heading .accordion-toggle:after{background:url('/assets/images/down_arrow.png') no-repeat;height:15px;width:15px;content:"";margin-top:6px}.left-container .panel-heading .accordion-toggle.collapsed:after{background:url('/assets/images/right_arrow.png') no-repeat;height:15px;width:15px;content:"";margin-top:0;position:relative;right:-5px}.left-container .read-more{max-height:160px;transition-duration:.3s;transition-timing-function:cubic-bezier(0,1,.5,1)}.left-container .read-less{height:auto!important;max-height:2000px!important;transition-duration:.3s;transition-timing-function:cubic-bezier(0,1,.5,1)}.left-container .show-more{cursor:pointer;color:red;font-size:14px;background-color:#f1f1f1;padding-left:15px;padding-bottom:5px}.left-container .panel-default{border:none;box-shadow:none}.detail-api{padding-top:20px}.right-container{width:calc(100% - 260px)}.panel-heading .accordion-toggle:after{font-family:'Glyphicons Halflings';content:"\e114";float:right;color:grey}.panel-heading .accordion-toggle.collapsed:after{content:"\e080"}.left-container input[type=checkbox]:focus{outline:0}.left-container .panel-heading{background-color:#729dbf;color:#fff}.left-container .panel-title{font-weight:700}.left-container .panel-body{border:none;overflow:hidden;background-color:#f1f1f1;font-size:14px;padding:5px 15px 10px}.left-container .checkbox-style{position:relative;top:-1px;margin-right:8px}.left-container .type-name{text-transform:capitalize;font-size:14px}.section-row{padding-bottom:30px}.sensor-data{padding-left:20px;width:calc(100% - 120px);float:right}.find-sensor-img{height:150px;width:120px;background-color:#fff;float:left;border-radius:5px;border:1px solid #ededed;line-height:140px;padding:0 5px}.find-sensor-img img{width:100%}.categories-data{color:#7b7b7b;font-size:18px;text-transform:capitalize;line-height:1.5}.best-for{line-height:1.5}.sensor-name-container{width:80%;display:inline-block;line-height:1.2}.sensor-name-container .sensor-name{font-size:26px;font-weight:300;color:#bf2a25}.sensor-name-container .sensor-name .details{font-size:18px;font-weight:300;color:#7e7e7e}.key,.value{font-size:14px;line-height:23px}.sensor-name-container .sensor-name:focus,.sensor-name-container .sensor-name:hover{color:#bf2a25;text-decoration:none}.key{color:#7b7b7b}.value{color:#265f8a}.page_navigation{text-align:center;margin-bottom:40px}.page_navigation a{padding:3px 9px;color:#6986a8;text-decoration:none;font-size:15px}.page_navigation a:hover{border-color:#ededed;border-radius:50%;background:#ededed}.page_navigation .active_page{border-color:#dcdcdc;border-radius:50%;background:#ededed;font-weight:700}.ui-widget-content{background:#fff;list-style:none;border:1px solid #ededed;padding-left:0;line-height:1.2}.ui-menu-item{cursor:pointer;font-size:15px;color:#696969}.ui-menu-item .ui-menu-item-wrapper{padding:5px 15px}.ui-menu-item .ui-state-active{background-color:#f5f4f1}.ui-menu-item .ui-state-highlight{font-weight:700;color:#000}.ui-autocomplete-noresult{cursor:default;font-size:15px;color:#696969}.languages-supported .references-link{padding-bottom:10px}.languages-supported .references-link a{color:#6c6f70;cursor:pointer}.languages-supported ul{display:inline-block;padding:0}.languages-supported li{display:inline;padding-right:15px;border-collapse:collapse;cursor:pointer;font-size:15px}.languages-supported li a{color:#bf2a25;cursor:pointer}.languages-supported li a :hover{color:#bf2a25;font-weight:700}@media only screen and (max-width:1024px){.sensor-name-container{width:70%}.sensor-name-container .sensor-name{font-size:22px}.categories-data,.sensor-name-container .sensor-name .details{font-size:16px}}@media only screen and (max-width:991px){nav.navbar .button-style,pre{margin-right:0}.btn-area.join-btn,.btn-area.platform-btn,.section-wrapper .heading-center{text-align:center}pre{margin-left:0}.sensor-name-container{width:60%}.sensor-name-container .sensor-name{font-size:22px}.categories-data,.sensor-name-container .sensor-name .details{font-size:14px}.no-results{padding:70% 0}.navbar-text{font-size:50px}nav.navbar .sub-heading{width:100%;font-size:20px}nav.navbar a{padding:10px 14px}nav.navbar .nav-list{padding:11px 0}.main-content .sub-title{padding:0 20px}.section-wrapper .row-padding{padding:20px}.btn-area{width:100%}.btn-area.find-sensor-btn{width:auto}.btn-area .button-style.overview-btn{padding:5px 25px}.input-style{width:90%;margin-bottom:20px}.page-heading{font-size:27px}.carousel-container{padding:15px 40px}.carousel-container .carousel-indicators{bottom:-10%}.carousel-container .carousel-img{left:-1%}.carousel-container .right-active,.carousel-container .right-inactive{right:-2%;left:auto}#codeSection .nav-pills>li>a{padding:5px 13px}}@media only screen and (max-width:767px){.github-desktop,.navbar-header{display:inline-block}.right-container{width:100%}.padding-mobile{padding-top:20px}.code-section{padding:20px}nav.navbar .nav-list li:last-child{border-left:none}#menu-hide .filter-img{background-color:#bf2a25;padding:7px 12px;position:relative;left:-14px;border-bottom-right-radius:50%;border-top-right-radius:50%}.left-container{margin-left:-260px;position:absolute;z-index:1000;transition:margin-left .6s ease}.left-container.open{margin-left:0}.navbar-header{float:right}.carousel-container{padding:15px 20px}.input-style{width:60%}.navbar-text{font-size:40px}.section-wrapper .padding-btm{padding-bottom:0}.section-wrapper .sub-heading{font-size:15px}.section-wrapper .heading{font-size:26px}.title-text{font-size:18px}#codeSection .nav-pills>li:not(:first-child){border-radius:0;margin:0}#codeSection .nav-pills>li:first-child,#codeSection .nav-pills>li:first-child .active,#codeSection .nav-pills>li:first-child a,#codeSection .nav-pills>li:first-child:hover{border-top-right-radius:10px!important;border-top-left-radius:10px!important}#codeSection .nav-pills>li:first-child{margin:0}#codeSection .nav-pills>li>a{border-radius:0;margin-bottom:0}#codeSection .tab-content .tab-pane{border-radius:0 0 10px 10px!important}.btn-area.compatible-btn,.btn-area.platform-btn{padding:20px 0;text-align:center}.btn-area.source-btn{padding:20px 0}}@media only screen and (min-width:481px) and (max-width:767px){.sensor-img img{height:95%}}@media only screen and (max-width:480px){.navbar-text{font-size:34px}.inner-pages .section-padding{padding:30px 0}.inner-pages .section-wrapper .heading{font-size:21px}.inner-pages .section-wrapper.documentation-inner .heading{font-size:20px}.page-heading{font-size:25px}.main-content .sub-title{padding:0}.sensor-img img{height:auto}.sensor-name-container{width:100%;line-height:1.2}.sensor-name-container .sensor-name{font-size:16px}.sensor-name-container .categories-data,.sensor-name-container .details,.sensor-name-container .key,.sensor-name-container .sensor-name .details,.sensor-name-container .value{font-size:12px}.btn-area.find-sensor-btn .overview-btn{padding:2px 8px}.btn-area.compatible-btn,.btn-area.platform-btn{padding:20px 0;text-align:center}.btn-area.source-btn{padding:20px 0}.btn-area.get-started{padding-top:20px;display:inline-block}nav.navbar .navbar-nav{margin:0}nav.navbar .sub-heading{width:100%;font-size:19px;padding-top:20px}nav.navbar .button-style{margin-right:0;width:125px}.tile .featurette,.topper{height:300px}.tile h2,h1.special{font-size:40px;line-height:44px}.tile .inner-guts{padding:15px 25px}.tile .excerpt{font-size:22px;line-height:35px}.carousel-container .carousel-indicators{bottom:-25%}.carousel-container .carousel-img{left:-7px}.carousel-container .right-active,.carousel-container .right-inactive{right:-13px;left:auto}} \ No newline at end of file diff --git a/assets/images/FPO-Detail.png b/assets/images/FPO-Detail.png new file mode 100755 index 0000000000000000000000000000000000000000..49ec0a88d67e06de39c1068fd594b1c1431cc8c1 GIT binary patch literal 3885 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 aJJR-kJ2hYQjxayO0AOrnYFMK05b-~K4-|(0 literal 0 HcmV?d00001 diff --git a/assets/images/FPO.png b/assets/images/FPO.png new file mode 100755 index 0000000000000000000000000000000000000000..6cdc05c60d5358a947d4bc06e98945ab139ec585 GIT binary patch literal 1454 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 B(u)89 literal 0 HcmV?d00001 diff --git a/assets/images/client1.png b/assets/images/client1.png new file mode 100755 index 0000000000000000000000000000000000000000..2a1fd924093674a65e2a5b92342555a7c3166c0c GIT binary patch literal 12132 zcmV-qFPqSbP)E-GS0y4b~v z2x6h!#-$7Uo&VgsU1Gj4`2-j+Ve6v_F2rga}_hzuNoV-PxOn zJBb68FETQ+0+8|oNNQ>-Tex@;Ga78fMvVOJjb!Zjai4ekPp33Mp>3cmXpvyQW2cU3 zqsNZ`lbbXdqj#a3L>KK|w(UAmsrNh%5cRdhHsvcAY6RUB9ky`#RZfwxe;s zUw?hT0nyjxg8jaI`##vZZCm3tYuB>Z$?7$0C~wtv<*HT8dCwkRrV2pH2_R^Qd-v|K z^A|3#cxs6I4<4|%hYx8#p52O#WwEz!v)gy>use6}z9Nq)9rptV7BpzkAeU9HBtYud zub<_%Z{NZM@@sIdrXanWw{CH{aq}k6=KpTUS=EUOj=d#}t@}JuWWHW$#|L z*VPrj^J_1Yb^wG(QznzKqh3dNS>od2*z@PldE-|A@;?HIpPxSuH}PbP8U>B)>+8!S zj!m04GfQf$wWg+Q`;HyG>ei_v|M=sN1zS72d7HOxVLNy2WM&rT?BF3!=I!mx?vVC~ zjEdrUAWf9V$JeIfSf*knl~!Wzi{EgF!DjN49Euw2??1ErxRxB zRB$i{1o>6~^8XBwbLY;Xks6XI+0?O9$3!uT`KrTL@pg9ho2Y^so*^w$0m%O&KyV&R z%fW*O4Jf>wG`^Qxi)eZUrFa7!XwW z#ful21NjVZ14u+f1R7P#^U$GQOP4P5t6HrZhoQ2zmY}1j%SB7Q#WDO=rD|1S$&w|0 z1XM4IUbLdAvELMsXo3p)qpXO0Dgb%MfS_WJ9zEKFz%X6AcI|qKD7v6A$_faMpzmb4sO3l>}W~UE%xhzkeDU8afOOAf8ha zAnEDpXr$Wv_U~WPt$TOgr4CU6pjRRsT7{6P&JnNc+O1nWrL_WSDin$m0TIiF?a82^ zF|FIQmWgS!@6aKgBB|;4t=t20@?=oCmhkY%mV*Wjj^&lBRasza)jwjyheT6(%867x(Tp@nisx5hWnHA!qQjUAuPKw`3`t<2@Uy-h8S>DY%%ON{co`nione6;Zbb*UDyh^pI zLM3(M;P|}x^S!QIzTCs!-hT4WKmUBEI6tE#Eum8k0L5vTlKc}L4gUmr+uGSpK6mci zfQgePovvP^IzO(ht0UC?xL)CTty;Cp_w)0cOXjCixd-Hb!AT|24Gjw$y>#hPkCiJ| z?hOwQAMfbsxUEf_Hd3+Do405ot6R5j9*<7c=0vL$07~*fbV@KkTBVpKEe*3%r%s)` zPZ~8;isd5bI^oFCqiaa345lc^(cH|;HRR$&qlm~zt<22Ka$omMGZHAz0uy3xZqEG- zL@39O9mBYbua+%acBEdtdYQaI$j-kG2%XmeqE(9KD2o|l>ae(Jvu4si=FM}sdhJ>> z3_r}s$Y2LOJ<&nO$Dy1%f1YJ!WtH3d=1w*_|12*ji@nIsU@vmB%QYbP@84(Jwr%5M zJ`xfVctyk3<2O2Ht*x#7lIGBQL!UyY4A+zfn5F}(rKKe}IXi8Z!yaIyI7G=da8aZtVj!c#jdFPi2C-2eUi@vUTfLW@cu_C_H4a-yj_~w#UWg4_#^$O+d8D(C}sX z?M*ce%7D(iJuZ9x5T|4S1a!3%$ZX%fedP)eJYXUi=qli&4y$bjr}j@w(2j(f}#xoT7jLVhGB7o}k#fcP}6I z_@M!TkAc?^=yevMfS(5`10a8alAHE~y~vWYf}9WQqoAi0<2UdgM1-R_KwjsA=)7U? zX=xEou|7x%fQXQwm-X7UYb==VB|AI&gZUUD7$Ov!@&&Up)!;P2m}oUIH2O+hagWpU`0*I zI|l>~Y);x^mYw{F$)pnQnZGY74vv>K2tCO<+QQf0ek1h#wV%*OEq&FZxnCCPQ_BB+ zG`5<@kvGbKp3~9*d7mPV>VF*+?+}nAmYb5m@^Ug+ngaen$&L3uLem+nj~^FWv}#3wRQ})^L=%p(n3Z=62$`9@)C894YsC~#;+aGyFBgC`Z`ndPeB=l< zSard|(o%R37bo1mfBzp9hb;Tjah8$#gh`~* z59@=_(|d%TW<7m9VcGI!0>%FSI2_1h>9S>lzJUP&;v=;D^wSRp2>cH8d0?P)xdJ5X z$|;toNcrG^G@uCLLP&`4^Dn;$)v8s);9z0S+_}QZlP87DjEr{%1=2#AbLPwu+P7~n zRIOT7=+n2aaPi_rp+TcY9|RD9fle^^9(cb}?f}VGB(p4eDoag6|A<=NBOp4ux_p$` z=+UEvbLYU2-?Z4_EG-}+KtNw|TCksCGls|p?RG>;MGY~iz*WlVoltxR^ zR7ewPo0ymg2PrS)IeOG+UIrbV_ty^st%1SPm?nzub8Iojr(6P(qex{6xs*#fiCiZA z#~~@MC$(CQ8p6PV0|j$)bHSg&UNqnmG6TJP_ZDi`sUy^HP+u4`X0+hy>MF$Ejuogv zUx5P0Vq;_ZIe-pfY#q85X~3i$JmksKHlsWYDKF$H_M`$<=l1}J7|P;JH-?wQ~!$-YWu3XslUE`yVuxg>O zZv8sJ^YCH8i$c-On>P#n`}Y^BQ8(XxsU;7W}FKnV~ zyu7`ILzIT;I#Zq|(iZcnM0tvN>*(qTPR`DMprQWB?sMFK0yU^OHs*fw8Idn}Ix)y0@rYYv7IUYotOw7K0 z`xZij{8KO9pglMMB>z(yq$nW#1s`3Dx4;Dj|I8qyJ9qE&{q(a>Gx*d3ybCF2I%Q>g zsx@EcVP5X%ty>EdCruRG+}wl{5+x`Ek0X}$T4~G;D2@UeE00dh^It6^}>$@K)?d9dQs$IKwg`>$!8}x&hX}mGj zQzsxznl=#z8V%&qq*+r9AS&^5MJP%da3r3OGLRYCfax0V^8V217*B#}o|+B+?*T-e z2Cm0QwHH~+cUF1uL$LMp_ZzTm*)s3?_3IaCY7?DOMvIBsrs!*XEsftw8Z^Ysn664| zd{Y0Df~Curc>DVL4$v&qyAYTY3=70q+@g*CuLDHXCh$#i(t+>ye}CSS z`7QuKm$?|eLW*n5eHq!F+^yC`qT>|1C5Wve@0Z18z&-lyC;NhL-a#U{$$l)VL zSOHy&Ww%j*VWFW7_qw`n`QnQ&3RnFB3`PA6$d~QDRJb2-Hwy^~X@Jq_Scn(pICSXH zTLFS=aX!j{hDb?CW$Ee43P9clkQ~hNBS6ptiyKF!!GS9ZN?8HH+Uy7wqobnu@>HRr z7r$I)27OzVQ!NqO_VEEu5h6W`wDrSIeUh8X=8rQ+W>-VQ1+z9Nrh|4BfY0j zpHZ}uUIED81qA&7D7d)P6Z!_;7Ldq@2zKHxzJF^BlvXiTLU7#aYf!@BOrW5!#;cVyaJGS35Xc_iHpXeuRvT)(AUqG17dA$ zU1mV=B=d+NA)&$i1@pT?;vYR~Am&w8K(O=_0P!J56M*0xlnrG>S&N3N6@dJMfQTYi zI&KCp?gEboGV&Fey}dmL1nZ){4iGdH8ve@Ft8Ds=>0EFPKma(e10*ywlmmhV^e$Yu zz}GFoq$sh0OX|m{0OUOYqIpAw6-JGE!&$ax&;7KMzq1{&(Bw#utZyX@iz1YsXdvAmsoM5fU^U{19}M z@zt2A(E&&V`3;8-9VY)F>?J^^O`pc4C?J3f>$IaGpq=o|803+hlFZG?+cZQ4Ams#* z2m<6RIge-n9!XGTVjWXds#viAAQgaA0P;Qo$<3*im!Ay~LvXpJ|a&l@RoJ>zo zZ-(-<6MO#9Gof4e zZjZZm>zdT9TQ@FUHKg$W?%k4p?A7a@@x+P8NQ?Y}29Qc5cybL~U0oLq89MYrw;tW& zNgj9a-aYYk(ye><$3Oh=!`;!NN1yWZ_aBG!F#5~G!^5J>_gxa{w}kFJdOW7{l1ddS zTlbzl9t|5lJk;0EZ@NOE&=vs+I(6#5w*( z(iQ1VM~?jcVdw9@OQbTra!pSv>kmKvn1F3@X?E`N-Q&T72jBG%@L$Me5q=v}mi5R@ zolr?go?25#nNmkcn_OE+oBFXJnN**)pYZ(@laGYdsUPwEv`O{ow~qzsw5Eb|NtZ08 zyXpDd)Wo0iNqb;|RMrV6mf^P2Al+)xskBi{l?KwBTvK)ZD^go68pkG95#%#l2(i9< z)*tZ=V14`cJtU6Rz!#rB`skwq3?GD4*AVDP}NdqBmRtu8P1j&r%1VMEn zbz)WZwg%r9|4*CRK#e5P-um-& z3roul78VvGcbM%M1KFyV?QwD0_Bz??>bhy&`t<=?I@$%8PT}e4xdQKb%*@R8AU$1uJz@2l z)w>rjS^WEgg$u_lT%?i(i~ibQxOma;v**m2^V{zu!^9~WmX?;zd_1bRw=thSO2?Kh zTY6%zn`@cM<+6A0rkxJE99y?-n~Q5_%$RYI(yQm?<+aw)$!UAxxqJD!TU^~-Ex%~@ zWf}*)eY<1_$K5+|Z}?q2mo$;t0gnS4qN1aJVv1-2WKBN;q)}lbO6Rr9m2EVXN;ev2 z%QhHhOE;*tvW)}NrR)01(-wYRkUE95!3@$Mvs8_rGL8Wfn`ski7PyUAFTTx!fo_ETVJ?oGecjbq4 zUyD7df3zhH(vWKs>GbA8>KG+;)VdhEazqWjzj-PaBOukH$0_l?)S8v9$e!u?80r~dZZ&SUzy?Q!1JMpga z#K(!R$Z=`}d@XzX_U+cHS#R}o$mi&`V#NwJcI;UG<;$-+ex*oylGOT5zE?x(jxeZF zMGeUABQcj^w9U=T962C*y282h=O*D?bjqV2yjD@rM1{18BlkXr^19F5knSOES;l*M?Vxm6zIM+EKefnHFf8j!-bfvP` zxj8p(-p~MKiV6_Pl)6Id_E8Ds!B#1DjwnfPhJs}$+|Ch3R zn}#Oj%TqtgKIy=?1|gHg0Wqm3q%7}|pMF1PRQ98rEbCr0$)#5$^KKL)$CroEITt+G zoyc>{&p&_-G&16VeDlpWsop-`-Ng?Tmn3M64I4Jt;F^Yw8s&V~rAxPk3l~Cz@Gnqy z;D9`7BYp~_w6qWk<0Asp$iI>QB5II>F_$iB6#_yUAv`>M4Av}ps2)Ma*F#rtRr~Sy zmK|Om8tbSBMia#Q5Te@H+7tqEz{6u4UI^YPBP0Y!3lWf^!-gJNymYZXnH@e9p%4y& z0K**!5Q86o>cs*1rC;Am#{!Qvrut+>zkXE+2sbgW0+N_1m(JapuLGo;1|Ta}t<;|} za|YY(xSMM%G(OPyU?=a@XaDv#y`fO%C-V=go%$GH8%WgEVd4Jew-}u)BxH zmi_MT7R3pvXmf|%4wmGE@z1F?Yu2ow_s>7~^!D~<#uJS1s!U8r#S;xcii1Sd9BMd9 z1*EdB?i)o39sbj?;9_X#5)ncIWI<6t(BA?`?z{$)mo&)Gp+{D%T&cfk@nSZ4$`n2X zlb|RbkiIHFJP&!Y{qFlYB;sK35={)WfCxxtCg{sxnXzFk>sF{rYv7yn$&XlOWB|*& zexap&=d3#^WLnY)3;>cgw~dhdAZF~#8bl4qEJQxdR3?dh7L_y>q%$Zgn$eK&r;)Rp zzHhZ__KmYTDPjJv0HUQ{wxN>7(hc}uOIw?Vc@Qkit=SkxgN&}m#>O_H^6QKrSG)$n zD0FmuojP@j!vLQ_Lvy?q5X_}9G%|WHbH4tW1gV%Eh1$FP_Ksc@+?KghZhjt1-*LrmJImsfFz1+p8j{B;S&mH3%`C@t>#CV1t&8aJScwf&>;`!&!6u}PUF{V z8(W>6)K>t(h%vr80BH+M{H8FEi>s?EcQ}KBf?fe+w;B*L4JS1;EOaWRQDys%9aXKY zt*csU2>v&>u&7EJu1etX!0~!|dVGlr7Z(@Pl1vN)fVjE26_yFkH>Or-`WHog5SW-n ziwTf9v(Wj55&N$NL=>1C%nnFNP2uBgi-}?g5VLWQva++amAAr~;*={>oZZhdqK^GF z4<$F7k)P0B>ApHL6#zgxpmE3R3JUYFv3ZJ=CRxXKGKD4}&<+c}5#-)xe(8bs%M{0K zSE!{aDK1loa?WJiF$q*_Bra(3%sY_4bx76^V z_#Nw&nwpwMQlo#FmX@ZC(dHOIrk);A2*_6&fS@ZMaG>%5g(&zs6h0vahgYpxN(JQX z`EwKT~f6V*C6J6vswzl&$0r4RSL^x0m z&2ov5h+nLFmw-SHdLE>E@Zj5*0f8T3Lh63=(BzB$)1!E?7B&2VSE=p1GECy4rDG;jP-@gv-@rGvok2nwb4ztGodiIhDu|gBW`7H zK_2cmMiF4m6n>UW;crD^%|))>%DlF+%&Vu#$BAdx!a|r2sacfT=Rp&?y! zG`@g^uS=dkf4&u|>~K+&7#ka(ym;|q`>3cW%@6n07&B%}9PcFR*g=sdNo$)&8d207 znvI|d2^tBI6frRr=3aU!%sqYP%oOBGji3@sW{{hT`ly0z{v{;T>gUmgHnUn!b%F&fm$dA9c5-_P9h+Ykx`?dmOVT?*wLd$Uy;M)ON51mv8z|F z_QD64IUuuUAH-^fyBr)AavzHTA?+~&VJ`A5sZ1y@$_*1p;C`1TO~mh(~o%kW%pptPSxfYka6kQF@zS*Z6E>A8bUb_S5xFomxLlY8%A zGH){`_c7;yyts9ag@;^V-t-iSfQT9d9cAQg_jGh}WPbj>Jn}%N5>#$jcsRnsnk!bU z@DiQacJ13sNRv!OxlWNUK|aX=RW#HrchjGL+F4mzt+BSYURRn}Sy`>yxpU`g`t#yl z?TmM|uSQq9xw$#-YRB5BtJka!peKGcv9qo?As@nY*REab2M-w%BSO4k<3?9>CHVOI zOvZO+aBShig}!v&YUKO6vRPPItl74GyY*+STj$`~=`&_{?{#(6v){RsSz1{!@{6!W zN>Me}6_{D%T8OeDQ^nY~xQ3jt*qo zZFy)Gd;2!`^3Pwmz@k)B5z97*+sg>D-Uuz@;^I1X?b`ME-zgW?eWeFwUUEtb*BWB#a+XS1La+ymzY)zsE`~9@Erm+H z6dldhn6BMDV8DRqqycV*Tnza>=v0s@6b(Ga`w=h>0-qYiJQxh>AzNSF%);Dd;J|@N z6!9dIZI)cQa%BZ+5h{fgQ71*H#&Fz94kp!w)A=3jN4Id zmDedMxgOH46ltG+E3|#q-N;5cN%uc0$j#QtO}ND}PdKprOgYP!J!cf&vRu+4*-3ZN zU0x|G{(6h_D`z_>uU}}Fe)U{??0EL<*)|ll7{Kwuy9Lde^cZyppa2MZAn96titF2xztYal z)vY7J(@Cs2I;WPOzyFsMO17tS+Ig$Rr-<-lzP|0eeSO=LquM$?KE5i<8p;OW;oiM_ z4UZf>+ClSNAN7`;$iid({{E_TC_i#i8&L#O8Qt&V{2SaSqA6-jJ@PA>lmFF0vs~Vq z<#~DA-q+9XOG>Bqae824)t{@^>=8vhi3<0H>9Njg0M`SR||&_>eyR7+z;WM*hnHE$O~I>y%3y-8TWA5u#ZRrJ%wWA zgC|RTStnj2mQ@t>(p9`q0v{$2hZ+{mTfAS)_QyH+2(*if3;zv~4MkME5ykw(6_dnr zi{1R1^@X(YKPIA!OI&E?D_(iFENj7_DZs^1I3$_QWQd!zUb=Jt40(uF50qX ziyftD^XH#`?xvfaL7GWNZO`vTjOa(y3jf?F)@QFT?@+Bj?S~Qv9{h$rpx&B znKLs;%hdq{^fXr?6EX3?fdd=t?CfmTu3c+AWa!XM%a<>=rf}JepdB9^96XKee-*5) zO7~oo{F_AtLR(7XS4!UuY2*Iv?d`WoB$CevvYx0zDwj3=ZnJsw<~`(ej}kQ+L{kHa z0+XxRChr}PtdkDxMTU$eCOv&+_&ms6wQ7|sdD{2(?%lhTDr*r%52t6%nst*3+Q`P% z*7@gOez_SKcx)1BhMA*AjY=FeXwZ5(f8^4oOKRY7 zN&t=S)vMQY@-KFfUoej)SwgToOuM?EbDG5;(W|^yyN{M%IMtM zwqv_Fz@aC!8dd%S3JD_#5GQMEYZn40=J(%!zx>A^e^l$xp~I26bLXCQb8~YhO)wB; zMum#L4EkNxtzYLle8h+t0>*?K${%l2)Ij?K>DWD2H@D_6g9J^@Awz~-CM_`?oj4)ggA0izk`M$?Pfv`Lo}sd0}ePr(PYx3Np}d+0R)zniOEz_N)bKDWOOzhXc$E> zZYEQ^v|IOXX;kdp1pfwVSY4Q4G2$yta1ZYtkOJvbJ}xBj(ghZm@VMB-0SKv8cT$zM zqM4v$U-anF<2jj$QI3v|7T94s(5iJtH~ zq$OPD&7XfhDk@5A%9JU+hYTBbpPs~N)Y!vs-MUq$sNKa{W#r}SQ2xH_*RQuxhkP{& zh6lg>_S+uH%Y^cowsPglJ=7@I2#o4qfBp60Wy_XX((j|G5!z~|iM7b=ciOX!8#g$8 z-?eL;si~O;Z7BS=%-qo=iw+7Hq)GBS#$2Vw#KA249R*Cr+=@$|5CMbtwY zU^bN_TuhtHKuz2u!D>YJvx79~4Jz|)e8qF#y!nA-k{dWXJDZLe`CB4AIL4%1`@hY) z@9$TGq$Tp1S8)kRn&vK18+h_uJP{{8!>*xJ}QlInFQE%1PD@B}qtZF@U=kNNZG z@0CiVsI;}l#>NR0_KhHoF^!(MN1HZn(k1n7K#k$wvSlmb{(}cU;|ZKMZ(cvD#B?hw zt3C9jZk;`Qwi87S^U3z>04g}9a7amXNQ0c&xN)Pix*7M(#?ccxI&}d*b-K!nJw2gc@4>C~`VE)kPr3w5H(NTR< aK>iQ^3leo-q;(|#0000NklPM8QU;yR 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 FV1ih2%qjo? literal 0 HcmV?d00001 diff --git a/assets/images/client3.png b/assets/images/client3.png new file mode 100755 index 0000000000000000000000000000000000000000..04d7624ea098c14b8c7cd6c2856c6b27ac4b195a GIT binary patch literal 17776 zcmW(+V|<%`*H7(swXJovZ9BESm8;Fw=D&8jDz&xRtKF`)ZMRSE=S7lNx$?;m=X`ad zfGVhWcvNj$FmjYcm#OlR0UddbMt|$g^IAH|7iQH29fK$W~l1y4pr(# zt%@@&tmq%kSLxBo_$cB@M3^RX1sT(rjlPwrHeixnT*t7isu-gDq3hf1#=pM4rea}Hk&=~;0{@l6#3p5SSpP#CPcF*R{BwiJ~vCNbIg~yU3U1g!3=3>buoqp1LVRv^c$bx$Zj`rFcvoC zOAPWfrW36)cosv5j;7|Ti&f^Yi}pK%G5A!Jl;Skof}4d=sK8G}aZ*2nfn3CK9N{UC zalu_542k=gG6@A-wXl=l$M`y(y!KAKLo*IP``S3$_&-0((~3Tnpj$b`-eJT^KOEuR zf1+~T#~EV6_}Zf}77X<~>X)}1ee7nMN%(N2UX^l{Yt=Rez&Ie92s+jHye zD0HM2hsaj@?7@hjPQZy4)$xZg=5D*p!0S2gxAEj6K$QHaVgIep%ah!Aj)?m=n0Zm? z`41?louda*s(_}1$m^RgGm7}1cKYL^xKu8`2NQw0RJP}p3pC*Kl2w|G4!VD0!cu2L z?ob6CpP$hEFW~-@35+r3OV{ZW_i!@YvQ#5&er2EJby+Rv=Vd}8;`0^j;`R`M z>f>(^QLIy9K&TCrfqLTaXRRcQ2uB4zUpn7$_&}dkx+EMTI`j2h(!NzL!31CY#5)+* zhXg>@)Zpz>rG6^Z2|2oL#)t=8qq5@LW(!>Fr_49(WmKW)p<%Ba(3!cVoN z9h)mscGnlTwhcnihY8&MiWb$7Z&~DxK8?AbPRs!D(q7Kc>$wAdxdD^$P)R|ZM(E=| z0#XK;EcKE-*&dj)%WQ6+|J*JeE{f7wrFU)*MH|bm#_jM~kykT0A-6{q#dchpiKOda zQ-$<+mKGJB5WmMQe3I8|8tSDqbH*lrf(#L&$hSAhC2C_1`g*6vFsEq{5HbpiYHhb=I`iS&chHEw2xkIt^Rpea{sjH zohcV(a>_|nT(fD`R>1~0vp{*9RYbL-xmEvt_XulE`KuA$uFY$Z-KGQ z$M$~{?8vD=WiYo=sK@Q``g}!B#tZEysaWP~cy~}@^+RF?!%!3)3O9RdX;%--)$(NT zgr=oiYaqr;10H_T&Yw|{dOIJI`jx{Hm~}r25m6DpSWV?k0PaPRPWWUfpHLT7q}a7c z-`|N3zA^CdXzYP|1vf1}^;|511%}p_!zonwerZchG+@uD+)6cOH$-0Fec4_Y{E5h{ zx7RRF&BP7P=J|u$Vs$v>9N;Up*0sJ_HCR}NPX49*-B*gO(YVmvVknBX(LB`WwnH=IBJ~{k7 z_RQ_M^jq&c73GobKVBF)V?VCe*)(`HZs>qBj$h-MKeog%`Te#yTsFV6 z&0<#Si+uCguiv6g0egQN18dyz=mmA#lgm_K&5d-iCy z+;iAsf5Ac(kW?WjcALj>5;F$4=qO>fV^d9k^N8o5KM5 z$DyW=I;Fvo!+UZ_A_*dRyfh_cWIZeVVSA)3eu4!sAt$ zLsCMxQ!x4)L3V(TMK1alC9Tes_|mR?|CIDo?eQW8DJ|`HLtEPsnwVAKOE>ELSUL-~ z>-iyKLKuql-D=B8mB}W_yp7*W#lWTpocv7zp}(SL zNOn_&fZualynks)$C3Rpz~eNFC-D4KWag2nKF+3B4J|#DU7&7UUd-1OvRzJ#SMSczt3t}zC)9j1rzN5eKE5+AAAyB1OFS9h*WZ$o+hRjt z?v`2bHWk$e*SlN{enfFPwCb)e?44kteoe9itd`cL>Kn?T+twc`K%C7*orO#c3&3@% z+KASv-R*=%yT%aGPd-&a9xydszb^Cmyx&4~>-^gObz3F0MjYNE2DVJ)jXXg58)pA5 zRAWyS^5>P!s~BaZ64VK6*pWy@+eiV*fmWyE%9c-G@B6~Ml>^QDbNJ~-w=eyf)oRq_ z^r$db5?b+(z?V;c@KUug_2Z`fX0tM^Q9B)r(I1*>q-VQov!#Z z2owwOZji$!D|X&)8FzMgPs}@z%BVBI9q7w@5bQe8#*aFDb5WJOBh1w{zjEw!GUZ|e z-J(nBy%_PPr}2oX-6^prxcjF!sW6-=sy^R_!1F9JvO7SF#*ptbT}1==7dZ>mzZxA! z_FBhoRG?L$04=y}CI!W($FZBw?JDtKyJyXlSQT^7J7uP-E31jmU5HuRV+q=Yv}*oO z(v}~R{ZH?{#KZQ>)EFA?=w$5n7G06UdIza{gBAZ8eB>yrTPcoQuj``?(NmIpUs-Gpmv{0QIN$Kwi z{kMCNRG0~?+7Ks7l`JOoRGi8-zAAFPHBVZFDqu<_sdhk_=J^~`4RBwCm`WETQDw?;NZY-xdl*uf6 zp@fX~8s(1X?CTK~>RKwj(`kzN>pD0xOW0`OwHh;u*iZUy!)WIM3&YuLRlAK&$h}-P zy?W!Q^Y6gFq#5sK@IueSyxdIy+##DL1it)mHUM{hDJ=;{znp)Nnmt`=OTPMS z?MF}#6xe>_#}w|@@7S!D7eeQwd+1SXYRIQvbX;T7uDnVsX#MDXjVzQ+PylXrcyq1~ zvAd#iiseF`h@zc9s^yNLj`Y*%(#V>CdyYVnse@Ll_gF=Fi{tG#=Yvo?9jUc=d#dem zdG90T*$KOy`{QIRE-1k00kgpmqF=Wq6Me(0velCCV8|6T5txq^_z{Vj81wyTK(y^JMva(TL(AlqFp#r7e-Un|FcXq;1c6vVE!`M6}^)qa?VROFTCs^r5BCG+tG1YI&@`t%;2MlqQq zLJczy!4-(Mw*3@$m$QS4JBt$rUI%B+^Lc{-pGMG1HB$0gghoaSiQ+`S1Y%Z+D<(V% z+OY6<`hd?3kI}l8pO3*IVKIe;Og-e>E=7n)NSK%a4==CQ$bpP}A@BdXWfsZ{=0{%y z$a^a_8Z+i+X=89SFt1##rg-Slr~?1VRuA@c`AhQxT=C&Bp}h!iv2buw{=Wdg-s=ax zO!tPgerhpo={fJdpqa7z#QJW(b<2yLGJ?WO;7!XD$OTnm33v>1U`ta~C{87~(6_0_ znR%)1E;fwZ;6UwAY}oWlUzQ5w%WU|`b9i5u8(!63Pi<@t)d!<1Y_)m4mMaV%rG?u) zayKfYMyLR#GSdqcI}l#0E{Q$e`NusO*OL%532^@d67kss!+HR6B*M=DhKE#e$hI>< z37}?ZuxuOw!z*t8i7?)E;qz}3Shz7ETsC)vCpoQuth0!sa z88kO;bWf=o_t&`yBk3asb?}CTJ-+87+=t&2e_zOKNKV#maw+zDJ&1$dtvu!&gzN^* z(FYUwy;f`mWQlZGnc0lBRzO+MxA3E24PS2VSx4-=%_~Z`-mA{Z)dLg#_8`g%Abpi9 z=z`h&bA?8m$>1YhOxW&V90z3FvZxdPK7P!}@muVq*KRn0lu%)%iaUU?wn<#pDmHvgo*hfwh}r3NUq!m9+iudLhp6 zYPTaf5*ac_jLye2*Q2wyKEI*0y+kyqKE`Xf~QFl#Ry$*?ixgJQO=WZVN4-NBrxvy|+d2uxs^} zcl>Xr&`CWQtmV!|m=g@G` zRuP{?oey~@;9#z@YFH&(z5KL@Ww3 zKY|AO_;L3)iNB5Imuc)8HlORuUH47u7!#Bci@xd9R=!9&b;S~AgVR5G+ckW9rr?jdnq!e+L?#|bN3Z0rR zQSfG`FT%tFDoS%Dk-)J9uy_as$ipCO9auyzZr{X8FbQSFl1#ey;;LM zy?zOZ?L~5zYx=`Ftw>-WSX!RFw>OF_fBBEMkBUIT;0dHUrGU#=@GVN@#<+VoFYFg% z;+wCYaOc1ZH)>6=ic+Z4zS(%%V<=2Xpa6EGQ$dtAcIg}^GPiVQ?HY}ReTNJt#@u0|O|681g!zL6O4?||a*LZUq<`?m;X$9x%-)!+PuNa!u zIu#Gn3e)zIs%TJgsbEb3~X}M<+Z+P z`e|0F?{6vWk8avKm=o0!Y9mGeRxNhfzu3O?T&S8|kNz>XZq)Tt&q80E&RULAZ(MT~ z6mAVHt+v)}$pil|-7=^$FK$=(RbEjeY9ym`sbk3+5^`zD-{p9F{Xq58|>E6-wQp%`Hy{ro`pLZ>?IBLCH9=sqe6 zFtjP&{@tDGiK$UzjU>vT&mQR0_4Ofl+)2i9tZ7LoebNqPuB2hhYQEaI?Z$2rvqsSl z4bklzTTD{nA`Km#<%hB38t%-r4+wD`kqZfRu%o~t$IT;DG<|x&7?*9-2`ivP=I;7| ztT#JJe|qe4rs@^^pL9$)zOL+f@luuEX`SAjWjdnRpsUr~jNeHyw1pX90Hm;xjzK0g ztrjW+#f^=*Ws}#vKbdR}y{rmd;kDg2D>SwT%M|DEt=4s?04juB#4qD2BJyAb>7tYq_MPhJCY4yH*$R0f@#g`0Xf==z9wq3ktqS3_*{!`b-Y z-?E^bxbO9E;3=MEI;5kr^p?XPl_~^Qg&ur%TPQW5+IAFSqo4^1cz+~Y{FByF#ACJ{ zfguqmr-cgvMMwV_MYc9H1GYtjfq!DV^A-(ldY+&kC)xWg|G;ts{Hj_dLb#?P7B-ea z0q?R3ZZgP{>~Rz&+8j^BVfgPPecZ*M;h}+mIl4Sy-v`F=MKow#Vv;>On3sElnFhO- z8D%0a5;l;@XWf(ckK+1$^RlW&`WQ`UP4V=5SZt;$zOw#Q>1i_5uyE7etpdWnT10xN zXbrX>+b$AUxqH(6!T6*3CJUuHm+zN-8$Y};9Nzb?Ew0~|UF)3RUpxlYgHn?b6|s5! zj%sl&WMWC?{(*aYC_~`m&Nte|Y^`r$MReLl=LrBax^&bmQ1c+^FbXNk6$?qllj)N4 z85|-L>aAFLjoW@`?te`dhlk?Arl#(Q;g!xCEspsPAulqXG|Dp!sb^Q$p3`~Wun^Ae z*br3H4*k?p09%~}L1_z>-nV0*(1Jf@TolK$8oP8Yrtj4m1iWo4rLt4+Zt&u{LqNh~ zoBP+PV0~6$AU?~RT8|qS9^S2Lt!tck7*$XdV!WCG0EhBmt;u@v4Eim495uqY+v7c( z=VBUMoUBl8ZEQK2VK#<15L-3}OQ&2L&`T~f@3`5;1EQtj*!Qs2BL*@N8a_V$HC@5sWUAuLww(~BzsbuMx6pK$njAAO=E zeOaV@wX1I_48+Uhts~rl?@ZR?{o(f~ORMd^s>mu;XeR-kKE!OuZWm|Ezd;B~D0VRV zk|;evr49K?^3si0OT zI_7i-ciwE2-x4AdHj=!cS78br=UaSvpbK%vI@OF8urd6TisHU=+Z;DS~ zd0wt)Wr_zWUd46&z@CNgymSg1cR~q?WbF7p%+gTOa3F$0o!p*v*FUX$7 znfn@FrP$0cJ+Pckpea5jxXT0P=T}PdvXDM~4=zp?9Sa&_CJSH?I5@u_u{jz)Kq~2n z#QBwcPF8TZrLeQQ-kl(MrCB15RBl3FUzch=k3Dk#f2cn=LcSIX1Pu?4?4EFF$atyb z3rr+ScWQ(X1t_BC0F7kmAQY5!vmN~~=T`K=U?!mkiu)BV<_N<|0EL$U79Ms~L2OcZ zQNRFV=2U;n)ZXuEbeXFx&8jhK(5@Wt@sEKYAEk>unI|l$uz%ndLOR&K$unxd2j3s5 zaXKhY3=?fHRA}P{9aOhY+lW6ygtUFqLqW|@9_C&-L{em@6ICv5@$ZWrgVM7ROEo5n zz(=Sng7!}D+i=5aPcyT8B_bO*p=UWJi6nXmg$GrLw-qc5i$xB_5%Ktu@V&J{B)WKr zEI$xR6hkQ`@WY_xXKEBlIM(Cq^FCOuX~iJdoIxB-)&{}z*B3r0Koie9kZ6MM>nw^; zHxtybu7JfehFH_V%Ia7KZ_Xl@I9e5c%ludc6rRx4<7R*&JlE$iyTEw9;|L!MelWYC zJ&^N2af^LKQUo1HZ)Yov28M`kq@2zj#Ujb(8;l*r++n!i&z`aaU+lQJxdn4i-R=Cd zlgQNN*(jy|3?^Re$|ew8l2<*c`{<9_juy%HKbW)dKXk9^whpS|*+;o|b-CkQ>aU*F z7ZO~(Rv+YQClGSm4v+}8>#M}acXQk;#7z_dibDux=tP?B*Xgja@d}3#o!YloCiC-# z_(Ph>`?KJ$yhaj^H8}#tQrLD&P^%{DTF6cKv@GMrZk=2mCk9)KMnxbg`Bp;%m5B`Ds`%1u^`I~H7NJEZ~3;i55!Z1%3Wh{!Hel2OOs4K z0p~ZV6+-E8dNF*INnhDuG1)Oqn4C!!mF6O1&ydT}xktV4I3JXTLp2Gzc}i!A|2d79 zsuaUEb>V^O_4JRiofeZz5wjTyP+%|-Mg;vD8l~Zl* zV|aCD>jLgkj4zW+RId0vD*k1BO)2z+0=Ea_nM$W)IRl483~a6_`Hoimo*CknZw4}= zTY>LuWfsHOu>sb}-h)yu*UMWeY$ET7Z!bL%{L5_SV<#zyvdjQD7aHH>QeuknqyaZ6 z2?ve%GT+{Cmb#~~F%??XM{1@0A}PAl z>-K)Z&eMwS&)eA83N!cCSXdLtZCW2~Q39?gkgONCYJ+}9XU_dBH&sq<3<1F2Lu?Rx zYvoi9y<&NyAk}XI)x6eaUNECsf9m{pxf?nCv24%31H1iiwaXn*IUXY^B@YRR2!!a^ zT0tBlS=t?Hvi&GfPPSfreyfGQf4d~A>q=;hCFZ5IEroV%ghoUh&MYb^y|D?SOt4^R z950pD0OZEf=H?RSl+DVK%f*7yW;Hoq3Gs+t<`O?(@cP7+zkP#K%Z-~~7?4$@!Jn)c z2B^G+cNqGT*aWSJF}@T$;azQ{*Ea_b%Ka2#`)?**F(1lZA6Z-=tc;82uvH-}x*&l} zIK|m(Xak$ueWCK+v~C_>yeeM=JQo*WIv#6lb^%*i8%T!>ME>x}r&FHYpSJ}rp$78c zL10!t(E}!RM8X%9+k>%#ouh#+dElu(EqM9p&bVi7mI$kZwcxLMiw>lft&8OcX0ggx z&0v21{RJVNg6R|UWuyR(_C;oc7x8G5Q=9SFln+fn>G#92R7Gyr7gSGMA}cvMlEUp3 z`7Cu?&JQSb19r>Czir?ud2!vR0iu|&NtXXGEP_B~?$}NFlFGui1CfIe=nJCwPG)6R z7u}aa(y~C~MPO8>S?$+qW3lUMuis>hW|obH(T+c!5%9j!L{3Ma-UYC=@A|hkFds64 zjrU%Af4Pe9Ww)F<8TLXB!EChV)y6+)q;W+Jl0iY**k<6*hZ_@v!k&+2YU;P2g-N(H`aM zzar18@&TrQGJR>72^8Rde}bJC^pqRzWp+m0%tHWuVuAIPrCIZ&1uv?rXOGRL03}J> zB&ad_5gOXW$+oK?hfWldMpy*CW-PxYHQBGfL2%Ko|KR}bvPEYx`J&Ovf?93dx;F!k z|E8Gk{SH)a#n!tdJW8r)p{B!@ibxI z2kU>-?|kte)o-z^Dn$n0cVW%L%2XUM3(*-UC*noMp)}j<(h&-(Bm{iTY^wj`bKUUM zzTJFQQIo-hvg7+qO8i%BB_}5YYXdfcMA$qD@mZLr-(_XRls$bOLrQceB2e7}h>GY6X_@KRD2b;K9jE(h%+N`Jtqm=gD^MgRBHLHdy7Q1WrsQvjys6n%+`&}t zu)K0_**({aM|j)>Y?gL77+hvkLI7hG^;PowR6)U-p^+@-4k&$eS^sR?Oyz1fE36D9 z;;OPJ?v%H2zhKMoD+|HvcGCcM-~&#By%lbyewz!}L*ZQ!q-~3fXbX^yCAXklwZ40f z0WGT0hw{+_Rwx!RISmmixY9Dmakz@U+Q@}@I<=0Cs0SWdFSkY{;(F#!W8|ueqfLHG zz$jdxHkCyq773r1_x&KWlQr>i+-x>FTWM1a|IiH~bvnzy$%ABqENgz4UNO1L-Nwu$ zaES?@*m1e{CV(ts^Cm@e6~g5{dBE93y!^%$e|j|%-|2sDc~7wg>bVUaojWc!>al6= z{&6aBl0e{}(cWdY$JMAP)ry2g;w~-$&hC|2Y|^0-ulwCyZBNB!u+2+G9RyGBefhVy zx8;qmF;EtRpU&WGeY_*|t-@-_p}nz<_S2-vd=QAi+tM*skV&{xxUj8aqw)oAf4Wyv z3-E!HtS^KMexI9}|AjYC-r{;(7LGxx9RNWiPCqvi1%7a{^L$7W=lqN{^E_XB1~imZ zN*7=cu$A^zbQhHomX^rudFiEK#BhVH%Z)hBR*%#Qg$SCqg%R#fS!EJP7?#pT*bt3f z-4nMMC4B^rLtbKX^kGgUd**m5MLpjd9n9!b*EiwaBOomRER3i?s*G#EsWEq|nlJJm z7Sm}zrfnwt19`3oYkE9SFP>Ob&|N9b4OYK7ydk7epfKYbOJz}s8SYtG*xy}(IZOTA zlEVk`mdw`7RPE++|5F~Tt$j;NBC?q7bd(Y_+r_+}>mB>N8xcKpS8}ZdUmC;8 zsIlkgNmrWI>j<%Ls>E~aK{h~l9^s1b%OidxmzW)JPuNspU z7JOwGW!#Y0`L$_SEuzJWPdUMlQ7Pq4{U-AMq_KTke)mIFv8s&k$SM%=!`~2(2`pqe z56RFtmYapSheZPy!0pL^A`u)eW{P7vz1tsDa#uY6VMH)VbQZR0-gpweJGnV!VB!+elB)8#kAN0cyqvZb zY;2vzj??4+C#+zHjB4ejuo}^6XK7aeTG3e6i-dogcvwR<3eu zprfOIeK^|>5?SrjXX3P9dlKSq`y){MJ$i6w6T*b< zBurSjeBso||7orzs)Z6WD_9Hu5IEUkzWYUfx;oOUCn}D7LkmpqtE-a*% zZrnNWqdSbojk87?9l{7mn_EgyHEPH;zLUIUwLa0zS$VnHSJZoXJU=yr2$8#hCgLGZ zOJMhh!A6Jo*q7}z2&?RDJ^ebdJLj;LLW>OP?;9SbVy1H(fBs;W#YClya%E1Np6R#e z=@)tv>Yx7HV4z@PVxoU0^7Jk`n1369ruR5s+XuOUbk|FtHFw6!=#x>P&p(eKC{aK` zDi8%tBZbuXh1u5WU9(5qwkwrX@I)$B09CKnI}8Fyl|6swk3%CQBxqoX$&B1$7osmy2XbUs{@QgR3xhrk_9V_1pz<7BRK z%DPlO-LI4s_mS`V)+_&>@R;f?Y!NhANg<8s(&7~(U)B&rlDi&YWfU~weC=XS@E8}AYr&a zg^Y8cTfqtxex*G9B6A7^*N>7=c zQvwxAi}v%Aobg2A02W)xg;6`%yU{6;G@Ds3RRP5vzjjG5;cCR9e#QE)Y78#MKr_9p zJEz|Zu#1_c|DZS=Ck+|hGeZ^)?Iv);@)x08y)j&Yi>^_J6arN%@8T#SQ>h)d#cff? zr0#=8Bi~VwPMnB#Q!c++k^GvE#4I}+p0{0tE9%_9u|6G1wnzHwVZZX7r(EOkE0@D$ z=A0Gk<-cYl)6#g-guuhs5bd~q;{}|+aB6vJDckX9RqXjS|DIpQZGQZ#MM&5P;vsOF zEIJ~wF~84LlITcse-91rh+fWjb+Xb`vBT`w)v?!G1|6%}(%J)0ZF0$A>4#Fx+KP>h zC$chm(3na~$&D0T9eIRU>l`Mseg$?L1Swkn;F6N3WCR`1Pw>&SIpvcH<7?GuKBrP~ zooMGY{gD^Ss&JgjW7K|m(%jGMfVfF8W`qubC$M!vAFxnYEhVe}=J(4!0V*E?+^DKO z=0+8PpA7|~yxT?k8YnKZTu-HjY&RYP<9jtYh*{!mzo3Vl8iEf#_U{!0J4-6fyV0sd7G zYXZMiDa$Yz34f?OQ`xVI;l#{hkbK;ec)EU0BgY=vL_FZS=buxEr+#1$wsR zTqWcj)%>Ot@0us161z{=Ba+es2@yLSY)eM`G3oN-XUth=iN8He2%~ZehEPV<*<@Mk z+P%y;c|!I7IU{o2QMaFZzy`VyGa5QZ0*BQOo4HE@xu)j_S0xB#++49Jup2AWs3cxl zT~2j%b)A}^5Sf|-wTw#ZA2+C%bhKS5h$kDDQ`ecgWY45H73dPcPE?@)xjkImexgN8 zx)sDI!g=Z}Rd&!TGuWl!o`{Q$Rf!&PRn+P7O0YCJR5^<9QNeHBP2ltKH{}Uh#YdgT zW~O#@>g;V#dilJN2<51&6-!7%v1G5ImTO|#8#Ireb^3*&QWNr8e?6r@tSWBG<#q14%`|n3i_~?6uW-6I5H7d`XQ)g3CZGB@3 zkuel0DJh>r{ax~u=8IO9I_<;0mBZ6LME9z#&V8@ZY_5FkE;#emQd_Dm5jrs4So6No zHTf9V*=2aNQVER59}_?Px15?IVB;d3;lrtu9%lI^R9`pYEtad+0pc>3x+K`ZO%OB^ zi+xQNBg^bjs*A{OKO=tQT(&Cy{NlB2 zqE8uaJCePBDqP!D1cVxX+qZQ3m{ejU{YiT|3Pz+hLLCmkoX_ddV$_jW%@ub}({tGT zqXmDe_jmXBm;vTZ5wAj{f~zz(X2Uc|=!s6*jRPFxk9?v9>psm*xUu65>o)DjRlr+f zzbs#Jj$|F~^G~mRxuH1Z?-2q&H#H(G_mtVeEd$9#wF3w7;28lnsRN2pSk0xr9@S_s zr{pM7jbT^t&m17$)fXYBfPHfpXCyXj$G4h#SlTdvN@)f<5NlcpBQz}v`!5Z`VJu~f zsKX{6Td@l^W6kbPok*r=!jLPHrE6d>*w}yO%arL;oZx;L>2_s(q8xHY(7{SME+aBf zJX36k4sDWMT%*9v28jw8qjxxWYwu5O1|X@k^2ZW9ccIp}(ySxJG$>=>I#5hcT2_1m z5l#kJr=SkS4P}UQtC8tCV72Y3%eQQm=RZ4HiQA>2FLpcnT(HG!Hw$~pT5-K+=vpc| z#cJk}NU&3JW~*Jpa%c!m9QSUu$>1i`95li!KjHNgu0Infr&NNO4a@ae>R111cqxiz z3mvybp}GnUxQWGJ`F6^Q$Esfmb+5p`{YE^25%ew%l+;Mxb2T9sl%z~TAiP*-Y@NtM zf>O_z1O!pyRT)(*anmhwwpcQ&)o3%DEjAL)_0NuMHylkbRI7yuR@6D|(}Ly6Gh7ZuW zB7idfUOSQLDh~$$SGgVj$th*BB^ew@kxEMT;)q}y$5yk2DA<;0zOmED#Eilch2<_J zMxc|V;KsjYa$m22N&vk^o>+Mw&h{790-SkC#>Uqnc#%lwSUKNUax37|+RHn%00NVZ7nx)2Kkh1B^ z@DNa^Q^1`D9LF6uRf*22M0w!Bvr%gC`rvZ?%;JR1e;D~#D8`kdzaiIXzb>QCAQCg2 zRL9!rXDB*}(5qxWtojj$fRxndq~uUteIxLZtNmXWY<}-;Ba*GHLqPfxC+BK`vcdIM zujGE9LKKFB=EY)hMF&Pgy6Me$rHzK(VKvToXCYW_l!hn4eAytTszS!mlM{K`z9NjJ z7=?(wzocx9U)Q|)?so)$V$|HF2wxu;;kiA(t2uQOf-^gJ`sx$IOWv`8_^M-Snju*# z41)d11vnZbq+GC#&V@sXe(s!oeUNb%<&vpqqb{m*+MbEcWeLEv%~ri4r74oo7-3AW zf{4Ofi867q=eU>%eRzmgo^+K8kWjM!>l9V%su^Yo)Z{>s6rnSvZrfjl`F%;R)>xS< zYt{=CSTJYOlIs#2T->G^If0~q4ZmJ=pPaH$w{a(qg+&EI!H;)-ZVD(dG*6ty7(h|8 zfb&kPA3x^n=q0Z$=z^L7PFYY@X*S-2#`ZuAvO9}7-xsw4O{}QEs(C_`VS#!^X&>rG zDcH%4m(q-Db@qaU0E%(_U*a<1{MTr4 z24Xf?HyOFr}{lPwR{y{hS6OwG1Lc#g=g=k%uKkuC906(n;{pre? zFTVeK74l-jQY}kn_UZJaw`?)m*?OktC-qaFt_mDS)(c9B8BXK-;Qg7vJQgP07Eim znVC62qPb&;nnR?gR3SnQiHP*D)rs9AyiCVltGPebX1MH$-w+aS^=>HeB+P_DP|uH( zfTJF9%Pd$)XeBrHSv(%5j#weKXvr(i@_v~MlnMR(InAEDr6HZ}dJ#-zA4vdeaB4=h^0Dhdgy?EXlS zqyv{$-|ri#;!TvX?m8*6oUkysiE9ab{7mt^ih?rC?Sb-^<>M6fpj}suz_Ulkw%Z#{ zGl=z>i)g+tMiB6=R7||byxxpBF~j054)sz%>`(35T2@dLrSYmp7`9yQ+yf(Z%>NlhdkP z@;U5=g8GgfOJv-2l5wfXC>tW)e8+pb1$nq9n-Sd zv`uJ3u~d^UC&AoJto$#ctap%=0^}N0!}v$e0uinIhj3u|emIk^dL9)Eje%9xOQx-r zs}29;L{KWQaMAxaiOeto35f*+Q+o@L(_ySVtVmcLzKnIG9fWy1Vkp0e4F9UHzw`K3 zg(zu*qdRikVn2mm+njGB{o?fdoh8K_SOuvE=E#b&CQO0lc-3#NGl_pO#Bq_Y!G4f5 zT!Vx+VSl;ku3^wd4U+HHoLsIdxM40m(y!gIkjYN$<^lVq^eSGAv-rT{sHg!)- zS$gUiE^hlYI(eQFl=^3N)`*+Ka#sJn;#*B-urp&+N3CdR}1HWq*i!r zaPaV!VYqD*Sq1zL4-b32<1)z{;T>orOI`Nu%#!eE^;Q>wl$v?ueF`G_sz9)0qp|QG z_tiF!`z)dH3a5S~93?1L)f!9Sm*o!*u=h{KCgu_E6B*W&826ij5tIK#6SckVVZ}-B z2!RbZ=yW{rZ+=KQsnp`Osa?|ML@0|kAGGiOg>!R8La9CG#4##8FFuLZK060OkNL{GZkE8 zz`4L9I=RptC*vzv`mcXkrhEdT+Y9o~JK`&0LdX5zPUIAgjZknokQAi5zO*HQcVozS zTA#pIR*G48?wCJA38aUJD>`UtpcRN?PFFRqZ)|RYC(y2&jKV1|eV96f`T|{9de8?6 zX5AuHn)1+bw8j@%$i0=Ojn=LS*6y+CYgya zCZ=+Jm)Na?sh?*;d}r8h0*rGtOj%}VJcUeYHrBS`F$7DrfBD)JnhcPEudlrSb&z)O z+&A*^AX`yBrNMOmC$az5JkNIyUPtIfH)$P(7hB z2XrMIv2YU%TPA+6O>xT7i+L524t9IL?Hq-)#HvWXj7ZRnN31cK;Ro*>Z^sS&GuN;c`c(4Jed0MW_p>a`M z7mJ5$>^_6O3|6J|ww*^&HMq`twWc&o*QC{yuM#Wb#ZiZ3;k4iGjKn9#DM%5soUL^Y za<*U`JsQ6gPKLRXU(Mt_OfH^3PI}!>#M??K)mR0^}!R)7eblSTRB*X zW#Yf-kmV_+9=cRlV-pa!Ld7e>;N~AQsEcn);pKBu zmLKu)ysS%$$0Mm=M%Ck}U`!|vEHN%GE)(C~xr(I%(f>F~S*S63#XQ)EkyvQ$N)k;L zaa%d`3oEfa%e;%K`+*oAFLXi(jj}nAQffUi*T{x0qX;+=f^;Y`` z_!nug^GxiH5-AJoE)cv?$(WH}c<E=z!=fu<#-_LsF7SJ>BqRTIQ55ze z=72aywZEdiG~PSl=*Qo%<5ID?2bzE0qB5GGOxNHk5%b0#yOIC4-FgVE4s;2ZA+-bU zSMxcOzrc~xC><6U;3LFH_=!^*o-8ZG{xFG%!xx~v3y*ejB?wfXjKxvA+Vg0fD@7~U zs(i~4toLL8RU|!50two32L7~JY+N?8et&Be$>E$$+Yt7xUdqYrdWi_kf}wNVc@JU# zDuaW=sSMcGt7-$_j;2JNEmW<_@j(f1?LV9?7AsCcbX^Y&R79}c#>f%Co5kc$Jp!<*XS>bIK8XB6JlFz0jPyz!2jR|TvLh(FG zfX_nf*#pml*WLplt|&`gV`62@m5vqTu>k8YpcCf_CX+^uZsR%T8#in;1earVp4=$m zws7HKhVeK~Zb#xg708=crk+c%6)9Rnf?8KE31FzidgJ-_bL63#bmWxmCmW+5ZOmGp z;=(&QIF2LL;F=KpZCkfqpC6i*F=v)wl1nq%LV=_}kz^W52Bt6U4wy*c{ z<%U>SQ#fGosb*OWu~8`P~E zNI;Wrxjl}1;E?n4{oQUyCc8sAOhOGE=u3xjWfc=b*`nU#J%Rr9CG%xzmK>g-{d@6={ za%9b>%88c!m;Vs7DmQ26!h8u4cfwQKQli)Ut}~?hCJ)OGAgZ6Ic~-XUJiO*4%_K8l zOxY@xf^6{qt6rLS0<{J1`V<1BlQ6mwr|_k3u7OH zbty<~sbuWfS6U{X<;Toq`1|nxfCA347&FEi_xVY&lKei_s2|3?B)~twNC6$6r>rOY zxpVt=lNP2;T~8c8E?;lLzEIe?))YJ?{!g$&U|YkFa)eb{2_aktjXVZ|RY(~JKRF+C zh|w=OR}hebpl_pFw=nZ;)x5pF literal 0 HcmV?d00001 diff --git a/assets/images/client4.png b/assets/images/client4.png new file mode 100755 index 0000000000000000000000000000000000000000..9f3b8a65b7093ca70bbe09cd8a313c49450e7290 GIT binary patch literal 9763 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 JPDHLkV1o4mdl>)# literal 0 HcmV?d00001 diff --git a/assets/images/down_arrow.png b/assets/images/down_arrow.png new file mode 100755 index 0000000000000000000000000000000000000000..7ce985c77bb46766408a3eda247a7dfcec1aff59 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c#0(^RC8o0gDV_kI5ZC`m;OkPpVxTy4NswPK z1LMS$)G%KlSI5)EF@!^w^`IjogMbL@hMgK8PiHLYayzB*@X^gPPgXs7aq`kP=`-C{ cFSv7mRN3>Hqy(h=2kK++boFyt=akR{05FO(4FCWD literal 0 HcmV?d00001 diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..45393b2c4259ae369559fa0cca45ca718df328f9 GIT binary patch literal 34014 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 literal 0 HcmV?d00001 diff --git a/assets/images/header-bg.png b/assets/images/header-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..96338595c716d74467d8562f907102bb64922866 GIT binary patch literal 23962 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 E1GSB61ONa4 literal 0 HcmV?d00001 diff --git a/assets/images/header.png b/assets/images/header.png new file mode 100755 index 0000000000000000000000000000000000000000..834479ded3647a1413222c4ce069cbbe28673838 GIT binary patch literal 2508 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 literal 0 HcmV?d00001 diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..b027dc9b31c65c9babbd2bbcf0ddf12f6110b8b2 GIT binary patch literal 3921 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 literal 0 HcmV?d00001 diff --git a/assets/images/menu1.png b/assets/images/menu1.png new file mode 100755 index 0000000000000000000000000000000000000000..722e2fa8984e6b6e908d865b45f1b94897bb3a92 GIT binary patch literal 3402 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 literal 0 HcmV?d00001 diff --git a/assets/images/right_arrow.png b/assets/images/right_arrow.png new file mode 100755 index 0000000000000000000000000000000000000000..5ad4b224a7e4a28e2e1468ff4ef5bcd62095620f GIT binary patch literal 142 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.width/e.height?$(e).css({height:"98%",width:"auto"}):$(e).css({height:"auto",width:"100%"}),$(e).show()}function getQueryVariable(e){for(var t=window.location.search.substring(1),r=t.split("&"),a=0;a1){r=!0;break}return 1==r?t.fn(this):t.inverse(this)}),Handlebars.registerHelper("concat",function(e,t){var r="";try{a=e.length}catch(e){a=0}for(var a,n=0;n0?e[0]:""}),Handlebars.registerHelper("getCategoryBacklinks",function(e,t){for(var r=e.join(","),a=0;aSee all '}),Handlebars.registerHelper("getKitsBacklinks",function(e,t){return''+e+""}),Handlebars.registerHelper("language",function(e){return"Node.js"==e?"javascript":"C++"==e?"cpp":"Java"==e?"java":"Python"==e?"python":"C"==e?"cpp":void 0}),Handlebars.registerHelper("imagelinkDetail",function(e){return e?"https://raw.githubusercontent.com/intel-iot-devkit/upm/master/docs/images/"+e:"/assets/images/FPO-Detail.png"}),Handlebars.registerHelper("codeSnippetFolder",function(e){return"Node.js"==e?"javascript":"C++"==e?encodeURIComponent("c++"):"Java"==e?"java":"Python"==e?"python":"C"==e?"c":void 0}),Handlebars.registerHelper("sourceURL",function(e){switch(e){case"Java":return"http://iotdk.intel.com/docs/master/upm/java/group__";case"Python":return"http://iotdk.intel.com/docs/master/upm/python/pyupm_";case"C++":return"http://iotdk.intel.com/docs/master/upm/group__";case"Node.js":return"http://iotdk.intel.com/docs/master/upm/node/modules/";case"C":return"http://iotdk.intel.com/docs/master/upm/group__";default:return"http://iotdk.intel.com/docs/master/upm/group__"}}),Handlebars.registerHelper("imagelink",function(e){return e?"https://raw.githubusercontent.com/intel-iot-devkit/upm/master/docs/images/"+e:"/assets/images/FPO.png"}); \ No newline at end of file diff --git a/assets/js/library/bootstrap.min.js b/assets/js/library/bootstrap.min.js new file mode 100755 index 00000000..f347c5e5 --- /dev/null +++ b/assets/js/library/bootstrap.min.js @@ -0,0 +1,2 @@ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.7",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===s?[]:s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target).closest(".btn");e.call(o,"toggle"),t(i.target).is('input[type="radio"], input[type="checkbox"]')||(i.preventDefault(),o.is("input,button")?o.trigger("focus"):o.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o="prev"==t?-1:1,n=(i+o)%this.$items.length;return this.$items.eq(n)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){if(!this.sliding)return this.slide("next")},i.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.7",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"))&&e.transitioning)){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=n.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&ldocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue())return clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide()},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-cu.width?"left":"left"==r&&d.left-pa.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},i.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.7",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||e .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n=t-o&&"bottom"},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery); \ No newline at end of file diff --git a/assets/js/library/elasticlunr.js b/assets/js/library/elasticlunr.js new file mode 100755 index 00000000..5db1d20c --- /dev/null +++ b/assets/js/library/elasticlunr.js @@ -0,0 +1 @@ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null!==e&&void 0!==e});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;o0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(e){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;re&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)re&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:ro-1||i>r-1)break;s[n].ref!==u[i].ref?s[n].scoreu[i].score&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o= 2.0.0-beta.1",7:">= 4.0.0"};e.REVISION_CHANGES=u;var f="[object Object]";s.prototype={constructor:s,logger:p.default,log:p.default.log,registerHelper:function(t,e){if(n.toString.call(t)===f){if(e)throw new o.default("Arg not supported with multiple helpers");n.extend(this.helpers,t)}else this.helpers[t]=e},unregisterHelper:function(t){delete this.helpers[t]},registerPartial:function(t,e){if(n.toString.call(t)===f)n.extend(this.partials,t);else{if(void 0===e)throw new o.default('Attempting to register a partial called "'+t+'" as undefined');this.partials[t]=e}},unregisterPartial:function(t){delete this.partials[t]},registerDecorator:function(t,e){if(n.toString.call(t)===f){if(e)throw new o.default("Arg not supported with multiple decorators");n.extend(this.decorators,t)}else this.decorators[t]=e},unregisterDecorator:function(t){delete this.decorators[t]}};var d=p.default.log;e.log=d,e.createFrame=n.createFrame,e.logger=p.default},function(t,e){"use strict";function r(t){return h[t]}function s(t){for(var e=1;e":">",'"':""","'":"'","`":"`","=":"="},p=/[&<>"'`=]/g,u=/[&<>"'`=]/,f=Object.prototype.toString;e.toString=f;var d=function(t){return"function"==typeof t};d(/x/)&&(e.isFunction=d=function(t){return"function"==typeof t&&"[object Function]"===f.call(t)}),e.isFunction=d;var m=Array.isArray||function(t){return!(!t||"object"!=typeof t)&&"[object Array]"===f.call(t)};e.isArray=m},function(t,e,r){"use strict";function s(t,e){var r=e&&e.loc,a=void 0,o=void 0;r&&(a=r.start.line,o=r.start.column,t+=" - "+a+":"+o);for(var c=Error.prototype.constructor.call(this,t),l=0;l0?(r.ids&&(r.ids=[r.name]),t.helpers.each(e,r)):i(this);if(r.data&&r.ids){var a=s.createFrame(r.data);a.contextPath=s.appendContextPath(r.data.contextPath,r.name),r={data:a}}return n(e,r)})},t.exports=e.default},function(t,e,r){"use strict";var s=r(1).default;e.__esModule=!0;var i=r(5),n=r(6),a=s(n);e.default=function(t){t.registerHelper("each",function(t,e){function r(e,r,n){l&&(l.key=e,l.index=r,l.first=0===r,l.last=!!n,h&&(l.contextPath=h+e)),c+=s(t[e],{data:l,blockParams:i.blockParams([t[e],e],[h+e,null])})}if(!e)throw new a.default("Must pass iterator to #each");var s=e.fn,n=e.inverse,o=0,c="",l=void 0,h=void 0;if(e.data&&e.ids&&(h=i.appendContextPath(e.data.contextPath,e.ids[0])+"."),i.isFunction(t)&&(t=t.call(this)),e.data&&(l=i.createFrame(e.data)),t&&"object"==typeof t)if(i.isArray(t))for(var p=t.length;o=0?e:parseInt(t,10)}return t},log:function(t){if(t=i.lookupLevel(t),"undefined"!=typeof console&&i.lookupLevel(i.level)<=t){var e=i.methodMap[t];console[e]||(e="log");for(var r=arguments.length,s=Array(r>1?r-1:0),n=1;n2&&S.push("'"+this.terminals_[v]+"'");_=this.lexer.showPosition?"Parse error on line "+(o+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[u]||u)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==u?"end of input":"'"+(this.terminals_[u]||u)+"'"),this.parseError(_,{text:this.lexer.match,token:this.terminals_[u]||u,line:this.lexer.yylineno,loc:h,expected:S})}}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+u);switch(m[0]){case 1:r.push(u),s.push(this.lexer.yytext),i.push(this.lexer.yylloc),r.push(m[1]),u=null,f?(u=f,f=null):(c=this.lexer.yyleng,a=this.lexer.yytext,o=this.lexer.yylineno,h=this.lexer.yylloc,l>0&&l--);break;case 2:if(y=this.productions_[m[1]][1],b.$=s[s.length-y],b._$={first_line:i[i.length-(y||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(y||1)].first_column,last_column:i[i.length-1].last_column},p&&(b._$.range=[i[i.length-(y||1)].range[0],i[i.length-1].range[1]]),void 0!==(g=this.performAction.call(b,a,c,o,this.yy,m[1],s,i)))return g;y&&(r=r.slice(0,-1*y*2),s=s.slice(0,-1*y),i=i.slice(0,-1*y)),r.push(this.productions_[m[1]][0]),s.push(b.$),i.push(b._$),k=n[r[r.length-2]][r[r.length-1]],r.push(k);break;case 3:return!0}}return!0}},r=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t){return this._input=t,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e-1),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===s.length?this.yylloc.first_column:0)+s[s.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this},more:function(){return this._more=!0,this},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,s,i;this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;ae[0].length)||(e=r,s=a,this.options.flex));a++);return e?(i=e[0].match(/(?:\r\n?|\n).*/g),i&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],t=this.performAction.call(this,this.yy,this,n[s],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),t||void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return void 0!==t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(t){this.begin(t)}};return t.options={},t.performAction=function(t,e,r,s){function i(t,r){return e.yytext=e.yytext.substr(t,e.yyleng-r)}switch(r){case 0:if("\\\\"===e.yytext.slice(-2)?(i(0,1),this.begin("mu")):"\\"===e.yytext.slice(-1)?(i(0,1),this.begin("emu")):this.begin("mu"),e.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e.yytext=e.yytext.substr(5,e.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(e.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return e.yytext=i(1,2).replace(/\\"/g,'"'),80;case 32:return e.yytext=i(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return e.yytext=e.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},t.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],t.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},t}();return e.lexer=r,t.prototype=e,e.Parser=t,new t}();e.default=r,t.exports=e.default},function(t,e,r){"use strict";function s(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=t}function i(t,e,r){void 0===e&&(e=t.length);var s=t[e-1],i=t[e-2];return s?"ContentStatement"===s.type?(i||!r?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(s.original):void 0:r}function n(t,e,r){void 0===e&&(e=-1);var s=t[e+1],i=t[e+2];return s?"ContentStatement"===s.type?(i||!r?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(s.original):void 0:r}function a(t,e,r){var s=t[null==e?0:e+1];if(s&&"ContentStatement"===s.type&&(r||!s.rightStripped)){var i=s.value;s.value=s.value.replace(r?/^\s+/:/^[ \t]*\r?\n?/,""),s.rightStripped=s.value!==i}}function o(t,e,r){var s=t[null==e?t.length-1:e-1];if(s&&"ContentStatement"===s.type&&(r||!s.leftStripped)){var i=s.value;return s.value=s.value.replace(r?/\s+$/:/[ \t]+$/,""),s.leftStripped=s.value!==i,s.leftStripped}}var c=r(1).default;e.__esModule=!0;var l=r(39),h=c(l);s.prototype=new h.default,s.prototype.Program=function(t){var e=!this.options.ignoreStandalone,r=!this.isRootSeen;this.isRootSeen=!0;for(var s=t.body,c=0,l=s.length;c0)throw new g.default("Invalid path: "+s,{loc:r});".."===l&&(n++,a+="../")}}return{type:"PathExpression",data:t,depth:n,parts:i,original:s,loc:r}}function l(t,e,r,s,i,n){var a=s.charAt(3)||s.charAt(2),o="{"!==a&&"&"!==a;return{type:/\*/.test(s)?"Decorator":"MustacheStatement",path:t,params:e,hash:r,escaped:o,strip:i,loc:this.locInfo(n)}}function h(t,e,r,i){s(t,r),i=this.locInfo(i);var n={type:"Program",body:e,strip:{},loc:i};return{type:"BlockStatement",path:t.path,params:t.params,hash:t.hash,program:n,openStrip:{},inverseStrip:{},closeStrip:{},loc:i}}function p(t,e,r,i,n,a){i&&i.path&&s(t,i);var o=/\*/.test(t.open);e.blockParams=t.blockParams;var c=void 0,l=void 0;if(r){if(o)throw new g.default("Unexpected inverse block on decorator",r);r.chain&&(r.program.body[0].closeStrip=i.strip),l=r.strip,c=r.program}return n&&(n=c,c=e,e=n),{type:o?"DecoratorBlock":"BlockStatement",path:t.path,params:t.params,hash:t.hash,program:e,inverse:c,openStrip:t.strip,inverseStrip:l,closeStrip:i&&i.strip,loc:this.locInfo(a)}}function u(t,e){if(!e&&t.length){var r=t[0].loc,s=t[t.length-1].loc;r&&s&&(e={source:r.source,start:{line:r.start.line,column:r.start.column},end:{line:s.end.line,column:s.end.column}})}return{type:"Program",body:t,strip:{},loc:e}}function f(t,e,r,i){return s(t,r),{type:"PartialBlockStatement",name:t.path,params:t.params,hash:t.hash,program:e,openStrip:t.strip,closeStrip:r&&r.strip,loc:this.locInfo(i)}}var d=r(1).default;e.__esModule=!0,e.SourceLocation=i,e.id=n,e.stripFlags=a,e.stripComment=o,e.preparePath=c,e.prepareMustache=l,e.prepareRawBlock=h,e.prepareBlock=p,e.prepareProgram=u,e.preparePartialBlock=f;var m=r(6),g=d(m)},function(t,e,r){"use strict";function s(){}function i(t,e,r){if(null==t||"string"!=typeof t&&"Program"!==t.type)throw new h.default("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+t);e=e||{},"data"in e||(e.data=!0),e.compat&&(e.useDepths=!0);var s=r.parse(t,e),i=(new r.Compiler).compile(s,e);return(new r.JavaScriptCompiler).compile(i,e)}function n(t,e,r){function s(){var s=r.parse(t,e),i=(new r.Compiler).compile(s,e),n=(new r.JavaScriptCompiler).compile(i,e,void 0,!0);return r.template(n)}function i(t,e){return n||(n=s()),n.call(this,t,e)}if(void 0===e&&(e={}),null==t||"string"!=typeof t&&"Program"!==t.type)throw new h.default("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+t);e=p.extend({},e),"data"in e||(e.data=!0),e.compat&&(e.useDepths=!0);var n=void 0;return i._setup=function(t){return n||(n=s()),n._setup(t)},i._child=function(t,e,r,i){return n||(n=s()),n._child(t,e,r,i)},i}function a(t,e){if(t===e)return!0;if(p.isArray(t)&&p.isArray(e)&&t.length===e.length){for(var r=0;r1)throw new h.default("Unsupported number of partial arguments: "+r.length,t);r.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):r.push({type:"PathExpression",parts:[],depth:0}));var s=t.name.original,i="SubExpression"===t.name.type;i&&this.accept(t.name),this.setupFullMustacheParams(t,e,void 0,!0);var n=t.indent||"";this.options.preventIndent&&n&&(this.opcode("appendContent",n),n=""),this.opcode("invokePartial",i,s,n),this.opcode("append")},PartialBlockStatement:function(t){this.PartialStatement(t)},MustacheStatement:function(t){this.SubExpression(t),t.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(t){this.DecoratorBlock(t)},ContentStatement:function(t){t.value&&this.opcode("appendContent",t.value)},CommentStatement:function(){},SubExpression:function(t){o(t);var e=this.classifySexpr(t);"simple"===e?this.simpleSexpr(t):"helper"===e?this.helperSexpr(t):this.ambiguousSexpr(t)},ambiguousSexpr:function(t,e,r){var s=t.path,i=s.parts[0],n=null!=e||null!=r;this.opcode("getContext",s.depth),this.opcode("pushProgram",e),this.opcode("pushProgram",r),s.strict=!0,this.accept(s),this.opcode("invokeAmbiguous",i,n)},simpleSexpr:function(t){var e=t.path;e.strict=!0,this.accept(e),this.opcode("resolvePossibleLambda")},helperSexpr:function(t,e,r){var s=this.setupFullMustacheParams(t,e,r),i=t.path,n=i.parts[0];if(this.options.knownHelpers[n])this.opcode("invokeKnownHelper",s.length,n);else{if(this.options.knownHelpersOnly)throw new h.default("You specified knownHelpersOnly, but used the unknown helper "+n,t);i.strict=!0,i.falsy=!0,this.accept(i),this.opcode("invokeHelper",s.length,i.original,f.default.helpers.simpleId(i))}},PathExpression:function(t){this.addDepth(t.depth),this.opcode("getContext",t.depth);var e=t.parts[0],r=f.default.helpers.scopedId(t),s=!t.depth&&!r&&this.blockParamIndex(e);s?this.opcode("lookupBlockParam",s,t.parts):e?t.data?(this.options.data=!0,this.opcode("lookupData",t.depth,t.parts,t.strict)):this.opcode("lookupOnContext",t.parts,t.falsy,t.strict,r):this.opcode("pushContext")},StringLiteral:function(t){this.opcode("pushString",t.value)},NumberLiteral:function(t){this.opcode("pushLiteral",t.value)},BooleanLiteral:function(t){this.opcode("pushLiteral",t.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(t){var e=t.pairs,r=0,s=e.length;for(this.opcode("pushHash");r=0)return[e,i]}}}},function(t,e,r){"use strict";function s(t){this.value=t}function i(){}function n(t,e,r,s){var i=e.popStack(),n=0,a=r.length;for(t&&a--;n0&&(e+=", "+r.join(", "));var s=0;for(var i in this.aliases){var n=this.aliases[i];this.aliases.hasOwnProperty(i)&&n.children&&n.referenceCount>1&&(e+=", alias"+ ++s+"="+i,n.children[0]="alias"+s)}var a=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&a.push("blockParams"),this.useDepths&&a.push("depths");var o=this.mergeSource(e);return t?(a.push(o),Function.apply(this,a)):this.source.wrap(["function(",a.join(","),") {\n ",o,"}"])},mergeSource:function(t){var e=this.environment.isSimple,r=!this.forceBuffer,s=void 0,i=void 0,n=void 0,a=void 0;return this.source.each(function(t){t.appendToBuffer?(n?t.prepend(" + "):n=t,a=t):(n&&(i?n.prepend("buffer += "):s=!0,a.add(";"),n=a=void 0),i=!0,e||(r=!1))}),r?n?(n.prepend("return "),a.add(";")):i||this.source.push('return "";'):(t+=", buffer = "+(s?"":this.initializeBuffer()),n?(n.prepend("return buffer + "),a.add(";")):this.source.push("return buffer;")),t&&this.source.prepend("var "+t.substring(2)+(s?"":";\n")),this.source.merge()},blockValue:function(t){var e=this.aliasable("helpers.blockHelperMissing"),r=[this.contextName(0)];this.setupHelperArgs(t,0,r);var s=this.popStack();r.splice(1,0,s),this.push(this.source.functionCall(e,"call",r))},ambiguousBlockValue:function(){var t=this.aliasable("helpers.blockHelperMissing"),e=[this.contextName(0)];this.setupHelperArgs("",0,e,!0),this.flushInline();var r=this.topStack();e.splice(1,0,r),this.pushSource(["if (!",this.lastHelper,") { ",r," = ",this.source.functionCall(t,"call",e),"}"])},appendContent:function(t){this.pendingContent?t=this.pendingContent+t:this.pendingLocation=this.source.currentLocation,this.pendingContent=t},append:function(){if(this.isInline())this.replaceStack(function(t){return[" != null ? ",t,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var t=this.popStack();this.pushSource(["if (",t," != null) { ",this.appendToBuffer(t,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(t){this.lastContext=t},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(t,e,r,s){var i=0;s||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(t[i++])),this.resolvePath("context",t,i,e,r)},lookupBlockParam:function(t,e){this.useBlockParams=!0,this.push(["blockParams[",t[0],"][",t[1],"]"]),this.resolvePath("context",e,1)},lookupData:function(t,e,r){t?this.pushStackLiteral("container.data(data, "+t+")"):this.pushStackLiteral("data"),this.resolvePath("data",e,0,!0,r)},resolvePath:function(t,e,r,s,i){var a=this;if(this.options.strict||this.options.assumeObjects)return void this.push(n(this.options.strict&&i,this,e,t));for(var o=e.length;rthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var t=this.inlineStack;this.inlineStack=[];for(var e=0,r=t.length;e/g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return O.test(e)}function i(e){var n,t,r,i,s=e.className+" ";if(s+=e.parentNode?e.parentNode.className:"",t=y.exec(s))return R(t[1])?t[1]:"no-highlight";for(s=s.split(/\s+/),n=0,r=s.length;n"}function o(e){u+=""}function l(e){("start"===e.event?s:o)(e.node)}for(var c=0,u="",g=[];e.length||r.length;){var f=i();if(u+=n(a.substring(c,f[0].offset)),c=f[0].offset,f===e){g.reverse().forEach(o);do{l(f.splice(0,1)[0]),f=i()}while(f===e&&f.length&&f[0].offset===c);g.reverse().forEach(s)}else"start"===f[0].event?g.push(f[0].node):g.pop(),l(f.splice(0,1)[0])}return u+n(a.substr(c))}function c(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map(function(n){return s(e,{variants:null},n)})),e.cached_variants||e.endsWithParent&&[s(e)]||[e]}function u(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.case_insensitive?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.keywords=a.keywords||a.beginKeywords,a.keywords){var s={},o=function(n,t){e.case_insensitive&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");s[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.keywords?o("keyword",a.keywords):w(a.keywords).forEach(function(e){o(e,a.keywords[e])}),a.keywords=s}a.lexemesRe=t(a.lexemes||/\w+/,!0),i&&(a.beginKeywords&&(a.begin="\\b("+a.beginKeywords.split(" ").join("|")+")\\b"),a.begin||(a.begin=/\B|\b/),a.beginRe=t(a.begin),a.end||a.endsWithParent||(a.end=/\B|\b/),a.end&&(a.endRe=t(a.end)),a.terminator_end=n(a.end)||"",a.endsWithParent&&i.terminator_end&&(a.terminator_end+=(a.end?"|":"")+i.terminator_end)),a.illegal&&(a.illegalRe=t(a.illegal)),null==a.relevance&&(a.relevance=1),a.contains||(a.contains=[]),a.contains=Array.prototype.concat.apply([],a.contains.map(function(e){return c("self"===e?a:e)})),a.contains.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.contains.map(function(e){return e.beginKeywords?"\\.?("+e.begin+")\\.?":e.begin}).concat([a.terminator_end,a.illegal]).map(n).filter(Boolean);a.terminators=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function g(e,t,a,i){function s(e,n){var t,a;for(t=0,a=n.contains.length;t')+n+s}function E(){var e,t,r,a;if(!N.keywords)return n(O);for(a="",t=0,N.lexemesRe.lastIndex=0,r=N.lexemesRe.exec(O);r;)a+=n(O.substring(t,r.index)),e=c(N,r),e?(y+=e[1],a+=d(e[0],n(r[0]))):a+=n(r[0]),t=N.lexemesRe.lastIndex,r=N.lexemesRe.exec(O);return a+n(O.substr(t))}function v(){var e="string"==typeof N.subLanguage;if(e&&!M[N.subLanguage])return n(O);var t=e?g(N.subLanguage,O,!0,w[N.subLanguage]):f(O,N.subLanguage.length?N.subLanguage:void 0);return N.relevance>0&&(y+=t.relevance),e&&(w[N.subLanguage]=t.top),d(t.language,t.value,!1,!0)}function p(){x+=null!=N.subLanguage?v():E(),O=""}function h(e){x+=e.className?d(e.className,"",!0):"",N=Object.create(e,{parent:{value:N}})}function m(e,n){if(O+=e,null==n)return p(),0;var t=s(n,N);if(t)return t.skip?O+=n:(t.excludeBegin&&(O+=n),p(),t.returnBegin||t.excludeBegin||(O=n)),h(t,n),t.returnBegin?0:n.length;var r=o(N,n);if(r){var a=N;a.skip?O+=n:(a.returnEnd||a.excludeEnd||(O+=n),p(),a.excludeEnd&&(O=n));do{N.className&&(x+=C),N.skip||N.subLanguage||(y+=N.relevance),N=N.parent}while(N!==r.parent);return r.starts&&h(r.starts,""),a.returnEnd?0:n.length}if(l(n,N))throw new Error('Illegal lexeme "'+n+'" for mode "'+(N.className||"")+'"');return O+=n,n.length||1}var b=R(e);if(!b)throw new Error('Unknown language: "'+e+'"');u(b);var _,N=i||b,w={},x="";for(_=N;_!==b;_=_.parent)_.className&&(x=d(_.className,"",!0)+x);var O="",y=0;try{for(var S,A,B=0;;){if(N.terminators.lastIndex=B,!(S=N.terminators.exec(t)))break;A=m(t.substring(B,S.index),S[0]),B=S.index+A}for(m(t.substr(B)),_=N;_.parent;_=_.parent)_.className&&(x+=C);return{relevance:y,value:x,language:e,top:N}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{relevance:0,value:n(t)};throw e}}function f(e,t){t=t||L.languages||w(M);var r={relevance:0,value:n(e)},a=r;return t.filter(R).forEach(function(n){var t=g(n,e,!1);t.language=n,t.relevance>a.relevance&&(a=t),t.relevance>r.relevance&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function d(e){return L.tabReplace||L.useBR?e.replace(S,function(e,n){return L.useBR&&"\n"===e?"
":L.tabReplace?n.replace(/\t/g,L.tabReplace):""}):e}function E(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function v(e){var n,t,r,s,c,u=i(e);a(u)||(L.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,c=n.textContent,r=u?g(u,c,!0):f(c),t=o(n),t.length&&(s=document.createElementNS("http://www.w3.org/1999/xhtml","div"),s.innerHTML=r.value,r.value=l(t,o(s),c)),r.value=d(r.value),e.innerHTML=r.value,e.className=E(e.className,u,r.language),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function p(e){L=s(L,e)}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");N.forEach.call(e,v)}}function m(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)}function b(n,t){var r=M[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function _(){return w(M)}function R(e){return e=(e||"").toLowerCase(),M[e]||M[x[e]]}var N=[],w=Object.keys,M={},x={},O=/^(no-?highlight|plain|text)$/i,y=/\blang(?:uage)?-([\w-]+)\b/i,S=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="",L={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=g,e.highlightAuto=f,e.fixMarkup=d,e.highlightBlock=v,e.configure=p,e.initHighlighting=h,e.initHighlightingOnLoad=m,e.registerLanguage=b,e.listLanguages=_,e.getLanguage=R,e.inherit=s,e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(n,t,r){var a=e.inherit({className:"comment",begin:n,end:t,contains:[]},r||{});return a.contains.push(e.PHRASAL_WORDS_MODE),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),a},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0},e}); \ No newline at end of file diff --git a/assets/js/library/jquery-2.2.4.min.js b/assets/js/library/jquery-2.2.4.min.js new file mode 100755 index 00000000..ed305a22 --- /dev/null +++ b/assets/js/library/jquery-2.2.4.min.js @@ -0,0 +1,3 @@ +!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=oe.type(e);return"function"!==n&&!oe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(ge.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return Z.call(t,e)>-1!==n})}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function o(e){var t={};return oe.each(e.match(be)||[],function(e,n){t[n]=!0}),t}function s(){G.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s),oe.ready()}function a(){this.expando=oe.expando+a.uid++}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Se,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Ne.test(n)?oe.parseJSON(n):n)}catch(e){}Ee.set(e,t,n)}else n=void 0;return n}function l(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return oe.css(e,t,"")},u=a(),l=n&&n[3]||(oe.cssNumber[t]?"":"px"),c=(oe.cssNumber[t]||"px"!==l&&+u)&&De.exec(oe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do{o=o||".5",c/=o,oe.style(e,t,c+l)}while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function c(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],n):n}function f(e,t){for(var n=0,r=e.length;r>n;n++)ke.set(e[n],"globalEval",!t||ke.get(t[n],"globalEval"))}function p(e,t,n,r,i){for(var o,s,a,u,l,p,d=t.createDocumentFragment(),h=[],g=0,v=e.length;v>g;g++)if((o=e[g])||0===o)if("object"===oe.type(o))oe.merge(h,o.nodeType?[o]:o);else if(Pe.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(He.exec(o)||["",""])[1].toLowerCase(),u=Fe[a]||Fe._default,s.innerHTML=u[1]+oe.htmlPrefilter(o)+u[2],p=u[0];p--;)s=s.lastChild;oe.merge(h,s.childNodes),s=d.firstChild,s.textContent=""}else h.push(t.createTextNode(o));for(d.textContent="",g=0;o=h[g++];)if(r&&oe.inArray(o,r)>-1)i&&i.push(o);else if(l=oe.contains(o.ownerDocument,o),s=c(d.appendChild(o),"script"),l&&f(s),n)for(p=0;o=s[p++];)Oe.test(o.type||"")&&n.push(o);return d}function d(){return!0}function h(){return!1}function g(){try{return G.activeElement}catch(e){}}function v(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)v(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=h;else if(!i)return e;return 1===o&&(s=i,i=function(e){return oe().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=oe.guid++)),e.each(function(){oe.event.add(this,t,i,r,n)})}function m(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function y(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function x(e){var t=_e.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function b(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(ke.hasData(e)&&(o=ke.access(e),s=ke.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)oe.event.add(t,i,l[i][n])}Ee.hasData(e)&&(a=Ee.access(e),u=oe.extend({},a),Ee.set(t,u))}}function w(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Le.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function T(e,t,n,r){t=J.apply([],t);var i,o,s,a,u,l,f=0,d=e.length,h=d-1,g=t[0],v=oe.isFunction(g);if(v||d>1&&"string"==typeof g&&!re.checkClone&&Be.test(g))return e.each(function(i){var o=e.eq(i);v&&(t[0]=g.call(this,i,o.html())),T(o,t,n,r)});if(d&&(i=p(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=oe.map(c(i,"script"),y),a=s.length;d>f;f++)u=i,f!==h&&(u=oe.clone(u,!0,!0),a&&oe.merge(s,c(u,"script"))),n.call(e[f],u,f);if(a)for(l=s[s.length-1].ownerDocument,oe.map(s,x),f=0;a>f;f++)u=s[f],Oe.test(u.type||"")&&!ke.access(u,"globalEval")&&oe.contains(l,u)&&(u.src?oe._evalUrl&&oe._evalUrl(u.src):oe.globalEval(u.textContent.replace(Xe,"")))}return e}function C(e,t,n){for(var r,i=t?oe.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||oe.cleanData(c(r)),r.parentNode&&(n&&oe.contains(r.ownerDocument,r)&&f(c(r,"script")),r.parentNode.removeChild(r));return e}function k(e,t){var n=oe(t.createElement(e)).appendTo(t.body),r=oe.css(n[0],"display");return n.detach(),r}function E(e){var t=G,n=Ue[e];return n||(n=k(e,t),"none"!==n&&n||(ze=(ze||oe("